小叶为读书小组做了一个课程资料答疑助手。页面可以选择文件、输入问题,随后显示一段回答。演示时,同学问:“这份材料讲了什么?”助手很快写出几段概括,大家觉得不错。
真正开始使用,争议才出现。一名同学认为,既然回答后面有来源,就应该能找到支持这句话的原文;另一名同学以为,换一份资料以后再问,助手会自动忽略前面文件的内容。小叶原先只要求 AI “根据资料准确回答,并提供引用”,这些细节并没有说清。
同一个“做得不错”,可以指页面能运行、语句流畅、事实正确,也可以指同学终于找到了需要的依据。要判断功能是否完成,就得先知道这一次究竟承诺完成什么。
上一章讨论怎样找到值得处理的真实需要。本章从一个已经选定的需要出发:帮助同学围绕自己选中的课程资料提问,找到相应依据,并据此理解回答。我们要把这个需要展开成使用场景,再写成可以讨论、操作和核查的验收条件。
本章的小叶、读书小组、资料片段、数字、试用和软件行为都是虚构教学情景。下面不会把一个文字情景当成已经运行过的产品测试。你可以先跟着案例判断,再把相同方法用到自己的 AI 工具或任务中。
一、用户故事说清目的,使用场景补出经过
小叶先写下:“作为参加读书讨论的同学,我希望向选定资料提问,并查看回答依据,以便理解作者到底说了什么。”
这种简短表达叫用户故事。它用少量文字说明谁要做什么、为什么做。它的作用是让参与开发的人记得功能服务于哪种需要,也方便讨论轻重缓急。GOV.UK 的用户故事指南强调使用者、需要与目标这几个要素,也允许采用适合团队的其他表达格式。
这里的“以便”尤其值得认真写。假如小叶只写“以便使用 AI”,就没有说明同学因此获得什么帮助;写成“以便理解作者的观点和依据”,才能继续判断一个设计是否合适。
例如,助手在回答末尾显示“来源:你上传的资料”,形式上出现了来源,却无法帮助同学定位具体内容。若目标是回查作者说法,这种引用仍然不够;若只是给已经熟悉材料的人做临时头脑风暴,对引用位置的要求可能不同。目的会改变怎样的结果才算有用。
不过,用户故事还没有讲清一次使用怎样发生。小叶的同学到底选了哪份资料?文件是否已经处理好?提问时切换了文件怎么办?原文没有支持的信息时,页面给什么反馈?这些问题需要更具体的使用场景。
使用场景描述人在一组条件下,为达到某个目的,与系统及有关环境发生的一段交互。它通常有开始时的情况、引发动作的事件、经过,以及最后得到的结果。对于这个助手,一个场景可以是:同学已选中可读取的资料 A,提出有关该资料的问题,看到回答,再打开对应段落核对。
场景的价值不在故事写得热闹,而在于让含糊的决定显露出来。只说“查看引用”,大家可能都点头;具体写到“同学点开引用以后,看到了哪份文件的哪一段”,就必须面对定位是否准确、显示内容是否支持回答的问题。
小叶还可以写另一条用户故事:“作为维护资料的同学,我希望替换无法读取的旧文件,让使用者能够重新打开资料。”这属于另一种角色和目的,不应悄悄塞进同一次读者提问里。当前先把读者提问的经过讲清,维护者的流程另行展开。
使用场景可以细到足以暴露关键分歧,又不必变成每一次鼠标移动的记录。问题在于同学能否知道当前依据哪份资料,就应写清资料的选择与显示;按钮离窗口左边多少像素,暂时不影响这个判断,可以留给后面的界面设计。
二、给一次正常使用确定起点和终点
为了让讨论有共同依据,小叶准备了两份很短的教学资料。我们先看资料 A《阅览室观察记录》。段落编号是本章为方便定位而加的。
| 段落 | 资料 A 中的原文 |
|---|---|
| A1 | 本次只观察东区图书馆三层阅览室,记录安排在工作日晚间。 |
| A2 | 受访的十二名同学中,八名提到难找到带插座的位置,四名没有提到这一问题。访谈对象由现场愿意谈话的同学组成。 |
| A3 | 记录没有比较白天与晚间的到场人数,也没有统计全校自习学生。 |
| A4 | 记录建议先补做不同时段的座位观察,再决定是否调整插座位置。 |
同学准备问:“这份记录中,有多少受访同学提到了插座问题?”一次正常使用可以这样展开。
开始时,资料 A 已经读取完成,同学在页面上选中了它。页面显示完整标题,能够让人核对当前资料。随后,同学输入问题并提交。系统围绕这份资料给出回答,说明十二名受访同学中有八名提到了相关困难,并指向 A2。同学打开引用,看见 A2 的文字,而不是另一份文件或资料首页。
前置条件说明这一次交互开始时已经成立的情况。在上面的场景里,资料可用且已选中,就是前置条件。如果不交代,小叶可能在本地测试时一直使用早已处理好的文件,而同学拿刚上传、还在处理的文件使用,两人看到的其实不是同一种情况。
触发事件是使这次交互开始的动作或事件。这里是同学提交问题。单纯把文件选中,并不等于已经要求系统回答某一个问题;将两者区分,可以避免选择文件时就擅自发出一次不必要的请求。
预期结果则说明这次使用之后应当得到什么。对于当前问题,不能只写“调用模型成功”,因为模型返回了文字,同学仍可能没有得到正确答案或可查的依据。结果应落在同学能够看到和使用的东西上:回答说清受访者的范围与人数,引用能够定位,定位后的原文支持相应说法。
软件工程里也会使用后置条件这个名称,描述交互结束后应当成立的状态。本例中,页面保留这次问题、回答和资料 A 的对应关系,就是一种后置要求。以后同学回看记录,仍应知道答案来自哪份资料。
这样写出来的正常经过,常称为基本路径。它说明主要目标在预想的顺利条件下如何完成。小叶可以先选中已就绪的资料,使前置条件成立,再从提交问题开始走一遍:读回答、打开依据,最后核对同学能否回查到相应原文。
这里还藏着一个范围决定:本章第一版每次只围绕选定的一份资料作答。资料库里即使还有别的文件,也不会默认参与这一次回答。如果以后想增加跨资料比较,那是另一个需要明确支持的场景,应当说明选中了哪些文件、回答怎样区分它们的依据。
把一次使用的起点和终点写清,不等于宣称这条路径已经成功。它先给出一项共同约定。后面的人可以据此实现,也可以拿它去检查实际结果。
三、顺利路径之外,还有哪些同学真的会遇到的情况
基本路径给了小叶一个起点,但使用者不总会从这个起点进入。
如果同学没有选择资料就提问,系统该怎样回应?如果文件读取失败,能不能拿旧文件的内容接着回答?如果资料中没有足够依据,又该怎样让同学知道下一步做什么?
这些情况不能因为“不满足基本路径的前置条件”就从产品中消失。前置条件帮助我们说明正在讨论哪一次交互;其他实际会发生的情况,仍需成为另外的场景,并约定相应结果。
小叶先处理没有选资料的情景。合适的结果可以是:提示先选择文件,保留已经输入的问题。这样,同学完成选择后能够继续。只显示一句“发生错误”,没有告诉他该怎样恢复;清空问题,则使一个容易修正的遗漏变成重复输入的负担。
再看文件仍在处理的情况。此时系统还没有拿到可用于回答的内容。页面可以显示当前处理状态,允许同学稍后继续;不能把“尚未读到内容”说成“资料里没有答案”,因为前者描述处理状态,后者已经是在判断资料内容。
如果处理确实失败,则需要说明这份文件目前无法用于回答,并提供重新选择或重新提交的入口。具体怎样重试、后台怎样恢复,会在后续异常处理章节展开;本章先确定使用者应当知道什么、保留什么、可以采取什么动作。
还有一类情况:文件已经可用,问题也提交成功,但没有找到支持回答的内容。小叶的同学问资料 A:“周末有多少人在这间阅览室自习?”资料 A 没有提供这个人数。助手应说明当前材料未提供相应数据,不能把工作日晚间的十二名受访者换成周末自习人数。
从系统工作过程看,“没有找到依据”有时也可能是检索遗漏,而不是整个文件里确实没有相关信息。因此,要求可以写成“当前未找到支持该结论的内容”,并允许同学查看原文或换一种问法。要断言整份资料没有提供某项内容,就需要对整份资料作足以支持这一判断的核查。我们这份短资料全部列在上表里,读者可以直接核对它没有提供周末人数;面对真实长文件,则应根据已完成的检索和核查来限定说法。
有些分支仍然完成原来的目的,只是采用另一种经过,例如打开引用后跳到对应段落,或者在当前页面展开该段。它们可以作为替代路径讨论。另一些分支处理阻碍或失败,例如文件不可读、回答未完成,通常称为异常路径。两种名称帮助人整理场景,具体怎么分类并不比把行为说清更重要。

