测试用例常用的设计方法包括(测试用例设计题库)

2022-10-04 09:46:29

  [软件测试题目]一次测试用例设计的完整的过程描述

  黑盒测试(Black-box Testing,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。

   采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。

   黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。

   黑盒测试试图发现以下类型的错误:

   1)功能错误或遗漏;

   2)界面错误;

   3)数据结构或外部数据库访问错误;

   4)性能错误;

   5)初始化和终止错误。

  一、黑盒测试的测试用例设计方法

  ·等价类划分方法

  ·边界值分析方法

  ·错误推测方法

  ·因果图方法

  ·判定表驱动分析方法

  ·正交实验设计方法

  ·功能图分析方法

  等价类划分:

   是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.

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

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

   无效等价类:与有效等价类的定义恰巧相反.

   设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.

  2)划分等价类的方法:下面给出六条确定等价类的原则.

   ①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.

   ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.

   ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.

   ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.

   ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).

   ⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.

  3)设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:

   输入条件 有效等价类 无效等价类

   ... ... ...

   ... ... ...

   然后从划分出的等价类中按以下三个原则设计测试用例:

   ①为每一个等价类规定一个唯一的编号.

   ②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.

   ③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.

  边界值分析法

   边界值分析方法是对等价类划分方法的补充.

  (1)边界值分析方法的考虑:

   长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.

   使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

  (2)基于边界值分析方法选择测试用例的原则:

   1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.

   2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.

   3)根据规格说明的每个输出条件,使用前面的原则1).

   4)根据规格说明的每个输出条件,应用前面的原则2).

   5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.

   6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.

   7)分析规格说明,找出其它可能的边界条件.

  错误推测法

   错误推测法: 基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.

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

  因果图方法

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

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

   利用因果图生成测试用例的基本步骤:

   (1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符.

   (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.

   (3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.

   (4) 把因果图转换为判定表.

   (5) 把判定表的每一列拿出来作为依据,设计测试用例.

   从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.

   前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.

   判定表通常由四个部分组成.

   条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.

   动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.

   条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.

   动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.

   规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.

   判定表的建立步骤:(根据软件规格说明)

   ①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则.

   ②列出所有的条件桩和动作桩.

   ③填入条件项.

   ④填入动作项.等到初始判定表.

   ⑤简化.合并相似规则(相同动作).

   B. Beizer 指出了适合使用判定表设计测试用例的条件:

   ①规格说明以判定表形式给出,或很容易转换成判定表.

   ②条件的排列顺序不会也不影响执行哪些操作.

   ③规则的排列顺序不会也不影响执行哪些操作.

   ④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.

   ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.

  黑盒测试的优点

   1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了

   2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因

  黑盒测试的缺点

   1. 结果取决于测试例的设计,测试例的设计部分来势

   2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作

   3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。

  黑盒测试(功能测试)工具的选择

   那么,如何高效地完成功能测试?选择一款合适的功能测试工具并培训一支高素质的工具使用队伍无疑是至关重要的。尽管现阶段存在少数不采用任何功能测试工具,从事功能测试外包项目的软件服务企业。短期来看,这类企业盈利状况尚可,但长久来看,它们极有可能被自动化程度较高的软件服务企业取代。

   目前,用于功能测试的工具软件有很多,针对不同架构软件的工具也不断推陈出新。这里重点介绍的是其中一个较为典型自动化测试工具,即Mercury公司的WinRunner。

   WinRunner是一种用于检验应用程序能否如期运行的企业级软件功能测试工具。通过自动捕获、检测和模拟用户交互操作,WinRunner能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。

   WinRunner的特点在于: 与传统的手工测试相比,它能快速、批量地完成功能点测试; 能针对相同测试脚本,执行相同的动作,从而消除人工测试所带来的理解上的误差; 此外,它还能重复执行相同动作,测试工作中最枯燥的部分可交由机器完成; 它支持程序风格的测试脚本,一个高素质的测试工程师能借助它完成流程极为复杂的测试,通过使用通配符、宏、条件语句、循环语句等,还能较好地完成测试脚本的重用; 它针对于大多数编程语言和Windows技术,提供了较好的集成、支持环境,这对基于Windows的应用程序实施功能测试而言带来了极大的便利。

  WinRunner的工作流程大致可以分为以下六个步骤:

  1.识别应用程序的GUI

  在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后,WinRunner会将其存储到GUI Map File中。它提供两种GUI Map File模式: Global GUI Map File和GUI Map File per Test。其最大区别是后者对每个测试脚本产生一个GUI文件,它能自动建立、存储、加载,推荐初学者选用这种模式。但是,这种模式不易于描述对象的改变,其效率比较低,因此对于一个有经验的测试人员来说前者不失为一种更好的选择,它只产生一个共享的GUI文件,这使得测试脚本更容易维护,且效率更高。

  2.建立测试脚本

  在建立测试脚本时,一般先进行录制,然后在录制形成的脚本中手工加入需要的TSL(与C语言类似的测试脚本语言)。录制脚本有两种模式: Context Sensitive和Analog,选择依据主要在于是否对鼠标轨迹进行模拟,在需要回放时一般选用Analog。在录制过程中这两种模式可以通过F2键相互切换。

  只要看看现代软件的规模和功能点数就可以明白,功能测试早已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段。而性能测试则是控制系统性能的有效手段,在软件的能力验证、能力规划、性能调优、缺陷修复等方面都发挥着重要作用。

  3.对测试脚本除错(debug)

  在WinRunner中有专门一个Debug Toolbar用于测试脚本除错。可以使用step、pause、breakpoint等来控制和跟踪测试脚本和查看各种变量值。

  4.在新版应用程序执行测试脚本

  当应用程序有新版本发布时,我们会对应用程序的各种功能包括新增功能进行测试,这时当然不可能再来重新录制和编写所有的测试脚本。我们可以使用已有的脚本,批量运行这些测试脚本测试旧的功能点是否正常工作。可以使用一个call命令来加载各测试脚本。还可在call命令中加各种TSL脚本来增加批量能力。

  5.分析测试结果

  分析测试结果在整个测试过程中最重要,通过分析可以发现应用程序的各种功能性缺陷。当运行完某个测试脚本后,会产生一个测试报告,从这个测试报告中我们能发现应用程序的功能性缺陷,能看到实际结果和期望结果之间的差异,以及在测试过程中产生的各类对话框等。

  6.回报缺陷(defect)

  在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些缺陷发给指定人,以便进行修改和维护。

  常用的功能测试方法

  功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:

  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. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.您好!欢迎共同讨论!有时间逛逛IT实验室,天天软件测试网

  面试题: 如何对一个游戏进行设计测试用例.

  一、游戏软件与通用软件的区别 a) 通用软件的需求明确,游戏软件需求理想化 i. 通用软件中用户每步操作的预期结果都是明确且有规范可参考的,而网游中并 不是所有的需求都有一个明确的预期结果,拿技能平衡性来说,我们所谓的平衡也只是相对的平衡,而非绝对的平衡。没有什么明确的参考参数。只能根据以往游戏的经验获得一个感知的结果。 ii. 网络游戏中的某些功能是有预期结果可参考的。例如组队、交易,而另外一些 带有策划创意的功能,却是根据策划个人的理解,来确定其预期结果的。人的思考力都是有限的,所以不能保证在他的创意中会考虑到各种各样复杂的细节。也不能够保证这个创意就可以完全被用户所接受。 当你作为游戏测试人员时,很多时候你需要做的不仅仅是验证功能。也需要帮助开发者和用户找到一个互相容忍的平衡点。游戏软件的测试员带有对策划需求的怀疑,力求通过自己的努力在玩家和开发者之间将可能产生的矛盾减小。 b) 通用软件开发过程中需求变更少,游戏软件开发过程中需求便更快 i. 通用软件的使用人群和软件的功能针对性,决定软件从开始制作就很少再有新 的需求变更。而游戏软件,为了满足玩家对游戏的认可度,策划需要不断的揣摩玩家的喜好,进行游戏功能的改进。加之网游制作本身就是一个庞大复杂的工程,开发者不可能做到在开发的前期,就对游戏架构及扩展性做出最好的评估。所以导致为了满足用户的需求而不断的进行一些基础架构的修改,基础架构的修改必然导致某些功能的颠覆。所以就出现了,游戏开发过程中的一个恶性循环,当基础架构修改到满意了,玩家的需求又有了新的变化,随之而来的又要进行新的调整,再进行新的修改。最终导致了游戏软件的开发周期不断加长。任何一个有经验的团队,对于每一个影响基础的改动都应该做出正确的评估。 二、网游有哪些测试内容 a) 性能 i. 客户端性能 ii. 服务器端性能 1. 服务器 2. 数据库 iii. 网络 b) 功能 i. 从运行完game.exe打开游戏界面后可进行的各种操作、玩法 ii. 界面 iii. 音乐 c) 自动化 i. 测试工作组织实施中需要的工具、软件、的开发 ii. 自动化的回归测试作用:游戏中基础的、变动不大的、出错率高的、可进行 checklist重复测试的功能、性能等自动化是一个好方法 iii. 任何时候自动化都取代不了人脑,它只是将一些重复性的劳动从我们测试人员 身上去掉,让我们有更多的时间做更有意义的事情,如果你觉得你做一件事情是重复的,且有规律可行的,不防考虑自动化 三、游戏中针对功能性测试测试用例编写浅谈

  国际体验设计协会IXDC 历届大会精彩集锦

  游戏用户体验大会 互联网产品大会 交互设计体验周

  [url][/url] 本文档仅供学习参考,请误擅自

   2 / 3 先了解下游戏中有哪些功能: a) 游戏发开中的功能有哪些 i. 不同的游戏对于功能的划分不同,但是目前主流一些功能划分中有以下内容: 1. 基础操作 2. Npc 3. 地图 4. 装备 5. 剧情 6. 技能 7. 人际 8. PVP 9. …… 这样我们很简单的将整个游戏的功能进行了划分,划分完毕,下来的工作就是针对某个功能的测试了。很多人都问过一个问题,游戏测试中测试用例到底有什么用。下面继续~ b) 游戏测试的测试用例有什么作用 i. 测试执行过程中,按照用例指示的操作检查操作结果是否正确,记录测试过程 中发现的bug ii. 按照用例的执行结果确认功能的通过与否,也有的按照用例的覆盖率来确定单 服测试的通过与否 iii. 便于回归测试的执行 这样讲应该比较明白了吧。 c) 测试用例应该包括什么——测试执行过程中所需的所有信息,举例说明下。例如: i. 表头:功能名称、案例编写人员、编写时间、测试人员、测试时间 ii. 正文:功能点、测试点、测试输入、预期结果、实际结果 iii. 用例执行结果统计 d) 功能点模块化理念 都知道一个复杂庞大的系统,程序在实现时会将其分成若干模块按照模块功能优先级进行实现。我们测试过程中也采用这种方法,将复杂的功能点按照实现功能进行分类,分类后的测试点,再进行分类,直至细分成为一条条用例。就像庖丁解牛那样。 按照等价类划分法,将同一判断条件的测试点组成一个集,在这个条件基础上再次判断的条件,我们假设它已经成立。这样在用例设计过程中就需要测试人员清楚的知道,哪些条件是一类需优先确认的,哪些是以这类条件为基础的。我们最终形成的测试用例一定确保的是一条用例只检查一个测试点。 这样设计也有另外一个好处,如果一条用例不能走通,其它的还可以继续检测,经常会遇到测试过程中由于一个bug,导致测试工作停滞。现在这样子我们就可以采取脚本调试,或者其它方法跳过有bug的测试内容,继续进行其它测试点的测试了。 e) 场景测试法协助功能点细分 游戏测试中,场景测试方法是经常用到的一种方法,什么是场景测试法,及按照功能设计要求,在脑中模拟出来的一个功能使用时的操作流程。按照每步操作的针对点,将针对点划分为所用例设计时的小功能点。划分时需每步针对点的各种检查点分到该功能点内设计为该功能点的检查点。再根据检查点进行测试输入(及操作过程)的编写。用例编写过程中的思考方式就如上了。讲起来比较抽象,希望对

  [url][/url] 本文档仅供学习参考,请误擅自

   3 / 3 大家有所帮助。 f) 用例的设计原则——一直有人问到底要详细到什么程度 i. 我们不期待用例编写到任何人都可以执行,也没有这个必要 ii. 我们针对的是网游的测试人员,至少是玩过网游的人,这些人对于游戏中的基 础设定都有认识,我们不可能对着一个不知道任务界面是什么的人大讲怎么测试任务。所以我们用例编写的原则就是针对我们测试组内的测试人员。 iii. 但是,请不要简略到别的测试人员看不懂,特别是当你是专职的用例编写人员 时,编写时请多考虑下语言描述的方式。请让你的同伴可以看懂,你所要表达的意思。 iv. 用例是没有固定格式的,它的主要原则就是,测试中所需所有信息,我通过你 的文档都能够获取到。所以不要再执着的像别人要模板。模板你自己都可以设计,发挥你的创意。 四、编写过程注意事项 与设计人员的沟通 拿到一份文档时请不要急于编写,在这之前很多事情需要做,请先将文档阅读至少三遍,然后思考下,你自己大脑中是否有你所看文档功能点的一个流程图,当确认已经准备好了。开始设计用例,用例设计的过程就是与设计人员不断沟通,深入了解功能的过程。你会发现,或许跟你之前流程图中想像的并不完全一样。这个时候不必惊讶,去找他们核对就好。不怕发现问题,就怕没有发现问题,最终做了很多无用功。编写过程中发现的没有预期结果的内容,请及时与策划人员、程序人员核对,必须三方核对。核对完毕提醒策划人员及时更新设计案,提醒程序人员设计案新修改内容。这样你会发现,设计测试用例过程的本身就是发现策划案不完善的过程。 请运用你的思维,采用边界法、等价类划分法、错误推断法、以及以往的经验,将每一个测试点的所有需检查点进行充分的设计。发挥你的主动性,和测试组内其它人探讨你认为可能存在风险的测试点,以便得到更多有价值的信息

  软件测试试题

  黑盒测试(Black-box Testing,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。

   采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。

   黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。

   黑盒测试试图发现以下类型的错误:

   1)功能错误或遗漏;

   2)界面错误;

   3)数据结构或外部数据库访问错误;

   4)性能错误;

   5)初始化和终止错误。

  一、黑盒测试的测试用例设计方法

  ·等价类划分方法

  ·边界值分析方法

  ·错误推测方法

  ·因果图方法

  ·判定表驱动分析方法

  ·正交实验设计方法

  ·功能图分析方法

  等价类划分:

   是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.

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

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

   无效等价类:与有效等价类的定义恰巧相反.

   设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.

  2)划分等价类的方法:下面给出六条确定等价类的原则.

   ①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.

   ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.

   ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.

   ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.

   ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).

   ⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.

  3)设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:

   输入条件 有效等价类 无效等价类

   ... ... ...

   ... ... ...

   然后从划分出的等价类中按以下三个原则设计测试用例:

   ①为每一个等价类规定一个唯一的编号.

   ②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.

   ③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.

  边界值分析法

   边界值分析方法是对等价类划分方法的补充.

  (1)边界值分析方法的考虑:

   长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.

   使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

  (2)基于边界值分析方法选择测试用例的原则:

   1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.

   2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.

   3)根据规格说明的每个输出条件,使用前面的原则1).

   4)根据规格说明的每个输出条件,应用前面的原则2).

   5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.

   6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.

   7)分析规格说明,找出其它可能的边界条件.

  错误推测法

   错误推测法: 基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.

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

  因果图方法

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

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

   利用因果图生成测试用例的基本步骤:

   (1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符.

   (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.

   (3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.

   (4) 把因果图转换为判定表.

   (5) 把判定表的每一列拿出来作为依据,设计测试用例.

   从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.

   前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.

   判定表通常由四个部分组成.

   条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.

   动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.

   条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.

   动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.

   规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.

   判定表的建立步骤:(根据软件规格说明)

   ①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则.

   ②列出所有的条件桩和动作桩.

   ③填入条件项.

   ④填入动作项.等到初始判定表.

   ⑤简化.合并相似规则(相同动作).

   B. Beizer 指出了适合使用判定表设计测试用例的条件:

   ①规格说明以判定表形式给出,或很容易转换成判定表.

   ②条件的排列顺序不会也不影响执行哪些操作.

   ③规则的排列顺序不会也不影响执行哪些操作.

   ④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.

   ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.

  黑盒测试的优点

   1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了

   2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因

  黑盒测试的缺点

   1. 结果取决于测试例的设计,测试例的设计部分来势

   2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作

   3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。

  黑盒测试(功能测试)工具的选择

   那么,如何高效地完成功能测试?选择一款合适的功能测试工具并培训一支高素质的工具使用队伍无疑是至关重要的。尽管现阶段存在少数不采用任何功能测试工具,从事功能测试外包项目的软件服务企业。短期来看,这类企业盈利状况尚可,但长久来看,它们极有可能被自动化程度较高的软件服务企业取代。

   目前,用于功能测试的工具软件有很多,针对不同架构软件的工具也不断推陈出新。这里重点介绍的是其中一个较为典型自动化测试工具,即Mercury公司的WinRunner。

   WinRunner是一种用于检验应用程序能否如期运行的企业级软件功能测试工具。通过自动捕获、检测和模拟用户交互操作,WinRunner能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。

   WinRunner的特点在于: 与传统的手工测试相比,它能快速、批量地完成功能点测试; 能针对相同测试脚本,执行相同的动作,从而消除人工测试所带来的理解上的误差; 此外,它还能重复执行相同动作,测试工作中最枯燥的部分可交由机器完成; 它支持程序风格的测试脚本,一个高素质的测试工程师能借助它完成流程极为复杂的测试,通过使用通配符、宏、条件语句、循环语句等,还能较好地完成测试脚本的重用; 它针对于大多数编程语言和Windows技术,提供了较好的集成、支持环境,这对基于Windows的应用程序实施功能测试而言带来了极大的便利。

  WinRunner的工作流程大致可以分为以下六个步骤:

  1.识别应用程序的GUI

  在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后,WinRunner会将其存储到GUI Map File中。它提供两种GUI Map File模式: Global GUI Map File和GUI Map File per Test。其最大区别是后者对每个测试脚本产生一个GUI文件,它能自动建立、存储、加载,推荐初学者选用这种模式。但是,这种模式不易于描述对象的改变,其效率比较低,因此对于一个有经验的测试人员来说前者不失为一种更好的选择,它只产生一个共享的GUI文件,这使得测试脚本更容易维护,且效率更高。

  2.建立测试脚本

  在建立测试脚本时,一般先进行录制,然后在录制形成的脚本中手工加入需要的TSL(与C语言类似的测试脚本语言)。录制脚本有两种模式: Context Sensitive和Analog,选择依据主要在于是否对鼠标轨迹进行模拟,在需要回放时一般选用Analog。在录制过程中这两种模式可以通过F2键相互切换。

  只要看看现代软件的规模和功能点数就可以明白,功能测试早已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段。而性能测试则是控制系统性能的有效手段,在软件的能力验证、能力规划、性能调优、缺陷修复等方面都发挥着重要作用。

  3.对测试脚本除错(debug)

  在WinRunner中有专门一个Debug Toolbar用于测试脚本除错。可以使用step、pause、breakpoint等来控制和跟踪测试脚本和查看各种变量值。

  4.在新版应用程序执行测试脚本

  当应用程序有新版本发布时,我们会对应用程序的各种功能包括新增功能进行测试,这时当然不可能再来重新录制和编写所有的测试脚本。我们可以使用已有的脚本,批量运行这些测试脚本测试旧的功能点是否正常工作。可以使用一个call命令来加载各测试脚本。还可在call命令中加各种TSL脚本来增加批量能力。

  5.分析测试结果

  分析测试结果在整个测试过程中最重要,通过分析可以发现应用程序的各种功能性缺陷。当运行完某个测试脚本后,会产生一个测试报告,从这个测试报告中我们能发现应用程序的功能性缺陷,能看到实际结果和期望结果之间的差异,以及在测试过程中产生的各类对话框等。

  6.回报缺陷(defect)

  在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些缺陷发给指定人,以便进行修改和维护。

  常用的功能测试方法

  功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:

  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. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.

  测试用例的设计

  (一)白盒技术

  白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。

  ⒈逻辑覆盖

  程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面根据图7-1所示的程序,分别讨论几种常用的覆盖技术。

  ⑴语句覆盖。

  为了提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。

  如图7-1是一个被测试程序流程图:

  ⑵判定覆盖。

  判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。

  ⑶条件覆盖。

  条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。

  ⑷判定条件覆盖。

  该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。

  ⑸条件组合覆盖。

  条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。

  ⑹路径覆盖。

  路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。

  在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。

  ⒉循环覆盖

  ⒊基本路径测试

  (二)黑盒技术

  ⒈等价类划分

  ⑴划分等价类。

  ①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

  ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。

  ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

  ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

  ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

  ⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

  ⑵确定测试用例。

  ①为每一个等价类编号。

  ②设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重复这步,直到所有合理等价类被测试用例覆盖。

  ③设计一个测试用例,使其只覆盖一个不合理等价类。

  ⒉边界值分析

  使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。

  ⑴如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的范围是[1,100],可取0,1,100,101等值作为测试数据。

  ⑵如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件可包括1--255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。

  ⑶对每个输出条件分别按照以上原则⑴或⑵确定输出值的边界情况。如,一个学生成绩管理系统规定,只能查询95--98级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。

  由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。

  ⑷如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线形表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。

  ⒊错误推测

  在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。

  ⒋因果图

  等价类划分和边界值方法分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。

  ⒌综合策略

  每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。 ·能发现到目前为止没有发现的缺陷的用例是好的用例。

  首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“VAMp;V”的活动,测试需要保证以下两点:

  程序做了它应该做的事情

  程序没有做它不该做的事情

  因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。

  ·测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试。

  不知道国内有没有公司真正做到这点,或者说,不知道国内有没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度 也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实 现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到 一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。

  在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个ProjECt,也需要在 给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目 标,一切围绕测试的目标进行。

  除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK。在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。

  ·测试用例设计是一劳永逸的事情。

  这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例 却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰 后,对测试人员不屑一顾。

  这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中却是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。

  ·测试用例不应该包含实际的数据。

  测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行 性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software TeST》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。

  ·测试用例中不需要明显的验证手段。

  我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统, 输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段? 显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。 用于功能性测试的测试用例

  例如,下图中经过用例的每条不同路径都反映了基本流和备选流,都用箭头来表示。基本流用直黑线来表示,是经过用例的最简单的路径。每个备选流自基本流开始,之后,备选流会在某个特定条件下执行。备选流可能会重新加入基本流中(备选流 1 和 3),还可能起源于另一个备选流(备选流 2),或者终止用例而不再重新加入某个流(备选流 2 和 4)。

  用例的事件流示例

  遵循上图中每个经过用例的可能路径,可以确定不同的用例场景。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:

  场景 1 基本流

  场景 2 基本流 备选流 1

  场景 3 基本流 备选流 1 备选流 2

  场景 4 基本流 备选流 3

  场景 5 基本流 备选流 3 备选流 1

  场景 6 基本流 备选流 3 备选流 1 备选流 2

  场景 7 基本流 备选流 4

  场景 8 基本流 备选流 3 备选流 4

  注:为方便起见,场景 5、6 和 8 只描述了备选流 3 指示的循环执行一次的情况。

  生成每个场景的测试用例是通过确定某个特定条件来完成的,这个特定条件将导致特定用例场景的执行。

  例如,假定上图描述的用例对备选流 3 规定如下:

  “如果在上述步骤 2‘输入提款金额’中输入的美元量超出当前帐户余额,则出现此事件流。系统将显示一则警告消息,之后重新加入基本流,再次执行上述步骤 2‘输入提款金额’,此时银行客户可以输入新的提款金额。”

  据此,可以开始确定需要用来执行备选流 3 的测试用例:

  测试用例ID 场景 条件 预期结果

  TC x 场景 4 步骤 2 - 提款金额 帐户余额 在步骤 2 处重新加入基本流

  TC y 场景 4 步骤 2 - 提款金额 帐户余额 不执行备选流 3,执行基本流

  TC z 场景 4 步骤 2 - 提款金额 = 帐户余额 不执行备选流 3,执行基本流

  注:由于没有提供其他信息,以上显示的测试用例都非常简单。测试用例很少如此简单。

  下面是一个由用例生成测试用例的更符合实际情况的示例。

  示例:

  一台 ATM 机器的主角和用例。

  下表包含了上图中提款用例的基本流和某些备用流:

  本用例的开端是 ATM 处于准备就绪状态。

  准备提款 - 客户将银行卡插入 ATM 机的读卡机。

  验证银行卡 - ATM 机从银行卡的磁条中读取帐户代码,并检查它是否属于可以接收的银行卡。

  输入 PIN - ATM 要求客户输入 PIN 码(4 位)

  验证帐户代码和 PIN - 验证帐户代码和 PIN 以确定该帐户是否有效以及所输入的 PIN 对该帐户来说是否正确。对于此事件流,帐户是有效的而且 PIN 对此帐户来说正确无误。

  ATM 选项 - ATM 显示在本机上可用的各种选项。在此事件流中,银行客户通常选择“提款”。

  输入金额 - 要从 ATM 中提取的金额。对于此事件流,客户需选择预设的金额(10 美元、20 美元、50 美元或 100 美元)。

  授权 - ATM 通过将卡 ID、PIN、金额以及帐户信息作为一笔交易发送给银行系统来启动验证过程。对于此事件流,银行系统处于联机状态,而且对授权请求给予答复,批准完成提款过程,并且据此更新帐户余额。

  出钞 - 提供现金。

  返回银行卡 - 银行卡被返还。

  收据 - 打印收据并提供给客户。ATM 还相应地更新内部记录。

  用例结束时 ATM 又回到准备就绪状态。

  备选流 1 - 银行卡无效 在基本流步骤 2 中 - 验证银行卡,如果卡是无效的,则卡被退回,同时会通知相关消息。

  备选流 2 - ATM 内没有现金 在基本流步骤 5 中 - ATM 选项,如果 ATM 内没有现金,则“提款”选项将无法使用。

  备选流 3 - ATM 内现金不足 在基本流步骤 6 中- 输入金额,如果 ATM 机内金额少于请求提取的金额,则将显示一则适当的消息,并且在步骤 6 - 输入金额处重新加入基本流。

  备选流 4 - PIN 有误 在基本流步骤 4 中- 验证帐户和 PIN,客户有三次机会输入 PIN。

  如果 PIN 输入有误,ATM 将显示适当的消息;如果还存在输入机会,则此事件流在步骤 3 - 输入 PIN 处重新加入基本流。

  如果最后一次尝试输入的 PIN 码仍然错误,则该卡将被 ATM 机保留,同时 ATM 返回到准备就绪状态,本用例终止。

  备选流 5 - 帐户不存在 在基本流步骤 4 中 - 验证帐户和 PIN,如果银行系统返回的代码表明找不到该帐户或禁止从该帐户中提款,则 ATM 显示适当的消息并且在步骤 9 - 返回银行卡处重新加入基本流。

  备选流 6 - 帐面金额不足 在基本流步骤 7 - 授权中,银行系统返回代码表明帐户余额少于在基本流步骤 6 - 输入金额内输入的金额,则 ATM 显示适当的消息并且在步骤 6 - 输入金额处重新加入基本流。

  备选流 7 - 达到每日最大的提款金额 在基本流步骤 7 - 授权中,银行系统返回的代码表明包括本提款请求在内,客户已经或将超过在 24 小时内允许提取的最多金额,则 ATM 显示适当的消息并在步骤 6 - 输入金额上重新加入基本流。

  备选流 x - 记录错误 如果在基本流步骤 10 - 收据中,记录无法更新,则 ATM 进入“安全模式”,在此模式下所有功能都将暂停使用。同时向银行系统发送一条适当的警报信息表明 ATM 已经暂停工作。

  备选流 y - 退出 客户可随时决定终止交易(退出)。交易终止,银行卡随之退出。

  备选流 z - “翘起” ATM 包含大量的传感器,用以监控各种功能,如电源检测器、不同的门和出入口处的测压器以及动作检测器等。在任一时刻,如果某客户做出暴力举动,便启用适当的措施。

  设计一个测试用例,并说明如何用测试用例找出一个Bug

  可以参考以下安装程序测试点,来回答安装程序的测试用例设计

  0、安装手册给的所有步骤得到验证;

  1、安装过程中所有缺省选项得到验证;

  2、安装过程中典型选项得到验证;

  3、测试各种不同的安装组合,并验证各种不同组合的正确性(包括参数组合,控件执行顺序组合,产品安装组件组合,产品组件安装顺序组合(如b/s)等)

  4、安装过程中异常配置或状态(非法和不合理配置)情况进行了测试(如:断电;数据库终止,网络终止等)

  5、安装后是否能产生正确的目录结构和文件,文件属性正确;

  6、安装后动态库是否正确;

  7、安装后软件能否正确运行;

  8、安装后没有生成多余的目录结构,文件,注册表信息,快捷方式等;

  9、安装测试应该在所有的运行环境上进行验证(手册上指定如:操作系统,数据库,硬件环境,网络环境等);

  10、安装,该系统是否对其他的应用程序造成不正常影响(如操作系统,应用软件等)

  11.空间不足的情况,安装过程的控制

  12.安装过程出现的描述或提醒内容是否正确描述显示。

  等等

  python自动化测试面试题问答汇总

  (1)根据需求文档,深挖需求文档中的细节进行用例设计

   (2)根据自己的测试经验和一些常识补充用例

   (3)参考同事曾写过的用例或网上的资料进行一些用例补充

   测试序号、测试模块、测试环境、前置条件、操作步骤和数据、预期结果、实际结果、是否通过、备注

   (1)等价类划分法:把所有可能输入的数据划分为若干个区域,然后从每个区域中取少数有代表性的数据进行测试即可。有效等价类、无效等价类

   (2)边界值分析法:输入条件是一个取值范围,对取值范围的边界进行边界值测试;输入条件中规定输入数据是一个有序集合,对有序集合的边界进行边界值测试。

   (3)错误推测法:根据经验的补充,如超长混合字符串,全角字符串、数字“0”及单引号

   (4)正交表分析法:多个输入框组合的情况,可以借助正交设计助手小工具,有效减少用例设计个数

   (5)因果判定法:

   (1)测试用例是否依据需求文档进行编写

   (2)测试用例中的执行步骤、输入数据是否清晰、简洁、正确;对于重复度高的执行步骤,是否进行了简化

   (3)每个测试用例是否有明确的预期结果

   (4)测试用例中是否有多余的用例

   (5)测试用例中是否覆盖了需求文档的所有功能点,是否有遗漏

   (1)要确保测试用例是针对需求文档编写的,确保测试点能覆盖所有的需求点

   (2)保证操作步骤、具体数据、预期结果的清晰性、简洁性、明确性,以确保测试用例的可操作性和可复用性

   (3)确保有足够多的异常测试用例,同时要确保没有多余的重复用例

   (4)对测试用例进行评审

   (1)大致体验一下软件,对于如边界值、输入数据类型不明确的问题集中反馈给产品经理,待产品经理给出相应的标准后再设计用例。

   (2)对于测试 软件的过程中,发现有些模块功能不明确影响用户正常使用的地方,会及时反馈给测试经理,协助解决这类问题

   (3)会积极参与项目的各种讨论会议;查看已有的测试用例、bug库中已有的bug、已有的用户手册和帮助文档,咨询产品人员并尽可能多的了解相关需求信息,并以此为基础设计测试用例

   (4)参考软件功能,直接设计用例,然后提交给测试组(必要情况下可以提交给整个项目组)进行评审,得到统一意见。

   (1)根据常识想象出ATM机的功能点:插卡、退卡、输入密码、修改密码、余额查询、取钱、存钱、转账等

   (2)根据自己的操作经验,分别制定每个功能点的需求文档。

   (1)根据经验判断,像页面显示,布局,兼容性问题都是前端的问题

   (2)查后端服务日志,如果日志没有记录,很可能是接口没有调用成功,有可能是这个功能没有与后端进行交互,也就不存在后端的问题。如果有日志输出可以查一下日志信息,进一步分析

   (3)如果是前端显示的数据有误,可以查接口,如果接口返回的实际没有问题,就是前端的问题,如果接口返回数据有问题,前端显示的与后端一致,就是后端的问题

   (4)查看状态码,404可能是前端传参错误或后台接口改了,500是后端的问题

   (1)bug概述

   (2)bug具体描述

   (3)bug的严重程度:致命问题、严重问题、一般问题、

   (4)bug的处理优先级:立即处理、高优先级处理、排队处理、低优先级处理

   (5)bug的指派人

   (6)bug的状态

   (7)附件截图或日志

   (8)其他信息点

   通常要对修复好的产品进行多轮测试,回归测试,因为即使之前的bug修复好了,在下一轮测试中还有可能发现新bug

   (1)回归测试时执行全部用例

   (2)选择重要功能点、常用功能点、与bug关联的功能点进行测试

   (3)选择性执行关键功能点的测试用例

   (4)仅测出现bug的功能点

   (1)测试的版本号和测试环境要描述清楚

   (2)bug概要:通过bug概要让项目组其他成员知道这个bug单描述的是什么问题

   (3)bug具体描述:也就是bug的重现步骤,bug记录的细节越详细越好,包括出错前后执行的操作步骤,涉及的具体数据等

   (4)附上相应的截图和日志,特别是截图能为bug提供有力的说明

   把发现的这个bug操作步骤补充到测试用例中,以便下一次测试的时候能够注意到这个问题

   (1)检查是否是因为bug描述不清楚,造成对bug的争议,确保bug单清晰明确,描述清楚,并且有截图或日志。

   (2)如果bug单写清楚了。就要以心平气和的心态和开发人员进行沟通,说明bug对产品的不良影响

   (3)如果沟通后还是不愿意修改的话,可以向测试经理反馈这一情况,由测试经理出面解决,或召开三方会议共同商讨定夺。

   (4)作为测试人员,一定要坚定自己的立场原则,以产品为出发点,不能经开发的解释后就放弃自己的观点,认为自己找到的不是bug了。

   首先我会截图并搜集日志,保留好测试现场,没有重现可能是因为没有触发到bug产生的点,我会想方设法让这个bug重现,如果实在无法重现,会提交bug、截图和日志给开发人员。如果开发人员要求重现,就后续继续观察,观察到了可以邀请开发来工位进行调试,确定问题;如果最终还是无法重现的话,就把问题反映给测试经理,由测试经理和开发人员进行评审和解决方法,虽然现在没有重现,但不能保证在用户那里不会出现。

   首先我觉得凡事影响用户体验的问题都是大问题,如果用户体验不好,会造成大量潜在用户的流逝,对产品的后续发展是非常不利的;其次如果每个问题都因为修改成本高而不去修改的话,就无法提升产品的质量,我认为无论是什么问题,都应该要求开发人员去修改,这是对产品负责,也是对用户负责。

   之前有用过tapd,也有听说过禅道、TestLink,测试管理工具,主要用于降低产品、开发、测试沟通成本,可以根据公司的具体情况进行使用,应该都差不多,能够很快上手

   一个软件版本一般要测三到五轮,每一轮测试的时间不能确定,受需求规模、测试人员、测试技术、软件质量等多方面因素影响,要视具体的情况确定

   (1)编写目的

   (2)模块功能描述

   (3)测试过程:测试时间、地点、人员、版本

   (4)测试环境

   (5)测试功能点的范围

   (6)测试执行结果

   (7)风险评估

   (8)测试结论

   (9)附件

   (1)按照测试计划安排完成了所有测试工作

   (2)测试用例全部完成,执行通过率达到标准

   (3)每个测试人员手上的bug处于关闭状态

   (4)回归测试全部执行完毕,没有发现影响产品上线的bug,软件产品达到了上线标准

   (5)每个测试人员负责的测试报告已完成,并提交给了测试经理

   需求评审,测试计划的制定、测试用例的设计、用例评审、测试环境搭建、测试执行(提交BUG、回归测试)、撰写测试报告

   对于功能测试人员,是在系统测试时介入的

   首先测试工作是产品诞生过程中必不可少的环节,对产品质量有明显的改善作用;其次测试能对开发工作起到一定的监督和推动作用,能够加快软件开发周期,加快软件发布的进程

   首先熟悉项目组成员,包括开发、测试、产品。其次我会从熟悉需求文档开始,依次熟悉测试组的测试用例、bug管理工具以及bug库中已提交的bug。最后我会想测试组的老同事或我的导师请教测试组的基本工作流程等细节问题,并结合测试经理分配的任务,通过这些任务熟悉整个测试流程和工作要点。

   受测试时间、测试人员数量、测试人员技术等方面的因素影响,无法发现所有bug。有些bug是需要在特殊环境下长期使用才会发现的。一般情况下,在交付用户后都不应该有影响用户使用和体验的bug出现,万一在用户使用过程中发现了bug,应该迅速打补丁或升级软件。

下一篇:同花顺支持东方证券吗(同花顺东方证券和华盛通)
上一篇:次方百科(股票次方)
返回顶部小火箭