探索式测试定义
探索式测试介绍与应用

探索式测试简介与应用
1、什么是探索式测试? 探索式测试是一种自由的软件测试风格,强调测试人员同时开展测试内容学习、
测试设计、测试执行和测试结果评估等活动,以持续优化测试工作的推进与评估(与发散
测试、自由测试不同,主要在指导思维角度上有区别)。
1983年Cem Kaner博士提出。
7、其它中途停止方式
中间可能 发生事件
1、 断网 2、权限变更3、服务停止云4、磁盘满 5、方式变更
6、视频来源变更7、服务暂停时8、其它中途停止方式
认证是否成功
中间可能 发生事件1、 无网
2、发出的请p
探索式测试简介与应用
谢谢!
探索式测试简介与应用
5.2、回放功能使用上述测试框架的示例
回 放 _测 试 点 设 计 .bmp
探索式测试简介与应用
5.3、某个WEB项目大量使用此方法的发现缺陷分布
探索式测试简介与应用
5.4、IPC的试验
探索式测试简介与应用
5.5、IPC的试验初步分析
探索式测试简介与应用
5.6、IPC的效果如何?
5、在测试用例设计阶段。
根据历史缺陷常见 测试方法发现集
结合传统测试方法 构建测试用例方法
设计集
根据测试用例设计 反复优化 集,设计用例
统计测试仪用例设 计集发现的缺陷与
漏测情况
形成稳定测试方法 框架,并推广使用
探索式测试简介与应用
5.1、一个结合传统测试方法与探索式测试方法的测试框架
web_测 试 方 法 框 架 .bm p
据他在书中传说微软、以及Google的测试团队目前已大量采用这种系列当中的测 试方法。
国内,史亮著有《探索式测试实践之路》一书(此人在微软工作,目前)
探索性测试在功能测试中的应用

探索性测试在功能测试中的应用功能测试是软件开发过程中不可或缺的一环,旨在验证软件是否满足规格说明书中规定的各项功能要求。
然而,在传统的功能测试中,由于测试人员主要关注于已知的功能点,往往容易忽略一些潜在的问题。
而探索性测试(Exploratory Testing)则是一种适用于功能测试的补充方法,可以帮助发现更多的潜在问题以提升软件的质量。
一、什么是探索性测试探索性测试是一种以自由和灵活的方式进行的测试活动,测试人员在测试过程中不仅关注已知的功能点,还通过探索和试错的方式发现新的测试点。
这种测试方法注重测试人员的直觉和经验,通过不断的实践来逐渐发现潜在的问题。
探索性测试的目标不仅限于找出缺陷,更重要的是以用户的视角去评估软件的可用性、易用性和性能等方面。
二、探索性测试的优势1. 发现潜在问题:通过探索性测试,测试人员可以从不同的角度和场景出发,去发现一些传统功能测试中容易被遗漏的潜在问题。
2. 适应变化:探索性测试可以应对需求变更的情况,当需求发生变化时,测试人员可以根据新的需求进行进一步的探索和测试,确保软件的适应性和可靠性。
3. 优化测试计划:通过探索性测试,测试人员可以根据实际情况根据重要性和风险程度对测试进行调整,优化测试计划和资源分配,提高测试效率。
4. 提高测试人员的技能:探索性测试依赖于测试人员的直觉和经验,通过实践不断提升测试人员的技能水平,使其成为专业的测试从业者。
三、探索性测试的实施步骤1. 确定测试目标:在进行探索性测试之前,首先需要明确测试的目标,这可以是要测试的功能点、用户故事或者重要的业务场景。
2. 制定测试策略:在进行探索性测试时,测试人员需要制定相应的测试策略和测试方案,包括测试的范围、测试的方法和技巧等。
3. 执行测试:测试人员按照测试策略进行测试,通过尝试不同的输入、操作和数据,发现可能存在的问题并记录下来。
4. 总结和评估:测试人员对测试过程进行总结和评估,分析测试的结果和发现的问题,并形成测试报告和改进建议。
软件测试中的创新方法有哪些

