在软件开发中,软件度量的根本目的是为了管理的需要。利用度量来改进软件过程。人们是无法管理不能度量的事物。在软件开发的历史中,我们可以意识到,在60年代末期的大型软件所面临的软件危机反映了软件开发中管理的重要性。而对于管理层人员来说:没有对软件过程的可见度就无法管理;而没有对见到的事物有适当的度量或适当的准则去判断、评估和决策,也无法进行优秀的管理。我们说软件工程的方法论主要在提供可见度方面下工夫。但仅仅是方法论的提高并不能使其成为工程学科。这就需要使用度量。度量是一种可用于决策的可比较的对象。度量已知的事物是为了进行跟踪和评估。对于未知的事物,度量则用于预测。本专题将讨论软件度量的一些基本问题。但应认识到软件度量的成果是非常初步的,还需要大量工作才可能真正地做到实用化,但它的实用化成就将对软件的高质量和高速发展有不可估量的影响。那么, 一、什么是度量呢?
度量存在于左右我们生活的很多系统的核心之中。在经济领域,度量决定着价格和付款的增加;在雷达系统中,度量使我们能透过云层探测到飞机;在医疗系统中,度量使得能够诊断某些特殊疾病;在天气预测系统中,度量是天气预报的基础;没有度量,技术的发展根本无法进行。度量的正式定义是: 度量 是指在现实的世界中,把数字或符号指定给实体的某一属性, 以便以这种方式来根据已明确的规则来描述它们.
因此,度量关注的是获取关于实体属性的信息。一个实体可以是一个实物,如人或房间;或者是一个事件,如旅行;或软件项目的测试阶段。属性是我们所关注的实体的特征或特性,如血压的高度(人)、时间(测试阶段)、范围或颜色(房间)、花销(旅行) 等。因此,说"度量事物"或"度量属性"的说法是不完全正确的;应该说"度量事物的属性"。"度量房间"的说法是模糊的;我们可以说度量它的长度、范围和温度等。同样说"度量温度"的说法也是模糊的,应该说:我们度量的是某一特定地理位置和特定情况下的温度。
如在设计电路的时候我们应用欧姆定律。这个定律描述了电路中电阻、电流和电压三者之间的关系。但是这些理论已超出了一般意义上的科学方法的范畴,在这种范畴里最基本的东西是度量。度量除了在发展一个理论的过程中起作用外,我们使用度量并应用它们。因此设计一个特定电流和电阻的电路时我们就知道需要多大的电压。
如果没有度量,我们很难想象关于电子、机械、及普通工程的定律能得到发展。但事实上在软件工程的主流里度量却被忽略了。
情况是:
■当我们在设计和开发软件产品的时候,我们并未能制定出度量的目标。例如:我们保证说我们将使用户界面友好、可靠、易于维护;而并未使用度量的术语来详细说明它们的具体含义。Gilb曾经说过:所谓模糊目标定理,就是没有明确目标的项目将不能明确地达到它的目标。
■我们未能对构成软件项目实际费用的各个不同的部分进行有效的度量。譬如:通常我们并不知道,和测试阶段相比,设计阶段花费时间多大。
■我们并未试图使我们开发的产品的各种质量合格。因此我们未能使用术语(如:在一段时间里使用故障的可能性、把产品安装到新环境中需花费的工作量等)向潜在的用户说明产品的可靠性很高。
■我们总是试图说服自己使用另一种新的革新的开发技术和方法进行软件开发
事实上,我们在软件度量方面做的工作很少很少,而且所作的度量方面的工作也与一般科学意义上的度量相分离。我们经常会看到诸如此类的话:"软件的费用有80%花费在维护上。"或"软件每一千行程序中平均有55个Bugs。"。但是这些话并没有告诉我们这样的结果是怎样产生的、试验是怎样设计、执行的、度量的是那个实体、及错误的框架是什么等等。没有这些东西,我们就不能在我们自己的环境中客观地进行反复度量,重现度量的结果以获得与工业标准的真实比较。因此,归因于度量不充分的问题的产生是由于缺乏严格的度量方法造成的。
除了传统的对计算机硬件的性能进行度量外,对算法的复杂性的度量一直是计算机科学的重要组成部分。但是,这种度量方法只适用于小程序,而对大型、复杂的软件来说它却无能为力了。这就属于软件工程的范畴了。如果我们不承认度量将会一个更重要的作用的话,软件危机将在随后的几年里依然存在
软件度量能够为项目管理者提供有关项目的各种重要信息,其实质是根据一定规则,将数字或符号赋予系统、构件、过程或者质量等实体的特定属性,即对实体属性的量化表示,从而能够清楚地理解该实体。软件度量贯穿整个软件开发生命周期,是软件开发过程中进行理解、预测、评估、控制和改善的重要载体。软件质量度量建立在度量数学理论基础之上。软件度量包括3个维度,即项目度量、产品度量和过程度量。
就是简单的业务流图
如Lemmerich所言, 测量在科学领域有悠久的历史[116]。相对早在1889年就定义好了度量单位~米的长度测量[116],温度的度量复杂的多。
Fahrenheit和Celsius分别在1714年和1742年提出了基于某固定点间隔递增等级的温度度量方法。Celsius将100度和0度之间分为100个等份。但问题是一直不能唯一确定50摄氏度。而且长度的测量总是一个比例尺度,但是温度可能用间隔( 摄氏/华氏温度表) 或者比例尺度(开氏温度)来衡量。
今天,计算机在我们生活的每个领域几乎都扮演了非常重要的角色。在计算机上运行的软件也越来越重要。因此,可预测、可重复、准确地控制软件开发过程和软件产品已经非常重要。软件度量就是衡量软件品质的一种手段。软件品质是系统,组件或流程满足客户或用户的需求或预期的程度。
软件度量或者说软件工程度量领域是一个在过去30多年研究非常活跃的软件工程领域。软件度量(software measurement)和软件量度(software metrics)一样非常有名(译者注:为了区分,译者将software measurement和software metrics分别译成软件度量和软件量度,其实他们都可以表示软件度量)。但学界还没有明确这两个术语的区别。参照测量理论[159]的相关术语,我们采用软件度量(software measurement)。从文献上看,这两个术语是同义词。量度(metric)在这里不作度量空间理解,它理解为:度量是客观对象到数字对象的同态映射。同态映射包括所有关系和结构映射。用另一句话说,软件品质和软件度量成直对关系。这是度量和软件度量的根本理念。
软件度量研究主要分为两个阵营:一部分认为软件可以度量,一部分认为软件无法通过度量分析。无论如何,研究主流是关心软件的品质和认为软件需要定量化度量。目前有超过上千种软件度量方法被软件研究人员及从业人员提出,并且到今天有超过5000份论文出版发表。
随着软件定量方法(如:软件度量)的重要性不断增加,市场上出现了许多度量工具。然而,度量工具还是很混乱。因为没有统一的度量标准规范,每种工具发明商家都是按照他们自己的软件度量规范。文献[44]对度量工具做了好的综述。Daich等根据分类学把度量工具分成了以下几种:
● 通用度量工具;
● 小生境度量工具(Niche Metrics Tool);
● 静态分析;
●源代码静态分析;
● 规模度量
简介
软件开发正在经受一场危机。费用超支(特别是在维护阶段的花费太大)、生产率低下、 以及质量不高等问题正困扰着它。简言之,软件开发经常处于失控状态。软件之所以失控是因为没有度量。Tom Demarco曾经说过:"没有度量就不能控制。"这种说法是好的,但不完全。并不能说为了获得控制必须进行度量。度量活动必须有明确的目标或目的,而正是这决定着我们选择哪种属性和实体进行度量。这个目标与软件开发、使用时所涉及的人的层次有关。
以下主要从管理者和软件工程师两种角度来考虑,为了达到各种目标所要进行的度量工作。
对管理者而言
1.需要度量软件开发过程中的不同阶段的费用。
例如:度量开发整个软件系统的费用(包括从需求分析阶段到发布之后的维护阶段)。必须清楚这个费用以决定在保证一定的利润的情况下的价格。
2.为了决定付给不同的开发小组的费用,需要度量不同小组职员的生产率。
3.为了对不同的项目进行比较、对将来的项目进行预测、建立基线以及设定合理的改进目标等,需要度量开发的产品的质量。
4.需要决定项目的度量目标。例如:应达到多大的测试覆盖率、系统最后的可靠性应有多大等。
5.为了找出是什么因素影响着费用和生产率,需要反复测试某一特定过程和资源的属性。
6.需要度量和估计不同软件工程方法和工具的效用,以便决定是否有必要把它们引入到公司中。
对软件工程师而言
1.需要制定过程度量以监视不断演进的系统。这包括设计过程中的改动、在不同的回顾或测试阶段发现的错误等等。
2.需使用严格的度量的术语来指定对软件质量和性能的要求,以便使这些要求是可测试的。例如:系统必须"可靠",可用如下的更具体 的文字加以描述:"平均错误时间必须大于15个CPU时间片。"
3.为了合格需要度量产品和过程的属性。例如:看一个产品是否合格要看产品的一些可度量的特性如"β测试阶段少于20个错误。","每个模块的代码行不超过100行。",和开发过程的一些属性如"单元测试必须覆盖90%以上的用例。"等。
4.需要度量当前已存在的产品和过程的属性以便预测将来的产品。例如:
(1).通过度量软件规格说明书的大小来预测目标? 的大小。
(2).通过度量设计文档的结构特性来预测将来维护的"盲点"。
(3).通过度量测试阶段的软件的可靠性来预测软件今后操作、运行的可靠性。
研究上面我们列出的度量的目标和活动我们可以发现:软件度量的目标可大致 概括为两类。
其一,我们使用度量来进行估计。这使得我们可以同步地跟踪一个特定的软件项目 。
其二,我们应用度量来预测项目的一些重要的特性。但是,值得指出的是我们不能 过分夸大这些预测。因为它们并不是完全正确的。软件度量得到也仅仅是预测而已。有些人甚至认为只要使用合适的模型和工具,所获得的预测可以精确到只需使用极少的其他度量(甚至根本就不用使用度量)。事实上,这种期望是不现实的。
项目度量
项目度量是针对软件开发项目的特定度量,目的在于度量项目规模、项目成本、项目进度、顾客满意度等,辅助项目管理进行项目控制。
规模度量
软件开发项目规模度量(size measurement)是估算软件项目工作量、编制成本预算、策划合理项目进度的基础。规模度量是软件项目失败的重要原因之一。一个好的规模度量模型可以解决这一问题。有效的软件规模度量是成功项目的核心要素:基于有效的软件规模度量可以策划合理的项目计划,合理的项目计划有助于有效地管理项目。规模度量的要点在于:由开发现场的项目成员进行估算;灵活运用实际开发作业数据;杜绝盲目迎合顾客需求的"交期逆推法"。
软件规模度量有助于软件开发团队准确把握开发时间、费用分布以及缺陷密度等等。软件规模的估算方法有很多种,如:功能点分析(FPA:function points analysis)、代码行(LOC:lines of code)、德尔菲法(Delphi technique)、COCOMO模型、特征点(feature point)、对象点(object point)、3-D功能点(3-D function points)、Bang度量(DeMarco's bang metric)、模糊逻辑(fuzzy logic)、标准构件法(standard component)等,这些方法不断细化为更多具体的方法。
成本度量
软件开发成本度量主要指软件开发项目所需的财务性成本的估算。主要方法如下:
类比估算法。类比估算法是通过比较已完成的类似项目系统来估算成本,适合评估一些与历史项目在应用领域、环境和复杂度方面相似的项目。其约束条件在于必须存在类似的具有可比性的软件开发系统,估算结果的精确度依赖于历史项目数据的完整性、准确度以及现行项目与历史项目的近似程度。
细分估算法。细分估算法是将整个项目系统分解成若干个小系统,逐个估算成本,然后合计起来作为整个项目的估算成本。细分估算法通过逐渐细化的方式对每个小系统进行详细的估算,可能获得贴近实际的估算成本。其难点在于,难以把握各小系统整合为大系统的整合成本。
周期估算法。周期估算法是按软件开发周期进行划分,估算各个阶段的成本,然后进行汇总合计。周期估算法基于软件工程理论对软件开发的各个阶段进行估算,很适合瀑布型软件开发方法,但是需要估算者对软件工程各个阶段的作业量和相互间的比例具有相当的了解。
顾客满意度度量
顾客满意是软件开发项目的主要目的之一,而顾客满意目标要得以实现,需要建立顾客满意度度量体系和指标对顾客满意度进行度量。顾客满意度指标(CSI:customer satisfaction index)以顾客满意研究为基础,对顾客满意度加以界定和描述。项目顾客满意度量的要点在于:确定各类信息、数据、资料来源的准确性、客观性、合理性、有效性,并以此建立产品、服务质量的衡量指标和标准。企业顾客满意度度量的标准会因为各企业的经营理念、经营战略、经营重点、价值取向、顾客满意度调查结果等因素而有所不同。比如:NEC于2002年12月开始实施的CSMP 活动的度量尺度包括共感性、诚实性、革新性、确实性和迅速性,其中,将共感性和诚实性作为CS活动的核心姿态,而将革新性、确实性和迅速性作为提供商品和服务中不可或缺的尺度。每个尺度包括两个要素,各要素包括两个项目,共计5大尺度、10个要素和20个项目。例如,共感性这一尺度包括"了解顾客的期待"、"从顾客的立场考虑问题"这两个要素;"了解顾客的期待"这一要素又包括"不仅仅能胜任目前的工作还能意识到为顾客提供价值而专心投入"、"对顾客的期望不是囫囵吞枣而是根据顾客的立场和状况来思考'顾客到底需要什么'并加以应对"这两个项目。
美国专家斯蒂芬(Stephen H.Kan)在《软件质量工程的度量与模型》(Metrics and Models in Software Quality Engineering)中认为,企业的顾客满意度要素如表7-1所示:
顾客满意度要素 | 顾客满意度要素的内容 |
技术解决方案 | 质量、可靠性、有效性、易用性、价格、安装、新技术 |
支持与维护 | 灵活性、易达性、产品知识 |
市场营销 | 解决方案、接触点、信息 |
管理 | 购买流程、请求手续、保证期限、注意事项 |
交付 | 准时、准确、交付后过程 |
企业形象 | 技术领导、财务稳定性、执行印象 |
作为企业的顾客满意度的基本构成单位,项目的顾客满意度会受到项目要素的影响,主要包括:开发的软件产品、开发文档、项目进度以及交期、技术水平、沟通能力、运用维护等等。具体而言,可以细分为如表7-2所示的度量要素,并根据这些要素进行度量。
顾客满意度项目 顾客满意度度量要素
软件产品 功能性、可靠性、易用性、效率性、可维护性、可移植性
开发文档 文档的构成、质量、外观、图表以及索引、用语
项目进度以及交期 交期的根据、进度迟延情况下的应对、进展报告
技术水平 项目组的技术水平、项目组的提案能力、项目组的问题解决能力
沟通能力 事件记录、式样确认、Q&A
运用维护 支持、问题发生时的应对速度、问题解决能力
软件质量的生命周期及其度量
软件产品度量用于对软件产品进行评价,并在此基础之上推进产品设计、产品制造和产品服务优化。软件产品的度量实质上是软件质量的度量,而软件的质量度量与其质量的周期密切相关。
软件质量度量模型
软件产品的度量主要针对作为软件开发成果的软件产品的质量而言,独立于其过程。软件的质量由一系列质量要素组成,每一个质量要素又由一些衡量标准组成,每个衡量标准又由一些量度标准加以定量刻划。质量度量贯穿于软件工程的全过程以及软件交付之后,在软件交付之前的度量主要包括程序复杂性、模块的有效性和总的程序规模,在软件交付之后的度量则主要包括残存的缺陷数和系统的可维护性方面。一般情况下,可以将软件质量特性定义成分层模型。勃姆(Barry W. Boehm)在《软件风险管理》(Software Risk Management)中第一次提出了软件质量度量的层次模型。而麦考尔(McCall)等人将软件质量分解至能够度量的层次,提出FCM 3层模型(参见表5-13):软件质量要素(factor)、衡量标准(criteria)和量度标准(metrics),包括11个标准,分为产品操作(product operation)、产品修正(product revision)和产品转移(product transition)。ISO 9126将软件质量总结为6大特性,每个特性包括一系列副特性,其软件质量模型包括3层,即高层:软件质量需求评价准则(SQRC);中层:软件质量设计评价准则(SQDC);低层:软件质量度量评价准则(SQMC)。
质量要素
描述和评价软件质量的一组属性 功能性、可靠性、易用性、效率性、可维护性、可移植性等质量特性以及将质量特性细化产生的副特性
衡量标准
衡量标准的组合反映某一软件质量要素 精确性、稳健性、安全性、通信有效性、处理有效性、设备有效性、可操作性、培训性、完备性、一致性、可追踪性、可见性、硬件系统无关性、软件系统无关性、可扩充性、公用性、模块性、清晰性、自描述性、简单性、结构性、文件完备性等
量度标准
可由各使用单位自定义 根据软件的需求分析、概要设计、详细设计、编码、测试、确认、维护与使用等阶段,针对每一个阶段制定问卷表,以此实现软件开发过程的质量度量
表7-3软件质量度量FCM模型
凯悦(Lawrence E. Hyatt)和罗森贝克(Linda H. Rosenberg)在《识别项目风险以及评价软件质量的软件质量模型与度量》(A Software Quality Model and Metrics for Identifying Project Risks and Assessing Software Quality)中比较了这3种最常用的软件质量模型,其基本情况如表5-14所示。
度量标准/目标 麦 考 尔 勃 姆 ISO 9126
正确性(Correctness) X X 可维护性
可靠性(Reliability) X X X
完整性(Integrity) X X
可用性(Usability) X X X
效率性(Efficiency) X X X
可维护性(Maintainability) X X X
可测试性(Testability) X 可维护性
互操作性(Interoperability) X
适应性(Flexibility) X X
可重用性(Reusability) X X
可移植性(Portability) X X X
明确性(Clarity) X
可变更性(Modifiability) X 可维护性
文档化(Documentation) X
恢复力(Resilience) X
易懂性(Understandability) X
有效性(Validity) X 可维护性
功能性(Functionality) X
普遍性(Generality) X
经济性(Economy) X
表7-4 3种软件质量模型之比较
软件质量度量方法
软件质量度量方法比较多,例如:(1)Halstead复杂性度量法,基本思路是根据程序中可执行代码行的操作符和操作数的数量来计算程序的复杂性。操作符和操作数的量越大,程序结构就越复杂。(2)McCabe复杂性度量法,其基本思想是程序的复杂性很大程度上取决于程序控制流的复杂性,单一的顺序程序结构最简单,循环和选择所构成的环路越多,程序就越复杂。
过程度量是对软件开发过程的各个方面进行度量,目的在于预测过程的未来性能,减少过程结果的偏差,对软件过程的行为进行目标管理,为过程控制、过程评价持续改善提供定量性基础。过程度量与软件开发流程密切相关,具有战略性意义。软件过程质量的好坏会直接影响软件产品质量的好坏,度量并评估过程、提高过程成熟度可以改进产品质量。相反,度量并评估软件产品质量会为提高软件过程质量提供必要的反馈和依据。过程度量与软件过程的成熟度密切相关。
弗罗哈克(William A.Florac)、帕克(Robert E.Park)和卡尔顿(Anita D.Carleton)在《实用软件度量:过程管理和改善之度量》(Practical Software Measurement:Measuring for Process Management and Improvement)中描述了过程管理和项目管理的关系。认为软件项目团队生产产品基于三大要素:产品需求、项目计划和已定义软件过程。度量数据在项目管理中将被用来:(1)识别和描述需求,(2)准备能够实现目标的计划,(3)执行计划,(4)跟踪基于项目计划目标的工作执行状态和进展。而过程管理也能使用相同的数据和相关度量来控制和改善软件过程本身。这就意味着,软件组织能使用建构和维持度量活动的共同框架来为过程管理和项目管理两大管理功能提供数据。
软件过程管理包括定义过程、计划度量、执行软件过程、应用度量、控制过程和改善过程,其中计划度量和应用度量是软件过程管理中的重要步骤,也是软件过程度量的核心内容。计划度量建立在对已定义软件过程的理解之上,产品、过程、资源的相关事项和属性已经被识别,收集和使用度量以进行过程性能跟踪的规定都被集成到软件过程之中。应用度量通过过程度量将执行软件过程所获得的数据,以及通过产品度量将产品相关数据用来控制和改善软件过程。
软件过程度量主要包括三大方面的内容,一是成熟度度量(maturity metrics),主要包括组织度量、资源度量、培训度量、文档标准化度量、数据管理与分析度量、过程质量度量等等;二是管理度量(management metrics),主要包括项目管理度量(如里程碑管理度量、风险度量、作业流程度量、控制度量、管理数据库度量等)、质量管理度量(如质量审查度量、质量测试度量、质量保证度量等)、配置管理度量(如式样变更控制度量、版本管理控制度量等);三是生命周期度量(life cycle metrics),主要包括问题定义度量、需求分析度量、设计度量、制造度量、维护度量等。
软件过程的度量,需要按照已经明确定义的度量流程加以实施,这样能使软件过程度量作业具有可控制性和可跟踪性,从而提高度量的有效性。软件过程度量的一般流程主要包括:确认过程问题;收集过程数据;分析过程数据;解释过程数据;汇报过程分析;提出过程建议;实施过程行动;实施监督和控制。这一度量过程的流程质量能保证软件过程度量获得有关软件过程的数据和问题,并进而对软件过程实施改善。
北京软件造价评估技术创新联盟团体标准《软件运维 成本度量规范》正式发布 展开全文 北 京 软 件造 价 评估技术创新联盟团体标准《 T/BSCEA 001—2019 软件运维 成本度量规范》于 2019 年 11月 15 日正式发布,将从 2019 年 12 月 15日起正式实施。 该标准于 2018 年 7 月正式立项。主要规定了信息化项 目软件运维成本度量的方法及测算过程,适用于信息化运行 维护服务各类组织度量软件运维服务成本。软件运维成本度 量规范的出台,其意义在于:统一预测算算口径,明确软件 运维内容,采用运维工作量法计算运维费用,使得运维费用 测算更加科学化、合理化,从而有效利用资金,保障相关企 业和部门的信息化运维工作正常开展,确保信息化对运维的 有效支撑和业务持续。 本标准部分内容与已经发布的北京市地方标准 《DB11/T 1424-2017 信息化项目软件运维费用测算规范
随着装备费用需求的不断增加,装备软件单独计价显得非常必要。如何客观、准确地计算软件成本,已成为亟待解决的问题。论文结合装备软件自身的特点,提出了基于UML建模的IFPUG功能点度量方法,阐述了利用UML中最常用的用例图、类图和顺序图三种工件进行功能点度量的方法和步骤,并在某装备软件项目计价活动实施应用,初步验证了其有效性。
1.事先建立软件的工作范围;
2. 以软件度量(经验度量、相似工程类比的度量)为基础做出估算
3.把项目分解为可单独进行估算的小块
软件度量标准
一、工信部行业标准《软件研发成本度量规范》
软件研发成本度量规范简介
本标准规定了软件研发成本度量方法、过程及原则,包括软件研发成本的构成、软件研发成本度量过程、软件研发成本度量的应用。本标准适用于度量成本与功能规模密切相关的软件研发项目的成本。本标准不涉及软件定价,但相关各方可依据本标准明确研发成本,从而为软件定价提供重要依据。
标准研制背景
长期以来,如何度量和评估软件研发项目的成本一直是产业界的难题。目前我国尚无科学统一的软件研发项目成本度量标准体系以指导、规范、管理软件项目的研发成本,较大程度导致做预算时无据可依,造成极大浪费;在软件项目招评标过程中,由于无法界定软件工程项目的合理成本范围,常常出现恶意低价或超高价格竞标现象;软件开发商在项目实施过程中,由于缺乏成本控制的科学依据,也经常出现时间滞后、费用远远超出最初估算水平的情况。
标准研制过程
在国家工业和信息化部软件服务业司领导下,从2010年开始启动我国软件成本度量标准体系的研制工作。中国软件行业协会系统与软件过程改进分会 (以下简称 “过程改进分会”)和中国电子技术标准化研究院(以下简称“电子四所”)围绕软件研发成本度量标准体系建设开展了基础性研究工作,梳理了标准体系。核心标准《软件研发成本度量规范》于2010年12月正式立项,计划号为2010-3194T-SJ,由过程改进分会和电子四所共同牵头起草,组织产、学、研、 用约40家单位共同参与,历时3年,为软件项目预算、立项审批、招投标、项目计划、变更管理等工作提供“科学依据”。
标准的价值
1、倡导使用统一的国际功能点方法度量软件规模,使度量结果可比对;
2、倡导使用基准数据估算软件工期和成本,使估算结果更科学;
3、倡导使用一致的估算过程和公式,使估算过程透明化、估算结果可追溯。
标准试点应用
《软件研发成本度量规范》从2012年开始试点应用。海关总署、中国人民银行、东软集团等单位都参与了试点工作,分别在预算审批、项目立项、招投标、项目计划等场景进行应用,取得了很好的效果。截至2013年年底,共有约2000人参加CCEP培训,近1500人通过考试并成为国内首批CCEP(软件成本估算专家)。采用标准规定的方法后,极大的解决了试点企业长期以来面临的问题。
标准发布
行业标准《软件研发成本度量规范》(SJ/T11463-2013) 由中华人民共和国工业和信息化部于2013年10月17日正式发布,并于2013年12月1日开始正式实施。
最新进展
经推荐,该标准由中关村智联软件服务业质量创新联盟牵头 ,正在申请升级为国家标准,于2015年7月31日正式下达计划号:20151553-T-469
标准应用配套书籍
随着工信部行业标准《软件研发成本度量规范》的正式发布,越来越多的软件企业、政府机关及各大行业(如金融、电信、能源、制造等)的软件开发及信息化建设部门开始采用该标准用于指导软件研发成本的度量工作,并广泛应用于预算、招投标、项目策划、变更管理、过程改进及项目后评价等场景。而能否正确理解《软件研发成本度量规范》并了解标准涉及方法的背景与原理,成为该标准是否可以在行业内深化应用的关键。
《软件研发成本度量规范释义》第2版 、《软件成本度量标准实施指南》
二、北京市地方标准《信息化项目软件开发费用测算规范》
规范研制背景
北京作为全国软件与信息服务业之都,产业规模一直位居全国前列,并且保持着较快的增长水平,软件和信息服务业在全市经济发展中也占有越来越重要的地位。随着十二五规划的逐步实施,北京市各行各业信息化建设投资也不断加大,仅全市每年属于市级财政拨款范畴的信息化项目就可达700至800个,金额总量可达三十多亿元,涉及上千家企事业单位。然而本市一直没有科学统一的标准以支撑、规范、管理信息化项目软件开发费用的测算,这大大制约了北京软件产业的健康可持续发展。由于相关标准的缺失,如何测算信息化项目软件开发的合理费用一直都是北京软件产业发展中的难点,因而常常导致软件项目预算审批无依据、恶意竞标等问题的发生。
规范的价值
由北京市经济和信息化委员会归口指导,北京软件和信息服务交易所、北京软件行业协会过程改进分会联合制订的北京市首个软件成本度量地方标准《信息化项目软件开发费用测算规范》正式实施,这标志着我市信息化项目软件开发工作拥有了科学、标准的费用评估方法,有助于规范行业市场、推动软件企业提升生产效率,提升产业增长质量。
三、联盟标准《行标应用指南(预算场景)》
编制背景
长期以来,如何度量软件研发成本一直是产业界的难题,尤其是在预算、招投标、项目计划等活动中因为缺失科学统一的软件研发成本度量标准,较大程度导致项目做预算时无据可依,进而造成预算浪费或预算不足;在软件项目招投标过程中,因为缺乏软件研发成本度量依据,恶意竞标、低价中标现象频频发生;开发方在项目实施过程中,由于缺乏成本控制的科学依据,也经常出现时间滞后,费用远远超出最初预算的情况。科学统一的软件研发成本度量标准既是有效进行软件项目管理的重要依据,也是当前软件产业发展的迫切需要。
为此,工业与信息化部软件服务业司委托中国软件行业协会系统与软件过程改进分会牵头组织编制了《软件研发成本度量规范》。标准中规定了软件研发成本度量的方法及过程,包括软件研发成本的构成、软件研发成本度量的过程、软件研发成本度量的应用。其目的是帮助软件研发涉及各方科学、一致地进行成本度量。但标准中没有包含软件研发成本度量过程中所需要的估算模型、行业基准数据及其在不同场景进行成本估算的详细步骤和方法,因此需要制订标准的应用指南,以便相关各方针对不同的应用场景、正确使用行业数据和模型,有效开展软件研发成本度量相关工作。
编制目的与范围
本指南是《软件研发成本度量规范》系列应用指南之一,针对预算场景。
《软件研发成本度量规范》中的成本度量,特指对软件研发成本的预计值进行估算或对实际值进行测量、分析的过程。而《软件研发成本度量规范》中,预算是指根据项目成本估算的结果确定预计项目费用的过程。因此,本指南主要描述在预算场景下如何开展成本估算工作,而不涉及编制预算的其他方面。
在《软件研发成本度量规范》及本指南中,软件研发过程包括从项目立项开始到项目完成验收之间的需求分析、设计、编码、集成、测试、验收交付活动及相关的项目管理、支持活动。因此,本指南中软件研发成本仅包括软件研发过程中的所有直接成本和间接成本,但不包括数据迁移、软件维护等成本。本指南中所涉及工作量、工期也仅为软件研发过程所用工作量、工期。
本指南编制的主要目的是指导预算活动相关各方,基于《软件研发成本度量规范》有效开展成本估算工作,并为确定软件项目预算提供科学依据。
本指南明确了基于《软件研发成本度量规范》和基准数据开展成本估算相关活动的步骤与方法,并通过示例,明确了典型情况的估算及调整方法;对于其他特殊情况,相关人员应根据本指南及《软件研发成本度量规范》中的相关原则,结合项目特点,选择适当的估算方法或对估算结果进行合理调整。
对于与预算类似的其他早期估算应用场景,相关人员也可参照本指南的相关原则与方法,开展项目估算活动。2100433B
目录
第1章 软件成本度量及造价概论 1
1.1 软件的地位和发展 1
1.1.1 软件的定义 1
1.1.2 软件的地位 9
1.1.3 软件的发展 15
1.2 软件成本度量及造价 20
1.2.1 软件度量 20
1.2.2 软件成本 24
1.2.3 软件造价 27
1.2.4 实施意义 33
第2章 规模计数方法 36
2.1 功能点计数模型的发展和现状 36
2.2 商务性软件:IFPUG方法和模型 38
2.2.1 IFPUG功能点估算方法的由来 38
2.2.2 IFPUG方法的基本原理 38
2.2.3 IFPUG的具体计算方法 38
2.2.4 IFPUG方法的工作流程 40
2.3 一般软件:NESMA方法和模型 42
2.3.1 NESMA背景及发展历史 42
2.3.2 NESMA基本方法 43
2.3.3 NESMA主要的特点 44
2.4 嵌入式软件:COSMIC-FFP方法和模型 45
2.4.1 COSMIC-FFP方法的起源与发展 45
2.4.2 COSMIC-FFP方法的基本原理 46
2.4.3 COSMIC-FFP方法的过程概述 47
2.5 非功能需求:SNAP方法和模型 48
2.5.1 SNAP方法的发展历史 48
2.5.2 SNAP方法的目标及优点 49
2.5.3 SNAP方法概述 50
2.6 各规模计数方法的比较及应用范围 51
2.6.1 功能需求规模计数 51
2.6.2 非功能需求规模计数 54
第3章 NESMA应用 57
3.1 FPA分析基本步骤 57
3.1.1 第一步:收集可用的需求文档 57
3.1.2 第二步:确定软件用户 60
3.1.3 第三步:确定估算类型 61
3.1.4 第四步:识别功能部件并确定复杂度 64
3.1.5 第五步:与用户验证 65
3.1.6 第六步:与功能点专家验证 65
3.2 指示功能点计数 65
3.2.1 内部逻辑文件 66
3.2.2 外部接口文件 68
3.2.3 FPA数据表 69
3.2.4 解规范化 71
3.2.5 指示功能点计数方法 75
3.3 估算功能点计数 76
3.3.1 基本过程 76
3.3.2 外部输入 77
3.3.3 外部输出 79
3.3.4 外部查询 82
3.3.5 估算功能点计数方法 83
3.4 详细功能点计数 83
3.4.1 确定相关参数 83
3.4.2 逻辑文件的复杂度 86
3.4.3 外部输入的复杂度 87
3.4.4 外部输出的复杂度 87
3.4.5 外部查询的复杂度 87
3.4.6 功能复杂度对照表 88
3.4.7 详细功能点计数方法 88
3.5 通用计数规则 88
3.6 规模调整 97
3.6.1 通用系统调整因子 97
3.6.2 需求变更的调整因子 98
3.7 NESMA与IFPUG的区别 98
3.8 实践经验 100
3.8.1 需求的完整性补充 100
3.8.2 功能点规模的公平性 101
3.8.3 常见问题 101
3.9 案例分析 102
3.9.1 指示功能点计数 102
3.9.2 估算功能点计数 103
3.9.3 详细功能点计数 105
第4章 SNAP应用 107
4.1 SNAP背景及基本概念 107
4.1.1 SNAP方法的背景 107
4.1.2 SNAP方法的基本概念 108
4.2 基本原理 110
4.3 SNAP方法计数规则 111
4.3.1 确定评估目的、范围、边界和分区 112
4.3.2 关联类和子类并计算每个SCU的非功能规模 113
4.3.3 计算非功能规模 132
4.4 SNAP方法的应用 133
4.4.1 内部数据备份和数据发送案例 133
4.4.2 用户界面案例 134
第5章 COSMIC应用 136
5.1 COSMIC基本概念 136
5.2 功能性用户需求的获取 139
5.3 COSMIC的两个基本模型 140
5.3.1 COSMIC 软件环境模型 140
5.3.2 通用软件模型 141
5.4 度量的基本过程 141
5.4.1 度量策略阶段 143
5.4.2 映射阶段 146
5.4.3 度量阶段 148
5.5 COSMIC应用中存在的主要问题及解决方法 150
5.5.1 COSMIC应用中存在的主要问题 150
5.5.2 COSMIC应用中存在问题的解决方法 153
5.6 COSMIC方法的应用 155
5.6.1 COSMIC的应用场景 155
5.6.2 COSMIC应用案例分析 156
第6章 基准数据库的建立及应用 160
6.1 背景及目的 160
6.2 功能点字典 162
6.2.1 功能点字典的概念 163
6.2.2 建立功能点字典的方法 163
6.2.3 功能点字典的应用 164
6.2.4 功能点字典的样例 165
6.2.5 更新功能点字典 165
6.2.6 功能点字典的应用案例 165
6.3 测量元定义 166
6.3.1 定义测量元的基本方法 166
6.3.2 相关国际、国内标准 168
6.3.3 常用的度量元集 168
6.4 基准数据分析的方法 172
6.5 基准数据库的建立 173
6.6 基准数据库的维护更新 175
6.7 基准比对方法 176
6.7.1 基准比对方法发展现状 176
6.7.2 基准比对方法对软件企业的作用和意义 177
6.7.3 基准比对方法实施流程 179
6.8 基准数据库的实例 180
6.8.1 ISBSG的基本情况和提供的服务 181
6.8.2 CSBSG的基本情况和提供的服务 182
6.8.3 SPIBSP的基本情况和提供的服务 183
第7章 工作量和工期估算 188
7.1 工作量估算概述 189
7.2 工作量估算原则 190
7.3 工作量估算准备 194
7.4 工作量估算方法 198
7.4.1 类推法 198
7.4.2 类比法 199
7.4.3 基于专家经验的估算方法 202
7.4.4 WBS法 205
7.4.5 算法型估算方法 206
7.4.6 小结 231
7.5 工作量监控、测量与分析 232
7.5.1 工作量测量 233
7.5.2 工作量监控 234
7.5.3 工作量评价与改进 235
7.5.4 工作量验证 235
7.5.5 小结 236
7.6 工期估算 236
7.6.1 工期估算的原则与要点 237
7.6.2 工期估算过程 237
7.6.3 工期估算技术 241
7.7 项目进度控制 245
7.7.1 进度跟踪 245
7.7.2 里程碑进度 245
7.7.3 挣值法 246
7.7.4 进度偏差分析 249
7.7.5 分析结果应用 251
第8章 成本估算 252
8.1 软件项目成本管理 252
8.1.1 软件项目成本管理的基本概念 252
8.1.2 软件项目成本管理过程 252
8.1.3 软件项目特点 253
8.1.4 软件项目成本估算特点 254
8.2 软件成本定义及构成 254
8.2.1 直接人力成本 256
8.2.2 直接非人力成本 256
8.2.3 间接人力成本 256
8.2.4 间接非人力成本 257
8.3 软件成本估算的一般过程 257
8.4 软件研发成本常用估算方法 260
8.4.1 专家判断法 260
8.4.2 类比法 260
8.4.3 COCOMO模型 260
8.4.4 功能点分析法 261
8.5 行业软件成本估算模型 261
8.5.1 直接人力成本的估算 261
8.5.2 直接非人力成本的估算 262
8.5.3 间接人力成本的估算 263
8.5.4 间接非人力成本的估算 263
8.5.5 行业软件研发成本估算模型 263
8.5.6 软件成本估算过程 264
8.5.7 案例 266
8.6 成本测量 269
8.7 成本分析 270
8.8 数据应用 270
8.8.1 软件成本估算常用的数据 271
8.8.2 企业自建基准 271
第9章 软件造价分析 273
9.1 软件产品及其价格的特点 274
9.1.1 软件产品的特点 274
9.1.2 软件定价的特点 275
9.2 影响软件产品定价的主要因素 277
9.2.1 影响价格的内部因素 277
9.2.2 影响价格的外部因素 277
9.3 软件产品的定价过程 278
9.4 软件产品的定价方法 279
9.4.1 传统的定价方法 279
9.4.2 SaaS定价方法 283
9.5 软件产品的定价策略 283
9.5.1 撇脂定价策略 284
9.5.2 渗透定价策略 285
9.5.3 捆绑定价策略 285
9.5.4 交叉补贴定价策略 286
9.5.5 免费使用策略 287
9.5.6 “歧视”定价策略 287
9.5.7 尾数定价策略 288
9.5.8 小结 289
第10章 行业实施规则及整体案例分析 290
10.1 预算场景 290
10.1.1 制定预算的依据 291
10.1.2 估算方法 291
10.1.3 上报预算 295
10.1.4 审批预算 295
10.1.5 应用示例 295
10.2 招/投标场景 297
10.2.1 应用范围 297
10.2.2 招标 297
10.2.3 投标 298
10.2.4 案例分享 299
10.3 项目计划场景 308
10.3.1 项目规模估算在制订项目计划中的作用 308
10.3.2 项目计划场景下估算的特点 309
10.3.3 项目计划场景下的估算要点 309
10.3.4 项目计划场景下的估算案例 314
10.3.5 软件计划估算的戒律 315
10.4 项目管理场景下的估算 316
10.4.1 采用功能点方法进一步明确需求 317
10.4.2 在项目各阶段对数据进行采集 317
10.4.3 软件研发成本分析 319
10.5 项目结算场景下的估算 321
10.5.1 结算分类 321
10.5.2 项目结算估算方法 323
10.5.3 结算后数据的应用 327
附录 329
参考文献 3362100433B