【腾讯TMQ】测试分析?就这么简单!

作者:段超

什么是测试分析?

在软件测试过程中,以最小的成本将软件质量风险降至最低,这就是精准测试。宏观上,测试分析是响应精准测试的实践,贯穿整个测试过程,并对整个测试过程起指导作用;实践中,测试分析在测试阶段中的位置如图所示:

图测试分析在测试流程中的位置

在项目中,我们往往根据需求和代码来进行分析,最后得到一个包含需求背景、开发实现分析、测试纬度等内容的xmind格式的简版分析报告。

图测试分析xmind模版

这里结合实践说明一下分析的过程以及分析侧重点。本文主要针对于增量的需求进行测试分析,对于全量的新项目,侧重点可能并不适用。

基于需求的测试分析

互联网项目一般都追求快节奏,所以需求描述得比较简单,甚至可能会有一些重要逻辑未考虑的情况,对这样的需求进行分析时,推荐使用NLP模型来进行需求分析,理解需求、消除歧义。关于NLP模型可参见这里。NLP模型帮助测试同学理清需求,借助传统的用例设计的方法(正交分解、判定表、边界值、等价类、场景法等等),可以设计出一些基于需求的用例。对需求进行测试分析,可以得到黑盒的测试策略,这一步可以在需求提出即可立即开展。

基于实现的测试分析

通过查看开发的提交,分析开发实现,进而得到测试策略。下面重点说明一下基于实现的测试分析,也正是有别于传统基于需求的用例设计的分析方法。

一、查看代码提交

SVN的提交是进行代码测试分析的输入,根据开发的提交Reversion来进行实现分析,进而得到最终的测试策略。

代码提交要求:

1、减少提交次数量:提交次数过多,Review人员容易被中间版本误导,影响review效率,提高review的成本。

2、提交与需求(bug)关联:提交必须与需求关联,并且一次提交必须仅与一个需求关联。

3、不提交无关代码:开发提交的代码中往往包含一些与需求无关的代码,可能是预埋逻辑,可能是备选方案。这些代码会影响Review人员的注意力,甚至会引起漏分析(预埋逻辑时未分析、真正使用该逻辑时也未分析)。

项目中测试人员应提醒开发注意养成良好的提交习惯。目前电脑管家全面推行使用公司组件Rain,规范化提交。

拿到与需求关联的提交后,我们可按照以下步骤进行分析:

二、理清类关系(可选)

对于一般业务来说,一次迭代涉及的类不会太多,通过一些分析软件如understand可以立即生成类图供查看。类图虽然不能直接反应出业务逻辑,但对于理解开发实现的大致结构很有作用。通过类图可获取到一次迭代涉及哪些类以及类之间的继承关系,了解类大致成员有哪些。

understand生成的类图

三、寻找核心业务入口

一般来说业务总会有一个入口点,找到入口点才能顺藤摸瓜。例如一个Button点击之后的很有可能是触发类似OnButtonClick的回调函数,那么这个函数即是我们的入口函数。有的业务有多条业务线,可能有多个入口,列出每个入口,后面一条条进行分析。

四、查找函数调用链

从入口函数出发,找到所有业务函数调用链。这一步骤是整个测试分析的核心,直接关系到测试分析的质量。在查找业务函数调用链的过程中,注意核心函数的逻辑结构,如果非常复杂,可以借助控制流图来单独对函数内部结构进行分析,检查每个分支是否符合需求逻辑。

understand生成的控制流图

五、寻找测试点

和开发Review有点不同,我们是带着测试分析的目的去Review的,即根据代码来找寻测试点。面对大量的代码提交,不要被代码带进去,深究一些非核心的细节往往会本末倒置,始终保持怀疑的态度去找寻测试点。对于一般windows程序,这里总结几个侧重点,可能并不正确,请大家拍砖。

重逻辑

UI往往在测试执行中容易发现问题,而逻辑的触发可能比较隐蔽,测试执行中不易触发。在项目时间紧张的情况下,把时间花在理清逻辑上更重要,也容易发现问题。当然一些逻辑触发意味着UI的变化,这样可以借UI印证逻辑的变化,是更好不过了。

重逻辑

UI往往在测试执行中容易发现问题,而逻辑的触发可能比较隐蔽,测试执行中不易触发。在项目时间紧张的情况下,把时间花在理清逻辑上更重要,也容易发现问题。当然一些逻辑触发意味着UI的变化,这样可以借UI印证逻辑的变化,是更好不过了。

重异常

70%以上比例的异常用例是我们的目标。可以说异常用例的设计直接体现了一个测试人员的分析能力。在平时的工作中多注意总结和收集,逐步积累。比如对于任意一个关于设置本地路径的业务,都可以思考如下测试点:

  • 超长路径
  • 带空格的路径
  • 带中文的路径
  • 磁盘空间不足
  • ...

他山之石,可以攻玉。和开发一样,测试同学遇到的99%的问题都是别人遇到过的。所以我们可以从如下几个方面汇总他人的经验教训:

  • 业界开发规范
  • 部门开发规范
  • 异常用例
  • 线上/下bug分析