软件测试中的创新方法有哪些在当今数字化快速发展的时代,软件质量成为了企业成功的关键因素之一。
而软件测试作为保障软件质量的重要手段,也在不断地演进和创新。
为了更好地发现软件中的缺陷,提高测试效率和质量,各种创新的测试方法应运而生。
一、探索性测试探索性测试是一种强调测试人员的主观能动性和创造性的测试方法。
在这种测试中,测试人员并非按照预先编写好的详细测试用例进行操作,而是在对软件系统有一定了解的基础上,通过不断地探索和尝试来发现潜在的问题。
探索性测试的优势在于能够快速地发现那些在传统测试方法中容易被忽略的缺陷。
测试人员可以根据自己的经验、直觉和对业务的理解,灵活地选择测试路径和操作方式,从而更好地模拟真实用户的使用场景。
例如,在测试一款新的电商应用时,测试人员可以像普通用户一样随意浏览商品、添加购物车、进行结算等操作,在这个过程中观察软件的反应,发现可能存在的界面布局不合理、流程卡顿、数据异常等问题。
二、基于模型的测试基于模型的测试是通过建立软件系统的模型来生成测试用例。
这些模型可以是状态机模型、流程模型或者其他形式的抽象模型。
利用模型生成测试用例的好处在于能够覆盖更多的边界情况和复杂的逻辑组合。
模型可以帮助测试人员更清晰地理解软件系统的行为和结构,从而有针对性地设计测试用例,提高测试的覆盖率和准确性。
比如,对于一个在线银行系统,可以建立一个关于转账流程的模型,包括输入金额、选择账户、确认操作等步骤,然后根据这个模型自动生成大量的测试用例,来验证转账功能的正确性和稳定性。
三、众包测试众包测试是借助广大的互联网用户群体来进行软件测试。
企业将测试任务发布到专门的众包平台上,吸引众多的志愿者参与测试。
这种方法的优点在于能够在短时间内收集到大量的真实用户反馈和测试数据。
不同背景和使用习惯的用户可以发现各种不同类型的问题,从而帮助开发团队更好地了解软件在实际使用中的表现。
例如,一款新的手机游戏可以通过众包测试,让成千上万的玩家在不同的设备和网络环境下进行试玩,快速发现游戏中的兼容性问题、性能瓶颈以及用户体验方面的不足之处。
探索式测试..

二、探索式测试的特点及定义
3、探索式测试的指导方法
(1)局部:帮助测试人员在测试过程中作出即时决定
(2)全局:帮助测试人员设计整体测试计划和测试策略 (3)混合:采用给场景注入变化的方法。混合是指探索式测试与脚本测 试的结合
三、局部探索式测试
1、概述:测试人员在测试中了解各种可以变化的东西,就可以更好的进行
6、运行环境
各种硬件及软件环境
第二讲 全局探索式测试
全局探索性测试可解决的问题 探索式测试的目标 漫游测试方法
一、全局探索性测试可解决的问题
1、设计测试用例的策略? 2、单独的测试用例应覆盖软件的哪些功能? 3、哪些功能应放在一起测?
4、先测哪些,后测哪些?
5、使用什么策略,使多个测试人员的工作不重叠,相辅相成?
(2)地标测试法:在结构化测试场景中常用
(3)极限测试法:挑战软件,让软件最费力 (4)强迫症测试法:重复
二、混合探索式测试方法 – 漫游测试
(5)深巷测试法:卖点测试法的变种。加入最不可能用到或最没用的功能
到场景
(6)通宵测试法:自动功能重复执行 (7)破坏测试法:有意义的破坏 (8)收藏家测试法:记录所有观测到的输出,越多越好 (9)超模测试法:关注界面。正确位置、可用性、设计、屏幕刷新 (10)配角测试法:最近邻居测试法 (11)取消测试法:按钮、Esc、其他
不关心功能或功能间是否相互作用,只测试界面
三、漫游测试方法 – 旅游区
(4)测一送一测试法
同时运行同一应用程序的多个拷贝的情况。可能因为读写同一文件而
相互影响 (5)苏格兰酒吧测试法 适于大规模的复杂应用程序。这些应用程序很多地方,需事 旅馆区
探索性测试(ExploratoryTesting)概述

