软件维护工程的最佳工具

时间:2020-03-06 14:40:00  来源:igfitidea点击:

是的,可怕的" M"字。

我们将拥有一个工作站,源代码控制和50万行未编写的源代码。该文档在获得批准和发布时即已过时。最初的开发人员是LTAO,在下一个项目/启动/ loony bin中并且不回复电子邮件。

你会怎样做?

{最喜欢的编辑器}和Grep会开始着手研究代码基础,但是维护工程师工具箱中还应包含哪些其他工具?

开始滚球;我认为,如果没有C / C ++拼写的源代码洞察力,我将无法生存。 (免责声明:我不为他们工作)。

解决方案

是的,打在头上的钉子。当我在ColdFusion,PHP,Perl等中进行维护工作时,通常使用unix外壳和方便的Notepad ++。很高兴不要切换编辑器,并跟踪对名称/参数/变量的所有引用。

现在,我只需右键单击并在Visual Studio中单击"查找所有引用",说实话,这似乎是一种作弊行为。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 PHP人士非常嫉妒,因为他们被迫使用vi进行编辑。 ;)

.Net空间中最好的工具之一是ReSharper。该工具为我节省了开发生命周期各个方面的时间。当加入未记录的项目/解决方案时,它们还帮助我生存。

  • 代码重构
  • 代码导航
  • 代码分析

这些是许多功能中的一部分,可以执行耗时的任务。

我通常从Linux上的Emacs + CScope开始。 Visual Studio有一些检查工具,可为我们提供类似的Windows功能。 Doxygen也可能非常有用,即使源中没有文档注释,Doxygen也会生成有用的文档。

我将运行一些UML工具(也许是带pen =的简单笔记本)和/或者用于构建类,调用,方法层次结构(集成在IDE中)的工具。然后,我将通过调试器或者简单的单元测试来观察动态。借助这些内容,我将尝试执行某种逆向工程来弄清楚设计。

关键工具将是使我们能够浏览(和编辑)代码库以帮助理解的工具。

拥有可以显示类关系的东西(如果使用OO语言)非常有用。当我们要评估更改的影响时,显示(静态)调用树的功能也非常有用。

我们提到了源于洞察力。长期运行的开源项目是源导航器。
停滞了一段时间后,似乎又开始了发展。

在这种情况下,我会使用Understand for C ++

就像一次吃一口大象一样:)

有时,大局可能是一个真正的动力,而我们需要选择一个地点并逐一解决。

当然,仍然需要选择开始的步骤...通常,这主要是由用户/业务驱动的,需要进行最高优先级的特定更改(昨天...),但是如果我们有一点灵活性或者熟悉时间,则指标通常有用。这里的工具随技术和语言的不同而不同,但是诸如NDepend和JDepend之类的工具,任何内置的Code Metrics(例如在Visual Studio Team System中或者在各种可用的Eclipse插件中)或者诸如Simian之类的工具都可以让我们感觉到大小复制和粘贴问题。

希望单元测试和覆盖范围的数量大于零,因此,一个好的第一步始终是获取在持续集成环境中可以运行的任何测试,以此作为在学习过程中添加更多测试的基础。

就像其他人所说的那样,假设该语言可用选项,那么具有代码导航和自动重构的良好IDE是必须的(Eclipse,Visual Studio(带有或者不带有ReSharper))。

几本提高士气的书:

  • Michael C. Feathers:有效处理旧版代码
  • Martin Fowler:重构:改进现有代码的设计

祝你好运 :)

使用签名调查过程是一种很好的方法,可以使我们对代码有非常深刻的了解。有了良好的脚本语言并使用了一些Mojo,就可以为自己的代码库构建高度自定义的签名调查,无论我们使用哪种语言,这都不是一件困难的事情。

错误跟踪软件,尤其是与源代码控制软件链接的软件,将具有无价的价值,因为它可以使我们了解为什么做出了一些错误的决定。如果维护程序员也计划进行一些重构,则这一点尤为重要。

书面日志也很有帮助,因此我们可以在进行过程中记录系统。

我发现Lutz的Reflector对此很有用,尤其是当我们混合使用代码和二进制文件时。我们将获得调用图和依赖图(取决于,使用,被暴露,被实例化等),程序集图和一些出色的插件。

我们需要能够浏览整个代码库。如果我们最喜欢的IDE允许这样做,则可以使用索引器,例如Understand for C ++(已引用),lxr或者OpenGrok。

急着我们可以依赖grep(1s)或者更好的Ack。

代码搜索引擎可以找到庞大的来源基础。

可以找到对语言敏感的源代码搜索引擎
在SD源代码搜索引擎中。它可以同时处理多种语言。
可以搜索特定语言中的模式,
或者跨语言的模式(例如"涉及TAX的查找标识符")。
通过对语言标记敏感,可以减少误报的数量,
为用户节省时间。它了解C,C ++,C#,COBOL,Java,ECMAScript,Java,XML,Verilog,VHDL和许多其他语言。

(我是工具架构师)。

NDepend是专用于重新设计遗留代码的工具,尤其是大型纠缠的遗留代码库免责声明:我是工具开发人员之一

引用曾经在他的博客上写过的Scott Hanselman的话:" NDepend让我对以前从未有过的应用程序有了更深入的了解(...)一旦我意识到要查看的信息的深度和广度,我就是就像糖果店里的孩子一样。"

NDepend的一些可用于重新设计的功能包括:

  • 依赖矩阵/依赖图,了解代码的结构。
  • LINQ查询(CQLinq)上的代码规则要求代码库给我最好的秘密。默认情况下,建议使用200多个代码规则。
  • 根据代码的不同,查看在任意两个版本的代码之间添加/重构/删除的内容。