外部和内部质量因素:
1.外部质量因素 影响 用户
2.内部质量因素 影响 软件本身和它的开发者
3.外部质量取决于内部质量
正确性是软件产品执行它们的准确任务的能力,这是由它们的规范定义的。
正确性是最重要的质量指标。
假设软件系统是分层开发的。
每一层都保证它的正确性,前提是它的下层也是正确的。
测试和调试:发现不正确、消除不正确
防御式编程:在写程序的时候就确保正确性
形式化方法:通过形式化验证发现问题
健壮性:针对异常情况的处理
健壮性是对正确性的补充
正确性:软件的行为要严格的符合规约中定义的行为
健壮性:出现规约定义之外情形的时候,软件要做出恰当的反应,出现异常时不要“崩溃”
鲁棒性是关于“异常情况”,这意味着正常和异常情况下的概念总是相对于某一规范“正常”和“不正常”。
——未被specification覆盖的情况即为“异常情况”
——所谓的“异常”,取决于spec的范畴
可扩展性是减轻软件产品适应变化的规范。
规模越大,扩展起来越不容易。
扩展的目的:应对变化
提高可扩展性有两个基本原则:
简约主义设计;
分离主义设计。
为许多不同应用程序的构造服务的软件元素, 一次开发,多次使用。
对可重用性的需求来自于这样的观察:软件系统经常遵循类似的模式;应该有可能利用这一共性,避免对以前遇到的问题重新发明解决方案。(发现共性)
可重用的软件元素将适用于许多不同的开发。
兼容性指不同的软件系统之间相互可容易的集成。
兼容性很重要,因为我们不开发软件元素在真空:他们需要相互作用。
难点:不同软件有不同的设定/规定
兼容性的关键在于设计并达成协议程序间通信的标准化约定。
效率是指软件系统对硬件资源的要求越少越好,例如处理器时间、内部和外部存储器占用的空间、通信设备的带宽等。
性能毫无意义,除非有足够的正确性。
对性能的关注要与其他质量属性进行折中。
过度的优化导致软件不再适应变化和复用。
可移植性指软件可方便的在不同的技术环
境之间移植。
可移植性不仅解决了物理硬件的变化,而且更普遍地解决了硬件-软件机器的变化,即我们真正编程的机器,它包括操作系统、窗口系统(如果适用的话)和其他基本工具。
易用性指容易学、安装、操作、监控,不同背景和资格的人可以轻松地学习使用软件产品并将其应用于解决问题。
给用户提供详细的指南。
结构简洁,知道用户的需求。
功能性是系统提供的可能性的范围。
程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂、不灵活、占用过多的磁盘空间。
损失的一致性;忽视整体质量。
每增加一小点功能,都确保其他质量属性
不受到损失。
及时性软件系统的能力是在用户需要时释放或之前。
一个伟大的软件产品如果出现得太晚,可能会完全错过它的目标。
可验证性是易于准备验收程序,特别是测试数据,和检测故障和跟踪程序错误在验证和操作阶段。
完整性是软件系统的能力来保护他们的各种组件(程序、数据)对未经授权的访问和修改。(避免出现不一致)
可修复性是促进缺陷的修复的能力。
经济性是及时性的伴侣,是一个系统的能力或低于其完成分配的预算。
源代码相关的因素,例如行代码(LOC)、圈复杂度等;
与体系结构相关的因素,例如耦合、内聚等;
可读性;
易懂性;
清晰度;
代码体量。
经济似乎经常与功能发生冲突。
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来。
虽然在质量因素之间进行权衡是必要的,但有一个因素比其他因素突出:正确性。
正确性和健壮性:可靠性
可扩展性和可重用性:模块化
正确性:封装、分散
健壮性:封装、错误处理
可扩展性:封装,信息隐藏
可重用性:模块化、组件、模型、模式
兼容性:标准化模块和接口
可移植性:信息隐藏、抽象
易用性:GUI组件、框架
效率:可重用的组件
及时性:建模、重用
经济性:重复利用
功能性:可扩展性
优雅优美的代码——>容易理解,易懂
设计/重用——>廉价的开发
低复杂度——>易于更改,易于扩展
鲁棒性和正确性——>安全无bug,不容易出错
性能和效率——>运行高效
——外部VS内部质量因素
——重要的外部质量因素
——质量因素之间的权衡
——容易理解:优雅和美丽的代码/易懂
——易于进行更改:可维护性和适应性
——开发成本低:为重用而设计:可重用性
——避免bug:健壮性
——高效运行:性能