探索性测试(ExploratoryTesting)概述在敏捷测试(Agile testing)中,探索性测试是作为⼀个重要组成部分⽽出现的,把“对系统的探索”和“对系统进⾏测试”结合在⼀起,敏捷测试可以利⽤探索性测试达成“敏捷”的⽬标。
探索性测试并不是⼀个最近才被提出来的测试技术,也不是⼀种很深奥的技术——事实上,许多测试⼯程师在⾃觉或不⾃觉地使⽤这种技术。
那么,究竟什么是探索性测试呢?对探索性测试的理解本⾝会存在⼀些争议,因此,很难给出探索性测试的准确定义,不过,⼀般来说,探索性测试具有这样的⼀些特点:1、探索性测试强调测试设计和测试执⾏的“同时”性——这个“同时”是相对于传统软件测试过程中严格的“先设计,后执⾏”来说的;2、测试⼯程师通过测试来不断学习被测系统;3、探索性测试的重点是创造;探索性测试的出发点是“测试者如果没有真正使⽤过系统,就不可能真正理解和掌握系统,也就不可能真正有效地测试该系统”,相信所有有过测试实践的测试⼯程师都会承认这⼀点,确实,在我们没有接触到⼀个真正的系统之前,很难完全认识到这个系统,虽然可以在测试计划阶段按照需求或是设计的要求写出测试⽅案和⽤例,但总觉得这些⽤例不可能具有太强的可操作性。
事实上,探索性测试给出的另⼀个测试的思路:“如果我们可以在对系统的测试中逐渐深⼊地学习系统,测试是否会更加有效率?”在我看来,这个问题的答案是显然的,如果测试⼯程师能够在测试中对系统越来越深⼊地了解,那么,利⽤这些逐渐增加的了解,⾃然可以让测试变得更加有效率。
探索性测试只是⼀种⽅法和思路,并不是⼀个确定的过程。
因此,在使⽤探索性测试时,⽆法回避的是When的问题,也就是说,在什么时候进⾏探索性测试更加有效呢?我的答案是“在你认为合适的时候”:)因为,探索性测试可以针对不同的测试层⾯,例如,针对业务场景的探索性测试、针对功能点的探索性测试,甚⾄是头脑风暴式的探索性测试,都能够在测试中发挥积极主动的作⽤。
探索性测试---《探索式软件测试》知识点汇总

2.深巷测试法:建议测试人员应该测试该使用情况列表中排在最下面的几
项特性。尝试将最流行和最不流行的特性放在一起混着测试。
漫游测试-旅馆区
当软件“休息”时,它实际上是非常忙碌的。
1.取消测试法:对提供取消选项的功能,或需要长时间才能完成的功能进 行取消操作。
2.懒汉测试法:做尽量少的工作。比如接受所有默认值,尽可能少填数据
性和功能。 3.旅游区:对新用户非常有吸引力,而老用户不再使用的特性和功能。 4.娱乐区:一些辅助特性和功能,用于精疲力竭之后的休闲娱乐。 5.旅馆区:当软件“休息”时,它实际上是非常忙碌的。
6.破旧区:很少被谈及的功能,可能存在非常令人讨厌的漏洞。
漫游测试-商业区
软件包装盒上描述的那些特性,及市场商业活动中或者销售演示中的各种特性。
测试实践
**项目或产品: 指南测试法:依据需求文档+原型设计,熟悉软件。 地标测试法:确认关键软件特性。
超模测试法:UI测试。
恶邻测试法:关注bug数多的模块或相关开发。 反叛测试法 :数量、税率、金额等字段。 取消测试法:各种参照。
谢谢大家!
1.指南测试法:通过阅读用户手册或需求文档等,严格遵照文档的建议执 行操作。热门区域(干净安全)-主要特性(实用可靠)
2.卖点测试法:热门景点一定有其吸引人的理由,同样,软件吸引客户的
特性就是卖点。 3.地标测试法:通过指南测试法和卖点测试法,确定关键的软件特性,也 就是地标。选完地标后,确认顺序。 4.极限测试法:向软件提出很多难以回答的问题。
等。
漫游测试-破旧区
很少被谈及的功能,可能存在非常令人讨厌的漏洞。
1.破坏者:试图利用每个可能的机会机会暗中破坏应用程序。 2.反叛测试法:要求输入最不可能的数据,或者已知的恶意输入。
探索式测试与场景测试

