为什么软件开发工期预估都不靠谱

2024-05-01 23:38

本文主要是介绍为什么软件开发工期预估都不靠谱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的作者Diego Basch是IndexTank公司(被LinkedIn公司收购)的前任CEO,他是看到了Quora上一个有趣的关于讨论软件开发工期估算不准的文章后写下了这篇文章。

有些人认为做一个大型软件项目跟建一座大桥一样。你可以根据以往的项目,使用那些历史数据来评估所需要的时间和资源。这种观点数十年前就已经被证实为伪观点;这种类比出的结论在上世纪九十年代,我在卡内基·梅隆攻读软件工程学位时,是我一直向往的结果。

现实生活中,大多数值得一做的工程都不会是之前的项目的重复。不要以为当需要一座桥时,你可以“gem install bridge”或扩展bridge4j。一个新的软件项目更像是这样:

— 你是一个发明家。你已经发明了一种太阳能微波炉,一种以死虫子为能量的发动机,一种能杀死蚊子的激光武器。那好,有人找到你对你说:

“嗨,发明家,我需要一种无人机,它能够抓取老鼠(不能是别的动物),定位我的前女友,把老鼠投掷到她头上。给出一个资金预算和工期估计吧。”

很显然,你会不知道如何入手。你需要理解需求。这种东西以前从来没有制造过,但这完全不是什么新技术。无人机已经有了,定技术也有。可是如何能准确的找到老鼠呢?有多少东西是真的需要你去发明的?你可以买一个DIY 无人机,稍加改动是否可以满足需求?你的客户是否能够偷偷的把一个跟踪设备放到他前女友的手袋里?

X-47B 无人机

做软件不是一种重复性动作,而是一种发明性动作。在Twitter上疯传的Quora上的这个奇思妙想的贴子实 际上跑题了。拿从旧金山走到洛杉矶的步行者做类比是不合适的。徒步旅行这项活动已经被人类实践了几千年了,所有你需要的知识只要在谷歌上搜索一下都能找 到。一个苦行僧只要走过一次就能了解所有的行程。当你问他从纽约步行到芝加哥的路程,他很可能相当准确的说出来。经过数次的城际间的旅行后,他有足够的知 识来进行相当准确的估算。但如果我让你告诉我从洛杉矶驾车到旧金山要多少时间,依赖于交通堵塞的状况,你的估算很可能会相差数小时。

而另一方面,如果一个有经验的软件工程师被要求去开发一个能自主驾驶从旧金山到洛杉矶的汽车的控制系统时,他面对的上一种完全不同的情况。真正的软件开发实际是指那些你以前从未做过的东西。这就是为什么所有的这些拿日常真实生活里的东西来做的类比都不靠谱的原因。

[本文英文原文链接:Why Software Development Estimations Are Regularly Off ]

这篇关于为什么软件开发工期预估都不靠谱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952952

相关文章

AI在软件开发中的应用

AI在软件开发中的应用可以帮助开发人员更高效地编写和测试代码,并提高软件的质量和性能。它能够帮助加快软件的部署和维护过程,提供更好的开发体验。 编码辅助 帮助开发人员更快地编写代码。例如,AI可以识别代码中的语法错误,并提供修正建议。它还可以根据开发人员的代码习惯和上下文提供代码自动补全功能。 自动化测试 用于自动化测试,帮助开发人员更好地测试其软件的功能和性能。它可以帮助发现潜在的错

软件开发-人员流动

软件开发 并不是一件 简单的事情。 如果程序员像白菜一样,标一个价,放在市场卖的话, 那么,软件,也不是,一堆白菜堆在一起就ok了。 人员在一个地方待久了,可能就会流动。 毕竟世界这么大。 可是,软件系统 一旦开发出来, 应该就在线上一直 运行着。 那么人员的流动,决不应该像白菜一样,一个挨一个的放着。他们彼此重叠,这样的重叠部分,应该不少于半年。这个软件系统才是可控的。 否则, 这个拼

软件开发的流程和常用模式

一、软件开发一般分为五个阶段: 1.问题的定义及规划(可行性分析) 此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性。 文档为可行性研究报告和项目开发计划 2.需求分析 在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。 文档为软件需求说明书,数据要求说明书 3.软件设计(概要设计和详细设计) 此阶段中要根据需求分析的结果,对整个软件系统进行

