5.7软件质量和软件度量

news2024/12/23 22:52:10

软件质量和软件度量

  • 软件质量
    • 软件质量特性
      • 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)易替换性

书本讲解:
各质量特性和质量子特性的含义如下。

  1. 功能性(Functionality)。与一组功能及其指定的性质的存在有关的一组属性,是指满足规定或隐含需求的那些功能
    • 适合性(Suitability)。与对规定任务能否提供一组功能以及这组功能是否适合有关的软件属性。
    • 准确性(Accurateness)。与能够得到正确或相符的结果或效果有关的软件属性。
    • 互用性(Interoperabiliy)。与其他指定系统进行交互操作的能力相关的软件属性。
    • 依从性(Compliance)。使软件服从有关的标准、约定、法规及类似规定的软件属性,
    • 安全性(Security)。与避免对程序及数据的非授权故意或意外访问的能力有关的软件属性。
  2. 可靠性(Reliability)。与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力
    • 成熟性(Maturity)。与由软件故障引起失效的频度有关的软件属性。
    • 容错性(Fault tolerance)。与在软件错误或违反指定接口的情况下维持指定的性能水平的能力有关的软件属性。
    • 易恢复性(Recoverability)。与在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及为达到此目的所需的时间和努力有关的软件属性。
  3. 易使用性(Usability)。与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性
    • 易理解性(Understandability)。与用户为理解逻辑概,念及其应用所付出的劳动有关的软件属性。
    • 易学性(Learnability)。与用户为学习其应用(例如操作控制、输入、输出)所付出的努力相关的软件属性。
    • 易操作性(Operability)。与用户为进行操作和操作控制所付出的努力有关的软件属性。
  4. 效率(Efficiency)。在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性
    • 时间特性(Time behavior))。与响应和处理时间以及软件执行其功能时的吞吐量有关的软件属性。
    • 资源特性(Resource behavior))。与软件执行其功能时,所使用的资源量以及使用资源的持续时间有关的软件属性。
  5. 可维护性(Maintainability)。与进行规定的修改所需要的努力有关的一组属性
    • 易分析性(Analyzability)。与为诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性。
    • 易改变性(Changeability)。与进行修改、排错或适应环境变换所需努力有关的软件属性。
    • 稳定性(Stability)。与修改造成未预料效果的风险有关的软件属性。
    • 易测试性(Testability)。为确认经修改软件所需努力有关的软件属性。
  6. 可移植性(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day32 | 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯

碎碎念:开始动态规划了!加油! 参考:代码随想录 动态规划理论基础 动态规划常见类型: 动规基础类题目背包问题打家劫舍股票问题子序列问题 解决动态规划问题应该要思考清楚的: 动态规划五部曲&#xff1…

使用 continue 自定义 AI 编程环境

一直在使用github 的 copilot 来编程,确实好用,对编码效率有很大提升。 但是站在公司角度,因为它只能对接公网(有代码安全问题)。另外,它的扩展能力也不强,无法适配公司特定领域的知识库&#x…

c# winform 创建日志登录界面

一.创建一个用于登录的Login的复合控件 1.右击项目文件,点击添加用户控件,设置为控件名为Login。 2.拉动两个lable控件,两个textBox控件,一个button,一个CheckBox控件。 3.将控件的权限(Modifiers)设置为Pu…

Unity2D在处理精灵表过程中出现不清晰的解决方法

问题阐述 在我们拿到一张精灵表的时候,我们通常要进行切割。但这样往往导致切割的效果不是很好,这里举一个简单的例子。 这是举例子用到的精灵表 我们先对他进行切割处理。 将single改为Multiope 进入精灵编辑器后,我们选择切割方式 此时我…

【数据结构】链表篇

1.链表的概念以及结构 概念:链表是一种物理储存结构上的非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链式结构在逻辑上是连续的,但是在物理上不一定连续现实中的节点一般都是从堆上申请出来的从堆上申…

中度自闭症儿童上普校还是特校好呢

当家中有中度自闭症儿童时,家长们常常面临一个艰难的抉择:是让孩子进入普通学校(普校)接受融合教育,还是选择特殊教育学校(特校)接受更具针对性的教育?这是一个没有标准答案的问题&a…

Python基于逻辑回归的L1正则化(Lasso Logistic Regression)进行分类数据的特征选择项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 可以使用Lasso回归进行特征选择,尽管它本质上是一个用于回归问题的技术,但通过…

Python基于Prophet实现时间序列数据趋势周期特征提取项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Prophet是Facebook开源的一个用于时间序列预测的库,它主要用于处理具有趋势、季节性和假期…

Springboot功能模块之文件上传(minio)

一、概述 1.1什么是MinIO? MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 官网…

基础第二关:8G 显存玩转书生大模型 Demo

基础任务 复现过程 结果截图 进阶任务 任务一 复现过程 结果截图 任务二 复现过程 结果截图

OpenFoam waves2foam 虚拟机 镜像 下载 Ubuntu

编译完成截图及安装版本信息: 下载地址(资源整理不易,下载使用需付费,且文件较大,不能接受请勿浪费时间下载): 链接:https://pan.baidu.com/s/1j0-MYpaG2rTYuizSWPFcxg?pwdmoxv 提取码:moxv

【String的介绍及使用】

String的介绍及使用 ## 小杨 为何学习string以及string的简单介绍 学习string类的原因 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的&am…

详解基于百炼平台及函数计算快速上线网页AI助手

引言 在当今这个信息爆炸的时代,用户对于在线服务的需求越来越趋向于即时性和个性化。无论是寻找产品信息、解决问题还是寻求建议,人们都期望能够获得即时反馈。这对企业来说既是挑战也是机遇——如何在海量信息中脱颖而出,提供高效且贴心的…

【C语言】fseek、ftell以及rewind函数(随机文件读写)

文章目录 前言1. fseek1.1 fseek函数原型1.2 fseek函数的形式参数1.3 fseek实例演示 2. ftell2.1 ftell函数原型2.2 ftell函数的实例演示 3. rewind3.1 rewind函数原型3.2 rewind函数实例演示 前言 在之前,我讲过文件的顺序读写。但是我们可不可以随机读写文件呢&a…

PCL从理解到应用【09】 点云特征 | 关键点提取 | 方法汇总

前言 在PCL中,有多种方法和函数可以用来提取点云特征,本文介绍关键点提取。 提取点云关键点,本文介绍的方法包括:SIFT、Harris、NARF、ISS和SUSAN。 Harris 提取点云关键点,效果如下图所示: 白色点是原始…

MATLAB预测模型(2)

一、前言 在MATLAB中,进行线性回归、非线性回归以及统计回归预测可以通过多种方法实现,包括使用内置函数和自定义函数。下面,我将分别给出线性回归、非线性回归和基于统计回归进行预测的基本示例代码。 二、实现 1. 线性回归 MATLAB中的poly…

机器人主板维修|ABB机械手主板元器件故障

【ABB机器人电路板故障原因诊断】 针对上述故障现象,我们需要对ABB机器人IO板进行详细的故障诊断。以下是一些可能的故障原因: 1. 元器件老化或损坏:ABB机械手安全面板上的元器件在长期使用过程中可能出现老化、损坏或接触不良等问题&#xf…

PyCharm运行Python的Flask项目时,愚蠢的执行了默认Flask框架默认配置处理

一:问题描述 因为上半年开始学习完python后,开始转人工智能方向的工作内容,所以这半年几乎在攻关python以及人工智能方向的技能,但是我有喜欢用Java的一些开发的爽点。 最近整Flask的框架时发现了一个问题,我就在Fla…

【数据结构算法经典题目刨析(c语言)】反转链表(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一、题目描述 二、思路分析 三、代码实现 一、题目描述: 二、思路分析 : 通过三个指针n1,n2,n3来实现链表的反转 1.首先初始化 n1为…

IO流相关

1. IO概述 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。 1.1 IO的分类 根据数据的流向分为:输入流和输出流。 输入流 :把数据从其他设备上读取到内存中的流。 …