跳到主要内容
返回课程

第 6 周 · 第 2 课 · 50-65 分钟

规划、做原型、做测试

把你的问题变成一个能动手做、也能检验的方案:设计输入、输出、特征、标签和规则;做一个简单的原型;再用真实的测试用例来检验它。

材料
在网页浏览器中打开的这节课 · 纸和笔,或者一个记事应用
本课
进行中

会自动保存在这台设备上

你将能够做到

  • 设计你的系统的输入、输出、特征、标签,以及任何规则。
  • 说明什么是原型,并在纸上做一个简单的原型。
  • 写出测试用例,并用它们找出局限。
  • 根据测试所显示的结果,通过迭代改进你的设计。

想一想

你已经有了问题界定:把一张垃圾照片分成可回收、堆肥或其他垃圾。系统会看哪些线索(特征)?你会教给它哪些标签?而在真正动手做任何东西之前,你又怎么知道自己的方案靠不靠谱?

这节课,你要把自己的想法变成一个真的能在纸上检验的方案。

做个预测

预测一下:当你第一次用棘手的例子测试自己的原型时,它会大部分都答对,还是会在一些例子上失败?你觉得哪种例子会把它绊倒?

特征
关于某个输入的、可衡量的一条线索,系统用它来做判断,比如物品的颜色、形状或大小。
标签
附在一个样例上的正确答案,比如把一张照片标注为「可回收」,好让系统从中学习。
规则
由人写下的精确指令,比如「如果这件物品是玻璃瓶,就标注为可回收」。
原型
一个想法的、快速而粗糙的第一版,做出来是为了在造出真东西之前先检验它怎么运作。
测试用例
一个已知正确答案的例子,你把它送进原型,检验原型是否管用。
迭代
反复走「制作、测试、改进」这个循环,让设计一次比一次更好。

设计各个部件:输入、输出、特征、标签和规则

动手之前,先设计各个部件。输入是进来的东西(一件物品的照片)。输出是出去的东西(一个标签:可回收、堆肥或其他垃圾)。标签则是你要教给系统、并用来核查它的那组正确答案。

特征是系统用来做判断的线索,比如物品的材质、形状,或者它是否湿了、是否有油。如果任务中有一部分既简单又清楚,你甚至可以加一条规则:「如果是干净的玻璃瓶,就标注为可回收。」好的方案会把这些都写清楚,好让任何人都能看懂一个判断是怎么做出来的。

  • 输入:一件物品的照片。输出:三个标签中的一个。
  • 特征:材质、是否湿了、是不是纸、上面有没有食物。
  • 规则:「如果是香蕉皮,就标注为堆肥。」

原型是为了检验而做的粗糙初版

原型是你这个想法的快速、粗糙版本,做出来是为了从中学习,而不是成品。你的原型可以在纸上:一叠「如果有这些特征,就用这个标签」的卡片,或者一张同学能用手跟着走的简单流程图。关键是把想法变得足够具体,好拿来试一试。

原型本来就该是不完美的。趁早、花很少的成本做一个,能让你免于花大力气去做错的东西。你完全可以把一个原型扔掉,那没关系,你留下了从中学到的东西。

  • 纸上的流程图:「是纸吗?湿了吗?→ 标签」。
  • 一叠决策卡片,朋友不用你解释就能照着走。
  • 手绘的应用界面草图,标出输入和输出。

测试用例揭示局限,迭代把它们修好

测试用例是一个已知正确答案的例子。你把它送进原型,看它给出的标签对不对。几个精心挑选的测试用例,包括棘手的那些,很快就能显示出你的设计在哪里崩掉。那些薄弱之处就是它的局限:它会出错或者拿不定主意的情形。

任何系统都有局限;目标是有意去把它们找出来,而不是日后被它们打个措手不及。当某个测试用例失败时,你就改进设计,再测一次。这个「一直重复直到更好」的循环就是迭代,也是真实产品被造出来的核心方式。

  • 测试用例:一个油腻的比萨盒。正确标签:其他垃圾或堆肥,而不是可回收。
  • 发现的局限:原型把所有盒子都标成「可回收」,所以油腻的那些就错了。
  • 迭代:加一个「有没有食物油渍?」的特征,再加一条规则,把油腻的盒子送到别处。

例题讲解

为一个垃圾分类器做原型并测试

  1. 设计各个部件:输入 = 一件物品的照片;输出 = 可回收/堆肥/其他垃圾;特征 = 材质、是不是纸、是否湿了、有没有食物油渍。
  2. 做一个纸上原型:决策卡片。「如果是剩饭剩菜 → 堆肥。如果是干净的纸或干净的瓶子 → 可回收。否则 → 其他垃圾。」
  3. 写下已知答案的测试用例:干净的水瓶(可回收)、香蕉皮(堆肥)、油腻的比萨盒(其他垃圾)、铝箔薯片袋(其他垃圾)。
  4. 用手跑一遍测试:原型答对了水瓶和香蕉皮,却把油腻的比萨盒标成了「可回收」,这是一次失败。
  5. 找出局限并迭代:加一个「有没有食物油渍?」的特征,再加一条规则,让油腻的纸类进其他垃圾。重新跑一遍测试用例;这次比萨盒通过了。

要点:设计各个部件,做一个粗糙原型,用已知答案的用例来测试,找出它的局限,然后不断迭代直到变好。

