测试BUG 篇:从“怎么测”到“怎么提”,再到“怎么关”全流程

BUG 篇:从"怎么测"到"怎么提",再到"怎么关"

软件测试不只是"点点点找问题",更重要的是:用一套可复用的流程,把问题稳定、清晰、可追踪地送到修复闭环里 。来看这篇文章的主线:先讲软件测试生命周期(测试怎么贯穿项目),再讲什么是 Bug、怎么把 Bug 写清楚、Bug 的级别怎么定、Bug 的生命周期怎么走,最后聊一个高频现实题:跟开发产生争执怎么办


1)软件测试生命周期:测试到底"贯穿"在哪些环节?

来看流程图,软件测试贯穿软件的整个生命周期,测试的生命周期(也就是测试流程)是一系列按顺序执行的活动,用来保证产品质量符合需求;每个阶段都有不同目标与交付物。

下面按阶段把"做什么 + 产出什么"说清楚:

1.1 需求分析

来看三种视角的检查点:

  • 用户角度:软件需求是否合理
  • 技术角度:技术上是否可行,是否还有优化空间
  • 测试角度:是否存在业务逻辑错误、冗余、冲突等问题

这一步的价值是"提前排雷":很多后期难修的大坑,根儿其实在需求阶段就能看出来。

1.2 测试计划

来看测试计划要回答的问题:**什么时候开始测、什么时候结束测、测多久、怎么测(测试形式)**等。

常见产出物就是测试计划(范围、资源、排期、风险、里程碑、准入准出等)。

1.3 测试设计与开发

来看核心动作:参考需求文档、技术文档等编写测试用例,并编写测试文档,明确使用到的测试方法、测试工具、测试数据准备等。

你可以把这一步理解为:把"怎么验证质量"变成可执行的清单与脚本。

1.4 测试执行

来看目标:充分利用测试用例和测试工具,对项目尽可能做到全方面覆盖,并持续提交与跟踪缺陷。

1.5 测试评估

来看要回答的关键问题:

  • 本次测试是否通过
  • 是否有遗留的 Bug
  • 最终需要产出一份测试报告(总结风险、缺陷分布、结论、建议)

1.6 上线

项目测试结束后发布到线上环境,测试人员通常需要跟踪上线并验证线上环境下软件运行是否正确。

1.7 运行维护

测试人员对业务和操作非常了解,且沟通表达能力通常较强,所以在运行维护阶段常会参与:

  • 项目实施工作
  • 用户使用培训
  • 试运行期间收集问题并及时反馈给相关负责人

一句话总结:测试不是"最后一道门",而是"全程的质量合伙人"。


2)什么是 Bug:不是"我觉得不对",而是有标准的

来看定义:计算机 Bug 指程序中存在的错误(error)、缺陷(flaw)、疏忽(mistake)或故障(fault),使程序无法正确运行;Bug 往往产生于源代码或设计阶段的疏忽/错误。

再来看两个更"可落地"的判定标准(非常关键):

  1. 当且仅当规格说明存在且正确,程序与规格说明之间的不匹配才是错误。
  2. 当需求规格说明书没提到某功能时,判断标准以最终用户为准:当程序没有实现最终用户的合理预期功能要求时,就是软件错误。

这两条的意义是:

  • 有规格就按规格对齐;
  • 没规格就看"合理预期",避免陷入"文字游戏"。

3)怎么写 Bug:写不清楚的 Bug ≈ 没提

很多团队争执的根源不是"要不要修",而是"你到底说的是啥"。来看一个典型坏例子:

Bug 描述:浏览器打开链接失败

这句话的问题是:没说哪个浏览器、失败表现是什么、怎么复现------开发拿不到有效信息,沟通效率和质量都会掉。

3.1 为什么 Bug 描述要有要素?

来看一个很真实的现象:人在写文档时,经常出现"脑子里想表达的"和"写出来的"南辕北辙。Bug 不写清楚,等于把成本转移给别人(开发/测试二次沟通、来回拉扯、甚至漏修)。

3.2 描述 Bug 的五要素(最小完备集)

