如果scrum中的所有内容都是关于用户可以看到的功能性内容,那么实际上是否有任何地方可以重构与任何新功能需求无关的代码?
答案 0 :(得分:20)
我认为这与Scrum和项目管理理念没有多大关系。
无论项目是否使用Scrum,许多项目经理都不喜欢开发人员花时间处理代码重构或重组等“不必要”的事情,而这些事情并未直接推进其中一项突出的功能需求。这不是“正常开发产生结果的工作”,而是“防止结果延迟的工作”。鉴于Sprint通常使用的时间通常很短,因此通常很难看到这种好处,而且几乎无法量化。
保持代码可维护性需要成为刻录列表中的项目(如果使用Scrum)。它与新开发同样重要。虽然它可能看起来不像“用户可见”,但忽略它会增加您的技术债务。当技术债务累积到足以导致您的代码缺乏可维护性会降低开发速度时,新功能开发的延迟将显示在客户身上。
这完全是管理/哲学的问题。不要将重构和可维护性增强视为不会影响客户的“额外”工作,而应将其视为时间投资,以防止客户明显的延迟(以及潜在的错误)。开发人员有时可以比管理者更清楚地看到这些好处;如果您的经理不理解忽视可维护性的缺点,您可能想要抓住其他几位开发人员并与您的经理聊天。
答案 1 :(得分:5)
我认为,对于技术债务重构而言,存在一个公平的案例,即维护代码的努力/成本影响与重构代码一样高或更高,以提高质量或更好/更好地工作 - 特别是为了使其具有更高的可维护性。
例如:如果软件是如此有问题,你正在失去客户或金钱,你会迅速采取行动解决它......有些人可能会认为这是它自己的业务需求,但它通常不会放在前面和中心位置中小型开发项目,而不是专注于创建应用程序的技术性,而不是应用程序质量对底线的影响。答案 2 :(得分:4)
我认为你可能正在谈论大规模的重构,而不是在整个红绿重构周期中你会做的连续重构。
我的方法就是这样,如果重新构建旧功能可以更容易地添加新功能,那么继续执行。但在某些方面你是正确的,如果特定单位没有压力要改变(即它完全完成并且永远不会再改变并且永远不会影响其他模块)那么就没有实际的重构需求。但是我很少找到一个完全如此定型的模块。
答案 3 :(得分:4)
如果Scrum中的所有内容都是关于用户可以看到的功能性内容(...)
任何项目和方法应该是关于生成商业价值,您很少只是为了在商业环境中获得乐趣。话虽如此,我认为Scrum(和其他敏捷方法)的质量是一种不会长期阻止你的速度,并最终实现超高效率的方法。因此,我认为典型的“完成定义”应该包括“不增加技术债务”(将质量标准放在那里)。如果您认为新功能会影响应重构的现有代码,请在估算中包含此成本(或在产品Backlog中创建重构项)并向产品负责人解释。因为最终,由产品负责人决定项目的优先级并决定是否可以暂时牺牲质量(如果您的业务因为没有发布功能而死亡,那么重构现有代码的重点是什么?)。但他必须意识到这不是一个长期战略,否则他将扼杀团队的速度。
答案 4 :(得分:4)
bta:无论项目是否使用Scrum,许多项目经理都不喜欢开发人员花时间处理“不必要”的事情,例如代码重构或重组,而不是直接推进其中一个出色的功能要求。
绝对是一个值得注意的观察;我对此的解决方案如下:
如果您的经理需要更有说服力,请将“维护者”作为用户投射,并为他们描述一些用户故事 - 然后“功能”就像“代码完全评论了xml doc comments”和“代码不会从ReSharper'
产生任何警告答案 5 :(得分:1)
如果您可以通过使用当前代码集识别问题/风险来完成其他任务的过程中的一部分,并且这是一个更好的最终结果,那就去做吧。但是,不要过度热心并搞砸时间表/预算。