这个问题很多人问过,也有很多人回答过,我非常赞同来自Michael Bolton的以下观点和建议(不过有一点补充,参见:做一个海盗派Tester),欢迎讨论。
批判性思维
对于一个测试人员,最重要的技能之一就是批判性思维。
批判性思维是对思考自身的思考,目的是不再被愚弄。批判性思维是一种训练,检查事物,并且质疑我们对它的理解:哪些部分可能是不完整的;哪些部分可能是错的;哪些部分可能不能分享给其他人;哪些部分可能是暂时的,会随着时间发生改变。
优秀的测试人员批判性地思考他们正在测试的产品。开发人员和管理者更倾向于用正面、乐观的眼光来看待产品。测试的关键目标之一是识别风险,指出乐观和自信是没有依据的。为了做的更好,测试人员必须学会质疑产品,以及关于产品,人们声称或者所相信的观点。可以传授这种技能,更可以学会这种技能。学习批判性思维需要研究、培训、辅导、支持,最重要的是练习。
【建议】开始研究并培训批判性思维。从以下参考开始:
· Kahneman, Daniel. Thinking, Fast and Slow. Penguin, 2011 (中译本为《思考,快与慢》,吐血推荐)
· Levy, David A. Tools of Critical Thinking: Metathoughts for Psychology. 2nd ed. Waveland Pr Inc, 2009
· Baron, Jonathan. Thinking and Deciding. 4th ed. Cambridge University Press, 2007.
Test Framing
Test Framing是一种技能,来创建一条用于组织和描述测试的逻辑。Framing帮助测试人员巩固目标和测试之间的连接,至上而下地解释测试结果。Framing与缺陷辩护的技能相关(参见:http://www.developsense.com/blog/2010/09/test-framing/)。优秀的Test Framing也可以帮助组织成本和价值的选择;何时停止或加强某些活动;应当实现的自动化程度。
【建议】阅读,讨论并且开发关于Test Framing中的想法。
系统思维
Gerald M. Weinberg将一般性系统思维(GTS)称为“简化的科学”,一种采用高度整体的方式,思考系统组成,及其关联和影响的方法。GTS是一种通用的科学技能,同时也是一种测试技能。GTS的技能是核心的测试技能,包括但不限于:Framing,建模,因子分解,观察,以及聚合。一般性系统思维的详细描述超出了本报告的范围。
【建议】研究和培训一般性系统思维。参见:
· Weinberg, Gerald M. An Introduction to General Systems Thinking. Dorset House, 2001
· Weinberg, Gerald M., and Daniela Weinberg. General Principles of Systems Design. Dorset House, 1988
· Meadows, Donella H. Thinking in Systems: A Primer. Chelsea Green Publishing, 2008. (中译本为《系统之美—决策者的系统思考》,严重推荐)
科学思维
科学思维位于系统思维和批判性思维的交点。科学技能包括:
· 提出正确的问题
· 观察发生的事件
· 正视复杂性
· 描述你的理解
· 批判性思考:识别和管理偏见
· 设计假设和试验
· 尽管已经“知道”,保持思考
· 分析其他人的思考
· 将“事实”视为不过是“现在我们认为我们知道的事物”
但是,非常重要的是,我们需要认识到科学也是一种人类活动,受限于人类的错误认知和社会复杂性。
软件测试的少数特征要求科学的、仪器化的、量化的工作,类似于物理学。其他方面则需要社会学方法和定性分析。
【建议】阅读和讨论Kaner的《Software Testing as a Social Science》,以及其他关于科学的论述。参见:
· Simon, Herbert A. The Sciences of the Artificial - 3rd Edition. The MIT Press, 1996
· Popper, Karl. Conjectures and Refutations: The Growth of Scientific Knowledge. 2nd ed. Routledge, 2002
· Klahr, David. Exploring Science: The Cognition and Development of Discovery Processes. A Bradford Book, 2002
· http://www.cbc.ca/ideas/episodes/2009/01/02/how-to-think-about-science-part-1---24-listen/
聚焦风险
测试是通过配置、操作、观察和评估产品来学习和理解产品。优秀的测试不是关注测试用例的通过或失败,而是另一个问题:这里有问题吗?虽然发现问题普遍被认为是测试的目标,但是,测试人员应当聚焦于风险。
当存在这种可能,a)某人,b)承受损失、伤害或者烦恼,来自于,c)产品中的某个弱点,d)被某些威胁触发。所有四个因子都是风险故事的基本要素。对于测试人员而言,能够搜索风险,能够描述他们感知到的风险,这是非常重要的技能。
【建议】创建风险的分类表(有组织的列表)。从测试人员的经验、缺陷报告、技术支持人员,以及网上问题、开发人员、客户学会论坛、刊物、风险摘要(参见:http://catless.ncl.ac.uk/Risks)、竞争产品,等等来收集风险方面的意见。对于每一个项目,维护一张关键风险列表,基于它们来测试,并且报告风险覆盖。在询问中,保证测试人员聚焦于问题“是否有(潜在)的问题?”,而不是“这个测试通过/失败了?”