【愚公系列】软考中级-软件设计师 040-软件工程基础(软件质量和度量)

在这里插入图片描述

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏


🚀前言

软件质量是指软件在满足用户需求的同时,具备一定的可靠性、可维护性、可测试性等特性。而软件度量是指通过对软件产物进行度量,来评估和衡量软件质量的一种方法。下面将分别介绍软件质量和软件度量的一些重要概念和方法。

  1. 软件质量属性
    软件质量属性是衡量软件质量的依据,包括以下几个方面:
  • 功能性:软件能否满足用户需求;
  • 可靠性:软件在给定环境下的稳定性和可靠性;
  • 易维护性:软件是否容易进行修改和扩展;
  • 可测试性:软件是否易于进行测试;
  • 可移植性:软件是否可以在不同环境中运行。
  1. 软件度量方法
    软件度量是通过对软件产物进行定量的测量和评估,来衡量软件质量的方法。常用的软件度量方法包括:
  • 功能点分析(Function Point Analysis,FPA):通过对软件的功能进行统计,来评估软件规模和复杂度;
  • 代码行数度量:通过对软件代码行数进行统计,来评估软件大小和复杂度;
  • 缺陷密度度量:通过对软件缺陷的数量和严重程度进行统计,来评估软件的质量;
  • 可靠性度量:通过对软件的故障率和可用性进行统计,来评估软件的可靠性。
  1. 软件质量管理
    软件质量管理是一种系统的方法,用于确保软件质量的达标。包括以下几个方面:
  • 质量计划:制定软件质量目标和计划;
  • 质量保证:通过质量控制和测试等手段,确保软件达到质量要求;
  • 缺陷管理:及时发现和修复软件缺陷;
  • 过程改进:通过分析和优化软件开发过程,提高软件质量。

软件质量是指软件在满足用户需求的同时,具备一定的可靠性、可维护性、可测试性等特性。软件度量是通过对软件产物进行度量,来评估和衡量软件质量的一种方法。而软件质量管理则是确保软件质量达标的一种系统方法。

在这里插入图片描述

🚀一、软件质量

🔎1.概念

软件质量是指软件系统或软件产品满足规定或隐含需求能力的特征和特性的总体表现。它反映了软件的可靠性、可用性、安全性、性能、可维护性和可扩展性等方面的表现。

软件质量管理是对软件开发过程进行独立的检查活动,旨在确保软件达到预期的质量标准。它涵盖了质量保证、质量规划和质量控制三个主要活动。质量保证包括制定质量策略、制定质量标准与规范、制定质量计划以及进行质量评审和审核等。质量规划包括确定质量目标、计划质量活动和资源以及建立质量保证体系等。质量控制包括执行质量活动、监控软件开发过程和产品质量、进行质量评估和改进等。

软件质量保证是为了确保软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动。它包括识别和管理风险、执行质量活动、实施质量评估、建立质量测量和指标、持续改进等。其目的是生产高质量、稳定可靠的软件,提供优质的用户体验和满足用户需求的软件产品。

🔎2.特性

讨论软件质量首先要了解软件的质量特性,目前已经有多种软件质量模型来描述软件质量特性,例如ISO/EC9126 软件质量模型和 McCall软件质量模型

🦋2.1 ISO/EC9126 软件质量模型

ISO/IEC 9126是一个软件质量模型,旨在帮助组织评估和改进软件产品的质量。该模型定义了六个主要的软件质量特性,每个特性又包含一些子特性。

ISO/IEC 9126软件质量模型提供了一种综合和结构化的方法来评估软件质量,并可用于指导软件开发组织改进其软件产品的质量。该模型的使用可以帮助组织识别和解决软件质量问题,从而提高软件产品的可靠性、性能和用户满意度。
在这里插入图片描述

☀️2.1.1 功能性(Functionality)

与一组功能及其指定的性质的存在有关的一组属性,功能是指满足规定或隐含需求的那些功能

软件属性定义
适应性能否提供一组功能以及这组功能是否适合特定任务
准确性能够得到正确或相符的结果或效果
互用性能够与其他指定系统进行交互操作
依从性能够使软件服从有关的标准、约定、法规及类似规定
安全性能够避免对程序及数据的非授权故意或意外访问
☀️2.1.2 可靠性(Reliability)

与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力

