http://www.kadhoai.com.cn 2026-04-11 09:11:10 來源:IAR
近年來,國內電子公司和芯片設計企業大舉進攻汽車、醫療和工業等高可靠應用(mission-critical)領域,為自己找到了擺脫紅海的新領域。但是高可靠應用多數都需要功能安全認證,在許多行業在諸如汽車、航空電子、醫(yi)療(liao)和(he)工(gong)業(ye)控(kong)製(zhi)等(deng)行(xing)業(ye),是(shi)很(hen)常(chang)見(jian)甚(shen)至(zhi)是(shi)必(bi)須(xu)的(de)工(gong)作(zuo)。這(zhe)些(xie)認(ren)證(zheng)通(tong)過(guo)必(bi)要(yao)的(de)流(liu)程(cheng)和(he)測(ce)試(shi)來(lai)填(tian)寫(xie)功(gong)能(neng)安(an)全(quan)清(qing)單(dan),一(yi)直(zhi)以(yi)來(lai)都(dou)是(shi)一(yi)個(ge)非(fei)常(chang)困(kun)難(nan)的(de)事(shi)情(qing),但(dan)有(you)一(yi)些(xie)方(fang)法(fa)可(ke)以(yi)加(jia)快(kuai)您(nin)的(de)認(ren)證(zheng)。
雖sui然ran可ke以yi對dui研yan發fa過guo程cheng進jin行xing大da量liang的de微wei調tiao以yi加jia快kuai您nin的de認ren證zheng,但dan一yi切qie現xian代dai電dian子zi信xin息xi係xi統tong都dou從cong軟ruan件jian即ji代dai碼ma質zhi量liang開kai始shi。但dan如ru何he能neng夠gou確que保bao代dai碼ma質zhi量liang呢ne?幸xing運yun的de是shi,使shi用yong一yi些xie簡jian單dan的de方fang法fa,可ke以yi幾ji乎hu立li即ji提ti升sheng您nin的de代dai碼ma質zhi量liang,並bing盡jin可ke能neng地di減jian少shao痛tong苦ku。
從標準中獲得幫助
作為一家產品被全球近五萬家企業/機構采用的嵌入式開發工具提供商,IAR的研發工程師評估在C99中,代碼規範中有大約190種模棱兩可之處。也就是在C99中,有190種不同的合乎句法的C結構,在C語言規範中沒有明確說明。實際上,進入C18,情況會變得有一點糟糕,在C++中zhong,情qing況kuang會hui更geng加jia糟zao糕gao,這zhe裏li需xu要yao引yin入ru多duo繼ji承cheng和he虛xu擬ni繼ji承cheng的de概gai念nian。當dang然ran,編bian譯yi器qi必bi須xu把ba您nin的de源yuan代dai碼ma變bian成cheng具ju體ti的de代dai碼ma,所suo以yi它ta必bi須xu對dui代dai碼ma的de含han義yi選xuan擇ze一yi種zhong解jie釋shi,然ran後hou用yong它ta來lai運yun行xing。
這在實踐中意味著,您可以得到不同的編譯器,它們對源代碼有不同的解釋。在一個高可靠的係統中,這是一個如同噩夢般的場景;tebieshiyouyuxuduogongsiweilezhuiqiujinkuaitongguogongnenganquanrenzheng,weilefangbianceshizaiduogepingtaishangjiaochabianyitamendedaima。keyixiangxiang,zheduininhuoderenzhengdeshijianhuiyouduomefeichangzaogaodeyingxiang,yinweininbudebuweiraosuoyouzhexieqingkuangjinxingceshi,yizhengmingdaimadekezhongfuxinghekekaoxing。
怎樣才能破解這個難題呢?簡短的答案是,避免模棱兩可的情況出現在您的代碼中。但如何做到這一點呢?使用像MISRAzheyangdebianmabiaozhunkeyikuaisujiejuezhegenanti,yinweizhexiebiaozhunjiushiweilerangninbimiandiaorudaimazhongnaxiechangjianleixingdexianjing。zhexiebiaozhunhaichangdaobianmayaoanquankekao,yijianshaonindaimazhongdeloudongshuliang。danshi,zenyangcainengquebaowomenzunxunzhexiebiaozhunne?xingyundeshi,gongnenganquanbiaozhuntigongleyizhongfangfa。
標準需要代碼分析
幾乎每一個功能安全標準都需要您對您的代碼進行靜態分析,並且強烈建議您對您的代碼進行運時(或動態)分析。這些標準中影響最廣的是IEC 61508,涵蓋了一般與安全相關的係統。在該標準的C.4.2這一節中,對於安全完整性等級(SIL)1以上的產品,不建議使用沒有消除模棱兩可和危險行為的編碼標準的C語言。
換句話說,如果您想為您的產品獲得SIL 2-4等級的認證,您必須使用靜態分析來讓您的代碼更加穩固。這是為什麼呢?這些靜態分析工具可以迫使開發者實施諸如MISRA的de編bian碼ma標biao準zhun。此ci外wai,靜jing態tai和he運yun時shi分fen析xi可ke以yi幫bang助zhu您nin提ti高gao代dai碼ma質zhi量liang,快kuai速su指zhi出chu您nin何he時shi的de編bian碼ma行xing為wei是shi有you風feng險xian的de,特te別bie是shi存cun在zai上shang述shu編bian碼ma標biao準zhun中zhong模mo棱leng兩liang可ke的de情qing況kuang。
然而,當您使用這類自動化工具時,也會對您的認證時間線產生巨大影響。許多組織使用難以配置、難(nan)用(yong)的(de)代(dai)碼(ma)分(fen)析(xi)工(gong)具(ju),這(zhe)些(xie)工(gong)具(ju)在(zai)構(gou)建(jian)服(fu)務(wu)器(qi)上(shang)運(yun)行(xing),作(zuo)為(wei)每(mei)日(ri)構(gou)建(jian)的(de)一(yi)部(bu)分(fen)。這(zhe)對(dui)您(nin)的(de)幫(bang)助(zhu)並(bing)不(bu)是(shi)很(hen)大(da),因(yin)為(wei)個(ge)體(ti)開(kai)發(fa)者(zhe)並(bing)沒(mei)有(you)得(de)到(dao)即(ji)時(shi)的(de)反(fan)饋(kui),他(ta)們(men)並(bing)不(bu)知(zhi)道(dao)自(zi)己(ji)剛(gang)剛(gang)寫(xie)的(de)代(dai)碼(ma)有(you)什(shen)麼(me)問(wen)題(ti)。此(ci)外(wai),有(you)時(shi)這(zhe)些(xie)工(gong)具(ju)發(fa)出(chu)的(de)警(jing)告(gao)信(xin)息(xi)是(shi)難(nan)以(yi)理(li)解(jie)的(de),開(kai)發(fa)者(zhe)們(men)要(yao)弄(nong)清(qing)楚(chu)是(shi)什(shen)麼(me)意(yi)思(si),以(yi)及(ji)怎(zen)樣(yang)修(xiu)正(zheng)代(dai)碼(ma)才(cai)能(neng)讓(rang)警(jing)告(gao)消(xiao)失(shi),這(zhe)浪(lang)費(fei)了(le)他(ta)們(men)的(de)時(shi)間(jian)。
換句話說,安全性認證不是要突出項目的優點(高性能),而是要盡量找出項目的弱點(漏洞),所以要盡可能地選用被最大量開發人員群體驗證過的開發工具,或者是“見多識廣”的開發工具係統。全球有超過15萬開發人員在使用IAR提供的IAR Embedded Workbench開發工具來完成其各種嵌入式項目,通過與其中許多“高手”開發人員溝通發現:如果您能在開發過程中進行代碼分析--在正式構建之前--那麼漏洞就像是從來沒有過一樣。您項目的漏洞會比較低,這正是認證機構想要的,因為這意味著您有一個非常成熟的開發組織。
讓代碼分析成為日常工作流程的一部分
IAR的(de)工(gong)程(cheng)師(shi)們(men)見(jian)過(guo)許(xu)多(duo)來(lai)自(zi)各(ge)行(xing)各(ge)業(ye)的(de)公(gong)司(si),我(wo)們(men)注(zhu)意(yi)到(dao)的(de)是(shi),配(pei)置(zhi)起(qi)來(lai)越(yue)容(rong)易(yi)使(shi)用(yong)的(de)代(dai)碼(ma)分(fen)析(xi)工(gong)具(ju)越(yue)簡(jian)單(dan),開(kai)發(fa)人(ren)員(yuan)就(jiu)更(geng)有(you)可(ke)能(neng)使(shi)用(yong)它(ta)們(men),這(zhe)樣(yang)能(neng)夠(gou)幫(bang)助(zhu)開(kai)發(fa)人(ren)員(yuan)更(geng)快(kuai)完(wan)成(cheng)項(xiang)目(mu)實(shi)現(xian)產(chan)品(pin)上(shang)市(shi)。讓(rang)這(zhe)些(xie)自(zi)動(dong)化(hua)工(gong)具(ju)成(cheng)為(wei)開(kai)發(fa)者(zhe)工(gong)具(ju)箱(xiang)的(de)一(yi)部(bu)分(fen),意(yi)味(wei)著(zhe)您(nin)可(ke)以(yi)在(zai)編(bian)寫(xie)應(ying)用(yong)程(cheng)序(xu)時(shi)檢(jian)查(zha)和(he)改(gai)進(jin)代(dai)碼(ma)質(zhi)量(liang),同(tong)時(shi)可(ke)以(yi)在(zai)“區域”內(nei)了(le)解(jie)這(zhe)部(bu)分(fen)代(dai)碼(ma)要(yao)做(zuo)什(shen)麼(me)以(yi)及(ji)它(ta)如(ru)何(he)與(yu)係(xi)統(tong)中(zhong)的(de)其(qi)他(ta)模(mo)塊(kuai)進(jin)行(xing)交(jiao)互(hu)。為(wei)了(le)有(you)效(xiao)地(di)做(zuo)到(dao)這(zhe)一(yi)點(dian),這(zhe)些(xie)工(gong)具(ju)必(bi)須(xu)被(bei)整(zheng)合(he)到(dao)日(ri)常(chang)工(gong)作(zuo)流(liu)程(cheng)中(zhong)。
在瀏覽其他人對整合代碼分析的看法時,IAR的工程師發現穀歌在ACM出版物上發表了一篇文章,探討了代碼分析的優點。雖然文章對他們的整個代碼庫,包括C、C++和Java進行了全麵的考察,但他們的結果非常明確:
“在開發過程的早期就能發現編譯器錯誤,並且能夠整合到開發人員的工作流程中。我們發現擴大編譯器的檢查集對提高 Google的代碼質量是有效的。”
zuozheshuo,jiangjingtaifenxijianzhazhenghedaobianyiqigongzuoliuchengzhong,bingshiqizuoweicuowuchuxian,jidaditigaoleduigongjutiaozhajieguodeguanzhudu,zheyiweizhetamendedaimazhiliangzuihouhuihengao。zaiwangxiakan,tamentandaoleyixiangtiaozha,zhexiangtiaozhamianxiangzuijinyudaobianyiqicuowuyijiyijingshoudaoxiufutongyiwentibudingdekaifazhe:
“穀歌開發者認為,在編譯時標記的問題(與已提交的代碼補丁不同)能捕捉到更嚴重的漏洞;例如,編譯過程中標記的問題裏麵有74%被調查參與者認為是‘真正的問題’,相比之下,在已提交的代碼中發現的問題隻有21%。”
wenzhanghaitandaolejiangdaimafenxizuoweigongzuoliuchengyibufendezhongyaoxing,zhichudangtamentongguojingtaifenxigongjuzidongyunxingtijiaodedaimabingyaoqinggongchengshizhakanfenxiyibiaobanshi,henshaoyougongchengshigenjindaodi。zaibianyiguochengzhongdejishifankuirangjingtaifenxishiyongqilaigengjiandan,yegengnanbeihushi。yinci,tamenxuanzezaimeigerendegongzuoliuchengzhongmorenjiarujingtaifenxi。gugetuanduirenwei,daimafenxigongjuyaoxiangqudechenggong,yidingyaorangkaifarenyuanganjiaodaotamenyonglezhexiegongju,bingcongzhongshouyi,bingqiehenxiangshouyongzhexiegongju。
但dan是shi,在zai工gong作zuo流liu程cheng中zhong加jia入ru代dai碼ma分fen析xi,您nin期qi望wang看kan到dao什shen麼me樣yang的de結jie果guo呢ne?有you一yi件jian事shi情qing是shi可ke以yi期qi望wang實shi現xian的de,那na就jiu是shi提ti高gao應ying用yong程cheng序xu的de整zheng體ti安an全quan性xing,因yin為wei高gao質zhi量liang代dai碼ma可ke以yi消xiao除chu漏lou洞dong去qu利li用yong諸zhu如ru緩huan衝chong區qu溢yi出chu和he非fei法fa指zhi針zhen等deng機ji會hui,如ru該gai文wen所suo述shu。雖sui然ran這zhe本ben身shen就jiu是shi使shi用yong代dai碼ma分fen析xi的de一yi個ge很hen好hao的de理li由you,但dan有you時shi很hen難nan說shuo服fu人ren們men相xiang信xin“一針不補,十針難縫”這句格言,您需要更顯著的結果來說服開發者和管理層,讓他們信服代碼分析的好處。
Stefan Wagner等人的一篇論文使用經驗數據來計算代碼分析工具與傳統測試在不同代碼庫上的優勢。他們的結果很有說服力:在769個被識別到的漏洞中,76%是被代碼分析工具發現,隻有4%是在傳統測試中發現,其餘20%在代碼審查中發現。如果能在開始測試前就消除75%的漏洞,那麼能多快地實現軟件的平均故障間隔時間(MTTF)目標?答案是 “非常快”。僅(jin)僅(jin)是(shi)看(kan)測(ce)試(shi)節(jie)省(sheng)下(xia)來(lai)的(de)時(shi)間(jian)和(he)金(jin)錢(qian),即(ji)可(ke)發(fa)現(xian)對(dui)代(dai)碼(ma)分(fen)析(xi)工(gong)具(ju)的(de)投(tou)資(zi)就(jiu)是(shi)值(zhi)得(de)的(de),更(geng)不(bu)用(yong)說(shuo)縮(suo)短(duan)產(chan)品(pin)上(shang)市(shi)周(zhou)期(qi)省(sheng)下(xia)的(de)時(shi)間(jian)。這(zhe)些(xie)都(dou)是(shi)功(gong)能(neng)安(an)全(quan)認(ren)證(zheng)機(ji)構(gou)喜(xi)歡(huan)看(kan)到(dao)的(de)流(liu)程(cheng)類(lei)型(xing),因(yin)為(wei)它(ta)極(ji)大(da)地(di)降(jiang)低(di)了(le)最(zui)終(zhong)產(chan)品(pin)仍(reng)然(ran)含(han)有(you)漏(lou)洞(dong)的(de)風(feng)險(xian)。
高質量的代碼讓您在通往功能安全的道路上快速前進
加jia快kuai功gong能neng安an全quan認ren證zheng之zhi路lu的de關guan鍵jian是shi提ti高gao代dai碼ma質zhi量liang。提ti高gao代dai碼ma質zhi量liang,可ke以yi降jiang低di您nin的de產chan品pin漏lou洞dong率lv,這zhe意yi味wei著zhe可ke以yi更geng快kuai地di達da到dao軟ruan件jian發fa布bu標biao準zhun,讓rang您nin的de開kai發fa組zu織zhi在zai功gong能neng安an全quan認ren證zheng機ji構gou看kan來lai非fei常chang成cheng熟shu。雖sui然ran您nin永yong遠yuan不bu可ke能neng確que切qie地di知zhi道dao一yi個ge應ying用yong程cheng序xu中zhong還hai有you多duo少shao漏lou洞dong,但dan盡jin早zao地di多duo使shi用yong代dai碼ma分fen析xi工gong具ju可ke以yi減jian少shao漏lou洞dong的de數shu量liang。