1. 基于代码行和功能点的估算
软件项目的规模是影响软件项目成本和工作量的主要因素。在基于代码行(loc,line of code)和功能点(function point)的估算方法中,利用代码行和功能点来表示软件系统的规模,并通过对软件项目规模的估算进而来估算软件项目的成本和工作量。
显然,一个软件项目的代码行数目越多,它的规模也越大。软件代码行的数目易于度量,许多软件开发组织和项目组都保留有以往软件项目代码行数目的记录,这有助于在以往类似软件项目代码行记录的基础上对当前软件项目的规模进行估算。
用代码行的数目来表示软件项目的规模简单易行,自然、直观且易于度量。但是其缺点也非常明显。在软件开发初期很难估算出终软件系统的代码行数;软件项目代码行的数目通常依赖于程序设计语言的功能和表达能力;采用代码行的估算方法会对那些设计精巧的软件项目产生不利的影响;该方法只适合于过程式程序设计语言,不适合于非过程式程序设计语言(如函数式或者逻辑语言)。
针对上述问题,人们提出用软件系统的功能数目来表示软件系统的规模。1979年ibm的albrecht提出了计算功能点的方法。该方法需要对软件系统的二个方面进行评估,即评估软件系统所需的内部基本功能和外部基本功能,然后根据技术复杂度因子对这二个方面的评估结果进行加权量化,产生软件系统功能点数目的具体计算值。具体的,以下是软件系统功能点的计算公式。
fp = ct× (0.65 + 0.01×sfi) (i=1..14)
其中,ct是5个信息量的“加权和”,fi是14个因素的“复杂性调节值”(i =1..14),0.65和0.01是经验常数。
ct的计算方法如表 3所示,ct =(简单用户输入数×3 +一般用户输入数×4+复杂用户输入数×6)+(简单用户输出数×4+一般用户输出数×5+复杂用户输出数×7)+(简单用户查询数×3+一般用户查询数×4+复杂用户查询数×6)+(简单文件数×7+一般文件数×10+复杂文件数×15)+(简单外部界面数×5+一般外部界面数×7+复杂外部界面数×10)。其中,用户输入数是指由用户提供的、用来输入的应用数据项的数目;用户输出数是指软件系统为用户提供的、向用户输出的应用数据项的数目;用户查询数是指要求回答的交互式输入的项;文件数是指系统中主文件的数目;外部界面数是指机器可读的文件数目(如磁盘或者磁带中的数据文件)。
表 3. ct值的加权计算
参数取值加权 |
加权因子 |
终值 |
||
简单 | 一般 | 复杂 | ||
用户输入数 |
´3 | ´4 | ´6 |
|
用户输出数 |
´4 | ´5 | ´7 |
|
用户查询数 |
´3 | ´4 | ´6 |
|
文件数 |
´7 | ´10 | ´15 |
|
外部界面数 |
´5 | ´7 | ´10 |
|
ct= |
|
fi(i=1..14)14个因素的“复杂性调节值”取值见表 4。
表 4. fi的取值表
序号i |
问题 |
fi的取值(0,1,2,3,4,5) 0-没有影响 1-偶有影响 2-轻微影响 平均影响 4-较大影响 5-严重影响 |
f1 |
系统需要可靠的备份和复原码 | |
f2 |
系统需要数据通信吗 | |
f3 |
系统有分布处理功能吗 | |
f4 |
性能是临界状态吗 | |
f5 |
系统是否在一个实用的操作系统下运行 | |
f6 |
系统需要联机数据项吗 | |
f7 |
联机数据项是否在多屏幕或多操作之间进行切换 | |
f8 |
需要联机更新主文件吗 | |
f9 |
输入、输出、查询和文件很复杂吗 | |
f10 |
内部处理复杂吗 | |
f11 |
代码需要被设计成可重用吗 | |
f12 |
设计中需要包括转换和安装吗 | |
f13 |
系统的设计支持不同组织的多次安装吗 | |
f14 |
应用的设计方便用户修改和使用吗 |
例如,假设项目组要开发一个软件项目a。根据用户的需求描述,该软件项目的ct取值如表 5所示。进一步的,假设该软件项目的14个复杂性调节值全部取平均程度。那么根据表 5可知,该软件项目的ct=341,14个复杂性调节因素的累加值sfi=42,因而根据公式fp = ct× (0.65 + 0.01×sfi) (i=1..14)可知,该软件项目的功能点fp=341× (0.65 + 0.01×42) = 364.87,即该项目的功能点数目大致为364。