草庐IT

测试角色在项目各阶段的项目管理tips

Jcloud 2023-03-28 原文

作者:京东物流 宋雪薇

1 前言

项目管理是一个繁杂的过程,每个阶段需要涉及到不同人员、资源的协调配合。每个角色都有自己的定位和任务,为了紧密配合项目经理或无分配项目经理运行项目的场景下确保项目成员共同达成项目目标,不同的角色掌握相应的项目管理意识就尤为重要。

那么,测试角色作为项目交付的质量把控者,具备相应的项目管理意识在项目的高质量、高效率交付目标上有着重要作用,如前置识别质量风险、进度风险等。本文旨在梳理、谈论测试角色在项目各阶段如何评估测试范围及风险、前置暴露问题以及推进测试进度等项目管理事项,高效协作及交付测试角色产物,最终与项目各方共同推进达到高质量、高效率交付的目标。

2 现状及思考

在现有敏捷迭代快速交付模式下,针对某一需求/项目会拆分至各个团队,各个团队节奏及交付目标不完全一致,且无项目经理角色跟踪推进的情况下,存在后置与协作团队沟通确认事项,如:未拉齐依赖方排期、前期未识别出改动系统、需求/设计变更未及时同步相关方、无设计方案沟通导致提测内容不满足提测标准,等均可影响交付节奏。那么作为测试角色的我们可以做哪些事情?

核心主旨:高效沟通协作,提前思考后续阶段较容易影响进度、质量问题及风险点,暴露问题,前置沟通、评估及推进相关事宜;避免问题后置暴露在测试阶段;下一章节就让我们来详谈各个阶段测试角色可提前关注事项,与各方高效协作共同推进解决的相关tips。

3 详谈测试介入各阶段的项目管理tips

3.1 需求评审阶段

软件测试的第一步就是需求评审,只有对软件需求做了准确、完整的评审后,才能对接下来各种测试工作的开展做好基础,如需求评审理解偏差,后期很多测试任务都将会受到影响。

需求评审完成需了解哪些信息:

  1. 优先级——识别项目/需求重点程度,优先级,以及期望上线时间情况(定位后续跟进力度)
  2. 需求背景——该需求基于什么业务背景改造(便于需求理解不偏差及后续测试阶段重点关注的核心目标)
  3. 改动范围——评审改动范围基于现有系统是否有冲突、是否明确合理,是否影响其他系统,也可关注下体验问题(避免后续开发测试阶段流程不通返工)
  4. 识别改动/交互系统——明确该需求是否涉及其他系统改动,识别改动系统/是否需配合联调系统(识别改动系统前置协调拉齐相关系统周期,避免后续阶段临时协调资源情况)
  5. 测试节点——软件需要进行哪些方面的测试,如功能测试、联调测试、回归测试、性能测试、稳定性测试、兼容性测试、安全测试等
  6. 测试环境——明确交互系统是否支持测试环境联调(可前置协调/前置确定联调方案,避免后置沟通确定环境占用测试周期)
  7. 测试数据——根据改动范围思考测试数据来源,识别是否可内部闭环造数,是否可使用测试小工具
  8. 测试方式——可前置思考使用功能测试、自动化测试
  9. 测试人员——识别测试干系人、明确主测试方(如重点项目/需求需要主测试情况)

3.2 设计评审阶段

设计评审为评价设计满足质量要求的能力,识别问题及提出解决办法。设计过程中越早增加质量保证活动对最终设计效果的影响就越明显。目前较大项目/逻辑较复杂需求/研发优化,均需研发输出设计评审文档并邀请测试参与涉及评审。

