据统计,近70%的项目未能按时完成,您的项目也可能是其中之一。delay是不是很烦人?你也希望在满足市场需求的同时,还能按时交付项目,对不对?正因如此,软件开发时间的估算,应该是构建研发流程时优先考虑的事项。我们编制了一份清单,列出了为获得贴近实际情况的软件开发时间,你需要做的一些基本动作和步骤。下面我们就来具体谈谈,如何估算开发时间。
1为什么需要预估软件开发时间?
当然,这是必要的。有了这个数据,你就可以知道完成这个项目需要多长时间(按小时计算)。这可以比作装饰房子……哦不,太复杂了。算了吧,我们可以把它比作花店,这样的比喻更合理。
- 假设你想开一家花店,提前做好预算和时间估算:
- 从准备到开业需要多长时间?
- 在这个过程中,你发现你不能得到你想要的花。你需要时间用另一种产品代替原计划的品种;
- 然后你会发现花的储存需要更多的条件,你的设备需要更换;
- 花店还没有开张,但你已经意识到咖啡和书应该在卖。
你意识到发生了什么吗?是的,业务需求、最初估计的时间和预算可能会改变。这个例子也可以适用于您的软件解决方案。
2你从开发时间估计中获得的好处
作为客户,您将获得收入:
- 你会清楚地知道什么时候可以得到交付的产品。如果很快就会有产品展示或重大公司活动,这一点尤为重要;
- 你知道你可以赶上截止日期,你可以放心;
- 可以完全控制流程,及时了解时间估算或预算的变化及其影响。
软件开发团队的优势:
- 提前智能分配任务/资源,管理截止日期和工作量;
- 我们可以知道哪些专家应该参与哪些阶段。
3为什么很难获得真正可靠的时间估计结果?
虽然时间估计有很多明显的好处,但它与预测没有太大的不同,因为它主要是通过直觉来完成的。软件开发人员根据自己的经验来判断什么是困难和容易的。程序员越好,估计的时间就越准确。
但这种估计开发时间的方法也有一些小的差异。当开发人员面临不熟悉的问题时,他们过去的经验和有效的方法可能不再聪明。任何开发人员都无法避免架构、框架、图书馆访问和技术社区支持的潜在问题。
那么人为因素呢?程序员-是的,即使是高级程序员也可能生病或请一天假。当然,如果程序员明天早上不能完成任务,那不是你的错。但客户可能会带来计划之外的额外任务,这会破坏原来的时间估计结果。
综上所述,开发时间估算结果是可能会出错的,原因如下:
- 经验不再适用;
- 不可预测的技术侧问题;
- 人为因素。
那怎么办?-你可能会问这个问题。答案是用深思熟虑的方法和有效的手段把事情做好。
4如何估计开发时间:考虑每个阶段
为了计算软件开发的总体时间,我们应该将预期的开发过程分为多个阶段。然后估计每个阶段需要多长时间,并总结数据。
发现阶段
在这个阶段,参与项目的开发人员需要获得尽可能多的项目信息。这个阶段还需要准备原型和框架。如果实践中的一些工作需要用复杂的技术来完成,我们必须分配足够的时间。
在估计开发时间时,应在发现阶段安排深入的需求讨论。
具体做法:
- 开发人员从客户那里收到需求,并仔细检查是否存在逻辑漏洞;
- 如有问题,要进一步讨论;
- 开发人员起草了细说明需求的通用文件,并与客户达成协议。
准备一份定义明确的文档,每个人都把它作为指南,因为它可以防止我们不是说应用程序应该有这个特点吗?等等。让我们面对现实,在计划阶段解决问题比在产品完成时解决问题要便宜得多。
软件架构设计阶段
开发阶段
产品的可扩展性受系统架构规划和设计的一致性影响。在估算软件开发时间时应考虑到这一点。这一阶段需要选择技术栈、类图、数据库、库、API和细分的阶段。
为了提高效率,需要将这一阶段分解为几个单独的逻辑阶段,方便你监控团队的进度和绩效。产品开发过程可能需要2到12个月。在估算软件开发时间时应考虑到这一点。
测试阶段
如果没有经过彻底的测试,任何产品都不能被认为是完整的。此外,软件解决方案必须从一开始就进行测试。为什么?因为解决潜在错误的成本会低不少,毕竟它们会更快被发现和修复。测试阶段也需要包含在时间估算中。
额外的时间:缓冲时间和时间吞噬者
还需要考虑可能影响时间表的计划外工作,或很难预估的任务耗时。它们约占总开发时间的5%到25%:
- 技术的不可预测性;
- 集成或扩展问题;
- 团队内部的利益冲突;
- 会议、电话、批准;
- 生产力损失,等等。
5如何估算软件项目的工时
工时估算通常是将一个个任务汇总起来完成的,这样可以简化工作并让结果更加透明。估算开发时间的一种方法是估算每位专家可以在项目上花费多长时间。
这种方法关注的是一位平均水平的IT专业人员在一小时内能够完成的工作量。
平均水平的IT专家意味着他/她是中级技术专家(开发人员、设计师、QA工程师)。他们执行的是与他们专业相关的任务。这意味着完成测试任务所需的时间应该根据QA工程师,而不是前端开发人员的表现来估算。中级工程师的工作速度可能不如高级程序员,但他或她的工作效率可能比初级技术人员更高。
一个小时的工作意味着连续工作60分钟。这里的重点是要了解这位专家的工作是否依赖其他专家的产出,他或她是否需要等待其他人才能完成自己的工作量。
让我们看看可以应用哪些方法和实践来估算软件开发时间。最常见的方法是敏捷方法。
先来看一看这个主题涉及的关键术语:
- 用户故事:用1-2句话描述系统应该做什么;
- 故事描述:衡量完成用户故事所需的工作量(不是以小时为单位);
- 待办事项:为实现目标而需要完成的任务列表。
现在我们继续来估算软件开发时间。
6软件开发时间估算方法
通过开发时间估算,一切似乎都足够清楚了。但是……你不觉得少了点什么吗?这个估算具体是怎么做的?
下面介绍基本方法。
自下而上的方法或坚持参照里程碑
当提前了解总开发时间后,技术人员可能会高估他们的生产力,结果会让估计的开发时间偏低。我们可以将所有任务划分为各个阶段,并分别估算每个阶段来避免超时问题。也就是说,遵循“自下而上”的原则。
通常需要有两位专家参与时间估算:
- 开发人员。他/她准备了一份描述所有任务的规范;将它们分成各个组或子任务并估计开发时间;
- 一位公司的独立专家(例如高级项目经理)。他/她会检查开发人员提供的时间估算结果,评估它们的现实性。如有必要,再进行调整。
规划扑克
这种估算软件开发时间的方法所涉及的一些原则,很像敏捷方法论和打扑克。它是怎样做的呢?
- 客户表达了团队需要面对的任务;
- 该信息在团队内进行讨论,后续问题与客户一起解决;
- 创建一个包含细分任务的待办事项列表(积压,backlog);
- 团队成员聚在一起,从积压中找出执行这些任务需要多长时间。
使用规划扑克估算软件开发时间的具体做法如下所示。
每位开发人员都会给出他或她对手头任务的时间估计。为此,他们使用带有数字的卡片。每位团队成员都有一组卡片,其值为1、2、3、5、8、13以及21、34、55(斐波那契数列)或用20、40、100换掉最后三个。此外还有三张没有数字的牌,它们分别画一个无穷大符号、一个问号和一个咖啡杯。
每个用户故事都用一张卡片评分,其值等于估计的工作量(故事点数)。带有数字1的卡片表示用户故事很容易完成。比1越大,用户故事似乎就越困难。无限卡片代表最高级别的难度。
如果每位开发人员选择的数字都相同,则意味着对所需工作量的估计是正确的。如有分歧,最终分数经过团队讨论确定下来。
这一步并不是单纯地以小时为单位估算软件开发时间。到目前为止我们只定义了故事点。要了解如何以小时为单位表示这些故事点,你需要知道故事点对应的小时值。
要注意扑克计划的关键在于讨论。试想一下——很多真正的专家会参与你的项目。他们每个人都对自己的选择给出了理由,并对项目的细节进行了彻底的讨论。这样一来,你很可能会得到准确的时间估算结果。
基于经验的方法
这种方法需要将新项目与以前的类似项目进行比较。在这种情况下,你需要从实现旧项目所花费的时间开始估算。还需要找出两者的难度级别差异。将旧项目使用的小时数乘以项目的难度差异系数,你就可以估计即将开始的新项目所需的开发时间。
7项目估算数字
下面我们来看以下示例,把上面的内容转成数字表示。
总时间估算结果(OE) OE✖️缓冲时间 OE✖️时间吞噬者=软件开发时间
我们输入一些数字(数字是近似值):
5000(OE) 5000✖️20% 5000✖️20%=7000小时
我们来更进一步。
想象一下,我们需要在Instagram上实现“多账户”选项。为此,我们需要考虑用户可以采取的所有可能的操作:
- 他/她想添加一个帐户;
- 他/她可以选择“登录现有帐户”选项,这需要他/她输入用户名和密码或通过Facebook登录;
- 用户可能会忘记他/她的访问权限或发现他/她没有在Facebook上获得授权;
- 用户可以选择“创建新帐户”选项,之后系统将要求他或她完成注册步骤。
鉴于用户行为的差异,你可以定义开发人员需要完成的任务列表,以便用户可以添加新的Instagram帐户。将上述信息转化为任务、技术人员和时间估算:
- 设计一个包含所有必要字段和易于理解的用户场景的页面;
- 查明系统是否允许用户访问请求的页面,确保用户通过身份验证;
- 根据鉴权结果进行重定向:跳转到请求的Instagram页面;跳转到Facebook页面通过Facebook完成鉴权;跳转到鉴权错误页面,等等。
任务描述 | 开发人员 | QA工程师 |
为“多账户”选项设计页面 | 4 | 1 |
通过数据库进行用户认证 | 2 | 1 |
针对身份验证失败和成功的重定向 | 2 | 1 |
Facebook登录 | 1 | 1 |
总工时 | 9 | 4 |
因此,需要花费13个小时的技术人员工时才能让用户在多个Instagram帐户之间切换。还要记得算上协调和管理流程的项目管理工时(例如3小时)。
8小结
乍一看,软件开发时间似乎是很容易估算的。然而,它需要时间和技术人才的充分参与才能做到位。为了确保你和你的IT服务提供商都对结果感到满意,你需要从一开始就正确估算开发时间。
让整个开发团队都参与进来是很有帮助的。他们的经验会让时间估算结果最贴近实际。他们还会根据自己的能力估算项目工时。如果到头来时间估算结果不符实际,并且团队比计划落后了,他们不太可能愿意加班来赶工。所以为你提供尽可能准确的数据符合这些开发人员的自身利益。
说到这里,我们希望你现在知道了,为什么你们需要一个明确的时间估算结果。有了它,你就能够更好地控制预算和流程,避免令人不快的意外情况。
原文链接:
https://ddi-dev.com/blog/it-news/how-to-estimate-software-development-time/
为什么软件工程师出身的CEO越来越“香”?
70万行代码、历时20年,一名开发人员写出的史诗般的计算机程序
被疫情加速的通信云企业,“慢”下来后该走向何方?
大厂纷纷取消“大小周”,“反内卷”时代要来了?
InfoQ读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加InfoQ小助手,回复关键字“进群”申请入群。回复“资料”,获取资料包传送门,注册InfoQ网站后,可以任意领取一门极客时间课程,免费滴!大家可以和InfoQ读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!
点个在看少个bug