软件的质量指标大体分为外部质量与内部质量。
其中外部质量主要面向客户端及用户而内部质量主要面向程序员以及代码本身。
外部质量
①正确性
按照预先定义的“规约”执行,至高无上的质量指标。
需要在软件系统的每一层保证自己的正确性,同时假设其下层是正确的。
通过测试和调试、防御式编程、形式化方法等手段保证正确性
②健壮性
针对异常情况(取决于spec的范畴)的处理,出现异常时不要“崩溃”。
出现规约定义之外的情形的时候,软件要做出恰当的反应,是对正确性的补充。
未被specification覆盖的情况即为“异常情况”
③可扩展性
两种原则:简约主义设计,分离主义设计
④可复用性
发现共性,一次开发,多 次使用
不要不断重复自己写过的东西,不要重复造轮子
⑤兼容性
不同的软件系统之间相互可容易的集成
需要保证设计的同构性:
-标准统一的文件格式
-标准统一的数据结构
-标准统一的用户接口
-标准统一的访问协议
⑥性能
性能是软件系统对硬件资源尽可能少地提出要求的能力,例如处理器时间、内部和外部存储器占用的空间、通信设备中使用的带宽。
性能毫无意义,除非有足够的正确性
对性能的关注要与其他质量属性进行折中
过度的优化导致软件不再适应变化和复用
⑦可移植性
软件可方便的在不同的技术环境(硬件、操作系统)之间移植’
⑧易用性
容易学、安装、操作、监控
给用户提供详细的指南
结构简单,了解用户。
⑨功能性
功能性是系统提供的可能性的程度。
程序设计中一种不适宜的趋 势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程 序极为复杂、不灵活、占用过多的磁盘空间
每增加一小点功能,都确保其他质量属性 不受到损失
⑩及时性
软件系统在用户需要时或之前发布的能力。
内部质量
源代码相关因素,如代码行数(loc)、循环复杂性等
体系结构相关因素,如耦合、内聚等
可读性
可理解性
清晰度
大小