【软件构造】课件精译(二)软件构造的质量目标

一、本章概述

1、软件系统的质量特性

外部 vs. 内部质量因素
重要的外部质量因素
这两因素间的折中

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

易于理解、便于修改、重用性高、健壮性高、高效运行

3、总结

二、本章目标

了解软件构造关心的质量因素
理解质量目标无法完成的后果
了解课程中每个质量因素对应的构造技术

三、正文

1、软件系统的质量特性

外部和内部的质量因素
外部质量是用户能够感受到的,影响用户使用的,例如速度、易用性。
内部质量影响使用代码的相关人员,影响软件本身和开发者。
对于用户来讲,尽管只有外部因素重要,但实现外部因素的关键是实现内部因素。
(1)外部质量因素
正确性
正确性是软件产品能够正确的执行任务的能力,是首要的质量目标。保证正确性的途径是有条件的。
一个软件系统设计多个层面,所以不可能仅仅靠每个构件和属性的正确性来保证整体的正确性,各层之间是相互依赖的。
假定一个软件系统是分层开发的,每层都要确保自己是正确的,同时假定其调用的低层也是正确的。
保证正确性的途径:测试和Debug
像类型化/静态类型的检查(type、assert)的防御性编程以防患于未然
正式方法:数学方法验证(涉及到软件检验相关的研究生课程与科研领域)
健壮性
健壮性是软件系统对异常情况做出适当反应的能力。
稳健性补充了正确性。
正确性解决了系统在其规范所涵盖的情况下的行为;
健壮性描述了在该规范之外发生的事情。
健壮性是确保如果出现此类情况,系统不会导致灾难性事件;它应生成适当的错误消息,干净地终止执行,或进入所谓的“优雅降级”模式。
健壮性同异常情况相关,异常或非异常取决于程序的规格说明,异常情况是程序的规格说明中没有涉及的部分。
判断是否异常是异常的标准,不取决于客观的正确标准,而取决于程序的规格说明。
可扩展性
可扩展性是指软件易于调整以适应变化的能力。可扩展性同规模密切相关,越大越难以扩展。
软件是易变的,需要可扩展性。
传统方法最初冻结需求,假设没有变化,因此难以适应变化
两个提高可扩展性的原则:
简单的体系结构总是比复杂的体系更容易适应变化。
模块自治性越强,变化时对其余模块影响 越小。
(这几个部分课件上都翻译好了,无耻的照抄过了
重用性
软件经常遇到相似的模式,利用共性,避免重复实现。
(课件里一些部分有些重复,也不是特别关键,就不放上来了
兼容性
兼容性是指软件元素易于与其他的组合。因为我们的软件并非运行在真空中,但难点在于不同的软件有不同的设定。所以,解决兼容性的关键是标准性,例如规定文件格式、数据结构、用户接口等。更通用的方法是通过协议来实现更通用的兼容性。
效率
效率是软件系统对硬件资源尽可能少的需求的能力,但前提是软件的正确性,并且需要与其他目标进行权衡。
可移植性
可移植性是指便于将软件产品转移到各种硬件和软件环境。
易用性
用户可以轻松掌握软件的使用,也包括安装、运行和监控的容易度 。既方便初学者入门,也不影响熟练的用户直接使用。一个关键是结构要简洁,理解用户,换位思考,站在用户的角度设计软件。
功能性
增加功能的同时也要防止陷入“蠕变特性”,即程序设计中一种不 适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其 结果是程序极为复杂、不灵活、占用过多的磁盘空间 。过多的新功能容易带来一 致性的缺失,影响易用性 。
在质量提升技术的帮助下,可以在整个项目中保持质量水平不变,而不仅仅 是功能性。
通常设计时,首先实现一小部分功能并保证各种质量目标,逐渐增加功能并继续保证质量目标。
在这里插入图片描述
及时性
及时性是指软件系统能够在用户需要时或者需要需要之前发布。
其他质量目标
可验证性:是否易于验证
完整性:软件系统保护其各种组件(程序和数据)免受未经授权的 访问和修改的能力。
可修复性:便于修复软件的缺点
经济性:同及时性相伴,是系统能够按照其分配的预算或低于预算完成的能力。

(2)内部质量目标

圈复杂度:用来衡量一个模块判定结构的复杂程度 。
耦合度:设计中追求高内聚和低耦合。
可读性、易理解性、清晰度、复杂度、体积
内部质量因素通常用作外部质量因素的部分度量。

(3)在质量属性间权衡

如何在不引入各种影响易用性的保护措施的情况下获得完整性?
经济性与功能性常常发生冲突。
最佳效率要求完全适应特定的硬件和软件环境,这会可移植性和对标准的遵守,从而影响可重用性。
及时性可能会驱使我们进行敏捷开发,但结果是可能会影响软件的可扩展性。
在这里插入图片描述
开发人员通常都是隐式地进行平衡,不会刻意的在多个方案中均衡,效率往往成为主导因素。 真正的软件工程方法中,质量目标应明确指出 。
另外,正确性应该放在首位。
软件构造的关键问题
所有以上的质量都很重要,但是在当今软件工业中,一下四条较为突出:
正确性健壮性:可靠性
系统的软件构建方法
形式化的软件规格说明
在开发过程中自动检查
更好的语言机制
一致性检查工具
可扩展性可重用性:模块化
面向对象如何提升质量
正确性:封装,去中心化
稳健性:封装,错误处理
可扩展性:封装,信息隐藏
可重用性:模块化,组件,模型、模式
兼容性:标准化模块和接口
可移植性:信息隐藏,抽象
易用性:GUI组件,框架
效率:可重用组件
及时性:建模、重用
经济性:重用
功能性:可扩展性

2、五个软件构造的关键目标

优雅美丽的代码→易于理解
重用设计→开发成本低
低复杂度→易于修改和扩展
健壮性和正确性→避免BUG
性能和效率→高效率运行

易于理解性
在这里插入图片描述

重用性
在这里插入图片描述

可维护性和适应性
在这里插入图片描述

健壮性
在这里插入图片描述

性能
在这里插入图片描述
(这里应该是性能分析,而不是表现分析

三、总结

软件系统的质量属性
内部、外部质量因素
重要的外部质量因素
质量因素间的权衡
软件构造的五个关键目标
易于理解、易于改变、开发成本低、避免BUG、高效运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值