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