如何檢查代碼質量?靜態分析可以檢測到哪些錯誤?
正如任何程序員和質量保證測試人員都會告訴你的那樣,靜態分析是工作流的一個關鍵部分。正如疫苗需要多次試驗一樣,任何項目都需要多方面的代碼質量分析。
為此,Parasoft提供靜態分析工具來幫助自動化這個過程。這也增強了最佳實踐,使其更加敏捷地響應必要的變更和更新。但是對靜態分析、它的工具和最佳實踐有一個基本的理解是關鍵的基礎知識。
什么是靜態代碼分析?
簡單來說,靜態代碼分析的過程就是識別源代碼中的缺陷和錯誤。而分析可以自動化,代碼審查通常是代表開發人員和質量保證/質量控制測試人員的共同努力。
但是靜態分析允許更直接的補救,并且是開發過程的組成部分。不管行業、功能或語言如何,靜態分析仍然是任何開發工作流的基礎部分。
執行靜態分析需要一組簡單的步驟:
- 首先,當然需要有源代碼來測試它的質量。
- 接下來,利用靜態分析工具,運行靜態代碼分析器。
- 查看不符合規定規則集的標記部分。這可能包括假陽性甚至預期偏差。
- 程序員首先解決關鍵錯誤,然后解決次要問題。
- 進入測試階段。
何時執行靜態分析的一般最佳實踐是在代碼審查之前和代碼編寫之后。在這個階段審核源代碼可以更快地解決錯誤,從而減少浪費的時間。
靜態代碼分析可以檢測到哪些錯誤?
每條靜態分析規則或準則處理的是不同的問題。一些影響可靠性的問題可能是C語言的資源泄漏或C++的空指針異常。MISRA C:2012指令4.12的存在是為了防止使用動態內存,這可能導致存儲外的運行時間故障,這是不可取的。
該準則規定:"不得使用'calloc'、'malloc'、'realloc'、'aligned_alloc'和'free'這些標識符,不得展開具有這些名稱之一的宏。" 因此,下面的代碼將產生違規。
int* p1 = (int*)malloc(10); /* Violation */ free(p1); /* Violation */
推薦的解決方案是預先分配一個內存塊,并在需要時通過你自己定義的 "malloc "和 "free "等價物來管理它。同樣,在C++中,常見的解決方案是重載 "new "和 "delete "操作符。
軟件的意圖、語言和平臺都會影響靜態代碼分析所能發現的錯誤種類。
靜態分析最佳實踐
在進入靜態代碼分析最佳實踐之前,有幾個誤區需要消除。例如,靜態分析儀不是一次性產品,動態分析也不比靜態分析好或差。但是總的來說,當涉及到代碼質量的靜態分析時,開發人員應該采用具體的最佳實踐以及新興的最佳實踐。
- 確定問題的范圍。
- 使代碼對其他開發人員可讀。
- 編寫代碼時要考慮到可重用性。
- 如果應用程序將來需要新功能,請保持可擴展性。
- 開發使用最少資源但仍能快速執行的代碼。
- 利用動態和靜態分析。
在編寫代碼時考慮到所有這些因素,可以確保總體上減少錯誤。但是與靜態代碼分析相結合,它進一步簡化了錯誤識別和QA/QC過程。
如何選擇靜態代碼分析工具
Parasoft的軟件測試自動化工具套件適用于不同的工作流程和團隊組成。當涉及到靜態代碼分析時,這也是真實的。這樣做可以加快開發周期,減少缺陷率,并提供持續改進。識別哪種工具最適合你的需要,只需從源代碼的基礎語言開始。
Parasoft不僅提供C/C++解決方案,而且Parasoft還支持Jtest的Java和dotTEST的.NET語言。如果你能加快進程并獲得更好的結果,為什么還要停留在做更多的工作?