什么是公理?在百度百科中可以查到:
所谓公理,就是经过人们长期实践检验、不需要证明同时也无法去证明的客观规律,释义如下:
1) 经过人类长期反复的实践检验是真实的,不需要由其他判断加以证明的命题和原理。
2) 某个演绎系统的初始命题。这样的命题在该系统内是不需要其他命题加以证明的,并且它们是推出该系统内其他命题的基本命题。
那么在测试领域是否也存在这样的客观规律呢?
我们看到,在不同项目的测试过程中,测试行为的差异如此巨大。在软件测试的七项基本原则中有一条“测试活动依赖于测试的Context”,也就是基于不同版本的应用目标、复杂程度、质量要求以及人员成熟度等等因素,每个测试过程都会有所区别,但不是质量上的差别,而是方法。
因此应该有一些客观规律,它们并不依赖于所测试的对象(路由器还是手机),所采用的开发模型(瀑布还是迭代),TPI模型正是基于这一认识来建立的,不过在TPI模型中有157个非常详细的Checkpoint,它们更像由公理推导出来的“定理”。
公理应该是简洁的,作为测试域的初始命题,从2008年Paul Gerrard (2010年EuroSTAR测试杰出贡献奖获得者)第一次提出“测试公理”概念,目前已发展了16条公理,大家来看看Paul所提出下面这些公理是否可以反驳或证伪吧:
首先是测试第一等式,究竟哪些东西影响了测试的过程和方法:
AXIOMS + CONTEXT + VALUES + THINKING = APPROACH
公理 + 环境 + 价值 + 思想 = 方法
Paul按照3个方面来组织测试公理:利益干系人、测试设计、测试执行与交付。
利益干系人
公理1:测试需要利益干系人
公理2:测试的价值是为利益干系人提供决策依据
公理3:如果我们不约束测试的范围,我们永远无法符合利益干系人的期望
公理4:测试和验收的范围始终是妥协的结果
测试设计
公理5:测试设计基于模型(注:这一模型可能是正式的,由形式化来描述;也可能是非正式的,在测试人员的脑中)
公理6:测试人员需要知识来源(Sources of Knowledge)来选择测试内容
公理7:测试人员需要知识来源(Sources of Knowledge)来评价被测对象的实际产出或行为
公理8:测试需要一个或多个覆盖模型
公理9:测试需要一种机制来排序测试优先级
公理10:测试的知识来源(Sources of Knowledge)是模糊且不完整的
测试执行与交付
公理11:通过利益干系人做决策时的信心来衡量测试的价值高低
公理12:一些重复测试是不可避免的
公理13:先执行最有价值的测试——否则可能没有时间执行它们
公理14:测试执行需要明确、可控的测试环境
公理15:测试永远不会按计划进展,测试所得到的证据按照离散量子化的模式出现
公理16: 测试永远不会结束,只会停止
如果认可这些公理,那么根据它们也就可以推导出哪些实践是正确的,哪些是不那么正确的。
例如公理10:测试的知识来源(Sources of Knowledge)是模糊且不完整的。在绝大多数开发项目中,都存在这样的问题:需求质量很差,测试设计所依赖的许多知识:如应用场景,如系统在异常下的行为和结果,都是不明确的,这也是我们一直希望测试能够尽早投入,通过详细的测试设计来提升需求质量,达到预防缺陷的根本原因。
再例如公理16: 测试永远不会结束,只会停止。无论何时,只要你进行测试,就一定会发现更多缺陷。因此,测试是“Stop”而不是“Finish”,停止的原因是因为我们提供了足够的证据,使得决策者认为剩余的产品风险已经可以承担,已经满足客户的应用期望,因此测试不是“盖章放行”,不是质量的“看门人”。
我很欣赏2009年EuroSTAR中的一个演讲“董事会中的测试人员”,其中Martin Kooij提出随着软件产品对人类的生活变得越来越重要,测试人员的终极职位将是“CRO”——首席风险官,负责监控和管理产品风险(注意,不是项目或金融风险),不过Martin也认为这是在2018年才会发生的事儿了!