演講嘉賓 |蔡源稻
回顧整理 | 廖 濤
排版校對 | 宋夕明

嘉賓介紹
研究分論壇
蔡源稻,華為2012實(shí)驗(yàn)室技術(shù)專家。
正文內(nèi)容
靜態(tài)分析(Static Analysis)是軟件開發(fā)中不可或缺的一部分,它可以幫助開發(fā)人員提高代碼質(zhì)量、減少缺陷和安全風(fēng)險(xiǎn)。OpenHarmony的編譯環(huán)境復(fù)雜,代碼量巨大,且由多種編程語言混合編程,在靜態(tài)分析上存在不小挑戰(zhàn)。如何提升OpenHarmony靜態(tài)分析的準(zhǔn)確性和效率?華為2012實(shí)驗(yàn)室技術(shù)專家蔡源稻在第三屆OpenHarmony技術(shù)大會上進(jìn)行了精彩分享。

在軟件開發(fā)的生命周期中,代碼的質(zhì)量和安全性至關(guān)重要。隨著軟件系統(tǒng)的復(fù)雜性不斷增加,如何在有限的時(shí)間和資源內(nèi),確保軟件的功能正確性、性能優(yōu)化以及安全性?這就涉及兩種重要的分析技術(shù):靜態(tài)分析和動態(tài)分析。
動態(tài)分析指在程序運(yùn)行時(shí)對其行為進(jìn)行監(jiān)控和分析,能夠捕捉到實(shí)際運(yùn)行中的性能瓶頸、內(nèi)存泄漏和競態(tài)條件等問題。相對而言,靜態(tài)分析則在不執(zhí)行程序的情況下利用軟件結(jié)構(gòu)窮舉軟件所有可能的運(yùn)行時(shí)行為并將這些行為以數(shù)據(jù)結(jié)構(gòu)形式記錄,從而幫助開發(fā)者在早期階段發(fā)現(xiàn)潛在的錯(cuò)誤、安全漏洞和代碼質(zhì)量問題。
對于OpenHarmony而言,由于其編譯環(huán)境復(fù)雜,代碼量巨大,且由多種編程語言混合編程,靜態(tài)分析存在以下挑戰(zhàn):
覆蓋率不高:靜態(tài)分析理論上可以完整覆蓋程序運(yùn)行行為,但工程代價(jià)太高/分析效率太低,導(dǎo)致實(shí)際上覆蓋率不高;同時(shí),動態(tài)分析也無法完整覆蓋程序。

無法適配復(fù)雜編譯:靜態(tài)分析工具需要干預(yù)編譯過程來獲得待分析代碼(IR),OpenHarmony的編譯環(huán)境復(fù)雜 (涉及多個(gè)編譯器,一個(gè)編譯器不同版本),很難滿足此要求。

分析代價(jià)高:精確的靜態(tài)分析,如控制流敏感、函數(shù)上下文敏感、路徑敏感分析需要較高的分析代價(jià)(時(shí)間、內(nèi)存)。對于OpenHarmony海量的代碼而言,現(xiàn)有靜態(tài)分析方法無法在物理資源和時(shí)間限制下完成代碼分析。

庫函數(shù)建模困難:由于庫函數(shù)(e.g., STL C++)需要手動建模才能適配靜態(tài)分析,但已有靜態(tài)分析遇到未知庫函數(shù)只能做保守假設(shè)或直接丟棄結(jié)果。

針對上述問題,作者本人提出了以下解決方案,并介紹了當(dāng)前在研產(chǎn)品“費(fèi)馬分析器(Fermat Analyzer)”的部分創(chuàng)新技術(shù)點(diǎn):
非侵入編譯的IR構(gòu)建:非侵入編譯的IR構(gòu)建(Non-intrusive Compilation for IR Construction)是一種在編譯過程中構(gòu)建中間表示(Intermediate Representation, IR)的技術(shù),其核心特點(diǎn)是在不修改或侵入源代碼的情況下生成IR。在正向編譯時(shí),無需修改編譯環(huán)境,套用工具在編譯腳本即可完成IR構(gòu)建;而反編譯時(shí),翻譯可以處理第三方庫,二進(jìn)制形式等產(chǎn)品模塊。

基于PDG的稀疏值流分析:Program Dependence Graph(PDG)是一種用于表示程序中語句或指令之間依賴關(guān)系的圖形化數(shù)據(jù)結(jié)構(gòu)。通過簡潔編碼數(shù)據(jù)依賴和控制依賴,能夠清晰地表示程序的執(zhí)行邏輯,并優(yōu)化分析過程。具體做法有:(1)拋棄全局窮盡式的指針分析,通過高精度局部指針分析,發(fā)現(xiàn)并記錄因?yàn)橹羔槻僮鳟a(chǎn)生的函數(shù)內(nèi)的內(nèi)存讀寫數(shù)據(jù)依賴;(2)跨函數(shù)在按需分析時(shí)在調(diào)用函數(shù)中將跨函數(shù)數(shù)據(jù)依賴對齊;(3)指針同化為普通數(shù)據(jù)流,賦能按需計(jì)算,可理解為 IFDS 加入路徑條件和指針信息。

