1-2 软件构造的质量目标

课件翻译2:
本节课程目的:
1.To know quality factors to be cared in software construction
软件构造过程中应考虑的重要质量指标
▪ To understand the consequences if quality objectives cannot be achieved 如果达不到期望的质量目标,会有什么后果
▪ To know what construction techniques are to be studied for each quality factor in this course 有哪些面向质量指标的软件构造技术

目录:
软件系统的质量属性
-外部质量因素与内部质量因素
-重要的外部质量因素
-质量因素之间的权衡:折中

“不同因素之间的妥协和取舍”

▪ 软件构建的五个关键质量目标
-易于理解:优雅优美的代码/可理解性
-随时可更改:可维护性和适应性 谨记软件需要适应变化
-开发成本低:为重用而设计:复用性降低开发成本
-避免错误:健壮性 保证软件不崩溃
-运行效率:性能

内外部质量因素
▪ 外部质量因素:诸如速度或易用性等质量,其在软件产品中的存在或不存在可由用户检测到。
▪ 适用于软件产品的其他特性,例如模块化或可读性,是内部因素,只有能够访问实际软件文本的开发人员才能察觉。
▪ 最后,只有外部因素才是重要的。
▪ 但是,实现这些外部因素的关键在于内部因素:为了让用户享受到可见的质量,设计人员和实现人员必须应用内部技术来确保隐藏的质量。

总结:外部质量因素影响用户 内部质量因素影响软件本身和其开发者 外部质量取决于内部质量

(1) 外部质量因素*

1:正确性
▪ 正确性是软件产品执行其规范所定义的精确任务的能力。
至少符合软件规格说明书里的要求
▪ 正确是最重要的质量指标
假设软件系统是分层开发的。每一层在其下层也是正确的前提下保证其正确性。分层对于保证正确性是必不可少的。

确保正确性的方法:
1.测试与调试:发现不正确、消除不正确
现阶段保证软件质量的必要手段
2.防御性编程,如键入和断言,旨在帮助构建从一开始就正确的软件,而不是将其调试为正确的软件。
3.形式化方法: “check”, “guarantee” 和 “ensure” -用于形式化程序规范和验证的数学技术
*该方法是相对完美的保证软件正确的方法,但对数学基础要求较高。而且会导致开发周期较长。

2.稳健性/健壮性
健壮性是软件系统对异常情况做出适当反应的能力,是对正确性的补充。正确性是指系统在其规范所涵盖的情况下的行为;稳健性是指在该规范之外发生的事情的特征。出现规约定义之外情形的时候,软件要做出恰当的反应
▪ 稳健性是确保如果出现这种情况,系统不会导致灾难性事件;它应该生成适当的错误消息,干净地终止其执行,或进入所谓的“优雅降级”模式,保证出现异常的时候软件不会崩溃

稳健性与“异常情况”有关,这意味着“正常情况”和“异常情况”的概念总是与某一规范“正常”和“异常”有关——异常情况只是规范未涵盖的情况——如果扩大规范,以前异常的情况将变为正常-即使它们与您不希望发生的错误用户输入等事件相对应

异常:程序规格说明中没有涉及的部分

•“正常”在这个意义上并不意味着“期望”,而只是“在软件设计中计划”。
•虽然起初错误的输入应被称为正常情况似乎是自相矛盾的,但任何其他方法都必须依赖主观标准。

判断是否是异常的标准,不取决于客观的正确标准,而取决于程序的规格说明。

3.可扩展性(Extendibility)
可扩展性与软件的规模大小有很大关系,所以一定要考虑软件异变的特点。
可扩展性:是使软件产品易于适应规范的变化。
▪ 可扩展性的问题是一个规模问题,因为小程序的改变通常不是一个困难的问题;但是随着软件的发展,它变得越来越难适应。
–一个大型软件系统在维护者看来,往往是一个巨大的纸牌屋,在里面抽出任何一个元素都可能导致整个建筑倒塌。
▪ 我们需要可扩展性,因为在所有软件的基础上都存在着一些人类现象,因此变化无常
–传统的方法没有充分考虑到变化,而是依赖于软件生命周期的理想视图,在该视图中,初始分析阶段冻结了需求,其余的过程用于设计和构建解决方案。

