前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >经验|项目测试中常见问题以及应对策略

经验|项目测试中常见问题以及应对策略

作者头像
互联网金融打杂
发布2022-08-01 14:25:15
2970
发布2022-08-01 14:25:15
举报

下面这些问题想必大多数测试同学都遇到过,希望作者的解决方案能给大家带来一些启发。

1.开发经常私自发布代码

先介绍下当时团队的开发模式,我们总共有2套环境,dev环境和线上环境。新需求开发流程是,将master代码merge到dev分支,开发在各自的研发分支开发feature,然后merge到dev分支,提测后,测试在dev环境测试新功能,测试通过后,会让开发给当前测试通过的代码打版本tag,然后将此代码merge到master分支,再进行线上环境的回归测试。

图片
图片

对于质量体系建立还不够不完善的团队,这个问题是比较常见的。和开发同学打交道这么多年,还是比较了解开发私自改代码的动机的。我说几种常见的情况:

1)提测后,开发发现自己的代码有缺陷A,就偷偷修改代码,并随测试同学提交的缺陷的修复代码一起commit到dev分支。说实话,这个还是比较隐蔽的,如果他们修复缺陷A的代码不会引出新缺陷,测试很难发现这个问题的。

2)开发同学发现自己犯了比较低级的配置问题时候,碍于情面,就悄咪咪修改并commit。

改进建议:(1)记录开发“犯错”的次数以及引发的问题,用于约束开发不要私自修改代码,话说再一再二不再三,人都是要面子的,次数多了他们也不敢再乱来,如果还是私自改,说明他们态度真的有问题。(2)采用技术手段监控开发提交的代码-gitlab/github上都可以配置提交/merge代码的webhook,用于监控开发提交的代码并在群里消息提醒。

2.项目漏测频出

缺陷来源分析

我们在进行项目复盘的时候发现,一些漏侧的缺陷明明是测试评审用例中有覆盖到此场景的,而在测试同学执行的用例记录中,漏侧的场景用例也是Pass的,那么为什么线上仍会有此缺陷呢?

和负责的测试同学沟通后,发现有以下几个情况:

  1. 业务流程不熟悉
  2. 第一轮测试,A场景用例通过,B场景用例发现缺陷。开发修复后,测试同学对B场景进行回归验证,因为他觉得A场景和B关联性不大,所以没做回归,但是恰恰感觉关联性不大的地方实则有一定关联,导致漏测。
  3. 执行用例的同学觉得针对功能模块A设计相关的几个测试用例属于等价类,所以在执行其中一个用例通过后,其他用例完全没执行就进行了Pass标记。但是实际用例之间并不等价,导致漏测。
  4. 我们测试流程是DEV环境全量用例测试,线上环境仅执行主流程用例。正由于线上回归不是全量回归,而又缺乏自动化回归能力,我们也踩了一些环境配置导致的漏测的坑。

改进建议:这个问题也侧面反应两个点,1.频繁的手工测试让人倦怠,测试同学很容易眼高手低。2.没有自动化回归,测试同学的经验如果不可靠,往往付出血的代价。

为了解决这个问题,我们小组采取交叉回归策略。例如一个迭代有A、B两个同学参与测试,在一轮测试完毕后,A\B两个测试同学相互交叉测试彼此负责的模块,这样能解决一部分测试人员因工作粗心导致的漏测。

此外,我们团队开始着手接口自动化能力的建设,重点在测试环境自动化回归。3.建立项目文档知识库,缺陷复盘存档。

3.项目初期 发现bug数量多,修复率低,上线频频延期

团队初期由于项目节奏比较快,项目组成员不是在评审,就是在评审的路上,几乎每天都有各种项目相关的会议,大家都在赶项目上,而忽略了项目过程遇到的流程不健全的问题,最大的问题就是对开发的“宽容”(现在想想,真的是对开发的宽容就是对自己的残忍),具体点就是没有要求开发冒烟测试,开发自测完事后走一遍流程就提测了,而测试过程发现缺陷比较多,而且reopen的缺陷比较多。

当然,针对缺陷比较多的问题,我们自身也进行了缺陷分析原因和归类,大致有以下几类:

  1. 需求问题产生的bug,需求设计不合理,而直到测试阶段才发现问题
  2. 开发实现和需求不一致产生的bug
  3. 开发自测打马虎眼,对bug睁一只眼闭一只眼
  4. 开发新人对产品功能不熟悉
  5. 环境问题导致的bug

下面分析一下第3点,如果开发对自己开发代码多些责任心,自测质量高一些,会大大降低缺陷逃逸到测试阶段以及reopen的次数。而项目质量的提升,不能完全只靠“测”,离不开测研协作,推动开发高质量自测就显得非常重要。

而鉴于此问题的严重性,我们和开发同学沟通制定了三板斧策略:

  1. 推动开发高质量自测,不管是缺陷修复还是功能开发阶段。
  2. 设置项目提测门禁,冒烟测试用例100%通过方可提测。
  3. 给开发打质量分,初期我们给开发打质量分的指标也比较简单,主要针对缺陷统计侧面评估开发质量,当然每个项目的开发质量分会和开发leader反映问题所在,目的在于提升开发质量。具体质量分依赖的指标见图表。

4.测试过程发现了需求之外的缺陷如何处理?

