2011-04-26 43 views
1

作爲我在C++講義的一部分,學生將不得不解決任務。每個解決方案應該使用相同的功能和相同的參數(函數名稱,返回值,傳遞參數)來實現相同的功能。只有裏面的代碼是不同的。多個學生編程解決方案的有效測試

所以我在想一種方法來以有效的方式測試所有解決方案(大約30)。也許最好的方法是編寫一個單元測試以及一個shell腳本(或類似的東西),用單元測試編譯每個解決方案一次並運行它。

但也許有一個不同的,更好的解決方案來解決這個問題。

回答

1

單元測試是最有效的自動化測試類型之一的原因是因爲投資回報相對較小(與其他類型的測試相比),因此,編寫驗證套件試驗。

你甚至可以爲學生提供測試套件而不是用散文寫成的規範。這可以向他們介紹測試驅動開發的概念(儘管我們通常傾向於迭代地編寫測試,而不是批量編寫)。

+0

給學生提供測試套件是一個有趣的觀點。也許我會這樣做,它可以節省很多工作(儘管我不介意爲我的學生做很多工作,但它必須有效)。 – 2011-04-26 06:04:13

0

也許我錯過了一些顯而易見的東西,但僅僅用邊界測試參數值多次運行代碼就行了?

+0

重點是,我有大約30個解決方案,我認爲它會花費太多時間來手動編譯它們自己的每一個。或者,也許**我**失去了一些東西? – 2011-04-26 06:01:52

+0

@macs:你爲什麼要手工編譯?我假設每個學生的作品都是通過電子郵件或網站提交的。只需將其內容複製並粘貼到測試框架中,編譯並運行即可。 – wallyk 2011-04-26 06:04:20

+0

我想按照原樣採取解決方案,在我看來,有時候複製和粘貼容易出錯。因此,我想使用一個腳本,收集所有解決方案(來自不同的文件夾),並根據測試框架編譯它們中的每一個。但我認爲可能有更聰明的解決方案,這就是爲什麼我問。 – 2011-04-26 06:07:37

1

是的,單元測試是大多數情況下最明顯的解決方案。

編譯器警告和靜態分析也很有用。

給定一組參數的計劃執行時間是另一個相當自動化的選擇 - 取決於您有興趣評估的內容。

創建具有良好診斷功能的基類(如果您願意,可以將實施換爲評估)是另一種選擇。你也可以提供他們必須使用的接口,並保存兩個實現。然後照常使用診斷實施來鍛鍊程序。這取決於你在找什麼。

+1

除了基類/接口的東西。並非所有的程序都是通過類來表達的(實際上,算法是函數,而不是類)。 – 2011-04-26 06:34:01

+0

保護類/接口:它真的取決於OP在尋找什麼。例如:如果有一個好的多線程接口可用,並且需要它們使用它,那麼測試可以分析創建了多少個線程,活動線程的最大數目等等。如果它是一個集合類型或分配器,則可能會生成複製和/或分配統計量。再次,這取決於什麼mac正在尋找,在什麼細節。從這個角度來看,有些事情更容易測試。因爲他們只需要實現一個接口......它可能不是一個不錯的選擇 – justin 2011-04-26 07:05:06

+0

我從來沒有說過它本身是一個不好的選擇。只是它並不總是適合手頭的任務。 – 2011-04-26 07:10:00