估算是建立在客观事实上对未来可能发生的事情的一种合理性预测。估算本身的不确定性,决定了它不可能是百分之百准确无误的,但是依据某种方法进行合理估计显然比瞎猜好得多。
软件估算方法有很多,大致分为基于技术分解模型和基于经验模型两大类。目前基于技术分解的常用方法是FP功能点估算法和LOC代码行估算法。
FP功能点法
功能点分析法是一种相对抽象的方法,是一种人为设计的估算方式。它是从系统的复杂性和系统的特性这两个角度来估算系统的规模,它的关注点在于程序的"功能性"和"实用性",是对软件和软件开发过程的间接估算。最初是由 IBM 工程师艾伦艾尔布策提出的,随后被IFPUG 方法继承,是目前国际上主流的软件规模估算方法。
功能点估算法的核心是利用软件信息域中的一些计数估算和软件复杂性估计的经验关系式而导出功能点FP。因此,它是一种在需求分析阶段基于系统功能的一种规模估计方法。主要是通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。这种方法的计算公式是:功能点=信息处理规模X技术复杂度。其中,信息处理规模包括:各种输入、输出、查询、内部逻辑文件数、外部接口文件数等;技术复杂度则包括:性能复杂度、配置项目复杂度、数据通信复杂度、分布式处理复杂度、在线更新复杂度等。
LOC代码行估算法
衡量软件项目规模的最常用方法还有代码行LOC(Line of Code) 估算法。LOC是指所有的可执行的源代码行数,包括可交付的工作控制语言语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。这是一种从技术角度来估算的方法,是以代码行(LOC)作为软件工作量的估算单位。
开发团队可以根据对历史项目的审计来核算开发团队的单行代码价值,一个代码行的价值和人月均代码行数可以体现一个软件开发团队的生产能力。LOC方法在早期的系统开发中较为广泛使用。优点在于方便计算、容易监控、能反映程序员的思维能力;缺点在于代码行数的含糊不清,不能正确反映一项工作的难易程度以及代码的效率。
因此,在传统的LOC方法上有许多改进的方法。这些不断演化的新方法有:PERT功能点估算法、类比估算法、系统分解法等。
除了以上介绍的两种方法外,还有许多其它的估算方法。不同的方法适用于不同的具体环境,有些方法虽然很好但并不一定适合当前的任务。因此,建议至少使用两种方法进行规模估算,不要依赖于任何一种方法。只有量体裁衣,具体问题具体分析,才能得到尽量合理的规模估算。常用的软件规模估算方法