提高可扩展性有两个基本原则:
1.简约设计主义:简单的体系结构总是比复杂的体系结构更容易适应变化。
2.分离设计主义:模块的自治性越强,一个简单的更改只影响一个模块或少量模块的可能性就越高,而不是触发整个系统的更改连锁反应。

4:可重用性
可重用性是指软件元素为许多不同应用程序的构建服务的能力。
对可重用性的需求来自于软件系统通常遵循类似模式的观察;
应该可以利用这一共性,避免对以前遇到的问题重新设计解决方案。
可重用的软件元素将适用于许多不同的开发。
不要重复你自己(DRY)Don’t Repeat Yourself (DRY)
不要重复造轮子 Don’t Re-invent the Wheel

5.兼容性(Compatibility)
是将软件元素与其他元素结合起来的容易程度。
▪ 兼容性很重要,因为我们不在真空中开发软件元素:它们需要相互作用。
▪ 但它们经常难以互动,因为它们对其他地方的看法相互矛盾。不同的软件有不同的标准
–例如,许多操作系统支持多种不兼容的文件格式。只有当文件格式兼容时,程序才能直接使用另一个结果作为输入。

兼容性的关键在于设计的同质性,以及程序间通信的标准化约定。 ▪ 方法包括:
–标准化的文件格式,如在Unix系统中,每个文本文件只是一个字符序列。
–标准化数据结构,如在Lisp系统中,所有数据和程序都由二进制树(在Lisp中称为列表)表示。
–标准化的用户界面,如各种版本的Windows、OS/2和MacOS,所有工具都依赖于一个单一的范例来与用户通信,基于标准组件,如Windows、图标等。
▪ 通过定义由软件操作的所有重要实体的标准化访问协议,可以获得更一般的解决方案。

兼容性的关键是标准化,尤其是标准协议。
制定标准需要能适应多种情况,是解决兼容性的关键点

6.效率
▪ 效率是指软件系统对硬件资源(如处理器时间、内部和外部存储器所占空间、通信设备所用带宽)提出尽可能少的要求的能力。
▪ 如果软件不正确,效率并不重要(“不要担心它有多快,除非它是正确的”)。
–对效率的关注必须与其他目标(如可扩展性和可重用性)相平衡;
–过度的优化导致软件不再适应变化和复用
▪ 算法、I/O、内存管理等。
计算正确性的抽象概念vs优化性能的具体实现
“过早优化是万恶之源”

7:可移植性
▪ 可移植性是将软件产品轻松地转移到各种硬件和软件环境中。 ▪ 可移植性不仅解决了物理硬件的变化,而且更广泛地解决了硬件软件机器的变化,包括 the operating system, the window system(如果适用)和其他基本工具。

8:易用性Ease of use
▪易用性是指各种背景和资历的人可以学习使用软件产品和应用它们来解决问题,包括易于安装,操作和监控。
▪如何向新手用户提供详细的指导和解释,而不是打扰那些只想直接进入业务的专家用户。
▪结构简单—
一个设计良好的系统,建立了根据一个清晰的、深思熟虑的结构,往往会比一个混乱的更容易学习和使用。
▪了解用户—
一个好的设计师必须努力了解系统的用户群体。
站在非专业人员的角度上去考虑如何使软件更易用。

9: 功能性Functionality
▪ 功能性是指系统提供的可能性的范围。
▪ Featurism (often “creeping featurism”) 程序设计中一种不适宜的趋 势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程 序极为复杂、不灵活、占用过多的磁盘空间
–较容易的问题是,添加新功能可能会导致一致性的丧失,从而影响其易用性。众所周知,用户抱怨一个产品的新版本所有的“bells and whistles”都让它变得异常复杂。
–较困难的问题是避免过于关注特性而忘记其他特性(忽略整体质量)。
功能性可能严重影响易用性
在这里插入图片描述
Osmond的建议(颜色曲线)是在OO开发的质量增强技术的帮助下,在整个项目中除了功能之外的所有方面都保持质量水平不变。▪ 你只需要在可靠性、可扩展性等方面不妥协:拒绝继续使用新功能,直到你对已有的功能满意为止。
从一小部分考虑了所有质量因素的关键特性开始。
在开发过程中逐步增加功能,保证与关键功能相同的质量。

