作品交付前的检查、验收与答辩
交付前检查的是作品到了别人手上才暴露的问题,作者自己用时碰不到。检查按六个类别逐项进行。
| 检查类别 | 回答的问题 | 最常被漏掉的一条 | 小节 |
|---|---|---|---|
| 版本号与署名 | 别人拿到的是哪一版,出问题找谁 | 程序里的版本号与说明文件对不上 | 16.2 |
| 边界情况 | 不按你的预期用,会发生什么 | 只有一条记录时 | 16.3 |
| 验收用例 | 怎么判断这件作品算不算做好了 | 标准里还留着形容词 | 16.4 |
| 交付前清理 | 里面还有没有不该出现的东西 | 没人要求过的多余功能 | 16.5 |
| 回归检查 | 改完一处,别处还好不好 | 只改一处时就没重跑 | 16.6 |
| 备份 | 丢了能不能找回来 | 备份从没验证过能不能恢复 | 16.7 |
六类的顺序可以调整,每一类都要走到,不凭印象跳过。
| # | 问题 | 类别 |
|---|---|---|
| 1 | 标题栏写 v1.0,说明文件写 v0.3 | 版本号 |
| 2 | 程序与说明里都没有作者和日期 | 署名 |
| 3 | 只录一条时显示“已录入 和 读书会” | 边界情况 |
| 4 | 什么都不填点添加,多出一条空记录 | 边界情况 |
| 5 | 人数填汉字,合计变成 NaN | 边界情况 |
| 6 | 页脚的“张三 13800138000” | 占位内容 |
| 7 | 「填入测试数据」按钮与控制台调试输出 | 调试残留 |
| 8 | 「一键美化」按钮不在任何需求里 | 多余功能 |
| 9 | 点美化之后合计整行消失 | 回归 |
| 10 | 刷新页面数据全部丢失,也没有导出 | 备份 |
全部找出来之后再对照。十处没有一处是功能写错了,都出现在正常用法之外。
样例说明是样例作品附带的说明文件。交付自检表是本章的产出,六节对应六类检查,可以直接拿去填。
版本号分主版本、次版本、修订号三段,改了什么决定升哪一段。程序和说明里写同一个版本号,两处都署名。
版本号分主版本、次版本、修订号三段,每段在什么改动后加一有固定规则。
标题栏写 v1.0,说明文件写 v0.3
别人不知道手上是哪一版
程序和说明都写 1.0.0
并排看一眼就能核对
程序和说明里都没有作者、日期
出了问题不知道找谁
程序界面和说明文件都写作者、班级、日期
出了问题能找到人
边界情况指正常范围的两端和外面。按七类逐个试,最常漏掉的是只有一条。
正常范围的两端与外面。作者知道预设的范围,别人不知道,所以别人一用就会碰到。
| 类别 | 怎么试 | 应该出现什么 |
|---|---|---|
| 空 | 什么都不填直接提交 | 提示要填,不新增记录 |
| 一 | 只留一条记录 | 文字通顺,没有多余的连接词 |
| 多 | 录入三十条以上 | 显示正常,不卡 |
| 边界值 | 填 0;填上限;填上限加一 | 0 与上限接受,超出的拒绝 |
| 类型不对 | 数字栏填汉字 | 提示格式不对,不出现 NaN |
| 特殊字符 | 填引号、逗号、空格、全角字符 | 正常存取,不串行 |
| 时序 | 中途关掉;连点两次同一个按钮 | 不重复执行,不丢数据 |
function addItem() {
var name = document.getElementById('name').value;
var count = Number(document.getElementById('count').value); // 填“三十”得到 NaN
items.push({ name: name, count: count }); // 不检查就存
console.log('添加了一条', name, count, items); // 调试残留,见 16.5
render();
}
function render() {
var sum = 0;
for (var i = 0; i < items.length; i++) {
…
sum = sum + items[i].count; // NaN 一参与,合计就是 NaN
}
var names = items.map(function (it) { return it.name; });
var joined = names.slice(0, -1).join('、') + ' 和 ' + names[names.length - 1];
document.getElementById('total').textContent =
'已录入 ' + joined + ',共 ' + items.length + ' 项,合计 ' + sum + ' 人。';
console.log('当前合计', sum);
}只试了“什么都不填”
其余六类的问题留给使用者去碰
照自检表七类走,每类写下结果
七类都有实测记录,没写的算没试
表里填“应该出现什么”
记录和程序的实际表现对不上
表里填“实际出现了什么”
这份记录就是回归检查的依据
验收用例写成情况、操作、结果三段。合格的标准只有一条:换一个人照着做,得到同一个是或否。
写成“在什么情况下,做什么操作,应该出现什么结果”,读完能用是或否回答。
| 原文 | 问题出在哪 | 改写之后 |
|---|---|---|
| 界面友好,操作简单 | 两个人的判断可能相反 | 打开程序不做任何操作时,界面上能看到下一步该点哪个按钮 |
| 数据统计准确 | 没说拿什么去对 | 录入说明文件示例中的三条数据,合计显示 75 |
| 运行稳定,不闪退 | 没说多久算稳定 | 连续执行同一操作十次,十次结果相同,程序没有退出 |
| 兼容性良好 | 没说和什么兼容 | 在另一台从未装过本程序的计算机上打开,功能与本机一致 |
| 用户体验流畅 | 流畅没有量 | 点击查询后三秒内出现结果 |
左边五条出自样例说明,一条也判断不了。改完念给同学听,对方反问“那要怎么算”,就是还没改到位。
“运行稳定”改成“响应快速”,“界面友好”改成“布局合理”
看上去具体了,判断标准一点没变
“点击查询后三秒内出现结果”
照着做一次,就能回答是或否
交付前用全文搜索清掉占位内容、调试残留和多余功能。功能冻结之后只修缺陷,不加功能。
开发时临时放进去的东西:示例姓名、假电话、测试邮箱,打印输出、注释掉的旧代码、填测试数据的按钮。
定下一个日期,此后只修缺陷、不加功能。
| 类别 | 搜什么 | 为什么要清 |
|---|---|---|
| 占位内容 | 张三、李四、138、test、example、示例、样例、Lorem | 会被人当真 |
| 调试残留 | print、console.log、TODO、临时、注释掉的旧代码 | 暴露本机路径、用户名和开发过程 |
| 未经要求的功能 | 搜不出来,对照功能清单逐个数按钮,多出来的一律删掉 | 没有验收标准覆盖 |
把自己的代码从头看一遍
看过几十遍的代码,残留反而看不见
逐个搜张三、138、console.log、TODO……
搜到零条才算清完
答辩前一晚临时加
牵动别处,一直修到深夜
以最后一次完整验证的那一版为准
交出去的每项功能都验过
一次改动让原本正常的功能失效,叫回归。改完要把验过的用例照表整套重跑。
原本正常的功能,因为一次改动而失效。
“只加了一个按钮,别处没动”
合计行已经坏了,没人知道
把验过的每条用例照原样再走一遍
回归在交付前被发现
“想想哪些可能受影响”
以为无关的共用处被漏掉
每次都照表整张走完
不靠记忆判断哪里受影响
备份按 3-2-1 做:三份副本、两种介质、一份不在身边。没有验证过的备份不算备份。
三份副本、两种不同介质、至少一份不在身边,三个数字各挡一类事故。
从没试过从备份里恢复
需要恢复的那天才发现压缩包是坏的
换一个空文件夹,只从备份里取文件,完整打开
确认备份能用
作品只在自己这台电脑上,或同一块硬盘上存两份
硬盘一坏,全部没了
本机加移动硬盘,再加一份网盘或邮箱
任何一类事故之后都还剩一份
让 AI 只挑毛病,不给改好的版本。功能可以交给 AI 写,定义与验收由你来做。
第一段相当于把答辩现场会被问到的问题,提前在没人看见的时候问一遍。
| 提示词中的规定 | 不写时 AI 的表现 | 自检表 |
|---|---|---|
| 不要写优点 | 开头半屏是肯定,问题藏在后面,语气偏温和 | |
| 不要给我改好的版本,我自己改 | 直接交出改好的版本:你不知道原来错在哪,也判断不了改得对不对,下次同类问题照样看不出 | |
| 交付物还缺什么,单独列一条 | 只挑文字表述,不会主动去数少交了哪几样 | 清理、备份 |
| 扮演一个想把这个程序用坏的人 | 列的都是正常操作的变体,碰不到愚蠢的和恶意的用法 | 边界 |
| 要覆盖这几类 | 覆盖不全,“只填一条”最容易漏 | 边界 |
| 不许把一个形容词换成另一个形容词 | 改写之后判断标准没变 | 验收 |
| 不要给我修复方案,我要先自己试过去 | 实际结果不是你亲手记的,回归检查没有依据 | 回归 |
把作品和说明发过去,请 AI 提意见
先夸一段再给几条温和建议,或者直接给改好的版本
只挑毛病,不写优点;只给问题清单,不给改好的版本
拿到问题清单,自己看懂错在哪再改
把自己的期末作品按六类检查一遍,改完、交付,再现场答辩。
程序与说明写同一个三段版本号;作者、班级、日期两处都要有
产出:确定的交付版本号先用第二段提示词让 AI 列十种用坏的方式,再自己逐条试。记实际出现了什么,不记应该出现什么
产出:七类实测记录改完请同组同学照着判一次,他判的是或否要与你一致,不一致就是还没写清
产出:可判断的验收用例按自检表的词全文搜索清理,对照功能清单删多余功能;删完把第 3 步的用例整套重跑
产出:清理记录与重跑结果按 3-2-1 备份;换一个空文件夹,只从备份里取文件完整打开一次,恢复不出来就回去重做
产出:恢复验证截图三段话:场景与用户、主线、取舍,不逐个介绍功能
产出:演示脚本| 共同验收标准 | 要求 | 怎么查 |
|---|---|---|
| 在另一台计算机上独立用完一次 | 作者不出声,只照说明操作 | 请同组同学在他的机器上从头走一遍 |
| 七类边界都有实测记录 | 记的是实际结果,不是预期 | 看自检表第二节,七行是否都填了 |
| 验收标准可用是或否判断 | 没有形容词,或形容词后跟着具体数值 | 请另一个人照着判一次,结论与你一致 |
| 交付物里没有占位内容与调试残留 | 假姓名、假号码、打印输出、测试按钮 | 按自检表列的词全文搜一遍,结果为零 |
| 功能清单与实际功能一致 | 没有多出来的,也没有少写的 | 对着清单把界面上的按钮数一遍 |
| 备份做过恢复演练 | 从备份里取出来能完整打开 | 在一个空文件夹里恢复一次并截图 |
| 版本号两处一致且为三段格式 | 程序里与说明里写同一个 | 两处并排看一眼 |
卡住时先按现象找原因;处理之后,把用例整套重跑一遍。
| 现象 | 原因 | 处理 |
|---|---|---|
| 自己检查一遍没发现问题 | 用的是自己的电脑、自己的数据、自己习惯的操作顺序 | 换一台机器、换一份数据,请同组同学操作,你在旁边不出声 |
| 说明里写的功能程序里找不到 | 功能砍掉之后忘了同步改说明 | 以程序为准逐条核对说明,多写的删掉,少写的补上 |
| 边界情况只试了“什么都不填” | 七类里只走了一类 | 照自检表七类逐条走,每类写下实际结果,不写就算没试 |
| 改完一处,另一处坏了 | 两处共用了同一段代码或同一个样式 | 把验过的用例照原样再走一遍,只改一处也要重跑 |
| 验收标准改写完还是没法判断 | 把一个形容词换成了另一个形容词 | 涉及时间、数量、精度的给出数字,其余的写成一次具体操作 |
| 备份在那里,需要时恢复不出来 | 压缩包损坏、文件缺失、密码想不起来 | 交付前从备份里恢复一次,在空文件夹里完整打开 |
| 删掉多余功能之后主功能不能用了 | 多余功能与主功能共用了一段代码 | 对照功能清单删,删完把全部用例重跑一遍 |
| 答辩时打不开自己的作品 | 本机那份是最新的,U 盘里那份是旧的 | 以最终要交的那一份为准,做最后一次完整验证,之后不再改动 |
当堂提交四项内容并现场答辩。答辩按讲场景、演主线、说取舍三段进行。
记开发过程,每条写三样:遇到什么现象、判断是什么原因、怎么改的。
“遇到很多困难,最后都解决了”
没有任何信息,不得分
“点提交没反应,控制台报某某,改了事件绑定后正常”
评委看得出你怎么处理问题
编一个听起来合理的答案
被追问时接不住
“这一点我没有验证过”
说明你分得清哪些确认过、哪些没有
按教师提供的作业模板填写,提交渠道见课堂通知;当堂提交,并现场答辩。
零代码应用开发 · 第 16 章 从做完到交付