《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于VxWorks平臺的軟件重量級靜態檢查
基于VxWorks平臺的軟件重量級靜態檢查
2016年微型機與應用第06期
姜文,劉立康
(西安電子科技大學 通信工程學院,陜西 西安710071)
摘要: 為了保證基于VxWorks平臺的軟件代碼的質量,對軟件源代碼進行靜態檢查非常重要。以ClearCase作為配置管理工具,將重量級靜態檢查工具Coverity和Fortify集成到持續集成工具ICPCI上,對軟件源代碼進行靜態檢查。詳細敘述了Coverity和Fortify編譯器的配置,以及在ICPCI工具的任務管理頁面上配置檢查任務。分析了檢查過程中出現各種問題的原因并給出相應的解決方案。最后介紹了一個典型案例。工作實踐表明,靜態檢查有助于及時發現并解決軟件源代碼的各種缺陷,從而提高軟件質量和安全性。
Abstract:
Key words :

  姜文,劉立康

  (西安電子科技大學 通信工程學院,陜西 西安710071)

  摘要:為了保證基于VxWorks平臺的軟件代碼的質量,對軟件源代碼進行靜態檢查非常重要。以ClearCase作為配置管理工具,將重量級靜態檢查工具Coverity和Fortify集成到持續集成工具ICPCI上,對軟件源代碼進行靜態檢查。詳細敘述了Coverity和Fortify編譯器的配置,以及在ICPCI工具的任務管理頁面上配置檢查任務。分析了檢查過程中出現各種問題的原因并給出相應的解決方案。最后介紹了一個典型案例。工作實踐表明,靜態檢查有助于及時發現并解決軟件源代碼的各種缺陷,從而提高軟件質量和安全性。

  關鍵詞嵌入式操作系統;靜態檢查;持續集成;安全漏洞

0引言

  VxWorks是實時嵌入式操作系統軟件,可以為開發人員提供高效實時的任務調度、中斷管理、系統資源管理和任務間通信。VxWorks經過廣泛驗證,已成功應用在航天、航空、艦船、通信、醫療等關鍵領域。Tornado[13]是開發VxWorks應用系統的集成開發環境。Tornado IDE采用C/C++語言編程,支持GNU C/C++編譯器。

  為了保證基于VxWorks平臺的軟件代碼質量,檢測軟件源代碼中存在的缺陷和安全漏洞非常重要。本文采用CodeCC(Code Check Center)工具壓縮包開展檢測工作。工具壓縮包中包括靜態檢查工具Coverity和Fortify,采用靜態檢查方法檢測源代碼的各種缺陷,將檢查結果反饋給開發人員及時處理,從而提高軟件的質量和安全性。

