软件工程之软件测试
文章链接:https://codemouse.online/archives/2020-04-24193143
测试策略
- V模型:描述软件开发各阶段与测试策略之间的对应关系。
单元测试
-
单元测试
又称模块测试,着重对软件设计的最小单元(软件构件或模块)进行验证,通常采用白盒测试,多个模块可并行测试。 -
单元测试通常与编码工作结合起来进行。
-
模块本身不是一个独立的程序,在测试模块时,必须为每个被测模块开发一个驱动(driver)程序和若干个桩(stub)模块。
-
单元测试内容
- 模块接口
- 局部数据结构
- 边界条件
- 所有独立路径
- 所有错误处理路径
集成测试
-
经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作。
-
主要问题在于:
- 数据可能在通过接口时丢失;
- 一个模块对另一个模块产生非故意的、有害的影响;
- 子功能被组合起来时,可能不能达到期望的主功能;
- 单个模块可以接受的不精确性(如误差),连接起来后可能会扩大到无法接受的程度;
- 全局数据结构可能会存在问题。
-
集成的方式有两种
非增量式集成
:使用“一步到位”的方法来构造程序。这种方法在发现错误时,很难为错误定位。增量式集成
:根据程序结构图,每次增加一个(或一组)模块。在增量集成测试过程中发现的错误,往往与新加入模块有关。 -
自顶向下集成
优点
:不需要驱动模块;能尽早对程序主要控制和决策机制进行检验,能较早发现整体性的错误。缺点
:测试时低层模块用桩模块替代,不能反映真实情况;重要数据不能及时回送到上层模块。
-
自底向上集成
优点
:不需要桩模块,容易测试;将整个程序结构分解成若干簇,对同一层簇可并行测试提高效率。缺点
:整体性的错误发现得较晚。
策略选择
自顶向下与自底向上相结合三明治测试:
- 高层使用自顶向下
- 低层使用自底向上
- 集成测试时应特别关注关键模块的测试。
- 关键模块应尽早测试。
回归测试
- 在集成测试过程中,每当增加一个(或一组)新模块时,原先已集成的软件就发生了改变。这些改变可能使原本正常的功能产生错误。
- 回归测试就是对已经进行过的测试的子集的重新执行,以确保对程序的改变和修改,没有传播非故意的副作用。
确认测试
-
确认测试标准
确认测试以软件需求规约为依据,以发现软件与需求不一致的错误。主要检查软件是否实现了规约规定的全部功能要求,文档资料是否完整、正确、合理,其他的需求,如可移植性、可维护性、兼容性、错误恢复能力等是否满足。
-
α测试
是由一个用户在开发者的场所进行的,软件在开发者对用户的“指导下”进行测试。经α测试后的软件称为β版软件。 -
β测试
是由软件的最终用户在一个或多个用户场所进行的,开发者通常不在测试现场,用户把问题报告给开发者,开发者对软件进行最后的修改。
系统测试
系统测试是对整个基于计算机的系统进行的一系列测试。
-
恢复测试
:通过各种手段强制软件发生故障,验证系统能否在指定时间间隔内恢复正常 -
安全测试
:验证系统中的保护机制能否实际保护系统不受非法侵入 -
压力测试
:检查系统对非正常情况承受程度 -
性能测试
:测试软件在集成系统中运行性能
测试完成标准
决定什么时候停止程序测试成了最困难的问题,但是测试最后一定要停止的。
几种实用的测试完成标准:
-
不,我们不能绝对地认定软件永远也不会再出错,但是相对于一个理论上合理的和在试验中有效的统计模型来说,如果一个在按照概率的方法定义的环境中,1000个CPU小时内不出错运行的概率大于0.995的话,那么我们就有95%的信心说,我们已经进行了足够的测试。
-
观察测试阶段中单位时间内发现错误的数目曲线:
调试
调试的目的是确定错误的原因和准确位置,并加以纠正。
调试方法
-
蛮力法
:在程序中设置断点,打印有关变量的值等,获取大量现场信息,从中找出错误的原因,效率较低。 -
回溯法
:从错误征兆出发,人工沿着控制流程往回跟踪,直至发现错误的根源。适用小型程序。 -
原因排除法
-
归纳法
:是一种从特殊推断一般的系统化思考方法。基本思想:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误的原因。
-
演绎法
:从一般原理或前提出发,假设所有可能出错的原因,排除不可能正确的假设,最后推导出结论。
-
纠正错误
-
修改一个错误常常会引入新的错误
-
在为纠正某个错误修改程序之前应该回答三个问题:
- 在程序的其他地方是否也存在同类的错误?
- 本次修改可能会引发什么新的错误?
- 为了防止这个错误,我们应该做什么?