我的项目需要我对生产代码进行许多更改。需求不断出现,我需要尽快进行更改并部署。有时候,由于某些要求无法适应软件的整体设计,我最终会创建补丁式的代码。如何有效地处理这种情况?是否有任何设计模式可以处理这个问题?
我的项目需要我对生产代码进行许多更改。需求不断出现,我需要尽快进行更改并部署。有时候,由于某些要求无法适应软件的整体设计,我最终会创建补丁式的代码。如何有效地处理这种情况?是否有任何设计模式可以处理这个问题?
我已经多次见过这种情况,它总是以泪水收场。上一次客户在改善他们的流程之前损失了数百万美元。
用户总是希望新的需求能够“尽快”得到满足,但他们不理解进行更改的风险,就像你所做的那样。他们看到没有该功能的成本,但他们不会预测如果更改破坏了某些东西,将会发生什么以及会损失多少钱。(我的意思并不是说你不是一个好开发人员,只是在任何非微不足道的软件中都会存在错误,并且不受控制的更改很可能会更快地暴露它们。)
因此,我认为你需要退一步,并尝试引入定期发布计划。会有阻力,但你可以更加有效地实现这一点。当然,有时确实需要立即进行更改,但如果有一个时间表,那么责任将落在用户身上,让他们证明打破发布周期是有意义的。
哦,正如其他人建议的那样,你需要像一个分阶段 / 测试系统,单击发布程序等技术基础架构。 (请参阅Joel Test。)
测试,你需要一个可靠的测试框架来确保你的修复不会破坏其他任何东西。
编辑:回答评论中的问题。
不幸的是,除了花时间重构“hack”之外,我无法想出一个真正稳健的模式/解决方案来保持架构完整。但是你可能没有太多时间去抽空,因为你已经在生产中了。所以这并不容易...
然而更重要的是,如果架构被破坏了,因为你真的需要在解决方案中进行“hack”,这实际上可能表明原始设计未满足产品的实际要求,因为如果满足了,你应该能够在当前架构的框架内进行修复/补丁。
因此,试图对整个情况持积极态度,你应该注意你的修复措施以及当前架构如何不帮助/符合要求,这样当热修补开始稳定下来时,你就可以拥有数据和提示,重新设计任何现在需要设计的架构部分,因为你发现了在生产过程中更准确的要求。
大家都提出了很好的建议,比如测试等。但我认为我应该指出你可能在问错误的问题。你正在问是否有一个“模式”可以帮助解决这个情况。模式是一种设计选择,用于解决设计问题。实际上,您所面临的是“流程”问题。
我会问:“我可以使用什么流程来防止这种情况发生?”
不幸的是(在我工作的地方也是如此),设计是开发人员和架构师需要考虑的问题,但流程是管理人员需要考虑的问题。实现良好的流程并坚持它确实需要领导力。不幸的是,这通常是缺乏的。
两个明显的工具是版本控制和测试。尝试将发布系统与它们集成,这样您可以在每个步骤提交更改,并且当所有测试都通过(包括新要求的测试)时,发布系统会选择“已知良好”的版本,这将成为新版本。
我不知道其他系统,但Monotone有一些钩子专门用于使测试标记提交,因此有一个命令可以“给我最后一个通过所有测试的版本”。