关于异常用例方面的总结,笔者也在总结和收集中,期待与大家的交流。

重动态

C++里面有很多状态变化、事件响应、消息传递等动态的内容,理清这些动态内容对于我们理解业务非常重要,同时很多bug来源也在此。

  • 事件Event
  • 定时器Timer
  • 线程Thread
  • 互斥量Mutex
  • 信号量Semaphore
  • 临界区Critical_section

在遇到这些关键字时,我们不妨Find References检查所有用到这些对象的使用是否有问题。具体包括:

  • 创建和销毁是否对应
  • 状态改变是否符合逻辑
  • 销毁时机是否合理,销毁逻辑是否正确
  • 销毁后是否仍可能使用

同时,业务上一些核心的状态status、标识flag、模块间通讯的数据等也属于动态内容,也可以加强对这些内容的检查及用例设计。

重第三方

如果对某次迭代进行分析时,发现引入了第三方的库,我们需要特别关注对第三方库接口的使用情况。从功能、性能、稳定性、安全性等各个维度对接口进行评估,特别是频繁调用的接口,更应保持谨慎的态度,评估影响、输出风险点。对于第三方接口,一般都需要考虑兼容性,尤其是不同系统的兼容性。

###六、分析耦合

在查找函数调用链中,我们在梳理核心业务逻辑时,就会找到第三方库的使用。C++中,在变更的代码中搜索Loadlibrary关键字,也可以找到装载的DLL模块。DLL库如果是非微软提供,我们更需要小心。如果有使用第三方库的情况,通常会专门将其列出进行分析。

另外耦合还包括内部模块与模块之间的关系。这里笔者采用需求矩阵的方式来进行思考。

七、脑暴异常

异常的思考作为剧本式分析方法的一个补充,可以起完善测试策略的作用。通常也会在xmind中专门列出来。异常种类各式各样,非正常环境、非正常操作、非正常输入都是我们可以考虑的异常点。比如某个业务流程中直接退出窗口或者取消任务,连续快速点击某个按钮、在精简版的操作系统中运行程序等等。

结束语

本文为业务测试人员提供一个测试分析的思路,特别适用于快速迭代的业务测试,对于专项测试本文介绍的思路并不完全适用。限于水平有限,很多内容可能并不正确或者完整,请斧正。

本章完~

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

如何从零开始,形成自己的模块化思维方式?

计算机这东西不是凭空出现的,它是为了解决一些实际的问题,有很多时候是对现实世界的模拟。遇到问题时,经常会有人说,要有大局观,要具体问题具体分析,也可以牵强的解释...

1062
来自专栏java一日一条

为什么要测试,测试是如何令人更快乐的?

我曾经是一个不测试主义者,因为我看不到测试的价值。然后,我试了一段时间,变得对它深信不疑。我收集了一些经验,当然还远远不够。这篇文章总结了一些我知道的以及我认为...

641
来自专栏恒思考

像Django学习写程序

Django是一个python的web的快速开发框架,Django也是我接触的第一个web框架。这个框架是一个比较重的框架,有些人对这件事情比较诟病,但是开发起...

1745
来自专栏圣杰的专栏

DDD理论学习系列(10)-- 聚合

1.引言 聚合,最初是UML类图中的概念,表示一种强的关联关系,是一种整体与部分的关系,且部分能够离开整体而独立存在,如车和轮胎。 在DDD中,聚合也可以用来表...

2468
来自专栏前端大白专栏

关于react-native的各种报错的最终解决方案

2149
来自专栏一“技”之长

iOS10语音识别框架SpeechFramework应用

        iOS10系统是一个较有突破性的系统,其在Message,Notification等方面都开放了很多实用性的开发接口。本篇博客将主要探讨iOS1...

702
来自专栏noteless

5.计算机发展个人理解-电路终究是电路 软件如何控制硬件 代码如何操作硬件 硬件是怎么执行代码 代码如何执行 软件与硬件如何交互 计算机思维 抽象 封装 规范 屏蔽 协议分层

你可能会想到,软件是用高级语言编写的,高级语言被翻译成汇编语言,汇编语言会翻译成机器可以是别的机器语言

1001
来自专栏服务端技术杂谈

重构系统的套路-写有组织的代码

如果一个项目经历了快速发展,势必在业务发展背后留下了一个很无序,结构混乱的代码,无序而混乱的代码势必造成很大的bug修复及扩展成本。 说到搭建系统都在谈论高并发...

31510
来自专栏CSDN技术头条

大规模数据集成: Linked Data

在本系列的前两篇文章(“ 使用 RDF 创建数据网络 ” 和 “ 使用 SPARQL 查询 RDF 数据 ”)中,您了解了资源描述框架和 SPARQL 协议和 ...

2108
来自专栏个人分享

海量数据处理技术学习

  外排序:因为海量数据无法全部装入内存,所以数据的大部分存入磁盘中,小部分在排序需要时存入内存。

722

扫码关注云+社区