• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

持续检查--把自己从软件检查员寻常的手工检查工作中解放出来

发布: 2008-4-03 17:50 | 作者: Andrew Glover | 来源: IBM | 查看: 249次 | 进入软件测试论坛讨论

领测软件测试网

可以用定制规则扩展 CheckStyle,所以也可以容易地实施编码规则。而且,它是自动执行的!

图 1 显示了使用 Ant 生成的 CheckStyle 报告的一个示例,这是 清单 1 中所演示的 xslt 任务:


图 1. CheckStyle HTML 报告
CheckStyle HTML 报告
用 IDE 怎么样?

我听到的一个普遍反应是这些检查可以在 IDE 中运行。尽管确实如此,并且极力推荐这样做,但是拥有一台对源代码运行一组公用规则集(使用 Ant 这样的工具)的单独机器的好处是:一致性更好。

用 CPD 进行重复性检查

面向对象编程的一个主要目的是通过创建可以适应不同上下文的可重用对象来促进重用。但是,通常使用的是 “复制-粘贴” 编程,并将它伪装成 “重用”。有时,出现这种情况是因为开发人员不知道有可重用的组件,而其他时候,则是因为提供了“快速修复”。所以,如果需要进行修改,则必须将更改应用到所有 副本和变体中(当然,如果没有工具很难完成)。这种手工方式带来了维护困难并很容易导致遗漏,甚至会带来缺陷

CPD 是流行的开源静态分析工具 PMD 的一部分,它报告代码基中重复行的数量。此外,CPD 的标志阈值是可配置的,这意味着可以修改 CPD 建议的重复行数。例如,如果将阈值设置成 100 个标志,CPD 就会在至少 重复了 100 个标志的时候显示一个实例。不过请记住,源代码总是会包含一些重复部分;CPD 只是为团队提供了一种调查值得考虑的代码重复 领域的手段,在这个领域内,可以采取纠正措施,例如有目的的重构。

清单 3 演示将 CPD 用于 Ant 的实际使用。CPD 任务需要的第一个选项是 minimumTokenCount 属性,该属性用于指定要比较的标志的数量(最小值是一个标志)。另外,可以设置 CPD 忽略某些代码选项,例如标识符和标量。在这个示例中,Ant fileset 类型指定了 CPD 文件应该分析哪些文件,以及应该忽略哪些文件。


清单 3. 将 CPD 用于 Ant
<taskdef name="cpd"   classname="net.sourceforge.pmd.cpd.CPDTask" classpathref="pmd.classpath" />  <cpd minimumTokenCount="100"         format="xml"        language="java"        ignoreIdentifiers="true"        ignoreLiterals="true"        outputFile="${basedir}/cpd.xml">        <fileset dir="${src.dir}">          <include name="**/*.java" />          <include name="**/*.jsp" />          <include name="**/*.xml" />          <exclude name="**/*Test*.java" />        </fileset>  </cpd>

如图 2 所示,cpd.xml 是用清单 3 中的 outputFile 属性产生的输出。以后我还将向 CPD 添加 XSL,以生成 HTML 报告。


图 2. 显示代码重复违规的 CPD XML 输出
CPD XML 报告

除了最明显的复制-粘贴违规之外,在所有地方手工查找重复代码也非常具有挑战性。但是,使用诸如 CPD 之类的工具,就可以迅速找出重复代码,然后对此进行改进。

路径是什么?

源代码路径 也叫做流程控制语句,它指示在方法中更改流程的代码。这类示例包括条件语句(如 if 语句),或者循环构造(如 whilefor)。

用 JavaNCSS 检查复杂性

许多研究已经证实,随着方法中路径数量的增加,理解和维护同一方法的难度也随之增加。结果,代码越难以理解和维护,就越容易出现缺陷。

JavaNCSS 是一个免费工具,提供了不同的代码测量,例如非注释性源代码语句(或代码行)的数量、所有分析过的方法的圈复杂度量值(cyclomatic complexity number)。清单 4 演示了 JavaNCSS 的使用,可以看到,它不是很难使用。只要将 JavaNCSS 指向一个包含源代码的目录,让它自己处理就行了!


清单 4. 将 JavaNCSS 用于 Ant
<path id="javancss.classpath">  <fileset dir="${lib.dir}" /></path><taskdef name="javancss" classpathref="javancss.classpath"  classname="javancss.JavancssAntTask"></taskdef><javancss srcdir="${src.dir}"      generateReport="true"      outputfile="${javancss.report.dir}/javancss_metrics.xml"      format="xml"/>

像多数软件检查器一样,这里生成了一个 XML 文件,可以通过 XSLT 很容易地将它转换成一个 HTML 报告,就像图 3 中所做的那样:


图 3. JavaNCSS HTML 报告
JavaNCSS HTML 报告

理解应用程序代码复杂性可没有那么容易。实际上,在某些情况下,复杂性的值可能会令人误解。例如,有些工具为 switch 语句提供较高的值。但是我发现,使用 JavaNCSS 这样的工具,有助于降低高复杂性的领域,最终提高代码的可理解性和可维护性。


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

32/3<123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网