设计评审时需要check的内容:

  1. 设计思路满足需求——结合需求背景及内容优先关注设计思路是否与需求评审阶段理解的有偏差
  2. 设计内容是否存在遗漏——评估是否存在遗漏功能
  3. 关注实现方式——实时、异步等处理方式对后续测试排期、方式及测试难度有参考价值
  4. 评估改动设计影响——基于原有系统改动除本次需求修改内容是否影响原有功能,是需明确影响范围,研发侧输出影响范围
  5. 明确阶段范围——根据需求是否存在拆解阶段交付,是需明确各阶段交付内容
  6. 交互方/依赖方实现方式——关注交互方/依赖方实现方式
  7. UAT/灰度/上线方案——根据上线特性,前置沟通UAT/灰度/上线方案

3.3 排期阶段

排期阶段是项目管理中重要的一环,时常在此阶段会暴露一些风险,排期容易出现两个问题,一是排期不合理,二是后续不能按照排期稳步推进,好的排期就要尽量避免这两个问题,那么测试阶段合理的排期就需尽可能多的参考该节点及之前节点项目各方提供的有效信息,全局评估、拆分任务交付,最终提供较合理排期。

输出测试排期需要考虑的维度:

  1. 参考项目重点程度、优先级——是否优先级与已排期需求冲突,需参考优先级调整资源及排期
  2. 结合需求、设计参考及核对研发工时及排期、阶段交付内容——研发提供拆解后的任务排期是否合理(前置功能是否提前交付,依赖的任务是否有序等),测试依据研发排期时间提供可并行/串行等较合理的测试排期
  3. 关注研发是否有联调排期——需保障提测质量,时间紧任务重情况下是否压缩研发联调排期,可能影响提测质量及测试交付时间
  4. 测试联调排期——测试输出联调周期需拉齐对接系统排期(可协同产品沟通拉齐),避免临时协调联调时间导致延期
  5. APP排期——需确认实现方式为:原生/flutter
  6. 明确方案是否存在变更——可再次明确需求/设计方案是否存在变更未同步情况
  7. 明确主测试方——如涉及多方系统,排期阶段可明确主产品、主研发、主测试方

3.4 测试用例编写、评审阶段

测试用例的编写必须依据需求文档,结合设计方案,确认所有以疑问点,覆盖所有功能需求点,跟进需求情况输出冒烟测试用例、功能测试用例、联调测试用例,思考业务实操场景,模拟用户场景串联流程保障测试内容的高覆盖。并在用例评审节点邀请产研参与评审,有序进行用例评审,确认疑问共同完善测试点并会后输出评审会议纪要。

测试用例编写、评审阶段需要注意的事项:

  1. 确认需求文档版本及标准——明确最新PRD版本(存在产研线下沟通后未同步测试情况,尽量避免),如有原型需明确原型及PRD内容描述不一致情况下如何开展测试工作
  2. 思考细节逻辑合理性及歧义描述——思考细节逻辑描述是否合理,PRD描述存在歧义点需标注明确
  3. 包含充分的异常测试用例——丰富异常用例,避免异常情况下功能异常
  4. 识别用户体验问题——提示信息是否明确、页面功能是否易用
  5. 业务范围和系统设计维度补全用例——跟进需求及设计细化测试维度丰富测试用例
  6. 测试数据、账号、配置等——识别测试数据、账号及配置是否需协同方配合,是否可使用工具等提升效率,如需全流程连通在该阶段记录
  7. 测试用例评审——与产研侧确认测试范围、沟通疑问,评审用例设计的清晰度与合理性,优先级排定是否合理,是否覆盖了需求上所有测试点,用例是否具有很好的可执行性,用例的冗余处理机制,是否设计了充足的异常测试用例,是否从用户的角度出发来设计用户使用场景和使用流程的测试用例,是否简洁、复用性强。
  8. 联调用例评审——输出交互场景与交互方评审,如为主测试,评审前串联整个项目/需求的流程场景用例,组织评审、明确测试数据、账号、配置等信息
  9. 用例评审会议纪要——记录待确认点及已确认点

3.5 编码阶段

编码阶段作为研发角色活动,通过编码过程来实现产品需求,此阶段的异常等需相关方知悉;

