标签:
2016-09-06
1 开始
2 初次使用“四步测试策略制定法”
2.1 产品质量等级
2.2 确定项目中各个特性的质量等级
2.3 对项目整体进行风险分析
2.4 确定测试策略的结构
2.5 初步确定测试分层
2.6 回顾
3 制定总体测试策略
3.1 分解产品质量目标
1. 根据质量等级来分解产品的质量目标
2. 为每个测试分层确定测试目标
3.2 使用老功能分析法来对特性进行分类
3.3 基于质量和风险来确定测试深度与测试广度
1. 使用产品质量评估模型来初步确定测试深度
2. 考虑用老功能分析来更新测试深度
3. 基于老功能分析来初步确定测试广度
3.4 确定测试优先级
3.5 确定测试的总体框架
3.6 回顾
4 制定阶段测试策略
4.1 测试设计策略
1. 使用“测试分析设计表”来保证测试设计符合测试策略
2. 四步测试设计法和测试广度
3. 测试用例等级
4.2 集成测试策略
1. “俄罗斯方块心”项目的集成开发
2. 集成测试的对象和测试目标
3. 入口准则——何时可以开始进行集成测试
4. 测试用例选择
5. 出口准则
4.3 系统测试策略
1. 系统测试的对象和测试目标
2. 入口准则——何时可以开展系统测试
3. 测试用例选择
4. 测试执行顺序
5. 出口准则
4.4 验收测试策略
1. Alpha测试
2. Beta测试
3. 入口准则——何时开始进行验收测试
4. 出口准则——何时可以退出测试,发布产品
4.5 回顾
假设现在有一个研发项目A开始了,我们的软件测试架构师也要投入项目了。此时项目产品的包需求已经基本完成,产品概念已经初步成型,如图1所示。
图1 研发项目A示意图
不过此时软件测试架构师对项目的了解还非常有限:
此时,软件测试架构师对项目的了解还非常有限,在制定测试策略之前,收集了解更多的项目信息非常重要:
当我们收集了一些项目信息,对项目有一定的了解后,就开始准备制定测试策略了。这也是我们初次在项目中使用“四步测试策略制定法”,如图2所示。
图2 对项目使用“四步测试策略制定法”
产品质量评估模型,只能告诉我们该从哪些角度去评估产品质量,并没有告诉我们,怎样的评估结果可以被认为是好的质量,怎样的结果又是不好的质量。换句话说,我们还缺少一个评价质量的“刻度”,即产品质量等级。
从最终用户使用的角度,我们将产品质量分为如下4个等级。
注意:产品质量等级虽然是在项目初期确定的,但定义的是产品在发布时的质量,而不是产品在测试过程中的质量,如图3所示
图3 定义产品发布时的质量
按照四步测试策略制定法,我们先围绕明确产品质量目标来展开分析
此时,软件测试架构师需要对本项目中包含的特性,逐一确定它们的“产品质量等级”(表1)。
需要特别说明的是:
按照四步测试策略制定法,在这个阶段,软件测试架构师需要从项目整体角度进行风险分析。
此时,我们可以按照7.1节中介绍的“风险评估清单”,来对项目整体进行一次风险评估,并参考“风险应对”来考虑应对措施,增加一些质量保证活动。
在确定风险应对措施的时候,需要区分这些活动是针对项目整体的,还是针对具体特性的。可以直接记录在产品质量等级表中备忘(表1)。
表1 产品质量等级表
按照四步测试策略制定法,接下来我们将围绕产品开发流程来进行分析。
图4 总分式的测试策略结构
总体测试策略从概念阶段开始,在计划阶段前期完成比较合适。因为这时产品的需求、质量目标和整体形态都已经确定下来,已具备了制定总体测试策略的条件,而且也需要这样一份文档来总领后面的测试活动,让测试团队成员心中有数。
阶段测试策略在总体测试策略完成后随即展开,保证在开发阶段前期完成。这是因为,阶段测试策略最重要的目的,就是明确各个阶段的输入输出标准。在开发编码之前(或在前期)就把要求说清楚,可以让开发目标更明确,更有利于产品质量的提高。测试也可以根据双方达成的标准,准备接收测试用例、自动化测试环境等。如果阶段测试策略输出得过晚,这些活动可能就会来不及进行或者达不到期望的效果。
测试执行策略在测试执行阶段,每个版本转测试之前输出即可。测试执行策略除了对阶段测试目标进一步进行分解到每个版本的粒度,还需要根据上一个版本的测试执行情况,对测试策略进行调整。
图5 各类测试策略之间的关系
按照四步测试策略制定法,接下来我们将进行与测试分层相关的分析。
对软件测试架构师来说,此时我们可以结合研发流程,来初步确定一个测试分层。假设此时我们采取经典V模型中的测试分层,然后将测试分层和研发流程,以及测试策略的结构放在一张图上,初步将三者的对应关系梳理出来了
图6 测试分层、研发流程和测试策略结构的对应关系
们先来总结一下到目前为止,软件测试架构师取得了哪些进展:
通过这次实践,我们发现只使用一次四步测试策略制定法,是无法得到最终的测试策略的。
首先,这和项目所处的阶段有关。一些和测试策略制定相关的、必要的、重要的信息,只有到项目的某些阶段才会清晰,所以我们需要按照测试策略的结构,在项目的不同阶段多次使用四步测试策略制定法来制定测试策略,如图7所示。
图7 多次使用四步测试策略制定法制定测试策略
其次,四步测试策略制定法中的4个步骤之间并不是瀑布式的单向关系,而是全网状的双向关系。图8更为准确地表达了这4个节点之间的关系。
图8 4个节点间的关系
例如,产品质量目标变高了,对此我们可能会增加一些测试分层,这使得研发流程也发生变化,也引入了新的风险。
所以我们在使用四步测试策略制定法时,发现进行到某个步骤进行不下去了,可以将这个步骤停一下,进行下一个步骤,然后再回过头来进行这个没有做完的步骤,这时往往会有新的收获。
接下来我们将在之前分析的基础之上,再次使用四步测试策略制定法来制定总体测试策略,如图9所示。
图9 制定总体测试策略
我们可以对质量等级再进行分解,整体思路如图10所示。
图10分解质量等级
我们可以根据之前确定的产品质量等级,来为产品质量评估模型中的项目建立不同的质量标准,从而达到分解产品质量目标的目的。
我们可以根据项目的实际情况、历史情况和公司整体基线,确定出一个分级的标准,作为产品质量目标的分解项,见表2。
表2 定量指标分级标准
注:
表3 特性—质量等级表
软件测试架构师不必对每个特性,都输出一个质量目标分解表,而是在“特性—质量等级”表中加入一个超链接即可。
接下来我们需要根据各个质量等级的质量目标,再确定每个测试分层需要达到的质量目标。以“完全商用”为例,见表4。
表4 完全商用示例表
在现在这个阶段,开发还没有开始对特性中的功能进行设计,所以我们还无法使用老功能分析法来对每个功能特性进行详细的分析,但是我们已经基本能够知道:
这时,软件测试架构师可以根据项目的实际情况,考虑上述几个方面,来将被测对象做一下分类,并对每一类确定一个测试策略。表5是一个例子,供大家参考。
表5 示例
我们使用产品质量评估模型中的测试过程—测试方法项,基于不同的质量要求,来确定测试深度,见表6。
表6 确定测试深度
我们再根据前面老功能分析中的测试策略,更新老功能中的测试深度(可以考虑先标记出需要调整的地方),见表7。
表7 更新老功能中的测试深度
从产品质量评估模型的角度来说,无论产品的质量要求是高还是低,我们都希望在测试中能够对需求进行100%的覆盖,相应的所有测试广度都应该是100%覆盖。
但实际上,对一些老特性,特别是那些在新版本中没有改动,并且历史测试情况也不错的特性,我们可以考虑缩小测试范围,少测或者不测。不过毕竟现在我们还处于项目的概念或计划阶段初期,还没有进行详细的老功能分析,但这时我们还是可以初步分析出一些可以缩小测试范围的特性。
接下来软件测试架构师可以根据质量目标和分类来确定测试优先级。基本原则是质量等级越高,优先级越高;在相同的质量等级下,全新特性比老特性的优先级高;改动越多的老特性,优先级越高。
确定测试优先级的一个简单的方法是使用评分表。我们首先对质量目标和分类分别设置一定的分值,见表8和表9。
表8 质量目标分值表
表9 质量目标分值表
然后再准备一张优先级的分数范围表(表10)。
确定的测试优先级,将主要用于测试投入的安排上。我们可以根据优先级的等级,制定出一个测试投入的策略,见表11。
测试框架可以理解为如何组建测试。
们将测试框架构建为三层:策略层、活动层和保证层。
如果把测试整体看成一个“人”:
我们将测试策略和测试活动按照测试框架绘制出来,并按照研发流程和测试分层来组织这些测试活动的先后次序,作为测试的总体框架,如图11所示。
图11 测试总体框架
让我们回顾一下,到目前为止我们取得的进展:
事实上,进行到现在,我们可以认为软件测试架构师完成了总体测试策略的制定。
总体测试策略最后的输出究竟是什么呢?其实就是两张表和一幅图。
第一张表,是我们在文中一直模糊地称其为“特性—质量等级”表并不断向其中添加内容的那张表。现在我们终于可以为其正名了——其实它的真名叫“总体测试策略分析表”。
表12 总体测试策略分析表
第二张表是测试投入策略表,见表13。
最后的图就是我们的测试总体框架图,如图12所示。
图12 测试总体框架
图13 制定阶段测试策略
软件测试架构师在制定总体测试策略的时候基本处于“单打独斗”的状态,整个测试团队中可能就只有软件测试架构师投入。到了制定阶段测试策略的时候,测试团队中的其他成员才会开始投入,进行测试分析和设计。因此阶段测试策略需要能够向上承接总体测试策略,立马指导测试分析和设计,向下能够指导后面的测试执行。
在制定总体测试策略的时候,软件测试架构师已经为产品特性确定了测试深度。但测试深度是从测试方法的角度去描述的,我们在测试执行的时候,并不会按照测试方法去测试,而是按照测试用例去测试。也就是说,我们需要按照测试深度来进行测试设计,然后我们再执行这些测试用例,以达到以特定的测试深度来进行测试执行的目的。
“测试分析设计表”是对每个功能或特性进行测试设计的辅助工具,使用测试分析表的好处是:
“测试分析设计表”由3张表构成:“测试分析准备表”“测试类型分析表”和“功能交互分析表”。
1)测试分析准备表
“测试分析准备表”的主要作用是为被测对象配置在测试设计中需要考虑哪些“测试类型”(可以理解为测试方法,包括功能和非功能方面)和“功能交互”(可以理解为需要将哪些功能放在一起考虑,它们是否需要进行“多运行相互作用”和“多运行顺序执行”的测试)。
图14 示例
图14是一个示例。以其为例,这样配置的意思是:
软件测试架构师可以通过配置“测试分析准备表”来控制测试深度。
2)测试类型分析表
“测试类型分析表”如图15所示。
图15 测试类型分析表
其中的“列”为待分析的需求,“行”为测试类型。至于行表头中会有哪些测试类型,这和我们在“测试分析准备表”中对测试类型表的配置有关——我们只对配置了的测试类型进行测试类型分析。
图16 参考实例
图17 分析结果汇总表
3)功能交互分析表
“功能交互分析表”和“测试类型分析表”类似,如图18所示。
“行”表头中显示的需要进行功能交互分析的功能,依然和“测试分析准备表”中的“开发特性表”保持一致。而“列”的内容就不是“原始的需求”了,而是测试类型分析结束后,我们识别出的需要再进行功能交互分析的测试点。
图18 功能交互分析表
图19 参考示例
通过“测试分析设计表”输出测试点,完成了测试分析活动后,测试设计者就可以使用四步测试设计法来对测试点进行测试设计,输出测试用例了。
此时,需要软件测试架构师制定一个测试设计中的路径覆盖策略
前面已经介绍了路径覆盖度评估的基本方法,我们可以参考其中步骤1和步骤2,用总体测试策略中优先级来定义不同的路径覆盖策略,见表14。
表14 用优先级定义路径覆盖策略
设计好了测试用例之后,建议软件测试架构师再让测试设计者对测试用例分一下级。我习惯将测试用例分为四级,每一级的定义,对应的测试深度和对应的测试分析设计表,见表15。
表15 测试用例分级
测试用例分级将会为后面的分层测试、回归测试、验收测试和自动化测试在如何选择用例方面,带来莫大的方便。
集成测试位于产品研发流程的开发阶段。所谓“集成”,可以理解为不断开发功能并将功能集成到系统中,最后完成整个系统的开发过程。
假设用户希望我们开发一款叫“俄罗斯方块心”的产品,如图20所示。
图20 俄罗斯方块心
通过分析,开发很快将产品划分为如下几个基本功能,如图21所示。
图21 基本功能
并制定了通过4个build来把功能开发完如图22所示。
图22 功能开发和系统集成计划
这样,每一个build后,产品的集成形态如图23所示。
图23 产品的集成形态
4个build完成后,我们的系统也就完全集成好了。
“俄罗斯方块心”虽然是个虚拟项目,却能帮我们很好地理解产品的集成开发过程,确定集成开发阶段的测试策略。
让我们再来仔细分析一下“俄罗斯方块心”的集成开发过程:
开发者按照计划,完成本build计划要集成到系统的功能开发后,需要通过单元测试来测试功能的正确性;测试通过后,开发者将功能集成起来,构造系统(这个过程有时候又叫“联调”)。构成完成之后的测试,就是我们的“集成测试”。
图24 build2的集成开发过程
其中单元测试是为了测试“新开发的功能和模块是否符合设计”,是“白盒测试”,使用内部接口进行测试。
而集成测试相当于是在测试验证“新合入功能能否在系统中被正确地装配起来”,是“黑盒测试”,也是系统级的测试,应该使用系统提供给用户的输入接口来进行测试,使用提供给用户的输出接口来判断接口的正确性。
“功能能够在系统中被正确装配”隐含了一个前提就是“功能是我们想要的那个功能”。而单元测试只能确认功能的实现是符合设计的,却不能保证功能恰好就是我们想要的。因此,集成测试需要测试的内容包括如下几项
集成测试的入口准则等同于“第一个集成计划中提交的功能能否进行集成测试”。
明确了测试内容,测试用例的选择就变得容易了
其中“部分level 3的测试用例”是指在集成测试后期,系统已经相对比较成熟和稳定的时候,也可以适当选择一些性能、稳定性和压力方面的测试用例来进行测试,以避免这些“非功能”方面的问题在系统测试阶段密集爆发。
当我们达到了集成测试阶段的目标后,就可以退出集成测试。
出口准则包括:
从系统测试开始,产品研发流程进入到测试阶段。
我们可能会有这样的疑问:在集成测试结束的时候,这个心形图案就已经完成了,并且我们也进行了测试,为什么还要再进行系统测试呢?或者说这个问题从测试的角度来看,就是已经在集成测试中执行了的测试用例,在系统测试中还需要再执行一遍吗?集成测试和系统测试的差异主要在哪里?
做集成测试的时候:
在系统测试中需要测试的主要内容包括:
系统测试的入口准则,就是集成测试的出口准则,再加上一条:测试团队已经做好了测试准备,包括测试用例、测试资源和测试环境都已到位。
现在我们来回答本节开头提的问题:我们在集成测试中执行了的测试用例,在系统测试中还需要再执行一遍吗?
答案是,系统测试和集成测试的测试用例肯定会有相同的部分,但并不是简单地重复一遍,而是存在一定的选择策略。
我们在集成测试中并没有讨论测试执行顺序,是因为集成测试的测试对象很单一,就是“功能”。虽然后面我们提到在集成测试的后期,可以考虑增加一些“非功能方面”的测试,但是总的来说这并不会给测试带来先执行什么再执行什么的困扰。
软件测试架构师在考虑测试执行顺序的时候,可以基于如下几点:
当我们达到了系统测试阶段的目标后,就可以退出系统测试。
出口准则包括:
验收测试是产品在发布前的一种测试,它是对用户需求的确认事实上,我们进行验收测试已经不再是为了发现产品的问题,而是为产品能够正常发布建立信心。
验收测试的对象是需求,需要基于用户场景来测试。
验收测试包含Alpha测试和Beta测试两种。
Alpha测试是由测试人员模拟用户进行的测试。
1)谁来进行Alpha测试
理想的Alpha测试人员,应该是不太了解产品实现细节,但是对用户非常了解的人。按照这个标准,市场人员、系统工程师或是技术支持人员都可以是理想的Alpha测试人员,他们可以站在用户的视角,对产品质量再次进行审视。
让测试组员相互进行交叉验收,似乎是个不错的选择——这确实可以消除“审美疲劳”,发现一些问题,但是交叉验收却很难达到从用户的角度再去审视一次产品的效果。与交叉测试相比,更有效的方法是,测试部专门成立一个“验收测试组”,由测试部中比较有经验、测试能力强,且对行业、对用户都有一定了解的测试人员来担任,让他们来作为产品发布前的最后一道防线,这无疑是最能保证Alpha测试效果的做法。
2)Alpha测试策略
Alpha测试不是系统测试的延续,它是产品交付的序曲,它的测试重点应该放在“确认在用户真实的环境下,用户的业务、用户的使用习惯是否能够满足”需求上。模拟用户的真实环境,把自己催眠为用户,能够以用户的思路来看待产品,是Alpha测试不折不扣的难点。
下面的清单也许可以帮助我们进行Alpha测试分析,找到产品在Alpha测试中需要关注的重点内容:
Beta测试是由用户参加的测试。常见的方式有如下两种:
第一种方式下的Beta测试的困难之处在于确定测试的时间和参与者。对测试者来说,倒不需要对上面两个问题做出决策,而是分析、复现参与者发现的问题,将问题整理为bug报告,直至确认bug被解决。
第二种方式下的Beta测试,需要保证产品能够通过用户的验收测试,能够交付给用户使用,这时的测试需要围绕用户的验收方案进行,并结合用户的使用习惯和用户所在的行业特点,做好充分的准备。
验收测试的入口准则,就是系统测试的出口准则再加上:
当我们根据产品质量评估模型,确认产品已经达到总体测试策略中的产品质量目标后,就可以退出测试。
现在软件测试架构师已经走到了图25中所示的位置
图25 完成阶段测试策略的制定
我们还是先来总结一下,到目前为止,软件测试架构师已经确定了哪些内容:
从2节开始,我们就没有说明当前的活动对应的是四步测试策略制定法中的哪个步骤了,而是在尽量按照四步测试策略制定法的思路来组织文章的内容。
到目前为止,还没有进行产品测试,这使得我们的测试策略多少还是有点儿“纸上谈兵”的意思。进入产品测试阶段后,测试策略的效果立马就可以通过缺陷分析呈现出来,这时软件测试架构师的工作模式将变为图7-42所示的样子。
图26 软件测试架构师的工作模式
标签:
原文地址:http://www.cnblogs.com/Ming8006/p/5846816.html