Debugging 睡前讨论最佳调试建议

Debugging 睡前讨论最佳调试建议,debugging,legacy,Debugging,Legacy,最近我继承了一个重要的软件。经过几代程序员的努力,软件的原始模型已经丢失了(尽管“原始模型”看起来已经破损了很多)。代码中没有单元测试。幸运的是,我没有向后兼容的要求(哦,那比地狱还糟糕!)。我正在采取一种有选择的、有力的、有选择的、有限制的方法来重构代码。在过去,我经常烧掉我的手,试图同时改变很多,但仍然认为我倾向于这样做。 有一次,我也解决了一个错误后,长时间的停留。从那次经历中,我明白了花时间寻找缺失的“正确假设”是重要的,而不是不断尝试新事物 我知道我的下一个目标应该是尽快创建一个测试套

最近我继承了一个重要的软件。经过几代程序员的努力,软件的原始模型已经丢失了(尽管“原始模型”看起来已经破损了很多)。代码中没有单元测试。幸运的是,我没有向后兼容的要求(哦,那比地狱还糟糕!)。我正在采取一种有选择的、有力的、有选择的、有限制的方法来重构代码。在过去,我经常烧掉我的手,试图同时改变很多,但仍然认为我倾向于这样做。 有一次,我也解决了一个错误后,长时间的停留。从那次经历中,我明白了花时间寻找缺失的“正确假设”是重要的,而不是不断尝试新事物

我知道我的下一个目标应该是尽快创建一个测试套件,但目前我不知道如何做到这一点。我很想使用书中提到的重构原则,但缺乏耐心和时间(或纪律?)


如果您想根据自己的经验提供一些调试技巧,请提供。

根据我的经验,获得最终用户支持是最基本的

几年前我也有过类似的经历,当时我收到了一份Clipper Summer'87应用程序,用于维护并使其与Y2K兼容。一开始就像一场噩梦:我开始在一个地方修复一些bug,而另一个地方停止工作。在花了一些时间之后,我安排了一次与一些关键用户的会议,并提议重写该应用程序

我首先重写了最重要的特性,并每天与用户进行非常密切的交谈,这经常会提示重要的遗漏点。每周我都会迁移一些示例数据,这样他们就可以了解应用程序运行的情况。我在大约三周内运行了第一个版本,只移植了一个小功能集

有一份特定的报告需要45分钟才能处理完毕,而更新版本只需5秒钟。因此,用户认为花更多的时间和金钱扔掉旧代码并开始新版本是一个不错的选择


我知道不是每次都可以重写应用程序。但是,了解什么对您的客户来说是重要的,并让他们了解一些重大的变化是项目成功的决定性因素。

近亲:伟大的方法-与使用软件的人进行交流,并从最大的问题开始,做出新的解决他们问题的方法。