目录
总体概述
软件构造过程中应考虑的重要质量指标
如果达不到期望的质量目标,会有什么后果
有哪些面向质量指标的软件构造技术
1 外部质量:外部质量因素影响用户
2 内部质量:内部质量因素影响软件本身和它的开发者
3 外部质量取决于内部质量
4 这两因素间的折中
(一)外部因素
什么是外部因素
外部质量是用户能够感受到的,影响用户使用的,例如速度、易用性。是用户可以真切体验到的一些信息。
正确性
含义:按照预先定义的“规约”执行,正确性是最重要的质量指标
正确性是软件产品能够正确的执行任务的能力,是首要的质量目标。保证正确性的途径是有条件的。
一个软件系统设计多个层面,所以不可能仅仅靠每个构件和属性的正确性来保证整体的正确性,各层之间是相互依赖的。
假定一个软件系统是分层开发的,每层都要确保自己是正确的,同时假定其调用的低层也是正确的。
1 测试和调试:发现不正确、消除不正确
2 像类型化/静态类型的检查(type、assert)的防御性编程以防患于未然
3 正式方法:数学方法验证(涉及到软件检验相关的研究生课程与科研领域)
健壮性
含义:健壮性是软件系统对异常情况做出适当反应的能力。
稳健性补充了正确性,针对异常情况的处理
正确性解决了系统在其规范所涵盖的情况下的行为;而健壮性描述了在该规范之外发生的事情。
健壮性是确保如果出现此类情况,系统不会导致灾难性事件;它应生成适当的错误消息,干净地终止执行,或进入所谓的“优雅降级”模式。
健壮性同异常情况相关,异常或非异常取决于程序的规格说明,异常情况是程序的规格说明中没有涉及的部分。判断是否异常是异常的标准,不取决于客观的正确标准,而取决于程序的规格说明。即异常是由spec所决定的
可扩展性
含义:对软件的规约进行修改,是否足够容易?可扩展性是指软件易于调整以适应变化的能力。
可扩展性同规模密切相关,越大越难以扩展。
软件是易变的,需要可扩展性。
传统方法最初冻结需求,假设没有变化,因此难以适应变化
两个提高可扩展性的原则——简约主义设计与分离主义设计设计:
简单的体系结构总是比复杂的体系更容易适应变化。
模块自治性越强,变化时对其余模块影响 越小
复用性
含义:一次开发,多次使用
observe that software systems often followsimilar patterns.
A reusable software element will be applicable to many different developments.
兼容性
含义:兼容性是指软件元素易于与其他的组合不同的软件系统之间相互可容易的集成。
因为我们的软件并非运行在真空中,但难点在于不同的软件有不同的设定。所以,解决兼容性的关键是标准性,例如规定文件格式、数据结构、用户接口等。更通用的方法是通过协议来实现更通用的兼容性。
The key to compatibility is standardization,especially standard protocols. 标准化
高效性
含义:效率是软件系统对硬件资源尽可能少的需求的能力
性能毫无意义,除非有足够的正确性即在保证正确性的前提下才可以谈高效性。对性能的关注要与其他质量属性进行折中,过度的优化导致软件不再适应变化和复用。
对效率不宜过早优化。
可移植性
含义:可移植性是指便于将软件产品转移到各种硬件和软件环境。
软件需要经常在不同的操作系统,环境下运行,只有保证可移植性才能使使用的场景更多,因而竞争力更强。
易用性
含义:用户可以轻松掌握软件的使用,也包括安装、运行和监控的容易度 。
既方便初学者入门,也不影响熟练的用户直接使用。一个关键是结构要简洁,理解用户,换位思考,站在用户的角度设计软件。
功能性
含义:通过不断的修改与更新,增加丰富的功能
增加功能的同时也要防止陷入“蠕变特性”,即程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其 结果是程序极为复杂、不灵活、占用过多的磁盘空间 。过多的新功能容易带来一 致性的缺失影响易用性 。
在质量提升技术的帮助下,可以在整个项目中保持质量水平不变,而不仅仅 是功能性。
通常设计时,首先实现一小部分功能并保证各种质量目标,逐渐增加功能并继续保证质量目标。每增加一小点功能,都确保其他质量属性不受到损失
及时性
含义:及时性是指软件系统能够在用户需要时或者需要需要之前发布。
其他质量目标
可验证性:是否易于验证
完整性:软件系统保护其各种组件(程序和数据)免受未经授权的 访问和修改的能力。
可修复性:便于修复软件的缺点
经济性:同及时性相伴,是系统能够按照其分配的预算或低于预算完成的能力。
(二)内部质量因素
简单几个因素
圈复杂度:用来衡量一个模块判定结构的复杂程度 。
耦合度:设计中追求高内聚和低耦合。
可读性、易理解性、清晰度、复杂度、体积
内部质量因素通常用作外部质量因素的部分度量。
(三)在不同质量目标之间权衡
Tradeoff between quality properties折中
如何在不引入各种影响易用性的保护措施的情况下获得完整性?
经济性与功能性常常发生冲突。
最佳效率要求完全适应特定的硬件和软件环境,这会可移植性和对标准的遵守,从而影响可重用性。
及时性可能会驱使我们进行敏捷开发,但结果是可能会影响软件的可扩展性。
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来。
虽然需要折中,但“正确性”绝不能与其他质量因素折中。
Key concerns of software construction关键因素
(1)正确性和健壮性:可靠性
系统的软件构建方法
形式化的软件规格说明
在开发过程中自动检查
更好的语言机制
一致性检查工具
(2)可扩展性和可重用性:模块化
How OOP improves quality
1 正确性:封装,去中心化
2 稳健性:封装,错误处理
3 可扩展性:封装,信息隐藏
4 可重用性:模块化,组件,模型、模式
5 兼容性:标准化模块和接口
6 可移植性:信息隐藏,抽象
7 易用性:GUI组件,框架
8 效率:可重用组件
9 及时性:建模、重用
10 经济性:重用
11 功能性:可扩展性
(四)五个软件构造的关键目标
优雅美丽的代码→易于理解
重用设计→开发成本低 ——>Chapter 4 Reusability
低复杂度→易于修改和扩展——>Chapter 5 Extendibility/Maintainability
健壮性和正确性→避免BUG——>Chapter 6Robustness/Correctness
性能和效率→高效率运行