快速业务通道

追求代码质量 - 驯服复杂的冗长代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
意对象所拥有的惟一类型 的数量(该数量可通过解析代码获得 —— 不是 import 语句)。如果应用程序的包结构大致上以某种在少数包中包含许多类的 方式设计,则惟一类型度量(types metric)可能很有帮助。

包含许多 public 方法的类也有许多导入。这些类通常会成为代码基的中心 ,就像 Facades 或工具类那样。因为存在这种责任(通过大量 public 方法导 出),所以它们具有高度的输入耦合,也会导致反向的脆弱性。如果这些类中的 任何一个发生更改,各种表面上不相关的应用程序部分可能 发生中断。

追求代码质量 - 驯服复杂的冗长代码(2)

时间:2010-12-09 IBM Andrew Glover

复杂性是如何产生关联的

到目前为止,所给出的模式都在暗示臃肿的代码(长方法、太多的 public 方法、过多的条件和导入,等等)将影响可读性、可测试性和可维护性。因为该 模式用各种度量来重复自己,所以所有这些因素都会导致相互关联。例如,长方 法通常得容忍高圈复杂度值,如图 2 所示:

图 2. 长方法与圈复杂性相互关联

不过,相关性并不止于此。具有过多导入的类会有许多惟一类型。这些类通 常非常大。而大型的类通常拥有长方法,长方法又常常有很高的圈复杂度值。图 3 展示了复杂性度量是如何相关的:

图 3. 复杂性度量是如何相关的

PMD 和 JavaNCSS

少量的繁琐代码可用 PMD 和(更小范围的)JavaNCSS 轻松处理,很容易结 合使用这两种工具,以构建诸如 Ant 和 Maven 之类的平台。

可以将 PMD 看作是基于规则的引擎,它分析源代码并报告正被违反的某一规 则的所有实例。PMD 目前定义了大约 200 个规则,其中一些特定规则是针对方 法长度、类长度和惟一类型的,还有一些用于计算 public 方法。您还可以定义 定制规则和修改现有规则(例如,为了反映域的需求)。

定制 PMD

例如,我将使用 PMD 的经过恰当命名的 ExcessiveMethodLength 规则来发 现长方法。此规则的默认长度阈值是 100(这意味着如果某个所扫描方法的长度 超过 100 行,则 PMD 会报告出现一个违规),但是如果您喜欢的话,可以降低 该阈值。

PMD 规则可以定义属性,通过站在 PMD 开发团队的角度很好地进行预见,您 可以通过使用规则集文件在运行的时候覆盖这些属性。要将 ExcessiveMethodLength 规则的默认值从 100 降低到 50,可以将 properties 元素添加到 rule 定义中并引用属性的名称。在清单 1 中,我将一个名为 minimum 的属性添加到了 PMD rule 定义中:

清单 1. 定制 ExcessiveMethodLength 规则

<rule  ref="rulesets/codesize.xml/ExcessiveMethodLength">   <properties>   <property name="minimum" value="50"/>   </properties> </rule>

用 Ant 工具调用带有定制规则集文件的 PMD 需要通过 PMD 任务的 rulesetfiles 属性提供一条到该定制文件的路径,如清单 2 中所示:

清单 2. 引用定制规则集文件

<pmd  rulesetfiles="./tools/pmd/rules-pmd.xml">   <formatter type="xml"  toFile="${defaulttargetdir}/pmd_report.xml"/>   <formatter type="html"  toFile="${defaulttargetdir}/pmd_report.html"/>   <fileset dir="./src/java">   <include name="**/*.java"/>   </fileset> </pmd>

追求代码质量 - 驯服复杂的冗长代码(3)

时间:2010-12-09 IBM Andrew Glover

PMD 报告由源文件导致的违规,正如您在图 4 中可以看到的,在本例中,只 有少数几个方法的源代码行超过了 50 行:

图 4. PMD Ant 报告的示例

对于长类,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号