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