构建高效的软件测试知识体系
构建高效的软件测试知识体系
作者:郑文强
2018年6月8日,作为第一届TMMi中国峰会圆桌会议的嘉宾,我参与讨论了“如何建立适合测试组织的测试规范体系”这个测试主题,其中分享了我对该话题的一些想法和经验。现在通过文章的方式将当时讲解的内容进行了一些归纳和总结,主要包括3个方面的内容:
1、1个故事:任何问题的解决都需要从过个层面考虑;
2、4个维度:构建高效的软件测试知识体系;
3、目标推动:综合应用4个维度推动测试目标的实现;
一、1个故事:任何问题的解决都需要从过个层面考虑
记得2009年时,当时发布给用户的一个软件版本,在用户使用现场发现了一个严重的问题,不仅导致公司层面的经济损失,也伤害了用户对该产品的使用信心。项目经理针对该问题进行了一次经验教训分析大会,在会中直接扔出来这样的一个问题:“为什么你们测试团队在测试过程中没有发现这个问题?”
今天不从整个项目层面谈缺陷遗漏的根本原因分析,而是将关注点放在测试团队本身,即为什么测试团队没有发现这个问题,有哪些原因可能会导致测试过程中没有发现此类缺陷?其目的是在将来的测试过程中尽量减少此类问题再次发生,并不断提高测试团队的测试能力。从测试的角度,在分析该缺陷遗漏原因时,提出了下面的一些问题:
会不会是测试过程的前期没有明确预留足够的时间开展测试分析工作?从而导致测试团队没有时间学习软件产品的需求等参考文档。假如是,是否需要从测试过程角度,详细定义测试分析阶段,尽早介入参与开发人员输出的各种文档的学习和评审?
假如不是,即明确定义了测试分析阶段,也预留了足够的时间。但是测试人员在设计测试用例时只是基于经验,没有选择合适的测试设计技术,因此针对该缺陷没有设计出合适的测试用例,或者测试人员的测试思维无法发现该缺陷?假如是,是否需要加强测试用例设计技术方面的培养?
假如测试过程中明确定义了测试分析与测试设计,并且得到了合适的测试用例。但是由于测试时间非常有限,在测试重点选择时,将该测试用例的优先级设置得比较低,导致最后没有执行该测试用例。假如是,是否需要加强基于风险的测试重点选择,使得测试优先级的选择更加有针对性?
假如前面3个选项测试团队都做得不错,但是由于执行该测试用例的测试人员,由于各个方面的原因导致他没有动力认真得执行测试,从而导致没有发现该缺陷?此时是否需要更多得激励和人员管理?
根据上面提到的几个问题,发现针对测试团队遗漏缺陷这个问题,其可能的原因是多方面的。因此,要解决这样的问题,不能仅仅依赖于单个维度去解决,而是需要构建一个结构化的测试体系,以提高整个测试团队的测试能力。
二、4个维度:构建高效的软件测试知识体系
根据上面的场景,测试团队假如要实现高效的软件测试,仅仅强调某个测试点或测试技术是不够的,需要体系化的测试知识和技能的支撑。另一方面,从测试团队或测试人员的角度,要实现测试能力的改进,从当前测试过程中面临的主要问题入手是最有效的手段。
2009年在公司内的职责更关注在测试团队的能力改进上面,期间收集和分析了测试人员在测试过程中碰到的各种问题,首先将各种问题归类到11个测试关键域KPA,如下图所示:
最终将11个KPA总结为3个维度:测试过程、测试技术和测试管理。
1、测试过程(全生命周期的软件测试过程):例如过程阶段和活动、测试文档、测试环境、回归测试、脚本化测试与探索性测试、测试基本原则等;
2、测试技术(问题驱动的软件测试设计):例如静态测试、测试用例分析与设计、测试工具与自动化等;
3、测试管理(全方位的软件测试管理):例如测试计划、测试估算、测试风险、缺陷管理、测试度量、测试团队管理、测试过程改进等;
不管定义了怎样的测试过程、测试技术和测试管理,最终都需要有合适的测试人员去实施,因此增加第4个维度,即人的维度。人是实施高效测试的核心,其能力包括:学习能力、沟通能力、思考能力、思维能力、解决问题能力等。测试过程、测试技术和测试管理的3个维度,再加上人的维度,它们共同组成了构建高效的软件测试知识体系的框架,如下图所示:
构建高效的软件测试知识体系的过程,需要不断应用自下而上的结构化思维:罗列要点、连线归纳、构建架构和检查架构,其过程也类似于测试过程,需要不断的反馈和迭代以优化整个框架。
三、目标推动:综合应用4个维度推动测试目标的实现
构建了适合自己的测试知识体系框架之后,接下来需要对框架内4个维度进行综合应用。测试知识体系框架本身并不是简单的测试知识的罗列,而是将知识和经验转化为测试人员分析和解决问题能力的提升过程,最终目的是从多维度多层次解决测试过程中面临的各种问题,即更多体现解决问题的结构化和系统化。
测试知识体系框架的构建,需要符合当前开发模型、开发和测试团队特点、质量要求、时间等资源的限制等,适合当前测试上下文背景的就是好的规范体系,即根据需要可以对框架内内容进行合理的裁剪。测试知识体系框架的应用,其目的是推动各个层面测试目标的实现,并在测试时间、成本、范围和质量等要素方面达到平衡,高效高质量的及时交付测试输出。
[本文提到的测试过程、测试技术、测试管理、结构化思维、解决问题步骤等内容,将在后续的文章中陆续推出,敬请关注并欢迎大家与我对文中内容进行探讨!]