2.4 白盒测试工具

单元测试工具

JUnit

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中为最成功的一个。JUnit有它自己的JUnit扩展生态圈。

JsTestDriver

JsTestDriver是一个JavaScript单元测试工具,易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD风格的开发。当在项目中配置好js-test-driver以后,如同junit测试java文件一般,js-test-driver可以直接通过直接运行js文件,来对js文件单元测试。

QTRunner

QTRunner是一个用来运行多个单元测试并在一个GUI图形界面的应用程序中显示测试结果的软件。支持QTestLib和GoogleTest单元测试的执行,QTRunner是基于Qt库开发的跨平台测试工具。

ECUT (Eclipse C++ Unit Testing)

ECUT项目将CppUnit和Eclipse CDT开发工具集成起来,提供更好的无缝的单元测试支持,类似JUnit和JDT一样。该项目也允许跟其他的C++单元测试框架进行集成。


代码覆盖率检查工具

  • EclEmma
  • Purecoverage
  • Telelogic公司的Logiscope
  • Macabe公司的Macabe
  • JaCoCo (Java Code Coverage) - Java代码覆盖率工具

内存资源泄漏检查工具

SAP MemoryAnalyzer

SAP MemoryAnalyzer是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它。它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。

IBM Rational PurifyPlus

IBM Rational PurifyPlus帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。PurifyPlus将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。


代码静态度量分析质量检查工具

  • CheckStyle (Java)
  • FindBugs (Java)
  • PMD

开发者与测试者的配合练习

需求

开发一个可以进行四则运算的程序,要求具备加减乘除,乘方,开根号,并且有一个正数相加的程序,输入两个数,如果其中有一个数为0则返回0,否则返回两数之和。

测试代码示例

public class calTest {
    
    @Before
    public void setUp() throws Exception {
    }
    
    @Test //标注
    public void testPlus() {
        int expected = 8;
        Assert.assertEquals(expected, new cal(3,5).plus());
    }
    
    @Test
    public void testSubtrace() {
        int expected = -2;
        Assert.assertEquals(expected, new cal(3,5).subtrace());
    }
    
    @Test
    public void testMultiply() {
        int expected = -2;
        Assert.assertEquals(expected, new cal(3,5).multiply());
    }
    
    @Test
    public void testZeroplus_First() {
        int expected = 0;
        Assert.assertEquals(expected, new cal(0,1).zeroplus());
    }
    
    @Test
    public void testZeroplus_Second() {
        int expected = 0;
        Assert.assertEquals(expected, new cal(1,0).zeroplus());
    }
    
    @Test
    public void testZeroplus_Nomal() {
        int expected = 5;
        Assert.assertEquals(expected, new cal(2,3).zeroplus());
    }
}

开发代码示例

public class cal {
    private int a;
    private int b;
    
    public cal(int x, int y) {
        a = x;
        b = y;
    }
    
    //需求:输入两个数字,如果有一个数字为0,那么返回0,否则返回两个数字的和,
    //设计:zeroplus(int,int)
    public int plus() {
        return a - b;  // 注意:这里有错误!应该是 a+b
    }
    
    public int subtrace() {
        return a - b;
    }
    
    public int multiply() {
        return a + b;  // 注意:这里有错误!应该是 a*b
    }
    
    public int zeroplus() {
        if (a == 0 || b == 0) {
            return 0;
        } else {
            return a + b;
        }
    }
}

练习题

一、 单选题(共1题)

  1. 下列哪一组通常被归为白盒测试中的静态分析工具?
    • A. JUnit, Selenium, Appium
    • B. SonarQube, Checkstyle, PMD
    • C. JaCoCo, Cobertura, JProfiler
    • D. Postman, LoadRunner, Fiddler

二、 判断题(共1题)

  1. 白盒测试工具JaCoCo(Java代码覆盖率工具)在运行时需要修改被测程序的源代码才进行插桩和统计。( )
    • 对 / 错