测试最常见的21个故障模型(二)

更多测试免费资料关注公众号:软件测试资源分享

接昨天晚上的。

昨天晚上也是可以点击以下再次观看:

11、数据结构不符合约束

11.1 缺陷产生原因

在编程过程中对内部数据结构都有所约束,包括大小、维数、类型、形状、屏幕上的位置等。我们测试的重点就是用户能够设置的属性,这些属性使用了一组参数来约束。在建立数据项和随后对数据项进行修改的任何时刻都要对数据属性的约束进行检查。初始化代码中修改后的代码有错误,在修改错误的时候只修改了初始化部分,而忽略了对其他部分的修改,使得其修改不完全,不彻底。

11.2 如何发现这类问题

确认候选数据,并列出其可修改的属性。对每个属性列出有效值的允许范围、约束的条件等。

确定所有可修改属性的功能位置。

对数据进行初始化,改变每个属性以确定是否正确进行了约束。

如果数据约束遭到破坏,可能导致系统崩溃,或者表现为响应时间延迟,错误信息不正确以及使用错误数据产生的无效输出。

11.3 测试方法小结

应用场合:应用程序内部的数据结构存在约束。

测试方法:破坏内部数据结构的约束。

测试知识储备:全面理解需求规格说明书中的内容,确定内部数据结构的所有约束。

12、操作数与操作符不符

12.1 缺陷产生原因

几乎每个运算符都有它无效的操作数,对于具体的操作符,开发人员在使用它们时,必须编写错误检查代码。例如:除以零的问题。

12.2 如何发现这类问题

找到程序中包含的数据或输入(即操作数)的计算(即操作符)、数学表达式(即操作符和操作数的组合)及对图形的操作。另外,对多个操作数进行组合也更容易发生错误。例如,字符和数字都可以使用“+”操作符。对字符通过“+”把它们连成一串;对数字通过“+”来进行加法运算。如果系统尝试把字符和数字相加,即进行相互矛盾的操作,就会引起软件失效。

12.3 测试方法小结

应用场合:需要进行数值计算的程序或图形操作的程序。

测试方法:对于数值计算考虑操作数和操作符之间的限定关系,对于图形计算还要考虑各种输入数据之间的组合关系。

测试知识储备:全面掌握被测软件中操作符对操作数的要求。掌握不同的操作符和操作数具有的不同的有效和无效的取值范围。

13、递归调用自身

13.1 缺陷产生原因

函数有时会递归调用自身,如果不限制执行次数,递归就会出现问题,它不断地调用自身,很快地占用机器资源,最终产生溢出,使程序崩溃或挂起。产生这类问题的主要原因是开发人员没有编码来保证循环和递归调用的终止,通常是在循环的开始或结束时缺少检查条件。

13.2 如何发现问题

在软件中寻找可以使用递归调用的功能。这时可以制作一个列表,标明软件中可能嵌入递归的功能的列表,然后自己引用自己来检查程序是否能正确处理。

13.3 测试方法小结

应用场合:需要和其它对象进行交互的地方。

测试方法:考虑对象的自我交互或复制。

测试知识储备:全面掌握被测软件的需求。

14、计算结果溢出

14.1 缺陷产生原因

当所有的输入和数据都有效时,计算的最终结果也可以是无效的。所有变量都有值域范围,有时开发人员在执行计算时会忘记检查这些上限。

14.2 如何发现这类问题

一次又一次地执行计算或使用很大或很小的输入和数据进行计算,重点测试数据类型的初始值或边界值附近的值。

14.3 测试方法小结

应用场合:应用程序执行能够导出待产生结果并进行内部存储的计算。

测试方法:强制数据产生上溢或下溢。

测试知识储备:全面掌握被测软件的需求,了解计算变量的上下限。

15、数据共享或关联功能计算错误

15.1 缺陷产生原因

