1. 程式人生 > >讓眼睛去程式碼裡旅行(程式碼檢視的一些心得)

讓眼睛去程式碼裡旅行(程式碼檢視的一些心得)

一、前言

我一直相信,程式碼檢視可以幫助開發人員,驗證軟體的所有功能,發現程式碼中的所有Bug。

我也一直認為,不斷進行程式碼檢視,是開發人員提升軟體質量,提高工作效率最好的方法。

程式碼檢視就是LLT測試,程式碼檢視也是黑盒測試,當你的眼睛掃過程式碼行的同時,你的腦子在想著軟體功能,這就是高效、活生生的功能測試。

另外,程式碼檢視還能完成功能測試不能完成的事情:提高程式碼簡潔性、可讀性、低耦合、可維護性等。

下面是我自己經常用到的一些程式碼檢視方法和心得,總結出來供大家參考。

二、檢視方法

方法一、按照“程式碼行從上往下順序”進行檢視

這可能是大家最習慣用的一種方法,檢視起來行雲流水。這種方法雖然簡單,但是最重要,這種方法可以提高程式碼簡潔性、可讀性、低耦合、可維護性,我覺得這是好程式碼最根本的特徵。

雖然方法簡單,為了達到不簡單的檢視效果,我覺得這種方法要重點檢視如下方面的問題:

  1. 程式碼簡潔性差。比如:函式超大;
  2. 程式碼可讀性差。比如:函式邏輯複雜,圈複雜度高;函式中空行使用混亂,導致很難看出程式碼層次劃分;註釋記錄少、或者多但是混亂。
  3. 程式碼可維護性差。比如:關鍵日誌記錄少、或者記錄了很多無用的日誌;
  4. 程式碼整體的功能邏輯。

方法二、按照“測試場景執行的程式碼順序”進行檢視

這種方法是程式碼檢視可以媲美功能測試的“利器”。無需費盡“九牛二虎之力”搭建測試環境,無需花大量時間寫LLT用例。你只要對照自己設計的功能測試用例,或者直接拿來測試人員設計的用例,就可以用你的眼睛和大腦開始“測試”了。

這種方法的優點是:發現各種功能場景的邏輯問題,尤其是異常場景的邏輯問題。

方法三、重點專項檢視

當程式語言語法的“靈活性”遇到我們長時間編碼已經“遲鈍”的大腦,問題就來了… (挖掘機技術哪裡強,中國山東找藍翔 )

邏輯跳轉的程式碼,雖然靈活高效,但也容易引入一些隱藏很深的Bug。在現在各種靜態檢查工具橫行的年代,我覺得還需要進行下面這些重點專項檢視:

  1. 記憶體申請、釋放的場景;比如:異常分支的提前退出,容易導致記憶體洩露,野指標。

  2. 在for/while 迴圈中使用 break/continue/return 的地方,容易出現死迴圈,記憶體訪問越界,功能邏輯錯誤的問題。

  3. 不帶else的if判斷語句,並且其中沒有跳轉, 後面隱含的else分支可能會導致問題。

     int i = 0;
     if (xxx)
     {
         i = 1;
     }
     // 這裡隱藏了一個邏輯 i = 0; 可能這不是程式碼的本意
    

最後,希望這些心得能幫得上一些忙,希望各路人都能重視程式碼檢視,多花時間在程式碼檢視上。