DevOps 时代的高效测试之路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding.NET 轻量级社交
开源项目广场
使用帮助
意见反馈
CodingNET
V2EX    Coding

DevOps 时代的高效测试之路

  •  
  •   CodingNET 2021 年 10 月 26 日 956 次点击
    这是一个创建于 1545 天前的主题,其中的信息可能已经有所发展或是发生改变。

    10 月 22 日,2021 届 DevOps 国际峰会在北京顺利召开,来自国内外的顶级技术专家共同畅谈 DevOps 体系与方法、过程与实践、工具与技术。CODING 测试及研发流程管理产品总监程胜聪( Diego )在大会现场接受了 CCTV 《态度》栏目组的专访,也在 DevOps 最佳实践及解决方案专场为大家分享了他的主题DevOps 时代的高效测试之路。

    5IpK58.png

    测试正在成为持续交付的最大瓶颈

    业界对于测试的焦虑由来已久。从 2017 年开始,行业开始对测试困境形成共识,即测试不够快成为导致交付延期的主要原因。之后,行业开始强调自动化测试,提出打造快速反馈环、流水线工作流和工程文化等理念。

    5IpZDI.png

    在这种背景之下,Diego 认为,持续测试是 DevOps 时代的高效测试之钥。测试作为一项基础的、持续的活动,理应贯穿于整个软件交付周期之中。持续测试改变的是传统测试后置的工作模式,让测试活动延伸到 SDLC 的每个阶段。

    5IpnVP.png

    高效测试需要以自动化为实践基石

    从一项对于测试时间花费的调研中可以得知,测试执行占了总时间的四成。因此如果要提升整体测试效率,首要的就是通过自动化来提升测试执行的效率。然而,测试团队发现即使在 CI 中配置好自动化代码库,由于待执行的用例集合是固定的,随着自动化测试覆盖率提升、自动化代码越来越多,运行时间越来越长,于是运行频率却越来越低,效果并不如人意。

    Diego 指出,只是默默地写自动化代码是不够的,**自动化测试需要"更聪明地执行"**。如果能够人工地将需求( Req )、用例( Case )以及自动化函数( Func )关联在一起,灵活确定测试子集会让测试变得更加自由。如果某个自动化函数运行失败,则可以迅速定位到某个有问题的需求,团队再根据问题的优先级和影响,来判定是否能够继续发布。

    5IpVKA.png

    新的时代,新的流程

    在新的时代,提倡新的流程。持续测试并不仅仅只是自动化测试、还有对流程的全局优化,这需要我们从单点(执行)效率的提升延伸到全局效率的提升。工具 /技术改进过程效率( efficiency ),而流程会指向正确的结果( effectiveness )。

    那么,DevOps 时代需要什么样的测试流程?

    首先,Diego 认为敏捷宣言的四个“高于”清晰的指出了研发应该关注于为用户带来价值的行为和结果,而不是过程中的产物。

    然而尽管协作很重要,却不意味着流程、文档、计划不重要。只要软件的复杂度还在,有助于软件顺利交付的流程、文档、计划都是必要的。只是需要相应变化、与时俱进转为轻流程、简洁文档、尽早计划,或“演进式”的流程 /文档 /计划。

    DevOps 需要更轻,更强调角色协作的流程。测试团队首先需要围绕需求开展测试,策略性定义子集,并且确定基于风险的测试策略。其次,团队需要推动测试左移,让测试与开发并行工作。在这个阶段,需要完成的工作包括单元测试、测试评审、代码扫描,以及基于接口定义的开发和自动化测试。最后,还需要实践测试右移,让“测试永不退出” 在部署之后,还需要进行线上的实时监控,保证问题得到快速发现和处理。

    5Ipebt.png

    此外,DevOps 还需要健壮的规范和快速的反馈。Diego 认为:研发“一致性”是效能提升的基础,规范能够降低协作中的人为产生的主观复杂度、避免不必要的上下文理解。而快速反馈不仅仅是减少手工操作的“劳力花费”、更重要的是减少成员的“心力损耗”,让成员可以专注于自己的工作,不必要在不同平台之间来回切换。软件开发的艺术成分应该被关进笼子里,而在软件开发中并不需要艺术的部分,例如机械的判断选择、和协同所需操作,应趋向于科学化和量化。

    腾讯云内部落地实践的分享

    最后,Diego 向现场观众分享了腾讯云 CODING 团队内部的落地实践,展现研发一体化的高效测试是如果实现的。

    在研发过程中,存在各种各样的活动。研发团队中的不同角色,如产品、开发、测试以及运维一般都只关注自己所负责的活动,然后不同角色活动之间也存在关联,协作产生的活动便形成一个完整的工作流。在此基础之上,加入准入准出规范可以让协作更加健壮,而自动操作则让流动更加高效。CODING 正是基于这样的逻辑,来为研发流程的高效管理设计出 CODING Compass 这一产品。

    然而,DevOps 不应该只是研发团队自嗨的领域,我们还需要跟业务价值连接起来。通过把研发活动映射到业务人员所熟悉的阶段:计划、开发、测试、部署,并且保持对 Lead Time (前置时间)、Process Time (处理时间)、% of Completeness &Accuracy (完成&准确百分比) 等指标的关注和持续改进,形成价值流管理。

    5IpuUf.png

    接下来,Diego 向大家介绍了腾讯云 CODING 团队是如何将测试活动嵌入其中的。

    首先,迭代规划阶段会围绕着需求开展测试,策略性的定义测试子集。测试与开发紧密协作,同时认领同一需求任务。而当迭代 Backlog 确定下来之后,也就表示测试范围定下来了,测试计划就可以创建,而需求的验收标准也就可以直接转换为功能点用例。

    而在迭代进行时,测试和开发并行进行工作,在开发人员编码单测的同时、进一步细化用例使之完整,并及时进行评审。在写自动化用例的时候,我们可以利用 CODING 平台的帮助实现自动化用例与功能用例的关联。

    5IpQPS.png

    从而,当从测试计划中发起测试执行,关联的自动化用例会被指定执行。

    5Ipl8g.png

    通过践行研发一体化的高效测试,团队的高频发布得到了坚实的支撑,月均成功发布次数 400+,需求的测试覆盖度 96%,而且覆盖主干的自动化用例集通过持续重构基本上维持在 1400 的数量(冒烟自动化用例必须要在 15 分钟内执行完毕)。

    最后,Diego 总结道:CODING 之所以能实现高效的测试,3 个方面理念的转变是尤为关键的。

    首先是打破职能筒仓、实现目标共享。在过去开发和测试人员的目标通常是割裂、甚至相互对立的,开发人员看重写了多少行代码,测试人员则关注发现了多少个 bug 。正确的观念应该是赋予团队同一目标,让不同角色围绕业务需求展开工作,共同交付高质量的软件。

    其次是,改变“阶段式交接”为“小步快走”的工作模式。开发和测试应该以同样优先级顺序来处理需求,这样到了交付的时候得到的是成品而非“半成品”。一方面在全局通过控制在制品数量来缩短交付时间,另一方面在局部则通过自动化的手段来进行单点的加速。

    最后,则是实现了真正为团队成员赋能。赋能并非要求所有人都是全才,而是让团队成员都放心的与其他人协作、或者使用其他人提供的工具和服务。为了解除疑虑、保障协作过程的顺畅,通过标准规范的设定来提升活动的一致性,为团队效能提升带来积极的影响。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2585 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 15:19 PVG 23:19 LAX 07:19 JFK 10:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86