Why Software Development Methodologies Suck

软件开发方法为何?

在围绕软件开发实践和方法的宗教战争中有很多教条。阶段门方法是有效地管理软件开发的风险,还是仅仅是风险管理歌舞伎?TDD真的能创造出更高质量的软件吗?成对编程是代码评审的一个更好的替代,还是仅仅是一种提高咨询率的方法?我要说的是,虽然缺乏科学证据来决定这些说法,但有两个一般原则可以帮助我们选择好的做法,同时提高我们所提供软件的价值:缩短周期时间和增加反馈。

Michael Feathers给出了以下观点:

我认为,最后,我们必须承认,开发人员的技能比语言选择或方法上的细微差别要重要得多。1。坦率地说,我想我们都知道这一点,但我们似乎有一种错觉,认为它们是需要调整的主要旋钮。也许这是一种根深蒂固的观点的延伸,从经济的角度来看,如果人是可以互换的,那将是理想的。

问题是,我们如何获得熟练的开发人员?由于资讯科技中个人生产力的概念从未得到令人满意的界定,这是一个特别难以解决的问题。代码行–仍然是一项流行的措施测量工作小时数会鼓励英雄行为,但经验表明“英雄”通常是那些通过早期冒不可接受的风险而导致项目延迟的人。长时间工作使人愚蠢,导致软件质量差。目前还没有一套普遍接受的IT专业人士专业标准或特许制度,招聘优秀人员在很大程度上是一门艺术,而不是一门科学。

心理学家至少已经解决了为什么获取和衡量IT技能如此困难的问题。正如丹尼尔·卡尼曼在思考速度慢“获得一项技能有两个基本条件:一是有足够规律、可预测的环境;二是通过长期练习学习这些规律的机会”。

但传统的软件项目与常规的、可预测的环境正好相反。衡量一个项目成功的唯一标准–最终结果是否创造了其生命周期内的预期价值?–与那些导致成功或失败的关键决定相距甚远,即使是原始团队中的任何人,也很少能得到反馈。几乎不可能确定哪一个在那些导致成功或失败的决定中(在人工智能中,这被称为信用分配问题)。

这些因素使得IT专业人员很难获得成功的产品和服务的技能。相反,开发人员获得的技能使他们能够以最有效的方式实现他们受到激励的目标–通常会尽快宣布他们的工作“开发完成”,而不管这些功能是否集成和生产准备就绪,在其他功能领域也会出现类似的问题。

软件项目是复杂的系统而不是常规环境,这一事实导致了另一个问题–收集关于哪些技术、实践和方法实际有效的数据极其困难,以及在收集数据的背景之外几乎不可能概括这些数据。

在他那本好书里软件工程的雏形Laurent Bossavit对软件开发民俗进行了毁灭性的攻击,例如“更改成本”(或“缺陷成本”)“曲线”、关于开发人员生产率的差异是一个数量级的说法、确定锥的概念以及软件开发方法知识的许多其他基石。他指出,这些理论–以及许多其他理论–依赖于非常小的数据集,这些数据要么是从对计算机科学学生进行的非正式实验中收集的,要么是那些不可能得到有效控制的项目。作为这些主张基础的研究的组织结构往往在方法上不健全,数据分析不善,而且–最令人震惊的是–研究结果的普遍性远远超出了它们的适用范围。

因此,我们不可能认真对待任何关于敏捷开发实践是否优于瀑布式开发实践的一般说法–反之亦然。“思想领袖”的直觉也是一个很差的向导。正如卡尼曼所说,“人们对直觉的信心并不是判断其有效性的可靠指南.在评估专家直觉时,你应该始终考虑是否有足够的机会来学习这些线索,即使在一个正常的环境中也是如此。“正如本·巴特勒-科尔在他的同伴职位上指出的,“为什么软件开发方法摇滚乐”采用新方法的行为本身就能产生采用该方法的人打算带来的一些结果。

你可能会认为,这会让我们在决定如何管理团队时处于一个不可能的位置。但考虑一下为什么软件开发不是一个正常的环境,为什么运行实验、获得技能、衡量哪些实践和决策导致成功、哪些导致失败是如此困难。在所有这些情况下,造成环境不正常的根本原因是在改变和理解变化的结果之间的反馈循环太长了。。这里的“更改”一词应该被理解为是指需求的更改、方法的更改、开发实践的更改、业务计划的更改或代码或配置的更改。

缩短周期时间有很多好处–这是我们将精益思想应用于软件开发时最重要的原则之一。短周期的时间当然是创造伟大产品的关键:正如布雷特维克多在他令人印象深刻的视频中所说的那样。发明原则性“创造在很大程度上就是发现,如果你看不见自己在做什么,你就什么也找不到。”

但对我来说,这是最关键的:它实际上是不可能让我们练习持续改进,学习如何作为团队或个人变得更好,并获得能够成功创造伟大产品和服务的技能–除非我们专注于尽可能短的反馈回路,这样我们才能真正发现相关性,并辨别原因和效果。

事实上,从创意到反馈周期短的好处是非常重要的,因此它们应该成为您的业务模型中最重要的标准之一。如果您必须决定将您的产品创建为用户安装的包还是服务软件,这一考虑应该会推动您。强在软件即服务的方向(我从这里的经验)。如果您正在构建一个涉及硬件的系统,请确定如何尽快获得原型,以及如何模块化硬件和软件,以便您可以快速和独立地更新它们。3D打印可能会在这一领域产生巨大影响,因为它允许将软件开发实践应用于硬件系统的发展。在跨职能团队如果你想实现足够短的周期时间,或多或少是一项要求。

软件方法–甚至是“雇佣一群优秀的人并让他们自我组织”的方法–都很糟糕,因为它们经常导致货物崇拜行为:我们在做假货,我们有一个优先的待办事项,我们甚至为了上帝的缘故而不断地练习集成–为什么我们做的东西仍然是糟糕的和迟的呢?因为你忘记了最重要的事情:建立一个组织尽可能快地学习和适应。

1、尽管正如洛朗·博沙瓦(LaurentBossavit)所指出的(私人交流),“开发人员的技能部分在于他/她知道的方法,以及他/她偏爱一种语言而不是另一种语言的原因。
2、我并不是建议我们放弃运行实验,去更多地了解什么在软件开发中起作用和什么不起作用,以及在哪些情况下这些说法是正确的–恰恰相反,我的意思是,我们的努力不够努力。

原文出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值