软件质量和软件过程.docx
《软件质量和软件过程.docx》由会员分享,可在线阅读,更多相关《软件质量和软件过程.docx(33页珍藏版)》请在冰豆网上搜索。
软件质量和软件过程
软件质量和软件过程
一、软件质量特性
商务印书馆四角号码新词典(1978年版)中质量的定义:
(1)产品或工作好坏程度;
(2)物体中所含物质的多少。
本文取第一个定义。
SW-CMM对质量的定义是:
(1)一个系统、组件或过程符合特定需求的程度;
(2)一个系统、组件或过程符合客户或用户的要求或期望的程度。
1983年,ANSI/IEEESTD729给出了软件质量定义[92]:
软件产品满足规定的和隐含的与需求能力有关的全部特征和特性,它包括:
(1)软件产品质量满足用户要求的程度;
(2)软件各种属性的组合程度;(3)用户对软件产品的综合反映程度;(4)软件在使用过程中满足用户要求的程度。
图
图
1-1ISO的软件质量度量模型的类图
按照ISO/TC97/SC7/WG3/1985-1-30/N382,软件质量度量模型由三层组成。
高层称软件质量需求评价准则(SQRC),中层称软件质量设计评价准则(SQDC),低层称软件质量度量评价(SQMC)。
ISO认为应对高层和中层建立国际标准,以便在国际范围内推广应用软件质量管理,而低层可由各使用单位自行制定。
ISO高层由8个要素组成、中层由23个评价准则组成,它们之间的关系如图1-1所示。
(图中的◆符号代表某项下面各子项是必须的,缺一不可。
例如,效率项由存储效率和运行效率子项组成,两者缺一不可,这是统一建模语言(UnifiedModelingLanguage,UML)的组合的表示方法)。
由于许多人纷纷提出意见,按1991年ISO发布的ISO/IEC9126质量特性国际标准,SQRC已降为6个。
在这个标准中,三层次中第一层称为质量特性,第二层称为质量子特性,第三层称为度量。
该标准定义了6个质量特性,即为功能性(functionality)、可靠性(reliability)、可使用性(usability)、效率(efficiency)、可维护性(maintainability)、可移植性(portability)。
并推荐21个子特性,如适合性、准确性、互用性、依从性、安全性、成熟性、容错性、可恢复性、可理解性、易学习性、操作性、时间特性、资源特性、可分析性、可变更性、稳定性、可测试性、适应性、可安装性、一致性和可替换性,但不作为标准。
图1-2软件质量特性类图
Figure1-2ClassDiagramofSoftwareQuality
表1-1用户要求与软件质量特性
Table1-1TheUserRequirementandSoftwareQualityCharacteristic
用户要求
要求质量的定义
质量特性
功能
·能否在有一定错误的情况下也不停止运行?
·软件故障发生的频率如何?
·故障期间的系统可以保存吗?
·使用方便吗?
完整性(integrity)
可靠性(reliability)
生存性(survivability)
可用性(usability)
性能
·需要多少资源?
·是否符合需求规格?
·能否回避异常状况?
·是否容易与其它系统连接?
效率性(efficiency)
正确性(correctness)
安全性(safety)
互操作性(inter-operability)
修改
变更
·发现软件差错后是否容易修改?
·功能扩充是否简单?
·能否容易地变更使用中的软件?
·移植到其它系统中是否正确运行?
·可否在其它系统里再利用?
可维护性(maintainability)
可扩充性(expandability)
灵活性(flexibility)
可移植性(portability)
再利用性(reusability)
管理
·检验性能是否简单?
·软件管理是否容易?
可检验性(verifiability)
可管理性(manageability)
上述定义表明,软件质量依赖于软件的内部特性及其组合。
为了对软件质量进行度量,首先必须对影响软件质量的要素进行度量,并建立实用的软件质量度量体系和模型。
在进行软件质量设计时,必须考虑利弊,全面权衡,根据质量需求,适当合理地选择/设计质量特性,并进行评价。
图1-3软件质量形成过程活动图
图1-2给出了上述软件质量特性构成关系的一个扼要说明。
软件质量是建筑在用户要求基础上的,所以必须掌握好用户要求与开发过程中逐渐形成的质量特性之间的关系。
一般反映到需求规格上的用户要求都属于与功能及性能有关的运行特性,或与修改、变更、及管理有关的维护特性。
表1-1表示了这些用户要求与质量特性的关系。
经过质量管理的软件开发过程也是逐步实现反映用户所要求的质量要求(qualityrequirement)的质量特性的过程。
图1-3表示在如下的质量管理体系下与软件开发过程中实现质量管理的过程[75]。
第一步是在费用与期限的制约下将需求规格与质量规格变换成设计书和程序的过程。
在这个过程中将使用软件开发技术和开发工具把用户要求的质量特性表现在设计书和程序里。
第二步是对设计书和程序等各工程开发成果进行评审的过程。
评审(review)采用质量检查会也称质量论证会(walkthrough)、质量审查(inspection)等早期检查手段,一般在各工程作业结束后立即进行。
参加者是一些和项目有关的技术人员。
目的在于尽可能在早期工程(上游工程)阶段发现潜入的软件缺陷,将有缺陷的设计书和程序变换成无缺陷软件。
在这一个过程中,如果发现设计书或程序中的缺陷就会导致再设计或再编码的返工作业。
第三步是对最终开发成果进行测试,将第二步的无缺陷软件变换成既无缺陷又无差错的软件的过程。
如果在测试中发现软件差错,和第二步一样也会导致再设计和再编码的返工作业。
二、软件过程分类
过程定义:
韦氏词典将“过程”定义为“某物生产的操作体系……能导致结束或得到结果的一系列的活动、变革、或操作。
”IEEE将“过程”定义为“为实现给定目标所执行的一系列的步骤(IEEE-STD-610)。
”
过程模型的主要作用:
过程模型不仅详细规定了在每个阶段的所有任务和活动﹑任务活动之间的层次时序关系,还制定了在软件开发和演化中各个阶段的时序和约束条件,建立了从一个阶段进入下一个阶段的过渡准则。
同时,它还确定了软件开发过程中所应遵守的“策略”或限制。
过程模型还有利于软件开发中各类人员之间的有效通信和过程重用,支持过程演化,便于过程管理。
图2-1理想的软件过程模型的标准类图
软件过程:
软件开发人员开发和维护软件及相关产品(如项目计划、设计文档、代码、测试用例和顾客手册)的一套行为、方法、实践和转化过程。
图2-2软件生存周期过程分类
图2-3基本过程类图
图2-4支持过程类图
理想的过程模型的标准:
(1)能表示所有活动的组织方式;
(2)能表示各活动的工作方式;(3)能表示各活动的先后﹑并发﹑同步﹑制约等关系;(4)能表示过程的动态特性;(5)能随实际情况进行动态演化;(6)易于被所有参与开发活动的人员理解;(7)具有很强的灵活性,可以适应不同的软件项目;(8)支持软件开发环境的建立;(9)易于对开发过程进行控制和管理。
本文用图2-1表示之(图中的◇符号代表某项由下面各子项组成,但各子项不是缺一不可的,由于各种原因有可能缺若干子项,这是UML的聚集的概念)。
显然,若一个过程模型要完全符合这些标准几乎是不可能的,应根据实际需要选择几个最主要的标准即可。
1985年正式发布了一项国际标准,即ISO/IEC12207信息技术----软件生存周期过程(见图2-2),这是软件过程研究的一个重要成果。
实践表明,软件过程需要不断地完善。
首先,从非工程化的软件开发方式转变为工程化的软件开发方式,按照软件工程的系统方法进行软件的工程活动和管理活动,进而不断地完善各个软件过程,从而不断提高软件过程能力。
随着这种能力的提高,一个软件组织完成软件产品时在预算、进度,特别是产品质量方面的风险就逐步降低。
ISO/IEC12207将软件生存周期的各个过程分成三类:
基本生存周期过程(见图2-3)、支持生存周期过程(见图2-4)和组织生存周期过程(见图2-5)。
图2-5组织过程类图
例题1、填出MaCall给出的11个质量要素特性的英文名称,并解释部分。
1.正确性(correctness)。
程序满足规格说明及完成用户目标的程度。
2.可靠性(reliability)。
能够防止因为概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。
3.有效性(efficiency)。
软件系统能最有效地利用计算机的时间资源和空间资源。
4.完整性(integrity)。
控制未被授权人员访问程序和数据的程度。
5.可用性(usability)。
学习使用软件的难易程度。
6.可维护性(maintainability)。
软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其它的属性,使软件产品适应环境的变化等。
7.可测试性(testability)。
测试程序使之具有预定功能所需的工作量。
8.灵活性(flexibility)。
改变一个操作程序所需的工作量。
9.可移植性(portability)。
软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。
10可重用性(reusebility)。
概念或功能相对独立的一个或一组相关模块定义为一个软部件,软部件可以在多种场合应用的程度。
11.可互操作性(interoperability)。
两个或多个系统交换信息并相互使用已交换信息的能力
例题2、PDCA循环用于软件开发管理
传统的质量管理思想和技术同样可以应用于软件项目管理,由于现在中国处于工业化社会和信息化社会并存的情况,传统的质量管理思想和技术更容易为人们所接受,技术上也比较成熟,是广大中国中小型软件企业最实用和现实的选择。
在一定的资源、时间和费用条件下完成符合需求规格的高质量软件,就必须采用适当的软件管理技术。
管理技术包括管理实行前对开发规模、开发工时、开发费用的估算,以及以这个基本估算为依据所展开的各项管理技术。
开发规模是对产品程序的大小的描述,用行数或语句数(step数)表示,分基本语句数(statementstep数)和命令语句数(commandstep数)两种表示方式。
开发工时是对软件工程技术人员工作时间的描述,用(人日)或(人月)等来表示。
开发费用指开发所需要的各种费用,一般包括人工费(工时数×单价)、计算机机时费(计算机使用时间×单价)以及其它消耗。
软件开发管理也称开发项目(project)管理。
即将有关软件开发的各项活动统一称为“开发项目”,在一定的目标、计划、进度和预算指导下推行开发项目内容的实施。
软件开发管理的关键问题是如何在软件生存周期内对质量、时间、费用三要素进行量化,如何通过质量管理、工程管理和费用管理活动对这三要素进行分析和评价。
表2-2软件开发管理技术及其评价内容
管理技术
评价内容
质量管理
·质量检查会(walkthrough)
·检查(inspection)
·质量管理工具
·测试辅助技术
·可靠性评价技术
·质量指标评价
·质量定量分析
·要求质量与产品质量评价
·软件错误原因调查
·开发方法论与工具评价
工程管理
·甘特图(grantchart)
·CPM/PERT
·里程碑图(milestonechart)
·进度预测仿真系统
·趋势图(trendchart)
·计划与实际比较
·掌握进度情况
·交付期管理
·工程延误对策
成本管理
(费用)
·SLM*
·SQAM*
·DotyModel
·COCOMO*Model
·开发规模,工时,成本预算与实际比较
·预算与实际成本比较
·修正基线生产经营效率
*SLM:
软件生命周期管理(softwarelife-cyclemanagement)
SQAM:
软件质量评估和测量(softwarequalityassessmentandmeasurement)
COCOMO:
构造性成本模型(constructivecostmodel)
表2-2是一个将传统工业管理思想应用于软件开发管理的例子。
为了有效地进行开发管理,一定的管理措施和标准化是很重要的。
标准化(standardization)的目的是为了使软件开发作业工厂化,从依赖开发人员个人能力的手工业式生产转向软件工程学指导下的工业化生产。
软件开发标准化分为作业本身标准化和管理活动标准化两大类。
前者指在软件开发和维护的各个阶段设定的有关作业内容的标准(standard);后者指在软件开发管理中为使质量管理、费用管理等各项管理业务都能有效的实施而设定的管理基线。
质量管理的目的在于保证开发成品的最终质量满足用户对质量的要求。
为此,需要设定质量目标,质量保证基线,确立质量管理制度和措施。
特别要重视当然质量(must-bequality),因为它是可靠性的重要保证因素。
工程管理的主要工作包括确立日程计划,规定各开发阶段(工程)的定义和成品,设定工程管理重点——“里程碑(milestone)”,制作工程作业网络图,掌握各工程进度,及时发现工程延误和提前并及时调整相关部署等等。
在实际中,由于软件产品是非直观的,判断其生产过程中的准确进度常常是很困难的。
通常的办法是事先将开发进度状况绘制成图表,在适当的时机设定软件工程管理点(里程碑)及相应的评价项目。
当执行中进行到这些里程碑处时,对进度和相应项目进行检查和评价。
费用管理有两方面的工作,一是正确估计用于开发和维护的工时、人工费和计算机机时费等费用预算,一是按此预算管理生产过程中投入的费用。
具体包括随时掌握预算与支出的相对状况,安排与调度人力,分析预算与实际的距离,制定标准单价,使费用内容具体化,分析损益收支情况,设定生产指标和改善生产效益等等。
图2-6是软件开发管理过程的活动图。
图2-6软件开发管理过程的活动图
图2-7列出了软件质量测量和质量保证系统在软件保证活动中的5个实施步骤:
(1)目标(target):
以用户要求和开发方针为依据,对质量需求准则、质量设计准则中的各质量特性设定质量目标。
对各准则的重要程度可以设定“特别重要”、“重要”、“一般”3级。
(2)计划(plan):
设定适用于被开发软件的评测检查项目,与此同时还要研讨实现质量目标的方法和手段。
(3)执行(do):
在开发标准和质量评价准则的指导下,制作高质量的规格说明书。
在接受质量检查之前要先做自我检查。
(4)检查(check):
按计划阶段设定的质量评价准则进行评价,算出得分,用质量图的形式表示出来。
对比评价结果的质量得分和质量目标,看软件是否合格。
(5)改善(action):
对评价发现的问题进行改进,如果改进实现并达到了质量目标,接转入下一个工程阶段。
图2-7软件质量测量与质量保证的活动图
三、软件过程管理国外发展情况
ISO9000是质量管理和质量评价系列标准,目标在于开发过程,ISO9000只决定过程的要求是什么,而不管如何实现。
ISO9000标准针对软件部分的是ISO9001和ISO9000-3。
其中ISO9001负责处理设计、开发、生产、安装和服务产品,ISO9000-3负责处理设计、开发、生产、安装和维护计算机软件。
开发详细的质量计划和程序控制配置管理、产品检验和合法性检查(测试)、不规范行为(软件缺陷)和修正措施(修复)。
准备和接受软件开发计划证实,包括项目定义、产品目录清单、项目进度、产品说明书、如何组织项目的描述、风险和假设的讨论,以及控制策略。
使用客户容易理解、测试时容易进行合法性检查的用语来表达说明书。
开发控制软件设计随产品的生命周期中而变化的程序,开发和编制软件测试计划,开发检测软件是否满足客户要求的方法,实施软件合法性检查和验收测试,维护测试结果的记录,控制调查研究和解决软件缺陷的方式。
证明产品在发布之前已经就绪,开发控制产品发布过程的程序,明确指出和规定应该收集何种质量信息,使用统计技术分析软件开发过程以及使用统计技术评估软件产品。
著名的软件过程能力成熟度模型(SoftwareCapabilityMaturityModel,SW-CMM)是SEI从1986年开始研究并完成的,它侧重于对软件开发过程和开发方法论的考察。
CMM包括5级:
初始级(Initial),2级:
可重复级(Repeatable),3级:
已定义级(Defined),4级:
已管理级(Managed),5级:
优化级(Optimizing)。
CMM还提供了一整套较为完善的软件研发项目管理的方法论。
在CMM模型获得巨大成功的情况下,SEI又开发了一系列其它CMM模型,包括系统工程成熟度模型(SystemsEngineeringCapabilityMaturityModel1994,SE-CMM)、软件人员成熟度模型(PeopleCapabilityMaturityModel,1995,P-CMM)、软件获取成熟度模型(SoftwareAcquisitionCapabilityMaturityModel,1996,SA-CMM)等。
美国先后在这上面投资了5亿多美元,做了很多实践工作来改进软件研发项目管理,而且其内容还在不断地改进,SW-CMM1.1版本推出后,又推出了SW-CMM2.0草案。
目前,取消了单独的CMM,开发出集成能力成熟度模型(CapabilityMaturityModelIntegration,CMMI),其模型包括CMMI-SW、CMMI-SE、CMMI-SE/SW、CMMI-SE/SW/IPPD],模型有连续表示(StagedRepresentation)和分级表示(ContinuousRepresentation)两种。
两种表示方法各有不同的使用对象,熟悉SE-CMM模型者用连续表示更容易,而熟悉SW-CMM模型者用分级表示更容易。
ISO9000产品质量体系认证和CMM体系认证在软件先进国家格外重视。
印度软件企业普遍开展ISO9000质量体系认证,多数软件企业发展遵循ISO9001的标准,到目前为止已有100多家取得了ISO9001的认证;而且有越来越多的印度软件企业已经开始认识到采用CMM评估体系的重要性,而且重点已经开始转移。
印度的软件企业是全球软件业进行CMM评估实践最早和最多的。
据不完全统计,到2000年,全球有75家通过了CMM第4级和第5级认证,在世界9大软件出口国中,印度的软件出口规模和质量均在世界前列。
美国是世界软件生产大国,不论在技术创新和管理手段上都代表着软件发展的先进水平。
据不完全统计,到2000年,全球已有近万家软件开发企业通过了CMM认证。
其中绝大多数被认证的软件开发企业处于CMM第2级,有75家通过了CMM的第4级和第5级。
达到后两个级别的软件企业在不断增加。
美国企业所占比例约5%,十分重视标准化的日本企业所占比例约10%。
在这些通过CMM认证的软件企业中,不乏成功者。
例如,Raytheon公司现在有近400名软件开发人员,公司用近五年的时间,将其成熟度从第1级提高到第3级,已经收到明显的效果。
为了提升到较高的级别,公司所花费的投资于五年来因成本降低所收到的效益之比为1:
8,直接生产效率提高了大约14倍。
该公司所开发的产品在成熟度提升前每千条指令出错率约为0.31条,提升后仅为0.03条。
国外主要软件质量/软件过程研究组织和机构:
美国卡内基·梅隆大学软件工程研究所(CarnegieMellonUniversity/SoftwareEngineeringInstitutionCMU/SEI)成立于1984年,其长期目标是能够更好、更快和更便宜地预测美国国防部软件密集系统的获取、开发和维护。
SEI认为软件学科的特点是可预测性:
可预测的成本、可预测的进度、可预测的质量和可预测的功能。
SEI的义务是使软件工程进化,使其从专门的、劳动密集的、个人英雄主义的活动中解脱出来。
总之,SEI寻求的是依赖于软件的系统能按可预测的方式获取、开发和进化。
Web站点www.sei.cmu.edu。
软件工程实验室(Softwareengineeringlaboratory,SEL)在美国国家宇航局所属的戈登空间飞行中心(NationalAeronauticsandSpaceAdministration/GoddardSpaceFlightCenter,NASA/GSFC)支持下于1977年建立。
的目的是研究开发应用软件有效的软件工程技术,主要由NASA/GSFC的系统开发部,马里兰大学计算机科学系(UniversityofMaryland)和计算机科学公司飞行动力技术组(ComputerSciencesCorporation,FlightDynamics)三部分组成,进行了长期的软件工程实践,包括:
(1)理解GSFC环境下的软件开发工程;
(2)度量在这种过程下的方法论、工具和模型的效用(effect);(3)识别和应用成功的开发实践。
Web站点sel.gfsc.nasa.gov。
软件技术支持中心(SoftwareTechnologySupportCenter,STSC)位于犹他州奥格登的Hill空军基地。
成立STSC旨在帮助空军的组织机构标识、评价和采用改善产品质量、生产效率和可预测性的技术。
采用术语技术(termtechnology),从最广泛的意义上包括提高人类能力的过程、方法、技术和工具,STSC关注对DoD任务有益的领域已证实的技术。
STSC除了提供支持和咨询服务外,还出版CrossTalkTheJournalofDefenseSoftwareEngineering。
Web站点www.stsc.hill.af.mil.org。
软件生产率集团(SoftwareProductivityConsortium,SPC)是一个包括产业界、政府部门和学术界在内的非赢利的联合体。
因为有90多个会员公司,SPC提供了改善系统和软件的质量、可靠性和上市时间性能所需要的技术和专门知识。
SPC的技术计划适用于集成基于本质过程的集成化系统和软件开发活动。
SPC提供了各种改善模型和方法的课程,包括软件CMM和CMMI、度量和软件工程技术、集成化系统和软件过程开发。
SPC提供了评估和咨询服务,还出版季刊时事通讯并发表其它与系统工程、软件工程、系统和软件集成以及过程改进有关的技术性文章。
Web站点www.software.org。
国际系统工程咨询委员会(InternationalCouncilonSystemsEngineering,INCOSE)是国际性的非赢利组织,目的是为多学科系统产品的开发制定、发展和完善系统工程方法。
INCOSE成立于1990年,目前已拥有3900多名系统工程专业人士。
INCOSE是EIA/IS731的主要开发者,并为CMMI项目提供系统工程专家。
Web站点www.incose.org。
电子工业联盟(ElectronicIndustriesAlliance,EIA)是电子与高技术协会和公司的联合体,承担着共享知识和影响的义务。
EIA发表了许多标准和技术出版物来为公众利益服务,减少制造商和采购商之间的误会,促进产品的可交换性和改善,以及辅助采购商根据特定的需要快速选购并获得合适的产品。
EIA过渡标准,系统工程能力和EIA/IS731就是CMMI的三个源模型之一。
Web站点www.eia.org。
例3