如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2011年11月7日

Java程式審查清單(code review checklist)

譯者 : Fred F.M. Wang 日期 : 2011/11/14

以下是一些審查 Java程式碼需注意項目。以下清單有審查 Java程式碼要展開的活動列表。包含有11個不同類型的問題與審查的領域。譯者註 : 有許多也不限於Java程式,在多數語言都適用,有些部份也可以利用Code Review或inspection工具輔助檢查,有些則需人工檢查。 
1. 程式設計風格與樣式相關問題
1.1 有遵循專案計劃中指定的標準?
1.2 有提供適合的內含文件,也就是程式內的註解? 以提供較佳的可維護性。 
1.3 程式檔案開頭是否包含下面項目
  • 程式標頭 : 如程式名稱與描述
  • 應用系統名稱 
  • 依存關係 : 相關的程式,Tables等 
  • 限制 : 執行環境與條件 
  • 版權資訊 
  • 修改日誌
1.4 是否遵守有意義的命名慣例?命名是否正確反映程序或參數層級?命名是否正確定義全域,共用與外部的功能函式?譯者註 :以提高程式的可讀性。
1.5 程式碼是否有做合適的縮排? 譯者註 :以提高程式的可讀性。
1.6 是否呼叫一套共用的副程式庫,而不是複製程式碼到不同的程式中? 譯者註 :以提高程式的再用性,與可維護性。
1.7 有任何冗餘的程式碼? 譯者註 :應該撰寫乾淨的程式碼(Clean Code)。透過版本管理軟體保留舊版程式,而不要把舊程式碼mark成註解保留在程式中造成冗長且難以閱讀的程式。
2. 標籤和助譯碼相關問題
2.1 程式中有任何標籤(label)沒有被引用到?
2.2 是否使用有意義的助譯碼或巨集? (助譯碼通常用於設定畫面選單或其他操作的快速鍵)
2.3 助譯碼或巨集是否正確地使用。
3. 陣列相關的問題
3.1 所有的陣列索引值是否會落在限定範圍(bounds)內? 譯者註 :程式中應該做陣列索引值檢查,避免在執行中超過限定範圍(bounds),造成不可預期的錯誤。
3.2 是否正確地初始化所有陣列的索引?
4. 迴圈/分支相關的問題
4.1 所有分支條件是否正確?
4.2 迴圈是否可被終止? 譯者註 :除了極少數的情況,程式迴圈都應該可以被終止。
4.3 終止一個迴圈的條件是否正確?
4.4 程式中除法運算式前,是否有檢查除數為零的狀況?
4.5 放在迴圈內的敘述是否可以移到迴圈外? (譯者註 :避免效能問題)
5. 結構相關的問題
5.1 某些部分的程式碼,在程式各種執行的線程中,是否永遠不會被執行到?  譯者註 :不會被執行到的程式碼就是冗餘的程式碼,也有可能是程式的條件式設計錯誤。
5.2 是否使用了過多的IF敘述? 譯者註 :是否可以用Switch.. Case語法取代多重的IF敘述? 以提高程式的可讀性。
6. 功能相關的問題
6.1 程式中對匯入的資料是否有做正確性檢查?
6.2 呼叫程式碼(Caller)實際參數與被呼叫的副程式中的正規參數是否匹配?
6.3 所有變數是否都有被使用到? 所有輸出的變數是否都有指定值? 譯者註 :這種情況容易造成程式維護者的困擾,因此程式開發時就應該去除沒有被使用到的變數,以提高可維護性。
7. 資料庫相關的問題
7.1 是否對Table的query有使用索引? (譯者註 :Select * Where.. 的query中如果沒有對應的索引,將造成全表搜尋,影響執行效能)
7.2 新增/修改模式的畫面屬性是否正確的設定與重設?
7.3 每個SQL敘述後是否有做錯誤狀態的檢查?
7.4 在更新資料庫data record前是否有先進行data record的鎖定(lock)
7.5 運算式中下面兩個條件是否有檢查?
  • Rounding off (if required) 四捨五入(如果需要)
  • Possibility of division by zero 除以零的可能性
8. 效能相關的問題
8.1 是否滿足執行時間的需求? 要做效能測試!
8.2 是否有更有效率的寫法? 譯者註 :例如相同結果採不同SQL寫法效率差異很大,因此有些SQL最佳化工具用來改善SQL Code。
9. 可用性相關的問題
        程式處理需要花較長的時間,是否提供通知訊息(optional)? 譯者註 :例如提供進度列(progress bar),讓使用者需要花多少時間? 還有多久才會執行完? 避免讓使用者有系統當掉的不安感。
10. 檔案相關的問題
     檔案處理是否有做下面的檢查?
  • 開啟檔案時先檢查檔案是否是空的?  
  • 檢查是否產生輸出入的錯誤?
11. 錯誤處理的問題
11.1 使用者對錯誤訊息容易理解嗎? 錯誤訊息合適嗎?
11.2 所有的錯誤有被捕捉與控制嗎? (譯者註 :避免當掉的情況)
參考原文 : http://technotes.towardsjob.com/java/code-review-checklist-for-java/




沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)