软件属性描述
成熟性与由软件故障引起失效的频度有关的软件属性
容错性与在软件错误或违反指定接口的情况下维持指定的性能水平的能力有关的软件属性
易恢复性与在故障发生后,重新建立其性能水平并恢复直接受影响数据的能力,以及为达到此目的所需的时间和努力有关的软件属性
☀️2.1.3 易使用性(Usability)

与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性

属性描述
易理解性与用户为理解逻辑概念及其应用所付出的劳动有关的软件属性
易学性与用户为学习其应用(例如操作控制、输入、输出)所付出的努力相关的软件属性
易操作性与用户为进行操作和操作控制所付出的努力有关的软件属性
☀️2.1.4 效率(Efficiency)

在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性

属性类型时间特性资源特性
相关说明与响应和处理时间以及软件执行功能时的吞吐量有关的软件属性。与软件执行功能时所使用的资源量和使用资源的持续时间有关的软件属性。
相关软件属性响应时间、处理时间、吞吐量资源使用量、资源持续时间
相关软件特征软件的快速性和反应能力软件的资源效率和资源管理能力
相关影响/问题较长的响应时间和处理时间可能导致用户不满意资源消耗过大可能导致系统崩溃或性能下降
相关解决方案/优化优化算法和数据结构、增加硬件资源资源管理策略和优化、调整系统配置
☀️2.1.5 可维护性(Maintainability)

与进行规定的修改所需要的努力有关的一组属性

属性描述
易分析性与诊断缺陷或失效原因,或为判定待修改的部分所需努力有关的软件属性
易改变性与进行修改、排错或适应环境变换所需努力有关的软件属性
稳定性与修改造成未预料效果的风险有关的软件属性
易测试性为确认经修改软件所需努力有关的软件属性
☀️2.1.6 可移植性(Portability)

与软件可从某一环境转移到另一环境的能力有关的一组属性

软件属性定义
适应性与软件转移到不同环境时的处理或手段有关的软件属性
易安装性与在指定环境下安装软件所需努力有关的软件属性
一致性使软件服从与可移植性有关的标准或约定的软件属性
易替换性与一软件在该软件环境中用来替代指定的其他软件的可能和努力有关的软件属性

在这里插入图片描述

🦋2.2 Mc Call质量模型

McCall质量模型是一种用于评估软件质量的模型,于1977年由McCall等人提出。该模型将从软件产品的运行、修正和转移3个方面确定了11个质量特性,并为每个因素定义了指标,通过对这些指标进行评估,可以对软件的质量进行综合评价。

这11个因素包括:

质量因素描述
基本操作性测试软件的基本功能是否正常运行
准确性软件输出的准确性,是否符合用户的预期
可靠性软件在给定条件下的可靠性,是否能够持续稳定运行
效率软件在给定条件下的执行效率,包括响应时间、资源利用率等
可维护性软件的易维护性,包括易理解、易修改、易测试等
灵活性软件的适应性,是否能够满足用户的不同需求
可测试性软件的易测试性,是否容易进行测试和验证
可理解性软件的易理解性,包括文档、注释、命名等
可用性软件的易用性,是否容易上手和操作
可移植性软件的可移植性,是否能够在不同的环境和平台上运行
可互操作性软件的互操作性,是否能够与其他软件和系统进行交互

通过对这些因素进行评估,可以得出软件的质量评分,从而指导软件开发和维护的工作。McCall质量模型提供了一个系统化的评估方法,可以帮助开发团队和项目经理在软件开发过程中关注和优化不同的质量因素。
在这里插入图片描述

🔎3.软件质量保证

软件质量保证是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动,其目的是生产高质量的软件。主要包含3个要点和7个任务。

3个要点:

要点描述
用户需求满足软件必须满足用户需求,与用户需求不一致的软件无质量可言。
开发标准遵循软件应遵循规定的一系列开发标准,不遵循这些准则的软件,其质量难以得到保证。
隐含需求满足软件还应满足某些隐含的需求(如可理解性、可维护性等),未明确写在用户需求中。

7个任务:

任务描述
应用技术方法把软件质量设计到产品中而非事后保证。
正式的技术评审进行正式的技术评审。
测试软件进行软件测试。
标准的实施遵循标准进行软件开发。
控制变更控制软件变更。
度量收集软件度量。
记录保存和报告记录保存和报告软件质量相关信息。

🔎4.软件评审

软件评审:是指对软件开发过程中的文档、设计、代码、测试用例等进行系统性的检查和审查的过程。评审的目的是发现潜在的问题、错误和改进的机会,以提高软件质量和有效性。

