测试员有很多不同的背景,测试团队是多元化的集体,但是大多数人都同意:测试员的思考方式是不同的。怎么不同?有人说测试员是“消极”思维者。测试员会抱怨这种说法,认为自己喜欢征服,他们在报告坏消息时有一种特别的兴奋感。
这是—种普遍观点。我们提出另一种观点。测试员并不抱怨,他们提供的是证据。测试员并不喜欢征服,他们喜欢打破产品没有问题的幻觉。测试员并不喜欢发布坏消息,他们喜欢把客户从虚假信念中解放出来。我们的观点是,按测试员的方式思考意味着实践认识论。测试运用的是认识论,不是靠傲慢或谦卑。
本章旨在把测试员的大脑开发成,经过仔细调谐的推理机器。请记住:要用精神力量做好事,而不做坏事。经验1,测试运用的是认识论:看到这个题目会说:嘿,回来!我们在这里不是要讨论对电影明星的新崇拜。请相信。认识论是能够帮助测试员更好测试的一个哲学分支。认识论研究如何认识所了解的东西:研究证据和推理。这是科学实践的基础。研究认识论的人有科学家、教育家和哲学家,当然还有精英级的软件测试员。学习认识论的学生研究科学、哲学和心理学,目标是了解怎样才能改进我们的思维。我们使用的术语比经典定义要宽,以便能够更多地利用批评性思维的最新成果。将认识论运用于软件测试,要问与以下类似的问题:O怎么知道软件足够好?O如果软件并不是足够好,怎样才能知道?O怎么知道已经完成了足够的测试?苏格拉底早在年前就提倡并描述了对信念的批判性观察,因此我们把他看作是最早的认识论者。直到今天,哲学家、科学家和心理学家都还在继续研究认识论。作为测试员,这就是我们的遗产。经验2,研究认识论有助于更好测试:直接与软件测试有关的认识论问题包括:O如何收集和评估证据。O如何进行有效的推论。O如何使用不同逻辑形式。O拥有合理的信念意味着什么。O形式和非形式推理之间的差别。O非形式推理的常见谬误。O自然语言的含义与模糊性。O如何做出好的决策。从来也没有研究过这些问题的很多人也能测试得很好,但是如果要做得比很好还好,就要研究这些问题。研究认识论可帮助测试员设计有效的测试策略,更好地意识到自己工作中的错误,理解自己的测试能够证明什么、不能证明什么,并编写出无懈可击的测试报告。以下是三本具有很高可读性的入门书:O《批判性思维的工具:心理学的元思想》(ToolsofCriticalThinking:MetathoughtsforPsychology)(Levyl)。这本书是针对精神病医生写的,但是对测试员也很有用。书中每一章都是有关更好思维的不同思想。不一定把它全读完,可以挑选任何一章阅读。O《思考与决策》(ThinkingandDeciding)(Baronl)。这是讨论思维世界的一本可读性很高的普通教科书,是很好的入门书。O《研究的技巧》(TheCraftofResearch)(Booth、Colomb和Williams)。这是一本有关批判性阅读和写作的很好的书籍,包括如何组织有说服力的论据。主要针对大学生读者。经验3,认知心理学是测试的基础如果说认识论告诉我们的是应该怎样思考,那么认知心理学告诉我们的是我们是怎样思考的。与测试有关的一些问题包括:O人的感觉和记忆可靠性。O信念从哪里来。O信念如何影响人的行为。O做出决策所使用的偏见和捷径。O如何了解并分享所知道的信息。O如何考虑复杂事情。O在压力下如何思考。O如何识别模式。O如何把想法和事物分类。O如何注意事物之间的差别。O记忆事件中的失真。O如何重新构建部分记忆的事件(例如不可再现的程序错误)。从来也没有研究过这些问题的很多人也能测试得很好,但是如果要做得比很好还好,就要研究这些问题。研究认知心理学有助于理解影响测试员工作成绩的因素,以及影响人们解释自己工作方式的因素。开始研究认知心理学,不能不看《旷野中的认知》(Cognitioninthewild)(Hutchins)。Hutchins研究海军航海团队,以及他们怎样协同工作。这本书的很多内容也都与软件项目和测试团队有关。有关思考心理学的一本有用的书是《理论与证据:科学推理的能力的开发》(TheoryandEvidence:TheDevelopmentofScientificReasoning)(Koslowski)。在这本书中,Koslowski研究了人们如何使用因果关系理论进行系统推理。这可以解释为什么测试不只是查看外部行为,并对照简单的预期描述进行检查。经验4,测试在测试员的头脑中优秀测试和平庸测试之间的差别在于测试员如何思考:测试员的测试设计选择,解释所观察到的现象的能力,以及非常令人信服地分析描述这些现象的能力。测试的其他工作大部分是一般的办公室工作。如果看到两个测试员并排工作,不一定能看出谁的测试更好。他们工作中能够看得到的部分外表相同,这说明:O很多人认为测试很容易,因为可以很容易地模仿优秀测试员的外表看得到的行为,并且他们没有好的测试的其他标准。O如果要成为优秀测试员,就要学会像优秀测试员那样思考,而不是模仿他们的行为。经验5,测试需要推断,并不只是做输出与预期结果的比较流行的观点认为,测试员只是执行测试用例,并对照预期结果比较执行结果。这种观点把测试看作是简单的比较活动,没有看到一些聪明人必须设计测试,并确定预期输出。想想看,测试设计人员几乎从来没有得到过应该测试什么的权威指导,更不要说应该期望什么了。可以得到的指导是要解释的主体。在现实生活中,大多数测试设计都是基于推断,或基于与测试员的推断有关的经验。不仅如此,这些推断还要随时间发生变化。像测试员那样思考,就是要掌握探索式推断的艺术。探索式推断听起来可能像是奇怪的想法,这意味着要以一种不能事先预测的方式,通过一种思想引出另一种思想,然后再引出下一种思想。有关探索式推断的一本很好的书是《证明与反驳:数学发现的逻辑》(ProofsandRefutations:TheLogicofMathematicalDiscovery)(Lakatos,)。关于这本书需要注意的是,Lakatos如何说明数学和科学推理过程是探索式的,而不是脚本化的。甚至数学家也是积极探索地推理,而不是通过运用枯燥的公式。他们像测试员那样思考!经验6,优秀测试员会进行技术性、创造性、批判性和实用性地思考各种类型的思考都要考虑测试的实施。但是我们认为需要提出四种主要思考:O技术性思考。对技术建模并理解因果关系的能力。这包括诸如相关技术事实的知识和使用工具并预测系统行为的能力。O创造性思考。产生思想并看到可能性的能力。测试员只能以能够想象得到的方式进行测试,只能寻找猜想会存在的问题。O批判性思考。评估思想并进行推断的能力。这包括在自己的思考中发现并消除错误的能力,将产品观察与质量准则关联起来的能力,以及针对特定信念或所建议的行动过程构建有说服力的测试用例的能力。O实用性思考。把想法付诸实施的能力。这种能力包括诸如运用测试工具,并使测试手段和力量与项目范围适应的技能。总之,像测试员那样思考,会最终导致相信事物可能不像外表看起来那样。不管事物是怎样的,都可能有差别。我们发现,当测试过程以最具破坏性的方式失败时,根本原因最有可能是视野狭窄。换句话说,这不是运行了一万个测试,而本来应该运行一万零一个的问题;问题是没有想象出测试的总体大纲,没有做即使有两倍时间和资源也不会做的测试。经验7,黑盒测试并不是基于无知的测试黑盒测试意味着产品内部知识在测试中不起重要作用。大多数测试员都是黑盒测试员。为了做好黑盒测试.就要了解用户,了解他们的期望和需要,了解技术,了解软件运行环境的配置,了解这个软件要与之交互的其他软件,了解软件必须管理的数据,了解开发过程等等。黑盒测试的优势在于测试员可能与程序员的思考不同,因此有可能预测出程序员所遗漏的风险。黑盒测试强调有关软件的用户和环境知识,这一点并不是所有人都喜欢的。我们甚至把黑盒测试描述为基于无知的测试,因为测试员自始至终都不了解软件内部代码。我们认为这反映出对测试团队角色的根本误解。我们不反对测试员了解产品的工作原理。测试员对产品了解得越多,了解产品的方式越多,越能够更好地测试它。但是,如果测试员主要