救,最后是项目失败时拍屁股走人"。当然,这只是个玩笑。不过由此可见项目规模估算不能只依靠经验来估算,而应该是要有大量的数据来支持。
什么是软件项目的规模估算?
软件开发项目管理中的一项重要任务是开发项目的规模估算,这是极其重要但却很容易被忽视的一项内容。因为没有正确的规模估算,项目计划就会失去成功的基础。可惜大部分的开发团队都很难做到对项目规模进行准确的估算。
(1)什么是项目规模估算?
做好软件项目管理的基础是要做好项目的规划工作,而做好项目规划的前提是要做好软件估算。也就是说,就是没有好的软件估算,项目的规划、跟踪和控制就根本无从谈起。因此,软件估算是项目计划活动的基础之一。
软件估算一般是通过主观经验和客观分析两种方法进行,包括有四个重要方面:规模估算、工作量估算、进度估算和成本估算。其中,对规模进行估算是为了将项目范围进行量化。规模估算是整个软件估算中最核心、最基础的环节,也是整个软件估算的第一步。规模估算有两个主要作用:一是通过规模估算建立项目基线;二是利用基线对项目生产率和状态进行评价,并确定软件过程的进度目标。也就是说,规模估算是一切估算的基础,是能直接决定和影响到其它三个估算的决策。
(2)常用的软件规模估算方法
估算是建立在客观事实上对未来可能发生的事情的一种合理性预测。估算本身的不确定性,决定了它不可能是百分之百准确无误的,但是依据某种方法进行合理估计显然比瞎猜好得多。软件估算方法有很多,大致分为基于技术分解模型和基于经验模型两大类。目前基于技术分解模型的方法有:功能点估算法、LOC估算法、MARK II等;基于经验模型的方法有:IBM模型、普特南模型、COCOMO模型等。目前基于技术分解的常用方法是FP功能点估算法和LOC代码行估算法。本文重点介绍这两种方法。
①FP功能点法
功能点分析法 (FPA:Function Point Analysis) 是一种相对抽象的方法,是一种人为设计的估算方式。它是从系统的复杂性和系统的特性这两个角度来估算系统的规模,它的关注点在于程序的"功能性"和"实用性",是对软件和软件开发过程的间接估算。最初是由 IBM 工程师艾伦艾尔布策提出的,随后被IFPUG 方法继承,是目前国际上主流的软件规模估算方法。
功能点估算法的核心是利用软件信息域中的一些计数估算和软件复杂性估计的经验关系式而导出功能点FP。因此,它是一种在需求分析阶段基于系统功能的一种规模估计方法。主要是通过研究初始应用需求来确定各种输入、输出、计算和数据库需求的数量和特性。这种方法的计算公式是:功能点=信息处理规模X技术复杂度。其中,信息处理规模包括:各种输入、输出、查询、内部逻辑文件数、外部接口文件数等;技术复杂度则包括:性能复杂度、配置项目复杂度、数据通信复杂度、分布式处理复杂度、在线更新复杂度等。
②LOC代码行估算法
衡量软件项目规模的最常用方法还有代码行LOC(Line of Code) 估算法。LOC是指所有的可执行的源代码行数,包括可交付的工作控制语言语句、数据定义、数据类型声明、等价声明、输入/输出格式声明等。这是一种从技术角度来估算的方法,是以代码行(LOC)作为软件工作量的估算单位。开发团队可以根据对历史项目的审计来核算开发团队的单行代码价值,一个代码行的价值和人月均代码行数可以体现一个软件开发团队的生产能力。LOC方法在早期的系统开发中较为广泛使用。优点在于方便计算、容易监控、能反映程序员的思维能力;缺点在于代码行数的含糊