章五 带上眼罩测试软件(2)
三、状态测试
软件测试的另一个方面是通过不同的状态验证程序的逻辑流程。
软件状态是指软件当前所处的条件或者模式。
注意:软件测试员必须测试程序的状态及其转换。
1、测试软件的逻辑流程
前面讲过,要使测试可以控制,就必须通过建立只包含最关键数字的等价划分来减少候选数据。测试软件的状态和逻辑流程有同样的问题。
对于软件测试,解决方法是运用等价划分技术选择状态和分支。
(1)建立状态转换图
这种图可能作为产品说明的一部分被提供出来。绘制状态转换图有几种技术。可使用方框和箭头,也可使用圆圈和箭头。
注意:状态转换图可能会变得非常大,如果预计状态图会如此复杂,那么就找一些商业软件来绘制和管理。
状态转换图应该表示出以下项目:
(1.1)软件可能进入的每一种独立状态;
如果不能断定是否为独立状态,它就可能是;如以后发现不是,随时可将其剔除。
(1.2)从一种状态转入另一种状态所需的输入和条件;
可能是按键、菜单选择、传感器信号或者电话振铃等。
(1.3)进入或者退出某种状态时的设置条件及输出结果。
包括显示的菜单和按钮、设置的标志位、产生的打印输出、执行的运算等。
2、减少要测试的状态及转换的数量
为大型软件产品建立状态图是一项艰巨的任务,但愿只测试整个软件的一部分,使建立状态图变成一个可以接受的任务。
遍历所有的分支是不可能的,需要将大量的可能性减少到可以操作的测试用例集合。有5种实现方法:
(1)每种状态至少访问一次;
(2)测试看起来是最常见和最普遍的状态转换;
(3)测试状态之间最不常用的分支;
(4)测试所有错误状态及其返回值;
(5)测试随机状态转换。
3、进行具体测试
确定要测试的状态及其转换之后,就可以定义测试用例了。
测试状态及其转换包括检查所有的状态变量(state variables)——与进入和退出状态相关的静态条件、信息、值、功能等。
把对状态及其转换的假定与项目小组的产品说明书作者和程序员讨论是个好主意,他们可以提供软件测试员可能想不到的、表面现象背后的状态内幕。
文档涂改标志:当文档载入编辑器,一个称为文档涂改标记(dirty document flag)的状态变量即被清除,软件处于“洁净”状态。只要文档任何修改,软件就保持这种状态。
状态变量也许看不见,但是很重要。
4、失败状态测试
测试包括审查软件、描绘状态、尝试各种合法可能性、确认状态及其转换正常。
和数据测试一样,相反的做法是找到使测试软件失败的案例。
(1)竞争条件和时序错乱
多任务(multitasking)是指操作系统设计用来同时执行多个独立的进程。
设计充分利用多任务的软件才是艰巨的任务。必须随时处理被中断的情况,能够与其它软件在系统中同时运行,并且共享内存、磁盘、通信以及其它硬件资源。
可能产生竞争条件问题(race condition)。
竞争条件测试难以设计,最好是首先仔细查看状态转换图中的每一个状态,以找出哪些外部影响会中断该状态。
(2)重复、压迫和重负
重复测试(repetition testing)是不断执行同样的操作。最简单的是不停地启动、关闭程序。
进行反复测试的主要原因是检查是否存在内存泄漏(memory leaks)。如果计算机内存被分配进行某些操作,但是操作完成时没有完全释放,就会产生一个常见的软件问题。结果是最后程序耗尽了它赖以工作的内存空间。
压迫测试(stress testing)是使软件在不够理想的条件下运行——内存小,磁盘空间少、CPU速度慢、调制解调器速率低等。观察软件对外部资源的要求和依赖的程度。压迫测试是将支持降到最低限度,目的在于尽可能地限制软件的必要条件。
重负测试(load testing)与压迫测试相反。压迫测试是尽量限制条件,而重负测试是尽量提供条件任其发挥。让软件处理尽可能大的数据文件。最大限度地发掘软件的能力,让它不堪重负。
注意:重复、压迫和重负测试应联合使用,同时进行,这时找出以其它方式难以发现的严重缺陷的一个可靠的方法。
软件测试员的任务是确保软件在这样恶劣的条件下仍能正常工作,否则就报告软件缺陷。
5、其它黑盒测试技术
(1)像笨拙的用户那样做
(2)在已经找到的软件缺陷的地方再找找
(3)像黑客一样考虑问题
(4)凭借经验、自觉和预感
阅读(1074) | 评论(0) | 转发(0) |