Pex4Fun:一個基於測試自動生成技術的 Web 端教育遊戲環境

Pex4Fun:一個基於測試自動生成技術的 Web 端教育遊戲環境

引用

N. Tillmann, J. de Halleux, T. Xie, and J. Bishop, ‘Pex4Fun: A web-based environment for educational gaming via automated test generation’, in 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE), Silicon Valley, CA, USA, Nov. 2013, pp. 730–733, doi: 10.1109/ASE.2013.6693144.

摘要

Pex4Fun(http://www.pex4fun.com/)是一個用於學習編程和軟件工程知識的 Web 端教育遊戲環境。

Pex4Fun 可以用於不同層次的編程和軟件工程知識的學習,支持從高中一直到研究生的課程。藉助 Pex4Fun, 學生可以在任何瀏覽器中編輯和提交代碼,Pex4Fun 在雲端對其進行執行以及分析。Pex4Fun 通過獨特的社交體驗將教師、課程作者和學生聯繫起來,實時跟蹤進度。值得注意的是,Pex4Fun 會發現某些特殊的輸入值,這些值可以幫助學生更好地瞭解其代碼的實際作用。真正的樂趣始於編碼決鬥,在該決鬥中,學生編寫 代碼來實現老師的要求。Pex4Fun 可以發現學生的代碼與要求之間的差異,並將這些差異反饋給學生。通過反饋指導學生修正代碼,從而匹配老師的要求。

這篇文章介紹瞭如何在學習中使用 Pex4Fun,例如進行編碼決鬥、探索功能課程中的課程資料、創建和教授課程、創建和發佈編碼決鬥以及學習更高級的知識點。

1 介紹

目前已有眾多編程教學環境,例如 Alice、Scratch 和 Greenfoot,這些環境為學生(尤其是初學者)學習編程知識提供了樂趣。這些編程環境能很好地幫助初學者學習編程概念。但是,這些環境通常針對除主流編程語言 之外的某些專用的編程語言。此外,這些環境主要針對編程的學習,而不關注於軟件工程的知識。

作為我們教育軟件工程研究工作的一部分,我們開發了一個用於編程和軟件工程知識學習的 Web 端教育遊戲環境(Pex4Fun)。它支持 C #、Visual Basic、F #等主流編程語言。,並且它可以在任何支持 Web 的設備上運行,甚至可以在智能手機上使用。它帶有一個自動提示的代碼編輯器,向用戶提供類似於 Microsoft Visual Studio 中的即時反饋。它是一個雲應用,數據存儲在雲端,這使得用戶可以在任何地方使用它。

通過遊戲,編程新手可以在 Pex4Fun 中掌握基本的編程概念,軟件工程的學習者可以在 Pex4Fun 中掌握高級編程概念和軟件工程的相關概念。即使是經驗豐富的軟件工程師,也可以在玩遊戲的同時提高編程技能。

通過定製現有的學習資料或創建新的學習資料,教師可以以課程的形式創建虛擬教室。分配給學生的遊戲練習可以自動評分,這極大減少了老師的工作負擔。

Pex4Fun 的基礎技術為動態符號執行,該技術由 Pex 工具進行實現,該工具是一個白盒測試工具。隨著時間的推移,Pex4Fun 正變得越來越受歡迎:自 2010 年 6 月發佈以來,截止到 2013 年 8 月 29 日用戶在

Pex4Fun 上嘗試解決遊戲的次數已超過 130 萬。

本文的其餘部分安排如下:第二部分介紹了有關 Pex4Fun 的背景知識。第三部分介紹了 Pex4Fun 的概述。第四節介紹了 Pex4Fun 的使用場景。第五節介紹了 Pex4Fun 的相關工作。第六節討論了 Pex4Fun 對社區的潛在影響。

2 背景知識

接下來,我們介紹 Pex4Fun 的基礎技術(動態符號執行)和支持工具(Pex)。

動態符號執行是符號執行的一種變體,通常在迭代過程中,增加系統的代碼覆蓋率。在每個迭代中,動態符號執行都會使用測試輸入執行被測程序,該輸入可以是第一次迭代中的默認輸入或是隨機生成的輸入,也可 以是先前迭代中生成的一個輸入。在執行被測程序期間,動態符號執行會並行執行符號執行,從而收集被執行 的分支語句中的謂詞的符號約束。已執行路徑的所有符號約束的集合稱為路徑條件。之後,動態符號執行會翻 轉執行路徑中的分支節點,從而構造新的路徑。該新路徑共享執行路徑的前綴節點,但隨後的節點採用其他的 分支路徑中的節點進行代替。

Pex 是基於動態符號執行的.NET 白盒測試自動生成工具。Pex 可以生成支持各種單元測試框架(例如 NUnit 和 MSTest)的測試輸入。Pex 曾被用於測試.NET 體系結構中的核心組件,並發現了許多存在的問題。在測試前,該組件已在五年內由 Microsoft 的大約 40 位測試人員進行了廣泛的測試,且該組件是其他庫的基礎,其他庫也已被成千上萬的開發人員和數百萬的最終用戶使用。Pex 現被用於各種大學的課堂教學以及 Microsoft 內部和 Microsoft 外部的各種教程中。

Pex4Fun:一個基於測試自動生成技術的 Web 端教育遊戲環境

Pex4Fun:一個基於測試自動生成技術的 Web 端教育遊戲環境

圖 1: Pex4Fun 網站的用戶界面

3 綜述

圖 2: 創建和進行編碼對決的流程

編碼決鬥是學習編程和軟件工程中各種概念的主要遊戲類型。圖 1 顯示了 Pex4Fun 網站的用戶界面的屏幕快照。圖 2 顯示了創建和進行編碼對決的流程。

例如,在某個編碼對決中,學生的任務是實現 Puzzle 方法,使得該 Puzzle 方法的行為與另一個不可見的 Puzzle 方法完全相同。如圖 2 所示,Puzzle 方法的具體表示為 public static int Puzzle(int x)。對於特定的輸入值,給學生的反饋信息顯示在屏幕底部的表格中(圖 1)。綠色圓圈開頭的行表示通過:對於相同的測試輸入,兩個 Puzzle 方法的返回值相同。表格中以紅色圓圈開頭的行表示失敗:對於相同的測試輸入,兩個

Puzzle 方法的返回值不同。在表格中,第二列表示測試輸入,第三列和第四列分別表示學生實現的方法的返回值和不可見方法的返回值。最後兩列提供了有關失敗測試的更多詳細信息。

學生可以通過以下五個主要步驟來解決簡單的編碼對決:(1)在 Pex4Fun 網站上單擊示例編碼對決,然後學生可以看到殘缺的方法實現。(2)點擊提交按鈕查看與不可見方法實現的不同點。(3)將學生實現方法的結 果與不可見方法實現的結果進行比較。(4)分析差異並更改代碼。(5)點擊提交按鈕再次重複此過程,直到學 生贏得編碼對決(即,Pex 在表中未報告任何失敗的測試)或無法取得進一步的進展。

4 使用場景

Pex4Fun(http://www.pex4fun.com/)將編程和軟件工程的知識帶入到了學生的 Web 瀏覽器中。學生可以編寫、編譯和運行代碼,學習編程概念,練習編程和軟件工程技能,並以交互的方式分析代碼的行為。以下方面 展示瞭如何使用 Pex4Fun 來學習編程和軟件工程知識。

  • 解決問題。:Pex4Fun 中使用的 Puzzle 方法可以接受參數並返回結果。當學生單擊提交按鈕後,底層的測試生成引擎 Pex 通過分析代碼自動生成參數。
  • 編碼決鬥:在編碼對決中,學生的任務是實現 Puzzle 方法,使其行為與另一個不可見的 Puzzle 方法完全相同。
  • 特色課程中的課程資料:當前的課程包括 C #(適用於 C #學習者)、參數化單元測試、.NET 中的代碼約定。
  • 創建和教授課程:Pex4Fun 可用於構建有趣的、引人入勝的、要求苛刻的課程,例如數學、算法、編程語言、軟件工程或一般性的解決問題的方法。教師可以使用 Wiki 編寫基於編碼決鬥的課程,並通過註冊鏈接邀請學生參加課程。一門課程可以有多位老師。任何用戶都可以通過註冊鏈接參與課程。當成為該課程的學生後,學生便可以瀏覽課程中的內容。
  • 創建和發佈編碼對決:用戶可以通過五個步驟來創建和發佈編碼對決。(1)登錄。(2)根據模板編寫 題目。模板規範了接受輸入併產生返回值的 Puzzle 方法。(3)創建編碼對決。(4)編輯可見的程序文本。(5)單擊“發佈”按鈕完成發佈。

5 相關工作

以前的研究主張使用“遊戲優先”的方法來介紹入門編程,強調課程作業和內容的吸引力。有了極具吸引力的 作業,學生就更有可能會因為興趣而學習,且遊戲中的視覺組件使學生更容易看到代碼中的錯誤。Pex4Fun 具有相似的動機,但是使用基於交互式遊戲的編碼對決吸引學生。

Maloney 等人在入門課程中圍繞循環和數組的編程概念設計了一個視覺遊戲。學生可以以交互和可視的方式更改程序中的循環和數組,遊戲提供即時的反饋,並將程序的執行情況展示給學生。他們的評估結果表明, 該遊戲可以幫助學生更好地理解編程的相關概念。

Spacco 等人開發了 Marmoset4,一個自動生成快照、提交併進行測試的系統。每當學生保存源文件時,系統就會將學生編程項目的快照捕獲,並存儲到集中的代碼存儲庫中。這種精細的修訂歷史為教師提供了學生實現代碼的過程。與此相似,每當學生單擊提交按鈕時,Pex4Fun 也將捕獲學生對方法實現的修訂快照。因此, 教師可以觀察學生的進行編程決鬥的整個過程。當學生提交項目後,Marmoset 會使用教師提前準備的一組單元測試來運行這些提交,以評估提交項目的正確性。然而,對於 Pex4Fun,教師無需提前準備測試用例來評估學生方法實現的正確性,因為評估工作將由 Pex 自動完成。此外,與 Marmoset 使用的測試不同,Pex 生成的測試不是固定的,Pex 會根據學生提交的方法實現生成不同的測試,從而實現為每個學生提供個性化的反饋結果。

6 對社區的潛在影響

Pex4Fun 正變得越來越流行:自 2010 年 6 月向公眾發佈以來,編程對決提交按鈕的點擊次數截至 2013 年 8

月 29 日已超過 130 萬(1,318,839)。Pex4Fun 提供了許多開放式的虛擬課程,包括學習資料以及用於增強學

生學習能力的遊戲(http://www.pex4fun.com/Page.aspx#learn/courses)。在 2011 年,一場編碼決鬥競賽曾在軟件工程會議(ICSE 2011)上舉行(http://www.pex4fun.com/icse2011)。

Pex4Fun 是一個極具影響力的示例。它證實了可以利用先進的軟件工程技術(例如自動測試生成)來支持 web 端的教育遊戲和自動評分。

致謝

本文由南京大學軟件學院 2020 級碩士張松濤轉述 感謝國家重點研發計劃(2018YFB1003900)和國家自然科學基金(61832009,61932012)支持!


分享到:


相關文章: