对软件工程开发进度的定量监理浅析
陈艳冬[1] 2004年9月
摘要
软件系统开发的过程中,存在着信息不均衡、信息处理能力不均衡引起的风险;也存在着项目风险和项目管理风险;还有有经济风险,时间风险、心理风险等诸多因素。
在软件系统的开发过程中,引入定量监理的目的就是定量监督、协调和控制软件开发的性能,软件开发的性能决定了软件工程的实际结果。在软件工程的质量、进度和风险的定量监理中,主要采用度量和估算两个步骤进行定量分析。这里主要分析了如何运用度量和估算的方法对软件工程的进度实现定量分析,其中包括了对软件工程的项目规模、工作量、进度和投资成本的估算,并且对三种国际上较为成熟的估算模型进行了实例讨论。
关键词
定量监理 度量 估算 功能点 估算模型
The Analysis For The Quantify Surveillance
Within The Process Of Software Engineering Developing
Yandong Chen
Abstract
There are many kinds of risks in the course of software system developing, some of them are induced by the imbalance of the necessary information supply together with the imbalance of information disposing ability; some of them are existing in the project and project management; meanwhile, some other kinds of factors can also induce risks, such as economy risk, timing risk, psychology risk.
Therefore, within the process of software system developing, the purpose of introducing the quantify surveillance is to quantify inspect, harmonize and control the performance of the software developing, which finally decide the practical outcomes of the software engineering. During the implementation of the quantify surveillance for the quality, process, risk of the software engineering, the main steps adopted are the measurement and estimation. The realization of the quantify analysis by adopting the methods of measurement and estimation within the software engineering process is the main topic of this dissertation, including the estimation for the project size, workload, project schedule and the cost of investment, plus with the introduction and discussion of three kinds of universal estimate model.
Key Words
Quantify surveillance, measurement, estimate, function point, estimate model
一、引言
信息系统工程监理的中心任务是对信息工程项目的质量、进度、投资等目标和风险防范,实施有效的控制、理顺与协调。因此,为了监督、控制软件开发的性能,引入定量监理是十分必要的。
二、软件开发的定量监理
应用软件开发是专业的,讲究分工协作的。涉及到需求分析、总体设计、概要和详细设计、编码、测试、安装及维护等过程,每一个过程都有自己的独到之处,都具有专业面广、业务和技术性强、可见性差、风险大、可预见性小的特点。即使软件开发按照规范化的过程进行,也面临着极大的不可知风险,更不用谈非规范化开发了。
凡此种种,造成许多信息化系统工程项目不成功,“豆腐渣”工程连续不断,严重影响了IT工程的质量和进度,损害到多方的利益。因此,在软件工程监理中,引入定量的手段对应用软件开发过程的某些方面进行定量计算、分析和验证,对可能出现的故障、风险进行分析判断,为执行者提供数据进行核实,从而降低工程建设的风险,保障信息系统工程建设的顺利完成是非常必要的。
三、定量监理的两个基本“点”
应用软件开发过程的定量监理可以考虑从以下三个方面展开:软件开发的质量监理、进度监理和风险监理。在质量、进度和风险的定量监理中,又分别按照度量、估算两个步骤进行定量分析。
度量:根据一定的度量标准对软件开发过程中所产生的数据进行收集和整理,如代码行(LOC)和功能点(FP)数量。它为估计不准、进度缓慢、可见性差等普遍问题提供了矫正的方法。
估算:通常的定义是,对未来事实非零可能性的最乐观的预测。软件项目估算是项目计划活动的基础。软件评估是一门趋向于更精确但永远也不会精确的科学。
四、进度监理的定量分析
由于软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估算往往和实际情况相差甚远。因此,是监理工作的重点之一。
为了可靠地对软件项目进行估算,我们可以采取如下步骤:
第一步是估算项目规模,一般通过计算LOC或FP完成,也可以基于过程估算;第二步是估算项目所需工作量,一般以人月或人小时为单位;第三步是估算项目进度,以自然月为单位;第四步是估算项目成本。下面来具体介绍。
1、估算项目的规模
对项目规模进行有效估算,取决于掌握项目范围内的原始资料。通常,是根据正式的需求描述进行估算。正式的需求描述可以是需求说明书、系统规格说明书或软件需求说明书等。如果开始时缺乏一些正式资料,也可以采用口头描述或草稿的方式开始估算工作。在得到项目范围的正式资料后,必须进行再次估算。估算的两个主要方法是:
(1)根据项目特征和算法进行估算。
例如,根据软件系统的输入、输出、查询、文件及外部接口等信息,使用功能点法估算出系统规模。基于功能点估算是按照用例(Use case)来做的,而不是软件功能。通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。通常步骤是:
A、计算输入、输出、查询、主控文件和接口需求的数目。
B、将这些数据进行加权乘。下表为一个典型的权值表。
| 功能类型 | 权值 |
| 输入 | 4 |
| 输出 | 5 |
| 查询 | 4 |
| 主控文件 | 10 |
| 接口 | 7 |
C、采用下面的公式计算功能点:
FP=总计数值×[0.65+0.01×Σ Fi] (i=1到14)
总计数值是所有功能点条目的总和(估计者根据对复杂度的判断,总计数值可以用乐观值、可能值或悲观值调整);0.65 , 0.01是常数;Fi复杂度调整值(取值0~5);i=1到14是14个复杂度加权因子。
举个例子,下面以某个计算机辅助设计(CAD)应用为例,估算开发的软件包的输入、输出、查询、文件及外部接口。为了达到这个估算目的,我们假设复杂度加权因子都是平均的。根据对软件范围的叙述,对软件功能进行分解,识别出主要的几个功能:用户界面和控制功能、二维几何分析、三维几何分析、数据库管理、计算机图形显示功能、外设控制以及设计分析模块。最后可得到如表2所示的权值参考表(权值将根据行业数据的积累和统计分析不断趋于精确,并且需要结合系统具体要求选置合理数值,这里仅提供了当前常态下的一组参考权值)。
| 信息域值 | 乐观值 | 可能值 | 悲观值 | 权值 | 计数值 |
| 输入数 | 16 | 23 | 30 | 4 | 92 |
| 输出数 | 10 | 15 | 24 | 5 | 79 |
| 查询数 | 14 | 20 | 30 | 4 | 83 |
| 主控文件数 | 4 | 5 | 6 | 10 | 50 |
| 外部接口数 | 2 | 2 | 3 | 7 | 16 |
| 总计数值 | | | | | 320 |
表2 功能要素权值参考表
其中,计数值 = 取整 [( 乐观值 + 可能值Î4 + 悲观值 )/ 6 ] Î 权值
总计数值 = Σ计数值 = 320
继续估算14个复杂度加权因子(Fi),根据问题对项目的影响取值范围是0~5 ,表3给出了因子值。
| 加权因子 | 取值 | 加权因子 | 取值 |
| 数据通讯 | 3 | 代码复用性 | 5 |
| 软件性能 | 2 | 安装简易性 | 5 |
| 可配置性 | 1 | 操作方便性 | 3 |
| 事务效率 | 5 | 跨平台要求 | 3 |
| 实时数据输入 | 3 | 可扩展性 | 4 |
| 在线升级 | 3 | 分布式数据处理 | 4 |
| 复杂运算 | 5 | 用户界面复杂度 | 3 |
| 合计Σ Fi | 49 | | |
表3 因子值参考表
FP = 总计数值 × [ 0.65 + 0.01 × Σ Fi ] = 320 × [ 0.65 + 0.01 × 49 ]=320×1.14» 365
( 2 ) 采用类比方法,根据历史数据进行估算。
如果有一个以前做过的类似项目并且掌握它的规模,就可以把新项目的各个主要部分与原有项目的相应部分进行比较,得出一个比例关系,将各部分相对于原项目规模比例相加,计算出新项目的规模。如果估算者的经验丰富并且新项目与老项目具有足够的相似性,就能够得到合理的估算值。
但是采用类比法,往往要解决可重用代码的估算问题。估计可重用代码量的最好办法就是由程序员或系统分析员详细地考查已存在的代码,估算出新项目可重用的代码中需重新设计的代码百分比、需重新编码或修改的代码百分比以及需重新测试的代码百分比。根据这三个百分比,可用下面的计算公式计算等价新代码行:
等价代码行 = [ ( 重新设计% + 重新编码% + 重新测试% ) / 3 ] × 已有代码行
举例:有10,000行代码,假定30%需要重新设计,60%需要重新编码,75%需要重新测试,那么其等价的代码行可以计算为:[ ( 30% + 60% + 75% ) / 3 ] × 10,000 = 5,500 等价代码行。即:重用这10000代码相当于编写5500代码行的工作量。
2、估算项目工作量
估算出软件规模并且对软件的开发周期进行定义后,需要继续估算软件项目的工作量。软件规模的估算结果是代码量,但是软件项目的开发、实施过程并不是只有编码的工作,实际上编码工作量在这个过程中是最小的。反而是编写文档、系统设计、测试以及实施发布等将占用大量的工作时间。因此,对软件项目工作量的估算就是确定、估算这样一个代码量的项目所需的各种工作量相加得到的项目总工作量。从软件规模(代码量)估算出项目工作量主要采用下述的两个方法:
(1)最佳方法是利用历史数据。根据以前做过的类似项目(后面简称为历史项目)规模与新项目规模的比例关系,对照以前项目的工作量求出新项目的工作量。采用这个方法的前提是:
a.对历史项目的规模和工作量的计量是正确的;
b.至少有一个历史项目的规模和新项目类似;
c.新项目的开发周期、使用的开发方法、开发工具与历史项目的类似,而且开发人员的技能和经验与原人员差距也不要太大。
(2)如果没有历史数据可用或者新项目与以前做过的项目差别都比较大,那么可以使用一个成熟的估算模型,如采用IBM模型、COCOMO模型或Putnam方法论,将软件项目规模转换成工作量。
这些模型通过对大量不同类型组织的已完成项目进行研究,得出了项目规模与工作量之间的关系和转换方法。这些行业性的模型可能不如自己的历史数据精确,但非常有效。目前,还没有一种估算模型能够适用于所有的软件类型和开发环境,在监理活动中,从这些模型得到的结果必须根据项目的实际情况慎重使用,或者采用多个模型进行多角度估算、掌握工作量的基本范围并与实际的工作量计划比较。
以IBM模型为例举例说明计算过程:
为了计算,我们需要利用逆向法将功能点转化成一个等价的SLOC数值。这一步可以使用表4的语言等价表来完成:
| 语言 | 每功能点的SLOC | |
| 默认C++ | 53 | |
| Delphi 5 | 18 | |
| HTML 4 | 14 | |
| Visual Basic 6 | 24 | |
| SQL default | 13 | |
|
| 46 |
所以,使用java 2完成上述项目的405个功能点时,将大约需要下列SLOC数:
代码行L=365×46=16790行=16.79 KLOC(千代码行)
工作量E=5.2×L0.91=5.2×16.790.91=68 人月
文档量DOC=49×L1.01=49×16.791.01=847页
注:公式中的常数请参考IBM估算模型。
3、制定计划
对软件项目进行估算的第三步是根据工作量制定项目计划,包括人员安排、工作量分解、估定开始和完成时间等等。可以根据自己的历史数据或行业模型决定所需的资源并落实到项目计划。可以采用上述的IBM模型粗略地给出项目持续时间:
项目需要的人员S = 0.54 × E0.6 = 0.54 × 680.6 = 7人
项目持续时间D = 4.1 × L0.36 = 4.1 ×16.790.36 = 12月
4、成本估算
项目的成本估算包括许多因素:人力成本、办公费用、管理费用、设备和软件等的购置费用、场地租金、旅差费等等。对项目成本的估算取决于公司所采用的成本核算方法。有的公司某些费用并没有计入项目成本中,而是按管理费用等分摊。有的从历史数据求出生产率度量和每行成本,即行/PM (人月) 和元/行,则LOC的值与元/行相乘得到成本,用LOC 的值与行/PM相除得到工作量。具体可按公司的实际情况选择。
注:本文作为示例给出的针对进度的定量监理的估算方法只是众多方法中的一种。目的是建议监理单位在项目监理过程中根据实际情况适当采用定量分析的方法。更多的估算方法,可以参考有关软件评估方面的书籍和其它资料。
五、结论
软件工程领域内进行进度控制的估算方法和估算模型有很多,我们在这里的讨论涉及到的只是很有限的一部分,但无论采用哪种手段,都是为了更有效地实现工程进度控制。通过使用适当的进度估算方法和估算模型进行定量分析,虽然不能保证软件工程项目进度的万无一失,但却从客观上提供了极为强大的保障力量。我们知道,项目风险是不可能绝对避免的,每一种风险的存在都会对进度造成不同程度的影响。因此在对应用软件工程进度进行定量分析时,我们也需要掌握好有效的项目风险控制的定量分析方法和手段。
参考文献
[1] 葛乃康.信息工程建设监理.北京. 电子工业出版社. 2002.09
[2] [美]哈罗德·科兹纳. Project Management:A Systems Approach to Planning,Scheduling, and Controlling. 北京. 电子工业出版社. 2002.09
[3] [美]卡恩. 软件质量工程——度量与模型(第二版). 北京. 电子工业出版社. 2004.07
[1] 陈艳冬,于北京交通大学进修工程硕士