演化架构与紧急设计: 通过指标进行紧急设计 - 编程入门网
iPlasma 还根据金字塔提供建议,见金字塔下面显示的内容。图 5 显示针对 Struts 的建议: 图 5. iPlasma 建议 iPlasma 生成的数字有两个用途。首先,可以通过它们比较自己和别人的代码库。第二,这些数字指出应该在哪些方面改进代码质量和设计。例如,对于 Struts,iPlasma 指出继承树的深度非常大,而且方法往往太复杂了。但是,必须根据上下文理解这些数字。像 Struts 这样的 Web 框架往往具有非常细致的层次结构,这意味着 NDD 值高可能不要紧。但是,CC 值与上下文关系不大,它太高了,就说明方法级的设计不太合理。 为了进行比较,图 6 显示 iPlasma 为 Vuze 项目生成的金字塔,这是一个用 Java 语言编写的开放源码 BitTorrent 客户机: 图 6. iPlasma 为 Vuze 生成的金字塔 Vuze 是一个大型项目(超过 500,000 行代码),它在继承树的深度、每个类中的方法数量、每个方法的代码行数和每个方法的调用数方面可能有设计问题。 演化架构与紧急设计: 通过指标进行紧急设计(4)时间:2011-07-13 IBM Neal Ford依赖性 紧急设计需要查看代码中的关系和其他高级抽象。试图从源代码调用中看出这些高级概念就像是盲人摸象。这种做法只能了解局部特征,无法获得全局视图。 这种局部化问题使我们很难判断类和对象之间的依赖性。iPlasma 这样的工具可以显示代码的总体特征,但是不能指出哪些部分应该进一步研究。幸运的是,其他工具可以帮助您从不同的角度了解代码。 Smalltalk 社区开发了一个称为 CodeCrawler 的工具。它基于 Moose 平台,用图形显示一些代码指标,包括类的大小、方法长度等等。可以让 CodeCrawler 检查 Java 代码,但是很麻烦。幸运的是,因为已经出现了 X-Ray 项目,现在不用费劲儿了。 X-Ray 是一个 Eclipse 插件,它生成有助于了解代码总体结构的一些信息,包括类之间依赖性的图形表示,图 7 是 Struts 的依赖性视图: 图 7. X-Ray 类依赖性视图 圆周上的每个点是一个类,线表示类之间的依赖性。线的粗细表示依赖性的强度。单击类会显示这个类的相关信息,双击它会在 Eclipse 编辑器中打开它。这个视图包含的信息太多,不容易找到有用的信息。可以放大它以查看各条线。粗线表示类之间的依赖性很强(传出耦合),如果两个类的关系太紧密,可能说明有设计缺陷。 X-Ray 还为包依赖性提供相似的视图,见图 8: 图 8. X-Ray 包依赖性视图 总体结构 还有一个 X-Ray 视图显示有用的代码信息,它也基于 CodeCrawler。系统复杂度视图通过图形显示代码库的情况,继承层次结构显示为自顶向下的树视图,框的大小表示类中的行数,框的宽度表示方法数。图 9 给出系统复杂度视图。 图 9. X-Ray 系统复杂度视图 这个视图还把向外调用(传出耦合)显示为粉红线,把向内调用(传入耦合)显示为红线。与前面的视图一样,单击一个框会在 Eclipse 中打开这个类。这个代码视图可以提供独特的视角,仅仅查看代码很难了解到这些信息。如果可以沿着某些维快速地筛选,收缩应该进一步研究的范围,就很容易找到某些方面的设计缺陷。 结束语 X-Ray 和 iPlasma 只提供了 Java 代码可用的一小部分可视化特性。适当地使用它们可以快速地收缩关注的范围,有助于找到项目代码中隐藏的设计。寻找惯用模式是紧急设计的关键活动之一,工具有助于轻松地找到模式(包括好的和糟糕的),可以显著降低研究工作量,为重构代码留出更多时间。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |