有人聽說過“測試驅動學習”嗎?

程式設計師 AndyAO • at 2021-01-13 12:06:01 • 3 Views

最近在學 PowerShell,本來是看文件加上猜測和試驗,然後做筆記。

在學習某個功能的時候,我做了合理的推測,結果到最後發現那個推測居然是錯誤的。

那個細節用語言描述是比較困難的,所以我想到乾脆用測試描述好了。

結果發現這樣記的筆記非常準確,不容易出錯,而且每次看到執行測試成功就很有成就感,對學習的效率和積極性有很大的提升。

最後我乾脆就“測試驅動學習”了,本來以為這應該是我的獨創,我沒想到今天看 GitHub 的時候發現原來 PowerShell 有專門的“測試驅動學習”專案,驚呆(キ`゚Д゚´)!!

你們聽說過測試驅動學習嗎?

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

成功的執行一組單元測試,令人心情愉悅

Total: 19
  • AndyAO 2021-01-13 12:06:01
    在谷歌上搜尋"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 12:06:01
    斯坦福的 pintos 這門課就是這樣的。

    吳恩達的深度學習也是這樣的,jupyter notebook 。
  • no1xsyzy 2021-01-13 12:06:01
    NOIPer 不請自來
  • aheadlead 2021-01-13 12:06:01
    感謝樓主。有沒有對於 C 或 C++的 TDL 的例子?
  • Mutoo 2021-01-14 12:06:01
    OJ 上的題目本質就是測試驅動。得 pass 所有 case 才算完成。
    另外國外的 CS 課程很多老師都會在 makefile 裡面寫好 test,要求學生提交前能通過 test case 不然就不用提交了。這也算吧。
  • hitmanx 2021-01-14 12:06:01
    @crclz pintos 有公開課的視訊嗎?
  • AndyAO 2021-01-14 12:06:01
    @Mutoo #5

    謝謝你提供的資訊.

    寫程式碼來完成老師給定的測試,這明顯就是小學老師都在用的模式,先佈置作業,然後檢查作業.

    只不過程式設計這個作業比較容易用程式設計本身檢查.(也許小學生的作業現在已經可以用程式設計檢查了)

    我認為這根本就不是測試驅動學習.(當然也有一定的進步意義,起碼事先要檢查作業自動化)

    測試驅動學習這個名字是由測試驅動開發演變而來的,測試顯然是要自己寫的,而不是別人寫.

    學習的主動權掌握在自己的手裡.
  • yzbythesea 2021-01-14 12:06:01
    紙上談兵,花裡胡哨。
  • AndyAO 2021-01-14 12:06:01
    @Mutoo #5

    在老師出題這個場景下,我認為老師這樣出題是踐行了測試驅動學習:

    針對領域或者某幾個具體問題,讓學生去探究.

    探究的結論要用測試精確描述,便於閱讀檢查.

    這樣測試和程式碼,以及 README,都是學生自己寫的.

    當然這種作業是很高階的,檢查作業估計是不能自動化的.
  • IMRES 2021-01-14 12:06:01
    良好測試用例對開發者來說可讀性是很好的,我一般是結合 examples 和 tests 來熟悉一個新的工具。
  • killeder 2021-01-14 12:06:01
    應該是考試驅動學習吧
  • AndyAO 2021-01-14 12:06:01
    @Mutoo #5

    現在想起來,我認為那個是測試驅動學習的前奏,也算是測試驅動學習吧.

    因為在最初的時候有很多的基礎內容,老師先寫好的話,效率可能會更高.畢竟最初的那些內容都差不多.

    等到某個問題老師也不知道,或者是比較細節和個性化,老師不可能為所有的學生布置題目,那個時候學生再來寫.

    這樣就算完整的進行了測試驅動學習.
  • AndyAO 2021-01-14 12:06:01
    @IMRES #9 謝謝你的分享,原來我不是孤單的,哈哈
  • learningman 2021-01-14 12:06:01
    @no1xsyzy 現在不是 CSPER 了嗎(
  • sulinehk 2021-01-14 12:06:01
    Go 也有一個通過測試學習的專案:learn-go-with-tests
  • crclz 2021-01-14 12:06:01
    @hitmanx
    Stanford 的 CS140 ( PintOS )這門課的本質就是那 4 個實驗( Project )。這 4 個實驗的完成完全是可以只靠看 pintos 文件的來實現(個人親身經歷)。文件地址: https://web.stanford.edu/class/cs140/projects/pintos/pintos_1.html

    不過,如果沒有基礎的話,可以用學堂線上上面清華大學開的作業系統網課。(學堂線上搜尋“作業系統”,第一個就是了)。這門網課既有助於考試,又有助於理解作業系統,從而更容易地完成 pintos 的實驗。
  • msg7086 2021-01-14 12:06:01
    中學的時候經常考試驅動學習,考試的時候發現哪裡沒學會,再回來惡補。
  • no1xsyzy 2021-01-14 12:06:01
    @learningman 誒,暴露年齡了(
  • AndyAO 2021-01-14 12:06:01
    @aheadlead #4
    沒發現這樣的例子.可能是因為我沒有用心尋找吧,你可以先自己調研調研.

    只要有單元測試方法,那麼應該都能測試驅動學習.

    在某個語言學習的最初階段,應該是不能這麼做的,因為寫測試需要懂基本的語法,這是需要強調的.
Add a reply
For Commenting you need to Login. If you dont have a Account you need to Register.