软件测试实战(微软技术专家经验总结)--第五章(测试技术)读书笔记

测试技术就是运行程序并判断其对错的具体方法。高效的测试要求测试人员根据软件产品和项目环境选择合适的测试技术,并灵活机动的运用。测试人员需要多样化的测试来调查复杂的软件,为了高质量的完成测试任务,测试人员需要在工作中持续学习测试技术,分析它们的长处、不足和适用情况,以逐渐完善自己的测试技术体系
5.1测试技术分类系统
该分类系统经过十几年的发展,比较成熟,对测试技术的理解和选择很有帮助。
测试技术从7个方面对测试过程进行指导:
范围:测试的对象。
覆盖:测试的程度。通常,测试人员会统一考虑测试的范围和覆盖。
测试者:由谁来执行测试。
风险:测试要去发现的潜在问题。
活动:测试如何执行。
评估和测试先知:如何评价测试是否通过。
结果导向:测试的目标。
任何测试活动都会涉及以上所有方面,而一个具体的测试技术通常只着力于其中的1-3项。为了应用测试技术,测试人员不但要知晓它解决了哪些问题,更要了解它没有解决哪些问题。
测试人员要多角度的考虑测试技术,选择适合当前任务的切入点去应用他们。利用测试驱动因素,Cem Kaner建立了一个六要素测试分类系统。
第一,基于覆盖的测试技术关注测试的范围和覆盖。典型测试技术如下:
功能测试;功能或特性的集成测试;漫游测试;等价类分析;边界测试;最佳代表测试;域测试;测试想法目录;逻辑表达式;多变量测试;状态变迁测试;用户界面测试;基于规格说明的测试;基于需求的测试;依从性测试;配置测试;本地化测试;
第二,基于测试者的测试技术关注谁来执行测试。
用户测试;Alpha测试;Beta测试;缺陷大扫除;专家测试;结对测试;内部测试;本地化测试;
第三,基于风险的测试技术关注潜在问题。
边界测试;快速测试;约束测试;逻辑表达式;压力测试;负载测试;性能测试;基于历史的测试;基于风险的多变量测试;可用性测试;配置和兼容性测试;互操作性测试;长序列测试;
第四,基于活动的测试技术关注如何执行测试。
游击测试;两因素组合测试;随机测试;用例测试;情景测试;安装测试;回归测试;长序列测试;猴子测试;性能测试;
第五,基于评估的测试技术关注如何判断测试通过
功能等价测试;数学先知;约束检查;自检验数据;比较已保存的结果;比较规格说明书或其他权威文档;可检验的状态模型;
第六,结果导向的测试技术关注于特定目标或文档。
构建检验;确认测试;用户接受测试;认证测试;
Lisa Chrispin和Janet Gregory从测试技术和产品开发的角度提出了敏捷测试四象限。
Q1:面向技术的、支持项目团队自动化测试,如单元测试、组件测试;
Q2:面向商业的、支持项目团队自动化和手工测试,如功能测试、样例、用户故事测试、原型、模拟;
Q3:面向商业的、考验产品手工测试,如探索式测试、情景测试、可用性测试、用户验收测试、Alpha和Beta测试;
Q4:面向技术的、考验产品的、使用工具的测试,如性能测试、负载测试、安全性测试、质量特性测试;
5.2启发式方法
人们在学习、发现、解决问题时所使用的一种基于经验的方法。测试实践者基于思考和经验提出了一批指导测试设计、测试执行和结果评估的启发式方法。启发式方法是语境依赖的,即一种启发式方法在某些环境中大获成功,却在另一些环境中不起作用。测试人员需要采用批判性思考来研究他所用的每项技术,知晓优点与不足,在实际测试中扬长避短。
实施方案:
1、尝试去解决一个问题。
2、分析问题和解决方案,识别出问题的特征和解决方案的模式。
3、深入研究所发现的模式,理解它所针对的问题,明确它的适用范围、基本假设、实施步骤、检查方法、优势与不足,从而获得精炼的、可用于实战的启发式方法。
4、命名该启发式方法。
5、在实际工作中,使用该启发式方法,并利用真实反馈来改进它。
5.3测试先知
所有测试都离不开测试先知,它是应用任何测试技术都需要考虑的环节。
5.3.1测试先知的定义
测试先知是一种识别潜在问题的启发式原则或机制。
1、测试先知的任务是识别潜在问题;
2、测试人员不能依靠单一的测试先知去判断测试是否通过;
3、测试先知本质是一种启发式方法,它提供了有效的检查策略,但不能发现所检查领域内的所有缺陷。
测试先知是识别缺陷的启发式方法。测试先知是识别缺陷的启发式方法测试人员需要从不同关系人角度,设计多个测试先知来考察软件的行为。在测试过程中,还需要持续关注并改进测试先知的有效性。唯有如此才能避免严重的缺陷遗漏。
5.3.2FEW HICCUPPS
测试专家Michael Bolton和James Bach提出的识别和运用测试先知的想法列表。
Familiarity(熟知):建议测试人员在产品中搜索他熟悉的缺陷模式。测试先知来自于典型的缺陷和以往的经验。
Explainablity(可说明性):产品应该容易理解,测试人员能够将它的行为向他人解释清楚。有两个好处:1、让测试人员从新的角度考察软件的功能;2、要求自己明确地解释软件的行为,可以暴露自身知识上的不足;
World(世界):建议测试人员用现实世界的常识去评估软件。常识是一个有价值的测试先知,拓展自己的知识面,多学习与软件和业务相关的知识。
History(历史):建议软件的功能与它的历史行为一致。当前的版本的功能应该与以往的版本一致,以保证用户的数据、技能、经验持续有效。有两个问题:1、历史版本可能包含错误,使用错误的测试先知可能掩盖长期存在的缺陷;2、测试人员可能被历史版本束缚了思路,而忽视了优化设计的机会。
Image(远景):要求软件的表现符合开发团队设定的期望。测试人员可以将精力集中在产品最有价值的属性上,有助于发现降低产品市场竞争力的严重缺陷。
Comparable Products(可对比的产品):建议测试人员使用相似产品作为测试先知来评测当前产品。通过对比相似的产品,测试人员可以较快地发现被测产品的问题。可以采取的策略:1、比较同一产品家族的其他应用;2、比较彼此竞争的产品;3、比较拥有相似功能的产品;4、比较功能简单、可靠性高的产品;5、比较期望取代的产品;6、比较公认的专业产品; 好的参照物可以提高测试效率,还能够增强缺陷报告的说服力。
Claims(声明) :要求产品满足项目文档关于其功能和质量的论述。常见的项目文档包括需求文档、规格说明、用户手册、广告文宣、营销资料等。
Users's Expecations(用户期望):建议测试人员站在用户的角度思考,以检查软件是否真正地为用户服务并达到了他们的期望。
Product itself(产品本身):要求产品所拥有的功能和使用模式彼此一致。
Purpose(意图):要求产品能够体察并服务于用户的意图。
Statutes and Standards(法规和标准):建议测试人员研究产品相关的法令法规、行业标准、合同约定、技术标准等强制性法规,用它们作为测试先知来指导测试设计和评估。
5.3.3约束检查
许多软件具有复杂的测试逻辑,测试人员很难直接判断其计算结果是否正确。根据产品的业务逻辑和实现策略,提出一组约束规则,用相对简单的规则去发现复杂计算的错误。
实施约束检查的经验:
1、用简单的程序去测试复杂的产品;
2、用海量的数据和启发式规则去发现失败案例,让测试人员做进一步调查;
3、测试人员用较少的时间构造测试程序,用较多的时间设计约束规则,分析失败案例,改进约束规则;
4、测试先知的构造不是一蹴而就的;
5、当约束规则集不能发现失败案例时,测试人员要考虑增加新的规则
测试人员从多个角度设计约束规则,典型测试设计策略:
策略1:基于数学性质的约束规则利用数学知识构造检查规则;
策略2:基于统计特性的约束规则利用被测对象的统计特性构造检查规则;
策略3:基于格式的约束规则检查数据符合特定的格式;
策略4:基于业务知识的约束规则使用领域知识来设计检查规则;
5.4漫游测试
漫游测试是在特定主题指导下对产品进行探索的一组测试方法。不同的漫游测试方法有不同的主题,侧重于探索产品的不同方面,其共同的特征是测试人员会游历产品空间,以尽力覆盖某类对象或发现某类错误。
Cem Kaner认为漫游测试是一种结构化的头脑风暴方法。漫游测试的重心是探索,而探索的核心价值之一是学习。在探索过程中,测试人员不但可以发现缺陷,还可以深入学习软件的业务规则和实现细节,从而提出更高效的测试策略。
5.4.1基本漫游方法
功能漫游;菜单和窗口漫游;鼠标和键盘漫游;业务漫游;错误消息漫游;变量漫游;数据漫游;采样数据漫游;文件漫游;结构漫游;操作模式漫游;序列漫游;声明漫游;文档漫游;价值漫游;市场处境漫游;用户漫游;配置漫游;互操作性漫游;兼容性漫游;可测试性漫游;风险识别漫游;极限值漫游;复杂性漫游;
5.4.2基于旅行者隐喻的漫游方法
基于系统化错误猜测,以旅行者为核心隐喻,提出了一组测试方法。他的方法关注特定的风险和缺陷,是一组基于风险的测试技术。
指南漫游;博客漫游;评论者漫游;竞争者漫游;卖点漫游;地标漫游;停车场漫游;知识分子漫游;找茬漫游;傲慢美佬漫游;深夜漫游;清晨漫游;快递漫游;垃圾车漫游;出租车漫游;出租车禁区漫游;恶邻漫游;博物馆漫游;先前版本漫游;配角漫游;后巷漫游;混合方向漫游;通宵漫游;收藏家漫游;超模漫游;孤单商旅漫游;测一送一漫游;苏格兰酒吧漫游;多元文化漫游;阵雨漫游;沙发土豆漫游;破坏者漫游;反叛漫游;敌对漫游;犯罪者漫游;歧路漫游;强迫症漫游;混票漫游;
5.4.3移动测试漫游方法
针对运行在移动设备上的软件,提出了一些移动测试漫游方法。
手势漫游;方向漫游;转向漫游;配件漫游;动作漫游;光线漫游;地点漫游;连通性漫游;天气漫游;对比漫游;声音漫游;组合漫游;一致性漫游;用户漫游;休息室漫游;低电量漫游;多屏幕漫游;资源漫游;情绪漫游;急迫漫游;
有些不足:
1、这些评测的主要形式是评测者坐在室内把玩手机,只包含很有限的移动场景,但是,用户使用手机的场景是丰富多样的。
2、这些评测会逐个分析智能手机的特性,如外形、屏幕、拍照、摄像、操作系统、经典应用等,有些评测还会逐项打分。但是,在真实环境下,用户往往会同时使用多个硬件特性,运行多个软件,让它们相互配合完成任务。
3、这些评测为了表现公正客观,刻意在形式上排除个人情绪的因素,但是,用户在使用智能手机时总是带有或强或弱的情绪。
为此,测试人员需要深入用户情景,去全面评估软件对用户的价值。
5.4.4实施漫游测试
测试人员学习漫游测试时,不但要了解具体的实施方法,还要体会漫游方法针对的问题,唯有如此才能选择合适的方法来测试产品。
选择漫游测试方法时,采取如下策略:项目早期,选择广泛漫游的策略(此时,测试重点是理解产品的远景和价值,建立功能之间联系,获得产品整体模型);随着项目发展,根据项目风险和已发现的缺陷,选择一些深入漫游的测试方法(此时,针对特定目标实施细致的测试);根据想要了解的信息,选择合适的漫游方法(此时,漫游测试是学习驱动的);根据想要缓解风险,选择合适的漫游方法(此时,漫游测试是风险驱动的);
本质上,运用漫游测试是一个动态的学习探索的过程,具体实施时,可以考虑如下策略:
利用测程实施漫游测试;利用测试发现,实施新的漫游;根据项目特征,提出自己的漫游方法;
5.5快速测试
快速测试是一种基于风险的测试方法,其特点是针对某种常见的软件缺陷,实施专项攻击,通常不需要大量的测试时间和产品相关知识。
测试人员使用测试想法列表检查列表来记录一组快速测试想法。以下是它们的主要优点:
测试想法列表和检测列表只记录了基本的测试手段和少量具体案例,因此篇幅较小,更容易编写和维护;实际测试时,测试人员根据列表可以设计出大量的测试用例,即列表指明了测试策略,而具体的战术则由测试人员来决定;许多具体的测试用例不会发现错误,因此无需记录在案;测试想法列表和检查列表可以复用于多个项目,使得投入在它们身上的测试资源有更好回报。
测试人员应该将快速测试与其他测试方法混合使用。
5.5.1James Bach的方法
快速测试方法:
快乐路径;中断;挖墙角;调整;狗刨;持续使用;功能交互;点击帮助;输入约束工具;疯狂点击;猛踩测试;错误消息后遗症;资源饥饿;多个实例;疯狂配置;廉价工具;
以上与5.4.2介绍的一些漫游测试方法很相似。对于测试人员而言,重新思考已有的测试方法,将它改造为适合新情景的新方法,是掌握测试并提高自身能力的必由之路。测试人员不应该单纯地接纳测试技术,应该分析测试技术的细节,理解工作原理,融入自己的经验和其他技术,以获得新方法。坚持这样的研究和发明将帮助测试人员走向精通之路。
5.5.2Cem kaner的方法
快速测试的方法:
用户界面;边界;溢出;计算和操作;初始状态;被修改的值;控制流;序列;消息;时序和竞态条件;干扰测试;错误处理;失败处理;文件系统;负载和压力;配置;多变量关系;
5.5.3James Whittaker的方法
他的测试名著“如何攻破软件“,以失败模型为基础,大部分都是快速测试方法,能够针对特定类型的缺陷实施便捷的攻击。
失败模式主要关注点是环境能力。环境是软件依赖的或影响的外部对象。能力是软件功能达成用户价值的手段。
James Whittaker建议测试人员先实施漫游测试,以识别软件界面,然后列出外部对象在该界面上可以执行的输入和观察到的输出。在掌握了软件的基本情况后,测试人员可以根据错误模型对软件进行测试。通过一个一个的测试方法,来测试整个软件。
攻击手段如下:
通过用户界面攻击软件的输入
尝试各种输入以触发软件的所有错误消息;强制让软件使用默认值;探索允许的字符集和数据类型;令输入缓冲区溢出;测试一组相关变量的取值组合;重复输入多次;
通过用户界面攻击软件的输出
强制软件对相同的输入产生不同的结果;强制软件产生不正确的输出;强制一个输出的属性发生变化;强制屏幕重新绘制;
通过用户界面探索存储的数据
针对一组变化的初始状态进行输入;强制一个数据结构容纳过多或过少的数据;发现可以修改数据的所有可行方法;
通过用户界面探索计算和功能集成
尝试非法的操作数和操作符的组合;强制一个函数递归调用自己;强制计算产生过大的结果或过小的结果;发现不能正确分享数据或彼此交互的功能;
通过文件系统实施基于介质的攻击:
耗尽文件系统的能力;强迫介质忙碌或不可访问;介质损坏;
通过文件系统实施基于文件的攻击:
让软件去产生非法的文件名;改变文件访问权限;修改或破坏文件的内容;
通过文件或操作系统进行攻击:
注入错误;
以上的介绍是一组典型的软件失败情景和相应的攻击手段。实际工作中,测试人员应该收集典型的缺陷,分析它的原因和症状,并设计相应的测试方法或启发式指导词。可以用一个框架来组织这些方法和指导词,并将成果分享给测试小组的其他成员。
5.6情景测试
情景测试将一个或一组情景作为测试方案,通过运行软件来排演这些故事,从而评估软件的行为。情景测试的主旨是从实际用户的角度考察软件在现实场景中的表现。情景测试通过较长的业务流程来测试软件的多个功能,从而评估软件对用户的价值,情景测试覆盖了多个功能,因此有可能暴露一些复杂的交互导致的错误。
5.6.1基本方法
基本要点和步骤如下:
编写情景测试的故事,像用户一样复杂地使用产品;准备测试时,尽可能模拟出用户的使用环境;在故事的指引下,积极地测试,并根据测试发现,即席设计并执行一些测试;测试人员提交缺陷报告,并记录需要再调查的区域和风险。
Cem kaner对于情景测试有长期且深入的研究。他提出,一个好的情景测试会具有如下特征:
基于连贯一致的故事;故事是可信的;故事是有推动力的;故事引入了复杂性;测试结果易于评估
情景测试能够超越简单的测试,深入地调查软件是否能够交付它应该交付的价值。情景测试有助于浓缩使用时间和用户经验,在较短的时间内模拟出资深用户的高级用法、困难使命和复杂语境,发现软件的深层次问题。
因为情景测试会覆盖多个功能,它要求被测试的功能比较稳定,较少出现阻碍故事推进的严重错误。
5.6.2设计用户角色
编写情景的方法和技巧:
构建用户角色:
利用头脑风暴,列出可能的用户角色;整理初始的用户角色,识别出目标和特征有重叠的用户角色;整合用户角色;提炼用户角色,定义具体的角色特征;添加角色的个人信息,如姓名、照片、脾气、处事风格等,令角色有血有肉;
根据用户角色,测试人员可以更流畅地设计测试故事,因为具体形象让测试人员能够快速入戏。在构思故事时,测试人员要围绕产品期望交付的价值,用故事去检查软件确实达到了它对用户的承诺。
除了用户角色,测试人员还可以访问实际用户,去获得实际故事。
除了正面角色,测试人员有时得考虑负面角色。
5.6.3情景测试与漫游测试
情景测试与漫游测试可以很好地配合与协作。测试方向上,情景测试使用故事作为指导,专注于用户的价值、任务和体验,而漫游测试的主题则更加多样,可以是一个启发式指导词、一个隐喻、一组需要覆盖的对象、一些需要调查的问题、一批产品风险等。组合使用,可以发挥各自长处,形成互补。
漫游测试时,结合故事丰富测试手段,典型的例子:
在实施用户漫游时,测试人员需要覆盖典型的用户情景;在实施价值漫游时,测试人员根据产品远景、需求文档、市场文宣等材料确定产品期望交付的一组核心价值,针对核心价值编写故事,检查软件达到承诺;在实施情绪漫游时,测试人员需要重点关注产品在不同用户情绪下的表现,以及它的行为对用户情绪的影响。
情景测试时,结合漫游丰富测试视野,典型的例子:
测试人员利用竞争者漫游来设计故事;情景测试可以利用快递漫游来追踪一个重要业务对象的生命周期;情景测试可以使用垃圾车漫游来覆盖一组对象。
5.6.4肥皂剧测试
肥皂剧测试是情景测试的特例,包括如下特征:
源于真实生活;夸张;浓缩;乐趣;
5.6.5虚拟业务
创建并运维虚拟业务是一项常见的测试方法。
可参考如下建议:
主题业务可以戏剧化;工作成果追求高品质;测试手段要多样化;业务数据要具有真实性;
虚拟业务是相对复杂的测试,往往需要测试小组投入大量的人力和时间。
5.7多样地选择测试技术
面对多种多样的测试技术,测试人员的任务是选择合适的技术应用于当前的项目。在测试执行时,测试人员会运用具体的产品知识,设计出更细致的策略。
优秀的测试策略有如下特征
产品相关:好的测试策略总是根据产品的特点进行有针对性的测试;
聚焦风险:测试人员需要分析项目环境、产品元素、质量要求等方面的潜在问题,让测试过程可以探测其中的重要风险;
多种多样:软件、业务和用户行为是最复杂的,任何单一的测试手段都存在盲点,测试人员需要综合多种差异化的测试手段,从各个角度考验软件;
讲求实用:测试策略受到测试使命、被测对象、测试资源等因素的影响和约束,测试人员要平衡各种因素,让测试策略可以充分利用现有资源,对项目做出尽可能大的贡献。
在有限的测试资源约束下,将多种测试执行到"足够好"的水平,要优于将一两种测试执行到完美水平。
测试专家敏锐地指出项目的第一个测试策略总是错误的。因为注定初始测试策略时,测试人员对产品和项目还缺乏足够的了解,往往会忽视某些重要的风险,未能安排恰当的测试活动。此外,测试人员应该积极利用迭代产生的信息来改进测试策略,通过这样的螺旋上升,测试质量会得到持续提升。
5.8小结
1、所有的测试活动都会涉及范围(测试对象)、覆盖(测试程度)、测试者、风险、活动(测试手段)、评估(测试先知)和目标7个方面。
2、一个具体的测试技术通常只讨论其中的1-3个方面,在实际使用中,测试人员还需要思考其他方面。
3、启发式方法针对复杂问题提出了一种简单的、较可能成功的解决思路。因为任何启发式方法都可能失败,测试人员需要综合使用多个启发式方法。
4、测试人员需要用批判性思考研究他所使用的每项技术,知晓它的优点和不足。
5、掌握一项测试技术需要"重新发明"它,即通过实践加入自身经验和项目特征,以获得新的方法。
6、测试人员可以针对重复出现的测试问题,提炼出解决方案的模式,建立自己的启发式方法。
7、测试先知是识别软件失败的启发式方法,它不能断定软件行为一定正确,只能检查软件运行是否发生特定错误。
8、测试人员需要从不同关系人的角度,设计多个测试先知来检查软件的行为。
9、漫游测试是在特定的主题指导下对产品进行探索,不但可以实施基于覆盖或风险的测试,还可以了解产品知识,提供更多的测试想法。
10、快速测试是一组针对特定缺陷的攻击方法,能够快速发现典型的问题。
11、情景测试利用一个或一组情景作为测试方案,对软件进行探索。好的情景测试基于连贯一致的、可信的、有推动力的、复杂的故事,且容易评估软件是否出错。
12、好的测试策略是与产品相关、聚焦风险、多种多样、讲求实用的。
13、测试人员应该参加多样化折衷原则,综合运用多种测试技术进行测试。
14、测试人员需要在测试迭代中调整测试策略和方法,以持续优化测试的价值。



猜你喜欢

转载自blog.csdn.net/zimingzim/article/details/80257838