首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解其他人巨大的未评论的意大利面代码?

如何理解其他人巨大的未评论的意大利面代码?
EN

Software Engineering用户
提问于 2012-11-06 08:36:25
回答 9查看 3.1K关注 0票数 9

可能重复: 我继承了200行意大利面代码--现在呢?

我最近被处理了一个巨大的多线程程序,没有任何评论,并被要求理解它做什么,然后改进它(如果可能的话)。

当我们需要理解别人的代码时,是否有一些应该遵循的技术?还是我们直接从第一个函数调用开始,然后继续跟踪下一个函数调用?

Linux上的C++ (带多线程)

EN

回答 9

Software Engineering用户

回答已采纳

发布于 2012-11-06 08:47:15

这将取决于语言,但是(我知道这是一个非常古老的工具) IMHO --您不能超过一个简单的代码流程图和相关的数据流图。

在过去的日子里,人们从需求中设计代码的方式基本上是一样的。

从整个程序开始然后分解..。

显然,您将为每个(非平凡的)函数做一个单独的图表..。每个图表的细节取决于功能的复杂性。

在类的情况下,将每个类视为一个独立的、独立的块--从系统的角度来看,每个类都应该(如果设计正确)能够被视为“黑匣子”。

将整个系统分解为类,然后将类分解为数据结构和函数等。

现代工具,如UML,有自己的位置,但对于逆向工程,则坚持使用基本工具。

票数 7
EN

Software Engineering用户

发布于 2012-11-06 13:19:19

如果代码周围有一些单元测试,这将是非常有帮助的-单元测试通常可以作为文档具有辅助功能。

然而,遗留代码通常没有测试。也许写一些会是一个很好的方法来弄清楚到底是怎么回事?

然后,您可以将意大利面代码重构为易于阅读、编写良好的代码。

票数 3
EN

Software Engineering用户

发布于 2012-11-06 14:31:31

从根本上说,您希望跟踪科学方法。即观察、假设、试验。每一阶段都可能有各种适合的技术。

观察:

  1. 运行代码:希望这是显而易见的!
  2. 通过分析器运行代码:这可以很好地指示您的工作重点。如果你有一个像样的分析器,它也可能是伟大的发现意外的副作用的操作。
  3. 在调试器中逐步完成代码:如果您想要理解细节,那么非常关键。

Hypothesise:

  1. 流程图可能对建立你的假设很有用:它们对于澄清函数/etc正在做什么非常有用。请记住,如果您必须表示的代码是意大利面一样,那么您的流程图必然也是如此!
  2. 更改代码:注释掉一些代码,强制变量的值,插入额外的方法调用,等等。
  3. 编写单元测试:与快速代码更改相比,这些测试应该更少一些临时性。也就是说,当你对你的假设更有信心时,就使用它们。正如Paul所提到的,它们还有一个额外的好处,就是在将来的任何重构中都是非常有用的。

测试:

运行您更改的代码/单元测试,并再次观察!如果你是对的,把它记录下来(评论等)然后转到下一件事情(这可能是整理/重构代码)。如果不是,根据你的新数据做出一些新的假设。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/174770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档