探索式测试与场景测试探索式测试(Exploratory Testing)和场景测试(Scenario Testing)是软件测试领域中常用的两种测试方法。
它们在测试过程中发挥不同的作用,并能够有效提高软件质量和用户体验。
本文将探讨探索式测试与场景测试的特点、优势以及如何应用于软件测试中。
一、探索式测试的特点与优势探索式测试是一种灵活的测试方法,没有预先制定的测试脚本或测试用例。
测试人员根据自己的经验和直觉,在软件中自由地“探索”各种可能的测试路径和测试场景。
探索式测试的特点如下:1. 灵活性:探索式测试没有严格的测试计划和预定的测试步骤,测试人员可以根据自己的判断进行测试,适应各种不同情况的需求。
2. 自由度:测试人员有更多的自由度来选择测试的重点和方法,可以更好地发现潜在的问题和缺陷。
3. 实时反馈:探索式测试可以实时地反馈测试人员对软件的感受和体验,便于及时调整测试策略和重点。
探索式测试的优势在于能够检测到那些预定的测试用例无法覆盖到的问题,尤其是那些非明显的缺陷和潜在的风险。
它可以更好地模拟用户的实际使用场景,提高软件的用户友好性和可靠性。
二、场景测试的特点与应用场景测试是一种基于特定场景的测试方法。
测试人员通过构建典型的使用场景和使用流程,对软件在不同场景下的功能和性能进行测试。
场景测试的特点如下:1. 重现性:通过特定的场景和流程,可以重现和模拟用户实际的使用情境,发现软件在不同场景下的潜在问题。
2. 可测性:场景测试可以明确测试目标和测试要求,有利于设计和执行测试用例,提高测试效率。
3. 多样性:场景测试可以涵盖多种使用场景和使用方式,能够全面评估软件的功能完整性和性能稳定性。
场景测试在软件测试中应用广泛,尤其适用于对特定功能或特定用户场景的测试。
通过构建符合实际需求的场景,可以准确地评估软件的性能表现和用户体验,发现潜在的问题并及时解决。
三、探索式测试与场景测试的结合应用探索式测试和场景测试具有相互补充的关系,可以相互结合以达到更好的测试效果。
探索性测试在软件测试中的应用

