软件构造系列学习笔记(1.2)————软件构造的质量目标

软件构造的质量目标

  1. 软件系统的质量属性
  2. 软件构造的五个关键质量目标

软件系统的质量属性

软件系统的质量属性又分为两部分,外部质量因素(External quality factors)以及内部质量因素(Internal quality factors),外部质量因素例如软件的运行速度或者易用性,在使用过程中都会被用户察觉到,因此外部质量因素影响用户。而内部质量因素例如模块化或者可读性则影响软件本身和它的开发者。两者相比较而言,毫无疑问外部质量因素是更为重要的,但是外部质量却取决于内部质量。下面对这两部分分别进行详细阐述。

外部质量因素

  • 正确性(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)等等,不一一细说了。


内部质量因素

内部质量因素有Source code related factors ,如代码行(LOC),循环复杂度等,以及Architecture-related factors ,如耦合度和聚合度等。内部质量因素主要表现在可读性(readability),易理解性(understandability),清晰度(clearness)以及规模(size)。两者关系而言,内部质量因素通常用作外部质量因素的部分度量。


质量属性之间的折中

俗话说:“鱼和熊掌不可兼得”,在各个质量属性之间,这句话也同样适用。考虑以下问题,经济性似乎常常与功能相抗衡;最佳效率需要完美适应特定的硬件和软件环境,这与便携性相反;及时性的压力可能会诱使我们使用“快速应用程序开发”技术,这些技术的结果可能不会有太多的可扩展性。

这里写图片描述

基于以上原因,正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来 。虽然需要折中,但“正确性”绝不能与其他质量因素折中。
尽管所有质量属性都很重要,但其中有四个是最重要的,它们是正确性和健壮性,保证了软件的可靠性,可扩展性和可复用性,保证了软件的模块化。


软件构造的五个关键质量目标

软件构造中有五个关键的质量目标,下面以图表形式进行一一说明。

  • 易于理解(Easy to understand)

    这里写图片描述

  • 开发成本低(Cheap for develop)

    这里写图片描述

  • 可应对变化(Ready for change)

这里写图片描述

  • 程序安全(Safe from bugs)

    这里写图片描述

  • 运行效率高(Efficient to run)

    这里写图片描述

以上就是本次所有的学习笔记。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值