研发阶段需同步的信息:

  1. 需求/方案变更——是否存在需求/方案变更,是否及时同步至产品、测试侧
  2. 是否有提测延期风险——存在延期风险会压缩后续测试周期,需前置识别并抛出

3.6 代码评审阶段

代码评审是研发全流程的工程实践之一,通过代码评审可以更好的保障产品质量和代码质量;可根据改动大小与研发侧沟通进行线上/线下等评审方式参与。

代码评审阶段需检验的标准:

  1. 慢sql、空指针等——可有意识评审慢sql、空指针等问题
  2. 业务逻辑——测试人员需关注是否有明显的逻辑错误,改动是否遵循业务逻辑
  3. 补全回归用例——跟进改动范围可识别需改动影响原有功能部分,特别注意需确保主流程是否影响,补充回归用例
  4. 文档——提供新接口/修改接口是否有相应的接口文档更新维护
  5. 需求冲突识别——关注改动范围,识别其他需求是否也存在改动该段代码问题,避免需求冲突
  6. 提高个人代码评审能力——学习研发针对代码评审的意见/建议以及好的代码实现逻辑,便于问题更早的发现(以及代码编写规范、可读性、可维护性等)

3.7 冒烟测试阶段

冒烟测试是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性,尽早发现较阻塞进度问题,提前识别。

冒烟测试阶段重点关注的维度:

  1. 基本功能验证——优先验证基本功能是否可用,便于后续逻辑等较复杂功能开展
  2. 主流程验证——优先识别主流程问题,避免流程阻塞,阻碍测试进度,提前暴露流程问题及风险(方式依据项目/需求情况有效采取手工/自动化方式进行)

3.8 功能测试阶段(内部测试阶段)

功能测试阶段开始了大规模的测试工作,在此期间仔细详尽的测试,

