讓眼睛去程式碼裡旅行(程式碼檢視的一些心得)
一、前言
我一直相信,程式碼檢視可以幫助開發人員,驗證軟體的所有功能,發現程式碼中的所有Bug。
我也一直認為,不斷進行程式碼檢視,是開發人員提升軟體質量,提高工作效率最好的方法。
程式碼檢視就是LLT測試,程式碼檢視也是黑盒測試,當你的眼睛掃過程式碼行的同時,你的腦子在想著軟體功能,這就是高效、活生生的功能測試。
另外,程式碼檢視還能完成功能測試不能完成的事情:提高程式碼簡潔性、可讀性、低耦合、可維護性等。
下面是我自己經常用到的一些程式碼檢視方法和心得,總結出來供大家參考。
二、檢視方法
方法一、按照“程式碼行從上往下順序”進行檢視
這可能是大家最習慣用的一種方法,檢視起來行雲流水。這種方法雖然簡單,但是最重要,這種方法可以提高程式碼簡潔性、可讀性、低耦合、可維護性,我覺得這是好程式碼最根本的特徵。
雖然方法簡單,為了達到不簡單的檢視效果,我覺得這種方法要重點檢視如下方面的問題:
- 程式碼簡潔性差。比如:函式超大;
- 程式碼可讀性差。比如:函式邏輯複雜,圈複雜度高;函式中空行使用混亂,導致很難看出程式碼層次劃分;註釋記錄少、或者多但是混亂。
- 程式碼可維護性差。比如:關鍵日誌記錄少、或者記錄了很多無用的日誌;
- 程式碼整體的功能邏輯。
方法二、按照“測試場景執行的程式碼順序”進行檢視
這種方法是程式碼檢視可以媲美功能測試的“利器”。無需費盡“九牛二虎之力”搭建測試環境,無需花大量時間寫LLT用例。你只要對照自己設計的功能測試用例,或者直接拿來測試人員設計的用例,就可以用你的眼睛和大腦開始“測試”了。
這種方法的優點是:發現各種功能場景的邏輯問題,尤其是異常場景的邏輯問題。
方法三、重點專項檢視
當程式語言語法的“靈活性”遇到我們長時間編碼已經“遲鈍”的大腦,問題就來了… (挖掘機技術哪裡強,中國山東找藍翔 )
邏輯跳轉的程式碼,雖然靈活高效,但也容易引入一些隱藏很深的Bug。在現在各種靜態檢查工具橫行的年代,我覺得還需要進行下面這些重點專項檢視:
-
記憶體申請、釋放的場景;比如:異常分支的提前退出,容易導致記憶體洩露,野指標。
-
在for/while 迴圈中使用 break/continue/return 的地方,容易出現死迴圈,記憶體訪問越界,功能邏輯錯誤的問題。
-
不帶else的if判斷語句,並且其中沒有跳轉, 後面隱含的else分支可能會導致問題。
int i = 0; if (xxx) { i = 1; } // 這裡隱藏了一個邏輯 i = 0; 可能這不是程式碼的本意
最後,希望這些心得能幫得上一些忙,希望各路人都能重視程式碼檢視,多花時間在程式碼檢視上。