单元测试的概念,实质是强调一个基本的质量思想和软件开发的理念——如果要保证一个系统的质量,首先要保证构成这个系统的所有组成单元的质量。
1 程序代码的审查
(1).主要方法有:有软件开发和编程经验的技术人员集体进行;依靠一些软件工具
(2).其优势:程序代码的审查(code review)是一种静态测试,其效率是非常高的,据有关数据统计,代码中缺陷60%以上可以通过代码审查发现出来。
1.1 代码省查的方法和范围
通常合格的代码应具备正确性、清晰性、
规范性、一致性和高效性等。
(1).正确性是指代码逻辑必须正确,能够实现预期的功能;
(2).清晰性是指代码必须简明、易懂、注释准确没有歧义;
(3).规范性是指代码必须符合企业或部门所定义的共同规范,包括命名规则、代码风格等;
(4).一致性是指代码必须在命名上、风格上保持一致;
(5).高效性是指代码不但要满足以上性质,而且需要尽可能地降低代码的执行时间。
代码审查的方法有:互查(peer-to-peer)、走查(walk-through)、会议评审(inspection),代码展示(code-show)
(1).互查是处在相同模块或相近模块的编程人员互相检查对方的代码;
(2).走查,从头到尾将写好的程序检查一遍;
(3).会议评审更为正式,主要是审查关键性的代码。
(4).代码展示,主要是随机抽取开发的代码,由其向其他人讲解自己的源程序,一方面可以督促开发重视自己的代码质量,另一方面及时发现代码问题,包括不同代码模块、函数之间互相依赖、冲突的关联问题。最后有更多的人明白他人写的代码,今后代码的维护也变得容易。
单元测试
1.1 广义上的单元测试包括静态测试和动态测试,静态测试就是上面说的代码审查系列,而动态测试是使用单元测试用例、测试工具来执行程序。
1.2 单元测试的对象是构成软件产品或系统的最小的独立单元,如封装的类或对象、独立的函数、进程、子过程、组件或模块等;单元测试抢到被测试对象的独立性,所有有时候某个组件比较大时,需要拆分到一个可接受的程度。
1.3 单元测试的目的是检验每个软件单元是否正确的试下其功能,满足性能和接口要求,还要验证程序和详细设计说明的一致性。
1.4 单元测试应该贯穿整个编程阶段,秉承测试驱动开发思想,在编程的过程(初始阶段和修改缺陷阶段)中随时根据需要进行单元测试,
举例:工匠A在砌墙时,先拉一根水平线,砌每一块砖时,都与这根水平线进行比较,使得每一块砖都保持水平;工匠B,等一排砖都砌完后,再拉上一根水平线,看看哪些砖有哦问题,对有问题的已砌好的砖进行调整。
1.5 单元测试方法
(1).白盒方法的单元测试
应用技术有逻辑驱动法和基本路径测试法。
语句覆盖:测试用例覆盖程序每一条可执行语句
判定覆盖:测试用例覆盖程序每一个分支判断的可能结果
条件覆盖:测试用例覆盖程序每一个分支判断中的每一个条件的可能结果
判定/条件覆盖:测试用例同时满足判定覆盖和条件覆盖
条件组合覆盖:测试用例覆盖程序每一个分支判断中的每一个条件的每一种可能组合结果
(2).黑盒方法的单元测试
单元测试,不仅要验证软件的功能表现,而且要验证代码结构上的可靠性、健全性和性能。在功能性测试方法,通常会利用3中数据来进行测试,即正常数据、边缘数据和错误数据。
(3).单元测试模块
驱动模块(被测系统的上级模块):调用被测模块的程序用于模拟被测模块的上级模块,驱动模块接受测试数据,把相关的数据传送给被测的模块,启动/完成对该模块的测试。比如对函数的调用,类的引用。
桩模块(被测系统的下级模块):替代下层模块的程序用于模拟被测模块工作过程中所调用的模块,桩模块使上层模块不需要调用真实模块就能获得所需要的参数、返回值等。比如模拟器
(4). 单元测试用例设计
对白盒测试用例设计,需要达到下列测试要求:
|对程序模块所有独立的执行路径至少要测试一次;
|对所有的逻辑判断,其结果为真、假的两种情况至少要测试一次;
|对程序进行辩解检查;
|检查内部数据结构的有效性;
举例,设计图示的逻辑测试用例