收益:
- 能够区分人工智能在 QA 过程中哪些地方可以实时节省时间,哪些地方需要由人类做出“准备发表”等质量决策,具体取决于任务风险级别
- 能够识别错误通过的风险并实施验证规则,通过故意破坏代码来测试每个人工智能测试
- 能够保护测试数据、个人数据和密钥,并养成仅在授权范围内和出于防御目的进行安全测试的习惯。
考虑发布之夜。进行了数百次测试,全部获得批准,团队松了一口气,软件上线了。第二天早上,客户反映支付屏幕崩溃了。测试是绿色的,但他没有看到错误。这是质量保证 (QA) 行业最阴险的噩梦,即系统地确保软件具有所需质量的学科:发出绿光但实际上无法确认任何内容的测试。当人工智能(AI——从历史数据中提取模式并生成文本和代码的软件)进入这个行业时,这场噩梦既得到了巨大的加速,又被放大了。该模块最初的承诺很明确:AI是测试助手、蓝图生成器和创意倍增器;您是签署“该软件是否准备好发布”决定的测试人员。
在第一个单元中,我们将重点关注纪律,而不是工具。您将了解到人工智能在质量保证过程中哪些地方可以节省实时时间,哪些地方是危险的,为什么所谓的“错误通过”的欺骗性绿色是最大的风险,如何验证每个输出,以及可以向哪个工具提供哪些数据。如果不打好这个基础,后续的部队就只能停留在空中。
人工智能在测试过程中的用武之地在哪里?
让我们将测试作业分为两个大集群。第一组:重复性、可生产性、草稿工作。根据需求起草测试用例,列出断点,为屏幕编写自动化代码框架,将复杂的错误案例转换为简洁的错误报告,总结数百行日志文件,从 API 响应中提取架构。在这些任务中,人工智能将分钟缩短为秒,而且不会感到疲倦。
第二组:结果是质量、信任和责任的决策。诸如“这个版本能否上线”、“这个错误是否关键或者可以推迟”、“这个测试覆盖范围是否足够”、“这个场景是否捕获了真正的用户风险”等决策需要背景、产品知识和责任。在这里,人工智能生成选项、草稿——但你决定“通过/失败”和“通过/不通过”。
让我们用一句话来澄清区别:AI 擅长“可以测试什么情况以及如何编写测试它的代码”;AI 擅长“可以测试什么情况以及如何编写测试它的代码”;当涉及到“这个软件真的有用吗?由谁来担保?”这个问题时,决定权在您手中。
提示:在将工作交给 AI 之前,请问:“如果这个输出是错误的并且我没有注意到,会发生什么?”如果答案是“我会浪费几分钟时间”,那么就轻松地委派任务。如果答案是“有缺陷的软件上线”,就让AI出草稿,你来做决定和验证。
错误通过:人工智能在 QA 中的第一大风险
当测试亮起绿色时,可能意味着两件事:要么软件实际上工作正常,要么因为测试编写不正确而没有发现错误。第二种称为错误通过 - 测试显示“通过”,但实际上并未确认任何内容。在使用 AI 生成的测试中,这种风险会显着增加,因为 AI 在编写流畅、流畅但空洞的测试方面非常成功。
伪通过的三种最常见形式是: (1) 无断言测试 — 代码运行,不包含断言,始终通过。 (2) 自验证测试——测试的期望值是根据被测代码的输出计算出来的;也就是说,无论代码生成什么,测试都会接受为“正确”。 (3) 验证错误的测试 - 断言存在,但它检查一些琐碎的事情(例如“响应不为空”),而不是实际的业务规则。
注意:绿色测试板并不能证明质量;充其量它说“我们编写的控件现在还没有被破坏”。不要因为看到人工智能生成的测试“通过”而感到安慰——真正的问题是:如果我故意破坏代码,这个测试会变成红色吗?如果它不旋转,那测试就是一个装饰品。
在本模块中重复的黄金法则:通过故意破坏代码来测试每个 AI 测试。如果测试仍然是绿色的,则该测试不起作用。 (我们将在第 10 单元中将这个想法深化为突变测试。)
验证纪律:三步
AI说话自信;这并不意味着这是真的。制定适用于每种结果的三步反应:
- 将其与要求联系起来。人工智能产生的每个测试用例和断言都必须基于真实的要求或验收标准(一项工作必须满足才能被视为“完成”的条件)。 “这个场景证实了哪条规则?”问。
- 见红色。运行生成的测试一次,破坏代码。如果不变成红色,则测试无效。这是人工智能测试中不可协商的步骤。
- 将其传递给上下文过滤器。输出是否与您所知道的产品行为、架构、实际用户流程相符?您的领域知识是最终的过滤器。
数据隐私和安全:什么去了哪里?
您在测试环境中使用的数据通常很敏感:真实的客户记录、生产数据库副本、API 密钥、内部系统地址、尚未发布的功能。做一个简单的分类:开放数据(有记录的、公开的)可以进入任何车辆。内部数据(源代码片段、内部文档)仅适用于机构批准的工具。机密数据(真实的客户数据、身份信息、漏洞详细信息、密钥)仅进入机构的签约工具,其数据不会进入模型训练,最好进行屏蔽。
安全测试还有一个额外的限制:本模块中学到的所有内容都是出于防御目的 - 权威地测试您自己产品的安全性。未经许可使用人工智能渗透他人的系统,将真正的漏洞武器化,或测试您无权的系统,既不道德又犯罪。未经授权(范围和许可),不得进行攻击性测试。
提示:使用合成(人工生成)的测试数据而不是真实的客户数据。要求人工智能“生成真实但完全虚构的测试数据”既可以保护隐私,又可以使边缘情况多样化。
三个迷你箱子
案例 1 — 在正确的地方节省时间。 Ekomerce 团队的测试人员花了 6 个小时根据每个版本的 30 页需求文档手动创建测试场景。他把文件(不包含商业秘密的部分)给了YZ,并要求提供结构化的场景草案;时间缩短为90分钟。他将节省下来的时间用于亲自验证添加人工智能遗漏的业务规则边缘情况。人工智能拿走了重复性的工作,把判断留给了人类。
案例 2——假传球被抓。开发人员让 AI 为计算函数编写 12 个单元测试;它们都是绿色的。测试人员实现了“见红”步骤:故意将函数内部的加法符号改为乘法。 12 次测试中只有 3 次返回红色。其他9项测试没有提供真正的确认;它只是说“它没有抛出错误”。删除了 9 个装饰性测试,改写了 5 个真实测试。
案例 3——隐私泄露事件返回。一名实习生将包含真实客户电子邮件和生产数据库中卡的最后四位数字的错误日志粘贴到公共工具中,并说“解释一下这个错误”。 QA 负责人介入:这是个人数据失控,违反了 KVKK(个人数据保护法)。同样的工作是在机构批准的车辆上完成的,遮盖个人区域并只留下堆栈痕迹。
四个可复制模板
1)岗位适宜性评估:
您的角色:高级 QA 领导。我将向您描述一项测试工作。告诉我(1)这项工作是可以安全地委托给人工智能的起草/分析工作还是人类必须做出的质量决策,(2)不正确输出的潜在成本,(3)我在委托之前应该做的验证。工作:[在此处插入工作]
2)伪通控制:
看看下面的测试。告诉我:- 该测试证实了什么行为? (一句话)- 如何破坏被测代码以使测试变成红色?- 是否存在可能导致该测试始终通过的弱点(缺少断言、自我验证、琐碎检查)?测试:[在此处粘贴测试]
3)测试数据脱敏控制:
我将向您提供的日志/数据可能包含个人或机密字段(电子邮件、姓名、卡、密钥、内部地址)。首先列出需要屏蔽的字段;我将其屏蔽并再次发送。不要按原样分析。
4)综合测试数据生成:
为[以下字段结构]生成 20 行完全虚构的、真实的测试数据。请勿使用真实的个人/组织数据。还包括边缘情况:空白、文本太长、限制值、无效格式。
弱提示/强提示
弱:“对此代码编写测试。”
强:“计算这个 为折扣函数编写单元测试。该函数的接受标准:超过 1000 TL 折扣 10%,超过 5000 TL 折扣 20%;负金额应该引发错误。用注释行指定您要为每个测试验证哪个规则。分别测试极限值 (999, 1000, 1001, 5000, 0, -1)。使用真实断言,如果我破坏代码;清空或不要编写简单的断言。”
强大的提示功能;它提供了接受标准、极限值、验证期望和明确的反欺骗指令。弱提示邀请 AI 编写装饰性测试。
常见错误
- 信赖绿色。认为通过考试就是证据。真正的问题是:当你破解代码时它会变成红色吗?
- 在没有给出任何理由的情况下要求进行测试。人工智能会产生通用的、通常无用的测试,而不知道需要验证什么。
- 跳过验证。说“人工智能写的,这可能是真的”。责任在于使用输出的人。
- 将真实/敏感数据粘贴到工具中。使用生产数据、密钥或个人数据。
- 未经授权的安全测试。在没有范围和许可的情况下尝试进行攻击性测试。
- 使用人工智能来委托决策。问“这个版本可以发布吗?”给人工智能并将答案放入签名中。
总之
人工智能是质量保证流程中的强大助手,可以加快重复性和可生产性工作;但质量决策的责任在于人。人工智能在这个行业中的头号风险是伪通过:绿色测试看起来很简洁,但无法证实任何事情。通过故意破坏代码来测试每一个AI测试;如果它没有变红,那测试就是一个装饰。将其与需求联系起来,看到红色,将其通过上下文过滤器。屏蔽机密数据,仅出于授权和防御目的执行安全测试。
应用任务
从您自己的项目中进行 5 个 AI 生成(或 AI 生成)的单元测试。对于每一个:(1) 用一句话写下它验证的行为,(2) 故意中断并运行被测试的代码,并记下有多少代码变红,(3) 将那些没有变红的代码标记为“装饰测试”,并用真正的断言重写它们。将结果放入表格中:测试名称/验证的规则/损坏时是否损坏/操作。
清单
- [ ] 在交接工作之前,我问了一个问题“如果出了问题我会损失什么?”
- [ ] 我通过破解代码来测试每一个AI测试;我把没变红的换成了真实测试的。
- [ ] 我将测试用例与实际需求/验收标准联系起来。
- [ ] 我屏蔽了敏感/真实数据,但没有将其提供给工具;如果可能的话,我使用了合成数据。
- [ ] 我只考虑在权限范围内进行安全测试并出于防御目的。
- [ ] 我把“版本是否发布”的决定权留给了我自己,而不是AI。