对于开发人员的任何建议,给予增强和重构业务关键型应用程序的任务?

Kri*_*use 5 refactoring unit-testing brownfield

最近我在工作中继承了一个"增强"的业务关键项目.在过去五年中,该代码已经过许多人的工作和传递.不再与公司合作的顾问和全职员工已经对这种非常敏感和过于敏感的应用程序进行了抨击.我们大多数人都必须处理遗留代码或这类项目...作为开发人员的一部分......但......

没有单位和零系统测试.逻辑在存储过程,视图(是的,我说过的视图)和代码之间是混杂的(有时无缘无故地重复).文档?是的,对.我害怕.是的,非常神圣,即使是最小的"调整"或重构也是如此.一个小小的不幸事件,我的雇主会有重大的收入损失和潜在的法律问题.

那么,有什么建议吗?我的第一个想法是开始针对现有代码编写断言/单元测试.但是,这只能到目前为止,因为存储过程中嵌入了大量逻辑.(我知道它可以测试存储过程,但是历史上它比单元测试源代码逻辑要困难得多).另一种或另外的方法是在应用程序执行函数之前和之后比较数据库状态,进行一些代码更改,然后进行数据库状态比较.

Sud*_*shu 3

我刚刚重写了企业文件系统最复杂的子系统的数千行,使其成为多线程的,所以所有这些都来自经验。如果重写是合理的(如果进行重写是为了显着增强功能,或者如果现有代码妨碍了更多增强),那么这里是指针:

  1. 要做到这一点,你首先需要对自己的能力充满信心。只有当您对所涉及的技术有足够的先前经验时,才会出现这种情况。

  2. 沟通,沟通,沟通。让所有相关利益相关者知道,这是一团糟,这是有风险的,这不能匆忙完成,这需要零碎完成 - 一次攻击一个区域。

  3. 从内到外了解系统。记录每一个细微差别、技巧和技巧。记录总体设计。向任何老前辈询问您无法证明的任何代码存在的历史原因。这些是你不想踩到的地雷——你可能会认为这些是无用的代码,然后在摆脱它们后后悔不已。

  4. 单元测试。通过任何已经存在的测试套件来运行系统,否则首先为现有代码编写测试(如果它们不存在)。

  5. 在重写过程中到处喷出调试代码 - 断言、日志记录、控制台打印(您应该能够打开和关闭它们,以及指定不同级别的输出,即控制详细程度)。根据我的经验,这是必须的,并且在重写期间有很大帮助。

  6. 在浏览代码时,列出所有需要完成的事情 - 你需要找出的事情,你需要编写测试的事情,你需要提出问题的事情,提醒你如何重构某些部分的注释代码,任何可能影响您重写的东西......您不能忘记任何事情!我使用 Outlook 任务来执行此操作(只需确保您使用的任何内容始终在您面前 - 这是我坐在办公桌上后打开的第一个应用程序)。如果我被打断,我会写下我一直在思考的任何事情,并提示回到任务后继续进行。

  7. 尝试避免重写中的黑客行为(这是您重写它的原因之一)。想想你遇到的棘手问题。与其他人讨论这些问题,并与他们讨论你的想法(没有什么比这更好的了),并提出干净的解决方案。查看您放入待办事项列表中的所有任务 - 为现有设计绘制 10,000 英尺的图片,然后决定新的重写将是什么样子(在模块、子模块、它们如何组合在一起等方面)。

  8. 先解决最棘手的问题。这将使你避免在隧道尽头遇到无法解决的问题,并避免你后退一步。当然,您需要知道最棘手的问题是什么 - 因此,在尝试现有代码时,最好首先记录所有内容。