在我工作的地方,我经常不得不在旧系统(.NET 1)中开发(和修复错误)谁的代码是完整的意大利面条-对变量名,程序结构或注释不加考虑。
因此,我花了很长时间才了解需要更改哪些位,并且由于进行了修改,我经常“破坏”现有软件。我真的真的想花几个月的时间(与同事),通过它去重构,但现有的开发人员都看不到需要-也不觉得孤单时间讨论这个(系统是巨大的)。
我担心必须处理它的代码,因为花几天的时间来修复某些问题,才发现我已经破坏了其他内容。这显然使我看起来不称职-那么我该如何处理呢?
在我工作的地方,我经常不得不在旧系统(.NET 1)中开发(和修复错误)谁的代码是完整的意大利面条-对变量名,程序结构或注释不加考虑。
因此,我花了很长时间才了解需要更改哪些位,并且由于进行了修改,我经常“破坏”现有软件。我真的真的想花几个月的时间(与同事),通过它去重构,但现有的开发人员都看不到需要-也不觉得孤单时间讨论这个(系统是巨大的)。
我担心必须处理它的代码,因为花几天的时间来修复某些问题,才发现我已经破坏了其他内容。这显然使我看起来不称职-那么我该如何处理呢?
Answers:
开始为您正在研究的零件编写测试。您可以尝试如下工作流程:
如果您不放弃测试,则随着时间的流逝,您将建立一个测试套件,该套件应涵盖应用程序的最重要(和/或易失)部分,并且进行更改将变得更加容易和安全。
您可能还会发现Michael Feathers的《有效处理旧版代码》很有帮助。
您可能会向经理解释,由于代码库混乱,应花费数小时才能解决的修复工作可能要花费数天。如果其他开发人员是原始开发人员,他们将不需要重构-他们将完全了解系统,但是如果这些开发人员离开并随身携带他们的知识,管理层应该知道那里存在风险。
进行完整的重构通常是不可行的,因此经常一次重构少量位-几种方法或模块。哎呀,如果要花几天的时间进行修复,也许您可以同时对问题模块进行少量重构。
您也可以保留旧代码,直到完全确定您的修改是可靠的为止。只是在所有情况下都可以,因此您可以在运行时切换它们,并快速查明新回归错误的位置:
// old code
...
if (!File.ReadAllText("c:\patch_control.txt").Contains("StrangeUIBugFix=0"))
{
// new code goes here
...
}
// old + new code
int someValue =
IsEnabled("StrangeUIBugFix") ? a + b : // new code
a * b; // old code