我偶尔不幸必须做出的改动非常古老的, 很差 记录和 很差 设计代码。

它往往需要很长的时间做一个简单的改变,因为没有从结构到现有的代码,我真的读了很多的代码之前我有一个感觉这里的东西会。

我认为会有很大的帮助,在这样的情况下,是一个工具,该工具将允许一个以形象化的一个概览的代码,然后也许甚至了解更详细的说明。我怀疑这样的工具将是非常难得到正确的,因为试图找到结构有很少或没有。

我猜这不是一个真正的问题,而是一个沉思.我应该使它成为一个问题- 什么其他人做到协助得到他们的头部周围的其他人的代码,好不好?

有帮助吗?

解决方案

我强烈推荐 BOUML.这是一个免费的UML建模工具,其中:

  • 是非常快的(最快的UML工具,检查了 基准),
  • 有摇滚固C++进口的支持,
  • 具有很大的SVG出口的支持,这是非常重要,因为观察大图在矢量的格式,其尺度快,例如在火狐,是非常方便(你可以迅速交换机之间的"鸟瞰"图和类的详细地图),
  • 是全特色,加紧开发(看看 发展历史, 很难相信,所以取得快速进展是可能的)。

所以:输入你的代码转BOUML和视图,或出口SVG并查看它在火狐。

其他提示

嗯,这是一个很难的一个,所以多说的那么一点时间...

1)如果您可以运行的代码,这使得生活不断更加容易,断点(特别是有条件的)破点是你的朋友。

2)一个纯粹主义者'的方法将写入一些单元的测试,对于已知的功能,之后再重构,以改善代码和理解,然后重新测试。如果事情破裂,然后创造更多的单元测试的-重复,直到无聊/old/移动到新的项目

3)ReSharper是很好的展示那里的东西都被使用的,什么叫一方法的实例,它是静态的,而是一个良好的开端,它有助于重构。

4)很多。净事件编码为公共和事件可能是一个痛苦的调试在最好的时代。重新编码他们可以私有和使用财产。然后可以使用的突破点,看看是什么听上的一个事件。

顺便说一句-我打中的。净空间,并且会爱上一个工具来帮助做这样的东西,像乔伊不会有人知道的一个良好的动态码审查的工具吗?

我已经要求取得所有权的一些讨厌的代码,在过去的工作和"玩"。

大多数的爱好者我在代码刚刚种演变的代码做什么他们需要在若干次迭代。它总是一个巨大的乱伦混乱的图书馆一个叫B,叫回,呼吁C,呼吁B,等等。很多时候他们会使用的线并不是一个关键部分是可以看到。

我找到了最佳/唯一的方式得到处理上的代码是开始在操作系统的进入点[主要()]和建立自己的电话的堆图表示的话树。你真的不需要建立一个完整的树在一开始就。只是跟踪通过该部分(s)你的工作在每个阶段你会得到一个足够好的把手上的东西才能运行。

最重要的是,使用大片的死树,你可以找到一支钢笔。铺设的所有出在你的前面,所以你不要跳回和向前在屏幕上或网页,让生活变得如此简单得多。

编辑:有很多的谈论编码标准...他们只会让穷人的代码看起来符合良好的代码(通常更难spot)。编码标准并不总是让维持码更加容易。

我这样做经常的基础上。并已开发一些工具和技巧。

  • 试图得到一个一般性概述(对象的图或其他)。
  • 文件你的调查结果。
  • 测试你的假设(特别是模糊的代码)。

这个问题是,在大多数公司你都认识到的结果。这就是为什么一些程序员编写贫穷码快速转移到一个不同的项目。所以你留下的垃圾,你的老板你比较缓慢的进展有快速和dirtu的家伙。(幸运的是我现在的雇主是不同的)。

我通常使用UML序列图的各种关键方式,组件是用。我不知道的任何工具,可以产生自动的,但许多UML工具,如BoUML和EA境内第可以创建的课程/行动从源代码,从而节省一些输入。

最终的文本在这种情况是迈克尔*羽毛的工作有效地与传统的代码。作为 S.洛特 说得到一些单元的测试,在建立行为的lagacy代码。一旦你有这些在你可以开始重构。似乎有一个样章 在目指导者的网站。

看看 单元测试的遗产ASP.NET web表单的应用程序 建议获得抓地力的遗产应用程序通过单元的测试。

有许多类似的问题和答案。这里的搜索 https://stackoverflow.com/search?q=unit+test+legacy

这一点是得到你的头周围遗产可能是最简单的如果你正在写的单元测试,遗产。

我没有伟大的运用工具的自动化审查的不良记录在案/执行代码,导致混淆/严重的设计程序通常意味着一个低于有用的模式。这是不令人兴奋的或立即奖励,但是我有过的最好的结果与挑选点和以下程序执行行行,记录并添加意见,因为我上去,并重构适用。

