软件工程笔记6-软件测试方法
Published:
世界和我自己,每一样
在我体内和体外的,都变成了我。
云彩飘过我的心,树林做着我的梦,
房屋和梨树告诉我
被遗忘的寻常童年的故事。
溪流回响,峽谷向我投下阳影,月亮,黯淡的星星,我亲密的朋友。
软件测试方法
软件测试:在软件投入生产性运行前,对软件需求分析,设计规格说明,编码的最终复审,是软件质量控制的关键步骤
软件测试的目的:发现错误
软件测试的原则:
- 尽早和不断地测试
- 测试用例应该有测试输入数据和与之对应的预期输出结果两部分组成
- 程序员应避免检查自己的程序
- 在设计测试用例时,应当包括合理的输入条件和不合理的数据条件
- 充分注意测试用的群集现象(80%的错误由20%模块造成)
- 严格执行测试计划,排除测试的随意性
- 对每个测试结果做全面检查
- 妥善保存测试计划,测试用例,出错统计和最终的分析报告,为维护提供方便
确认:目的沿着在一个给定外部环境中软件的逻辑正确性,包括需求规划说明的确认和程序的确认(包括动态确认和静态确认)
验证:视图证明在软件生存期各阶段的逻辑协调性,完备性和正确性
测试分为机器测试和人工测试,人工测试分为:代码审查,走查。桌前检查
- 测试信息流

- 测试与软件开发各阶段的关系:不同于软件开发的过程,测试是自底向下,逐层集成的过程

- 黑盒测试和白盒测试
- 黑盒测试:测试人员完全不考虑程序内部的逻辑结构,只根据程序的需求规格说明检查程序的功能是否符合它的功能说明(黑盒测试主要用以发现功能性的错误)
- 白盒测试:对软件的过程细节做细致检查,又称为“结构性测试”或“逻辑驱动测试”
白盒测试
语句覆盖
语句覆盖要求把每一个执行语句(矩形框)执行一次
L1(a→c→e),满足语句覆盖的测试用例为(2,0,4)

| 语句覆盖是最弱的逻辑覆盖标准,如果错吧 A > 1 && B == 0 错写成A > 1 | B == 0测试用例依然能通过 |
判定覆盖
判定覆盖就是得经历每一个逻辑判断的真和假

这里就是需要经历TF+FT或者TT+FF,只需要真和假都有出现就行,不需要排列组合考虑所有情况
所以路径为ace和abd,测试用例设计为(2,0,4)和(1,1,1)
但是还是不一定查出来判断条件的错误,如果不小心把x>1错写成x<1,上面两组依旧能通过
条件覆盖
判断覆盖是把每一个分支取一次
而条件覆盖是将每一个条件的可能取值执行一次



这组用例不仅条件覆盖而且还是判定覆盖

这组用例只满足条件覆盖但是没满足判定覆盖
判定—条件覆盖
判定—条件覆盖就是设计足够的测试用例,使得判定中每个条件的所有可能取值都至少执行一次,每个判断的所有可能判断结果至少执行一次


判定-条件覆盖也有缺陷。从表面上看,它测试了所有条件的取值,但事实并非如此。因为往往某些条件掩盖了另一些条件。 对于表达式(A>1) and (B=0)来说,若(A>1)的测试结果为假,往往就不再测试(B=0)的取值了。
条件组合覆盖
条件组合覆盖要求的是每个判断的所有可能条件取值组合至少执行一次


条件组合覆盖是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。
它不但可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏掉。
因此,满足条件组合覆盖的测试还不完全。
路径覆盖
路径测试是设计足够的测试用例,覆盖程序中所有可能的 路径。

循环结构分析
循环分4种不同的类型:简单循环、连锁循环、嵌套循环、非结构循环
简单循环
- 零次循环:从循环入口到出口
- 一次循环:检查循环初始值
- 二次循环:检查多次循环
- m次循环:检查多次循环
- 最大次数循环、比最大次数多一次、比最大次数少一次的循环
嵌套循环
- 对最内层循环做简单循环的所有测试,所有其他层的循环变量置为最小值
- 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其他嵌套内层循环的循环变量取“典型”值
- 反复进行,知道所有各层循环测试完毕
- 对全部各层循环同时取最小循环数,或者同时取最大循环数
连锁循环
如果各个循环互相独立,则可以用与简单循环相同的方法进行测试,如果几个循环不是互相独立的,则需要使用测试嵌套循环的方法来处理
非结构循环
使用结构化程序方法重新设计测试用例
黑盒的测试用例设计
等价类划分
等价类划分是一种典型的黑盒测试方法,也是一种非常实用的重要测试方法,用来解决如何选择适当的子集,使其尽可能多发现问题
等价类划分需要考虑有效等价类和无效等价类
