簡體   English   中英

如何根據提交的解決方案評估代碼是否正確

[英]How to evaluate if a code is correct against a submitted solution

我正在搜索有關如何比較兩個代碼並確定某人提交的代碼是否正確的信息(基於之前定義的解決方案代碼)。

我可以比較輸出,但是許多代碼可能具有相同的輸出。 然后我認為我必須以某種方式比較代碼並給出相似度的百分比。

有人可以幫助我嗎?

(語言代碼為C,但我認為這並不重要)

我的一些老師使用了在線自動程序評分系統,例如http://web-cat.org/

在分配中,他們將指定您必須提供的公共api,然后他們將針對您的函數編寫測試,就像單元測試一樣。 他們會故意選擇利用邊界條件和其他學生不願考慮的東西進行測試的測試,並且只是使用許多不同的輸入來調用代碼,以使代碼失敗。

有時他們會硬編碼期望值,有時他們會允許范圍內的值,而有時他們只是自己進行分配並進行分配,因此您自己的代碼必須匹配其代碼產生的結果。

顯然,並非所有程序都可以通過這種方式有效地評分。 這也很容易出錯,有時甚至是老師犯了一個錯誤並溢出了一個int或其他東西,那么正確的學生提交的內容將與老師的錯誤結果不符。 但是,系統並不一定需要完美無缺才能有用。 但是我認為這提出了一個重要的觀點,即通過閱讀代碼進行手動評分也不一定會揭示所有錯誤。

另一種可能性是復制提交的代碼,去除所有空白並搜索為使代碼正確而必須存在的子字符串和/或為使代碼正確而必須不存在的子字符串。 麻煩的地方可能是設置為允許一些更棘手的要求,例如[(a或c),((a或b)和c),((a或b)和c)],其中變量是關於與變量相關的子字符串是否存在於代碼中的布爾檢查結果。

例如,[(“ printf”),(“ for”),(不是“ 1,2,3,4,5,6,7,9,10”)],將要求“ printf”和“ for”是代碼中的子字符串,而“ 1,2,3,4,5,6,7,9,10”我不熟悉C,所以我假設這里需要“ printf”能夠在不涉及輸出流的情況下打印任何內容,這可以由[[“ printf”或“ out”),(“ for”),(不是“ 1,2,3,4,5,6 ,7,9,10“)],其中“ out”是使用輸出流所需的C代碼的一部分。

可能有可能根據“正確的”代碼自動找到所需的子字符串,但是正如其他人提到的那樣,還有其他處理方法。 這就是為什么可能需要對“解決方案”進行硬編碼的原因。 即使這樣,您很有可能會漏掉必需的子字符串,並且會被標記為錯誤,但這可能是您在一定程度上獲得成功的唯一方法。

正則表達式在這里可能很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM