什么是海盗派tester?

测试分析的目的:如何在有限的测试时间和测试资源的条件下,从无限多可能中挑出那些right test idea,以便达到"以尽可能少的时间、发现尽可能多的bug"的测试效果
本书大纲

了解您的测试任务。
拿到一个测试对象,可以根据以下思路进行分析。
第一步:可以问出多少问题?
对被测对象问问题的能力就是测试分析中的一部分,针对任何一个被测对象,可以提问出无数多个问题。
第二步:哪些是最好的问题
需要在这无穷多个问题中找到最好的问题,什么是最好的问题呢?有更高几率帮我们找到bug的问题就是好问题。
第三步:哪些地方容易出现bug?
出现bug的地方就是风险比较高的地方。任何风险都有2个重要的属性:风险发生的可能性和风险发生后的影响,根据这两个属性进行综合起来排序,得到最有价值的问题。
第四步:分析风险发生的影响和风险发生的可能性
风险发生的可能性和什么有关呢?这就需要凭借测试人员的经验来进行判断了,比如需求复杂度,技术复杂度,研发人员经验,测试人员经验,时间是否充裕。
风险发生后的影响有多大呢?这个问题恐怕要数用户了,我们需要深入了解用户痛点所在,我们产品帮助用户解决了什么样的问题,用户为什么会提出这样的需求,这样这容易判断失效影响。
第五步:收集更多的信息
这样一来,为了判断L和I的大小,我们可能需要问出更多的问题,了解更多的信息。
第六步:按风险大小排序选出高优问题
根据风险值对问题进行排序筛选出高优问题。
第七步:风险持续评估
风险是不断变化的
问问题的能力对于测试人员来说非常重要,KYM的本质就是不断问问题,收集信息,了解上下文,对测试最终达成的目标有更加清晰的认识,KYM像航海中的灯塔一样,时刻帮助测试人员辨别方向。
比how更重要的是先想清楚why的问题,了解清楚任务本身以及任务背景,明确最终达到的目的,然后开始考虑how的问题,并且在执行过程中不断深入理解why,不断迭代和优化why,使得输出的what和任务目标始终是对其的,我们把这种说法叫Know Your Mission。促进测试人员与周边沟通,即时获取有价值的信息,提前发现风险所在,也正是KYM的价值所在。

在做KYM时,谨记把握主干、忽略细节。
产品经理就给程序员1句话:造一个电梯。
对于这样子的一句话需求,没有明确的其他信息,这时候就需要KYM
测试覆盖大纲,从测试的角度定义需求的过程,以便所有人都明白针对当前被测系统又哪些测试需求。该项技能主要应用在没有需求文档或者设计文档可以依照,没有可运行的程序提供线索,此时只有通过交流的方式获取信息。
作用:
信息提炼
内容重组
有时候获取的信息是凌乱的,这时候需要重组信息,便于理解
如何画TCO呢,最常用的方法就是MFQ

经过TCO,我们识别出了很多单功能M,对于这些单功能如何进行测试分析呢。可以使用建模的方式对其进行测试分析。
当需求中有明显的业务流程的含义时,可以采用P-Process建模,P-Process业务流程的特点是:
P-Process建模的常用手段:画流程图

model的过程是让我们想到更多的test idea,而不是用一个model涵盖尽可能多的idea

能够从需求中明显的区分出多个参数或者变量,可以考虑P-Parameter方式建模。
特点:
P-Parameter建模的常用手段:决策表,决策树
政府规定的汽车保费是根据考虑了成本的基本利率计算而成的。该计算的输入如下所示:

