在 《探索式软件测试》 一书第三章中介绍了局部探索测试相关内容。
在局部探索性测试中,我们要关注的主要有三点: 输入、状态、环境。
一、输入
什么是输入引发程序发出改变动作/做出反映的才称之为输入(不反应也算一种反应)。
要对软件进行测试,选择合适的输入是最关键的一点。那么, 如何选择最合适的输入,就是在这一环节我们要思考和探索的内容。
1、输入如何影响输出
输入影响输出主要有三点:
- 输入数据本身是否合法,可能会影响输出
- 输入的组合,有些输入之间是相互关联的
- 输入的顺序,输入的顺序可能影响输出
2、如何考虑输入
- 合法输入&非法输入
- 考虑输入的第一点是,考虑输入的合法性。这就涉及到当前的测试目的,是要让软件失效,还是要证明其有效者需要设计更多的非法输入,后者要找出更多的合法输入。
- 考虑合法输入与非法输入的判断。一般在程序中,常见的对于输入的判断有三种:
- input filter:利用过滤器直接过滤掉不合理的输入,这个过程不会产生错误提示。测试中需要关注filter是否合理、有无方法可以绕过filter。
- input check:输入检查,一般使条件判断,会对错误/非法输入进行 警。测试中需要关注error msg,通过error msg反推存在哪些输入可能会造成此类error,并进行验证。
- exception:exception一般是针对整个代码的,而非单纯对输入进行判断,因此它的error msg一般是比较笼统的。但是对于产生exception的输入,需要反复多次验证,反复的引发异常可能让程序彻底失效。
- 常规输入&非常规输入
非常规输入一般是指误触、误按等在特定场合的无意识操作。在测试过程中需要有意的创造这种“无意识”行为。 - 默认输入&用户输入
如果一个字段设置了默认值,那么它与不设置默认值的字段处理方式就可能会存在差异。
对于有默认值的输入,测试时一般的关注点在于:- 默认值的测试;
- 将默认值删除后的空白输入;
- 将默认值删除后的其他合法输入;
- 将默认值删除后的非法输入;
- 与默认值相近的输入
- 首次输入&非首次输入
一般来说,程序在首次接受输入之后都会进行初始化等操作,首次输入的处理过程与非首次输入的处理过程会存在差异,需要特别关注两者之间的差异。
二、状态
两次输入相同的测试并不能视为完全相同的测试,因为软件的状态可能不同。
- 软件状态空间:内部变量所有可能的取值;
- 软件状态:状态空间中的一个点。
软件状态的复杂性在于它自身可以牢记已经处理过的输入,还会牢记以前发生过的状态叠加效果。 换句话说,状态存在有 过去输入造成的累积效应,但这种效应会产生什么后果,难以提前预知。
状态可以分为两类:
- temporary state,临时状态。当程序终止时该状态就会被忘却。
- persistent state,永久状态。这种状态会存储在db或文件中,下一次运行时可以对该状态进行读取。
在测试前,需要考虑状态是永久的还是临时的,针对不同的状态设计不同的输入。有关状态的测试主要有以下两种:
- 使用状态信息来帮助寻找相关的输入。确定不同状态对输出的影响,从而设计不同的输入,以达到该状态。
- 使用状态信息来辨识重要的输入序列。如果状态在某种方式上被累加起来(比如连续执行相同输入/路径),就必须考虑是否会造成溢出(stateflow)。
三、环境
环境本身也是一种输入源。
牢记这一句,在实际的测试过程中,需要留意环境的影响,包括软件所处的环境、外界输入环境等。当一个问题无法复现时,考虑是否与外界环境有关。
读书记:《探索式软件测试》(三)——全局探索式测试法
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!