
软件缺陷是软件魔力上的瑕疵。在我们尽情挥洒软件,解决越来越困难和关键问题的时候,我们也必须仔细研究软件哑火失效的情况,这可以把软件缺陷的瑕疵变得最小,同时减少它带来的副作用。

定义
探索式测试是1983年Cem Kaner提出的。这是一种强调个人自由与责任的测试方法,让独立测试人员可以借由不断的学习来改善测试的规划和测试的执行。
探索式测试我们可以理解为被测软件,设计测试用例、执行测试三部分同时进行。它完全抛开了传统测试中的流程和前期准备工作,在测试时可以利用被测软件提供的信息自由发挥。
探索式测试乱中有序。执行探索式测试的人员需要丰富的经验,对测试程序有足够的判断力,哪些功能区域有可能存在问题,哪些关联的设置有可能导致程序失败。在测试某个特性或某个范围中的特性时,思路必须清晰,明确使用的测试方法。
探索式测试并不是完全没有测试文档,与传统测试在测试计划里先预先编好测试文档不同,它的测试结果、测试用例和测试文档都会在运行测试时创建,这也是跟踪问题所需要的,最后给出测试报告。
方法简介
探索式测试有两种指导方法,他们都可以帮助测试人员做具体的决策,一种称为局部探索式测试(exploratory testing in the small),它辅助测试人员在测试过程中即使作出决定。另一种称为全局探索式测试(exploratory testing in the large),它用于帮助测试人员设计整体测试计划和测试策略。
局部探索式测试
测试人员的大部分工作都可以用“变化无穷”来形容。测试人员必须决定,具体使用哪种输入方式,选择哪个菜单选项,每一个输入字段中输入那些字符。理论上可以说,运行任何一个测试实例,都需要测试人员在测试期间做出几百个这样的选择。
探索式测试可以帮助测试人员在这种情况下做出明智的选择,当测试人员在面临前述选择时,如何使用探索式测试的策略,这个就称之为局部探索式测试,因为这里所做的决定基本上是针对局部小范围的。
局部探索式测试主要分为5个部分
以上5个部分在传统测试中也是必须要关注的信息。即使5个部分分开来考虑,在资源有限的情况下,任何一个问题都不可能被彻底解决。如果把它们放在一起,整个测试过程更会变的繁杂无比,根本无从下手。辛运的是,对于如何解决这类问题已经有很多很好的指南。如下图:

全局探索式测试
对测试而言,不仅仅是必须对所有这些细节做出正确的抉择,还有更多的东西。在所有的细节问题都解决之后,我们需要一个综合的测试集,该测试集用来确定软件是否已经满足正式发布所需达到的质量标准。在同一时刻,完整运行这个综合的集中测试的所有测试所带来的价值,比单独运行它们大得多。这是因为各个测试用例之间都是相互有联系的,每个测试用例都是测试集的一个有机组成部分。加入测试集的每一个新的测试用例,都应该把测试集变得更完善,这种提高是本质上。
全局探索式测试又称为漫游测试,它将测试人员比作游客,被测软件比作旅游地。旅游地可被划分为各种区域,例如商业区、娱乐区等。同样的,被测软件也划分为多个重叠的“区域”。如图所示:

在一个城市,商业区意味着早晚拥挤的交通,上班时紧张高效的工作,下班后的悠闲社交。商业区里有银行、办公楼、小餐馆和各类商店。对软件来说,商业区同样指的是“在那里完成实际业务”,它位于软件的启动及关闭代码之间,并包含用户所要使用的软件特性和功能。“商业区”就是软件包装盒上描述的那些特性,还包括市场商业活动中或者销售演示中的各种特性和实现这些特性的程序代码。
许多城市有历史古迹或者曾经发生过某些历史事件。旅游者喜欢探秘,对过去发生的事情兴致盎然,这使得历史区非常受欢迎。对于软件来说,它的“历史”就是它从前版本遗留下代码(legacy code),还有那些曾经出现较多缺陷的特性和功能。正如真正的历史,遗留代码通常难以理解,包含修改或使用遗留代码时,通常需要我们做出很多假设。对这个区域进行测试的目的就是测试遗留代码。
许多城市设有只有旅游者才去的区域。本地人会避开这些拥挤的地方,软件也类似,有些特性和功能对对新用户非常有吸引力,然而老用户不再使用它们。
当旅游者游览了所有景点和名胜古迹之后(或者精疲力竭之后),一些不需要费脑筋的休闲娱乐,可以用度假的方式来消磨时间。软件也同样有这样的辅助特性和功能,适用于娱乐区的测试法可以用来测试这些功能,还可以补充其他区域中各种测试的不足,使得测试计划更加完善。
任何目的地城市都需要为旅游者提供晚上休息的地方,让旅游者从一天的繁忙中恢复体力,或者让他们在天气不好时有地方休息。我们会看到,当软件“休息”时,它实际上还是非常忙碌。适用于旅馆区的测试法就是要测试软件的这种特性。
破旧区是那些不吃香的地方,很少有旅游手册或者旅行社会谈及它们。这些地方有很多行违法乱纪之事的人,尽管它们也吸引了某些游客,但是最好还是少去为妙。可是破旧区对测试人员来说是必须要去的,因为这里可能存在非常令人讨厌的缺陷。
对于软件测试人员来说,这种分割只是从逻辑上划分了被测程序的特性,可以根据被测程序的运行路径,根据不同的测试意图按顺序执行这些特性。
优势分析
局部探索式测试辅助测试人员在测试过程中即时做出决定,全局探索式测试帮助测试人员思考整体测试计划和测试策略。全局与局部结合,即覆盖了面,又关注了点。
探索式测试较传统测试最大的优点是灵活、高效。传统测试是依据测试计划进行,自由发挥程度较小,探索式测试计划与测试同时进行,需要及时调整思路或方法,在发现重大问题方面表现极佳。
总结
探索式软件测试是一种思维方式,由于探索式软件测试没有固定模式,灵活,形式不一,对测试人员来说是个很大的挑战,需要测试人员不断提高自身素质,积累经验。将测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目中并行地执行。最后引用Gerald M.Weinberg在《完美软件》一句话:并不是只有把软件运行起来敲敲点点才叫测试,任何的文档、流程,甚至是人们对软件的理解,都是可以测试的对象。
- END -





