演講嘉賓 | 晉武俠
回顧整理 | 廖 濤
排版校對(duì) | 李萍萍
嘉賓介紹
晉武俠,西安交通大學(xué)軟件學(xué)院副教授。研究領(lǐng)域包括:代碼分析、軟件架構(gòu)治理、智能軟件工程。獲2022年陜西省優(yōu)博;主持參與多項(xiàng)國(guó)家自然科學(xué)基金項(xiàng)目、國(guó)家重點(diǎn)研發(fā)項(xiàng)目等;擔(dān)任多個(gè)國(guó)際知名會(huì)議期刊審稿人。
視頻回顧
打開(kāi)嗶哩嗶哩APP,觀看更清晰視頻
正文內(nèi)容
在軟件生命周期各個(gè)階段,有不同形態(tài)的工具輔助開(kāi)發(fā)維護(hù)人員的實(shí)踐活動(dòng),提高工作效率。應(yīng)對(duì)代碼級(jí)問(wèn)題的方法工具廣泛存在,特別是智能化技術(shù)使得代碼級(jí)問(wèn)題解決成本越來(lái)越低。然而,相比代碼級(jí)問(wèn)題,架構(gòu)級(jí)問(wèn)題貫穿軟件生命周期,發(fā)現(xiàn)難、影響廣、代價(jià)高。如何分析、定位、解決這類(lèi)架構(gòu)級(jí)問(wèn)題呢?西安交通大學(xué)副教授晉武俠在第二屆OpenHarmony技術(shù)大會(huì)上進(jìn)行了精彩分享。
開(kāi)發(fā)者工具貫穿了軟件開(kāi)發(fā)的全生命周期,提供了項(xiàng)目管理、原型設(shè)計(jì)、高效代碼開(kāi)發(fā)、自動(dòng)化測(cè)試與集成以及性能監(jiān)測(cè)等能力。隨著人工智能技術(shù)的快速發(fā)展,軟件開(kāi)發(fā)者工具從自動(dòng)化向智能化演進(jìn)。傳統(tǒng)的自動(dòng)化工具更傾向于執(zhí)行預(yù)定義的、重復(fù)的任務(wù),而智能化工具旨在模擬人類(lèi)的思維過(guò)程,做出更復(fù)雜的決策。
尤其,智能化技術(shù)使得代碼級(jí)問(wèn)題解決成本越來(lái)越低。然而,相比于代碼層問(wèn)題,架構(gòu)層問(wèn)題可能更加棘手,主要有以下特點(diǎn):
發(fā)現(xiàn)難:代碼級(jí)問(wèn)題大部分都是01問(wèn)題,是顯性的,能夠及時(shí)感知,通常影響功能和性能;而架構(gòu)級(jí)問(wèn)題大部分為非01問(wèn)題,是隱性的,影響可維護(hù)性,會(huì)隨著演化過(guò)程癥狀逐漸凸顯。
影響廣:代碼級(jí)問(wèn)題往往影響單一模塊,大部分修復(fù)往往在較小范圍內(nèi)進(jìn)行;而架構(gòu)層問(wèn)題可能影響整個(gè)系統(tǒng),修復(fù)經(jīng)常需要重大設(shè)計(jì)調(diào)整或重構(gòu)。
成本高:由于架構(gòu)腐化會(huì)導(dǎo)致維護(hù)困難、性能下降等問(wèn)題,使開(kāi)發(fā)團(tuán)隊(duì)需要投入更多的時(shí)間和資源來(lái)解決,增加了開(kāi)發(fā)和維護(hù)的成本。此外,如果架構(gòu)腐化嚴(yán)重到一定程度,可能還需要進(jìn)行大規(guī)模的系統(tǒng)重構(gòu)。
如何解決架構(gòu)層問(wèn)題?本次報(bào)告提倡以架構(gòu)為中心的開(kāi)發(fā)者工具的解題思路,從“根”上促進(jìn)軟件系統(tǒng)長(zhǎng)期健康演化。怎樣實(shí)施以架構(gòu)為中心?架構(gòu)管理的復(fù)雜性在于依賴(lài)的復(fù)雜性,基于代碼依賴(lài)的架構(gòu)分析旨在利用代碼依賴(lài)彌補(bǔ)底層代碼細(xì)節(jié)和高層架構(gòu)之間的鴻溝,從架構(gòu)視角來(lái)分析、定位、解決開(kāi)發(fā)者日?;顒?dòng)遇到的問(wèn)題,幫助從“根”上提前預(yù)警、避免、消除軟件的可維護(hù)性問(wèn)題,促進(jìn)軟件系統(tǒng)長(zhǎng)期健康演化,提高軟件研發(fā)效能。
接下來(lái),首先介紹工具底層基礎(chǔ)技術(shù)(即代碼依賴(lài)解析)的最新進(jìn)展;再以開(kāi)發(fā)者日常代碼合入為例,分享如何以架構(gòu)視角定位致使沖突頻發(fā)的根因;最后以代碼重構(gòu)活動(dòng)為應(yīng)用,展示架構(gòu)驅(qū)動(dòng)的思路如何幫助推薦重構(gòu)方案,消除潛在架構(gòu)問(wèn)題。
核心技術(shù):代碼依賴(lài)解析
代碼依賴(lài)解析旨在從軟件制品中提取出代碼結(jié)構(gòu)性實(shí)體或者符號(hào)級(jí)實(shí)體之間的依賴(lài)關(guān)系。目前,已有的代碼依賴(lài)解析技術(shù)包括:繼承體系分析(CHA)、抽象解釋、模塊摘要分析、深度學(xué)習(xí)、指向分析(PA)、快速類(lèi)型分析技術(shù)(RTA)、基于中間表示的分析、啟發(fā)式規(guī)則等;已有的代碼依賴(lài)解析工具或產(chǎn)品包括:、CodeScene、Doxygen、SCITool Understand等?,F(xiàn)代編程語(yǔ)言的duck typing、first-class function/class /module、object change等特性使得編程靈活高效,但同時(shí)導(dǎo)致代碼行為隱匿,使得代碼依賴(lài)難以準(zhǔn)確解析。
為此,作者及其團(tuán)隊(duì)提出了多語(yǔ)言代碼依賴(lài)抽取框架——ENRE,解決了隱式依賴(lài)難以精準(zhǔn)分析的難題,增強(qiáng)了已有代碼靜態(tài)分析工具的能力。ENRE目前支持C/C++、Java、Python、JavaScript/TypeScript等編程語(yǔ)言的代碼靜態(tài)分析,能夠解析出50余類(lèi)實(shí)體和50余類(lèi)依賴(lài)?;贓NRE解析的代碼依賴(lài),能夠增強(qiáng)已有開(kāi)發(fā)者工具代碼度量的準(zhǔn)確性,使已有的質(zhì)量掃描工具減少漏報(bào)。
應(yīng)用一:面向代碼合入沖突的架構(gòu)問(wèn)題定位
在下游系統(tǒng)基于上游定制開(kāi)發(fā)過(guò)程中,由于各原因無(wú)法與上游代碼同步合并、小步基線升級(jí),下游擴(kuò)展代碼相對(duì)于上游代碼形成一個(gè)長(zhǎng)期存在大版本分支。當(dāng)大版本升級(jí)時(shí),勢(shì)必兩個(gè)版本分支合并出現(xiàn)代碼“沖突爆炸”。現(xiàn)有工作提出了基于K-shot學(xué)習(xí)和 GPT等預(yù)訓(xùn)練模型的自動(dòng)合并沖突消解方法,側(cè)重于在代碼層面解決合并沖突問(wèn)題,可以有效消解當(dāng)次沖突。
作者及其團(tuán)隊(duì)提出了面向代碼沖突的架構(gòu)問(wèn)題檢測(cè),通過(guò)檢測(cè)上下游代碼之間的耦合切面,識(shí)別導(dǎo)致沖突頻繁的架構(gòu)反模式。一旦修復(fù)這類(lèi)架構(gòu)反模式,則可以緩解下次版本升級(jí)沖突量,預(yù)警沖突,實(shí)現(xiàn)風(fēng)險(xiǎn)左移,帶來(lái)長(zhǎng)遠(yuǎn)效益。
應(yīng)用二:面向架構(gòu)一致性的代碼重構(gòu)推薦
重構(gòu)是在不改變代碼外部行為的情況下改進(jìn)軟件系統(tǒng)內(nèi)部結(jié)構(gòu)的過(guò)程。根據(jù)最新文獻(xiàn)調(diào)研,開(kāi)發(fā)人員在重構(gòu)活動(dòng)上花費(fèi)了大量的時(shí)間和精力?,F(xiàn)有的解決方案主要有:開(kāi)發(fā)者基于IDEA重構(gòu)工具人工選擇重構(gòu);基于指標(biāo)識(shí)別消除代碼壞味道的自動(dòng)重構(gòu);基于多目標(biāo)優(yōu)化算法搜索優(yōu)化代碼質(zhì)量的自動(dòng)重構(gòu)等。上述方法主要集中在解決代碼級(jí)別的問(wèn)題,如代碼的質(zhì)量、壞味道等,缺乏解決軟件架構(gòu)層面的問(wèn)題例如架構(gòu)不一致。架構(gòu)不一致性體現(xiàn)在代碼的設(shè)計(jì)架構(gòu)和實(shí)現(xiàn)架構(gòu)相違背,出現(xiàn)架構(gòu)漂移,導(dǎo)致軟件系統(tǒng)難以維護(hù)和健康演化。
面向架構(gòu)不一致問(wèn)題,作者及其團(tuán)隊(duì)提出了基于代碼依賴(lài)的架構(gòu)逆向幫助定位候選重構(gòu)文件的方法,加速重構(gòu)方案搜索過(guò)程的收斂。例如,如果從代碼實(shí)現(xiàn)逆向的架構(gòu)與其包結(jié)構(gòu)之間存在顯著差異,這可能代表了關(guān)鍵的架構(gòu)問(wèn)題,需要優(yōu)先進(jìn)行重構(gòu)。該方法同時(shí)引入了多類(lèi)前置條件和后置策略,提升重構(gòu)操作的可行性,減少實(shí)時(shí)重構(gòu)的編譯錯(cuò)誤、運(yùn)行錯(cuò)誤?;谠摲椒ǎ髡呒捌鋱F(tuán)隊(duì)實(shí)現(xiàn)了一個(gè)命名為3ERefactor的VSCode插件,為開(kāi)發(fā)者在IDE環(huán)境中提供自動(dòng)化重構(gòu)方案推薦,從而消除當(dāng)前代碼與目標(biāo)架構(gòu)相違約的實(shí)現(xiàn),提升架構(gòu)一致性。
綜上所述,自動(dòng)化、智能化技術(shù)使得代碼級(jí)問(wèn)題解決成本越來(lái)越低。相比代碼級(jí)問(wèn)題,架構(gòu)級(jí)問(wèn)題貫穿軟件生命周期,發(fā)現(xiàn)難、影響廣、代價(jià)高。開(kāi)發(fā)者工具不僅要關(guān)注代碼級(jí)問(wèn)題,也要關(guān)注架構(gòu)級(jí)問(wèn)題,利用代碼依賴(lài)填補(bǔ)代碼與架構(gòu)間的鴻溝,基于代碼依賴(lài)分析、定位、解決軟件架構(gòu)級(jí)問(wèn)題,實(shí)現(xiàn)全生命周期的軟件架構(gòu)看護(hù)和治理。
E N D
關(guān)注我們,獲取更多精彩。
原文標(biāo)題:第二屆大會(huì)回顧第13期 | 以架構(gòu)為中心的開(kāi)發(fā)者工具的核心技術(shù)與應(yīng)用
文章出處:【微信公眾號(hào):OpenHarmony TSC】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
開(kāi)發(fā)者
+關(guān)注
關(guān)注
1文章
575瀏覽量
17013 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3722瀏覽量
16323
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論