探索性测试在软件测试中的应用软件测试是保障软件质量的重要环节。
随着软件规模和复杂度的增加,传统的测试方法已经无法满足需求,因此,探索性测试作为一种灵活、高效的测试方法被广泛应用。
本文将介绍探索性测试的概念、原则以及在软件测试中的应用。
一、探索性测试的概念探索性测试是一种基于经验、直觉和洞察力的测试方法,它强调测试人员的主观能动性。
与传统的测试方法相比,探索性测试更加灵活,能够更好地适应不确定、复杂的测试环境。
探索性测试注重发现潜在的软件缺陷和问题,通过不断试错、学习和优化来提高测试效果。
二、探索性测试的原则探索性测试遵循以下原则:1. 自由探索原则:测试人员有自主权,能够灵活地选择测试方法和技术,不受约束。
2. 提前测试原则:探索性测试需要尽可能早地进行。
在软件开发的不同阶段,测试人员可以通过探索性测试及时发现问题,有助于提高软件质量。
3. 重点测试原则:测试人员根据软件的特点和风险,有针对性地进行测试,重点关注可能存在问题的地方。
4. 提高测试效率原则:探索性测试注重快速获取反馈和整合学习,不断调整测试方向和策略,以提高测试效率。
三、探索性测试在软件测试中的应用探索性测试在软件测试中有多种应用方式,主要包括以下几个方面:1. 缺陷探索:通过主观的测试技巧和经验,测试人员可以主动发现潜在的缺陷和问题。
他们可以通过随机输入、异常输入、边界值测试等方法,找出软件中隐藏的缺陷。
2. 功能探索:在进行功能测试时,测试人员可以通过探索性测试方法发现更多的功能和用例,以增强对软件功能的全面覆盖。
3. 用户体验探索:测试人员可以通过模拟用户的操作和行为,对软件的用户体验进行全面评估。
他们可以发现潜在的用户体验问题,如交互不友好、操作繁琐等。
4. 性能探索:测试人员可以通过模拟大规模用户同时访问、持续使用等场景,对软件的性能进行探索性测试。
他们可以发现潜在的性能问题,如响应时间慢、负载能力不足等。
5. 安全探索:测试人员可以通过主观地进行安全测试,在软件中寻找潜在的安全漏洞和风险。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 1章探索式测试的定义本章给出探索式测试的定义,然后介绍语境驱动测试的7条原则,最后回答一些有关探索式测试的常见问题。
1.1 什么是探索式测试探索式测试(Exploratory Testing )是一种自由的软件测试风格,强调测试人员同时展开测试学习、测试设计、测试执行和测试结果评估等活动,以持续优化测试工作。
考虑到它所具备的即兴发挥、快速实验、动态调整等特征,其思维方法可以追溯到软件开发的最初岁月。
作为一个技术术语,“探索式测试”是测试专家Cem Kaner 博士在1983年提出的,并受到了语境驱动测试学派(Context Driven Testing School 1)的支持。
Cem Kaner 、James Bach 和Bret Pettichord 合著的《软件测试经验与教训》[Kaner01]对语境驱动测试和探索式测试做了精要且深刻的论述。
测试专家James A. Whittaker 曾是Cem Kaner 在佛罗里达工学院(Florida Institute of Technology )的同事,后来1担任过微软测试架构师和Google测试总监。
基于在微软的工作经历,他撰写了《探索式软件测试》一书2,进一步扩展了探索式测试的测试方法。
探索式测试有丰富的内涵,Cem Kaner用如下文字定义了探索式测试的核心。
探索式测试是一种软件测试风格(Style),它强调独立测试人员(Individual Tester)的个人自由和职责(Personal Freedom and Responsibility),为了持续优化其工作的价值(V alue),将测试相关学习(Test-related Learning)、测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目过程中并行地执行[Kaner08]。
不妨将这段定义分成三个部分进行讨论。
首先,探索式测试是一种软件测试风格(Style),而不是一种具体的软件测试技术(如等价类划分、边界值分析等)。
作为一种思维方法(Approach),探索式测试强调依据当前语境(Context)选择合适的测试技术(Technique),而不局限于特定的测试技术。
测试人员可以在探索式测试中使用任何一种测试技术,也可以将探索式测试应用于任何测试阶段[Kaner09]。
在这种测试风格的指导下,涌现出了一批支持探索式测试的测试技术。
例如,James A. Whittaker在《探索式软件测试》中提出了一套基于系统化错误猜测和测试隐喻的“漫游测试”技术(该测试设计方法将在第3章和第4章中介绍),丰富了探索式测试的手段。
又例如,Jonathan Bach和James Bach发明了基于测程的测试管理(Session-Based Test Management)3,显著地提高了探索式测试在测试组织、汇报、交流和度量上的能力(该测试管理方法将在第8章中介绍)。
再例如,开发工具Microsoft Visual Studio 2010开始支持手工测试和探索式缺陷(Exploratory Bug)4,虽然相关功能略显单薄,但是它体现了软件行业对探索式测试的认可,2 /subject/4818689/3 /sbtm/4 /en-us/library/dd380763.aspx探索式测试实践之路2也表明探索式测试辅助工具和自动化将获得更多的重视与发展(第6章将介绍Visual Studio 2010的相关功能)。
因此,笔者认为术语“探索式测试”5有两层含义。
第一,其内涵是一种软件测试风格和思考方法,不拘泥于具体的测试技术;第二,其外延是一批在这种思考方法指导下发展出来的测试技术,包括测试设计方法、测试管理方法、测试辅助工具等。
为了避免混淆,本书使用“探索式测试”指代探索式测试风格和思考方法,使用特定的测试方法名指代具体的测试技术。
第二,探索式测试强调独立测试人员的自由和责任。
测试人员应该为个人和团队负责,调动所有能量,发挥人的灵活性,在整体上持续优化个人和团队的产出。
测试人员是软件企业的知识工人(Knowledge Worker)。
管理大师Peter Drucker 认为知识工人必须管理自己。
一方面,他建议知识工人自己确立工作目标(根据项目情况去做当前最有价值的工作),通过持续创新、持续学习、持续交流来优化其生产效率和产出质量。
另一方面,他建议企业信任员工,给予充分的授权,并将他们视为企业的资产加以持续投资[Drucker99]。
这两方面可以视为探索式测试对于员工与企业的潜在要求。
第三,探索式测试建议在整个项目过程中,将测试相关学习、测试设计、测试执行和测试结果分析作为相互支持的活动,并行地执行。
实际上,人脑难以并行地执行多项任务。
探索式测试旨在将测试学习、测试设计、测试执行和测试结果分析作为一个循环快速地迭代,以不断收集反馈、调整测试、优化价值。
5 Exploratory Testing通常被翻译为“探索式测试”或“探索性测试”。
本书的作者们选择“探索式测试”是因为这个术语强调了Exploratory Testing是一种测试风格和思考方式,符合该术语的核心思想。
此外,“探索式测试”在字面上与现有的测试术语(如功能性测试、安全性测试、兼容性测试等)有更大的差异,表明它是一种可以应用于任何测试活动的测试方式。
第1章探索式测试的定义 3⏹测试学习:学习任何可以指导测试的知识,可能要学习的内容包括行业背景、领域知识、技术平台、测试技术、产品缺陷、项目风险等。
⏹测试设计:安排测试计划,拟定测试策略,开发测试想法,制作测试支持材料。
⏹测试执行:执行测试并收集结果。
测试可以手工执行,也可以自动执行。
⏹测试结果分析:分析并解读从测试中学到的知识,可能的活动包括判定测试是否通过、理解产品实现、发掘风险区域、评估测试方法是否有效等。
在现实的软件项目中,穷举测试是不可行的。
任何测试都是采样测试,都存在投入测试资源却不能发现缺陷的风险。
随着项目的发展,测试的风险也在持续变化。
对此,探索式测试人员会在项目过程中,随时收集并判读测试情报,优化测试决策和设计,并将它们立即应用于测试执行,通过分析测试结果来评估开发状态和测试风险。
这样的循环有助于最大化测试价值,并降低软件项目的风险。
1.2 语境驱动测试7原则探索式测试的奠基人和积极实践者Cem Kaner和James Bach都支持语境驱动测试[Kaner12]。
语境驱动测试的7条基本原则对于正确理解并应用探索式测试具有重要意义,本节将予以简单讨论。
原则1:任何实践的价值都取决于其语境(Context)。
这条原则几乎是不言自明的。
中国人很早之前就有相似的认识,“南橘北枳”6指相同的种子在不同的环境中会结出不同的果实。
因此古人建议“因地制宜”7,即根据当地的具体情况,采用合适的措施。
然而,软件开发者往往会在无意中忘记这条原则。
开发团队会照搬以往的经6 语出《晏子春秋》,其成书于战国,后经西汉刘向整理。
7语出《吴越春秋》,成书于东汉。
探索式测试实践之路4验,却不考虑经验可能已经过时;会不假思索地采用他人建议的开发方法,却不怀疑南橘北枳的可能;会按照高层的指示亦步亦趋,却不思索指令是否合理。
更糟糕的是,在感觉到情况不妙后,却将错就错,不思变更。
因此,开发团队需要频繁地反思其开发实践是否符合当前的语境,并做出相应调整。
原则2:在特定语境下存在好的实践,但不存在最佳实践。
这条原则看似有些武断,毕竟软件研发已经沉淀出一批公认的实践方法,它们是现代软件开发必不可少的核心实践。
但是,细细一想便会发现这些方法也需要因地制宜。
“持续集成”是公认的最佳实践,但是不同的团队往往有不同的集成频率。
对于小型项目,一次签入(Check-in)会触发一次完整的构建;对于大型项目,开发团队可能每天做一次完整构建;对于超大型项目,做一次完整的构建可能需要几天甚至更长的时间。
不同的构建频率和构建代价自然会导致不同的签入策略和测试方法。
虽然都在实施“持续集成”,但是不同的团队会设计出不同的流程和方法。
对于测试工作者,这条原则表示任何一种测试方法(包括探索式测试)都不是无条件的最佳选择。
测试人员始终要评估当前情况,寻找适合当前语境的测试风格和技术。
原则3:人,在一起工作的人,是项目语境中最重要的部分。
这条原则强调了软件开发的社会学因素。
软件开发专家Tom DeMarco和Tim Lister指出:“本质上,我们工作中的主要问题,与其说是技术问题,不如说是社会学问题”[DeMacro99]。
而社会学因素的根源是“软件开发是一个创造与沟通的协作游戏(Game8)”[Cockburn07]。
在创造与沟通的过程中,一定是个体和他们的交互(Individuals and Interactions)起主要作用。
8 Game也可以翻译为“博弈”。
本书将其翻译为“游戏”是为了突出软件开发的乐趣、协作、沟通与互助。
软件开发团队的对手不是团队成员,而是亟待解决的问题。
第1章探索式测试的定义 5在软件测试中,以下观点反映了人的重要性。
⏹软件开发是具有挑战性的智力活动,开发人员(包括测试人员)的责任感、技能、状态将强烈影响软件实现和代码质量。
因此,招聘、培训、挽留高水平开发人员是软件企业最重要的工作之一。
⏹软件开发是一种创造与沟通的游戏。
软件企业应该营造一种开放、协作的工作环境,使得开发人员能够自如地去思考、去发明、去创造。
⏹软件测试的核心任务是寻找并传递信息。
在寻找信息的过程中,测试人员的能力和相互协作的水平将在很大程度上决定信息的数量和质量。
⏹软件测试提供信息服务。
服务就意味着有客户,测试人员是否成功,主要取决于是否很好地满足了客户的要求和最佳利益[Kaner01]。
也就是说,测试人员的重要任务是理解客户,并与他们展开有效的交流。
以上观点只涉及该庞大主题的一小部分。
笔者建议读者去阅读此领域的经典书籍(请参考本书附录中的“推荐阅读”)以获得更多见解。
原则4:项目的发展往往难以预料。
在一些语境中,项目的发展是可以预料的。
图1.1摘自Steve McConnell所著的《软件估算》,它显示了(对项目范围、代价、功能的)估算值是如何随着项目的进展变得准确的[McConnell06]。
随着时间的推移,项目的不确定性逐渐降低,当项目即将结束时,开发团队能够准确预期项目的结局。
但是,图1.1也提示了在项目的开始阶段,项目的不确定性非常高。
在初始概念(Initial Concept)阶段建立的估算值可能是实际值的4倍。
该原则并不是一个悲观的见解,相反它体现了一种实事求是的态度和对软件风险的成熟认知。
探索式测试有助于快速获得信息,从而降低软件项目的不确定性。
成功的测试团队在整个项目过程中会结合广度优先探索和深度优先探索,在特定的时间选择适合的方法,从而更明智地利用测试资源。