華為云計算 云知識 代碼檢查入門
代碼檢查入門

華為云CodeArts Check 幫助用戶高效守護軟件質(zhì)量和安全。

【摘要】 代碼檢查中,提到的編程規(guī)范,規(guī)則集,規(guī)則,規(guī)則用例(場景、誤報、檢出)分別代表什么意思呢?

在SAST靜態(tài)檢查領(lǐng)域,代碼檢查服務(wù)可以幫助開發(fā)者發(fā)現(xiàn)和修復(fù)代碼中的風(fēng)格、質(zhì)量和安全等方面的問題。那么在代碼檢查服務(wù)中,提到的編程規(guī)范,規(guī)則集,規(guī)則,規(guī)則用例(場景、誤報、檢出)分別代表什么意思呢?

編程規(guī)范

在SAST靜態(tài)代碼檢查領(lǐng)域,編程規(guī)范是一套在組織層面關(guān)于代碼編寫的標準或準則。它可以幫助開發(fā)者遵循一致的風(fēng)格和習(xí)慣,提高代碼的可讀性、可維護性、可移植性、安全性與可靠性,目的在于指導(dǎo)公司、部門、項目組編寫出Clean Code及高質(zhì)量的軟件。

編程規(guī)范通常會參考業(yè)界標準及實踐,并包含命名、縮進、注釋、格式等方面的內(nèi)容,業(yè)界內(nèi)比較有名的有華為編程規(guī)范。

編程規(guī)范內(nèi)的規(guī)則通常被用于在特定場景下使用,檢測出代碼中的漏洞和缺陷。但是這些規(guī)則并非就是萬能完美的,在一些場景下,可能會導(dǎo)致誤報率、漏報率高的情況發(fā)生。如果在日常使用中發(fā)現(xiàn)某些規(guī)則不適合或者無法遵循,經(jīng)過團隊共同研討決策,是可以對規(guī)范中的規(guī)則進行改進甚至下線處理的。

注意,團隊內(nèi)在使用編程規(guī)范的時候,是希望團隊成員都具有相應(yīng)語言的基礎(chǔ)編程能力,而不是說希望通過編程規(guī)范來學(xué)習(xí)某個具體的語言。

規(guī)則集

規(guī)則集則是一組用于做代碼檢查的規(guī)則組成的集合。

一般根據(jù)不同的檢查目標和需求,規(guī)則集也有相應(yīng)的分類,比如對安全類、安卓應(yīng)用、編程風(fēng)格這些類別進行檢查的時候,規(guī)則集內(nèi)的規(guī)則也會有不同的選擇。

規(guī)則集可以應(yīng)用在不同的范圍上,比如:公司最小規(guī)則集可以在全公司范圍內(nèi)使用,產(chǎn)品線規(guī)則集則可以在最小規(guī)則集的基礎(chǔ)上再額外加些產(chǎn)品線特有的規(guī)則進去,構(gòu)建一個范圍更大的產(chǎn)品線級規(guī)則集。

規(guī)則集也可以在不同的階段使用。比如針對本地IDE編碼階段,可以構(gòu)建一個IDE插件檢查規(guī)則集在本地實時進行檢查。在提交增量代碼階段,使用一個更大范圍的規(guī)則集對增量代碼進行 自動化 檢查。在要進行版本級掃描階段,與流水線協(xié)同提供全面、深度的全量檢查。

華為云CodeArts Check的系統(tǒng)推薦規(guī)則集

規(guī)則

規(guī)則是一種用來指導(dǎo)和約束代碼檢查的標準和準則。它可以根據(jù)不同的編程語言、編碼規(guī)范、質(zhì)量要求等因素來制定。每個規(guī)則可以說都定義了一個缺陷模式,當該模式在目標代碼中匹配成功后會生成一個檢查問題。

每個規(guī)則都會包含一個ID和一個操作。ID可以說是規(guī)則唯一的標識符,用于區(qū)分不同的規(guī)則;操作則用于指定改規(guī)則在代碼檢查期間應(yīng)該執(zhí)行的動作,比如告警等。

規(guī)則一般會包含描述信息(包含編寫這條規(guī)則的背景等)、正確的代碼示例、錯誤的代碼示例、修復(fù)建議、參考的規(guī)范等信息。

華為云CodeArts Check的規(guī)則信息

規(guī)則用例

規(guī)則用例是一種用于驗證代碼檢查規(guī)則是否按照預(yù)期正確工作的測試用例。一般它會包括一個或多個測試輸入(代碼片段),執(zhí)行條件以及預(yù)期的檢查結(jié)果(包括是否有問題,問題的類型,問題的位置等)。

規(guī)則用例可以說是檢驗和驗證規(guī)則的一種手段,可以幫助開發(fā)人員和測試人員評估代碼檢查規(guī)則的有效性、準確性和覆蓋性。

而和規(guī)則用例配套的術(shù)語則有:場景,誤報,檢出等。

場 景

場景是一種描述代碼檢查規(guī)則應(yīng)用的具體情況或背景的方法,它可以說是規(guī)則用例的集合(包含1個或多個規(guī)則用例)以及一些相關(guān)的信息(項目類型、編程語言、編碼規(guī)范等)的結(jié)合。場景可以比規(guī)則用例更全面的模擬代碼檢查規(guī)則的使用場景。

誤 報

誤報是指代碼檢查服務(wù)錯誤地報告了一個不存在的問題或一個錯誤的問題類型的狀況。誤報一般是由于代碼檢查規(guī)則的設(shè)計缺陷、實現(xiàn)錯誤、使用場景不匹配或配置不當?shù)仍蛟斐傻?,會?dǎo)致開發(fā)人員和測試人員對代碼檢查服務(wù)的信任度降低。

檢 出

檢出則和誤報完全相反,是個好的現(xiàn)象,是指代碼檢查服務(wù)正確地報告了一個確實存在的問題及正確的問題類型的狀況。檢出高可以幫助開發(fā)人員預(yù)防和修復(fù)潛在的缺陷。

參考文獻

1.https://ilcc.gitbooks.io/wiki/content/StyleGuide/Huawei-C/index.html

2.https://learnku.com/go/wikis/38426

3.https://en.wikipedia.org/wiki/Coding_conventions