基于USDP的软件质量控制陈利剑曾一(重庆大学计算机科学与工程学院重庆400044)摘要:在研究软件质量控制的过程中,CMM是一个很重要的成果。作为一种框架性标准,并不具备可操作性,需要结合一种具体的可操作性过程来实现CMM。在统一建模语言UML的基础上产生了统一软件开发过程USDP。为了达到软件过程控制软件质量的目的,本文基于USDP实现了CMM可重复级。并在此基础上给出了简化的企业软件过程模型,试图为企业软件过程的确立提供基础。关键词:UML,USDP,CMM,KPA,软件过程SoftwareQualityControlBasedonUSDPCHENLiljianZENGYi(SchoolofComputerEngineeringandScienceChongqing400044)Abstract:Duringtheresearchofsoftwarequalitycontrol,CMMisanimportantproduction.itisabodyofstandard,however,itisnotoperational.AoperationalprocessisneededtointegrateforachievingCMM.UnifiedSoftwareDevelopmentProcess(USDP)isestablishedbasedonUnifiedModelLanguage(UML).Inordertocontrolsoftwarequalityusingsoftwareprocess,achievingCMMbasedonUSDPispresentedinthispaper.Andasimplemodelofenterprisesoftwareprocessispresentedinthispaper,attempttoprovidethefoundationforenterprisesoftwareprocess.Keyword:UML,USDP,CMM,KPA,SoftwareProcess1引言软件质量对于软件工程师、管理人员和研究人员来说都是一个重要的问题[2]。国际上从20世纪70年代就开始研究软件的质量控制问题,Rubey和Hartwick于1968年提出一些质量属性的度量方法,Boehm等人于1976年提出了定量地评价软件质量的概念[17]。随着软件质量领域知识的增长,逐渐出现了一些重要的国际标准,ISO9000和CMM就是其中最具代表性的成果。CMM强调了软件机构能一致地、可预测地生产高质量产品的能力。CMM是由SEI应美国联邦政府评估软件商能力的要求提出的,其目的是在成本和进度要求条件下提交高质量的软件[15]。在1993年推出了CMM1.1版本[1],CMM将企业的软件过程成熟能力划分为五级,分别是初始级、可重复级、已定义级、已管理级和优化级。等级越高的企业软件过程可见度越好,软件过程的可控性越高,产品性能的预见性以及软件项目的风险评估也越准确,企业的生产能力以及产品质量也越来越高。软件质量是反映软件系统或软件产品满足明确或隐含需求能力的特性的总和[4]。由于软件质量一直是一个捉摸不定的目标[3],软件质量的讨论一般都集中在开发过程或软件产品的属性上[11]。CMM是改善过程和产品质量的标准,但是其不具备过程性的可操作性,不利于具体实现。本文就是结合统一软件开发过程(USDP)来实现CMM可重复级,从而使软件企业通过软件过程控制软件产品质量。2新一代的软件开发过程USDP是在统一建模语言UML的基础上建立起来的。USDP对于如何运用UML概念进行软件开发提供了详细的指导。过程应该能够指导开发队伍做什么,怎么分配任务和合作,并且能保证开发组间高效地交流[5];一个有效的过程能为有效地开发高质量的软件提供准则,降低开发风险并增强预见性[14],USDP满足了这些条件。USDP是一个动态的开发过程,能随时间的推移不断进化。USDP是一个可以剪裁的过程框架,可以根据应用领域或具体项目进行剪裁。因为存在很多的原因可以导致在软件开发中过程的不同[5]。USDP的一个比较完整的定义:是一种基于构件的,用况和风险驱动的,以构架为中心,迭代和增量式的开发过程。下面分五个要素来解析USDP。1)USDP是基于构件的。基于构件的含义是USDP支持软件复用,并增强软件产品的可维护性。软件复用是提高软件生产力和质量的一种技术,可以减少开发和维护的花费[17]。2)USDP是用况驱动的。用况驱动的含义是在产品开发的各个阶段都和用户的真正需求直接关联,即用况驱动开发过程。以用况捕获需求、制定计划、分配任务、监督执行、测试制品,将核心工作流结合为一体。在开发的每个阶段都能回顾一下为用户实际做了什么,从而确保系统能真正满足用户的需求,提高了系统的有的放矢性,远离盲目性。3)USDP是风险驱动的。迭代的开发方法降低了风险,USDP强调对风险进行预测、集中管理和跟踪处理。软件开发长期面临这些坏的境况:预算超支,交付延期,不能满足用户需求和无用的系统,即使开发技术、工具和软件技术得到巨大的提升这些境况也仍然在继续[6],八十年代早期,这些问题通过软件风险管理得到减轻[7]。总的来说,软件风险管理对于改善系统开发带来了很大的希望[8]。4)USDP是以构架为中心的。以构架为中心的含义是在开发的早期阶段勾画整个开发的骨架性的蓝图,抓住系统的重要结构元素建立构架视图,用来控制后期的迭代开发。基于构架的软件开发使注意力由代码行转向了粗略的构架元素(如构件和连接器)和它们的连接结构[9],对于理解系统、组织开发和构件重用都有很大的作用。5)USDP是迭代和增量式的。其含义是以细小的步骤开发,整个开发分为多次迭代,每次迭代象一个微型项目,经历所有的核心工作流。增量就是两次相临的迭代之间的发布产品的差别,一次迭代的结果就是一个增量。每次迭代后产生一组基线制品,对基线制品经过评估和修改后才在此基线的基础上进行下一次迭代开发。通过一系列的迭代得到最后的产品发布。此要素有利于逐步降低风险,适应用户需求的不断变化,允许开发过程中的灵活多变,迭代和阶段产生的基线和里程碑增加了过程的可视性,便于过程、产品的管理和控制。3基于USDP实现CMM可重复级CMM的主要目标之一是改善过程和产品质量[10]。CMM只是描述了过程应当解决的问题,而非如何去执行;其关键过程域(KPA)是静态的、高层次地、抽象地描述了过程,而没有说明如何去执行,即使其关键实践也只是描述要做什么,而没有强行规定“怎样”完成目标[15]。USDP却是一个描述详细的开发过程,叙述了详细的实现步骤。CMM是一种框架性的标准,它可以用各种过程和方法实现。要实现CMM,所选用的过程必须不仅能够直接实现CMM中的大部分目标,而且还要是可管理的,提供方便CMM实现的机制和活动。新一代的开发过程USDP能够达到这一要求,并且两者之间有很多相同和相似的概念,如基线、图1.USDP五要素关系图1.驱动,2.指导,3.驱动,4.控制,5.实现,6.驱动,7识别,8.缓解,9.复用用况构架迭代123456风险构件789里程碑等。从共同特性来看,CMM要满足一个KPA,依靠的是过程的执行和制度化两个方面。执行在执行活动共同特性中描述,而制度化在其他共同特性中描述[15],其他的共同特性是为保证执行活动而服务的。过程是活动的集合,保证了活动质量才能为保证过程的质量提供基础,从而进一步为生产高质量的软件产品提供基础。尽管没有太多证据能确切说明过程标准能保证好的产品[3],但却有很多的证据说明标准和标准相关的指南及其推荐的实践,的确能改善产品质量[13]。下面就通过实现CMM,达到USDP对软件质量控制的目的。以USDP实现CMM可重复级,以KPA的目标为目标,以KPA的执行活动为基础,对每个KPA都给出了基于USDP的实现。因为USDP是一个开发过程,而有的KPA是属于其他过程的。在USDP不具体支持实现的情况下,也给出了USDP为KPA目标的实现提供了便利和基础。以辅助实现表述。下面对每个KPA进行描述:1)需求管理目标1:控制软件的系统需求,为软件工程和管理应用建立基线。实现:在USDP中,基于用况来捕获和管理系统需求,随着迭代用况不断增加,需求不断完善。随着迭代用况得到测量验证,对系统需求进行可控的更新。为了能有效地描述需求,提出了需求集合,主要包括用况模型(功能需求)和补充需求(非功能需求)。需求集合帮助分析人员控制和管理以后的开发工作。目标2:开发计划、产品和活动与指定给软件的系统需求一致。实现:在USDP中,系统需求主要由用况模型组成,而USDP是由用况驱动的开发过程,强调用况被分析、用况被设计、用况被实现、用况被测试等。并且需求工作流的结果被用来帮助项目经理规划迭代和客户版本。在里程碑版本也有用户评审和验证的过程。2)软件项目计划目标1:成软件估计文挡,以供计划和跟踪软件项目使用。实现:在USDP的初始阶段要求在宽限条件下对成本、工作量、进度和产品质量进行初步估计。体现在建立最初的案例、估计主要的风险、寻找缓解的办法。目标2:定软件项目的活动和约定计划并形成文挡。实现:在USDP中,强调计划先于行动,计划分两类,项目计划和迭代计划,两类计划一起制定,但是在制定时都比较粗略,随着迭代的进行,将变的越来越详细。每次迭代又制定迭代计划和迭代评价准则。另外,建立风险清单并且按对系统的影响程度进行排序。目标3:关小组和个人认同与软件项目相关的约定。实现:在USDP的初试阶段制定生命周期目标后,要求必须得到项目相关人员的认同。3)软件项目跟踪和监督目标1:软件计划对实际结果和过程运行效能进行跟踪。实现:根据软件计划中的评估准则对迭代开发中的基线和里程碑制品进行评估。只有通过评审后才进行下一次迭代。依据软件计划中的风险清单对风险进行跟踪处理,预先避免或缓解。迭代开发能很好地支持软件项目的跟踪,基线制品和里程碑版本都增强了开发的可视性以便于跟踪监督。目标2:实际结果和过程运行效能与软件计划相差甚远时采取改进措施。实现:每次迭代评估都会得到反馈信息,这些反馈信息有两个作用,修改本次迭代中与用户需求和开发计划中不相符合的地方,调整下一次的迭代计划。另外,使用可视化的UML语言对变更进行记录和控制。目标3:改软件约定时经相关小组和个人同意认可。实现:在USDP的每次迭代中,强调交付本次增量递增的功能,并进行评估,使与项目所有相关的人员能够清楚地看到项目的进展情况。所有相关人员认可本次增量后才进行下一次迭代,在出现变更时也要所有相关人员认可。4)软件的分包合同管理目标1:承制方选择合格的软件分承制方。辅助实现:尽管USDP中没有具体涉及项目分包管理的问题,但是USDP以用况描述需求,以构架刻画系统的开发方式为项目的分包提供了基础。主承制方可以根据用况进行分包,也可以根据构架进行分包。目标2:承制方和软件分承制方就彼此的约定达成一致。辅助实现:在构架形成之后,整个系统可以并行开发。因为有了统一的接口,并且USDP本身就是基于构件的,所以以构件或子系统进行分包开发是非常恰当的。在主承制方开发计划的基础上,分承制方可以有自己的开发计划。目标3:制方和软件分承制方保持工作联系。辅助实现:迭代开发的方式保证了主分承制方保持工作联系,USDP采用统一建摸语言UML来记录表示,保证了主分承制方的交流合作。目标4:承制方根据制定的约定跟踪软件分承制方的实际执行情况及其结果。辅助实现:在主承制方评估基线和里程碑版本时也要评估同一时间的分承制方制品。主承制方验收分承制方的产品,依据构架组合产品,由统一的配置管理组织发布产品。5)软件质量保证目标1:件质量保证活动做到有计划。辅助实现:尽管在USDP中没有明确提出软件质量保证的概念,但是其迭代计划中每次迭代的评估准则,其中包括每次迭代应该达到的目标。为软件质量保证提供了基础,也为软件质量保证计划提供了基础。目标2:客观地验证产品及其活动是否遵循应用的标准,规程和需求。实现:在每次