制作、测试、改进的循环

一个不断重复的四步循环。第 1 步:设计各个部件(输入、输出、特征、标签、规则)。第 2 步:做一个粗糙的原型。第 3 步:跑测试用例,记录哪些通过、哪些失败。第 4 步:找出局限并改进。一支箭头从第 4 步回到第 2 步,表示迭代。

迭代意味着把这个循环走不止一遍,每一遍都更好一点。

一张测试用例表
测试用例正确标签原型给出的标签结果
干净的水瓶可回收可回收Pass
香蕉皮堆肥堆肥Pass
油腻的比萨盒其他垃圾可回收失败
铝箔薯片袋其他垃圾其他垃圾Pass

垃圾分类器的测试用例表。每一行都有一个例子、它已知的正确标签、原型给出的标签,以及通过还是失败。干净的水瓶:正确答案可回收,给出可回收,通过。香蕉皮:正确答案堆肥,给出堆肥,通过。油腻的比萨盒:正确答案其他垃圾,给出可回收,失败。铝箔薯片袋:正确答案其他垃圾,给出其他垃圾,通过。

活动

原型方案工作室

活动说明

把你的问题界定,变成一份经过设计、做出原型并测试过、可以拿去展示的方案。

  1. 设计各个部件:写出你的输入、输出、标签、三到五个特征,以及任何简单规则。
  2. 做一个纸上原型:画一张流程图,或者写出同学不用你帮忙就能照着走的决策卡片。
  3. 写至少四个已知正确答案的测试用例,其中包括两个棘手的。
  4. 用手把每个测试用例送进原型,并在测试用例表上记录通过还是失败。
  5. 列出失败所揭示的局限,并写下你接下来会做的一项改进(你的迭代)。

用你在第 1 课确定的问题,设计输入、输出、特征、标签和任何规则;画出一个纸上原型;写至少四个测试用例,包括棘手的那些;用手「跑」一遍;再记下你发现的局限和你会做的一项改进。这将成为你最终项目的核心。

你需要准备

  • 纸和笔,或者一个记事应用

做到这样就算成功

  • 写出了输入、输出、标签、三到五个特征,以及任何规则。
  • 一个同学不需要额外解释就能照着走的纸上原型。
  • 至少四个已知答案的测试用例,包括棘手的,已跑过并标注了通过或失败。
  • 至少找出一项局限,并提出一项改进(迭代)。

内置数据集

测试用例入门包

一份内置的清单,教你怎样写好测试用例:既要有简单的例子,也要有边缘情况(湿的、油腻的、破损的、少见的),还要有可能两边都说得通的例子。另外附有一张空白的测试用例表模板(例子、正确标签、原型给出的标签、通过/失败)供你抄用。

现在先用内置材料、你的笔记和讨论来完成这个活动。互动版本会在以后的更新里推出。

检查你的理解

检验你能否规划、做原型并测试一个设计。

  1. Question 1. 在动手做系统之前,下面哪些是你应当设计好的?(选出所有符合的。)

    把符合的都选上。

  2. Question 2. 把一轮原型制作中「制作、测试、改进」的循环排好顺序。

    1. 1.设计各个部件(输入、输出、特征、标签、规则)
    2. 2.做一个粗糙的原型
    3. 3.跑测试用例,并记录通过还是失败
    4. 4.找出局限并改进设计
  3. Question 3. 这个团队接下来该做什么?

    一个团队的纸上原型通过了所有简单的测试用例,却把一个油腻的比萨盒标成了「可回收」,而正确答案是其他垃圾。

已回答 0 / 3

自己动手试试

把你自己的原型难倒

使劲想办法让你自己的原型失败,然后用你学到的东西把它变得更好。

  1. 写三个特别棘手的测试用例,专门用来绊倒你的原型。
  2. 用手跑一遍,记录哪些失败了。
  3. 对每一次失败,说出它揭示的那处局限。
  4. 提出一项改动(一次迭代),并预测它会不会修好那些失败。

做到这样就算成功

  • 三个能给原型施加压力的棘手测试用例。
  • 每一次失败都对应上一处说得出名字的局限。
  • 提出一次迭代,并预测它的效果。

反思

输入时会保存在这台设备上

请不要写私人信息。你的回答只保存在这个浏览器里,不会发送到任何地方。

小结

你把一个问题变成可检验的方案:设计各个部件,做一个粗糙原型,跑已知答案的测试用例,再通过迭代修好你发现的局限。

  • 动手之前,先设计输入、输出、标签、特征和任何规则。
  • 原型是花很少成本做出的粗糙版本,用来尽早检验一个想法。
  • 测试用例揭示局限;迭代就是不断改进直到更好的那个循环。

七至八年级延伸内容

测试到什么程度才算够?

真实的团队没法测试每一种可能的输入,所以他们会精心挑选测试用例:常见情况、边缘情况,以及出错代价最大的情况。一个医疗人工智能受到的测试,要比一个推荐表情符号的小游戏严格得多。

针对你的项目,判断哪些测试用例最重要,以及为什么。写一份简短的「测试计划」,说明在真实用户能够信任这个系统之前,你认为测试到什么程度才算够。

完成这一课

  • Attempt the knowledge check(未完成)
  • Save a reflection (recommended)(未完成)

先做一下知识检查,才能完成这一课。