码,可以直接对 Java 文件和 Class 文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜 在 缺陷。现在的静态分析工具很多,有 FindBugs、PMD、IBMRationalTool,等等。在这里,选择 FindBugs 作为静态代码分析工 具。FindBugs 可以和日常 开发工具 Eclipse 进行集成,在开发过程中,就可以方便的开始静态代码的检查。通过检查 Class 文件或者 JAR 文 件,将字节码和一组缺陷模式进行对比, 来发现可能存在的代码问题。在 Eclipse 的开发环境中,用插件安装的方式安装了 Findbugs 后,在 Eclipse 的配置选项中就会多出来 FindBugs 的配置选项。 可以对自己的项目进行配置,选择需要的 Detector 检查代码。
图 5.FindBugs 的配置选项
设置好自己的规则后,在需要检查的代码文件夹上点击右键,就可以启动 FindBugs 检查。代码可以是一个项目,也可以只是几个文件。
图 6.运行 FindBugs
检查完毕后,会出现 FindBugs 视图,把所有检查的结果根据错误分组展示。点击结果里面的每一个错误,会自动打开对应的代码。当根据规则改 正了所 有的错误,或者说潜在错误,这些代码也就通过了静态代码检查。FindBugs 的检查结果可以是 XML 文件,也可以是文本文件,便于项目的集成管理 和检查 保存。
图 7.FindBugs 检查结果
步骤三:单元测试
单元测试用例设计和评审
单元测试是软件开发过程中重要的质量保证环节, 在此环节中, 设计和评审对于保证整个单元测试
过程的完整性和有效性来说十分重要。 设计阶段需要具 体 考虑要对哪些代码单元进行测试,被测单元之间的关系,测试策略,以及单元测试用例设计等,并最终输出《单元测试用例
设计》
文档,用来指导具体的单元 测试 执行。在用例设计中,通过对代码单元输入和期待输出的定义来保证该单元的功能正确性,边界值的测试和异 常测试非常重要。同时也配合测试用例和功 能块的匹配 方法来衡量用例设计的完整性。
在用例设计完成之后, 下一步的工作就是进行测试用例的评审。 个人的理解和经验始终是有限的, 用例评审可以借集体之力 , 对用例设计进入查漏补缺, 进 一步保证测试用例的有效性。由于单元测试属于白盒测试范畴,它主要通过对代码的逻辑结构进行分析来设计测试用例,因此,评审员的选择最好以理解代码 逻辑 结构为前提,如果评审员来自相关模块,还能够有效的发现模块相关性和依赖性所带来的
问题。
模拟对象技术
在实际项目中, 开发人员自己的代码往往需要和其他的代码模块或
系统进行交互, 但在测试的过程中, 这些需要被调用的真实对象常常很难被实例化, 者 或 这些对象在某些情况下无法被用来测试,例如,真实对象的行为无法预测,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时候,就需要使用模 拟对 象技术(Mock),利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆盖率,从而提高代码质量。模拟对象技术利用了 在面向 接口的编程中,由于代码直接对接口进行调用,所以代码并不知道引用的是真实对象还是模拟对象,这样就 可以顺利的完成对代码的测试,模拟技术有 很多种,如 jMock,EasyMock,Mockito,PowerMock 等等。其中 Mockito 消除了对期望行为的需求,避免了这些代码的大量初始化。
图 8.Mockito 示例
在模拟对象过程中,先模拟一个需要调用的 List 对象 LinkedList,再设定这个对象的行为,当调用 get(0)的时候,返 回”first”。这样,测试代码就可以 利用这个对象来测试我们的功能代码,需要调用和返回值的时候,可以顺利的得到模拟对象的返回值。也需要对模拟 对象 进行错误情况的模拟,保证代码对错 误的处理的正确性。
测试覆盖率分析
为了衡量单元测试的质量和覆盖的范围, 需要对单元测试