IT项目估算是项目管理中最重要的步骤之一,无论开发项目的规模大小,准确的项目成本估算可以使项目执行周期中的事情变得更容易,大部分软件项目的成败取决于正确的估算过程。
Q1:让我们从软件项目估算的理解开始。它究竟是什么以及为什么它如此重要?
在开始任何软件开发项目之前,我们需要从工作量/时间和成本方面对项目进行评估。成本部分主要取决于执行项目所需的时间,因此根据时间和工作量,我们可以通过功能点法定义成本范围。因此,软件项目估算是从工作量、时间和成本方面评估软件项目的过程。
Q2:现在,让我们看看为什么这个过程如此复杂?
每当启动任何软件开发项目时,它都会从一个目标开始,该目标具有一些已定义的需求和功能。如:简单的为组织或企业开发一个网站;或复杂的为一家金融公司开发一个证券处理系统。在这两个例子中,我们都有一个明确的目标要实现,但如果我们深入这个目标,那么我们会发现更详细的要求。在网站示例的情况下,我们需要定义各种页面、部分、内容、图像和形式等。而在证券处理系统的情况下,在各种利益相关者、技术和功能细节、证券类型和证券交易所法规等方面涉及更多复杂性。
因而,所有具有某些目标的项目都会有大量明确和不明确的要求。这些要求可能在项目开始时就很明确,也可能随着项目的进展而明确。项目开始时对完整需求的不确定性使得项目估算成为一个复杂的过程。有时,一个不明确的目标也会增加估计的复杂性。
Q3:软件开发项目估算需要面对什么样的挑战?
(1)功能需求不确定性——最大的问题是项目开始时的不确定性。很多时候,即使是客户也不清楚整个完整的需求。
(2)过度依赖专家经验——很多软件项目在规划阶段估算成本与工期,往往都是依赖专家经验,同一软件项目,不同专家的估算结果存在较大差异,结果客观,无法验证与复制。
(3)理想和乐观的估计——大多数时候,估计是在理想和乐观的条件下完成的,但在项目开发过程中还需要考虑版本维护、某些资源的不可用性和项目期间的变更请求等因素。
(4)估算结果缺乏权威性——很多项目的估算是由项目开发人员完成的,缺乏客观与权威性。估算必须由投资方与开发方共同认可的第三方进行。
(5)团队经验和缓冲设置——高级软件工程师只需要一个小时就能完成的事情,实习生可能需要几天才能完成。项目规模越大,随着项目的进展进行项目细化,团队经验和项目的复杂性等问题就会突显出来,每个团队的擅长领域与经验存在差异,这就是需要制定缓冲的原因,那么这个区间应该是多少?
Q4:面对挑战,应该如何解决呢?
(1)提出问题&澄清需求——这是最重要的部分。PM应该尽可能多地提问题,以便深入地澄清所有要求。清晰且深入的需求报告对软件项目的准确估算至关重要。不用担心客户会有情绪,发现问题的过程也是对客户的一种逻辑补充,客户会欣赏并认可你的专业度。需求报告必须分别阐明所有功能、非功能和技术需求,以便更好地理厘清所有不确定的灰色区域。
(2)尽可能的拆分任务——一个功能可能由10 个子任务构成,尽可能将这10个子任务继续拆分成为更下单位。一种方法是创建 WBS,即工作分解结构,它详细列出所有子任务及其工作量以进行完整的工作量估算。另一种方法是将FPA,即功能点分析,将项目中的任务与基线详细信息分开,转换为功能点(FP)进行计数。
(3)估算结果为范围区间——项目规模、工作量、成本的估算结果应该是一个范围区间。因为软件开发项目区别于其他项目,例如传统的工程建设只需依照图纸进行施工即可,工程进度是肉眼可视的,而软件项目在开发过程中存在很多不可预测的主观/客观变量与风险。
(4)留取适当的缓冲——估算应考虑版本维护、某些资源的不可用性、项目期间变更请求等因素,同时为技能、团队经验和软件项目的复杂性等因素留适当缓冲。估算≠计算,应该借助于团队沟通与行业基准数据库结合项目本身条件给一个合理的区间。