個人作業-week2
阿新 • • 發佈:2017-10-04
定義 標準 求解 表示 程序 傳遞 內存 條件 lib
一、代碼復審CheckList
1.概要部分
- 代碼能符合需求和規格說明麽?
- 符合。
- 代碼設計是否有周全的考慮?
- 能夠正確生成和求解數獨。
- 代碼可讀性如何?
- 可讀性一般,聲明函數的時候都有註釋說明功能,但單個函數有的較長。
- 代碼容易維護麽?
- 可能比較難,對於需求的改動可能會牽扯到比較多的函數的改動。
- 代碼的每一行都執行並檢查過了嗎?
- 是的。
2.設計規範部分
- 設計是否遵從一致的設計模式或項目中常用的模式?
- 沒用設計模式。
- 有沒有硬編碼或字符串/數字的存在?
- 有的,許多地方都有數字出現,如9,200,70等。
- 代碼有沒有以來某一平臺,是否會影響將來的移植?
- 生成的exe文件,應該比較多的平臺都能用。
- 開發者新寫的代碼能否用已有的Library/SDK/Framework中的功能實現?在本項目中是否存在類似的功能可以調用而不用全部重新實現?
- 沒有。
- 有沒有無用的代碼可以清除?(很多人想保留盡可能多的代碼,因為以後可能會用上,這樣導致程序文件中有很多註釋掉的代碼,這些代碼都可以刪除,因為源代碼控制已經保存了原來的老代碼。)
- 沒有。
3.代碼規範部分
- 修改的部分符合代碼標準和風格麽(詳細條文略)?
- 修改的部分代碼標準風格一致。
4.具體代碼部分
- 有沒有對錯誤進行處理?對於調用的外部函數,是否檢查了返回值或處理了異常?
- 對錯誤信息做了處理(inputcheck),並檢查了返回值。
- 參數傳遞有無錯誤,字符串的長度是字節的長度還是字符(可能是單/雙字節)的長度,是以0開始計數還是以1開始計數?
- 沒有錯誤,字符串長度是字節的長度,從0開始。
- 邊界條件是如何處理的?Switch語句的Default是如何處理的?循環有沒有可能出現死循環?
- 用if、else處理,但有的地方沒有else而是直接返回,沒有死循環。
- 有沒有使用斷言(Assert)來保證我們認為不變的條件真的滿足?
- 沒用。
- 對資源的利用,是在哪裏申請,在哪裏釋放的?有沒有可能導致資源泄露(內存、文件、各種GUI資源、數據庫訪問的連接,等等)?有沒有可能優化?
- 有申請全局變量char的數組,在程序運行完後釋放掉;沒有資源泄露,文件都有關閉。
- 數據結構中是否有無用的元素?
- 沒有。
5.效能
- 代碼的效能如何?最壞的情況是怎樣的?
- -c 1000000用了9.75秒;-s 有點慢。
- 代碼中,特別是循環中是否有明顯可優化的部分(C++中反復創建類,C#中string的操作是否能用StringBuilder 來優化)?
- 把手動輸入數獨種子和取4個數互換可以寫成代碼自動生成。
- 對於系統和網絡調用是否會超時?如何處理?
- 沒有調用。
6.可讀性
- 代碼可讀性如何?有沒有足夠的註釋?
7.可測試性
- 代碼是否需要更新或創建新的單元測試?
- 需要創建單元測試
- 還可以有針對特定領域開發(如數據庫、網頁、多線程等)的核查表。
- 沒有。
附上Github comment
- https://github.com/easylliu/gitlearning
二、設計一個代碼規範
請根據你個人項目使用的語言,嘗試使用其中的一款工具,回答以下問題:
- 工具提供的代碼規範和你個人的代碼風格有什麽不同?
- tab為4個空格。
- =等符號左右都有空格。
- for()中分號後面有一個空格。
- 我用的c#,感覺差不多。
-
工具提供的代碼規範裏有哪些部分是你之前沒有想到的?
- tab為4個空格
- 為什麽要這樣規範?這樣規範有意義嗎?
- 提高代碼的可維護和可讀性,便於修改。
- 美觀
- 有助於團隊統一風格後審查代碼。
結對編程時使用的代碼規範
- 縮進:4個空格
- 行寬:100字符
- 在復雜的條件表達式中,用括號清楚地表示邏輯優先級。
- 斷行都用{}並單例一行
- 可以將多個相同的類型的變量定義在一行。
- 命名:匈牙利命名法。
- 函數名第一個字母大寫,變量都小寫,宏定義都大寫。
- 註釋只用ASCII字符,不用中文或特殊字符,函數有寫在上一行的註釋說明。
- 不用goto
個人作業-week2