1重量級靜態檢查工具

  通常把Coverity和Fortify稱為重量級的靜態檢查工具。

  Coverity Prevent是由Coverity公司開發的一款高性能靜態檢查軟件,它是檢測和解決C、C++、Java和C#源代碼中嚴重缺陷的領先自動化方法。

  Fortify SCA(Static Code Analyzer)是一款軟件源代碼缺陷靜態測試工具,它支持的編程語言多達17種(包括C、C+、C#、JAVA等),基本上涵蓋了絕大多數編程語言。

2檢查工具集成到持續集成工具ICP-CI

  本文采用的軟件配置管理工具是ClearCase,持續集成工具是ICPCI。首先將集成了Coverity和Fortify工具的CodeCC工具的壓縮包CodeCC_Win32.zip拷貝到持續集成主控服務器與代理服務器的plugin目錄下解壓,再分別對Coverity和Fortify工具進行相關的編譯器配置,然后完成搭建構建工程。構建工程命名為“產品名_版本號_CodeCheck”。

  2.1ClearCase版本庫的代碼更新

  持續集成工具ICPCI需要在版本庫鎖庫之后完成源代碼更新,然后進行Coverity和Fortify檢查。ICPCI工具執行代碼更新時,需要編寫代碼更新的批處理腳本code_update.bat,把代碼更新的腳本配置在任務中。

  2.2Coverity編譯器配置

  軟件產品模塊進行Coverity檢查時,需要在CodeCC工具的tqeconfig.ini文件中完成編譯器的配置。

  對于基于VxWorks平臺的軟件產品,由于各模塊使用的軟、硬件差異,可以使用的編譯器模塊多達40多個。目前常用的編譯器有10多個。根據編譯器中采用的CPU類型可以將其分為以下3類(mips、ppc、arm),將這些編譯器配置在tqeconfig.ini文件中。配置內容如下:

  mips:

  ccmips=C:\\NoDist_Tonado2.2\\host\\x86-32\\bin\\ccmpis.exe

  ccmips=C:\\Tonado2.2\\host\\x86-32\\bin\\ccmpis.exe

  ccmips=C:\\Tonado2.2_1\\host\\x86-32\\bin\\ccmpis.exe

  ccmips=C:\\Tonado2.2_cvm\\host\\x86-32\\bin\\ccmpis.exe

  ccmips=C:\\TonadoHRD\\host\\x86-32\\bin\\ccmpis.exe

  ppc:

  ccppc= C:\\Tonado\\host\\x86-32\\bin\\ccppc.exe

  ccppc= C:\\Tonado2.0\\host\\x86-32\\bin\\ccppc.exe

  ccppc= C:\\Tonado_cxe\\host\\x86-32\\bin\\ccppc.exe

  ccppc= C:\\Tonado_2.2.1_ppc\\host\\x86-32\\bin\\ccppc.exe

  arm:

  ccarm= C:\\TonadoARM\\host\\x86-32\\bin\\ccarm.exe

  完成上述編譯器的配置后,執行tqeconfig.bat文件,該文件如果執行成功則將生成相應的配置文件保存在CodeCC\\tool\\coverity\\config目錄下。

  完成編譯器配置后,需要將持續集成主控服務器和代理服務器上的Coverity工具路徑plugin\\CodeCC\\tool\\coverity\\bin添加到環境變量path中。同時需要完成編寫編譯腳本和makefile文件。Coverity不支持分布式編譯加速,編譯過程中不能使用分布式編譯的腳本。

  2.3Fortify編譯器配置

  2.3.1編譯文件配置

  基于VxWork操作系統的編譯器是風河公司提供的Tornado交叉編譯器ccmips、ccppc以及ccarm。為使Fortify工具可以識別和使用這些編譯器,需要修改Fortify的配置文件,將VxWorks系統的交叉編譯器配置到fortify-sca.properties文件中。VxWorks操作系統的編譯過程由編譯(cc)、鏈接(ld)以及打包(ar)這3個部分組成,在配置過程中需要對編譯、鏈接和打包依次進行配置。在fortify-sca.properties文件中添加配置項如下所示:

  com.fortify.sca.compilers.ccmips=com.fortify.sca.util.compilers.Gcccompiler

  com.fortify.sca.compilers.ccarm=com.fortify.sca.util.compilers.Gcccompiler

  com.fortify.sca.compilers.ccppc=com.fortify.sca.util.compilers.Gcccompiler

  com.fortify.sca.compilers.ldmips=com.fortify.sca.util.compilers.ldcompiler

  com.fortify.sca.compilers.ldarm=com.fortify.sca.util.compilers.ldcompiler

  com.fortify.sca.compilers.ldppc=com.fortify.sca.util.compilers.ldcompiler

  com.fortify.sca.compilers.armips=com.fortify.sca.util.compilers.ArUntil

  com.fortify.sca.compilers.ararm=com.fortify.sca.util.compilers. ArUntil

  com.fortify.sca.compilers.arppc=com.fortify.sca.util.compilers. ArUntil

  編譯器配置完成之后,需要將持續集成主控服務器與代理服務器上的Fortify工具路徑plugin\\CodeCC\\tool\\fortify\\bin添加到環境變量path中。

  2.3.2在makefile文件和編譯腳本中嵌入Fortify命令

  Fortify工具通過跟蹤編譯器生成中間文件*.nst,進行代碼編譯時需要將以前編譯生成的*.obj文件目標文件全部刪除,保證Fortify工具跟蹤編譯器生成正確的*.nst文件。同時需要根據軟件模塊重新編寫編譯腳本和makefile文件,在makefile文件和編譯腳本中嵌入Fortify命令。

  2.4ICP-CI的任務管理頁面上配置檢查任務

  在ICP-CI的任務管理頁面的構建工程上配置CodeCC檢查任務,通常Coverity任務和Fortify任務同時配置。以軟件模塊mcs為例來描述配置過程。配置mcs模塊的CodeCC任務時,在任務欄上選擇“CodeCC”任務。對于Coverity任務,將mcs模塊的編譯腳本make_mcs_one_con.bat腳本和mcs模塊編譯腳本路徑配置到CodeCC任務類型頁面下的編譯腳本、編譯路徑中,選擇編譯類型為gcc,并在任務選項欄添加“Coverity”任務。

  對于Fortify任務,將mcs模塊的Fortify編譯腳本make_mcs_one_fortify.bat腳本以及mcs模塊編譯腳本路徑配置到CodeCC任務的fortifyexecutable這個配置項中。最后在任務類型中再添加“Fortify”任務。

  CodeCC檢查任務配置到ICP-CI上之后,通常由主控服務器將任務下發至代理服務器上執行。

  2.5檢查結果分析和處理

  使用工具ICPCI做CodeCC檢查時,通常先對模塊做Coverity檢查,生成的中間文件壓縮包上傳到指定的分析服務器;接著對模塊做Fortify檢查,同樣將生成的中間文件壓縮包上傳到同一個分析服務器。此時ICP-CI的執行窗口顯示CodeCC任務成功并處于等待分析結果狀態。

  當分析服務器分析完畢,將模塊的分析結果回傳到ICPCI工具,在ICPCI工具的頁面上可以看到Coverity和Fortify工具各自的檢查結果。檢查結果包括模塊的各級別缺陷數以及總缺陷數。缺陷級別分為高、中、低3個級別。同時根據檢查模塊任務配置的郵件主送人和抄送人,給相關管理和開發人員發送郵件。郵件內容為該檢查模塊的Coverity和Fortify檢查日志與檢查結果下載路徑。

  對檢查出來的各種問題,開發人員下載檢查結果文件,并對檢查結果與模塊源代碼進行分析。確認是源代碼問題,修改源代碼后重新合入版本庫,啟動新一輪的CodeCC檢查。分析之后,確認是誤報的缺陷,從ICP-CI上顯示的Coverity和Fortify工具檢查結果的頁面的“Ignore defects”鏈接進入由分析服務器指定的缺陷庫完成誤報缺陷的屏蔽,屏蔽之后的缺陷呈現為“Dismissed”狀態。

3CodeCC檢查出現問題的分析和處理

  CodeCC檢查失敗需要及時發現處理,根據已經失敗的模塊、構建工程頁面上提示的失敗信息和構建工程的詳細日志文件來確定該模塊檢查失敗的原因和解決問題的方案。CodeCC檢查失敗通常有在編譯階段出錯和在分析階段出錯兩類。

  3.1Coverity或Fortify檢查在編譯階段出錯

  在編譯階段出錯,查看對應的編譯日志可以發現各種問題(編譯器配置問題、編譯腳本問題和源代碼編譯錯誤等),導致在編譯階段Coverity或Fortify檢查報錯。解決方法如下:

  (1)重新進行編譯器配置;

  (2)根據日志所報編譯問題,重新編寫編譯腳本;

  (3)開發工程師定位模塊編譯錯誤,修改源代碼。

  3.2Coverity或Fortify檢查在分析階段出錯

  在分析階段出錯,查看對應的分析日志可以發現大部分是分析服務器問題導致的執行失敗,通常表現為上傳中間文件壓縮包失敗、分析結果回傳失敗等。根據分析日志發現此類問題,解決分析服務器問題。

  3.3Coverity檢查文件的比例問題

  查看Coverity檢查的日志文件build.log,在該文件的最后查看模塊編譯檢查文件的百分比,如果編譯的文件全部完成檢查,百分比值是100%。如果這個百分比值不是100%,需要在日志文件里查找錯誤。這些錯誤通常不是軟件模塊的代碼編譯錯誤,而是模塊源代碼生成中間文件過程中與編譯器沖突導致的,需要開發工程師與系統工程師進行分析,通過修改源代碼來提高檢查文件的百分比。

4典型案例

  某公司的一個軟、硬件結合的大型開發項目,總的代碼量超過2 000萬行,采用的配置管理工具為ClearCase,持續集成使用ICPCI工具。對基于VxWorks操作系統的大量軟件模塊進行了CodeCC檢查,工作實踐表明,靜態檢查有助于及時發現并解決軟件源代碼的各種缺陷,便于產品項目經理了解工作進度和解決存在的問題,進一步提升產品質量。

5結論

  長期的工作實踐表明,CodeCC檢查在嵌入式軟件開發中可以發揮重要的作用。檢查工具集成到持續集成工具ICP-CI,可以自動完成CodeCC檢查,及時向開發人員反饋檢查結果,使開發人員能夠及時修復源代碼的缺陷,同時也有益于軟件項目管理。軟件開發的C靜態檢查工作做好了,將很大程度上提高軟件產品的質量,降低軟、硬件開發的成本。

參考文獻

  [1] 孔祥營,柏桂枝.嵌入式實時操作系統 VxWorks 及其開發環境 Tornado [M].北京:中國電力出版社,2002.

  [2] 蔡建平.嵌入式軟件測試實用技術[M].北京:清華大學出版社,2010.

  [3] 趙澤榮,劉志勇,林琳,等.基于VxWorks的ADSB地面站熱備份設計與實現[J].微型機與應用,2014,33(20):7779.

  [4] 吳世忠,郭濤,董國偉,等,軟件漏洞分析技術[M].北京:科學出版社,2014.

  [5] ALMOSSAWI A, LIM K,TANMAY.Analysis tool evaluation:coverity prevent[R]. SinhaCarnegie Mellon University, 2006.

  [6] Coverity Inc. Coverity scan:2013 open source report[R].2014.


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品系列在线播放| 亚洲欧洲一区二区在线播放 | 久久久久成人精品| 欧美亚洲免费电影| 亚洲天堂av在线免费| 宅男噜噜噜66一区二区| 日韩视频在线观看免费| 亚洲另类自拍| 夜夜精品视频一区二区| 夜夜嗨av色综合久久久综合网 | 欧美日本不卡视频| 欧美日本网站| 欧美日韩午夜视频在线观看| 欧美黄色一级视频| 欧美乱妇高清无乱码| 欧美日韩国产区| 欧美日韩国产首页| 欧美系列亚洲系列| 国产精品一区免费观看| 国产精品亚洲欧美| 国精产品99永久一区一区| 黄色精品一区二区| 亚洲国产高清aⅴ视频| 亚洲三级观看| 在线视频欧美一区| 亚洲欧美精品在线| 欧美在线在线| 亚洲人成在线播放| 一区二区冒白浆视频| 亚洲欧美日韩国产成人| 久久国产一二区| 久久久久综合一区二区三区| 欧美凹凸一区二区三区视频| 欧美精品七区| 国产精品久久久久久久7电影 | 欧美在线日韩在线| 亚洲黄色免费网站| 一区二区三区导航| 小黄鸭视频精品导航| 久久亚洲春色中文字幕久久久| 免费在线播放第一区高清av| 欧美激情综合色综合啪啪| 欧美日韩在线亚洲一区蜜芽| 国产乱码精品一区二区三区五月婷 | 亚洲精品免费一区二区三区| 亚洲视频免费在线| 欧美在线视频一区| 99综合视频| 午夜精品视频在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲成人资源| 制服丝袜亚洲播放| 欧美一区二区三区在线观看| 久久午夜精品| 欧美日韩国产一区精品一区| 国产精品一区二区久久久久| 伊人久久大香线蕉av超碰演员| 日韩午夜在线电影| 欧美自拍偷拍| 亚洲综合清纯丝袜自拍| 浪潮色综合久久天堂| 欧美午夜片欧美片在线观看| 韩国av一区二区三区| 亚洲精品一区二区在线观看| 欧美一区二区三区日韩视频| 一级日韩一区在线观看| 久久精品亚洲精品| 欧美日韩国产片| 黄色欧美成人| 亚洲一区二区三区高清| 亚洲黑丝在线| 欧美一区二区网站| 欧美精品一区二区三区一线天视频| 国产精品一级二级三级| 亚洲日韩中文字幕在线播放| 久久不射网站| 亚洲欧美一区在线| 欧美精品一区二区蜜臀亚洲| 国内精品模特av私拍在线观看| 亚洲网站在线| 99视频热这里只有精品免费| 久久国产精品高清| 欧美视频一区二区三区…| 1769国内精品视频在线播放| 亚洲视频综合在线| 亚洲精品视频一区| 久久久久久久999| 国产精品一区二区三区成人| 99国产精品久久久久久久| 亚洲人成毛片在线播放| 久久国产精品久久久久久电车| 欧美日韩一区在线观看| 亚洲国产精品一区二区www在线| 欧美在线观看天堂一区二区三区| 亚洲男人影院| 欧美手机在线| 亚洲精品之草原avav久久| 亚洲国产成人av| 久久久久久亚洲精品杨幂换脸| 国产精品免费一区豆花| 99riav久久精品riav| 日韩视频一区二区在线观看| 免费视频久久| 在线观看三级视频欧美| 久久精品国产综合| 久久精品色图| 国产一区二区三区久久 | 亚洲视频中文字幕| 欧美经典一区二区三区| 在线不卡亚洲| 亚洲区在线播放| 欧美mv日韩mv国产网站| 永久久久久久| 亚洲国内精品在线| 欧美wwwwww| 91久久精品国产91久久性色tv| 亚洲片区在线| 欧美绝品在线观看成人午夜影视| 亚洲日本无吗高清不卡| 亚洲肉体裸体xxxx137| 欧美jizz19hd性欧美| 亚洲国产精品尤物yw在线观看| 亚洲国产影院| 免费av成人在线| 亚洲福利在线视频| 99re6这里只有精品视频在线观看| 欧美成人网在线| 亚洲精品视频在线观看网站 | 久久尤物视频| 亚洲国产精品传媒在线观看 | 亚洲一二三四久久| 国产精品久久久久久av福利软件| 亚洲一区二区在线| 性欧美激情精品| 国产日韩av高清| 久久爱91午夜羞羞| 男女精品网站| 亚洲美女在线国产| 亚洲自拍偷拍一区| 国产亚洲欧美日韩美女| 亚洲国产精品久久91精品| 欧美www视频| 日韩午夜激情av| 亚洲欧美精品在线观看| 国产日本亚洲高清| 亚洲国产精品美女| 欧美日韩黄视频| 亚洲视频在线观看免费| 久久国内精品视频| 在线播放不卡| 宅男噜噜噜66一区二区66| 国产精品一区二区三区四区五区| 久久高清国产| 欧美精品一区二区三区高清aⅴ| 一本色道久久88综合日韩精品| 午夜精品久久久久久久99樱桃| 国产一区二区久久久| 亚洲精品视频一区| 国产精品狼人久久影院观看方式| 欧美一区二区三区在| 欧美大片在线观看| 一区二区三区四区五区视频| 久久精品人人做人人爽| 亚洲欧洲精品一区二区三区| 亚洲欧美在线观看| 黄色精品免费| 亚洲性感美女99在线| 国产一区二区三区黄视频| 日韩午夜av电影| 久久国产视频网站| 亚洲人成网站999久久久综合| 亚洲一区二区动漫| 国产一区二区毛片| 一本色道久久综合亚洲精品高清 | 国产精品一二三| 亚洲日产国产精品| 国产精品久久久久久久一区探花| 久久国产福利国产秒拍| 欧美日韩精品在线视频| 欧美在线亚洲一区| 欧美视频在线观看 亚洲欧| 欧美尤物巨大精品爽| 欧美日韩国产不卡| 欧美一级二级三级蜜桃| 欧美日韩麻豆| 亚洲国产精品成人va在线观看| 国产精品久久久久久久久动漫| 亚洲国产精品久久久久秋霞蜜臀| 欧美色123| 亚洲日本一区二区三区| 国产啪精品视频| 亚洲天堂av图片| 亚洲第一福利在线观看| 欧美亚洲三区| 亚洲精品一级| 欧美成人官网二区| 久久福利视频导航| 国产精品欧美久久久久无广告| 99热这里只有精品8| 在线观看视频亚洲|