提高对不熟悉代码的理解的工具和技术?

时间:2010-12-02 14:54:45

标签: readability code-readability

我意识到,作为一名编程学生,我最大的弱点就是我很难理解其他人的代码。

我对“教科书”代码或明确注释的代码没有任何问题,但是当给出一个包含十几个不同函数且没有注释的几百行程序时,我发现很难开始。

我知道这种类型的代码是我在职业生涯中可能遇到的更多代码,而且我认为代码理解能力差对我来说是一个很大的障碍,所以我想专注于提高我在这方面的技能。

哪些工具/技术有助于提高您的体验中的代码理解力?

您如何处理不熟悉的,未注释的代码?为什么?你认为你的技术有用吗?

谢谢

5 个答案:

答案 0 :(得分:4)

熟悉外国代码

如果代码库足够小,您可以立即开始阅读。在某些时候,碎片将开始一起落下。

在这种情况下,“足够小”会变化,随着经验的增加,它会变大。您也将从这里开始受益于“作弊”:您可以跳过您从经验中认识为“实施模式X”的代码片段。

您可能会发现在阅读代码时绕道而行很有帮助,例如:通过在看到被调用函数时查找函数,然后花费一点时间浏览它。在了解所谓的功能之前,不要停留在这些弯路上;这不是重点,它会让你觉得自己跳来跳去并没有任何进展。绕道的目的是了解新功能在不到半分钟内的作用。如果你不能,那就意味着这个功能太复杂了。中途绕行并接受这样一个事实,即你必须在没有这些额外帮助的情况下理解你的“当前”功能。

如果代码库太大,你不能只是开始阅读它。在这种情况下,您可以从高级抽象中识别程序的逻辑组件开始。您的目标是将源代码中的类型(类)与这些组件相关联,然后确定每个类在其组件中扮演的角色。将在组件内部使用类,并使用类与其他组件或框架进行通信。在这里划分和征服:首先将类分成相关的组,然后专注于一个组,并了解它的各个部分是如何组合在一起的。

为了帮助您完成此任务,您可以使用源代码的结构作为指导(而不是最终法律;由于人为错误,它有时会产生误导)。您还可以使用诸如函数或类型的“查找用法”之类的工具来查看每个引用的位置。同样,如果您不能合理地快速完成,请不要尝试完全消化IDE告诉您的内容。当发生这种情况时,这意味着你从一台你不太了解的机器中挑出了一块复杂的金属。把它放回去尝试别的东西,直到找到你可以理解的东西。

调试外国代码

这完全是另一回事。我会欺骗一点,直到你积累了丰富的经验,只要对你来说陌生,就没有办法成功调试代码。

答案 1 :(得分:2)

我发现绘制调用图和继承树通常对我有用。您可以使用任何方便的工具;我通常只使用白板。

通常情况下,代码单元/功能很容易理解,我可以清楚地看到每个单元是如何运行的,但我经常会看到更大的图片,而这就是故障发生的地方我得到了这个“我迷失了”的感觉。

从小处开始。对自己说:“我想完成 x ,那么它是如何在代码中完成的?”其中 x 是一些可以跟踪的小操作。然后,只需跟踪代码,制作一些可视化的内容,您可以在跟踪后查看。

然后,选择另一个 x 并重复此过程。每次执行此操作时,您都应该对代码有更好的感觉。

当需要实施某些内容时,请选择与您追踪的内容类似(但几乎不相同)的内容。通过这样做,您可以从跟踪级别的理解转变为实现级别的理解。

第一次与编写代码的人交谈也很有帮助。

答案 2 :(得分:2)

我尝试做的第一件事就是弄清楚代码的目的处于什么样的高级别 - 在您对问题域有所了解之前,细节是无关紧要的。找出问题的好方法包括查看标识符的名称,但考虑上下文通常更有帮助 - 您从哪里获得此代码?谁写的?它是否具有已知用途的某些应用程序的一部分?一旦你弄明白代码应该做什么,你就可以复制并开始重新格式化,以便你个人更容易理解。这可以包括在必要时更改标识符的名称,排除任何奇怪的缩进,添加空格来分解,一旦你弄清楚它们做了什么就评论位等等。这无论如何都是一个开始...... :)

此外 - 一旦你弄明白代码的目的,通过调试器对一些简单的例子进行操作,有时也可以让你更清楚地了解FWIW的内容......

答案 3 :(得分:1)

我理解你的挫败感,但请记住,那里有很多不好的代码,所以请保持你的ch。并非所有代码都不好:)

这是我倾向于遵循的过程:

  1. 寻找任何单元测试,因为他们应该记录代码应该做什么......
  2. 使用代码rush / resharper / visual studio快捷方式浏览代码 - 这可以为您提供有关所涉及的逻辑层和物理层的一些想法......
  3. 首先扫描代码,寻找常见的模式,命名约定和代码样式 - 这应该可以让您深入了解团队标准,也许可以让原始编码员思考...
  4. 当我浏览代码heirarchy时,我会记下所使用的对象...通常使用笔和&纸上绘制一个简单的activity diagram
  5. 我倾向于从一个公共入口点开始,所以如果它是一个用户界面,从视图开始,一直到数据访问代码,如果它的服务从服务边界开始并一直工作到数据访问代码......
  6. 寻找可以重构的代码 - 如果你能看到可以重构的代码,你已经学会了如何简化它而不改变它的行为......
  7. 练习构建与您正在审核的相同的内容,但以不同的方式......
  8. 当您阅读未经测试的代码时,请考虑使其可测试的方法......
  9. 使用代码抢购诊断工具来寻找具有高维护复杂性或圈复杂度的方法,并特别关注这些方面因为可能性,这是大多数错误的地方......
  10. 祝你好运

答案 4 :(得分:0)

Understand是一个了不起的代码分析工具。它在我以前的雇主(L-3)中广泛使用,所以我在目前工作的地方购买了它。