1软件度量综述2软件度量(softwaremeasurement)软件度量(softwaremeasurement):对软件开发项目、过程及其产品进行定量化的过程,目的在于对其加以理解、预测、评估、控制和改善。度量取向:软件开发的诸多事项,涉及项目、产品和过程多方面,包括规模、成本、进度、可靠性、功能性、易用性、缺陷、生产率、生命周期等等。度量取向的依据是:事实、数据、原理、法则;度量取向的方法是:测试、审核、调查;度量取向的工具是:统计、图表、数字、模型;度量取向的标准是:量化的指标。3度量与量度softwaremeasurement和softwaremetrics分别译成软件度量和软件量度,目前学界还没有明确这两个术语的区别,从文献上看,这两个术语是同义词。大多数人采用软件度量(softwaremeasurement)。4软件度量的发展历程5软件度量流程6软件度量三维度(考试)7项目度量项目度量是针对软件开发项目的特定度量,目的在于度量项目规模、项目成本、项目进度、顾客满意度等。项目度量目的:辅助项目管理、进行项目控制。8规模度量规模度量(sizemeasurement)是估算软件项目工作量、编制成本预算、策划合理项目进度的基础。软件规模的估算方法:代码行(LOC:linesofcode)功能点分析(FPA:functionpointsanalysis)德尔菲法(Delphitechnique)COCOMO模型特征点(featurepoint)对象点(objectpoint)3-D功能点(3-Dfunctionpoints)Bang度量(DeMarco‘sbangmetric)模糊逻辑(fuzzylogic)标准构件法(standardcomponent)等,9代码行(LOC:linesofcode)代码行(LOC):所有可执行源代码行数,包括可交付的工作控制语言(JCL:jobcontrollanguage)语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。一代码行(1LOC)的价值和人月均代码行数可以体现一个软件组织的生产能力。可以根据对历史项目的审计来核算单行代码价值。代码行LOC常用于源代码的规模估算,常使用的单位有:SLOC(singlelineofcode)KLOC(thousandlinesofcode)LLOC(logicallineofcode)PLOC(physicallineofcode)NCLOC(non-commentedlineofcode)DSI(deliveredsourceinstruction)。10面向LOC的估算模型Walston-Felix模型E=5.2*(KLOC)^0.91Bailey-Basili模型E=5.5+0.73*(KLOC)^1.16Boehm模型E=3.2*(KLOC)^1.05Doty模型E=5.288*(KLOC)^1.04711功能点分析法(FPA:functionpointanalysis)功能点分析法(FPA)是在需求分析阶段基于系统功能的一种规模估算方法,是基于应用软件的外部、内部特性以及软件性能的一种间接的规模测量。FPA法由IBM的工程师艾伦·艾尔布策(AllanAlbrech)于20世纪70年代提出,随后被国际功能点用户协会(IFPUG:TheInternationalFunctionPointUsers’Group)提出的IFPUG方法继承。12成为国际标准的功能点估算方法:加拿大人艾伦·艾布恩(AlainAbran)等人提出的全面功能点法(fullfunctionpoints);英国软件度量协会(UKSMA:UnitedKingdomSoftwareMetricsAssociation)提出的IFPUG功能点法(IFPUGfunctionpoints);英国软件度量协会提出的MarkIIFPA功能点法(MarkIIfunctionpoints);荷兰功能点用户协会(NEFPUG:NetherlandsFunctionPointUsersGroup)提出的NESMA功能点法;软件度量共同协会(COSMIC:theCOmmonSoftwareMetricsConsortium)提出的COSMIC-FFP方法;…13功能点分析的主要步骤14功能点分析法的基本计数外部输入数(EI:externalinput):计算每个用户输入,它们向软件提供面向应用的数据。输入应该与查询区分开来,分别计算。外部输出数(EO:externaloutput):计算每个用户输出,它们向软件提供面向应用的信息。这里,输出是指报表、屏幕、出错信息,等等。一个报表中的单个数据项不单独计算。外部查询数(EQ:externalquery):一个查询被定义为一次联机输入,它导致软件以联机输出的方式产生实时的响应。每一个不同的查询都要计算。内部逻辑文件(ILF:internallogicalfile):计算每个逻辑的主文件,如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件。外部接口文件(EIF:externalinterfacefile):计算所有机器可读的接口,如磁带或磁盘上的数据文件,利用这些接口可以将信息从一个系统传送到另一个系统。15面向FP的估算模型Albrecht和GaffneyE=-13.39+0.0545FPKemererE=60.62*7.728*10^(-8)*FP^3Maston、Barnett和MellichampE=585.7+5.12FP16德尔菲法(Delphitechnique)德尔菲法的步骤是:(1)协调人向各专家提供项目规格和估算表格;(2)协调人召集小组会和各专家讨论与规模相关的因素;(3)各专家匿名填写迭代表格;(4)协调人整理出一个估算总结,以迭代表的形式返回给专家;(5)协调人召集小组会,讨论较大的估算差异;(6)专家复查估算总结并在迭代表上提交另一个匿名估算;(7)重复4~6,直到最低估算和最高估算一致。17德尔菲法(Delphi)是最流行的专家评估技术,在没有历史数据的情况下,这种方式适用于评定过去与将来、新技术与特定程序之间的差别,但专家“专”的程度及对项目的理解程度是工作中的难点,尽管德尔菲技术可以减轻这种偏差,在评定一个新软件实际成本时通常用得不多,但是,这种方式对决定其他模型的输入时特别有用。18Expertjudgment专家评估(判断)Analogy类推Proportion预测(x悲观+4y乐观+z可能)/6DelphitechniqueDelphi技术WolvertonmodelWolverton模型19构造性成本模型(COCOMO:constructivecostmodel)构造性成本模型(COCOMO)是一种精确、易于使用的基于模型的成本估算方法,最早由勃姆(Boehm)于1981年提出。COCOMO模型具有估算精确、易于使用的特点。该模型按其详细程度分为3级:基本COCOMO模型中级COCOMO模型高级COCOMO模型20基本COCOMO模型是一个静态单变量模型,它用一个已估算出来的源代码行数(LOC)为自变量的函数来计算软件开发工作量。中级COCOMO模型在用LOC为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算高级COCOMO模型包括中级COCOMO模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中分析、设计等各步骤的影响。21COCOMO模型中使用的基本量有以下几个:(1)DSI(源指令条数),定义为代码行数,包括除注释行以外的全部代码。若一行有两个语句,则算做一条指令。(2)MM(度量单位为人月)表示开发工作量。(3)TDEV(度量单位为月)表示开发进度,由工作量决定。(4)COCOMO模型重点考虑15种影响软件工作量的因素,并通过定义乘法因子,从而准确、合理地估算软件的工作量。22成本度量软件开发成本度量主要指软件开发项目所需的财务性成本的估算。主要方法如下:类比估算法细分估算法周期估算法23类比估算法:类比估算法是通过比较已完成的类似项目系统来估算成本,适合评估一些与历史项目在应用领域、环境和复杂度方面相似的项目。其约束条件在于必须存在类似的具有可比性的软件开发系统,估算结果的精确度依赖于历史项目数据的完整性、准确度以及现行项目与历史项目的近似程度。24细分估算法:细分估算法是将整个项目系统分解成若干个小系统,逐个估算成本,然后合计起来作为整个项目的估算成本。细分估算法通过逐渐细化的方式对每个小系统进行详细的估算,可能获得贴近实际的估算成本。其难点在于,难以把握各小系统整合为大系统的整合成本。25周期估算法:周期估算法是按软件开发周期进行划分,估算各个阶段的成本,然后进行汇总合计。周期估算法基于软件工程理论对软件开发的各个阶段进行估算,很适合瀑布型软件开发方法,但是需要估算者对软件工程各个阶段的作业量和相互间的比例具有相当的了解。26顾客满意度度量顾客满意度指标(CSI:customersatisfactionindex)以顾客满意研究为基础,对顾客满意度加以界定和描述。项目的顾客满意度度量确定各类信息、数据、资料来源的准确性、客观性、合理性、有效性,并以此建立产品、服务质量的衡量指标和标准。企业的顾客满意度度量标准会因为各企业的经营理念、经营战略、经营重点、价值取向、顾客满意度调查结果等因素而有所不同。27美国专家斯蒂芬(StephenH.Kan)在《软件质量工程的度量与模型》(MetricsandModelsinSoftwareQualityEngineering)中给出的企业的顾客满意度要素:顾客满意度要素顾客满意度要素的内容技术解决方案质量、可靠性、有效性、易用性、价格、安装、新技术支持与维护灵活性、易达性、产品知识市场营销解决方案、接触点、信息管理购买流程、请求手续、保证期限、注意事项交付准时、准确、交付后过程企业形象技术领导、财务稳定性、执行印象28作为企业的顾客满意度的基本构成单位,项目的顾客满意度会受到项目要素的影响,可以细分为如表所示的度量要素:顾客满意度项目顾客满意度度量要素软件产品功能性、可靠性、易用性、效率性、可维护性、可移植性开发文档文档的构成、质量、外观、图表以及索引、用语项目进度以及交期交期的根据、进度迟延情况下的应对、进展报告技术水平项目组的技术水平、项目组的提案能力、项目组的问题解决能力沟通能力事件记录、式样确认、Q&A运用维护支持、问题发生时的应对速度、问题解决能力29产品度量软件产品质量的生命周期及其度量软件产品度量用于对软件产品进行评价,并在此基础之上推进产品设计、产品制造和产品服务优化。软件产品的度量实质上是软件质量的度量,而软件的质量度量与其质量的周期密切相关,如图所示:3031软件产品质量度量模型软件产品的度量主要针对作为软件开发成果的软件产品的质量而言,独立于其过程。软件的质量由一系列质量要素组成,每一个质量要素又由一些衡量标准组成,每个衡量标准又由一些量度标准加以定量刻划。质量度量贯穿于软件工程的全过程以及软件交付之后。在软件交付之前的度量主要包括程序复杂性、模块的有效性和总的程序规模在软件交付之后的度量则主要包括残存的缺陷数和系统的可维护性方面。一般情况下,可以将软件质量特性定义成分层模型。32勃姆(BarryW.Boehm)在《软件风险管理》(SoftwareRiskManagement)中第一次提出了软件质量度量的层次模型。麦考尔(McCall)等人将软件质量分解至能够度量的层次,提出FCM3层模型:软件质量要素(factor)衡量标准(criteria)量度标准(metr