首页  ·  知识 ·  编程语言
提高Java代码质量
网友    Java  编辑:dezai   图片来源:网络
即使是最高级的开发人员所开发的最简单的应用程序也可能包含错误。如果要成为好的调试人员,不必象大侦探那样调查蛛丝马迹。您只需了解概念并熟悉正确的工具。

高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况。那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验、最佳实践以及实用技巧,内容涵盖了软件测试理论、Bug 模式与代码诊断、代码静态分析、测试驱动、单元测试、覆盖率、测试工具和 IBM Rational 测试平台等方面,其丰富的文章、教程及系列专栏将为您的代码质量加油提速!


软件质量与软件测试

什么是软件质量?

软件质量(software quality)是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。高质量的软件通常具备了这样一些特性:

  • 满足用户的需求。
  • 合理的进度、成本、功能关系。
  • 具备扩展性和灵活性,能够适应一定程度的需求变化。
  • 足够的强壮、足够的鲁棒,能够有效的处理例外的情况。
  • 保持成本和性能的平衡。
  • 能够可持续的发展。

关于软件质量的具体讲述,您可以请阅读这个由五个部分组成的系列文章:“ 软件质量之路 ”。

什么是软件测试?

软件测试是为了发现程序代码中的错误(Bug)而执行程序的过程,是软件质量保证的重要手段,属于软件工程领域。其目的是:

软件测试技术根据测试原理,又分为:

  • 静态测试:不实际运行程序,而是通过代码检查的手段来发现错误并评估代码质量的软件测试技术;(参阅 如何静态测试 Java 代码?
  • 动态测试:实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术;

代码质量专家 Andrew Glover 在他的专栏“ 追求代码质量 ”中介绍了如何使用最新的测试工具来保证代码质量,他重点阐述一些看上去比较神秘的东西。

什么是测试驱动开发(TDD)?

测试驱动开发(Test-Driven Development)起源于极限编程(XP)开发过程中所提倡的测试先行实践。测试先行实践重视单元测试(Unit Testing),强调程序员除了编写代码之外,还应该编写单元测试代码。在开发的顺序上,它改变了以往先编写代码,再编写测试的过程,而采用先编写测试,再编写代码来满足测试的方法。这种方法在实际中能够起到非常好的效果,使得测试工作不仅仅是单纯的测试,而成为设计的一部分。(具体请参见后面的 如何实践测试驱动开发?


回页首


如何诊断与调试 Java 代码中的 Bug?

BUG 模式与 Java 诊断

正如好的编程技能涉及很多设计模式(您可以在不同的程序上下文中组合和应用这些模式)的知识一样,好的代码诊断和 Bug 调试技能也涉及对错误模式的一定了解。错误模式就是已发生的错误和程序中潜在的错误之间的重复出现的相互关系。很多错误都遵循我们可以识别的几种错误模式的其中一种。一旦您可以识别出这些错误模式,您就可以诊断出错误的原因并且更快地纠正它。错误模式与反模式有关,反模式是一次又一次被证明是失败的公共软件设计的模式。虽然反模式是设计模式,错误模式却是与编程错误相关的错误的程序行为的模式。这与设计根本没有关系,而是与编程和调试过程有关。

了解各种具体的错误模式以及如何诊断和纠正 Java 程序中反复出现的错误类型,请参阅 Eric Allen 的系列专栏:

在此专栏中,Eric Allen 针对各种错误模式进行了一些具体的讨论:

另外,他还讨论了许多其它关于 Java 代码诊断的主题:

Java 调试

即使是最高级的开发人员所开发的最简单的应用程序也可能包含错误。如果要成为好的调试人员,不必象大侦探那样调查蛛丝马迹。您只需了解概念并熟悉正确的工具。

  • 教程:Java 调试”提供了关于基本 Java 调试概念和更高级调试类型的详细信息。

回页首


如何静态测试 Java 代码?

Java 开发人员现在拥有很多通过代码度量、静态分析等方法来度量代码质量的工具。所有的这些新的工具使得确保代码质量比以前简单得多,不过您还需要知道如何使用它们。

代码度量

  • 监视圈复杂度”展示如何使用简单的代码度量工具和基于 Java 的工具来监视代码复杂度。
  • 软件架构的代码质量”解释了如何持续地监视并纠正会影响软件架构的长期生存能力的代码质量方面。
  • 用代码度量进行重构”介绍如何使用相同的代码度量方法和提取方法模式进行有针对性的重构。

静态分析工具

静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。尽管如此,好的静态分析工具仍然是工具箱中的无价之宝:

  • FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题:
  • PMD 是一个开源的静态分析工具,它分析 Java 源代码,并找出潜在的 bug:
    • 用 PMD 铲除 bug”解释如何使用 PMD 内置的规则以及您自己定制的规则集来提高 Java 代码质量。
    • 驯服复杂的冗长代码”展示了如何使用诸如 PMD 和 JavaNCSS 之类的工具,在您需要的时候获得更高的代码复杂度测试精度。
  • Eclipse 静态分析插件,能在构建代码前便发现代码中潜在的问题:
    • 用 Eclipse 插件提高代码质量”将带来一些关于 Eclipse 插件的例子,您可以安装、配置和使用这些静态分析插件,以便在开发生命周期的早期预防问题。
  • IBM Checking Tool for Bugs Errors and Mistakes,可用于分析并查找 C、C++ 和 Java 代码中的一些不容易发现的潜在错误:

回页首


如何实践测试驱动开发?

测试驱动开发

测试驱动开发是敏捷开发的最重要的部分。该方法主要是先根据客户的需求编写测试程序,然后再编码使其通过测试。在敏捷开发实施中,开发人员主要从两个方面去理解测试驱动开发。

  • 在测试的辅助下,快速实现客户需求的功能。通过编写测试用例,对客户需求的功能进行分解,并进行系统设计。我们发现从使用角度对代码的设计通常更符合后期开发的需求。可测试的要求,对代码的内聚性的提高和复用都非常有益。
  • 在测试的保护下,不断重构代码,提高代码的重用性,从而提高软件产品的质量。

更多请参见文章“使用模拟对象(Mock Object)技术进行测试驱动开发”。

单元测试

单元测试测的是独立的一个工作单元。在 Java 应用程序中,“独立的一个工作单元”常常指的是一个方法(但并不总是如此)。作为对比,集成测试和验收测试则检查多个组件如何交互。一个工作单元是一项任务,它不依赖与其他任何任务的完成。

相关技术文章:

测试覆盖率

测试改进了代码质量,但这也只是针对实际测试到的那部分代码而言的。您需要有一个工具告诉您程序的哪些部分没有测试到,这样就可以针对这些部分编写测试代码并找出更多 Bug。


回页首


软件测试自动化

软件的手动测试非常耗时,劳动强度高,并且很单调,而且还会引入一些人为的错误,因此测试自动化势在必行。通常自动化测试是通过一些测试自动化工具开发和执行测试脚本,达到评估软件质量的目的。自动化测试不仅能够大大减轻测试人员的工作量,并减少了测试过程中人为出现的错误。

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读