1.Software Testing
软件测试种类:
Unit testing 单元测试
Integration testing 集成测试
System testing 系统测试
Regression testing 回归测试:回归测试:一旦程序被修改,重 新执行之前的所有测试
区别几组概念
1.静态测试:写时测试,眼睛看
动态测试:运行时测试
2.测试Testing:发现是否存在错误
调试Debugging:识别错误根源,消除错误
3.白盒测试:对程序内部代码结构的测试
黑盒测试:对程序外部表现出来的行为的测试
测试困难的原因:
1.暴力穷举所做的事情是有限的
2.偶然测试没有意义
3.仅测试部分数据对软件测试的意义(基于样本的统计数据对软件测试意义不大)
4.软件行为离散,bug的出现无规律
2.Test Case
测试用例:输入+执行条件+期望结果
3.Test-First Programming
测试优先的编程
先写spec
再写符合spec的测试用例
写代码、执行测试、有问题再改、再执行测试用例,直到通过它。
注:规约由方法签名和注释(对输入输出的描述)构成
测试优先的好处
有助于更好地理解规约,更早发现设计问题,避免浪费时间做错误的事,规约本身也可能是错误的。
4.Unit Testing
针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试
考虑的问题
接口,测试输入输出
数据的一致性
所有语句均被执行
边界条件
错误处理
5.Automated Unit Testing with JUnit
每个测试方法前标注@Test
assert的相关用法:参见https://blog.youkuaiyun.com/u010473656/article/details/89215644
这里补充collectiongs的用法:https://blog.youkuaiyun.com/Chen_xiaobao/article/details/96363420
assert的例子
注:引号内容是错误时的输出,可以不写
assertArrayEquals("failure - byte arrays not same", expected, actual);
assertEquals("failure - strings are not equal", "text", "text");
assertFalse("failure - should be false", false);
assertNotNull("should not be null", new Object());
assertNotSame("should not be same Object", new Object(), new Object());
assertNull("should be null", null);
assertSame("should be same", aNumber, aNumber);
assertTrue("failure - should be true", true);
assertThat("albumen", both(containsString("a")).and(containsString("b")));
assertThat(Arrays.asList("one", "two", "three"), hasItems("one", "three"));
assertThat("good", allOf(equalTo("good"), startsWith("good")));
6.Black-box Testing
用于检查代码的功能,不关心内部实现细节。
检查程序是否符合规约
6.1 Choosing Test Cases by Partitioning
等价类(对称、传递、自反)划分的测试:
基于等价类划分的测试:将被测函数的输入域划分为等价类, 从等价类中导出测试用例。
6.2 Include Boundaries in the Partition(测试边界)
笛卡尔积:全覆盖
7 White-box Testing
黑盒测试完 全从函数spec导出测试用例,不考虑函数内部实现
白盒测试要考虑内部实现细节
8 Coverage of Testing
测试效果:路径覆盖>分支覆盖>语句覆盖
测试难度:路径覆盖>分支覆盖>语句覆盖