美国伦理〈欲女春潮〉|美国伦理〈欲奴3〉|美国伦理巜交换做爰|宝贝腿开大点我添添你下边美国|美国色情巜春药2|美国A片巜禁忌5

鑒源實驗室

Jianyuan Lab

軟件代碼編碼規(guī)則靜態(tài)檢測

發(fā)布時間:2024-01-08 作者:上海工業(yè)控制安全創(chuàng)新科技有限公司 點擊次數(shù):

作者 | 李偉 上??匕舶踩珳y評部總監(jiān)
來源 | 鑒源實驗室
社群 | 添加微信號“TICPShanghai”加入“上??匕?1fusa安全社區(qū)”

前幾篇我們介紹了代碼的不同類型結構覆蓋率測試,屬于代碼的動態(tài)測試,本章我們介紹代碼編碼規(guī)則的靜態(tài)測試。

相關閱讀推薦

點擊鏈接閱讀原文

1.軟件代碼結構化覆蓋測試-語句覆蓋



2.軟件代碼結構化覆蓋測試-分支覆蓋



3.軟件代碼結構化覆蓋測試-MC/DC覆蓋



4.SmartRocket TestGrid嵌入式軟件自動化測試平臺功能概覽





01

關于代碼靜態(tài)檢測


靜態(tài)代碼測試通常按照既定的編碼規(guī)則,檢查被測試代碼的語法、語義、結構等,是否符合編碼規(guī)則的要求。代碼的靜態(tài)測試和動態(tài)測試的區(qū)別主要有以下幾點:

1代碼靜態(tài)測試不會運行代碼,代碼動態(tài)測試會運行代碼;

2靜態(tài)測試會依據相應語言的編碼規(guī)則,動態(tài)測試跟編碼規(guī)則沒有直接關系;

3靜態(tài)測試和動態(tài)測試都可以通過人工結合工具輔助的方式執(zhí)行,工具在靜態(tài)編碼規(guī)則檢測效率和工具自動執(zhí)行完成率上,普遍高于動態(tài)的結構覆蓋測試;

4. 代碼靜態(tài)規(guī)則檢測的部分準則內容在編譯器編譯代碼時會執(zhí)行類似的檢查,但是編譯器不會在編譯時執(zhí)行代碼的動態(tài)結構覆蓋檢測。


02

代碼規(guī)則檢測的編碼標準


不同的編程語言有不同的編碼標準,我們以C語言為例,C代碼的編碼標準廣為人知的有Misra-C、CERT-C、EADS-C、BARR-C等,我國常見C編碼標準有GJB 5369、GJB 8114等。這其中應用最廣泛的可能就是Misra-C了,有很多文章專門對其進行介紹,我們不做過多說明。同樣C++和JAVA也有對應的國際組織或行業(yè)小組編制了相應的編碼標準規(guī)范。


03

國軍標編碼規(guī)范的舉例說明


本章我們使用GJB 8114標準列舉其中的一些編碼準則,讓大家有所認識。該標準的規(guī)則大體可以分為兩類,一類是強制準則,還有一類是建議推薦準則。

3.1 強制準則舉例

[GJB8114-2013] R-1-1-1 禁止通過宏定義改變關鍵字和基本類型含義。

描述:禁止通過宏定義改變關鍵字和基本類型含義。

正確示例:

圖片

錯誤示例:

圖片

3.2 建議準則舉例

[GJB8114-2013] A-2-9-2 建議除常數(shù)指針外,const說明均在類型說明的最外層。

描述:建議除常數(shù)指針外,const說明均在類型說明的最外層。

示例:

圖片

GJB8114定義的C代碼準則從13個方面逐個進行約束,準則的條目較多,工作中涉及到政府、國企的高安全要求項目時該規(guī)范的使用率比較高,有需要時可以直接參考標準文檔。


04

代碼靜態(tài)規(guī)則檢測的過程


我們對一個工程的代碼或者工程中幾個代碼文件進行靜態(tài)規(guī)則檢測時,必須提前做一些準備工作,來保證測試的順利執(zhí)行。

首先要確定代碼編寫的語言,C、C++或者其他語言,要確認工程使用的IDE以及編譯器,最好能確定工程代碼的頭文件或者路徑,以及宏定義。然后我們需要確定進行代碼靜態(tài)檢測的標準依據,是Misra C還是GJB 8114,以及標準的版本如Misra-C 2004。

完成上述的準備工作后我們就可以選擇使用的測試工具,是否已購買相關工具,還是使用開源產品,目前可以支持代碼靜態(tài)規(guī)則檢測的開源工具還是比較多的,其中也有做的很好的產品,考慮到項目客戶方對檢測結果的認可程度,建議使用已通過相關認證的商用軟件工具進行測試。

4.1 工具測試舉例

我們以TestGrid工具SmartRocket TestGrid嵌入式軟件自動化測試平臺)為例展示一個開源C代碼項目基于Micra-C 2004準則的靜態(tài)代碼測試。首先我們建立一個規(guī)則模板,并將Micra-C 2004標準應用到該模板,如下圖:

圖片


從圖中我們也可以得知,規(guī)則的模板是允許自定義組合的,意味著可以從已知的標準規(guī)則集中自由選取相關條目,根據需要組合成新的規(guī)則集合用于測試活動。

接下來我們將收集的工程相關信息填入測試配置,填入信息必須要準確,如下圖所示:

圖片

配置完成后執(zhí)行規(guī)則檢查,執(zhí)行完成結果如下圖顯示:

圖片

我們以被測文件為基準,查看該文件中的代碼違反了哪些編碼準則,選中某準則會跳轉到該文件中所有違反該準則的界面,如下圖所示:

可以通過詳情查看違反編碼準則的詳細內容,開發(fā)人員可以根據說明有針對性地進行代碼改進。


05

測試小結


在執(zhí)行代碼的靜態(tài)規(guī)則檢測時我們有以下建議供大家參考:

1.使用工具執(zhí)行代碼的規(guī)則檢查可以大大提高測試工作的執(zhí)行效率。

2.工具設置規(guī)則執(zhí)行嚴格時容易誤報,執(zhí)行規(guī)則設置寬松時容易漏報,這是正?,F(xiàn)象。

3.代碼的規(guī)則檢測需要跟實際項目上需要使用的規(guī)則進行適當結合和調整匹配,切不可不顧實際直接使用Misra C等規(guī)則進行生搬硬套??蛻舴降捻椖啃枨筇岢雒鞔_要求時除外。

4.即使使用Misra C或者國軍標的相關標準,規(guī)則內的約束門限值也需要結合實際情況在項目內協(xié)商確定,如單個函數(shù)的建議和最大行數(shù),圈復雜度,if后一次判定參與條件的最大個數(shù)等等門限值設定。

參考文獻:

[1] GJB 8114-2013 《C/C++語言編程安全子集》 


閱讀原文

永康市| 昔阳县| 扶绥县| 平果县| 梁平县| 屯门区| 新民市| 平泉县| 台中县| 昌黎县| 石屏县| 正阳县| 二手房| 乐至县| 安远县| 民勤县| 盐津县| 新泰市| 城固县| 沙河市| 盐池县| 江源县| 苍溪县| 墨玉县| 专栏| 迭部县| 旅游| 利川市| 永兴县| 长沙县| 衡阳市| 瑞金市| 额尔古纳市| 遂宁市| 甘洛县| 清新县| 交城县| 丰顺县| 吉木乃县| 阆中市| 娄烦县|