我必須爲學生提供Java編程挑戰,我們必須提出一些技術標準來判斷他們的Java應用程序。 基於代碼和文檔,比較和判斷應用程序的最佳方法是什麼?應該使用什麼標準來判斷和比較Java應用程序?
編輯給有關的挑戰更多的細節: 學生們應該不斷提升自己選擇的基礎上的JavaME爲我們的設備(多功能-打印機)之一的應用。該應用程序將在設備上運行,並應使用我們的SDK/J提供的功能,並將通過市場營銷和支持(我的部門)進行評估。他們將在第一步使用模擬器,並且如果他們有資格參加決賽,將會提供真實設備。
我必須爲學生提供Java編程挑戰,我們必須提出一些技術標準來判斷他們的Java應用程序。 基於代碼和文檔,比較和判斷應用程序的最佳方法是什麼?應該使用什麼標準來判斷和比較Java應用程序?
編輯給有關的挑戰更多的細節: 學生們應該不斷提升自己選擇的基礎上的JavaME爲我們的設備(多功能-打印機)之一的應用。該應用程序將在設備上運行,並應使用我們的SDK/J提供的功能,並將通過市場營銷和支持(我的部門)進行評估。他們將在第一步使用模擬器,並且如果他們有資格參加決賽,將會提供真實設備。
如果挑戰有一個目標,如寫某種而成的遊戲程序,那麼顯然第一標準應該是如何的目標是通過審查程序來完成。第二個標準(當然對於學生項目)應該是代碼的可讀性和結構。有沒有複製/粘貼的證據?那麼爲什麼不是該部分變成一個函數/子程序/程序?
額外的信用點是使用特別新穎的方法(但如果他們是不明顯的,他們必須有足夠的作者的同行保持它記錄!),以提高效率或功能的代碼。
您可以在許多不同的方面判斷出來,我特別找:
使用方法,在需要的地方
學生不應該被複制和粘貼功能;他們應該知道何時創建一個方法,包含什麼。
數據結構的使用
我見過的人使用一個數組來存儲應該是什麼成員變量。例如,
foo[0] = 'icewolf';
foo[1] = '119'
icewolf是你的用戶名,119是你的聲譽得分。學生應改用
String username;
int reputation;
或類似的東西。
接口,抽象類,具體類
學生應瞭解什麼時候使用它。如果這是一個Web應用程序,並且他們發現自己實現的doPost方法與每個類中的doGet相同,那麼他們應該創建一個超類,doPost默認只調用doGet。
的代碼的可讀性
從編寫代碼來解釋每一個平凡的聲明勸阻學生。鼓勵學生記錄非平凡的陳述。
我會付的極大關注到他們的設計和完成。我個人會更多地指出一個應用程序,該應用程序的設計比設計更清晰,易於理解,而且遍佈各處。
其中很多取決於他們在研究什麼,以及您期望他們提供什麼。
如果他們正在研究成爲程序員,我會讓他們提出一套要求和一份設計文件,其中說明了選擇的方法來滿足這些要求。也讓他們提供一組測試代碼。
之後,
混搭根據自己的喜好
我認爲答案取決於什麼Java編程挑戰賽。
如果所有項目都試圖解決類似的問題,您是否可以自動化測試,並根據性能進行某種比較?
如果項目必須符合API,是否有一些自動化測試可以針對每個項目運行,誰通過了大多數勝利。
如果這是一個開放式的挑戰,那麼你應該能夠選擇最酷的一個。獲取所有放在網站上的項目,並查看哪些獲得最多的點擊....聽起來有點像沒有0898號碼的極客因素。
我想一個公平的,但耗時的測試會讓你坐和代碼審查項目。
無論是開放還是封閉的挑戰,都有一些工具可以針對代碼庫運行以測量代碼質量。例如JDepends,Clover(單元測試覆蓋)等,但這些都是非常主觀的。
您可以使用棉絨檢查器,如CheckStyle,PMD或FindBugs。創建一個你認爲他們的代碼應該匹配的配置文件,並查看你獲得了多少違規。
我認爲任何客觀的衡量標準都必須與一些主觀的衡量標準一致,正如許多其他海報所建議的。
Checkstyle不是一個選項,因爲每個應用程序都應在1小時內進行判斷,以保證對每個人都公平。但通常這是個好主意。 – FrankS 2008-09-17 17:54:17