8

是的,可怕的“M”字。

您拥有一个工作站、源代码控制和 50 万行不是您编写的源代码。该文件在被批准和发布的那一刻就已经过时了。最初的开发者是 LTAO,在下一个项目/startup/loony bin 并且不回复电子邮件。

你会怎样做?

{最喜欢的编辑器}和 Grep 将帮助您开始探索代码库的复杂内容,但是维护工程师工具箱中还应该包含哪些其他工具?

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

4

12 回答 12

4

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

有时,大局可能是一个真正的消极因素,你需要选择一个点,一点一点地解决它。

当然,您仍然需要选择开始的位。通常,这主要由用户/业务驱动,需要进行最优先的特定更改(昨天),但如果您有一点灵活性或熟悉时间,指标通常很有用。这里的工具因技术和语言而异,但像NDependJDepend这样的工具、任何内置的 Code Metrics (如在 Visual Studio Team System 中或各种可用的 Eclipse 插件中)或像Simian这样的工具来感受复制和粘贴问题。

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

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

几本鼓舞士气的书:

祝你好运 :)

于 2008-09-24T15:54:26.640 回答
3

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

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

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

于 2008-09-24T14:58:06.400 回答
2

代码搜索引擎可以帮助您找到庞大的源代码库。

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

(我是工具架构师)

于 2009-08-22T20:46:52.537 回答
1

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

于 2008-09-24T14:59:23.357 回答
1

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

于 2008-09-24T14:59:28.287 回答
1

在这种情况下,我会为 C++ 使用理解

于 2008-09-24T15:26:56.300 回答
1

使用签名调查过程是鸟瞰代码的好方法。有了一个好的脚本语言和一些使用它的魔力,用任何语言为你自己的代码库构建一个高度定制的签名调查根本不是一项艰巨的任务。

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

书面日志也很有帮助,这样您就可以在进行过程中记录系统。

于 2008-09-24T18:42:14.083 回答
0

是的,一针见血。unix shell 和方便的 No​​tepad++ 是我在 ColdFusion、PHP、Perl 等中进行维护工作时使用的工具。最好不要切换编辑器,并跟踪对名称/参数/变量的所有引用。

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

于 2008-09-24T14:54:44.927 回答
0

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

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

你提到源洞察力。一个长期运行的开源项目是source navigator。在停滞了一段时间后,似乎又开始了发展。

于 2008-09-24T15:02:46.017 回答
0

我发现 Lutz 的 Reflector 对此很有用,尤其是当您混合使用代码和二进制文件时。你会得到调用和依赖图(依赖、使用、暴露、实例化等)、程序集图和一些很棒的插件。

于 2008-09-24T18:58:09.943 回答
0

您需要能够浏览整个代码库。如果您最喜欢的 IDE 确实允许这样做,那么您可以使用索引器,例如为 C++ 理解的(已引用)、lxrOpenGrok

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

于 2008-10-06T11:33:38.147 回答
0

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

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

NDepend 的一些对重新设计有用的特性是:

于 2010-09-01T15:10:49.607 回答