功能测试阶段核心把控的思想:

  1. 明确变更同步——针对测试阶段任何变更需同步至相关方,避免一方不知情
  2. 识别需求冲突——共同测试需求,测试分支、需求相互影响
  3. 测试数据高效使用——分析测试数据是否可验证多用例,高效使用测试数据验证尽可能多用例提升效率
  4. 测试问题务必抛出——测试阶段发现的问题即使较小也需要抛出来提供给相关确认方确认,如无需更改则记录相关结论
  5. 探索性测试——探索性测试,可在测试阶段发现前期未识别到的影响功能等
  6. 测试进度报告、风险抛出——针对时间较长/较大需求、项目发送测试进度报告,暴露风险(识别是否有影响进度、质量等风险问题,抛出问题,记录待确认问题及已沟通确认问题

3.9 联调测试阶段(包含研发联调、测试联调)

联调测试为了保障该需求/项目的所有改动场景下发的数据在全链路系统下正常流转闭环,覆盖用户真实实操场景来确保项目/需求的交付质量。

联调测试阶段注重:

  1. 研发联调环节——再次核对涉及系统交互需求/项目,研发联调工作是否覆盖主流程测试点
  2. 联调场景验证——与全链路系统进行联调测试验证,覆盖用户真实实操场景
  3. 补全联调场景——在联调阶段,可能存在场景覆盖不全情况,可有选择性了解上下游系统逻辑,可覆盖补全联调场景,且针对接口及消息尽量全的确保数据传输场景

3.10 稳定性测试(适用于APP)

为保障APP端用户体验,APP稳定性测试不可或缺,上线前针对上线版本进行稳定性测试已加入到APP测试流程中,日常针对APP稳定性随机测试也持续监控。

稳定性测试需监控:

  1. 崩溃率——监控阿凡达平台统计,分析APP线上崩溃原因,丰富稳定性测试脚本
  2. CPU实时监控——记录稳定性测试期间对应版本的CPU占用数据,平均值、最大值
  3. 内存实时监控——记录稳定性测试期间对应版本内存占用数据,平均值、最大值
  4. 网络实时监控——记录稳定性测试期间对应版本流量占用数据,平均值、最大值

3.11 UAT阶段

UAT阶段主要为业务验收阶段,用户角色验收产研测交付内容,为确保UAT顺利进行,较大项目/需求测试人员有针对性进行主流程拉通测试可提前发现配置、环境因素所产生的问题,此环节可加快UAT进度确保项目更高效交付(该阶段可根据项目诉求调整)。

UAT阶段应保障:

  1. 拉通主流程——根据项目/需求大小确定是否需拉通UAT,避免UAT因配置/环境等原因产生流程阻塞
  2. 跟进/复盘UAT问题——针对较大项目/需求跟进及复盘UAT中产生的问题,规避重复问题产生事项

3.12 上线前master回归测试阶段

上线前master回归未确保长时间需求不上线分支及版本冲突等因素,上线当前进行master回归操作可有效确保发布内容运行稳定,保障质量。

master回归阶段需check:

  1. master回归测试——回归上线功能主流程以及原有流程主流程,规避测试分支与上线分支代码冲突等问题

4 暴露风险最终与协作方共同确定运作策略

在项目各环节已前置思考可能带来的风险,提前规避、提前暴露,但并不能完全保障,那么在暴露风险后,可参考风险程度分析与分类定位,与项目各方高效协作,共同商榷解除风险的可行性方案以及后续运行策略。

4.1 风险程度分析

  • 极小:没有危害或微小危害 20%
  • 轻度:轻度危害 40%
  • 中度:中等 60%
  • 重度:较大危害 80%
  • 极大:重度危害 100%

4.2 风险识别分类/分解结构

  • 技术类:明确是否为需求/技术层面引起的风险
  • 组织类:明确是否为项目依赖关系、资源等原因引起的风险
  • 外部:明确外部影响具体原因

4.3 与协作方共同商榷风险推进方案

测试人员可根据测试角度定位风险优先级,优先解决风险程度较高问题,且优先级较高风险需同步至上级知悉,必要时可采取升级等方式处理;

  1. 如为技术类风险——与项目经理、产品、研发共同评估技术层面解除方案;
  2. 如为组织类风险——与项目经理、产品、研发共同协同调整计划/申请资源等方式处理;
  3. 如为外部风险——测试人员需提供具体问题,协同项目经理、产品沟通具体原因,采取相对应的应对措施;

4.4 举例说明

4.4.1 举例一

背景:管理工作台项目(优先级top1,交付时间紧,开发工作量大)
产生问题:因测试周期时间紧,为避免延期提测,测试在研发阶段明确提测时间时,发现提测存在延期风险

  • 风险程度分析及分类:组织类-重度风险
    (识别阶段:研发阶段,识别及反馈角色:测试人员,类型:进度类)

  • 与协作方商榷推进方案(解决过程及方案):
    因项目优先级较高,测试人员将此风险反馈至主产品及产品负责人处,因各方前期了解的信息存在差异化/关注点不一致等,线下拉齐会议沟通,根据交付优先级拆解交付内容,迭代提测进行测试,最终拉齐前、后端研发、测试交付目标一致,并调配资源进行各项任务交付,风险解除。

小结:依据风险程度,可内部解除的快速推进落地,需耗时较长/协调资源等需及时反馈至上级沟通,确保风险尽快解除落地。

5 总结

前置评估、高效协作

保障在前置阶段通过测试经验总结提前思考后续阶段会带来的影响,包含但不仅限于:信息不同步、影响范围不明确、依赖关系不清晰等,前置有意识的识别较容易影响进度、质量问题及风险点,并暴露问题,继而与相关协作方高效协作、评估及推进风险点解除,避免问题后置暴露在测试阶段甚至交付上线阶段。

有关测试角色在项目各阶段的项目管理tips的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  5. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  6. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  7. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  8. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  9. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  10. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

随机推荐