只要你亲手用 AI 编程工具做过一个有点逻辑的小项目,你大概率会经历过这种瞬间:AI 很痛快地把代码写出来了,你复制运行,界面也弹出来了,心里刚想说“这波稳了”,结果随便输入一个正常数据,页面就白屏了,或者结果算得莫名其妙。我带的不少非程序员学员在这一步最容易崩溃,因为他们觉得“代码是 AI 写的,它应该是对的才对”。但现实恰恰相反,AI 编程只是替你完成了“写”这个动作,至于这段代码在你的真实场景下能不能一直稳定跑,主要靠你的测试和调试来兜底。这也是《非程序员AI编程实践教程》走到第 9 期必须要聊的话题:AI 能帮你把活干得很快,但一个不会验收、不会排查的人,很容易被那些藏在角落里的 bug 拖进泥潭。
这期内容我不会讲那些只有程序员才用得上的复杂工具,也不搞一堆命令行的黑话。咱就站在一个非程序员的视角,把测试和调试这两件看起来很高大上的事,拆成一套你能直接上手用的动作。重点解决三个问题:怎么在动手前就想清楚“该测什么”,程序出问题后怎么跟 AI 有效沟通,以及怎么让 AI 帮你把重复的测试跑起来。
1. 测试和调试在整个AI编程流程中的真实分量
很多刚开始用 AI 编程的朋友,会把“代码能运行”和“程序没问题”划等号。这是个特别要命的误解。我经常跟学员打一个比方:AI 生成代码,相当于一个手脚麻利的施工队给你把房子砌起来了,但它不会主动帮你验收水电、检查防水、测试承重。你要是直接拎包入住,哪天漏水了,你总不能怪施工队没有替你操心吧?
把这个逻辑放到 AI 编程里,你就明白了:测试的本质是验收,你负责告诉 AI“我要什么样的结果”,然后一项一项去验证;调试的本质是返工,当测试发现某一项不符合预期时,你要找出是在哪个环节出了问题,再指挥 AI 去修。这两件事,恰好是非程序员在 AI 编程里最容易占据主动权的部分。因为你不必读懂每行代码的逻辑,只要能说清楚“我给了什么输入、期待什么输出、实际得到什么结果”,再配合 AI 的解释,就足够把大部分问题定位到具体环节。
说得再直白一点,AI 编程把“会写代码”的门槛打下来了,但“会验收”“会排查”的能力,依然是区分高手和菜鸟的分水岭。接下来我分享的这套思路,并不需要你有编程基础,只需要你愿意把自己当成一个严谨的验收员。
1.1 代码生成只是开端,“验收”才是真题
你要在心里转变一个角色定位:从“求 AI 帮你写代码的人”,转变成“给 AI 派活并检查成果的人”。这个转变非常关键,因为它直接决定了你后续怎么跟 AI 协作。
打个比方,如果你请了一位外包设计师帮你做一张海报,你拿到初稿后,肯定会先看主题对不对、文案有没有错别字、尺寸符不符合平台要求,不会因为设计师说“做完了”就直接把钱付了。AI 编程也一样,AI 说“代码写好了”不等于任务结束,它只代表第一版草稿交到你手上了。接下来,你需要拿着最初的需求清单,对界面上每一项功能、每一种可能的输入,逐一做“验收测试”。
具体到操作上,我强烈建议你在让 AI 写代码前,先顺手写一份“我可验证的愿望清单”。比如你要做一个简单的小工具,那就写下:输入什么内容、点击哪个按钮、预期出现什么结果。不要怕写得啰嗦,因为这份清单既是测试依据,也是你跟 AI 对齐需求的说明书。我见过太多人上来就甩给 AI 一句“帮我做个记账本”,AI 真做出来之后,他又发现这里不对、那里不好。这不能全怪 AI,很多时候是需求在一开始就没被量化成可测试的验收标准。
1.2 非程序员最缺的不是技术,而是“出错了怎么描述”
遇到报错或异常时,非程序员最常见的反应是慌,然后是烦躁,最后憋出一句“它就报错了,咋办”。我可以负责任地告诉你,这种提问方式给到 AI,十个有九个会给你一段“看似专业但毫无针对性”的宽泛建议,因为它根本不知道你的程序是在什么场景、什么操作下崩的。
实际上,描述问题这件事,恰恰是非程序员做调试最需要训练的能力。我把它总结成一个问诊公式:哪里出问题 + 当时做了什么操作 + 输入了什么内容 + 实际结果是什么 + 你期待的结果是什么 + 有没有报错文字。这就跟你去医院看病一个道理,你光说“我不舒服”,医生没法开药;你要是说“吃完饭半小时,右上腹疼,还伴随恶心”,医生就能快速缩小范围。
所以,从现在开始,请你养成一个习惯:把和 AI 的每一次对话,都当成一次“专家问诊”。你给的信息越具体,AI 给出的诊断就越准。这个习惯甚至比你会不会写代码更重要,因为它才是让你从“碰运气调试”转向“有章法调试”的关键一步。
2. 先把测试思路理顺:给AI编程准备的 5 类测试场景
一说到“测试”,很多人脑子里蹦出来的是程序员写一堆代码、跑自动化测试工具的画面。但对非程序员来说,请忘掉这些,把测试理解成“用不同场景去折磨一下这个程序”,它的核心就三件事:正常情况能不能用,特殊情况下会不会崩,修完一个东西后以前的功能还有没有。
基于我这些年的带练经验,我给非程序员整理出了五类最实用的测试场景。你不需要一次性全掌握,但至少前两类是从今天开始就应该用的,它们能帮你躲开 AI 编程里至少八成的基础坑。
2.1 功能正常性测试:验证“能跑”还不够
功能正常性测试,听起来陌生,其实就是“按正常人的正常操作去用一遍”。比如 AI 帮你做了一个金额计算器,你至少要测这几笔:简单的 1+1 能不能算出 2;稍微大一点的数字,比如 9999.99 加 0.01 能不能正确进位;小数点的精度对不对;连续点击多次会不会出现结果叠加。
我通常会建议学员把这些用例写成一列“输入—预期结果—实际结果”的简单表格,测一项填一项。这看起来笨,但它能让你在短暂的信任感中快速发现问题。我遇到过真实案例:AI 生成的计算器界面非常漂亮,但只验证了一个整数加法后,学员就觉得肯定没毛病,结果后面输入 0.1+0.2,直接得出一个很长的小数。这就是没有做功能覆盖的结果。
这类测试并不需要编程,只需要你把自己当成一个“挑剔的用户”,按正常流程把所有按钮点一遍,把所有可输入的框都填一遍,看看结果是否和预期一致。你完全可以让 AI 帮你列一份“按正常用户使用习惯设计的测试清单”,它会很乐意给你 20 条建议,你挑其中 5 到 8 条执行就够了。
2.2 边界与异常测试:AI 最常翻车的两处重灾区
如果说功能正常性测试是“用常规情况去验证”,那边界测试就是用“极限情况”去逼问程序。常见的边界包括:空值、0、负数、超长文本、小数点后很多位、手机号填了 11 位却开头不是 1,日期选了 2 月 30 日,等等。这些情况在日常使用里不一定天天遇到,但一旦遇到,程序往往最容易出洋相。
AI 生成的代码,尤其在没人明确提醒的时候,通常只会处理“理想输入”,不太会自动处理好这些边界。比如你在做一个“根据生日计算年龄”的小工具,AI 很可能默认你输入的是合理日期,可一旦有人不小心选了未来的日期,或者格式不规范,程序可能直接报错或者给出一个负年龄。你要是没测过这类情况,等用户真的踩上了才发现,那体验就凉了。
异常测试则更进一步,模拟一些“不按套路出牌”的操作,比如网络突然断开、按钮被快速连点、同一个表单重复提交、页面被直接刷新。我见过最典型的翻车现场是一个投票小程序,用户快速双击“投票”按钮,后台就生成了两条记录。这类问题用 AI 编程同样很常见,因为 AI 默认了“用户是理性的、点击是一次性的”。你作为验收员,必须在拿到代码后主动逼问 AI:“如果用户连点两下会怎样?如果网络超时会怎样?会不会出现重复数据?”把这些话写进需求里,AI 才会去补对应的防御逻辑。
2.3 回归测试:修一点,别坏了全局
回归测试这个名字听起来专业,但你肯定经历过它的场景:AI 帮你修了一个 bug,你兴高采烈地去试,发现原来的 bug 确实没了,可另外一个本来正常的功能却莫名其妙不工作了。这就是回归问题,即“修复 A 破坏了 B”。
我自己的习惯是:每让 AI 动一次代码,就重新跑一遍上一轮验收清单里的核心用例。不需要全量重跑,但至少要把最核心的“正常流程”和“之前修好的边界案例”再点一遍。为了让这个过程不那么烦,你可以在测试清单里专门标记出“每次修改后必测的 5 条用例”,比如登录、提交、核心计算、保存、基础展示。只要这五条不挂,基本可以判断 AI 的这次修改没有动到大动脉。
如果你想让 AI 自己协助你做回归测试,也可以在让它修改代码时补一句:“改完后请重新审查全流程,并告诉我这次修改可能影响哪些地方,我再针对性地去验证。”这既减少了你的负担,也让 AI 在动手时更谨慎,不会只顾着修眼前这个故障。
3. 调试实操全流程:从报错信息到问题修复
测试做完了,大概率能揪出几个问题。接下来就是重头戏:怎么把问题修掉。很多非程序员对“调试”二字有天然恐惧,总觉得那是要翻开代码逐行找错的事情。其实放到 AI 编程的语境下,调试更像是“把问题描述清楚、让 AI 去定位和修复”的沟通活,你只需要掌握一套流程,就能解决掉绝大部分问题。
3.1 报错信息到底怎么读:非程序员的简化方案
先说一个让很多人意外的事实:你不必读懂报错信息里的每个单词,也能完成调试。报错信息最大的价值,是它可以原封不动地复制给 AI 作为线索。红色英文对你来说是乱码,对 AI 来说却是非常明确的定位信号。
但为了让你能在跟 AI 沟通时不那么被动,我建议你认识几个高频关键词。比如程序里出现 undefined、null,通常表示某个数据或变量还没拿到值就使用了;出现 TypeError、Invalid argument,通常表示操作的数据类型或参数不对;出现 timeout,多半是网络或连接超时;出现 not defined,则是某个名称缺失。你不需要记很多,只要在收到报错时把这几个词当“症状标签”,再把完整报错复制给 AI,就已经比大多数新手强得多。
这里要特别强调:把报错信息完整复制,最好连行号一起给 AI。行号对 AI 定位问题非常关键,它相当于坐标,能让 AI 精准地看到“在哪一行附近出了问题”。有些朋友为了省事,只会说“有错”,或者只截一张不完整的小图,AI 就只能靠猜,结果就是它给出一堆可能原因,你反而更懵。
3.2 一个真实调试案例:待办清单重复提交的修复过程
我拿一个真实发生过的案例,带你完整走一遍调试流程。之前有个学员用 AI 做了一个待办清单网页,功能很简单:输入文字,点添加按钮,下方出现待办项。他测试时发现一个诡异现象:如果快速连点两下“添加”,列表里会出现两条一模一样的待办;偶尔还会出现一条空的待办。
要是在以前,他可能就把屏幕截图往 AI 一扔,说“帮我看看为啥”。但这次他按我说的做了。第一步,先在浏览器里按下 F12 打开开发者工具,切到 Console(控制台)面板,重新操作了一遍,发现报错信息里有一段类似“Cannot read properties of undefined”的红色文字。他直接把这段文字和操作步骤原原本本发给了 AI。
我让他用的提问模板大致是这样:“我是一个不会写代码的普通人。我的待办清单页面,在快速双击添加按钮时,会出现两条相同的记录,控制台报错是【粘贴报错】。我期待的效果是,不管点得多快,都只生成一条记录。请先告诉我问题出在哪个环节,不要直接给我整段代码重写。”
AI 很快给出了解释:按钮点击事件没有做“防重复提交”处理,第一次点击还没把数据写入完成,第二次点击又触发了同一个逻辑,导致数据库或列表重复写入。接着 AI 提出两种修复方案:一种是给按钮加一个临时禁用状态,等提交完成后再恢复;另一种是提交前先检查是否已有相同内容。我跟学员说,这种时候不要贪心,一次性让 AI 用最小改动去解决,先采取“加禁用状态”的方案。AI 修改完后,学员重新双击、多击,问题就消失了。
这个案例看起来简单,但里面包含了好几个非程序员调试的关键动作:复现场景、收集报错、带着上下文提问、要求 AI 先解释再动手、一次只改一处。把这套动作练熟,你就是别人眼里“很会搞事情的人”。
3.3 高效向 AI 求助的提问公式
调试好不好用,很大程度上取决于你提问的质量。我总结了一个比较固定的提问公式,你直接套用就行:
背景身份 + 我做了什么 + 遇到什么现象 + 完整报错(如有)+ 我期待的结果 + 对 AI 的约束条件
比如:“我不会写代码,正在做一个签到打卡小程序。我在手机浏览器里点击‘签到’按钮后,页面一直转圈,大概 10 秒后提示失败,报错是【粘贴报错】。我期待点击后几秒内能显示‘签到成功’。请先帮我判断这是前端问题还是后端问题,再告诉我下一步我该检查什么,先别急着改代码。”
加了“先别急着改代码”这句,能把很多跑偏的 AI 拉回来。因为 AI 的特点之一是太“乐于助人”,你问它问题,它很可能顺带就把代码改了,但作为非程序员,你可能根本不知道它改了哪里,反而更难排查。限制它的行为,让它在修改前先给分析和方案,你确认了再让它动手,这是很多老手都在用的小技巧。
还有一个容易忽略的点:如果程序运行在自己的电脑或服务器上,修改后一定要强制刷新页面,或者重启一下服务,不然你可能一直在测试旧版本。你可以在提问里直接告诉 AI“我已经刷新过页面,问题依然存在”,让 AI 少走弯路。
4. 非程序员做测试调试的常用工具与技巧
工具不是越多越好,对非程序员来说,真正值得学会的其实就那么几个。我把最实用的几个分成了三个梯队:你马上就能用的、努努力能用的、以及长期能提升效率的。
4.1 浏览器开发者工具,是你目前最值得学会的一招
不管你写的是网页、小程序还是简单的桌面工具,只要它跑在浏览器里,你都要学会按 F12 打开开发者工具。很多非程序员看到密密麻麻的英文面板会本能地害怕,但实际上你只需要关注两个地方:Console 和 Network。
Console 会显示网页运行时的报错,这是你和 AI 沟通时最重要的“情报来源”。红色的错误信息,你不用看懂,复制就行。Network 可以看到当前页面发出的网络请求、接口状态码,有的工具会显示哪些请求成功了、哪些失败了。我不建议你现在去深究每个细节,但至少要能告诉 AI:“我打开 F12 的 Console,看到如下报错……”,这在 AI 眼里已经是一个非常专业的线索。
还有一个更省力的办法:很多 AI 工具已经支持截图识别。你可以把 F12 面板和页面报错截图一起发过去,AI 能直接从截图里读取关键信息。但我建议不要完全依赖截图,因为截图里的文字可能不完整,报错长一点就会截断。最稳妥的做法,永远是把报错文本能复制就复制。
4.2 轻量自动化测试:让 AI 替你把重复测试跑起来
当你对某一类功能反复测试到第 5 遍的时候,就该考虑让 AI 帮你做一个“自动化测试小脚本”了。注意,我不建议非程序员一上来就去学 pytest、Selenium 这些专业测试框架,理解成本太高,容易劝退。我更推荐的是:让 AI 为你的程序生成一个“测试脚本”,然后你只负责运行它、看结果。
举个例子,你让 AI 写了一个批量重命名文件的工具。手动测试很痛苦,因为你要准备一堆不同格式的文件来试。这时候你可以请 AI:“帮我写一个测试脚本,自动生成 10 个临时文件,包含空文件名、很长的文件名、特殊字符文件名,然后调用我的重命名程序,把结果打印出来,告诉我哪几个符合预期、哪几个失败。”AI 大概率会生成一个 Python 脚本,你要做的只是在终端里运行它,然后把运行结果反馈给 AI,让它分析。
当然,你也得有点心理准备,让非程序员运行 Python 脚本本身也有点门槛。所以我通常建议把这个需求说得特别具体,并且让 AI 把运行方式也写清楚,甚至直接告诉它“我是一个新手,请把运行命令也写在回复里,一步一步告诉我怎么做”。这样一样能顺利完成。自动化测试的核心价值不是为了炫技,而是把重复劳动交给程序,让你有精力去关注那些机器测不出来的体验问题。
4.3 我踩过的坑:5条调试避坑经验
最后这部分,我说几个自己实操中踩过的坑,每一个都是真金白银换来的教训,希望能给你提个醒。
第一,改代码前一定要换个文件名备份。我见过不止一次,AI 说要改 5 个地方,改完以后网页直接打不开了,结果又不知道怎么回滚。如果你把原始版本另存成一个 backup 文件,再让 AI 在此基础上改,出问题还能退回去。
第二,一次只让 AI 修一个问题。很多人会把报错一股脑复制给 AI,然后问“这怎么办”,AI 常常会列出 6 种可能,然后一次性全改,你根本不知道是哪种起了作用。正确做法是先用次数来判断问题最少修一个,验证完再修下一个。
第三,保留报错信息,不要顺手清掉。有时候修完一个 bug,你记得不看,顺手就把报错历史清空了,结果问题再次出现时没得复制,又要重新复现。我建议在调试期间,专门开一个文本文件,把每次报错复制进去,备注当时做了什么操作。
第四,要“修改说明”而不要“闷头改”。每次让 AI 改代码,我都在后面补一句:“请把改动的部分用通俗语言告诉我,并提醒我会影响哪些功能。”这样即使出了问题,你也能知道大概方向,而不是一头雾水。
第五,测试数据和真实数据不能离得太远。有些学员图省事,测试时全是“111”“aaa”这样的假数据,结果程序上线后一遇到真实的中文、特殊符号或长文本,直接就崩了。这不是 AI 的代码不行,是你没给它创造“见世面”的机会。我建议从开始测试时,就用最贴近真实使用场景的数据去跑,把所有日常能看到的情况尽量模拟一遍。
测试和调试这事,说穿了就是八个字:先想清楚要什么,再逐项去验证。你不需要成为技术大牛,只需要比 AI 多一份细心、多一套方法,就能把 AI 编程从“玩具”变成真正能帮你干活的工具。如果你按照这期内容的方法试上一段时间,再回去听 AI 说“代码写好了”,你大概会露出一种带着点怀疑的微笑,然后稳稳地打开测试清单——那种踏实的掌控感,比 AI 替你写出一百行代码都来得更爽。