软件质量和软质量保证体系
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章软件质量和软件质量保证体系
9.1 软件质量
9.1.1 软件质量特性
什么是软件质量?不同人或组织的看法各不相同。按照ISO/IEC 9126-1991(我国GB/T16260-1996)“信息技术软件产品评价、质量特性及其使用指南”国际标准,认为软件质量(Software Quality)是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和,例如,符合规格说明。简而言之,软件质量是软件一些特性的组合,它仅依赖于软件本身。
9.1.2 软件质量评价
评价软件质量可从三个方面进行,即产品或中间产品、过程(即软件生产所需的资源和活动)和项目。
评价可按如下三步进行:
1、定义质量需求
质量需求包含两个方面:①问题规定或隐含的需求;②软件质量标准和其它技术信息。
2、准备评价
首先选择质量度量;然后定义质量等级;再定义评估准则。
由于一般情况下,不可能对质量特性进行直接度量,从而应选择与质量特性相关的且可定量的软件特性加以度量。定义质量等级是依据应用问题的需求将质量度量值分割成若干不同满意程度的等级,如优秀、合格与不合格等。定义评估准则是为了综合软件不同质量特性的评价结果,可采用判定表或加权平均法;同时还可兼顾其它因素,如时间、成本等。
3、评价过程
评价过程实际上是对软件产品就第2步中准备的评价内容进行实施,也分3步:
①测量——把选定的质量度量应用到软件产品上;
②评级——确定某测量值的等级;
③评估——根据评估准则确定产品质量,并依据管理准则判定产品是否可通过验收或是否发行等等。
9.1.3 软件质量保证
软件的质量保证也和一般的质量保证一样,是确保软件产品从诞生到消亡为止的所有阶段的质量的活动。软件质量保证由各种任务构成,分别与两种不同的参与者相关——负责技术工作的软件工程师和负责质量保证的计划、监督、记录、分析及报告工作的软件质量保证(SQA)小组。软件工程师通过采用可靠的技术方法和措施,进行正式的技术复审、执行计划周密的软件测试来保证软件质量。SQA 小组主要辅助软件工程小组得到高质量的最终产品,对项目准备SQA计划,如确定需要进行的评价、需要进行的审计和复审、项目可采用的标准等;参与开发项目的软件过程描述,以保证该过程与组织政策、内部软件标准、外界所订标准以及软件项目计划的其它部分相符;复审各项软件工程活动,对其是否符合定义好的软件过程进行核实;审计指定的软件工作产品,对其是否符合定义好的软件过程中的相应部分进行核实;确保软件工作及工作产品中的偏差已被记录,并根据预定规程进行处理;记录所有不符合的部分,并报告给高级管理者;等等。??
9.1.4 软件质量管理
所谓质量管理是指确定质量方针、目标和职责,并在质量体系中通过诸如:质量策划、质量控制、质量保证和质量改进,使其实施全部管理职能的所有活动。质量策划包括产品策划、管理和作业策划以及质量计划的编制和质量改进的准备工作。质量控制是指采取某些特定作业技术或开展某些活动,以达到质量要求。质量改进是指以追求更高的效益和效率为目标的持续性活动。
质量管理和质量保证相互依赖,但他们的活动具有不同的范围、不同的目的、不同的动机和不同的结果。??
9.2 软件复杂性分析
9.2.1 基于需求分析的复杂性分析
软件工程的技术性工作始于需求分析,提供对分析模型质量的度量是有意义的和必要的。在需求分析阶段完成以后,项目的管理人员希望知道将要开发的软件有多大规模,这与将要投入的工作量、开发成本以及何时交付用户或何时投放市场都有密切的联系。同时,如果是委托开发的项目软件,用户也会关心开发机构提出的报价是否恰当合理。双方都希望有一个科学、公正的估价依据。下面介绍一种面向功能的软件复杂性度量方法——功能点方法。
面向功能度量是由Albrecht首先提出来的。功能点方法以需求规格说明书中双方确认的软件功能为依据,着重分析待开发系统的功能度(Functionality)。显然,软件的大小与软件的功能度相关,而与软件功能的描述无关,也与功能需求的如何实现无关。功能点(FP)度量可以用作从分析模型中获得系统大小的预测手段。
9.2.2 基于软件设计的复杂性分析
人们在设计硬件时,常利用设计测度来确定设计质量,指导设计演化。然而对于软件而言,大部分软件工程师却忽视对软件设计结果的测量以达到进一步改进软件设计的目的。软件设计由概要设计和详细设计两个阶段组成,我们分别就这两个阶段讨论软件设计复杂性度量方法。
概要设计复杂性度量主要集中在软件结构的特征上。Card和Glass定义了三种软件设计复杂度测度:结构复杂度、数据复杂度和系统复杂度。美国空军提出了一种计算“设计结构质量指标(DSQI)”的方法用来度量软件结构的复杂度。该方法使用了类似于在IEEE Std.982.1—1988中提出的概念。
详细设计复杂性度量主要集中在模块内部结构的复杂性上。麦凯伯(McCabe)提出了一种环形计数的方法来确定程序控制流的复杂度。使用McCabe方法可直接利用程序流程图计算其“判定数”(即比较个数,对于复合条件判定要先转化成单一条件判定),也可根据程序流程图导出的程序图计算其“环形数”(即封闭环域数)来进行,其计算公式为:
程序环形复杂度V(G)=程序流程图中的“判定数”+1
=程序图中的“环形数”。
=m-n+2
其中m对应于程序图中的弧数,n对应于程序图中的节点数。
9.2.3 基于源程序代码的复杂性分析
软件开发经过编码阶段后,便得到源程序代码。霍尔斯特德(Halstead)根据源代码中运算符和操作数的测量值来度量源程序代码的复杂度。在Halstead方法中,运算符是指用来处理程序中常量和变量的语法元素等,如算术运算符、逻辑运算符、关系运算符、流程控制语句、函数调用等;操作数则是指源程序代码中的常量和变量等。但对非执行语句,如注释,则不进行考虑。Halstead方法使用了以下4个基本测量数据:
程序中运算符总数N1
程序中操作数总数N2
程序中运算符种类数n1
程序中操作数种类数n2
根据以上4个测量数据,可以在以下几个方面对源程序代码的复杂性进行度量:
实际程序长度N=N1+N2
编程语言层次L=(2/n1)*(n2/N2)