持久化設(shè)計(jì),分析復(fù)用:通過復(fù)用第三方庫分析結(jié)果,能夠加速分析,減少內(nèi)存占用;通過程序拆分,可在單機(jī)上完成大規(guī)模代碼分析。

大模型使能與輔助:當(dāng)前,AI技術(shù)的快速發(fā)展,使大模型與代碼分析相結(jié)合是一個(gè)重要趨勢。例如,將大模型使能規(guī)約推斷:函數(shù)行為推斷(內(nèi)存創(chuàng)建/釋放,中斷函數(shù)等),API別名信息推斷;或通過大模型輔助誤報(bào)診斷:基于缺陷程序切片以及缺陷信息進(jìn)行誤報(bào)診斷。

接下來,對于復(fù)雜代碼的靜態(tài)分析的實(shí)際問題,看看費(fèi)馬分析器是如何解決的:
一、并發(fā)內(nèi)存安全錯(cuò)誤檢查。現(xiàn)有的關(guān)于并發(fā)程序分析的精確方法往往效率較低。Canary方法首次將并發(fā)錯(cuò)誤檢測轉(zhuǎn)化為Source-Sink值流 (Value Flow)的檢查,通過監(jiān)視內(nèi)存對象在數(shù)據(jù)依賴關(guān)系中沿指針之間的流動,觀察到Source最終沿Sink流路徑到達(dá)匯。因此,考慮到只有對線程共享內(nèi)存位置的內(nèi)存訪問才重要,許多線程執(zhí)行交錯(cuò)對于檢測的并發(fā)錯(cuò)誤來說是無關(guān)緊要的,費(fèi)馬分析器采取了減少指數(shù)級爆炸的線程交錯(cuò)分析的方法。

二、準(zhǔn)確高效的死鎖檢查。在執(zhí)行上下文敏感的死鎖檢測時(shí),容易出現(xiàn)函數(shù)上下文爆炸的問題 (Calling Context Explosion)。考慮到許多函數(shù)上下文對死鎖檢測來說是無關(guān)緊要的,因此,費(fèi)馬分析器采取了Peahen方法(第一種用于緩解低效問題的函數(shù)上下文縮減技術(shù) (Context Reduction)),通過對兩個(gè)協(xié)同階段進(jìn)行昂貴的函數(shù)上下文敏感計(jì)算的分解,進(jìn)行上下文無關(guān)的鎖圖構(gòu)建以發(fā)現(xiàn)死鎖相關(guān)的函數(shù)。

三、準(zhǔn)確高效的函數(shù)調(diào)用圖:雞尾酒療法。對于解析函數(shù)指針的值,以及構(gòu)建C代碼的函數(shù)調(diào)用圖,傳統(tǒng)單一模式 (e.g., SVF, LLVM)——即用一種精度來分析所有的間接調(diào)用,往往要么不精確要么不高效。費(fèi)馬分析器采用多種精度來分析所有的間接調(diào)用,以自動準(zhǔn)確的方式?jīng)Q定一個(gè)間接調(diào)用需要哪種準(zhǔn)確的分析,并采用合適的精度來回避計(jì)算資源浪費(fèi)。

未來,隨著AI大模型的迅速發(fā)展,代碼規(guī)模和分布式架構(gòu)的復(fù)雜性都不斷提高,靜態(tài)分析作為系統(tǒng)可信和軟件質(zhì)量的重要保障,也正從傳統(tǒng)的模式匹配向智能化、場景化方向演進(jìn)。隨著技術(shù)的不斷進(jìn)步,靜態(tài)分析將在軟件開發(fā)的各個(gè)環(huán)節(jié)發(fā)揮更加關(guān)鍵的作用,為構(gòu)建高質(zhì)量、高性能、高安全性的軟件系統(tǒng)提供堅(jiān)實(shí)的支持。
-
編程
+關(guān)注
關(guān)注
90文章
3724瀏覽量
97458 -
代碼
+關(guān)注
關(guān)注
30文章
4977瀏覽量
74419 -
混合編程
+關(guān)注
關(guān)注
0文章
27瀏覽量
8471 -
靜態(tài)分析
+關(guān)注
關(guān)注
1文章
46瀏覽量
4221 -
OpenHarmony
+關(guān)注
關(guān)注
33文章
3977瀏覽量
21377
發(fā)布評論請先 登錄
理工雷科亮相第三屆香港世界青年科學(xué)大會
帝奧微第三屆經(jīng)銷商大會圓滿舉行
第三屆開放原子大賽首批賽項(xiàng)頒獎(jiǎng)儀式圓滿落幕
第三屆引望車聯(lián)網(wǎng)安全大會圓滿結(jié)束
中興通訊第三屆學(xué)習(xí)發(fā)展大會圓滿收官
國際星閃聯(lián)盟亮相第三屆電子紙產(chǎn)業(yè)創(chuàng)新大會
第三屆開放原子大賽正式啟動
奇異摩爾出席第三屆芯粒開發(fā)者大會AI芯片與系統(tǒng)分論壇
行芯科技亮相第三屆芯粒開發(fā)者大會
第三屆大會回顧第6期 | HarmonyOS NEXT原生智能,助力應(yīng)用低成本生而智能
第三屆大會回顧第7期 | 面向OpenHarmony大規(guī)模代碼的路徑敏感的稀疏值流分析
評論