来看一份合格 Bug 报告必须包含的基本要素:

  • 问题出现的版本
  • 问题出现的环境
  • 问题出现的步骤(复现步骤)
  • 预期结果
  • 实际结果

你可以把它当成"让任何人都能复现"的说明书。

3.3 来看一个完整示例(把"现象"写成"证据链")

来看示例的表达方式(要点是:信息足够、可复现、可对比):

  • 问题出现的版本:谷歌浏览器版本 123.0.6312.123(正式版本)(64 位)
  • 问题出现的环境:Windows 家庭版
  • 问题出现的步骤
    1)打开谷歌浏览器,输入网址 https://www.101eduyun.com/
    2)等待首页页面渲染完成
  • 预期结果:二维码与登录模块不会出现遮挡,二维码可正常扫描
  • 实际结果:二维码被登录模块遮挡,二维码扫描失败

看出来了吗?这已经不是"我觉得不对",而是"在某版本某环境按某步骤必现,预期/实际对比明确"。

实战建议:标题也要信息化。比如把"扫码失败"改成"【首页】Chrome 123 / Win 家庭版:登录模块遮挡二维码导致无法扫描"。


4)Bug 级别:严重程度要"可解释",而不是"拍脑袋"

通过定义 Bug 级别,可以清楚反映问题严重程度;开发通常也会根据级别来安排处理优先级;同时级别分布也能侧面反映开发质量。

来看常用四级:崩溃、严重、一般、次要

下面把每一级"典型特征"再压缩成好记版本:

4.1 崩溃(Crash)

  • 阻碍开发或测试工作
  • 系统崩溃/死机/死循环
  • 数据库数据丢失、数据库连接错误、死锁
  • 主要功能丧失、核心模块缺失
    出现这类问题通常建议:立即中止当前版本测试(风险太大,继续测价值不高)。

4.2 严重(Major)

  • 系统主要功能部分丧失
  • 数据保存/调用错误、用户数据丢失
  • 一级功能菜单不可用但不影响其他功能测试
  • 功能与需求严重不符、模块无法启动或调用
  • 程序重启/自动退出、接口错误、数值计算统计错误
    这类问题:如果不影响其他功能测试,通常仍可继续测试,但要尽快推动修复。

4.3 一般(Normal)

  • 功能未完全实现但不影响使用
  • 菜单存在缺陷但不影响系统稳定性
    常见例子:操作/查询时间长、格式错误、边界条件错误、删除无确认框、表字段过多等。
    (这类在真实测试中出现最多)

4.4 次要(Minor)

  • 界面/体验/性能细节缺陷、建议类问题
  • 不影响功能执行,可优化
    常见例子:错别字、界面格式不规范、页面重叠、提示语丢失、排列不齐、光标位置不正确等。
    测试初期较多、优先级相对低;测试后期出现较少,发现后应及时处理以免影响交付体验。

重要补充:级别不是"情绪表达",而是"影响范围 + 业务链路 + 风险后果"的结论。定级要能讲出理由。


5)Bug 生命周期:一个 Bug 从出生到入土,都会经历什么状态?

测试过程中发现 Bug,一般需要在缺陷管理平台创建(Bug 生命周期起源),之后由开发修复、测试回归验证,并持续跟踪直至关闭。

来看状态流转图,非常直观:

常见状态定义如下(按实际协作口径解释):

  • New:新发现的 Bug,尚未评审决定是否指派给开发修改
  • Open:确认是 Bug,且认为需要修改,已指派给相应开发
  • Fixed:开发已修改并标记为已修复,等待测试回归验证
  • Rejected:认为不是 Bug,拒绝修改
  • Delay:暂时不需要修改或暂时不能修改,延后处理
  • Closed:回归验证通过,关闭 Bug
  • Reopen:回归未通过,Bug 仍存在,重新打开交给开发继续修复

还要认识两类"无效 Bug"的典型链路(实际工作里很常见):

  • open → closed
  • open → rejected → closed

实战建议:每次从 Fixed 到 Closed,中间那次回归验证是关键动作;回归失败要有证据(复现步骤、环境、日志/截图),否则容易陷入"你那边的问题"。


6)与开发产生争执怎么办:高频现实题的"可操作打法"

