1.掌握基本的单元测试技术,能够根据给定的程序写出相应的测试案例
对软件基本组成单元进行的测试,其测试对象是软件设计的最小单位(模块或者类)。
行覆盖(又叫语句覆盖)就是通过设计一定量的测试用例,保证被测试的方法每一行代码都会被执行一遍。
判定覆盖,就是代码里每一个判定都要走一次true,一次false。
条件覆盖和判定覆盖类似,不过判定覆盖着眼于整个判定语句,而条件覆盖则着眼于某个判断条件。 条件覆盖需要保证每个判断条件的true、false都要覆盖到,而不是整个判定语句。 例如,判定A (a > 1 || b == 0) ,只需要整个判定表达式分别取一次真假即可满足判定覆盖,而要满足条件覆盖,则需要判断条件 (a>1) 和 (b==0) 分别都取一次true false才算满足。
覆盖所有可能执行的路径。 单元测试应该覆盖所有代码路径。 单元测试应覆盖所测单元的所有代码路径,包括错误处理路径。 进一步说,“覆盖率”有下面几个层次: 1、 函数的覆盖,这个模块的每一个函数都覆盖了么? 2、语句的覆盖,这个模块的每一个语句都覆盖了么? 3、分支的覆盖,这个模块的每一个条件分支都覆盖了么? 条件的覆盖,这个模块的每一个布尔表达式的TURE | FALSE 的所有组合都覆盖了么?
100% 的代码覆盖率并不等同于 100% 的正确性! ? 代码覆盖率对于“应该写但是没有写的代码”无能为力。 ? 例如代码申请了内存或其他资源,但并没有释放。又如,代码中并没有处理错误情况。或者没有处理和文件、网络相关的一些异常情况,例如文件不存在、权限有问题,等等。 ? 代码中有效能问题,虽然代码执行了,并且也正确地返回了,但是代码效率非常低。 ? 有些情况下,可以针对代码效率写一个单元测试。 ? 多线程环境中的同步问题 ? 这个问题和代码执行的时序、共享资源的锁定有关
好的单元测试 检查单元测试是否满足下面的条件 ? 单元测试应该在最基本的功能/参数上验证程序的正确性。 ? 单元测试应该产生可重复、一致的结果。 ? 单元测试应该覆盖所有代码路径。 ? …
2.了解什么是回归测试
Regress 的英语定义是:return to a worse or less developed state,是倒退、退化、退步、回归的意思。 如果一个模块或功能以前是正常工作的,但是在一个新的构建中出了问题,那么这 个模块就出现了一个“退步”(Regression),从正常工作的稳定状态退化(回归)到不正常工作的状态。
针对一个Bug Fix,我们也要做Regression Test。目的是:
- 验证新的代码的确改正了缺陷
- 同时要验证新的代码有没有破坏模块的现有功能,有没有Regression
|