2011-03-02 92 views
0

好吧開始虐待告訴你我要做什麼。掛鉤編譯器/鉤上一個方法的輸出(C# - C++)

我必須製作一個程序,以便學生可以從練習中上傳一些C++代碼。這個上傳的代碼需要與該練習中的「最佳代碼」進行比較。從這些比較中,如果學生上傳好的或不好的代碼,服務器會回覆一些反饋。 EG:練習是從1到10製作一個數組列表,因此學生可以上傳他的代碼。然後服務器將其與其他一些代碼進行比較並給出反饋。

這就是easyer所說的那樣,因爲它不能只是一個文件比較器,因爲用戶可以編寫不同的變量。這就是爲什麼我要使用外部編譯器來獲得一些輸出,並將此輸出與「最佳代碼」的輸出進行比較。或者更詳細地在編譯器中獲取鉤子,以便我可以檢查每個方法和每個變量。

或其他任何想法我可以檢查這個或比較? 或者是否已經存在一個程序?

非常感謝, 邁克爾

+2

玩得開心。你可能沒有意識到*你有多麼正確*你說這是「說起來容易做起來難」。無論如何,看看Clang--一個C/C++/ObjC編譯器,明確地將其設計爲可在其他項目中作爲庫進行破解和重用。 – delnan

+0

您還必須考慮到BigO符號! – Nocturnal

+0

練習有多簡單?如果它不止一兩行,只需將它與名義上最好的示例進行比較就沒有用處。嘗試將其自動化,很多學生會出現並溢出辦公時間,顯示被列爲不良的良好解決方案。堅持下去,教授會在學生中得到一個當之無愧的代表,現在這些糟糕的代表經常出版給大家看。 –

回答

0

(如ejudge,它被用作競賽系統)有跡象表明,評估整個程序的輸出系統,並且,在我看來,它更容易使用它們,因爲指定程序代碼的條件本身並不是一項簡單的任務(如果你的學生正在編寫非平凡的程序)。 您可以使用像ACSL這樣的正式規範語言來設置輸入和輸出條件,並證明程序能正常工作。

0

通過測試某些自動化測試(如邊界測試套件(或甚至是一個突變測試,如果您希望事物變得令人興奮))的行爲來評估代碼可能更實用,然後查找奇怪的實現或有趣的體系結構會查看代碼度量,如函數數量,代碼行數,編譯大小等。

這種方法可擴展性更強,並且有很多免費工具,特別是對於易於設置自動化測試系統的C++和java。

比較代碼來確定正確性不一定是正確的方法,取決於它是如何完成的,並且將很難放大。