拿到需求后明确输入与输出
输入条件:基本利率、年龄、出险次数、是否为三好学生、是否为非饮酒者
输出:汽车保费
首先识别出需求中存在的多个参数,并且每个参数有各种可能的取值,把这些参数放入表格的纵列,然后识别出需求中的所有规则,每一个规则涉及多个参数的组合,在表格中每一行代表一个规则。
判断出这个需求的参数部分有:年龄、出险次数、是否为三好学生、是否为非饮酒者
决策表
| 年龄 | 出险次数 | 是否为三好学生 | 是否为非饮酒者 |
|---|---|---|---|
| 16 ≤年龄< 25 | 0 | Y | Y |
| 25 ≤年龄< 65 | 1-3 | N | N |
| 65 ≤年龄< 90 | 4-10 | ||
| 年龄小于16岁或者大于90岁 | 10以上 |
使用正交方法获得了4x3x2x2=48个测试条件,根据业务或者pairwise方法选取最有用的测试条件进行测试执行。
当需求仅仅围绕一些数据,每个数据有明确的取值范围时,可以考虑使用D-Data来建模。
特点:
D-Data建模的常用手段:等价类划分
用户资料补充需求输入输出如下:
输入:
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
| id | Integer | Y | 用户id |
| name | String | Y | 姓名 |
| phone | String | Y | 手机号 |
| idCard | String | Y | 身份证号 |
输出:
| code | message |
|---|---|
| 0 | 成功 |
| 10000 | 系统错误 |
| 10001 | 参数缺失 |
| 10002 | 参数错误 |

等价类划分用例设计一般是一个正例配上多个反例
当需求围绕一些因子的时候,每个因子有几种不同的取值,但是因子之间各种组合数目庞大,人工很难穷举,可以采用C-Combination方式建模。
特点:
有一个产品的输入如下:
下拉单选: 0-9
下拉单选: checked, unchecked
单选按钮: on, off
填写框: 1-100
请设计精简而高覆盖率的测试用例
思路:
如果使用常规的组合测试,需要用例的数量为:1022*100=4000个,那人都要点傻了。
使用等价类简化用例:
下拉单选: 0-9的等价类为:0与其他数字
填写框: 1-100的等价类为:范围内的数字,范围外的数字,非数字
那么用例数量就减少到222*3=24个,那么还能不能减少呢?
使用Pairwise/All-Pairs精简用例:
| 填写框: 1-100 | 单选按钮: on, off | 下拉单选: checked, unchecked | 下拉单选: 0-9 |
|---|---|---|---|
| 3 | 2 | 2 | 2 |
根据第二个变量计算出第一个变量需要的用例数(行数),3*2=6,需要6行
每增加一列(n),则需要看 1和n,2和n,。。。 n-1和n之间是否覆盖了两列之间所有的组合,如果没有则适当调整上下的位置。直到所有都符合。
| 填写框: 1-100 | 单选按钮: on, off | 下拉单选: checked, unchecked | 下拉单选: 0-9 |
|---|---|---|---|
| valid Int | on | checked | 0 |
| valid Int | off | unchecked | others |
| invalid Int | on | unchecked | others |
| invalid Int | off | checked | 0 |
| Alpha Special | on | checked | 0 |
| Alpha Special | off | unchecked | others |
24个用例就缩减到了6个
当需求中涉及多种状态时,可以考虑采用S-State特征来建模。
特点:
有一个产品的输入如下:
下拉单选: 0-9
下拉单选: checked, unchecked
单选按钮: on, off
填写框: 1-100
请设计精简而高覆盖率的测试用例
具体见状态图法在软件测试的应用
https://blog.csdn.net/qq_36502272/article/details/115542715
这边举个最简单的例子,有个输入框可以输入字母,测试员A输入z,测试员B输入a,同样测试条件是字母,A与B输入的不一样,结果A报错了,B没报错。
虽然这个例子很蠢,但不排除有这种可能性
测试执行需要我们真实的与被测对象接触,基于对原有被测对象的认知和猜测,去进一步挖掘那些未知的信息,包括未知的需求,未知的风险。
测试人员始终坚持的核心原则:

测试域是无穷尽的,测试资源是有限的,这两点决定基于风险展开测试始终是一个重要的测试策略。而风险有个重要的特征就是“风险是不断变化的”。所以RBT运用的效果取决于是否能根据风险的变化及时调整测试策略。


本书条理清晰且确实能让人受益匪浅打开思路,给测试人员带来一些方法论上的启发。
结合实际业务测试,感觉KYM和TCO的思想确实很有用:
MFQ的建模思路也很有用,从单模块,模块交互以及非质量属性这几个维度对需求进行拆分,易于理解。
至于PPDCS,就显得过于理论了,实际项目中:
TD不做评论,基本用不到。
TE中基于风险不断调整测试策略也是很好的思想,用例都是有重要程度与优先级的,他们的执行顺序需要根据风险不断进行调整。