我强烈推荐史蒂夫麦康奈尔的书"软件估计:揭开黑色艺术的神秘面纱".它确实很好地涵盖了这个问题.
我尝试使用的原则(我并不总是有机会)是:
逐步细化
3点估计
风险分析
在估算时,以正确的粒度进行估算并不断分解和添加任务非常重要,直到您对估算值有信心.通常,估算强调了可能需要更多细化和风险分析的冗长的关键路径任务.
试图找出每项任务中存在风险的地方(是否存在某些事情的交付时间?是否缺乏知识?竞争对手是否可以击败您?等等)有助于确定您对估算的信心,这可以让您确定如何对待这些估计.风险分析还有助于确定是否需要进一步逐步细化.
为每项任务指定最佳,可能和最差的案例估计(包括设计,开发,测试和错误修复)有助于风险分析和规划.估计值可用于计算达到该任务特定百分比成功的最可能持续时间.连同其他相关任务和风险分析的信息,项目经理可以将风险和系统测试等其他已知元素纳入估算,以获得更可靠的估算.
当然,估计的粒度也很重要.大多数任务的小时数估算都没有意义.在软件中,天通常是最好的,但有时可能是数周或数月(例如,如果你外包工作块).选择对项目中的所有任务都有意义的时间粒度(我通常在需求捕获和功能规范阶段使用几天,之后半天,因为我了解有关任务及其子任务的更多信息).
所有这三个项目相互补充,因此通常需要多次优化每个步骤.例如,您可能会在需求阶段尝试,然后在功能规范期间再次尝试,并在设计规范期间再次尝试.
估算是一项学到的技能; 你做得越多,你就越好.当您了解更多关于您不知道的内容时,风险分析会得到改善,随着您对所了解内容的了解越来越多,三点估算会得到改善,并且在您完成设计流程的每个步骤时,逐步细化会得到改善.
如果您有时间,请在完成任务后重新查看原始估算值,并查看实际时间与3点估算值和项目计划的对比情况.如果它不同,请查看时间丢失或获得的时间,并尝试了解您可以从中获取的未来项目.
估计不应该是一项艰巨的任务 - 我总是觉得我估计比以前更了解我的工作.
我强烈推荐史蒂夫麦康奈尔的书"软件估计:揭开黑色艺术的神秘面纱".它确实很好地涵盖了这个问题.
在实用程序员中有一些很好的信息.他们建议您使用适当的时间单位,而不是估计估计为期6个月的130天.他们还建议集中最重要的任务.并避免根据子估算进行估算.
就个人而言,我发现将任务分解为可理解的块来正确估计它们是有用的.如果任务很大,有太多的角落和缝隙可以隐藏未经考虑的问题.通过专注于较小块的细节,您可以更成功地评估潜在问题.