詳細(xì)介紹
C程序靜態(tài)分析工具Canalyze國(guó)產(chǎn)替代軟件
1.需求及背景
軟件測(cè)試與分析是發(fā)現(xiàn)軟件缺陷、提高軟件質(zhì)量的重要措施。動(dòng)態(tài)測(cè)試是保障軟質(zhì)量的傳統(tǒng)手段。不過(guò),它依賴于測(cè)試用例的質(zhì)量。如何設(shè)計(jì)一組比
較少的試用例,給出合適的輸入數(shù)據(jù),達(dá)到比較高的覆蓋率,是一個(gè)具有挑戰(zhàn)性的題。即使達(dá)到了高覆蓋率,也不一定能發(fā)現(xiàn)軟件中潛在的缺陷。
程態(tài)分析是近年來(lái)日益受到重視的一類技術(shù)。它通過(guò)掃描、分析源程序或中間碼,以檢軟件中各種難以發(fā)現(xiàn)的缺陷。它不需要運(yùn)行被測(cè)軟件,就能生一些錯(cuò)誤報(bào),幫助開(kāi)發(fā)人員、測(cè)試人員準(zhǔn)確地找出軟件中的bugs.
2.主要功與特點(diǎn)國(guó)產(chǎn)C程序靜態(tài)分析工具軟件
Canalyze是一個(gè)程序靜態(tài)分析工具輸入是C程序。該工具可以檢測(cè)輸入程序中的各種缺陷,包括:變量未義使用、空指針引用、內(nèi)存泄漏等錯(cuò) 誤類型。它對(duì)輸入程序分析后,生成有良好可讀的網(wǎng)頁(yè)形式的錯(cuò)誤報(bào)告。
該工具的主要特點(diǎn)包括:
?使用了一種新穎的內(nèi)模型和跨過(guò)程的函數(shù)方法來(lái)完成路徑敏感和上下文敏感的分析。
?使用了一種表達(dá)能力更強(qiáng)的跨過(guò)程符示形式——符號(hào)存取表達(dá)式,作為跨過(guò)程分析的基礎(chǔ)。
?利用一個(gè)約束求解工具對(duì)路徑條進(jìn)行求解,以比較高的路徑覆蓋率分析程序。
?可生成用戶友好的錯(cuò)誤報(bào)告,以便程序員定位、排除測(cè)到的缺陷。
作為靜態(tài)分析工具,Canalyze在使用時(shí),不需要運(yùn)行檢測(cè)程序。而且,其自動(dòng)化程度很高。它能在很短的時(shí)間內(nèi)分析幾十萬(wàn)行C代碼。
使用Canalyze可以在一臺(tái)普通的計(jì)算機(jī)或服務(wù)器上完成對(duì)項(xiàng)目代碼的掃描,檢測(cè)其中隱藏的缺陷。
常見(jiàn)的應(yīng)用場(chǎng)景包括:國(guó)產(chǎn)C程序靜態(tài)分析工具軟件
-開(kāi)發(fā)人員在完成開(kāi)發(fā)后,掃描文件或函數(shù)的變更代碼,從而盡快發(fā)現(xiàn) 新開(kāi)發(fā)代碼中可能包含的缺陷。
-代碼托管服務(wù)器在代碼更新之后,進(jìn)行針對(duì)工程的增量或全量掃描,從而 確保代碼更新之后質(zhì)量。
-測(cè)試人員和質(zhì)量工程人員在測(cè)試工程時(shí)掃描代碼,從而依據(jù)可能存在的缺 陷構(gòu)造額外的測(cè)試用例。
Canalyze提供了針對(duì)函數(shù)和文件的部分代碼掃描功能。部分掃描是指,它在一次掃描中僅讀取需要分析的部分代碼進(jìn)行分析。分析過(guò)程中,如果調(diào)用了
未被包含的函數(shù)時(shí)則自動(dòng)跳過(guò)該函數(shù)調(diào)用。通過(guò)部分代碼掃描,開(kāi)發(fā)人員可以快速完成針對(duì)新開(kāi)發(fā)的代碼和函數(shù)的快速掃描,從而簡(jiǎn)單地完成一次不**的
代碼檢測(cè),發(fā)現(xiàn)一些在變更代碼中引入的一些簡(jiǎn)單的代碼缺陷,進(jìn)而避免將包含潛在缺陷的代碼提交到代碼倉(cāng)庫(kù)中。
Canalyze提供了針對(duì)于工程的增量或全量掃描功能。開(kāi)發(fā)人員可以通過(guò)配置將Canze添加到持續(xù)集成系統(tǒng)中,從而實(shí)現(xiàn)在代碼提交之后自動(dòng)觸發(fā)一次
增量或量掃描。增量掃描功能是指Canalyze在一次掃描中讀取工程的全部代碼,但針對(duì)發(fā)生變更的函數(shù)或文件進(jìn)行掃描。而全量掃描則是指讀取工程的全部代,并對(duì)工程中所包含的全部代碼進(jìn)行掃描。相對(duì)于部分掃描,由于增量掃描Canalyze可以追蹤到工程代碼中更**的函數(shù)調(diào)用信息,并將調(diào)用的其他函數(shù)信息包含在析中,從而可以去除大部分誤報(bào),并檢出更多潛在的錯(cuò)誤。而對(duì)于全量描,增量掃描更加輕量級(jí),而且針對(duì)性也更強(qiáng),可以有 效避冗長(zhǎng)的掃描帶的時(shí)間開(kāi),以及減少與本次提交不相關(guān)的錯(cuò)誤報(bào)告的 產(chǎn)生。
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)一般增量掃描可以提供足夠的檢查強(qiáng)度。因此相對(duì)于部分掃描,增量掃描可更加**地檢測(cè)代碼中可能包含的缺陷。而對(duì)于測(cè)試 人員和質(zhì)量工程人員,更適合使用全量掃。由于Canalyze探索的路徑比較**,因此可以通過(guò)Canalyze給出的錯(cuò)報(bào)告來(lái)構(gòu)造一些額外的測(cè)試用例,從而提高測(cè)試用例的覆蓋率以及代碼的壯性。
此外,Canalyze還提供了各度的屏蔽功能。由于分析過(guò)程中庫(kù)函數(shù)源代碼缺失,以及分析工具對(duì)于和時(shí)間開(kāi)銷的折衷此不可避免地會(huì)產(chǎn)生
誤報(bào)。通過(guò)使用屏蔽功能,可以在掃描的過(guò)程中跳或屏蔽對(duì)于會(huì)產(chǎn)生大量誤報(bào)的代碼的分析,可以屏蔽在某些特殊情況下,一種高誤報(bào)檢查器產(chǎn)生的特
定錯(cuò)誤類型的報(bào)告,從而減少確認(rèn)錯(cuò)誤報(bào)告的本。
Canalyze提供了XML格式化文件形網(wǎng)頁(yè)形式兩種類型的錯(cuò)誤報(bào)告。格式化的XML形式的錯(cuò)誤報(bào)告,可以方項(xiàng)目管理人員對(duì)接內(nèi)部使用的缺陷
管理系統(tǒng),從而提高缺陷確認(rèn)效率并減少管理成本。而可讀性高頁(yè)形式的錯(cuò)誤報(bào)告,可以方便開(kāi)發(fā)測(cè)試人員直接閱讀報(bào)告內(nèi)容,便于使用。同時(shí), Canalyze提供了詳細(xì)的使用文檔,從而可以方便用戶進(jìn)行使和配置。國(guó)產(chǎn)C程序靜態(tài)分析工具軟件
Canalyze已經(jīng)在一些重要的開(kāi)源程序(openssh-5.9p1,get-1.13,libosip2- 3.6.0,sqlite-3.7.11,httpd-2.4.4,bftpd-3.8)中檢測(cè)到了很多誤,并且得到了開(kāi)
發(fā)者的確認(rèn)。例如,bftp的開(kāi)發(fā)人給我們回復(fù):“Allofthepoblemsyoureported arecorrect.Thememoryhandlingforbftpd_cwd_mappath()wasanespeciallybad
bug."
工具結(jié)構(gòu)圖
運(yùn)行環(huán)境與配置
1)支持的運(yùn)行平臺(tái):
支持64 位字長(zhǎng)的Linux操作系統(tǒng)內(nèi)核版本3 0 及以上。 Python2,版本2.7 及以上
Python3,版本3.5 及以Clang編譯器(版本3.3以上)或GCC編譯(版本7.3.0 及以上)
2)支持的C代碼標(biāo)準(zhǔn)和語(yǔ)法特性:
C99 標(biāo)準(zhǔn)或Clang3.3支持的其他C語(yǔ)法特性。
3.與同行業(yè)相比的優(yōu)勢(shì)
在業(yè)界已經(jīng)有一些商業(yè)化的程序分析工具。如,F(xiàn)ortifoverity,等等。與它們相比,我們的工具主要是基于符號(hào)執(zhí)行技術(shù),能**模擬程序的行為。
因此,分析結(jié)果更**,誤報(bào)率更低。同時(shí),提供的多種描方式具有更好的適應(yīng)性,能夠適用于多種不同場(chǎng)景、分析精度和掃描粒度下的不同需求。錯(cuò)誤
報(bào)告可讀性強(qiáng),XML報(bào)告可以更好的適配用戶使用的環(huán)境。
更多國(guó)產(chǎn)C程序靜態(tài)分析工具軟件信息請(qǐng)直接致電埃登威上海產(chǎn)品:微量氧分析儀,藥品殘氧儀,露點(diǎn)儀,熱導(dǎo)氣體分析儀,GE流量計(jì),OX-1氧傳感器,頂空分析儀,紅外氣體分析儀,高溫濕度儀,西門(mén)子U23分析儀,ppb微量水分析儀,OXY.IQ氧分析儀,煙氣濕度儀,燃?xì)鉄嶂祪x,Kaye溫度驗(yàn)證儀,L&W白度,儀激光氧分析儀,壓縮空氣露點(diǎn)儀,干燥機(jī)露點(diǎn)儀,激光氣體分析儀,便攜式露點(diǎn)儀,便攜式微量氧分析儀,F(xiàn)ei (維修中心,代表處,總代理,分公司,子公司,售后中心,銷售中心,上海辦,辦事處)