软件构造——软件测试
前言
测试是根据用户的实际需求,寻找程序运行过程中存在的不足,好的测试方案关注于系统某一侧面的质量特性,也是提高软件质量的重要手段。但是,我们也需要认识到,即使是“最好”的测试,也无法达到百分百的无错误。
一、软件测试基础
1. 测试原则
- 寻找错误
- 不带冗余
- 最优方案
- 既不复杂也不简单
2. 测试层次
- 单元测试
- 集成测试
- 系统测试
3. 测试与调试的区别
测试:发现是否存在错误
调试:识别错误根源,进而消除错误
二、测试优先原则
编写代码之前,完成你的测试用例
编写代码的步骤
- 根据用户需求完成规约
- 构思测试策略,并书写符合规约的测试用例
- 根据规约,完成设计并确认AF/RI等
- 编写代码,调试代码,执行代码,测试代码
- 修改代码,测试代码的循环往复,直到通过
三、软件测试方法
1. 白盒测试
白盒测试是对测序内部代码结构的测试,要充分考虑内部实现的具体细节。
白盒测试是根据程序的执行路径设计的测试用例。
如果程序的具体实现,根据不同的输入选择了不同的算法,那么白盒测试就需要根据这些不同的算法进行区分。
如果程序的实现存储了之前的输入,那么白盒测试也应该测试这些重复的输入。
白盒测试的要求
- 保证所有的独立路径至少被测试一次
- 测试所有路径的正反两面
- 测试所有循环的边界
- 测试内部数据结构来确保有效性
2. 黑盒测试
黑盒测试是对程序外部表现出来的行为的测试,用于检查代码的功能,并不关心内部实现的具体细节。
黑盒测试的错误类型
- 不正确或者缺失的函数
- 接口错误
- 数据结构和外部数据库访问错误
- 实现过程中的行为错误
- 初始化和结束错误
黑盒测试的测试用例要求
-
基于软件的外部需求,黑盒测试注重检查程序是否符合规约、用户需求、设计参数等
-
黑盒测试应使用尽可能少的测试用例,尽快运行,并尽可能地发现程序存在的错误
四、使用JUnit进行单元测试
1. JUnit
JUnit一种广泛使用的Java单元测试框架,用于编写和运行可重复的自动化测试。
2. 测试断言
JUnit注解 |
---|
assertArrayEquals |
assertArrayEquals(“failure - byte arrays not same”, expected, actual); |
assertEquals(“failure - strings are not equal”,“text”, “text”); |
assertFalse(“failure - shoul 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, bNumber); |
assertTrue(“failure - should be true”, true); |
assertThat(“albumen”, both(containsString(“a”)).and(containsString(“b”))); |
3. 一个测试的例子
下面展示一个 代码测试的例子
。
@Test
public void testAddVertex(){
FriendshipGraph graph = new FriendshipGraph();
Person James = new Person("James");
graph.addVertex(James);
assertEquals(true, graph.getPersonSpace().vertices().contains(James));
}
5. 测试结果
下面展示一个 代码测试的结果
。
总结
本文主要介绍了有关代码测试的一些知识,我们应该充分认识到代码测试在软件构造过程中的主要作用,并在编程过程中遵守测试优先的原则。但同时我们也应该充分认识到,即使是“最好”的测试,也无法达到百分百的无错误。