图中的分支回到几个不同的问题:有没有选资料,资料能不能用,找到的内容能不能支持回答。这几项不能合并成一个笼统的“失败”。同学要采取的下一步不同,系统需要提供的反馈也就不同。
四、验收条件把“差不多”变成可以共同判断的结果
场景把准备支持的使用经过展开了。接下来要明确:怎样的经过和结果可以接受?
验收条件是一组事先约定的判断要求,用来确认某项功能或使用需要是否按本轮约定得到满足。它可以针对正常结果,也可以针对信息不足、操作失败等情况。它应当让不同检查者知道要看什么,而不只是表达作者的期待。
“回答准确”“引用可靠”都是重要方向,但直接把这几个字交给开发者,仍会留下很大解释空间。小叶需要沿具体场景继续写。
例如,关于资料范围,可以写:“回答只把本次选定资料中有依据的内容表述为该资料的结论;若引入解释,应当与原文中的结论区分,不将其他文件的内容混作本文件所述。”关于引用,可以写:“回答中关于资料内容的说法,应附上相应段落位置;打开后能看到同一文件里支持这些说法的内容。”
这些条件之所以出现,是因为同学的任务包含回查依据。只规定“回答后面至少有一个链接”,会让一个无关但能点开的链接也满足字面要求;只规定“回答有三段”,则可能让篇幅齐整的错答顺利通过。
验收条件还要说明信息不足时怎样处理。对于没有相应数据的问题,可以要求明确指出当前依据不足,不把猜测写成资料已经提供的事实,并让同学能够返回原文继续查找。这个结果没有直接回答出人数,却符合工具在证据不足时应当承担的责任。
小叶可以把关键约定整理为四项,供本轮制作和检查使用。
| 要检查的事情 | 当前约定的可接受结果 |
|---|---|
| 问题对应哪份资料 | 提问、回答和引用保留同一份选定资料的标识 |
| 回答所述是否有依据 | 人群、范围、数字和结论与所引内容相符 |
| 引用是否能帮助回查 | 打开后可找到支持相应说法的具体段落 |
| 当前没有充分依据 | 说明缺少支持,避免给出确定的资料结论,并提供继续查找的入口 |
这张表还不是全部产品要求。未选择、处理中、读取失败等场景各有前面已经说明的行为;手机使用和等待反馈还会继续讨论。验收条件可以逐步补全,但已经拿来判断的条件需要清楚。
一些团队会用“已知……当……那么……”组织一个验收情景。例如:已知资料 A 已就绪且被选中,当同学问受访者中有多少人提到插座问题,那么回答应保留十二名受访者这一范围,说明其中八人提到问题,并能定位到 A2。
这种写法把起点、事件和结果放在一起,便于发现缺少的条件。Cucumber 的 Gherkin 官方说明采用类似的 Given、When、Then 结构,并强调结果应当能够从系统输出观察到。你可以借用这种组织方式,不必先学习一个测试框架。
自然语言写出三句话,本身还不会自动执行测试。需要有人或程序先准备符合条件的输入,再按场景操作,核对实际输出。结构清楚是下一步检查的起点,不能被误写成检查已经通过。
五、文字可以不同,支持关系必须核对
小叶给检查者准备了一句参考回答:“十二名受访同学中,有八名提到难找到带插座的位置,依据是资料 A 的 A2 段。”
助手实际回答:“这次访谈共有十二名受访同学,其中八人提到,带插座的位置很难找到。可查看《阅览室观察记录》A2。”两句话的用词和顺序不同,信息关系却一致。如果用逐字相同作为通过条件,就会把这种合理改写判错。
生成式 AI 的输出经常允许多种表达。在这种任务中,验收应当区分哪些东西必须相同,哪些东西可以变化。对于当前问题,资料、受访者范围、总数和提到问题的人数需要一致;“提到”“反映”这样的措辞,是否可替换,要看有没有改变原意。
小叶可以把参考答案拆成几个要核对的事实:这份记录说的是受访者;受访者共十二人;其中八人提到难找到带插座的位置;依据能够落到 A2。检查者据此判断一段自然语言,而不是要求模型背诵固定句子。
再看另一种回答:“调查表明,全校大多数学生都很难找到带插座的位置,十二名受访者中八人反映了这一点。”这里的十二和八并没有算错,但人群范围变了。
资料 A2 只描述一组现场自愿受访的同学,A1 又限制了地点和记录时段,A3 明说没有统计全校学生。把这组受访者中的现象扩成全校大多数人的状况,需要额外证据。验收若只比对回答中有没有“十二”和“八”,就会放过这处实质变化。
对这类回答,关键问题是:被引用的那段话,能不能支持当前句子所说的范围和结论?这叫检查语义上的支持关系。通俗地说,就是看回答有没有把材料的意思说大、说小、说偏,或者把材料没说的事情算到作者头上。
来源能打开和来源支持结论,也要分别检查。假如上面那句全校结论链接到 A2,打开后确实看到了原文,链接功能可以正常;但原文仍不能证明全校大多数学生的情况。两种检查各回答一个问题,不能互相替代。
还可以改变问题:“为什么记录建议继续观察?”A4 直接写出了补做观察的建议,A1、A3 则说明现有记录集中于一个地点和工作日晚间,缺少跨时段比较。回答可以把这些条件联系起来,解释补做观察能帮助了解目前尚未覆盖的情况,同时说明这是对建议理由的分析。只引用 A2 的人数,就没有提供这层解释所用的充分依据。
在表达上,不必要求每个词后面都挂一个引用。一段回答可以把有关事实放在一起,附上足以支持它们的段落范围。真正要避免的是,给出一个看起来权威的来源入口,却让使用者找不到相应依据。
格式检查仍然有价值。例如系统约定每条引用都带资料标识和段落编号,程序可以直接检查这些字段是否存在。格式正确只是使后续核对可行,关键事实是否得到支持,还要对照内容。有的错误适合程序自动找,有的需要人或另一种核查方式判断,两者可以配合。
如果使用 AI 帮助评价 AI 的回答,也应让评价依据来自原文和预先写明的条件。只让一个模型生成回答,再让它说“我的答案是否正确”,容易把原有误解一起带进评价。小叶可以要求检查者逐项说明依据在哪、哪句话超出了依据,并人工回查影响结论的地方。这是检查方式的安排,还不等于某个评价模型已经可靠。
六、资料一变,场景也要跟着变
同学不会永远只看资料 A。小叶把资料 B《讨论室观察记录》也加入演示。
| 段落 | 资料 B 中的原文 |
|---|---|
| B1 | 本次访问西区讨论室。八名受访同学中,三名提到带插座的位置不够,五名没有提到该问题。访谈对象为现场愿意谈话的同学。 |
| B2 | 本记录没有调查阅览室,也未调查全校。 |
现在,同学选中资料 B,再问同一句话:“这份记录中,有多少受访同学提到了插座问题?”可接受的回答要变成八名受访者中的三名,依据是 B1。
如果助手仍回答“十二人中的八人”,这句话在资料 A 中有依据,却不属于当前问题。问题文本相同,不代表系统应该给相同答案;所选资料是影响结果的一个关键条件。
因此,使用场景不仅包含同学输入的文字,也包含相关的系统状态。这里的状态就是在某个时点已经选了哪份文件、它能否使用、是否还有未完成的回答等情况。把状态漏掉,检查者可能拿同一句问题反复试,误以为已经覆盖实际使用。
一个更容易出问题的情景是:同学在资料 A 下提交问题,回答还没出来,就切换到了资料 B。这时旧请求随后完成,该显示在哪里?
这个问题没有脱离场景的唯一界面答案。可以让旧回答保留在标明资料 A 的历史记录里,也可以在切换时取消旧回答在当前页面上的展示。重要的是,别让来自 A 的答案被显示成依据 B 得出的结果。
小叶为第一版选择后一种安排:当同学切换资料时,页面停止等待旧问题的结果,说明需要在新资料下重新提问;旧请求后来返回的文字,不再插入当前回答区。已经完成并保留在历史中的旧回答,仍标明它原来对应的资料。这项约定描述的是使用者看到什么,后台怎样终止或丢弃旧请求,留给实现处理。
这就形成一个新的验收场景:开始时 A 的回答尚未完成;同学切换到 B;随后 A 的回答返回;检查当前页面是否仍显示为 B 的范围,是否错误插入 A 的答案,以及同学能否清楚地重新发起 B 的问题。
只测试“先问完 A,再切换 B”,检查不到这个问题。因为两个动作的先后关系不同,系统面对的是另一个状态。场景分析让小叶在开发前想到这种差别,也让测试时知道怎样把它重现出来。
同样,资料更新以后,旧回答也不该悄悄被贴上新版本的标签。这里先保留问题、答案与当时资料的对应,不展开完整版本管理;后续章节会进一步讨论怎样保存变化和恢复依据。
七、把“好用”和“及时”放进真实使用过程
目前的条件主要检查资料、回答和引用的关系。功能即使满足这些条件,同学仍可能觉得难用。
比如,手机上显示“已选择:阅览室观……”,另一份资料的标题也从“阅览室观……”开头。同学难以确认自己选中了哪一份。答案可能忠实依据系统所选文件,但使用者对当前文件的理解已经出错。
这类问题需要加入可用性要求。可用性关注特定使用者在实际条件下,能否完成目标、为此付出多少操作努力,以及使用中的感受;NIST 术语表中的可用性定义也将使用者、目标与使用环境联系起来。对于小叶的助手,可以先把“知道选中了什么”“能读到回答”“能找到对应原文”“错误后知道怎样继续”落到具体操作上。
小叶可以用目标读者常用的手机,准备标题相近的文件,让同学独立选择并说出当前资料,再打开一个引用。若必须依靠小叶在旁边提醒才找到原文,就不能把受指导的成功直接当成界面本身已经清楚。GOV.UK 的可用性测试方法也建议给出清楚的任务目标,观察实际操作,避免把完成步骤直接提示给参与者。
这不是要求所有页面都必须没有任何学习过程,而是要明确当前产品为谁服务、允许怎样的提示和帮助。给课程助教使用的专业工具,可以有不同的操作约定;给初次进入读书小组的同学使用,则需要考虑他还不知道界面规则。
等待也是使用过程的一部分。“回复越快越好”表达了愿望,却还没有说明等待时系统需要做什么。读书讨论正在继续,如果同学不知道请求有没有发出去,就可能连续点击;如果页面没有反应,又不知道是否应该继续等,就会错过发言时机。
小叶与小组为第一版暂定一个处理约定:收到问题后显示正在处理;从本次问题提交起等待满二十秒仍没有答案时,页面说明回答尚未完成,并提供停止等待、回原文查找的选择。这是本次教学情景的暂定等待安排,不是某种通用性能标准。
二十秒在这里限定的是何时给出进一步的选择,并没有承诺系统一定在二十秒内答对问题。把反馈期限和任务完成期限分开,同学才能理解页面在说什么,开发者也不会把显示一个进度提示当成回答已经完成。
检查这个约定,可以模拟提交问题后超过二十秒仍未收到答案的情况,观察页面是否在约定时点给出说明,以及停止等待、回查原文的入口能否使用;也可以检查答案较早返回时,页面是否转为显示结果。除了等待时间,还要检查原问题有没有被保留、停止等待后迟到的旧结果会不会覆盖同学后续查看的内容。
性能要求同样需要环境范围。如果将来约定“多数回答应在某个时间内返回”,就要说明资料规模、问题类型、网络条件,以及“多数”按哪些记录计算。本章先把等待中的使用行为说清,性能统计和更完整的质量评价留到后续展开。
质量要求的作用,是保护用户完成任务所需的条件。它们会影响设计投入,但无需为了显得严格给每件事设一个数字。能回查原文、知道当前选中文件、失败后能继续,都是可以通过具体操作检查的要求。
八、验收样例让规则落地,但不能把规则缩成几个样例
小叶已经有不少条件。为了开始检查,他给每个重要条件准备一两个具体例子。这些例子就是本轮的验收样例:给定一组清楚的输入和状态,说明要采取的动作以及应观察到的结果。
例如,资料 A 已就绪且被选中,同学问“这份记录中,有多少受访同学提到了插座问题?”,回答应说明十二名受访者中有八名提到问题,并能回查 A2。改为选中已就绪的资料 B,再问同一句话,回答应说明八名受访者中有三名提到问题,依据是 B1。未选择资料时提交问题,则应得到选择提示,原问题仍在。
样例比泛泛的条件更容易拿来操作,但它只代表规则覆盖中的一个具体情景。“回答应忠实于选定资料”是一般要求,A 和 B 的人数问题是两个具体例子。如果开发者只针对这两个资料样例写死答案,两个例子都能通过,工具仍没有获得一般的资料答疑能力。
因此,小叶需要让条件与样例之间能够相互回查:这个例子准备检查哪一项要求?一项要求有没有相应例子?发现失败后,是某个例子设置得不清楚,还是功能没有满足它所代表的要求?

