V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AndyAO
V2EX  ›  程序员

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

  •  
  •   AndyAO · 2021-01-13 10:52:53 +08:00 · 2789 次点击
    这是一个创建于 1418 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    第 1 条附言  ·  2021-02-25 20:21:25 +08:00

    后来我又进行了改革,将大量的说明文件放在README中,然后用 双向链接笔记工具 进行串联,大大提高了学习的效率和快感,之后我学习任何语言也准备采用REPL+「测试驱动学习」的方式了!

    最近看到了一个类似的项目,已经很出名了,特点就是能够提供Web上的REPL环境,写带有REPL的笔记,这也是我设想的!

    2020年6月已经支持 .NET 平台,相关的消息如下。

    Public Preview of PowerShell Support in Jupyter Notebooks | PowerShell Team

    就是不清楚是否能够支持将数据放到本地,因为还没有深入的了解,如果的确如此的话,那么可能会把笔记迁移过去。

    20 条回复    2021-01-24 02:38:31 +08:00
    AndyAO
        1
    AndyAO  
    OP
       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
        2
    crclz  
       2021-01-13 11:06:58 +08:00
    斯坦福的 pintos 这门课就是这样的。

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

    谢谢你提供的信息.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    在某个语言学习的最初阶段,应该是不能这么做的,因为写测试需要懂基本的语法,这是需要强调的.
    agagega
        20
    agagega  
       2021-01-24 02:38:31 +08:00 via iPhone
    Ruby koans
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.