有人听说过“测试驱动学习”吗?

2021-01-13 10:52:53 +08:00
 AndyAO

最近在学 PowerShell,本来是看文档加上猜测和试验,然后做笔记。

在学习某个功能的时候,我做了合理的推测,结果到最后发现那个推测居然是错误的。

那个细节用语言描述是比较困难的,所以我想到干脆用测试描述好了。

结果发现这样记的笔记非常准确,不容易出错,而且每次看到运行测试成功就很有成就感,对学习的效率和积极性有很大的提升。

最后我干脆就“测试驱动学习”了,本来以为这应该是我的独创,我没想到今天看 GitHub 的时候发现原来 PowerShell 有专门的“测试驱动学习”项目,惊呆(キ`゚Д゚´)!!

你们听说过测试驱动学习吗?

vexx32/PSKoans: A simple, fun, and interactive way to learn the PowerShell language through Pester unit testing.

成功的运行一组单元测试,令人心情愉悦

2658 次点击
所在节点    程序员
20 条回复
AndyAO
2021-01-13 10:53:02 +08:00
在谷歌上搜索"Test driven learning",还是能找到一些有意思的结果,例如

[Test-Driven Learning]( http://users.csc.calpoly.edu/~djanzen/tdl/)

TDL is an approach to teaching computer programming that integrates automated unit tests throughout the computer science and software engineering curriculum. TDL has been applied in undergraduate, graduate, and professional training courses. Educators teaching courses involving computer programming at all levels are encouraged to consider adopting TDL. Replicated empirical studies of TDL are encouraged. Questions may be directed to David Janzen. A few resources are listed below.

TDL 是一种教授计算机编程的方法,它整合了计算机科学和软件工程课程中的自动化单元测试。TDL 已应用于本科、研究生和专业培训课程。鼓励在各级教授计算机编程课程的教育工作者考虑采用 TDL 。鼓励重复 TDL 的实证研究。问题可以直接向大卫 · 詹森提出。下面列出了一些资源。

这里有一篇 2006 年的论文,在论文集的网页上查到了这个内容

[Test-driven learning | Proceedings of the 37th SIGCSE technical symposium on Computer science education]( https://dl.acm.org/doi/10.1145/1121341.1121419)
crclz
2021-01-13 11:06:58 +08:00
斯坦福的 pintos 这门课就是这样的。

吴恩达的深度学习也是这样的,jupyter notebook 。
no1xsyzy
2021-01-13 11:11:47 +08:00
NOIPer 不请自来
aheadlead
2021-01-13 11:22:53 +08:00
感谢楼主。有没有对于 C 或 C++的 TDL 的例子?
Mutoo
2021-01-13 12:19:21 +08:00
OJ 上的题目本质就是测试驱动。得 pass 所有 case 才算完成。
另外国外的 CS 课程很多老师都会在 makefile 里面写好 test,要求学生提交前能通过 test case 不然就不用提交了。这也算吧。
hitmanx
2021-01-13 12:23:55 +08:00
@crclz pintos 有公开课的视频吗?
AndyAO
2021-01-13 12:32:35 +08:00
@Mutoo #5

谢谢你提供的信息.

写代码来完成老师给定的测试,这明显就是小学老师都在用的模式,先布置作业,然后检查作业.

只不过编程这个作业比较容易用编程本身检查.(也许小学生的作业现在已经可以用编程检查了)

我认为这根本就不是测试驱动学习.(当然也有一定的进步意义,起码事先要检查作业自动化)

测试驱动学习这个名字是由测试驱动开发演变而来的,测试显然是要自己写的,而不是别人写.

学习的主动权掌握在自己的手里.
yzbythesea
2021-01-13 12:34:15 +08:00
纸上谈兵,花里胡哨。
AndyAO
2021-01-13 12:35:33 +08:00
@Mutoo #5

在老师出题这个场景下,我认为老师这样出题是践行了测试驱动学习:

针对领域或者某几个具体问题,让学生去探究.

探究的结论要用测试精确描述,便于阅读检查.

这样测试和代码,以及 README,都是学生自己写的.

当然这种作业是很高级的,检查作业估计是不能自动化的.
IMRES
2021-01-13 12:38:49 +08:00
良好测试用例对开发者来说可读性是很好的,我一般是结合 examples 和 tests 来熟悉一个新的工具。
killeder
2021-01-13 12:44:40 +08:00
应该是考试驱动学习吧
AndyAO
2021-01-13 12:51:24 +08:00
@Mutoo #5

现在想起来,我认为那个是测试驱动学习的前奏,也算是测试驱动学习吧.

因为在最初的时候有很多的基础内容,老师先写好的话,效率可能会更高.毕竟最初的那些内容都差不多.

等到某个问题老师也不知道,或者是比较细节和个性化,老师不可能为所有的学生布置题目,那个时候学生再来写.

这样就算完整的进行了测试驱动学习.
AndyAO
2021-01-13 12:51:49 +08:00
@IMRES #9 谢谢你的分享,原来我不是孤单的,哈哈
learningman
2021-01-13 13:10:26 +08:00
@no1xsyzy 现在不是 CSPER 了吗(
sulinehk
2021-01-13 13:51:12 +08:00
Go 也有一个通过测试学习的项目:learn-go-with-tests
crclz
2021-01-13 15:22:10 +08:00
@hitmanx
Stanford 的 CS140 ( PintOS )这门课的本质就是那 4 个实验( Project )。这 4 个实验的完成完全是可以只靠看 pintos 文档的来实现(个人亲身经历)。文档地址: https://web.stanford.edu/class/cs140/projects/pintos/pintos_1.html

不过,如果没有基础的话,可以用学堂在线上面清华大学开的操作系统网课。(学堂在线搜索“操作系统”,第一个就是了)。这门网课既有助于考试,又有助于理解操作系统,从而更容易地完成 pintos 的实验。
msg7086
2021-01-13 15:37:05 +08:00
中学的时候经常考试驱动学习,考试的时候发现哪里没学会,再回来恶补。
no1xsyzy
2021-01-13 15:52:27 +08:00
@learningman 诶,暴露年龄了(
AndyAO
2021-01-13 20:02:00 +08:00
@aheadlead #4
没发现这样的例子.可能是因为我没有用心寻找吧,你可以先自己调研调研.

只要有单元测试方法,那么应该都能测试驱动学习.

在某个语言学习的最初阶段,应该是不能这么做的,因为写测试需要懂基本的语法,这是需要强调的.
agagega
2021-01-24 02:38:31 +08:00
Ruby koans

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX