1. 软件系统的质量指标包括:外部质量因素和内部质量因素。
外部质量因素:使用是否简易,速度性能是否优秀等,其影响到
的是用户。而内部质量因素影响到的是软件本身和开发者。虽然
在结果上看,只有外部质量因素重要,但外部质量因素是取决于
内部质量的。
2. 外部质量因素的种类:
(1) 正确性(correctness)。关注有关软件是否按照预先定义
的“规约”执行。是至高无上的质量指标。
确保正确性的方法:
a. 在软件系统中进行分层,每一层都保证自己的正确性,同时假
设其下层是正确的。其与可复用性密切关联。
b. 测试和调试,发现不正确,消除不正确。这与健壮性密切关联
c. 防御性编程,在写程序时就确保正确性。其与健壮性相关。
d. 形式化方法:通过形式化验证发现问题。可通过形式语言(研
究生课程)来保证这一点。
(2) 健壮性(Robustness)。针对异常情况进行处理。
-健壮性是对正确性的补充:正确性要求软件的行为要严格地符合
规约中定义的行为。而健壮性要求在出现规约定义之外情形的时
候,软件要做出恰当的反应。
在程序出现异常时,健壮性要保证程序不“崩溃”。
这就关系到后续学习的异常处理机制。
健壮性所言的“正常”与“不正常”是主观的而非客观的。
- 未被规约覆盖的情况即为“异常情况”
- 所谓的"异常",取决于spec的范畴
(3) 可扩展性(Extendibility)。关注的是:对软件的规约进行
修改,是否足够容易。
软件系统的规模越大,扩展起来越不容易。当传统的方法不足以
解决新的,变化的问题时,就要考虑对其进行扩展。
增强可扩展性的两个原则:
a. 简约主义设计(Design simplicity)。
b. 分离主义设计(Decentralization)。
(4) 可复用性(Reusability)。关注的是:软件内容一次开发,
多次使用,而适用于不同应用的能力。要从不同软件系统中发
现共性,提取共性。
-Don't Repeat yourself:
-Don't Re-invent the wheel:
(5) 兼容性(Compatibility)。关注的是:不同软件系统之间的
相互可容易的集成。一个软件系统的开发不可能实在真空中进行
的,其与其他系统一定存在交互和关联。
要保证兼容性,就要保持设计的同构性,即要进行标准化:
a. 标准化文件格式。
b. 标准化数据结构。
c. 标准化用户交互。
(6) 性能(Efficiency)。例如:软件系统占用的时间,空间(例
如内部与外部存储,以及设备之间交流的带宽)。这些都可以度
量软件系统的性能指标。
几个需要注意的点:
(a)正确性是前提,如果不能保证正确性,性能将毫无意义。
(b)对性能的关注要与其他质量属性进行折中。
(c)过度的优化将导致软件不再适应变化和复用。
(d)要避免过早的优化。
(7) 可移植性(Compatibility)。关注的是:软件是否可以方便
地在不同的技术环境之间移植。不仅指硬件,还指操作系统等。
(8) 易用性(Ease of use)。关注的是:软件对于不同背景和水
平的来说,是否容易学习,安装,操作,监控。
要给用户提供详细的指南,要简化结构,了解使用者。
(9) 功能性(Functionality)。程序设计中一种不适宜的趋势:
即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程
序极为复杂,不灵活,占用过多的硬盘空间。
(10+)还有及时性(Timeliness),可验证性(Verifiability),
完整性(Integrity),可修复性(Repairability),经济
性(Economy)等等。
3. 不同质量因素间的折中(Tradeoff)
(1) 由于开发者不可能将所有质量因素全部满足,因此要进行折
中。在正确的软件开发过程中,开发者应该将不同的质量因素之
间如何做出折中的设计决策和标准明确的写下来。
(2) 虽然需要折中,但“正确性”绝不能与其他质量因素折中。
(3) 在所有质量因素中,最重要的质量因素:
a. 正确性与健壮性 : 即可靠性。
b. 可扩展性与可复用性:即模块化。
4. OOP改进质量指标的方法:
5. 从八个视图,看软件构造的五个关键质量目标:
(1)Understandability
(2)Reusability
(3)Maintainability 和 Adaptability
(4)Robustness
(5)Performance