通常,把“质量”理解为“用户满意程度”。为了使得用户满意,有以下两个必要条件。

(1)设计的规格说明书符合用户的要求,这称为设计质量。
(2)程序按照设计规格说明所规定的情况正确执行,这称为程序质量。

软件的评审主要包含以下两种评审:

  • 设计质量的评审:设计质量评审的对象是在需求分析阶段产生的软件需求规格说明、数据需求规格说明,以及在软件概要设计阶段产生的软件概要设计说明书等
  • 程序质量的评审:程序质量评审通常是从开发者的角度进行评审,与开发技术直接相关。它是着眼于软件本身的结构、与运行环境的接口以及变更带来的影响而进行的评审活动

🔎5.软件容错技术

提高软件质量和可靠性的技术大致可分为两类,一类是避开错误,即在开发的过程中不让差错潜入软件的技术;另一类是容错技术,即对某些无法避开的差错,使其影响减至最小的技术。

软件容错技术:容错就是软件遇到错误的处理能力,实现容错的手段主要是冗余,冗余是指对于实现系统规定功能是多余的那部分资源,包括硬件、软件、信息和时间。由于加入了这些资源,有可能使系统的可靠性得到较大的提高,包括四种冗余技术:结构冗余、信息冗余、时间冗余、冗余附加技术

🦋5.1 结构冗余

结构冗余是通过在系统中添加额外的硬件或软件组件来提高系统的可靠性和容错能力,这种冗余可以分为静态、动态和混合冗余三种类型:

冗余类型定义示例
静态冗余在系统中添加多个相同的组件,通过表决和比较来选择正确的输出航空航天领域的多发动机系统
动态冗余在系统中添加多个相同的组件,但只有一个组件在工作,其他处于待机状态服务器领域的 RAID 技术
混合冗余将静态和动态冗余技术结合起来使用,提高系统的可靠性和容错能力核电站中的反应堆控制系统

🦋5.2 信息冗余

信息冗余是通过在数据中添加额外的信息来提高数据的检错和纠错能力。这种冗余通常采用校验码原理,即通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。当数据传输或存储时,如果校验码与数据不匹配,则说明数据可能发生了错误。

校验码原理:校验码原理是指通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。常见的校验码包括循环冗余校验码(CRC)、汉明码等。例如,在 USB 接口中,数据传输时会使用 CRC 校验码来检测数据是否发生了错误。

🦋5.3 时间冗余

时间冗余是通过在系统中添加额外的时间延迟来提高系统的容错能力。这种冗余通常采用重复执行的方式,即当系统出现错误时,会重复执行相同的操作,直到操作成功为止。如果重复执行多次仍然失败,则说明系统可能出现了严重的故障。

名词定义示例
重复执行当系统出现错误时,重复执行相同的操作,直到操作成功为止。在计算机系统中,当硬盘读取数据时出现错误时,操作系统会尝试多次读取数据,直到读取成功为止。
回滚当系统出现错误时,将系统状态恢复到之前的某个时间点,以避免错误的影响。在数据库系统中,如果某个事务执行失败,可以使用回滚操作将数据库状态恢复到事务开始之前的状态。

🦋5.4 冗余附加技术

冗余附加技术是指为实现结构、信息和时间冗余技术所需的资源和技术,包括程序、指令、数据、存放和调动它们的空间和通道等。

🚀二、软件度量

🔎1.属性

软件度量是用于对软件产品及其开发过程进行度量的一种方法。软件可以具有两种属性,即外部属性和内部属性。

外部属性是指面向管理者和用户的属性,可以直接进行测量。一般来说,外部属性主要关注软件的性能指标,例如成本、效益、以及开发人员的生产率等。

内部属性是指软件产品本身的属性,只能通过间接的方式进行测量。内部属性主要关注软件的可靠性、可维护性等方面的特性。这些属性无法直接测量,但可以通过对软件的设计、开发和测试等过程进行分析和评估来间接获取相关信息。

🔎2.分类方法

软件度量可以按两种分类方法进行划分:

  1. 面向规模的度量、面向功能的度量和面向人的度量。
  2. 生产率度量、质量度量和技术度量。

🔎3.复杂度的度量方法

软件复杂度的度量方法:McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2

注意m和n代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。

还有一种更加简单的算法:封闭空间数量+1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

  • 35
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚公搬代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值