ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

准入准出与质量卡点落地实战:从指标定义到CI流水线配置

准入准出与质量卡点落地实战:从指标定义到CI流水线配置 在质量口上摸爬滚打了十几年我越来越确信一件事质量问题多半不是某个人的锅而是流程里没有给“什么时候开始、什么时候算完”立下硬规矩。前阵子接手一个新团队需求文档、代码评审、自动化测试样样都有可每次一提测、一发版照样手忙脚乱。我做的第一件事是停下所有临时救火带着研发、测试、产品负责人花了两周时间把准入准出标准和质量卡点从头制定了一遍。这篇就把我当时的思路、清单、落地动作和踩过的坑全部复盘出来如果你也在为同样的事头疼可以拿来当模板直接用。1. 先想清楚准入准出和质量卡点到底在管什么1.1 准入准出不是用来卡人而是用来保护人先说准入准出。我见过最典型的一幕开发说自己写完了把代码往测试环境一扔测试点开页面发现环境起不来接口文档还是上一版的。如果团队没有提测准入标准测试人员就只能被迫接单花两三天替研发补环境、补数据、补文档最后缺陷报出来回头还被说“测试效率低、测试质量差”。这事儿本质上是让测试在替整个流程的不确定性买单。所以我把准入准出定义为交接双方的边界契约。准入标准回答的是“这个环节要开始你至少得给我什么”准出标准回答的是“这个环节要结束你必须证明做到什么程度”。切到提测上就是研发交出来的版本必须达到可测试状态测试接收之后才有意义。在制定的时候我会反复给团队啰嗦一句话标准不是用来卡人的工具是用来说清责任的护栏。谁都不愿意做无头无尾的活有了准入准出研发和测试不用再互相猜“你交付你该交付的我承接我该承接的”。这套东西是减少内耗不是增加流程负担。带着这个心态去定标准大家才愿意配合而不是开会时嘴上答应、会后当看不见。1.2 质量卡点是把标准变成机器执行的开关标准和卡点的差别我经常用一句话讲标准是写在纸上的要求卡点是嵌在流程里的开关。比如我们要求“提交测试前单元测试覆盖率不低于80%”这句话写在文档里就是标准但它真能起作用是因为我在CI流水线里加了质量卡点只要合并请求触发构建时覆盖率低于80%构建直接变红测试环境不部署。这时候标准才从一条建议变成了一个事实。设计质量卡点的时候最大的坑是贪多。有些团队把几十个卡点往流水线里一塞静态扫描、安全检查、覆盖率、漏洞扫描、代码规范、提交信息规范样样都强制结果是研发推个代码要跑大半天流水线怨气积累到一定程度大家就开始专门研究怎么绕过规则。我后来总结出的经验是卡点设置要“少而准”抓住最能暴露质量风险的几个关键动作宁可少设也别设一堆看着热闹但不顶用的假门禁。1.3 什么情况下适合启动制定判断一个团队要不要立即启动准入准出和卡点建设我一般看三个信号。第一个信号线上缺陷反复外溢客户发现的问题永远比测试多第二个信号测试同学每次接收提测都要先花两三天救火环境起不来、数据不对、文档没有第三个信号版本能不能发布完全靠某个人拍脑袋而不是靠数据说话。这三个信号出现任何一个都说明流程里缺了一层质量防线这时候就是推动标准制定的最佳时机。反过来如果团队还在为需求边界、技术方案吵得不可开交先别急着上这套标准否则只会变成又一层空转的流程。我提醒一点别一上来就全公司推。先找一个走标准流程还算顺畅的试点项目跑两三个迭代做出成功案例再用案例去影响其他团队比自己压着一百号人开会有效得多。这套方法我自己用了很多次成功率明显高。2. 核心细节指标怎么定才不空洞、不走过场2.1 准入准出要分层设不能一锅烩很多团队写准入准出标准喜欢一次写完“提测准入”和“上线准入”就算完了。我的建议是至少要分成需求、开发、测试、发布四个阶段。先看需求阶段。需求准入要求产品输出完整的需求文档、原型图、验收标准并且做一次正式的需求评审需求准出要求相关角色对需求达成一致所有未决问题清零。如果没有这层标准开发经常拿到一句话需求就开始写写到一半发现理解偏差整个迭代都跟着返工。这是最容易被忽略的准入环节。开发阶段也重要。开发准入是排期明确、依赖就绪、环境可用开发准出是代码实现完成、自测通过、静态检查无致命问题、单元测试覆盖率达到约定值。测试阶段的准入准出是重头我会在下文给一份可以直接用的清单。发布阶段则要看回归通过率、监控告警、回滚预案是否就绪。我习惯用一张表格把四个阶段串起来挂到团队文档库醒目的位置开会的时候对着表格逐行过比口头喊一百遍“要注意质量”有用得多。表格长这样阶段准入开始前提准出结束凭证需求阶段需求文档、原型、验收标准齐备需求评审已召开各方需求理解一致未决问题清零排期已确认开发阶段迭代排期明确外部依赖就绪开发环境可用代码完成并提交Review自测通过静态检查无致命项单测覆盖率达标测试阶段测试环境可部署冒烟测试全通过接口文档/测试数据就绪用例执行率100%通过率≥约定值致命/严重缺陷清零遗留缺陷有风险结论发布阶段发布计划明确灰度方案与回滚预案到位核心回归全通过线上监控无新增告警版本发布记录完整实际执行中每个团队可以按自己的业务特点增删但结构要完整。哪怕砍掉一些行也要保证每个阶段都有一进一出两个明确状态否则就会回到“谁想进就进、谁想出就出”的模糊状态。2.2 准出标准一定要量化不能写成形容词准出标准最大的问题是容易被写成“测试充分”“质量良好”这种形容词。第一次评审时我拿到的初稿几乎全是这种话根本没法执行因为每个人心里的“良好”定义完全不同。所以我会要求所有准出描述都改成可验证的数据项。以测试阶段为例我常用的一组量化准出指标是用例执行率达到100%通过率不低于95%致命和严重级别的缺陷全部清零一般级别缺陷关闭率达到90%以上遗留缺陷必须附带明确的评估结论和跟踪号核心路径的自动化回归通过率不低于98%重要接口的错误率、响应时间等指标达到约定阈值。这些数字不能拍脑袋拍出来最好依据团队最近三到六个月的真实数据来定。比如团队近半年平均用例通过率是92%你一下定到99%那不叫质量标准叫画饼合理的目标应该是95%到96%跳一跳够得着又不会逼着团队造假。准出标准如果连续两个迭代一个都没触发过说明定得太松如果每次都触发一堆说明定得太紧需要按实际数据复盘调整。还有一个常被忽略的细节数据必须可追溯。覆盖率数字背后要有报告用例执行要有记录缺陷关闭要有凭证。如果只截一个指标数字研发说“我自测过了”但什么记录都没有标准等于没有。我会在制定时顺手定义数据来源比如覆盖率以CI报告为准缺陷以缺陷管理系统状态为准这样多方核对时才有依据。2.3 质量卡点布在哪比布多少个更重要质量卡点不是装饰品它要卡在真正能拦住问题的位置。我在项目里通常会选四个位置代码提交或合并请求时、提测构建时、版本发布前、线上灰度过程中。代码提交或合并请求阶段的卡点主要盯静态扫描、单测覆盖率、安全扫描这类机器可以自动判定的指标通常做成强制门禁不达标就拦下。提测构建时的卡点盯的是测试环境能否成功部署以及冒烟用例是否通过这是测试准入的关键。版本发布前的卡点更复杂要综合判断回归结论、缺陷状态、运维检查等通常会做一个人工加系统双重确认的环节。灰度过程的卡点则看监控指标比如发布后的错误率有没有异常升高一旦超过阈值就触发自动回滚。给卡点选择强制策略时我的经验是分两类一类是“一票否决型”比如静态扫描发现高危漏洞、冒烟测试失败必须强制阻断另一类是“提示型”比如代码可维护性评分偏低可以放行但要通知对应负责人跟进。强制卡点多了会让流水线变得极其脆弱提示型卡点给团队留出合理判断空间反而更容易被接受。3. 实操过程五步完成标准制定与落地3.1 第一步摸底现状选好试点我拿到这个任务时没有直接写标准而是先花了一周摸现状。具体动作包括翻历史迭代的缺陷数据统计每个阶段发现缺陷的比例梳理过去三个版本提测到上线的平均耗时找研发和测试各聊一轮问他们觉得哪些环节最难受。这些信息直接决定后面的指标怎么定。摸底的同时要选试点。我不建议一开始就在全部项目上展开因为每个项目的成熟度不一样一刀切会让流程非常痛苦。我通常挑一个业务重要但规模适中、研发和测试配合度较高的项目来试点先跑起来再逐步复制到其他项目。试点范围小出了问题可以快速调整团队的抵触情绪也会小很多。3.2 第二步跨角色一起定义清单定义清单不能是质量部关起门来写一定要拉着研发负责人、测试负责人、产品负责人和运维一起过。因为准入准出是交接契约只有双方都在场标准才可能落地。我们会开一个专题评审会先把上面那张四阶段表格投在屏幕上逐行讨论。讨论时只允许加指标不允许出现“大概”“差不多”这种词。比如研发说自己自测完了那就问他自测通过什么标准来判定最后落成“核心用例自测通过”这样一个可执行语句。遇到争议比较多的指标当天不拍板后面拿数据说话。这一步最容易出现的分歧是“谁为最终质量负责”。研发觉得测试应该把关测试觉得研发自测不到位。我的处理方式是把责任切到每个阶段的准出上开发阶段准出没达到就不能提测测试阶段准出没达到就不能发布。责任跟着环节走而不是挂在某个岗位头上。3.3 第三步把阈值和策略写清楚这一步是把标准变成参数和规则。每个量化指标到底是强制门禁、提示型门禁还是不设门禁都要写明。同时还要定义特殊情况怎么处理比如线上紧急故障修复时可以申请临时放行但必须由负责人明确审批并且事后补走流程。没有例外机制的标准在执行中被打破几次之后就作废了。我在这一步会特别要求团队把“数据来源”写进文档。比如覆盖率看哪个报告缺陷状态看哪个系统监控指标看哪套看板。数据来源定义清楚后面核对和复盘才有共同语言否则两边各拿各的数永远说不清。还要做一次反向推演。每个指标都问一句如果团队想绕过去最短的路径是什么比如“用例执行率100%”看着严格但如果有人在系统里勾选“跳过”数字照样能凑满。推演完就知道该在哪个环节补一个拦截而不是等到月底看报表才发现异常。3.4 第四步把质量卡点嵌进流水线标准写完只是开始真正让它活起来是在流水线里落地。我先拿一个典型的CI流水线片段举个例子这是简化版重点是表达卡点嵌入的位置check_quality: stage: quality_gate script: - run_static_scan - verify_coverage --min 80 - verify_build only: - merge_requests在这个例子里代码一合并请求就会触发质量卡点静态扫描不过直接失败覆盖率低于80%也会把流水线阻断。卡点失败时系统会把失败原因自动反馈到合并请求的评论里提交人可以立刻看到是哪个指标没过而不是一脸懵地等人工通知。流水线里落地卡点的原则是“先自动后人工”。能由工具判断的指标全部自动执行只有发布决策这类需要结合业务上下文的情况保留人工确认。自动卡点减少了人的主观判断也让标准在每天几十次提交中都保持一致而不是只在周五发版时被想起来。3.5 第五步灰度试行复盘点子最后一步不是等上线而是试运行。试点项目跑两到三个迭代后我会组织一次复盘会重点看三个问题哪些卡点拦下了真正的问题哪些卡点从来没触发可以拆掉哪些指标是被团队绕过去的。根据复盘结果调整标准然后才推给更多团队。我经验里比较重要的是标准一定是活的不是写一次就永远不变。每两到三个迭代都抽时间把标准过一遍根据团队成长和业务变化调整指标。把标准的迭代也排进迭代计划这比年底一次性大检查真实得多。4. 这些坑我全踩过帮你录一份避坑清单4.1 标准写了一大堆执行时没人认账这是最大的坑。我最早定标准的时候把二十几条要求密密麻麻写满了两页纸发通告、贴墙上结果到了提测环节压根没人按这个执行。原因很简单标准太多人记不住也不信你会认真执行。后来我做了两个改变。第一标准尽量精简每个阶段只保留最核心的三到五条确保每个人都能背出来。第二一旦有人违反第一时间反馈而不是攒到月底总账。比如冒烟测试没过就提测马上把提测单打回并明确告知差哪一项。执行几次之后开发自然就记住了。另外还有一招每次评审提测时用准入清单逐项打勾把打勾过程变成固定动作。标准不是靠背是靠一次一次用它来建立习惯。让标准出现在日常工作的每个交付点上大家才会真正当回事。4.2 卡点太多太严把团队逼成“钻洞高手”第二个坑是反方向卡点设太多逼着大家研究怎么绕过。我之前见过一个团队流水线上挂了十几个强卡结果开发为了快速合并把一次大改动拆成几十个小提交绕开覆盖率检查或者专门写一些“命中覆盖率但不测逻辑”的用例来凑数字。这些行为不但消耗大量时间还让卡点变成了形式。解决方法是主动给卡点做减法。每次复盘都统计每个卡点的拦截率和真实有效拦截率把那些长期没有拦截效果的卡点拆掉对于确实需要但成本高的检查从强制改成提示把精力集中在少量真正影响质量的卡点上。另外要从机制上杜绝人为绕行比如覆盖率统计必须关联被提交的变更逻辑而不是看整体项目数字免得被“稀释”。还有一点要记住卡点不是审判台是安全网。当大家发现卡点拦下来的问题真的是问题而不是流程找茬抵触情绪自然会下降。所以每次卡点拦截到有价值的问题我都会在复盘会上点名表扬让团队看到卡点的价值。4.3 准出数据不可信门禁变成橡皮图章还有一种情况指标数字都在但没人信。原因是数据来源不可靠或者口径不一致。比如覆盖率有人看CI生成的有人看本地跑出来的两边数都不一样最后指标就像橡皮图章谁都能盖。我从一开始就固定数据口径一律以CI流水线生成的报告为准本地数据不认。缺陷状态以缺陷管理工具的流转状态为准不允许口头发个“改完了”就当关闭。同时定期抽检比如随机抽查几条关闭缺陷看看对应的测试记录和代码变更是否真的对应上。数据可信了门禁才谈得上权威。4.4 标准只在发版前被想起平时形同虚设很多团队把准入准出当成发版前的一次性检查平时开发、提测阶段根本不看。结果就是所有问题都积压到发布前爆发门禁追不上风险人人都在救火。要改变这种状态要靠前面说的分阶段准入准出。把标准的执行点前移到提测、代码合并这些小步动作上而不是只在最后一步才把标准拿出来。质量卡点就承担了这个作用它每天在流水线里跑几十次让执行标准变成一种日常惯性而不是发版前的临时仪式。5. 常见问题速查表5.1 快速判断该不该上这套机制我把在实际推行中被问得最多的问题整理成下面的速查表直接对着查就行问题回答要点什么时候该启动制定出现线上缺陷外溢、提测频繁救火、发布靠个人拍板任一时就意味着需要标准了先做哪些指标从最容易拿到数据、最影响交付的指标开始比如冒烟通过率、用例通过率、缺陷关闭率标准定太紧怎么办用最近三到六个月的数据做基线定一个跳一跳够得着的目标别拍脑袋卡点要不要强制安全类、导致产品不可用的检查尽量强制成本高的改成提示型有人绕过卡点怎么办先看是不是卡点本身设置不合理再考虑增加人工抽查和审批环节试点失败怎么办缩小范围砍掉一部分卡点先保证最小闭环跑通再去完善5.2 指标被“洗数据”了怎么办这个问题在自动化覆盖率上最突出。我遇到的情况是有人把测试写成只断言常量来凑覆盖率代码覆盖率数字很好看但实际业务逻辑完全没测到。后来我把指标从整体行覆盖率改成“变更代码覆盖率”新增代码必须有对应的断言测试并且把覆盖率报告和变更文件关联起来。这样洗数据的成本一下就高了指标才逐渐变得真实。洗数据的问题不能只靠工具解决还要靠文化。我会在评审会上明确讲清楚指标是用来帮助团队发现盲区的不是用来考核个人的。如果大家觉得指标是扣分项自然会想办法美化如果指标被当作找改进点的输入人才愿意暴露真实数据。这是同一套机制完全不同的两种效果。5.3 和业务方谈不拢标准怎么办还有一种常见场景业务方觉得质量卡点拖慢了交付。这种时候我不扯一堆大道理而是把数据摆出来说明卡点帮助拦截了多少缺陷回滚率从多少降到多少实际节省了多少返工时间。用真实数据沟通比讲原则有效得多。同时给业务方一个明确的预期标准不是限制上线是为了减少上线后出问题带来的更大损失。一旦他们体验到少填几个线上坑自然就愿意配合。最后说点我自己的体会。定准入准出标准不难难的是把它变成一个大家每天愿意使用的习惯。我在实践中最深的感受是标准一定要简单到让人可以日常执行卡点一定要少到让人不反感。别指望一份完美的标准解决所有问题重要的是先有一个能跑起来的框架然后在两三个迭代里不断修正。把质量标准当成产品一样去迭代比一次性追求完美有用得多。
返回列表