随着业务压力越来越大,老板也给我们很对外包招聘名额,后续团队陆陆续续增加到7人,其中6个外包,当然并不是每个项目都是6个人一起上,而是将其划分了3、2、1的模式,其中3个人cover一个较大的项目,2个人cover较小的项目,1个人是自由人,主要承担线上反馈问题处理以及随时补位。较大项目一般2周发布,小项目一周一发。由于两条项目线并行的问题,这样就出现了A项目的测试同学负责的项目发现B项目测试同学负责过的版本存在遗漏的缺陷,而对这种问题,我们分情况处理:

  1. 如果测试过程发现历史缺陷,产研测会将此问题抛出来,评估严重程度以及修复成本。(1).严重程度决定是否修复; (2).修复成本用于评估额外的项目成本是否对项目整体造成延期的风险。
    1. 如果缺陷比较严重,修复成本比较高,则会延期修复。
    2. 如果缺陷不严重,则根据开发测试意愿自己决定是否修复。
  2. 如果A小组负责项目上线后,发现了B小组测试的项目版本出现缺陷,则缺陷责任人属于B小组测试人员。

5.开发过程需求经常变更

你是否也遇到过类似问题,开发实现的产品和交互设计的不一致?问了开发原因才晓得是产品单独找开发更改需求了。。。

当然并不是说 需求不能变更,需求问题在任何公司,我想都是不可避免的。因为随着系统复杂度的不断提高等原因,产品同学确实不太容易考虑完全。

该问题也比较常见,对项目的影响:

  1. 提测前需求变更,导致开发过程不流畅,且会存在设计变更的风险,缩短开发时间,影响开发进度及项目质量。
  2. 提测后需求变更,影响开发新版本的流程及开发修复bug时间,影响QA的测试进度。且需求变更容易引出新的问题致使项目质量不可控。

需求变更直接影响是,增加项目不确定性风险。

解决方案:

针对需求问题,我们通过以下措施去推动解决:

  1. 硬性要求,需求变更必须通知到研测,三方共同拍板,并重新评估项目排期。
  2. 测试角度,产品同学提前发需求文档,鼓励测试同学在需求评审的过程参与需求测试,多思考异常场景。
  3. 产品角度,避免需求文档中出现不确定、同上等模糊不清的说辞。如变更需求,PRD应及时更新要有变更记录,避免口头变更。
  4. 开发角度,避免盲从产品变更需求,应三方确认后,重新更新技术方案,如有必要可以重新技术评审。
  5. 如未告知测试进行需求变更,测试有理由拒绝测试。

6.线上故障应急效率低以及改进策略

第一阶段:刚接手项目后,就被拉进了很多飞书应急群。要说整个项目过程什么时候是最紧张的,那肯定是项目上线后的第2天早上,因为新需求上线后,可能会有未知的缺陷暴露,所以规定发布后的第2天一大早就要去公司侯着,以随时应对线上反馈的问题。对这是团队最早的应急方式-应急群被动接线上问题,完全属于人肉应急

除了应急效率低的问题,还经常报一些非代码缺陷的情况,例如网络原因导致的响应延迟问题、用户对新需求不熟悉的问题。当时我们也采取了一些手段来提升应急效率,针对用户对需求不熟悉的问题,让产品同学及时和CQC同学沟通新需求内容;和一线的用户沟通,最好在多个用户能同时复现再反馈到应急群。此外,针对网络等因素的问题,我们还给用户培训如何辨别问题的原因,例如利用Chrome的开发者工具查看接口报错等。再者就是建立缺陷知识库,给缺陷归类并标记tag,让一线用户可以自助找解决方案。

第二阶段:这阶段半自动应急阶段,何为半自动?其实就是给问题自动分配应急人,并通过机器人自动化记录问题,用于每个月的项目质量打分,可以理解为问题自动化存档。

第三阶段:接入字节跳动兄弟团队研发的应急机器人,可以基于知识库给用户自动化推荐相似问题的解法。可以有效排除一些反馈的无效问题,节省应急人的时间。

7.开发只改了一点点,为什么测试需要耗费那么多时间?

也许你也遇到过经常被开发/产品挑战“只改了一点点,为什么测试需要耗费那么多时间啊?”

这个问题在我经历过的几家公司都被开发产品挑战过。这个问题的本质是测试依赖手工测试的局限性。没有完备的自动化回归能力,缺乏有效的精准测试能力,仅人肉回归必定增加无效的测试,也属于测试有效性需要解决的问题。

下面说下我们测试组对测试开发时间比的“争论”以及最终的“妥协”。

第一阶段:没有什么测试开发时间比,因为当时项目多,测试人员少,往往一个测试全包全揽,所以测试时间根据功能测试范围由测试评估,当然测试时间的长短由测试经验评估的测试范围准确性决定。而缺乏有效的评估工具和精准测试工具,有时候经验也不准备,所以有时候项目比较赶有时候比较松。接着我们想到根据用例数评估测试时间,就按每天200个测试用例的执行数,评估一轮测试时间,再加+1人日回归时间,这样作为测试工时。例如600个测试用例一轮测试3人日,加1人日回归,总共4人日测试时间。

第二阶段:后来随着项目的任务量减小,经过高强度项目长时间的浴血奋战,老板发现测试同学手工测试略显疲态,为了缓解这种长时间手工带来的问题,和开发老板一起沟通决定测试开发时间比按1:3排期。这样不管项目大小,其实都给测试留出了一些自主时间可以用于技术提升。

第三阶段:建立接口自动化能力,将业务按主流程划分,全部实现接口自动化覆盖,提升测试效率,可以更快速的测试。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.开发经常私自发布代码
  • 2.项目漏测频出
  • 3.项目初期 发现bug数量多,修复率低,上线频频延期
  • 4.测试过程发现了需求之外的缺陷如何处理?
  • 5.开发过程需求经常变更
  • 6.线上故障应急效率低以及改进策略
  • 7.开发只改了一点点,为什么测试需要耗费那么多时间?
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档