10:及时性
▪ 及时性是软件系统在用户需要时或之前发布的能力。
▪ 一个很好的软件产品,如果出现得太晚,可能会完全达不到目标。

10++.其他因素
▪ 可验证性(Verifiability):是指在验证和运行阶段,易于编制验收程序,特别是试验数据,以及检测故障和跟踪错误的程序。
▪ 完整性(Integrity)是软件系统保护其各种组件(程序、数据)免受未经授权的访问和修改的能力。
▪ 可修复性(repair ability)是促进缺陷修复的能力。
▪ 经济性(economic)是及时性的同伴,一个系统在其指定预算内或低于该预算完成的能力。

(2) 内部质量因素

内部质量因素
▪ 源代码相关因素,如代码行(LOC)、圈复杂度(一个模块结构的复杂程度)等
▪ 与架构相关的因素,如耦合、内聚等
设计中追求高内聚和低耦合,耦合是模块和模块之间的交互,内聚是指模块自身的独立性。
▪ 可读性
▪ 可理解性
▪ 清晰
▪ 大小
内部质量因素通常用作外部质量因素的部分测量

(3) 质量属性之间的权衡

质量属性之间的权衡 —折中
▪ 如果不引入各种各样的保护措施,将不可避免地妨碍易用性,如何才能获得完整性呢?
经济性似乎经常与功能性斗争。
▪ 最佳的效率需要对特定的硬件和软件环境进行完美的适应,这与可移植性相反,并且需要对规范进行完美的适应,在规范中,可重用性推动解决比最初给出的问题更普遍的问题。
时效性的压力可能会诱使我们使用“快速应用程序开发”技术,其结果导致可能没有太大的可扩展性

完整性vs易用性
经济性vs功能性
效率vs可移植性
效率vs可重用性
经济性vs可重用性
时效性vs可扩展性

开发人员需要做出权衡。
–很多时候,开发人员都是含蓄地做出这些权衡,而不花时间检查所涉及的问题和各种可用的选择,效率往往是这种沉默决策的主导因素。
一个真正的软件工程方法意味着努力清楚地陈述标准并有意识地做出选择。
– ▪ 虽然质量因素之间的权衡是必要的,但其中有一个因素最为突出:正确性

–从来没有任何理由为了效率等其他问题而牺牲正确性。–如果软件不执行它的功能,其余的都是无用的。
虽然需要折中,但“正确性”绝不能与其他质量因素折中*

软件构造的关键问题

▪ 上面讨论的所有品质都很重要。
▪ 但在目前的软件产业状况下,有四个突出的问题:
–正确性和健壮性:可靠性
•软件构造的系统方法
•形式化规范
•开发过程中的自动检查
•更好的语言机制
•一致性检查工具
–可扩展性和可重用性:模块化

面向对象OOP如何提高质量
▪ 正确性:封装、分散化
▪ 健壮性:封装、错误处理
▪ 可扩展性:封装、信息隐藏
▪ 可重用性:模块性、组件、模型、模式
▪ 兼容性:标准化模块和接口
▪ 可移植性:信息隐藏、抽象
▪ 易用性:GUI组件、框架
▪ 效率:可重用组件
▪ 及时性:建模、重用
▪ 经济性:再利用
▪ 功能:可扩展性

软件建设五大质量目标

本课程的质量考量
▪ 优雅优美的代码可理解、易懂
▪ 可重复使用的设计
▪ 低复杂性随时可更改,易于扩展
▪ 稳健性和正确性安全,不易出错
▪ 性能和效率高效运行

Understandability
Reusability
可维护性和适应性
![Robustness
](https://img-blog.csdnimg.cn/20200223154816140.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc4NDUzNw==,size_16,color_FFFFFF,t_70)
性能
Error handling; 错误处理;
Exception handling; 异常处理
Assertion;断言
Defensive programming; 防御式编程
Test-first programming:测试优先编程

总结:

软件系统的质量属性
-外部质量因素与内部质量因素
-重要的外部质量因素
-质量因素之间的权衡

▪ 软件构建的五个关键质量目标
-易于理解:优雅优美的代码/可理解性
-随时可更改:可维护性和适应性
-开发成本低:为重用而设计:可重用性
-避免错误:健壮性
-运行效率:性能

▪ 本课程要学习的施工技术(按五大质量目标的定位分类)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值