1. 程式人生 > >個人作業-week2

個人作業-week2

定義 標準 求解 表示 程序 傳遞 內存 條件 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