软件维护工程的最佳工具

时间:2008-09-24 14:42:51

标签: maintenance code-search-engine

是的,可怕的'M'字。

你有一个工作站,源代码控制和你没写过的50万行源代码。文档在批准和发布时已经过时了。最初的开发人员是LTAO,在下一个项目/启动/疯狂垃圾箱,而不是回复电子邮件。

你打算做什么?

{最喜欢的编辑器}和Grep将通过代码库的粗糙内容开始您的洞察,但维护工程师工具箱中应该有哪些其他工具?

开始滚球;我不认为没有source-insight的C / C ++探险就能活下去。 (免责声明:我不为他们工作)。

12 个答案:

答案 0 :(得分:4)

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

有时候大局可能是一个真正的消极情绪,你需要选择一个位置并逐一解决它。

当然,仍然需要选择要开始的位...通常这是由用户/业务驱动的,具有所需的最高优先级特定更改(昨天......)但是如果您有一点灵活性或熟悉时间,指标通常很有用。这里的工具因技术和语言而异,但NDependJDepend等工具,任何内置的代码指标(如Visual Studio Team System中的,或各种可用的Eclipse插件)或类似的工具{ {3}}了解复制和粘贴问题的大小。

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

正如其他人所说 - 假设该语言有可用选项 - 必须使用具有代码导航和自动重构的良好IDE(Eclipse,Visual Studio(带或不带ReSharper)。

一些鼓舞士气的书:

祝你好运:)

答案 1 :(得分:3)

.Net领域最好的工具之一是ReSharper。该工具为我在开发生命周期的各个方面节省了时间。他们在加入无证项目/解决方案时也帮助我生存。

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

这些是帮助执行耗时任务的众多功能中的一部分。

答案 2 :(得分:2)

代码搜索引擎可以帮助您找到适合大量源代码的方法。

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

(我是工具架构师)。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我将运行一些UML工具(可能是带笔的简单笔记本=))和/或用于构建类,调用,方法层次结构(集成在IDE中)的工具。然后我会用调试器或简单的单元测试来观察动态。有了这些东西,我会尝试进行某种逆向工程来弄清楚设计。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

使用signature survey进程是了解鸟类代码的好方法。使用良好的脚本语言和一些mojo来使用它,为您自己的代码库构建高度自定义的签名调查,无论您的语言是什么都不是一项艰巨的任务。

错误跟踪软件,特别是如果它链接到你的源代码控制软件将是非常宝贵的,因为它可能会让你深入了解为什么做出一些糟糕的决定。如果维护程序员计划进行一些重构,这一点就更为重要了。

书面日志也很有用,因此您可以随时记录系统。

答案 7 :(得分:0)

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

现在我只需右键单击并在Visual Studio中点击“查找所有引用”,这听起来像是作弊。 PHP人员非常嫉妒,因为他们被迫使用vi进行编辑。 ;)

答案 8 :(得分:0)

关键工具将允许您导航(和编辑)代码库以帮助您理解。

有一些可以显示类关系的东西是非常有用的(如果使用OO语言)。当您想要衡量您将要进行的更改的影响时,显示(静态)调用树的能力也非常有用。

你提到了source-insight。一个长期运行的开源项目是source navigator。 在停滞一段时间后,看起来发展已经开始了。

答案 9 :(得分:0)

我发现Lutz的Reflector对此有用,特别是当你混合使用代码和二进制文件时。你得到调用和依赖图(取决于,使用,暴露,实例化等),汇编图和一些很棒的插件。

答案 10 :(得分:0)

您需要能够在整个代码库中导航。如果您最喜欢的IDE允许这样做,那么您可以使用Understand for C++(已引用),lxrOpenGrok等索引器。

匆忙,您可以依靠grep(1s)或 - 更好 - Ack

答案 11 :(得分:0)

NDepend是专用于re-engineer legacy code的工具,特别是大型纠缠的遗留代码库免责声明:我是工具开发人员之一

引用Scott Hanselman that wrote once on his blog“NDepend让我深入了解我之前没有的应用程序(......)一旦我意识到我正在查看的信息的深度和广度,我就像一个糖果店的孩子。“

一些NDepend对重新设计有用的功能是: