软件质量概述参考:•ISO/IEC25000《软件和系统工程--软件产品质量需求和评价(SQuaRE)》•ISO9126(软件产品质量)和ISO14598(软件产品评价)•ISO15504(SPICE,软件过程改进和能力确定)•ISO12207(软件生存期过程)•ISO/IEC15939(GB/T20917)《信息技术--软件测量过程》1软件质量的概念软件质量的定义影响软件质量的主要因素软件质量模型2Back软件质量的定义1.软件质量的定义2.软件质量特性3.软件生存期与质量特性3软件质量的定义1.软件质量的定义1)ANSI/IEEEStd729-1983定义软件质量为:“与软件产品满足规定的和隐含的需求的能力有关的特征或特性的全体”。其含义有四:1.能满足给定需要的性质和特性的全体;2.具有所期望的各种属性的组合程度;3.顾客和用户觉得能满足其综合期望的程度;4.确定软件在使用中将满足顾客预期要求的程度。4软件质量的定义1.软件质量的定义(续)2)M.J.Fisher将软件质量定义为:“所有描述计算机软件优秀程度的特性的组合。”3)GB/T6583–ISO8402(1994)定义软件质量为:“反映实体满足明确和隐含需要的能力和特性总合”4)软件质量还被定义如下:客户满意度一致性准则软件质量度量过程质量观5软件质量的定义1.软件质量的定义(续)5)软件质量和一般产品质量类似,被定义为3A特性:可说明性(Accountability)有效性(Availability)易用性(Accessibility)6)RUP中,软件质量被定义为具有以下三个维度:功能(Functionality)可靠(Reliability/Dependability)性能(Performance)简言之,软件质量是软件一些特性的组合,它依赖软件的本身。6软件质量的定义从用户最感兴趣的角度来说,软件质量可以从3个不同的角度来看待:如何使用软件,使用效果如何,软件性能如何从软件开发团队的角度来看生产出满足质量要求的软件中间件的质量如何运用最少的资源、最快的进度生产出质量最优的产品从软件维护者的角度看,对软件维护方面的特性感兴趣对企业的管理层来说,注重的是总体利益和长远利益,质量好的软件一般可以帮助企业扩大市场。7软件质量的定义软件质量反映了以下三方面的问题:软件需求是度量软件质量的基础。不符合需求的软件不具备质量。规范化的标准定义了一组开发准则,用来指导软件人员用工程化的方法来开发软件。如果不遵守这些开发准则,软件质量就得不到保证。往往会有一些隐含的需求没有显式地提出来。如软件应具备良好的可维护性。如果软件只满足那些精确定义了的需求而没有满足这些隐含的需求,软件质量也不能保证。8软件质量的定义2.软件质量特性与质量有关的特性是质量特性,质量特性是“产品、过程或体系与要求有关的固有特性”。软件质量特性,反映了软件的本质。讨论一个软件的质量,问题最终要归结到定义软件的质量特性。定义一个软件的质量,就等价于为该软件定义一系列质量特性。通常,软件质量可由以下主要特性来定义:9软件质量的定义(1)功能性:软件所实现的功能达到它的设计规范和满足用户需求的程度;(2)效率:在规定条件下,用软件实现某种功能所需的计算机资源(包括时间)的有效程度;(3)可靠性:在满足一定条件的应用环境中,软件能够正常维持其工作的能力;(4)安全性:为了防止意外或人为的破坏,软件应具备的自身保护能力能力;10软件质量的定义(5)易使用性:对于一个软件,用户在学习、操作和理解过程中所做努力的程度;(6)可维护性:当环境改变或软件运行发生故障时,为了使其恢复正常运行所做努力的程度;(7)可扩充性:在功能改变和扩充情况下,软件能够正常运行的能力;(8)可移植性:为使一个软件从现有运行平台向另一个运行平台过度所做努力的程度(9)重用性:整个软件或其中一部分能作为软件包而被再利用的程度。11软件质量的定义3.软件生存期与质量特性从用户的角度看,软件的生存期可分为如下三个阶段:1)初期运用:运行新开发的软件产品。2)维护与扩充:在运行过程中修改缺欠的内容;而且,为了进一步的使用,需根据运行环境(主要指应用环境和技术环境)的变化做功能上和性能上的扩充。3)移植和连接:把在原有平台上运行的软件向其它新的运行环境转移、或者组成软件包以便重用、或与其它软件进行连接。12软件质量的定义软件生存期与质量特性的关系对软件所需求的质量特性,在软件生存期的不同阶段中情况各有不同,要求也不一样,如下图说明。13Back影响软件质量的主要因素影响软件质量的主要因素总体上说有三个:开发软件产品的组织,开发过程及开发使用的方法和技术。具体:(美国罗姆空军开发中心RADC和空军系统控制中心AFSC):1)开发方法和工具。2)开发人员训练因素3)软件开发的组织形式4)文档的提供5)复杂性6)环境7)现有的软件原型14影响软件质量的主要因素影响软件质量的主要因素8)需求转换和可跟踪性9)测试方法10)维护11)计划和资源12)语言13)现有的类似软件14)软件的质量特征15)设计参数的折中15软件质量模型什么是软件质量模型人们通常把影响软件质量的特性用软件质量模型来描述。所谓质量模型是指提供声明质量需求和评价质量基础的特性以及特性之间关系的集合。换句话说质量模型是用来描述质量需求以及对质量进行评价的理论基础。Boehm质量模型软件质量特性定义的分层模型McCall质量模型ISO质量模型16Boehm质量模型17设备独立性易更改可靠性效率整体效用易用性可维护性可测试性人体工程学可移植性易懂性精确性完整性完全性可说明性设备功效易操作性沟通良好自我操作性架构性简明性易懂性可维护性模块独立性连续性软件质量模型McCall软件质量模型的三层次1976年,由Boehm等提出软件质量模型的分层方案。1979年McCall等人改进Boehm质量模型又提出了一种软件质量模型。模型包括质量要素(factor)、准则(criteria)和度量(metric)三层次。如下页图所示。1819McCall质量度量模型框要素(特性)评价准则评价准则评价准则度量度量度量面向管理观点的产品质量决定产品质量的软件属性定量化地度量软件属性特性是软件质量的反映,软件属性可用做评价准则,定量化地度量软件属性可知软件质量的优劣。软件质量模型软件质量要素直接影响软件开发过程各个阶段的产品质量。由于对软件质量理解的不断深化,软件质量要素不是一成不变的。McCall等人给出的软件质量要素共11个,分为三类,分别面向软件产品的运行、修正、转移。它们与特性的关系如图所示。2021McCall软件质量模型产品修正产品转移产品运行可维护性测试性灵活性互联性可移植性复用性正确性可靠性可使用性效率完整性McCall软件质量模型正确性:在预定环境下,软件满足设计规格说明及用户预期目标的程度。它要求软件“没有错误”。可靠性:软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度。效率:为了完成预定功能,软件系统所需的计算机资源的多少。完整性:为了某一目的而保护数据,避免它受到偶然的,或有意的破坏、改动或遗失的能力。可使用性:对于一个软件系统,用户学习、使用软件及为程序准备输入和解释输出所需工作量的大小。可维护性:为满足用户新的要求,或当环境发生了变化,或运行中发现了新的错误时,对一个已投入运行的软件进行相应诊断和修改所需工作量的大小。22McCall软件质量模型可测试性:测试软件以确保其能够执行预定功能所需工作量的大小。灵活性:修改或改进一个已投入运行的软件所需工作量的大小。可移植性:将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需工作量的大小。复用性:一个软件(或软件的部件)能再次用于其它应用(该应用的功能与此软件或软件部件的所完成的功能有联系)的程度。互连性:连接一个软件和其他系统所需工作量的大小。如果这个软件要联网,或与其他系统通信,或要把其他系统纳入到自己的控制之下,必须有系统间的接口,使之可以联结。互连性很重要。它又称相互操作性。23软件质量模型软件质量特性之间的竞争在软件的质量特性与质量特性之间、质量特性与质量子特性之间存在着有利的影响和不利的影响。因此在系统设计过程中应根据具体情况对各种要素的要求进行折衷,以便得到在总体上用户和系统开发人员都满意的质量标准。下页是质量要素之间的关系表24软件质量特性之间的竞争25软件质量模型软件质量要素评价准则McCall定义了一组较易度量的软件质量要素评价准则,对反映质量特性的软件属性评级,以此来估计软件质量特性的值。软件质量要素属性定义评价准则的关键是确定影响软件质量要素的属性。这些属性必须满足:①比较完整、准确的描述软件质量要素;②比较容易量化和测量,能够反映软件质量的优劣。McCall的软件质量要素评价准则McCall定义的软件质量要素评价准则共21种,它们是:26McCall软件质量要素评价准则1.可审查性(Auditability):检查软件需求、规格说明、标准、过程、指令、代码及合同是否一致的难易程度。2.准确性(Accuracy):计算和控制的精度,最好表示成相对误差的函数,值越大表示精度越高。3.通信通用性(CommunicationCommonality):使用标准接口、协议和频带的程度。4.完全性(Completeness):所需功能完全实现的程度。5.简明性(Conciseness):程序源代码的紧凑性。6.一致性(Consistency):设计文档与系统实现的一致性。7.数据通用性(DataCommonality):在程序中使用标准的数据结构和类型。8.容错性(Errortolerance):系统在各种异常条件下提供继续操作的能力27McCall软件质量要素评价准则9.执行效率(ExecutionEfficiency):程序运行效率。10.可扩充性(Expandability):能够对结构设计、数据设计和过程设计进行扩充的程度11.通用性(Generality):程序部件潜在的应用范围的广泛性12.硬件独立性(HardwareIndependence):软件同支持它运行的硬件系统不相关的程度。13.检测性(Instrumentation):监视程序的运行,一旦发生错误时,标识错误的程度。14.模块化(Modularity):程序部件的功能独立性。28McCall软件质量要素评价准则15.可操作性(Operability):操作一个软件的难易程度。16.安全性(Security):控制或保护程序和数据不受破坏的机制,以防止程序和数据受到意外的或蓄意的存取、使用、修改、毁坏或泄密。17.自文档化(Self-documentation):源代码提供有意义文档的程度。18.简单性(Simplicity):理解程序的难易程度。19.软件系统独立性(SoftwareSystemIndependence):程序与非标准的程序设计语言特征、操作系统特征、以及其他环境约束无关的程度。20.可追踪性(Tracebility):对软件进行正向和反向追踪的能力。21.易培训性(Training):软件支持新用户使用该系统的能力。2930质量要素与评价准则(1/2)要素关系准则正确性可靠性有效性完整性可维护可测试可移植可重用互操作可用性灵活性可审查性VV准确性V通信通用性V完全性V简明性VVV一致性VVVV数据通用性V容错性V执行效率V可扩充性V通用性VVVV31质量要素与评价准则(2/2)要素关系准则正确性可靠性有效性完整性可维护可测试可移植可重用互操作可用性灵活性硬件独立性VVVV检测性VVV模块化VVVVVVV可操作性VV安全性V自文挡化VVVVV简单性VVVV软件独立性VV可追踪性V易培训性V计算软件质量要素软件质量要素值的计算软件质量要素Fj的值可用下式计算LFj=∑CjkMkj=1