分为外部质量因素和内部质量因素
外部质量因素 影响 用户
内部质量因素 影响 软件本身和它的开发者
外部质量取决于内部质量
五个关键质量目标
易于理解:优雅和漂亮的代码/可理解性
-随时准备更改:可维护性和适应性
-开发成本低:为重用而设计:可重用性
-安全的bug:健壮性
—高效运行:性能
外部
正确性
最重要的质量指标,是软件产品执行其规范所定义的准确任务的能力。也就是和规约定义的准确性
实现方法:
- 测试和调试
- 防御式编程:在写程序的时候就确保正确性typing and assertions
- 形式化方法:通过形式化验证发现问题
健壮性
针对异常情况的处理
健壮性是对正确性的补充
正确性:软件的行为要严格的符合规约中定义的行为
健壮性:出现规约定义之外的情形的时候,软件要做出恰当的反应,出现异常时不要“崩溃”
normal”和“abnormal”是主观而非客观
未被specification覆盖的情况即为“异常情况”,“异常”,取决于spec的范畴
可扩展性
对软件的规约进行修改,是否足够容易?
为什么要扩展:应对变化
传统的方法没有充分考虑到变更,而是依赖于软件生命周期的理想视图,其中初始分析阶段冻结了需求,过程的其余部分致力于设计和构建解决方案
提高可扩展性有两个基本原则:
- 简约主义设计
- 分离主义设计:每个模块尽量独立
可复用性
一次开发,多 次使用
发现共性
Efficiency
性能毫无意义,除非有足够的正确性
对性能的关注 要与 其他质量属性进行折中
过度的优化导致软件不再适应变化和复用
及时性
用户需要时或之前发布的能力
内部
源代码相关因素,比如代码行数、循环复杂度
架构相关的因素:内聚、耦合
可读性…
怎么权衡
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设 计决策和标准明确的写下来
虽然需要折中,但“正确性”绝不能与其他质量因素折中。