Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Language agnostic 熟悉继承的代码库的最佳方法_Language Agnostic_Legacy Code - Fatal编程技术网

Language agnostic 熟悉继承的代码库的最佳方法

Language agnostic 熟悉继承的代码库的最佳方法,language-agnostic,legacy-code,Language Agnostic,Legacy Code,斯塔克:没人问过这个问题 最重要的是继承一个必须迅速熟悉的代码库的影响。突然发现自己负责维护N行代码,而这些代码被拼凑在一起的时间不知道有多长,并且在很短的时间内开始对其做出贡献,这可能会让人非常震惊 如何有效地吸收所有这些新数据?是什么让这种转变变得容易?唯一真正的解决方案是否已经为足够多的开放源码项目做出了贡献,从而消除了冲击 这也适用于资深程序员。您使用什么技术来简化到新代码库的转换 我添加了社区建设标签,因为我也想听到一些关于这些转变的战争故事。请随意分享您如何处理压力特别大的学习曲线。

斯塔克:没人问过这个问题

最重要的是继承一个必须迅速熟悉的代码库的影响。突然发现自己负责维护N行代码,而这些代码被拼凑在一起的时间不知道有多长,并且在很短的时间内开始对其做出贡献,这可能会让人非常震惊

如何有效地吸收所有这些新数据?是什么让这种转变变得容易?唯一真正的解决方案是否已经为足够多的开放源码项目做出了贡献,从而消除了冲击

这也适用于资深程序员。您使用什么技术来简化到新代码库的转换


我添加了社区建设标签,因为我也想听到一些关于这些转变的战争故事。请随意分享您如何处理压力特别大的学习曲线。

编写单元测试。您会更快地发现缺点,并且在更改代码时会更加自信。

我不知道这是否是“最好的方法”,但我在最近的一份工作中做了一件事,那就是编写一个代码爬行器/解析器(用Ruby),它经过并构建了一个调用树(以及一个反向调用树),我可以稍后查询它。这是一个非常重要的问题,因为我们有一个称为Perl的PHP,它称为SQL函数/过程。任何其他的代码爬网工具都会以类似的方式提供帮助(如javadoc、rdoc、perldoc等)

阅读任何单元测试或规范都会非常有启发性

记录事情会有帮助(无论是对你自己,还是对现在和将来的其他队友)。阅读任何现有文档


当然,不要低估简单地问同事(或老板)问题的力量。早些时候,我经常问“我们是否有一个函数/script/foo可以执行X?”

熟悉继承代码的最好方法之一就是把手弄脏。首先修复一些简单的bug,然后逐步解决更复杂的bug。这比试图系统地检查代码要好得多

如果有需求或功能规范文档(希望是最新的),您必须阅读它

如果有高级或详细的设计文档(希望是最新的),您可能应该阅读它


另一个好方法是与熟悉代码的人员安排一次“信息传递”会议,他们在会上介绍高级设计,并对代码的重要/棘手部分进行演练。

浏览核心库并阅读函数声明。如果是C/C++,这意味着只有标题。记录你不懂的东西

上次我这样做的时候,我插入的一条评论是“这个类从来没有被使用过”。

铅笔和笔记本(不要因为试图创建一个未经请求的解决方案而分心)

  • 边走边做笔记,每周一花一小时通读并整理前几周的笔记

  • 对于大型的代码库,第一印象可能会具有欺骗性,在您熟悉自己的过程中,问题往往会迅速重新排列

  • 记住,上一个工作环境中的问题在新环境中并不一定有效或密切相关。谨防先入为主的观念

  • 你所做的笔记/观察将帮助你快速了解要问什么问题以及问谁。 希望您已经收集了所有官方(和非官方)利益相关者的姓名


一定要通过修复代码中的错误来理解代码。请更正或维护文档。不要修改代码本身中的注释,这可能会引入新的bug

在我们的工作中,一般来说,没有充分的理由,我们不会更改生产代码。这包括表面上的改变;甚至这些都会引入bug


不管一段代码看起来有多恶心,除非你有错误修正或其他改变要做,否则不要试图重写它。如果您在阅读代码时发现了一个bug(或可能的bug),请记录该bug以备以后分类,但不要试图修复它。

vi和emacs用户可以做的一件事就是使用标签。标记包含在文件中(通常称为标记)。您可以通过命令生成一个或多个标记文件(etags for emacs vtags for vi)。然后我们编辑源代码,您会看到一个混乱的函数或变量,您加载了标记文件,它将带您到函数声明的地方(不够完美)。实际上,我已经编写了一些宏,允许您使用Alt cursor导航源代码, 有点像许多UNIX版本中的popd和pushd

BubbaT

我的步骤是:

1.)使用代码库中的所有源文件、头文件设置source insight(或您使用的任何良好的源代码浏览器)工作区/项目。从最上面的功能(主功能)到最下面的功能的更高级别。在此代码浏览过程中,在纸上或word文档上记录函数调用的流程。在这一步中不要涉及函数实现的细节,将其保留到以后的迭代中。在此步骤中,跟踪传递给函数的参数、返回值、传递给函数的参数是如何初始化的、这些参数集的值是如何修改的、返回值是如何使用的

2.)在步骤1.)的一次迭代之后,在代码库中使用一定级别的代码和数据结构,设置MSVC(或根据代码库编程语言的任何其他相关编译器项目),编译代码,使用有效的测试用例执行,然后从主功能到最后一级功能,一步一步地完成代码。在函数调用之间,不断激发传递的变量值、返回的变量值、采用的各种代码路径值、var值