软件质量和软件度量
- 软件质量
- 软件质量特性
- ISO/EC9126软件质量模型
- 练习题
- Mc Call质量模型
- 软件质量保证
- 软件评审
- 软件容错技术
- 结构冗余
- 信息冗余
- 时间元余
- 冗余附加技术
- 软件度量
- 练习题
软件质量
- 软件质量:是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。
- 软件质量管理:是指对软件开发过程进行独立的检查活动,由质量保证、质量规划和质量控制3个主要活动构成。
软件质量特性
讨论软件质量首先要了解软件的质量特性,目前已经有多种软件质量模型来描述软件质量特性,例如ISO/EC9126软件质量模型和McCall软件质量模型
考试最多的是ISO/EC9126软件质量模型
ISO/EC9126软件质量模型
ISO/EC9126软件质量模型:质量特性和子特性
- 功能性
甲方要我们做一个具体的软件,这个软件是由需求文档的。这个需求文档就是甲方所要求我们实现的各种功能,包含各种显性的、隐性的功能。这些功能有哪些子特性?
1)是否能够做到适合,匹配我们的系统。
2)是否准确。
3)这个功能和其他的能之间互相操作性怎么样,比如某一个功能需要从a功能跳转过去,如果该功能用起来很复杂,那么它的互动性就是不行。
4)依从性,这个功能是否跟我们整体的信息是否依从,有依从的关系在这里。
5)是否安全,是否允许非授权用户访问 - 可靠性
我们一个软件不可靠就是我们想正常使用它,但是它总是掉线,宕机或者不提供正常的服务。软件的可靠性有哪几个子特性?
1)成熟性:软件最开始开发出来会有很多bug,客户在使用过程中,我们不断的修复bug,修复的时间越长,软件就会月成熟并且越不容易出问题。
2)容错性:软件一旦出现错误是否能够继续进行执行,所以容错就是有错误但是能够容纳这个错误,并且继续进行执行。使用容错性使用最多的手段就是冗余,使用冗余多套机制来进行同时执行,如果有一套出问题了,那就立马用另一套,不影响我们系统的执行
3)易恢复性:软件哪怕出现了问题,我们是否能够快速的把问题解决,然后提供服务 - 易使用性
软件做出来后是否容易使用,比如外卖系统,主要有饿了么和美团外卖,其他人想做个外卖系统,那么这个外卖系统要尽量的让用户在使用新系统的时候,要容易学习,减少学习成本,还要容易理解整个系统的逻辑,尽量和现有的外卖系统的整个机制要雷同,这样才方便用户学习和理解
1)易理解性:每个具体的功能模块要容易懂
2)易学性:容易学习
3)易操作性:容易操作 - 效率
跟时间和吞吐量有关。跟时间有关?比如我们操作一个信息系统,查询整个公司的人员结构,系统是否能很快有返回结果。如果a信息系统需要2秒查出结果,b信息系统需要0.1秒就能查出来,说明b系统的反馈时间更快,效率更高。什么是吞吐量?吞吐量大就代表能够短期内处理更多的资源
1)时间特性
2)资源特性 - 可维护性
软件维护是整个软件生命周期的最后一个环节,软件开发完,所产生的问题需要进行修复。修复问题需要能够将整个软件书写的代码逻辑分析清楚
1)易分析性:代码要容易分析,一个项目的人员是会变更的,开发和维护可能不是同一个人。如果代码看不懂的话,就没有办法进行分析,更别说追加功能和修复bug。
2)易改变性:整个信息在构建的时候,要遵循相关的设计原则,要高内聚低耦合,不然改变一个更改一个功能模块会影响其他模块
3)稳定性:改变代码之后,不能出现各种问题,需要稳定
4)易测试性:改变某个功能后需要能够进行测试。比如用户觉得某个功能存在维问题,修改后不能没有任何感知,到底吸怪了那些地方也说出来,这样就没有办法去测试该功能到底修改了哪个地方 - 可移植性
把一个系统或软件从一个平台移植到另一个平台(比如从windows移植到macOS),这个系统在新的平台能够正常安装和应用,并且需要运行过程要与原来平台的环境保持一致
1)适应性
2)易安装性
3)一致性
4)易替换性
书本讲解:
各质量特性和质量子特性的含义如下。
- 功能性(Functionality)。与一组功能及其指定的性质的存在有关的一组属性,是指满足规定或隐含需求的那些功能
- 适合性(Suitability)。与对规定任务能否提供一组功能以及这组功能是否适合有关的软件属性。
- 准确性(Accurateness)。与能够得到正确或相符的结果或效果有关的软件属性。
- 互用性(Interoperabiliy)。与其他指定系统进行交互操作的能力相关的软件属性。
- 依从性(Compliance)。使软件服从有关的标准、约定、法规及类似规定的软件属性,
- 安全性(Security)。与避免对程序及数据的非授权故意或意外访问的能力有关的软件属性。
- 可靠性(Reliability)。与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力。
- 成熟性(Maturity)。与由软件故障引起失效的频度有关的软件属性。
- 容错性(Fault tolerance)。与在软件错误或违反指定接口的情况下维持指定的性能水平的能力有关的软件属性。
- 易恢复性(Recoverability)。与在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及为达到此目的所需的时间和努力有关的软件属性。
- 易使用性(Usability)。与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性。
- 易理解性(Understandability)。与用户为理解逻辑概,念及其应用所付出的劳动有关的软件属性。
- 易学性(Learnability)。与用户为学习其应用(例如操作控制、输入、输出)所付出的努力相关的软件属性。
- 易操作性(Operability)。与用户为进行操作和操作控制所付出的努力有关的软件属性。
- 效率(Efficiency)。在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性。
- 时间特性(Time behavior))。与响应和处理时间以及软件执行其功能时的吞吐量有关的软件属性。
- 资源特性(Resource behavior))。与软件执行其功能时,所使用的资源量以及使用资源的持续时间有关的软件属性。
- 可维护性(Maintainability)。与进行规定的修改所需要的努力有关的一组属性。
- 易分析性(Analyzability)。与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性。
- 易改变性(Changeability)。与进行修改、排错或适应环境变换所需努力有关的软件属性。
- 稳定性(Stability)。与修改造成未预料效果的风险有关的软件属性。
- 易测试性(Testability)。为确认经修改软件所需努力有关的软件属性。
- 可移植性(Portability)。与软件可从某一环境转移到另一环境的能力有关的一组属性。
- 适应性(Adaptabiity)。与软件转移到不同环境时的处理或手段有关的软件属性。
- 易安装性(Installability)。与在指定环境下安装软件所需努力有关的软件属性。
- 一致性(Conformance)。使软件服从与可移植性有关的标准或约定的软件属性。
- 易替换性(Replaceability)。与一软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性。
练习题
【2019年】在ISO/EC9126软件质量模型中,软件质量特性()包含质量子特性安全性。
(A)功能性
(B)可靠性
©效率
(D)可维护性
答案A
【2018年】在ISO/EC9126软件质量模型中,可靠性质量特性是指在规定的一段时间内和规定的条件下,软件维持在其性能水平有关的能力,其质量子特性不包括()
(A)安全性
(B)成熟性
©容错性
(D)易恢复性
答案A
【2021年】在SO川EC软件质量模型中,可移植性是指与软件可从某环境移到另一环境的能力有关的一组属性,其子特性不包括(31)
A.适应性
B.易测试性
C.易安装性
D.易替换性
答案B
Mc Call质量模型
几乎没有考过
Mc Cll软件质量模型从软件产品的运行、修正和转移3个方面确定了11个质量特性
软件质量保证
软件质量保证:是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动,其目的是生产高质量的软件。主要包含3个要点和7个任务
- 3个要点
- 软件必须满足用户需求,与用户需求不一致的软件无质量可言
- 软件应遵循规定的一系列开发标准,不遵循这些准则的软件,其质量难以得到保证
- 软件还应满足某些隐含的需求(如可理解性、可维护性,未明确写在用户需求中)
- 7个任务
- 应用技术方法:把软件质量设计到产品中而非事后保证
- 正式的技术评审
- 测试软件
- 标准的实施:
- 遵循标准
- 控制变更
- 度量:收集软件度量
- 记录保存和报告
软件评审
软件评审:是指对软件开发过程中的文档、设计、代码、测试用例等进行系统性的检查和审查的过程。评审的目的是发现潜在的问题、错误和改进的机会,以提高软件质量和有效性。
通常,把“质量”理解为“用户满意程度”。为了使得用户满意,有以下两个必要条件。
(1)设计的规格说明书符合用户的要求,这称为设计质量。
(2)程序按照设计规格说明所规定的情况正确执行,这称为程序质量。
软件的评审主要包含以下两种评审:
- 设计质量的评审:设计质量评审的对象是在需求分析阶段产生的软件需求规格说明、数据需求规格说明,以及在软件概要设计阶段产生的软件概要设计说明书等
- 程序质量的评审:程序质量评审通常是从开发者的角度进行评审,与开发技术直接相关。它是着眼于软件本身的结构、与运行环境的接口以及变更带来的影响而进行的评审活动
软件容错技术
提高软件质量和可靠性的技术大致可分为两类:
- 避错技术,即在开发的过程中不让差错潜入软件的技术;
- 容错技术,即对某些无法避开的差错,使其影响减至最小的技术。
软件容错技术:容错就是软件遇到错误的处理能力,实现容错的手段主要是冗余,冗余是指对于实现系统规定功能是多余的那部分资源,包括硬件、软件、信息和时间。由于加入了这些资源,有可能使系统的可靠性得到较大的提高,包括四种冗余技术:
- 结构冗余
- 信息冗余
- 时间冗余
- 冗余附加技术
结构冗余
结构冗余是通过在系统中添加额外的硬件或软件组件来提高系统的可靠性和容错能力。这种冗余可以分为静态、动态和混合冗余三种类型
- 静态冗余:静态冗余是指在系统中添加多个相同的组件,通过表决和比较来选择正确的输出。例如,在航空航天领域中,多个发动机可以通过表决和比较来确保系统的可靠性。
- 动态冗余:动态冗余是指在系统中添加多个相同的组件,但是只有一个组件在工作,其他组件处于待机状态。当工作组件发生故障时,备用组件会立即接管工作。例如,在服务器领域中,多个硬盘可以通过RAID技术实现动态冗余,以提高数据的可靠性。
- 混合冗余:混合冗余是指将静态和动态冗余技术结合起来使用,以提高系统的可靠性和容错能力。例如在核电站中,反应堆控制系统可以采用混合冗余技术,以确保系统的可靠性。
信息冗余
信息冗余是通过在数据中添加额外的信息来提高数据的检措和纠错能力。这种冗余通常采用校验码原理,即通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。当数据传输或存储时,如果校验码与数据不匹配,则说明数据可能发生了错误。
校验码原理:校验码原理是指通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。常见的校验码包括循环冗余校验码(CRC)、海明码等。例如,在USB接口中,数据传输时会使用CRC校验码来检测数据是否发生了错误。
时间元余
时间冗余是通过在系统中添加额外的时间延迟来提高系统的容错能力。这种冗余通常采用重复执行的方式,即当系统出现错误时,会重复执行相同的操作,直到操作成功为止。如果重复执行多次仍然
失败,则说明系统可能出现了严重的故障。
- 重复执行:重复执行是指当系统出现错误时,会重复执行相同的操作,直到操作成功为止。例如,在计算机系统中,当硬盘读取数据时出现错误时,操作系统会尝试多次读取数据,直到读取成功为止。
- 回滚:回滚是指当系统出现错误时,会将系统状态恢复到之前的某个时间点,以避免错误的影响。例如在数据库系统中,如果某个事务执行失败,可以使用回滚操作将数据库状态恢复到事务开始之前的状态。
冗余附加技术
冗余附加技术是指为实现结构、信息和时间冗余技术所需的资源和技术,包括程序、指令、数据、存放和调动它们的空间和通道等。
软件度量
软件度量用于对产品及开发产品的过程进行度量,软件的两种属性:
- 外部属性:指面向管理者和用户的属性,可直接测量,一般为性能指标,比如成本、效益、开发人员的生产率。
- 内部属性:指软件产品本身的的属性,如可靠性、可维护性等,只能间接测量。
软件度量有两种分类方法:
- 第一种分类:是将软件度量分为面向规模的度量、面向功能的度量和面向人的度量;
- 第二种分类:是将软件度量分为生产率度量、质量度量和技术度量
软件复杂度的度量方法:McCabe度量法,又称为环路复杂度,具体的求法为:假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2
注意:m和代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。
还有一种更加简单的算法:封闭空间数量+1或者是判断数+1
练习题
例:采用McCabe度量法计算下图的环路复杂性为
A.2
B.3
C.4
D.5
答案C
m-n+2 = 8-6+2=4,注意每个边都要有开始,所以图中最上方的边(i>1判断条件上方的箭头)不能算进去
封闭空间数量+1 = 3+1=4
判断数+1 = 2+1 = 3,判定树就是菱形的判定条件个数,但是该图存在问题:语句2处少了一个判定条件
最建议使用封闭数+1计算
例:下图采用McCabe度量计算该程序图的环路复杂性为()
A、3
B、4
C、5
D、6
答案B
例:采用McCabel度量法计算下图的环路复杂性为
A.2
B.3
C.4
D.5
答案B