Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 对于承担增强和增强功能任务的开发商,有何建议;重构业务关键型应用程序?_Unit Testing_Refactoring_Brownfield - Fatal编程技术网

Unit testing 对于承担增强和增强功能任务的开发商,有何建议;重构业务关键型应用程序?

Unit testing 对于承担增强和增强功能任务的开发商,有何建议;重构业务关键型应用程序?,unit-testing,refactoring,brownfield,Unit Testing,Refactoring,Brownfield,最近,我在工作中继承了一个业务关键型项目,以“增强”。在过去的五年里,该准则已经制定并通过了许多人。顾问和全职员工已经不再在公司工作,他们扼杀了这个非常微妙和过于敏感的应用程序。我们大多数人都必须处理遗留代码或此类项目。。。它是开发者的一部分。。。但是 有零单元和零系统测试。逻辑在存储过程、视图(是的,我说的是视图)和代码之间相互混合(有时是无缘无故地重复)。文档是的,对。 我很害怕。是的,即使是最微小的“调整”或重构也是非常神圣的。如果发生一点小事故,我的雇主将面临重大的收入损失和潜在的法律问

最近,我在工作中继承了一个业务关键型项目,以“增强”。在过去的五年里,该准则已经制定并通过了许多人。顾问和全职员工已经不再在公司工作,他们扼杀了这个非常微妙和过于敏感的应用程序。我们大多数人都必须处理遗留代码或此类项目。。。它是开发者的一部分。。。但是

有零单元和零系统测试。逻辑在存储过程、视图(是的,我说的是视图)和代码之间相互混合(有时是无缘无故地重复)。文档是的,对。 我很害怕。是的,即使是最微小的“调整”或重构也是非常神圣的。如果发生一点小事故,我的雇主将面临重大的收入损失和潜在的法律问题

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

  • 得到一份非常明确的需求清单

  • 确保您既有明确的需求,也有隐含的需求,即它必须使用哪些程序,以及如何使用

  • 编写当前如何使用它的所有场景和用例

  • 编写大量的单元测试

  • 编写大量集成测试来测试程序与必须使用的现有程序的集成

  • 与每个使用该程序的人交谈,找出更多隐含的需求

  • 测试,测试,在投入生产前测试变更

  • CYA:)


  • 扪心自问:你想要实现什么?你的任务是什么?你有多少时间?衡量成功的标准是什么?有什么风险?您如何缓解和处理这些问题

    不要碰任何东西,除非你知道你想达到什么目的

    代码可能是“坏的”,但这意味着什么?代码正确吗?所以,如果你重写代码,让它做同样的事情,你会花很多时间重写一些东西,在编写过程中引入错误,让代码做同样的事情?为了什么


    您可以做的最简单的事情就是记录系统所做的事情。我并不是说写一些没人会读的令人麻木的Word文档。我的意思是编写关键功能的测试,如果有必要,重构代码以允许编写此类测试。

    您说您害怕触碰代码,因为法律、收入损失以及没有文档。那么你理解代码了吗?您应该做的第一件事是记录它,并确保在考虑重构之前理解它。一旦你做到了这一点,并确定了问题的领域,你就可以以最小的变化,以最大的利益为顺序列出你的重构建议,并以渐进的方式进行攻击。如果:代码的预期寿命将很长,将添加新功能,错误修复数量众多,那么重构就更有意义了。至于测试数据库状态——我最近参与了一个项目,我们成功地做到了这一点。

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

  • 要做到这一点,你首先需要对自己的能力充满信心。这只有在你有足够的技术经验的情况下才能实现

  • 沟通,沟通,沟通。让所有相关的利益相关者知道,这是一个混乱的局面,这是有风险的,这不能仓促完成,这将需要一餐完成——一次攻击一个区域

  • 彻底了解系统。记录每一个细微差别,技巧和技巧。记录总体设计。询问任何一位老前辈关于任何你无法证明的代码存在的历史原因。这些是你不想踩上的地雷——你可能会认为这些是无用的代码片段,然后在摆脱它们之后后悔

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

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

  • 在浏览代码时,列出所有需要完成的事情——你需要找出的事情、你需要编写测试的事情、你需要提出问题的事情、提醒你如何重构代码的注释、任何可能影响你重写的事情。。。你不能忘记任何事情!我使用Outlook任务来实现这一点(只要确保你使用的任何东西都始终在你面前-这是我一坐下就打开的第一个应用程序)。如果我被打断了,我会写下我一直在思考的任何事情,以及在回到任务后继续进行的提示

  • 试着在重写时避免黑客攻击(这是你重写它的原因之一)。想想你遇到的棘手问题。与其他人讨论这些问题,并从中获得灵感