前言
软件的项目估算设计人、技术、环境等多种因素,因此很难在项目完成前准确地估算出开发软件所需的成本、持续时间和工作量。因此,需要一些方法和技术来支持项目的估算。常用的估算方法有下列 3 种。
- 基于已完成的类似项目进行估算。
- 基于分解技术进行估算。分解技术包括问题分解和过程分解。问题分解是将一个复杂问题分解成若干个小问题,通过对小问题的估算得到复杂问题的估算。过程分解是指先根据软件开发过程中的活动(分析、设计、编码、测试等)进行估算,然后得到整个项目的估算值。
- 基于经验估算模型的估算。
正文
一、自顶向下估算方法
估算人员按照以前完成的项目所耗费的总成本(或总工作量)来推算将要开发的软件的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配,这种方法称为自顶向下估算方法。
自顶向下估算方法的主要优点是对系统级工作的重视,所以估算中不会遗漏诸如集成、配置管理之类的系统级事务,且估算工作量小、速度快。它的缺点是往往不清楚低级别的技术性困难问题,而这些困难将会使成本上升。
二、自底向上估算方法
自底向上估算方法是将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。这种方法的有点是将每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确。其缺点是估算往往缺少各项子任务之间相互联系所需要的工作量和与软件有关的系统级工作量,所以估算往往偏低
PS:我上一个完整的项目就是这种估算方法,也确实踩了如缺点所示的坑。
三、差别估算方法
差别估算方法的思想是将待开发项目与一个或多个已完成的类似项目进行比较,找出与某个相似项目的若干不同之处,并估算每个不同之处对成本的影响,导出待开发项目的总成本。改方法的优点是可以提高估算的准确度,缺点是不容易明确“差别”的界限。