为了避免只选顺手的成功例子,小叶做了一张简短的覆盖表。“覆盖”在这里是指重要情景是否进入检查范围,不是一个已经测得的成功率。
| 需要区分的情景 | 为什么单测正常提问还不够 |
|---|---|
| A 下提问与 B 下提问 | 同一个问题会因资料范围不同而改变答案 |
| 没选资料、资料处理中、读取失败 | 三种原因对应的说明和继续方式不同 |
| 原文有直接依据与没有充分依据 | 能生成文字不等于有证据回答 |
| 完成回答后切换与等待中切换 | 迟到的旧结果只在后一种情况中暴露问题 |
| 准确引用与可打开但不支持结论的引用 | 定位功能和语义支持是两项不同检查 |
| 桌面阅读与目标手机阅读 | 同样的内容可能在实际界面中难以识别或回查 |
这张表不是要求穷举所有组合。若只是练习一个小工具,可以先覆盖最会影响任务的差别,再根据实际失败增加情景。关键是知道当前检查覆盖了什么,以及哪些范围还没有检查。
假如小叶记录了十次检查,其中八次正常人数提问通过,另两次等待中切换资料都出现旧答案混入。他算出八成通过,就说“总体够用了”,这个判断会掩盖一个重要事实:本轮检查到的两次切换情景全部失败,而资料对应关系恰好是核心要求。
这里的数字是另设的虚构检查记录,十次是操作检查次数,不是十名独立使用者。八成描述这十次记录的合计结果,不能直接当作未来成功概率。更有用的处理是按失败所影响的要求看:资料切换的关键行为还没完成,就先修复或明确缩小本轮支持范围,而不是让大量简单成功把它平均掉。
如果缩小范围,也要真实改变用户能够做的事情和相应说明。例如先限制一次会话只使用一份资料,切换需要开启新会话,并确保旧结果不会进入新会话。单纯从测试表里删掉切换样例,界面却仍允许随时切换,就没有改变造成问题的条件。
九、验收怎样发生,要和条件一起说清
一份验收条件写得再清楚,也需要实际执行才能形成检查结论。小叶要决定用什么材料、怎样操作、由谁核对,并保留实际发生的结果。
最先准备的,是稳定的检查输入。若今天资料 A2 写八人,明天有人把文件改成九人,而检查者仍拿昨天的参考内容对照,那么相同的答案就可能得到不同判断。小叶应保留本轮使用的资料版本,使参考依据、系统输入与检查记录对应。
其次,要让预期结果有独立依据。人数问题的预期来自已经摆在面前的 A2;是否允许推广到全校,要结合资料的范围判断;等待满二十秒时应显示什么,则来自本轮约定。前两者依赖内容,后者依赖产品选择。不能因为 AI 今天这样回答了,就倒过来把这句话定为正确答案。
随后按场景实际操作。对于等待中切换资料,检查者应真的在旧回答尚未完成时切换,再让旧结果返回;如果只是想象“这种情况应该没问题”,就还没有取得该情景的运行证据。例如,让检查用的程序暂时不把 A 的结果送到页面,等切到 B 后再发送,就能稳定重现这个顺序。这可以检查页面怎样处理迟到结果;实际资料读取和模型回答是否正确,还要通过相应检查确认。采用什么检查办法、实际观察到了什么,都应如实记录。
检查记录需要足以让别人知道结果来自哪里。小叶可以记下场景名称、资料版本、开始状态、所做动作、实际看到的输出,以及与条件相比的差异。异常时保存相关文字或画面,往往比写“偶尔不好用”更有帮助。
例如,一条失败记录可以是:“资料 A 的回答未完成时切到 B;A 的回答随后返回;当前页面标题显示 B,回答却写十二人中八人,引用打开 A2。”这条记录能指出出错的对应关系。开发者不必先猜“混乱”究竟是标题错、答案错、引用错,还是同学选错了文件。
修复以后,应重新检查原来失败的场景及可能受影响的相关路径。取消旧回答展示的修改,可能使新的正常问题也不再显示,因此除了重现切换顺序,还要确认在 B 下重新提问能正常得到 B 的结果。具体测试层次会在后面展开;这里先建立一条朴素关系:修改了哪种行为,就需要看它及相关使用是否仍按约定发生。
谁来判断,也与条件有关。程序可以检查资料标识有没有混用;熟悉原文的人可以对照事实与解释;实际使用的同学可以暴露找不到入口或读不清标题的困难。一个人可能承担多种角色,但不能因为某一项检查方便,就让它代表所有检查。
让 AI 协助写场景和找遗漏同样有用。小叶可以把当前用户故事、资料范围、正常经过交给它,让它提出哪些状态变化会影响结果,再逐项核对是否属于本轮使用。对于“未选资料时保留问题”“旧结果不能覆盖新文件页面”这样的要求,AI 也能帮助把自然语言转成具体实现。
不过,验收条件仍需要有任务和证据依据。模型提出“必须支持全校所有文件格式”,不代表这个范围自动属于本轮;模型建议“将回答长度限制为三句话”,也需要说明它帮助解决了什么实际困难。场景写得多,只有在改变了对行为的理解或覆盖了重要遗漏时才增加价值。
十、这一版完成了什么,还需要继续知道什么
回到开头,小叶现在可以更具体地说明自己的资料助手怎样才算完成这一版。
它要让同学识别当前资料,围绕就绪的选定文件提问,得到与原文范围一致的回答,并能打开支持相应说法的段落。没有选文件、尚在处理、文件读取失败和依据不足,需要分别说明原因及继续方式。切换资料或停止等待以后,旧结果不能混入当前问题;历史回答仍保留原来的资料标识。
面对第八节那份假设的检查记录,小叶不能因为十次中八次通过就宣布完成。两次切换都失败,直接影响资料与回答的对应。他需要先修复这项行为,再重现失败情景,并检查新资料下的正常提问。如果本轮决定限制会话范围,也要真正落实到界面和行为,再检查相应条件。
等本轮约定的各项行为经过实际检查,且结果都符合相应条件,小叶才可以说:在本轮已说明的资料、环境和场景范围内,这一版满足了相应验收条件。他仍需要在读书讨论中继续观察,同学是否更容易回查依据,是否能分清原文结论和解释,以及是否因此更好地理解材料。
产品行为符合约定,为用户取得帮助提供了条件;用户实际获得多少帮助,还要看真实使用。这两层判断可以相互推动:如果引用定位正确,同学仍不懂为何支持回答,下一步可能需要改善解释方式;如果同学始终不知道自己选中了哪份资料,就要回到入口和场景设计。
使用场景和验收条件因此不是开发前填完就封存的表格。它们让小叶、同学和 AI 能围绕同一件可观察的事情工作:从什么状态开始,发生了什么,应该得到什么,实际差在哪里。遇到分歧时,可以回到这个具体过程继续修改。
练习与参考分析
练习一:补全一条能检查的场景
小叶给一个课堂笔记整理工具写了用户故事:“同学希望把笔记整理成复习提纲,以便回顾课堂重点。”开发者据此做了一个按钮,点击后显示一段文本。请补出一条有明确起点、动作和结果的场景,并说明还需要确认什么。
**参考分析:**可以先选一个有限情景:同学已经选择本次课堂的笔记,笔记内容可读取;点击整理后,得到按主题组织的提纲,能够回到相应笔记位置查看依据;没有记录的内容不被写成课堂已经讲过的结论。这样,输入范围、触发事件和可核查结果都有了起点。
还需要确认“重点”根据什么判断、是否允许补充课外解释,以及同学希望怎样使用提纲。上述场景是一个可讨论的初步方案,不代表这些需要已经确认。若笔记尚未选择或处理失败,还要另写相应场景,不能仅凭按钮能产生文字认定工具已经完成。
练习二:正确人数配上错误范围
助手根据资料 B 回答:“这项覆盖全校学生的调查发现,八名受访者中有三人遇到插座不足问题。”它正确链接到 B1。请指出这段回答需要怎样核对,并给出一种更合适的表达。
**参考分析:**八和三与 B1 一致,但“覆盖全校学生”把一次西区讨论室的现场访谈扩大成了全校调查。B2 又明确没有调查全校,因此不能只因为数字相同和链接可打开就通过。原文还只是记录同学提到了什么,回答需要保留这层证据性质。
可以改成:“这份西区讨论室的访谈记录中,八名现场自愿受访的同学里,有三名提到带插座的位置不够,依据是 B1。”这种表达保留地点、受访范围和人数关系。它仍不能证明没有提到的人一定没有困难,也不能代表未来所有使用者;核对的是原文说了什么。
练习三:前置条件能免去错误处理吗
小叶在基本路径中写明“文件已经读取成功”。开发者于是说,文件还在处理中时,页面显示什么不属于需求;现在页面会直接回复“资料里没有相关信息”。这个说法和行为分别有什么问题?
**参考分析:**前置条件只界定当前基本路径的起点。文件处理中的情况仍会在真实使用中出现,需要单独约定行为。不能因为它不在顺利路径中,就认为产品可以随意回应。
“尚未读完”描述的是处理状态,“资料里没有相关信息”却作出了内容判断。系统此时还不具备作该判断的依据。较合适的行为是说明文件仍在处理,保留同学的问题,并提供等待或重新选择的可行方式;哪些方式实际可用,应按实现及使用约定明确。
练习四:同样的问题,为什么要查两个时间顺序
小叶只检查了“资料 A 回答完成后切换到 B,再问同一句问题”,结果正确。他因此认为“先在 A 下提问,尚未完成就切换 B”的情况也已经验证。请说明缺少了什么检查,以及本章第一版约定下应当看什么结果。
**参考分析:**第二种顺序里还有一个未完成的旧请求,可能在资料切换后返回;第一种顺序没有这种迟到结果,因而不能替它验证。要检查的不是再问一遍相同文本,而是制造相应的开始状态和事件顺序。
按本章约定,切换后停止等待旧问题在当前页面的结果,提示在新资料下重新提问;旧结果随后回来,也不应被放进当前回答区。再在 B 下提问,应得到 B 的答案和引用。历史中已经完成的 A 回答仍标为 A,不能仅因选择变化改贴成 B。
练习五:二十秒提示意味着完成了吗
一次虚构检查中,同学提交问题后二十秒仍没有答案,页面按约定出现“回答尚未完成,可以停止等待或回原文查找”。检查者写:“系统在二十秒内成功回答。”应怎样修正这条记录?如果用户此时选择停止等待,后续还要检查什么?
**参考分析:**应记录“提交问题后二十秒仍无答案,页面出现尚未完成的说明,并提示可以停止等待或回查原文”。这证明相应提示已出现,不能写成回答成功。题面未交代入口是否实际可用,还需尝试相应操作才能确认;回答内容的准确性与最终完成时间也尚无检查结果。
若用户选择停止等待,后续应确认页面允许继续查看原文,原问题按约定保留;迟到的旧结果不能覆盖正在查看的内容,也不能替换后来发起的新问题的回答。停止等待是一种界面和交互安排,不能仅凭这个按钮的名称推定后台请求已经停止。具体实现及资源处理另需检查。
练习六:通过比例很高,是否足以交付
小叶另做了二十次检查,其中十八次在同一份资料下正常问答通过,两次缺少依据的问题都被助手编出了确定答案。检查者认为“九成通过,可以交付”。请判断这份记录能支持什么,下一步应怎样安排。
**参考分析:**九成是这二十次操作检查的合计通过比例。它受到题目选择影响,不能当成真实使用的成功概率;十八次同类正常问题,也不能把两次关键分支失败抵消。当前检查到的缺少依据情景都违反了不编造资料结论的要求。
下一步应定位缺少依据时为什么继续给确定说法,修正相应行为,再检查这类失败情景和仍有充分依据的正常回答。若选择缩小支持范围,要说明并实际限制可处理的问题,而不是删去失败记录。现有证据可以证明一些正常场景已符合约定,不能支持整个已承诺范围完成。