敏捷方法对于快速软件开发至关重要

介绍 敏捷方法是指在项目管理领域中,一种旨在提供高质量软件解决方案的协作和灵活方法。与传统的项目管理方法(瀑布式)相比,敏捷方法有很大不同,它更注重迭代进度、反馈整合、客户满意度和团队协作。 历史与演变 敏捷方法论的起源可以追溯到 20 世纪 70 年代和 80 年代,当时软件开发团队开始使用迭代程序来最大限度地提高生产力和效率。然而,敏捷方法论正式诞生于 2001 年,当时 17 位技术先

了解软件开发生命周期 (SDLC)

介绍 软件开发生命周期 (SDLC) 是一种系统化、有序化的方法,用于按时、在预算内交付高质量、可靠的软件。SDLC 涵盖从初始系统概念到替换或退役的所有内容,可详细了解整个软件交付过程。 历史与演变 软件开发生命周期 (SDLC) 概念出现于 20 世纪 60 年代,用于开发大规模、高质量的业务和系统软件。最初,SDLC 遵循简单的瀑布模型,即线性和顺序方法。然而,鉴于瀑布模型在适应开发过

智慧校园软件开发:为学校量身定制的技术解决方案

为了满足智慧校园的需求,一套全面的软件解决方案被设计出来,旨在优化学校管理和提升教学质量。首先,通过实施统一的认证门户,结合OAuth2和SSO技术,确保不同用户群体能便捷且安全地访问所需资源。 教务管理系统被构建成包含课程调度、选课注册、成绩跟踪及考试安排等功能于一体的平台,并采用微服务架构来增强系统的稳定性和灵活性,特别是在高流量时段。智慧校园软件开发为学校提供了量身定制的解决方案。每个学校

云服务与低代码开发的结合:重塑现代软件开发模式

随着数字化转型的深入推进,越来越多的企业开始将业务迁移到云端,以实现更高的灵活性、可靠性和成本效益。云服务已经成为企业数字化战略的重要组成部分。与此同时,低代码开发作为一种新兴的编程模式,也逐渐受到企业的关注。那么,当云服务遇到低代码开发,又会碰撞出怎样的火花呢? 云服务为低代码开发提供基础设施支持 云服务可以为低代码开发提供稳定、高效的计算资源和存储能力,使得开发者在编写代码时无需关

如何使用芯片手册做软件开发?

在阅读和利用芯片手册进行软件开发时,你应该关注以下几个关键点: 引脚功能:了解芯片上每个引脚的功能,包括它们可以被配置为输入还是输出,以及它们支持的特殊功能,如模拟输入、PWM输出、中断等。 寄存器映射:熟悉芯片的寄存器布局,这是控制和配置芯片功能的核心部分。你需要知道每个寄存器的作用、位字段及其含义。 时序图:这些图展示了芯片在各种操作中的行为,如启动、停止、数据传输等,这对于正确同步你

UP 的阶段,用例和使用场景之间是什么关系以及和协作之间的关系,软件开发过程中使用 UML 的必要性以及好处,寻找概念类的三种策略

UP 的阶段,用例和使用场景之间是什么关系以及和协作之间的关系,软件开发过程中使用 UML 的必要性以及好处 1.什么是 UP 的阶段? 1) 初始:大体上的构想、业务案例、范围和模糊评估; 2) 细化:已精化的构想、核心架构的迭代实现、高风险的解决、确定大多数需求和范围以 及进行更为实际的评估; 3) 构造:对遗留下来的风险较低和比较简单的元素进行迭代实现,准备部署; 4) 移交:进行 be

搭贝低代码开发平台:高效、灵活、经济的软件开发解决方案

在当今快速发展的数字化时代,企业对于快速、灵活且成本效益高的软件开发需求日益增长。搭贝低代码开发平台以其强大的功能和用户友好的体验,正在成为众多企业,特别是中小企业,软件开发的首选工具。 📈 什么是低代码开发平台? 低代码开发平台是一种通过可视化的开发环境和预制的模块组件,使开发者无需编写大量代码即可快速构建应用程序的新型开发模式。搭贝的低代码开发平台通过提供便捷的开发工具,大大降低