通常对孤立的功能进行测试时不会发生很多缺陷,而当把单独的功能和同一软件中的其它功能结合时,就可能出现很多软件缺陷。这种缺陷的产生往往是在两个或更多的功能使用了共享数据集,而每个功能允许使用的数据范围不同引起的。例如,一个功能可能会将某数据项设置为特定大小,然而另一个功能却允许该数据项的大小可以超过第一个功能的处理能力。开发人员根本没考虑到该数据项在其它功能处也可以修改,他们只是编码保证在该功能中数据的合法性,而当使用该数据时,没有再编码来检查可以使用的范围;而此时,另一个功能修改了共享数据,当再使用这些数据时就产生了缺陷。

15.2 如何发现这类问题

当应用程序在同一时间完成一个以上的功能或当一个以上的功能在同一时间处于运行状态时,就可以使用该方法进行测试。利用一个功能影响输入、输入数据或另一个功能的计算。在测试前要确定哪些功能是相互依赖或共享数据的:

能应用同样输入的每个功能。如果这些功能有相互重叠的输入域,就可能存在交互问题。

有类似的输出产生功能。如果某些功能结合起来产生单个输出,就说明这些部件之间存在关系,应该被一起测试。

一个功能被包含在另一个功能的计算中。例如要测试鼠标选取对象的功能,不仅要测度鼠标选取屏幕上的文本的功能,还可以把包含超链接文本、粗体、斜体、符号及图形元素放在一起,测试鼠标选取这些元素的功能。

15.3 测试方法小结

应用场合:一个以上的功能在同一时间处于运行状态。

测试方法:以点代面,重点测试某一功能,对可能与这个功能相连的其它功能附带测试。

测试知识储备:全面掌握被测软件的需求,在测试之前对被测功能之间的依赖关联有所掌握,另外还需要对共享数据有所掌握。

16、文件系统超载

16.1 缺陷产生原因

开发人员可能会忘记编写代码处理满状态的文件系统,忽略了诸如CreateFile,WriteFile等操作系统API的错误检查代码,没有这样的代码,当显示满状态的文件系统时,API调用就会失败,软件就会在没有任何警告的情况下崩溃。

16.2 如何发现这类问题

创建满容量或近乎满容量的文件系统,然后强制执行各种通过输入或输出访问文件系统的操作;或者打开足够多的文件,打开文件时会强制备份创建的副本,从而占用双倍的存储空间,这种操作达到一定程度时,会达到该系统的容量,于是就能测试应用程序处理超载状态的文件系统的能力。(通常通过磁盘配额实现)

16.3 测试方法小结

应用场合:系统较大,运行时需要较大的空间。

测试方法:强制磁盘系统满容量或容量小于等于被测软件运行时所需容量后,运行被测软件或利用测试工具模拟磁盘状况。

测试知识储备:全面掌握被测软件的需求,了解被测软件处理超载状态的文件系统的能力。

17、介质忙或不可用

17.1 缺陷产生原因

当多个应用程序同时访问硬盘(或其它存储器),操作系统为提供多请求服务会慢下来,并且必须对应用程序进行编程以处理这些延迟,当延迟变得很长时,没有对这些错误进行响应的应用程序就会出现错误。

17.2 如何发现这类问题

通过启动大量应用程序,强制它们都打开并保存文件使文件系统处理繁忙状态;或者同时下载大量文件也可以使后台拥挤;检查被测软件能否正确处理这种情况,应用程序应该给出错误信息或等待批示,提示用户正在处理。

17.3测试方法小结

应用场合:应用程序的运行需要消耗大量内存或运行时需要其它相关软件同时运行。

测试方法:启动大量程序或利用测试工具模拟磁盘状况。

测试知识储备:全面掌握被测软件的需求,了解被测软件运行时对系统的要求。

18、介质损坏

18.1 缺陷产生原因

损坏的介质可能会使操作系统传回错误代码,这些错误代码没有在应用程序中编程处理。