一个很好的IDE(EMACS或蚀)可能帮助在许多情况下。还在UNIX平台,还有一些工具,用于crossreferencing(etag,ctags)或者检查(lint)或海湾合作委员会与许多多的警告选项的开启。

第一,在试图理解的一种功能/方法,我要重构这一点,以适应编码的公约(空间、矫正器、压痕)和去除大多数的意见,如果他们似乎是错误的。

然后我想"重构"和注释的部分理解,并试图找到/查询的那些部分在整个来源的树和"重构"他们也有。

随着时间的推移,你会得到一个更好的代码,就像工作。

我个人做了很多的绘制的图表,并搞清楚骨头的结构。

时尚de jour(可能还有相当正确地)已经得到了我写的单元的测试,以测试我的断言,并建立一个安全网改变我所做的系统。

一旦我得到一个点,在那里我舒适的足够知道什么该系统不会,我会带一个刺在固定的错误中见过的最聪明的可能的方式,并希望我的安全网络已接近完成。

这只是我的,但是。;)

我actuaally已经使用的重构,特ReSharper帮助m得到处理一大堆的项目,我继承了最近。因此,图找出另一个程序员的非常不良的结构化,无证件的代码,我实际上开始通过重构。

清洗了编码,重新命名方法,类和命名空间正常,取的方法是所有的结构变化,可以揭示了什么一段代码应该做的事。这可能听起来有悖常理的重构代码"不知道",但trut我ReSharper真的可以让你这样做。举个例子的问题红鲱鱼死的代码。你看到一个方法中的一类或许是一个奇怪的命名的可变的。你可以开始通过试图查找惯例或者,ungh,做一个文本搜索,但ReSharper实际上将检测到的死代码和色灰色。只要你打开文件你看见灰色和与滚吧标志会有什么在过去一直混乱红鲱鱼.

有几十个其他的技巧,而且很可能其他一些工具,可以做类似的东西但我是一个ReSharper破烂不堪的.

欢呼声。

要知道的软件密切,从用户的观点。有很多可以学到有关的基础结构,通过研究和相互作用的用户界面(s)。

  • 打印输出
  • 白板
  • 大量的信纸
  • 大量的星巴克

能书写,所有通过可怜的东西是最有用的方法我。通常我把一个很大的"呵呵,那很有趣...",同时努力使基本的代码结构图,原来是更多有用于图本身的结束。自动化的工具可能更有助于我给他们的信贷,但的价值的发现那些有趣的位的值超过迅速产生的图表给我。

图,我看主要是那里的数据。它在哪里进来吧,它在哪里结束了,和它有什么去通过的方式。通常会发生什么情况的数据似乎为提供一个良好的印象的整体布局,有的骨头回来如果我重写。

当我工作上的遗留系统的代码,我不试图了解整个系统。这将导致复杂性超载和随后的大脑爆炸。

相反,我取一个单一功能的系统,并尝试完全理解它是如何工作的,从端到端。我会一般的调试进入代码、起始点在UI代码在哪里我能找到具体的功能(因为这通常是唯一我能找到在第一次).然后,我将执行一些行动GUI,并在代码下进入数据库然后回来。这通常导致一个完整的了解至少一种要素的系统,及时提供深入了解系统的其他部分。

一旦我了解了什么职能称为什么存储程序、表格和视图都参与其中,然后我搜索过代码中找出什么其他部分的申请依靠这些同样的功能/处.这是我找到了如果改变我要做将破坏任何其他的系统。

它也可以有时是有益尝试图数据库和/或编码结构,但有时它只是那么坏或所以出奇的复杂的,这是更好地忽略系统作为一个整体,只是专注于该部需要改变。

我的大问题是,我(当前)很大的系统来了解在相当短的时间内(我可怜的合同开发这一点),并没有很多的经验,这样做的(具有先前已经足够幸运的是一个设计从地上爬起来。)

一个方法我用的是以试图理解的意义命名的变量、方法、课程等。这是有用的,因为它(希望越来越多地)嵌入了一个高级别视的思维从一个原子的水平。

我这样说是因为开发商通常将名称他们的元素(与他们认为)的有意义和提供深入了解他们的预期功能。这是有缺陷的,不可否认,如果开发人员有一个有缺陷的了解他们的节目,该术语中,或者(通常情况下,恕我直言)试图声聪明。多少个开发者已经看到关键字或者类的名称只有到那看着术语的词典,第一次?

它是所有关于标准和编码规则,公司使用。

如果每个人都码在不同的风格,然后就很难维护其他程序员的码等,如果你决定什么样的标准将使用有一些规则,一切都会好起来:)注意:你不需要做很多的规则,因为人们应该有可能以代码在他们的风格一样,否则你可能会非常惊讶。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top