如何避免在单独项目中出现特征蠕变?


12

因此,我有一个程序要追溯到2011年,直到2012年为止,但最后一个版本是2011年12 。我一直在积极地研究它,但是特征蠕变吸引了它丑陋的头,现在它充满了许多未完成的特征。

不好的部分是,随着我实现一项功能,一个新的功能应运而生。为了避免将来出现功能蠕变,我该怎么做,以便实际上可以一年内发布它

该项目基于iOS,过去每个iOS版本更新都有发行版本,但最后一个版本是5.1(2011)。我希望能够恢复到稳定的发布周期,但是事实证明这太困难了。


8
你能不能更具体的在你的问题WRT 其中的特征从何而来?谁负责特征蠕变?您?业务分析师?公司总裁?用户的需求?在不知道源是什么的情况下,很难提供有关如何管理特征爬坡的建议。另外,因为我喜欢Dilbert:search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner

1
您是该项目的唯一开发者吗?大型团队项目发现必须具有里程碑以使交付时间表易于管理,但是我们这些单飞的人也可以从功能驱动开发等方法中受益。
hardmath

@FrustratedWithFormsDesigner我是唯一的开发人员
Cole Johnson

1
@FrustratedWithFormsDesigner号 我还是孤单一人。除非您将Source Forge视为从事该项目,否则我是唯一的人。
科尔·约翰逊

4
运送也是一项功能...有时(考虑)另一个功能时请记住这一点。
Marjan Venema

Answers:


21

以我的经验,最简单的方法是开发和发布节奏不​​会妨碍您完成工作。这是我的操作方法:

  1. 写下功能,并给它们一个等级,以反映您要使用它的程度以及您认为对用户有好处的程度(为此可能会吸引实际用户)。然后按此顺序写。
  2. 在签入/推送功能之前,请确保您具有稳定且可部署的内部版本(强烈考虑使用CI系统来简化此过程)。

这样,您可以根据需要在每个功能之后推送一个版本...或等待提供所需版本值的汇总。

注意:

  • 一项功能的优先级永远不能比您正在使用的功能高(或者可以,但是不能中断您正在使用的功能)。它可能会在下一个出现,现在永远不会出现。这意味着从现在开始到下一个,如果需要,您将有机会削减发行版本。

很有帮助!我喜欢它的严格性。
科尔·约翰逊

我要补充一点:在完成新功能之前,不要启动新功能。否则,您最终将获得无济于事的代码库,这些代码无法做任何事情。
Tyanna

@Tyanna:这就是我的意思:“一项功能永远不会比您正在开发的功能具有更高的优先级……它不能打断您正在开发的功能……”
Steven Evers

7

答案很陈旧,而且常常是不可能的:拒绝添加其他功能。

更深入地讲,答案实际上归结于是什么使新功能落入功能爬虫箱?如果我们假设蠕变特征是添加到项目中的特征,尽管它们的功能仅与项目的预期用途相切,并且蠕变特征是有用的,而不是多余的,那么答案就是将它们分开,但相关工具。使用Unix的哲学,即构建正交工具并将其粘合在一起。

从项目管理的角度来看,答案是可比的。确定您愿意花多少时间用于下一个版本并设置截止日期。估计功能并削减足够的时间以达到最后期限。如果除了您之外还涉及其他利益相关者,请让他们选择最重要的利益相关者。

可以在Joel on Software上找到有关调度的良好概述:

http://www.joelonsoftware.com/articles/fog0000000245.html


9
由于他完全是项目专家,因此他可能需要外包打点功能请求者的工作。
菲利普(Philip)

2

开发中最重要的课程之一就是知道何时停止。

开发人员通常会添加功能。反过来又激发了更多的想法。因此,添加了更多功能。就是说,正如您所说的那样,项目成为蒸气产品的一种方式。开发人员永远不会将项目视为“完成”,因此永远不会发布。

您想养成的习惯是停止将发布/版本视为“完成”项目。而是将开发视为一个长期过程。将发布视为您一天希望该程序实现的里程碑。因此,发布/版本只是您在长期过程中所处位置的快照……经过完善和测试的快照。

从实际的角度来看,您可以做的是坐下来,确定下一个版本。它不必非常彻底。写下3-5个您认为对下一版本至关重要的主要功能。(功能的实际数量可能会因应用程序的类型而异,不包括错误修复或gui的微小更改)。如果您有其他想法,那很好...只是做笔记并在以下版本中实现它们。完成这3-5个项目后,您的发行版即可进行Beta版测试。

当我启动一个新的应用程序时,我通常会考虑该应用程序的最终“愿景”。对我而言,这就是我在该应用程序第3版中想要的。通过该基准测试,我对什么将使固体版本1产生了想法-仅是基础知识。

摘要:

每个版本都不必是项目的最终“愿景”。这只是实现这一愿景的一个里程碑。


2

使用版本控制系统,在该版本中,为某些想法创建分支并不昂贵,并将其置于发布路径之外。例如,在中git,您可以“吸收”一些想法,然后将git stash其删除。稍后,您可以查看这些存储库,并以看起来有趣的顺序来挑选它们。

对于较大的功能,请创建一个真实的分支(以便您可以进行多次提交)。恰当的例子:当我想向垃圾收集器添加后代支持时,我做了一个分支。杂物很好地捕获了分散注意力的小东西。大功能可以从存储开始,然后变成分支,然后在准备好时最终合并。

使用存储和分支机构,您可以盘点您的想法,对其进行优先级排序,并为您的单独项目的发布确定范围,就像托管团队项目一样。

看,当您有了一个主意时,它必须走到某个地方,最好的地方是代码:回购。爬行功能胜过忘记好主意。但是,当然,如果您将所有功能都放到同一个主线中,它将继续延迟发布,除非您削减不完整的发布,其中充满了半成品,必须警告用户不要使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.