外部质量因素

正确性(Correctness)
正确性是软件产品按照预先定义的“规约”(specification)执行其任务的能力,对于软件开发者来说,正确性是至高无上的质量指标。保证软件的正确性有几种方法。第一种是分层(Conditional),将整个软件有层次性地区分开来,每一层保证自己的正确性,同时假设其下层是正确的。第二种是测试和调试(Testing and debugging),其目的在于发现不正确,消除不正确。第三种是防御式编程(Defensive programming),在写程序的时候就确保正确性。第四种是形式化方法(Formal approach),通过形式化验证发现问题,用数学的方法证明软件的正确性。
健壮性( Robustness)
健壮性是软件系统针对异常情况处理的能力,在我看来,它与正确性的关系是相辅相成的。正确性要求软件的行为要严格符合规约中的定义,而一旦出现规约定义之外的情形的时候,软件就要做出恰当的行为,当一个软件出现异常时不崩溃,说明它才是一个有健壮性的软件。下图可说明两者关系。
可扩展性(Extendibility)
可扩展性是指当对软件的规约进行修改时,软件能否容易地适应要求的变化。我们需要可扩展性,因为在所有软件的基础上存在一些人为现象,因此需求常常会发生变化。有两条原则对于提高可扩展性至关重要,第一条是简约主义设计(Design simplicity),因为规模越大,扩展起来就越不容易,往往某一处进行改动,其他地方也会受到影响。第二条是分离主义设计(Decentralization),软件系统的模块越独立,简单改变只会影响一个模块或少量模块,而不会触发整个系统变化的连锁反应的可能性就越高。

可复用性(Reusability)

可复用性是软件中的单元为构建许多不同应用程序提供服务的能力。在软件构造的过程中我们一直要遵循的一条原则就是一次开发,多次使用。通过观察,软件系统通常遵循相似的模式; 应该尽可能利用这种共性,避免重新解决以前遇到的问题。
兼容性(Compatibility)
兼容性是指不同的软件系统之间相互是否可容易地集成。兼容性很重要,因为我们不在“真空”中开发软件:他们需要互相交互。但是软件往往在互相交互方面遇到困难,因为他们对一些假设做出了相互矛盾的解释。一个例子是许多操作系统支持的各种不兼容的文件格式。兼容性的关键是要保持设计的同构性(homogeneity of design),以及标准化,特别是标准协议,例如标准化文件格式,标准化数据结构,标准化用户接口等等。
性能(Efficiency)
性能是软件系统对硬件资源尽可能少的要求的能力,例如处理器时间,内部和外部存储器中占用的空间,通信设备中使用的带宽。需要注意的是,性能毫无意义,除非有足够的正确性。
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. ————–Donald Knuth
因此对性能的关注要与其他质量属性进行折中,过度的优化会导致软件不再适应变化和复用。

可移植性(Portability)

可移植性是软件是否可方便地在不同的技术环境之间移植。可移植性不仅涉及物理硬件,更涉及我们真正编程的机器,包括操作系统,窗口系统以及其他基本工具。

易用性(Ease of use)

易用性是指是指各种背景和资格的人能否可以轻松学会使用软件产品并将其用于解决问题,即软件是否容易学,容易安装,容易操作,容易监控。一个具有易用性的软件一般满足结构简单以及了解用户两个特点。

功能(Functionality)

功能是软件系统提供的可能性范围。但程序设计中有一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂、不灵活、占用过多的磁盘空间 。可能出现软件由于添加新功能而导致一致性的丧失,从而影响其易用性。更严重的是过分关注功能而忘记其他品质(忽视整体质量)。下图可说明这种情况。

因此,我们需要遵循的一条原则是每增加一小点功能,都确保其他质量属性不受到损失。

及时性( Timeliness )

及时性是软件系统在用户需要时或之前发布的能力。一个出现得太晚的优秀软件产品可能会完全错失它的目标群体。

其他属性(Other qualities)

其他属性还有可验证性(verifiablity),完整性(integrity),可修复性(repairablity)以及经济性(economy)等等,不一一细说了。

你可能感兴趣的:(外部质量因素)