人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

一、概念

  黑盒测试也称为功能测试,他是通过测试来检测每个功能是否能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检测程序功能是否按照需求规格说明说的规定正常使用,程序是否能适当地接收输入数据而产生正常的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

  黑盒测试是以用户的角度,从输入数据与输出数据的的对应关系出发进行测试,很明显,如果外部设计本身存在问题,或者需求规格说明的规定有误,黑盒测试是发现不了的。

 

二、作用

  黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。

    功能不正确或者遗漏

    界面错误

    输入和输出错误

    数据库访问错误

    性能错误

    初始化和终止错误

 

三、测试方法

  从理论上讲,黑盒测试只采用穷举测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。实际上测试情况有无穷多个,不仅要测试合法的输入,而且还要对那些不合法但可能的输入进行测试。这样看来,安全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,有组织,有计划,按步骤的进行。

  黑盒测试行为必须能够加以量化,才能保证软件质量,而测试用例就是将测试具体量化的方法之一。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交实验设计法、功能图法、场景法等。

1.等价类划分法

  等价类划分法是把程序的输入分为若干类(子集),然后每一类中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。该方法事一种重要且常用的测试用例设计方法。

  划分等价类

    等价类是指某个输入域的集合。在该子集中,各个输入对于揭露程序中的错误是等价的,并合理的假定:测试某等价类的值,就代表测试这个等价类,所以把全部输入划分为若干个等价类,在没一个等价类中选取一个数据作为测试用例,就可以用少量代表性的测试数据取得较好的测试结果,等价类划分有两种不同的情况:有效等价类和无效等价类 。

    有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合,利用有效等价类可检验程序是否实现了规格说明中所规定的的功能和性能。

    无效等价类:是指对程序来说不合理、无意义的输入数据的集合。

2.边界值分析法

  边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅考虑输入数据的边界,而且也必须考虑输出域的边界。它是对等价类划分法的补充。

3.错误推测法

   错误推测法是基于经验和直觉推测程序中所有可能出现的各种错误,从而针对错误设计测试用例的方法。

  错误推测法的基本思想:列举出程序中所有可能出现的错误或者容易发生错误的情况,根据他们选择测试用例。例如在单元测试时,曾列出的许多在模块中常见的错误,以前产品测试中曾经发生的错误等,这些就是经验的总结。还有输入数据和输出数据为0的情况,输入表格为空格或输入表格只有一行,这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。

4.因果图法

   等价类划分法和边界值法都是着重考虑输入条件,但未考虑输入条件之间的联系及相互组合等。考虑输入条件的之间的相互结合,可能会产生一些新的情况,但要检查输入条件的结合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的结合情况也相当多,因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式考虑设计测试用例,这就需要利用因果图(逻辑模型)。

  因果图法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。

  正交试验设计

  就是使用已经造好了的正交表格来安排试验并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率。

  场景法

  软件几乎都是用事件触发来控制流程的,事件触发的情景
  基本流和备选流
基本流和备选流
便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。
 
四、测试流程
测试计划——测试设计——测试开发——测试执行——测试评估
测试计划
  首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制定黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求进行,符合测试需求的的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。
测试设计
  将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例,测试用例选择的好坏将直接影响到测试结果的有效性。
测试开发
   建立可重复使用的自动测试过程。
测试执行
  执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学的态度,一步一个脚印的测试。
测试评估
  结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行评估评价。
 
五、黑盒测试的优点
  1.基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了。
  2.设计完测试用例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因。
 
六、缺点
  1.结果取决于测试用例的设计,测试用例的设计部分优势来源于经验,OUSPG的东西很值得借鉴
  2.没有状态转换的概念,一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来实现
  3.就没有状态概念的测试来说,寻找和确定造成程序crash的测试用例是个麻烦事情,必须把周围可能的测试用例单独确认一遍。而就有状态的测试来说,就更麻烦,尤其不是一个单独的testcase造成是问题。这些在堆的问题中变现更为突出。
 
七、工具选择
  这里介绍一个较为经典的自动化测试工具,即Mercury公司的WinRunner。
  WinRunner是一种用于检测程序能否正常运行的企业级功能测试工具。通过自动捕捉、检测和模拟用户交互操作,WinRunner能识别绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。
  WinRunner的特点在于:与传统的手工测试相比,它能快速、批量地完成功能点测试;能针对相同测试脚本,执行相同的动作,从而消除人工测试所带来的理解上的误差;此外,它还能重复执行相同动作,测试工作中最枯燥的部分可交由机器完成;它支持程序风格的测试脚本,一个高素质的测试工程师能借助它完成流程极为复杂的测试,通过使用通配符、宏、条件语句、循环语句等,还能较好地完成测试脚本的重用;它针对于大多数编程语言和windows技术,提供了较好的集成、支持环境、这对于windows平台的应用程序实施功能测试而言带来了极大的便利。
 
八、工作流程
  识别GUI
    在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后,WinRunner会将其存储到GUI Map File中。它提供两种GUI Map File模式: Global GUI Map File和GUI Map File per Test。起最大区别是后者对每个测试脚本产生一个GUI文件,它能自动建立、存储、加载,推荐初学者选用这种模式。但是这种模式不易于描述对象的改变,其效率比较低,因此对于一个有经验的测试人员来说前者不失为一种更好的选择,它只产生一个共享的GUI文件,这使得测试脚本更容易维护,且效率更高。
  建立测试脚本
    在建立测试脚本时,一般先进行录制,然后在录制形成的脚本中手工加入需要的TSL(与c语言类似的测试脚本语言)。录制脚本有两种模式:Context Sensitive和Analog,选择依据主要在于是否对鼠标轨迹进行模拟,在需要回放时一般选用Analog。在录制过程中这两种模式可以通过F2键相互切换。
  脚本除错
    在WinRunner中有专门一个Debug Toolbar用于测试脚本除错。可以使用step、pause、breakpoint等来控制和追踪测试脚本和查看各种变量值。
  测试脚本
    当应用程序有新版本发布时,我们会对应用程序的各种功能包括新增功能进行测试,这时当然不可能再来重新录制和编写所有的测试脚本。我们可以使用已有的脚本,批量运行这些测试脚本测试旧的功能点是否正常工作。可以使用一个call命令来加载各测试脚本。还可在call命令中加各种TSL脚本来增加批量能力。
  分析测试结果
    通过分析可以发现应用程序的各种功能性缺陷。当运行完某个测试脚本后,会产生一个策划报告,从这个测试报告中我们能发现程序的功能性缺陷,能看到实际结果和期望结果之间的差异,以及在测试工程中产生的各类对话框等。
  回报缺陷
    在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些确信啊发给指定人,以便进行修复和修护。
 
九、常用方法
  功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:
  1、页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。
  2、相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。
  3、检查按钮的功能性是否正确:如update,cancel,delete,save等功能是否正确。
  4、字符串长度检查:输入超出需求所说明的字符串长度的内容,看系统是否检查字符串长度,会不会出错。
  5、字符类型检查:在应该输入指定内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错。
  6、标点符号检查:输入内容包括各种标点符号,特别是空格,各种引号,回车键等,看系统处理是否正确。
  7、中文字符处理:在可以输入中文的系统输入中文,看会否出现乱码或出错。
  8、检查带出信息的完整性:在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致。
  9、信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。
  10、检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。
  11、检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型。
  12、检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错。
  13、 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。
  14、检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错。
  15、search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确。
  16.、输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。
  17、上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。
  18、必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*。
  19、快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。
  20、回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。
posted on 2019-06-03 22:00  测试开发喵  阅读(3927)  评论(0编辑  收藏  举报