测试工作里最常遇到的是和开发的"PK";更进一步,测试负责人还会与项目经理、产品经理在进度与质量上产生拉扯。遇到争执不要怕,关键是:理性分析 + 有证据地反馈

下面给出一套从低成本到高成本的处理路径。

6.1 先检查自身:是不是 Bug 描述不清楚?

如果能正确、高质量地录入一个 Bug,基本上已经成功沟通了一大半信息。但总有"书难达意"的时候。

来看建议:当你发现单靠文字很难表达清楚时,提交 Bug 后应尽快主动找相关开发当面/即时沟通,解释刚录入的 Bug,确保开发真正理解,而不是等对方来问。

6.2 站在用户角度抛问题:让对方看到"影响"

争执时,最有效的不是"你必须修",而是让对方意识到对用户的困扰。来看一句高质量提问:

如果你是用户,你可以接受吗?

这句话的力量在于:把讨论从"我觉得"拉回到"用户影响"。

6.3 Bug 定级要有理有据:不仅看级别,还看链路

定级时不仅参考级别定义,还要考虑 Bug 是否影响流程。并且要注意:用户感知的严重度与团队内部定义可能不同,定级时要站在用户角度综合判断。

6.4 提高技术与业务水平:最好能给出解决思路

资深测试工程师和初级测试工程师的差别之一是:前者往往不仅能指出问题,还能给出解决问题的思路(比如定位方向、可能原因、建议验证方式),更容易建立权威性。

注意边界:可以给思路,但别"喧宾夺主"用命令式要求开发按你的想法修改------否则容易引发对抗。

6.5 仍无法解决:召开 Bug 评审

如果确实是 Bug,友好沟通不能解决,那么就进入成本更高但更"定锤"的方式:Bug 评审。

Bug 评审主要解决两个问题:

1)决定如何处理 Bug

2)分析缺陷产生原因,找出预防对策

评审至少需要项目组多方代表参加:

  • 测试代表:提供 Bug 表现、严重程度等信息,并提出处理意见

    • 重要提醒:测试不应一味要求修改,因为修改带来回归风险与回归工作量;若时间紧迫且不足以做有效回归,"不修改"有时反而更明智。
  • 开发代表:从修改难度与风险出发,评估代价、影响范围、可能引发的风险;若决定修改,需要提出初步方案。

  • 产品代表:从整体计划与用户要求出发,给出修改必要性、修改时间点与版本安排建议。


7)总结

  • 提 Bug 前:来看五要素是否齐全(版本/环境/步骤/预期/实际)
  • 定级时:来看影响是否阻塞流程、是否影响核心功能、用户是否可接受
  • 修复后:来看是否回归通过;不通过就 Reopen,并补齐复现证据
  • 产生争执:先自查描述 → 用用户影响对齐 → 有理有据定级 → 提供解决思路(不命令) → 必要时评审定锤
相关推荐
oscar99911 小时前
软件测试面试全攻略之初级篇
软件测试·面试·职场和发展·初级篇
爱学习的潇潇1 天前
Postman学习之常用断言
自动化测试·软件测试·功能测试·学习·程序人生·lua·postman
Hacker_xingchen1 天前
如何用Postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·测试工具·职场和发展·postman
初圣魔门首席弟子1 天前
Qt自定义控件bug记录
bug
网易测试开发猿2 天前
吐血整理,性能测试-负载、并发/压力测试分析+常遇问题解决
软件测试·软件测试工程师·jmeter·压力测试·性能测试·负载测试·jmeter性能测试
测试秃头怪2 天前
Python测试框架Pytest的参数化
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
l1t2 天前
duckdb数据库CROSS JOIN LATERAL 中使用 EXISTS子查询的一个bug
数据库·bug
Zsh-cs2 天前
苍穹外卖day11销量TOP10商品展示,前端有商品名字但无销量(已解决)
bug
_OP_CHEN3 天前
【测试理论和实践】(十一)吃透性能测试核心概念!从入门到精通,一文扫清所有盲区
测试开发·压力测试·性能测试·负载测试·并发测试·基准测试·测试开发工程师