单元测试:
指的是测试代码的特定节的作用,通常是方法级别的。它的优点在于针对软件最小单元模型开展测试,隔离各个模块,容易定位错误和调试。为了方便执行单元测试,java提供了开发包Junit
使用Junit很简单,如下代码所示:
//常用的三个测试方法 import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; //导入测试注解 import org.junit.Test; //命名规则;被测试的类的测试名后加Test //对于方法的命名为test加上方法名 public class classNameTest{ /** * test strategy * 通常这里写测试策略 */ @Test public void testFunction(){ //... } }
集成测试:多个程序员或团队开发的两个或更多的类,包,构件,子系统等被组合在一起的测试
系统测试:测试整个系统是否符合规约的需要,通常执行测试的软件在最终的配置层面。
回归测试:一旦程序被修改,重新执行之前的所有测试
在IDEA中可以实现自动回归测试(注:这指的不是自动生成测试样例而是说可以对测试样例自动执行)
静态测试:
静态测试通常不执行代码。它主要通过review,walkthrough和inspection的手段。
动态测试:
动态测试通常需要运行代码,并且要输入给定的一系列测试案例。
testing和debugging的区别在于测试是为了发现是否存在错误,debug是为了识别错误根源消除错误。
白盒测试:
在看得见源代码的情况,对程序内部代码的结构和工作进行测试
黑盒测试:
对程序外部表现出来的行为的测试,看不见源代码。
测试样例:输入+执行条件+期望结果
通过等价类划分的方法来选择测试样例:
基于等价类划分的测试:将被测函数的输入域划分为等价类, 从等价类中导出测试用例。
例如对于输入的n是正奇数的要求:
整数:>0,<0,=0
是否是奇数:奇数,偶数
是否是整数:整数,非整数
因此只需要选择$3\times2\times2$种测试样例即可。前面这是笛卡尔积策略,测试样例多,还可以选择覆盖每一个维度即可,不过这种策略测试代价虽小,但测试覆盖度不高。
在等价类划分方法的基础上补充边界值分析方法:也就是在划分的维度上考虑边界的情况,在比边界大,比边界小,等于边界的时候划分。
流程:
测试覆盖度的级别:路径覆盖>分支覆盖>语句覆盖
对于检测语句覆盖在IDEA中已经被集成好了,是基于JaCoCo是实现的,还可以。