最近我继承了一个主要的软件。该软件的原始模型在几代程序员的工作中失去了(尽管即使是“原始模型”也看起来很破碎)。代码中没有单元测试。幸运的是,我没有要求向后兼容(哦,这将比地狱更糟!)。我采用选择性强制,选择性限制方法来重构代码。在过去,我经常在试图改变很多东西时经常烧手,但仍然认为自己倾向于这样做。
有一次,我在长时间卡住后也解决了一个错误。根据这一经验,我明白花时间找到缺失的“正确假设”非常重要,而不是继续尝试新事物。
我知道我的下一个目标应该是尽快创建一个测试套件,但目前对于如何做到这一点并不相信。我喜欢使用“Working Effectively with Legacy Code”一书中所述的重构原则,但缺乏耐心和时间(或纪律?)来遵循这本书。
如果您想根据自己的经验提供一些调试技巧,请执行。
答案 0 :(得分:2)
根据我的经验,获得最终用户支持是至关重要的。
几年前,当我收到Clipper Summer '87应用程序维护并使其与Y2K兼容时,我有类似的经历。作为一场噩梦开始:我开始在一个地方修复一些错误而另一个停止工作。花了一些时间后,我安排了一些关键用户的会议,并建议重写该应用程序。我首先重写了最重要的功能,并且每天与这些用户进行非常密切的讨论,这经常表明重要的缺失点。每周我都会迁移一些示例数据,这样他们就可以了解该应用程序的运行情况。我在大约三周内运行了第一个版本,只迁移了一个小的功能集。
有一个特定的报告需要45分钟才能完成处理,并且在新版本上花费的时间仅为5秒。因此,用户认为花更多时间和金钱抛弃旧代码并开始新版本是一个不错的选择。
我不知道每次都可以重写一个应用程序。但要了解对客户重要的事情并让他们了解一些重大变化,这对项目的成功具有决定性作用。