操作系统不能检测出所有这样的错误,操作系统自己也有错误或者损坏的介质损坏了部分操作系统。

18.2 如何发现这类问题

使用损坏了的介质,例如,刮伤、灰尘、磁干扰等。检查应用程序对错误的处理能力,应用程序可以对错误进行处理或者将问题告诉用户,并要确保用户数据文件不丢失、为损坏。

18.3 测试方法小结

应用场合:应用程序对安全的要求较高,对灾难恢复的要求较高。

测试方法:用实际损坏介质的方法测试应用程序。

测试知识储备:全面掌握被测软件的需求,了解被测软件运行时对系统的要求。

19、文件名不合法

19.1 缺陷产生原因

操作系统本身具有自己的文件命名规范,例如,Dos的8.3格式。在Windows中,文件名不能超过255个字符,并且文件名不可以含有/ \ : ? * |这8个字符,以及AUX、COM1、COM2、COM3、COM4、CON、LPT1、LPT2、LPT3、LPT4、NUL及PRN这些操作系统保留字。

开发人员在应用程序中使用不相同的规则管理文件名,当应用程序和操作系统使用的文件名命名规则不一致的时候,就会发生问题。

19.2 如何发现这类问题

保存文件为操作系统不允许的文件名,例如,文件名中含有/ \ : ? * |这8个字符,测试应用程序是否不允许输入包含这些字符的文件名。

输入一些应用程序不允许使用的文件名,例如,使用过长的、含有特殊字符的、可能相互作用的字符作为文件名,检查应用程序能否识别该文件。

19.3 测试方法小结

应用场合:几乎所有涉及需要输入文件名功能的应用程序。

测试方法:输入操作系统不允许的文件名和应用程序不允许使用的文件名。

测试知识储备:全面掌握被测软件的需求,了解操作系统和应用程序对文件名的要求。

20、更改文件访问权限

20.1 缺陷产生原因

在操作系统中,可以设置不同用户对不同的文件具有不同的访问权限(如读写、只读等)。程序员必须在访问文件的函数中考虑文件的访问权限,例如在每个文件写入之前检查文件的访问权限。如果没有进行检查,就会导致程序出错。另外,如果文件访问失败,程序员必须要有正确的错误的代码,以保证程序可以正确捕获所产生的错误。

20.2 如何发现这类问题

打开两个应用程序,关闭同一个文件。例如,把同一个应用程序的不同版本安装在同一机器上,在不同版本的应用程序中打开和关闭同一文件,或试着在某个应用程序中打开在另一个程序中已打开的文件,这可能导致文件访问权限的冲突。

打开一个文件,在操作系统中修改文件的访问权限。有些操作系统允许权限高的用户控制一般用户已经打开的文件。

20.3 测试方法小结

应用场合:需要对文件进行读写操作的应用程序。

测试方法:修改文件访问权限或使用低权限的用户访问文件。

测试知识储备:全面掌握被测软件的需求,了解读写文件所需的权限。

21、文件内容受损

21.1 缺陷产生原因

开发人员编写代码来读取和写入文件,他们也编写代码来调用系统API得到文件指针,并打开和关闭文件。由于某些原因,这些系统API会失败或传回异常返回值。如果开发人员没有编写代码来验证传回的预期返回值,则应用程序会由于无法处理异常而失败。

21.2 如何发现这类问题

手工损坏文件。从应用程序已创建的某个完整文件开始对其进行编辑,改变文件格式和内容。

使用测试工具。模拟CRC(循环冗余校验)错误,或强制文件API返回无效的返回码。

21.3 测试方法小结

应用场合:需要对文件格式和内容进行校验的应用程序。

测试方法:手工损坏文件或利用测试工具模拟CRC错误。

测试知识储备:全面掌握被测软件的需求,了解文件读写需要的权限。

图文来源网络,如有侵权联系删除

觉得文章不错的话就点个赞吧,转发就更好了

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418A1U3FQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券