阿里巴巴智能化代碼平臺的探索與實踐

2020年6月13日,在2020阿里巴巴研發效能峯會“架構設計與代碼智能專場”中阿里巴巴高級技術專家張玉明(玄壇)發表題爲《阿里巴巴智能化代碼平臺的探索與實踐》的主題演講,詳細介紹了阿里巴巴打造智能化代碼管理平臺的起因、技術難點和解決思路以及應用案例,併發布雲效智能研發助手“雲豆”。本文節選自玄壇的分享,爲方便開發者閱讀,刪除“背景”介紹部分,將集中講解雲效代碼管理平臺中智能化技術的應用以及實現原理。

 

人工智能賦能開發者 解決軟件研發問題

 

作爲一名開發者,在日常工作中會遇到哪些問題?主要有以下四點:需求不明確或需求經常變動;缺陷難發現:在開發的代碼中經常隱藏難以發現的BUG;編碼效率低:編碼效率不夠高,沒辦法合理安排編碼時間;線上問題難定位

 

有沒有解決以上問題的靈丹妙藥呢?雲效團隊給出的解法是“工具+數據+智能”。其實我們每天在使用的雲效代碼管理平臺、釘釘等都是非常好用的工具。在這些工具基礎之上,結合大數據、智能化手段是否可以在代碼編寫提效、代碼質量、安全提升方面做一些探索呢?

 

 

首先看一下我們在“大數據”方面是如何做的。在阿里巴巴集團內部的代碼管理平臺上每天都會產生大量代碼數據,我們將其中公開的代碼離線存儲到代碼倉庫中去構建代碼數倉。基於代碼數倉可以構建代碼圖譜,比如我們會以代碼、用戶、代碼庫這些維度進行抽象,將其轉化爲實體,並通過對這些實體關係的標籤化,從而構建代碼畫像、用戶畫像、代碼庫畫像。進而爲上層的智能化服務提供有力的數據支撐。同時我們以代碼爲中心,去拉通研發數據、協作數據、應用運行數據,去構建研發圖譜,圍繞整個研發生命週期去提供數據方面的支撐。

 

 

那麼有了這些數據,我們可以做什麼事情?基於評論數據,結合智能化手段,可以做到需求分析自動化,比如可以基於前臺用戶諮詢的問題,結合智能化手段來幫助產品經理明確用戶訴求,提煉產品文檔。基於代碼數據,可以實現代碼分析自動化,如可以應用到代碼缺陷檢測和代碼自動編寫等領域中。基於用戶的操作數據,可以做到軟件測試自動化,如現在很火爆的UI測試、Mock測試等。基於日誌數據,可以實現故障診斷自動化,如日誌自動打點、日誌智能分析以及服務智能降級等。

 

雲效推智能研發助手“雲豆” 代碼評審更智能

 

接下來看一下我們是如何在雲效代碼管理平臺(Codeup)中將代碼智能化能力進行落地的。首先來看代碼評審。

 

 

傳統的代碼評審分爲三個階段:新建評審、評審中、評審結束。在這三個階段中,用戶都會產生哪些行爲呢?在新建評審階段,首先需要選定某個分支,然後選擇評審人,最後需要填寫評審描述,通過這三步操作就新建了一個評審任務。在評審中,評審者首先要查看評審文件,然後提出問題,最後由開發者解決問題。如果評審通過,並完成合並代碼,則評審結束。

 

在上述過程中存在哪些痛點呢?在選擇評審人環節,開發者經常不知道應該選擇誰作爲這段代碼的評審者;在評審環節,評審者寫不清評審描述;變更文件過多,無法有效評審;在評審結束環節,經常需要人工去解決代碼衝突這類問題。

 

其實有“痛點”就有“機會點”,針對這些在代碼評審過程中的痛點,我們還可以做什麼呢?比如,是否可以智能推薦評審人?智能生成評審描述?是否可以對改動過多的“大評審”進行自動化拆解?在出現代碼衝突時,是否可以進行智能化修復?

 

 

 

 

請大家看一下這支視頻,視頻中出現的可愛形象是雲效智能研發助手——雲豆。“雲豆”可以在智能引導環節分享更規範的工作方法,在智能評審環節快速定位問題高效完成工作,在智能答疑環節推薦最優解法。比如在新建評審環節,當選擇好評審分支後,雲豆可以智能推薦最佳評審者;雲豆支持預估評審耗時,並可以根據預估評審耗時合理安排評審優先級,幫助開發者利用好碎片時間評審。在代碼質量方面,雲豆具備自動化質量和安全檢測能力,並可自動推薦修復方案。

 

 

我們可以將雲效智能研發助手“雲豆”提供的智能化評審過程抽象爲上面這張圖,當一個開發者新建了一個代碼評審,雲豆可以結合智能化及傳統自動化檢測手段對這段代碼進行全方位的檢測,並給出一個非常綜合的評審意見。此時評審者只需要在雲豆提供的評審意見之上,結合自己的工作經驗及對業務邏輯的理解給出補充的評審意見即可。

 

智能研發助手雲豆背後的能力:代碼缺陷檢測與補丁推薦-PRECFIX

 

在雲效智能研發助手雲豆提供的智能評審過程中,究竟涉及哪些智能化的能力呢?首先,我們來看代碼缺陷檢測與補丁推薦技術-PRECFIX。

 

 

在日常研發工作中,我們經常會用到P3C、PMD、FindBugs等傳統自動化檢測工具,但這些工具並不能完全解決阿里巴巴面臨的代碼質量問題。因爲傳統工具多是基於規則匹配,泛化能力不強,基於業務場景的缺陷很難識別出來。因此我們希望有一種對缺陷類型泛化能力比較強的缺陷檢測方法或者工具,於是提出PRECFIX方法(Patch Recommendation by Empirically Clustering)。PRECFIX的目標是通過智能化手段,可以實現毫秒級檢測,能夠修復部分偏業務缺陷,並給出對應的補丁推薦方案。

 

PRECFIX代碼檢測過程主要分爲三個階段:風險識別、缺陷定位、補丁推薦。這個過程會涉及行爲數據、代碼數據、日誌數據的處理,以及聚類算法、推薦算法、代碼建模、特徵提取、深度學習等算法技術。

 

PRECFIX的技術實現思路其實並不複雜,首先我們從阿里巴巴集團內部海量的公開代碼數據中提取代碼提交(Commit)信息,基於一定規則挖掘出“缺陷修復對”(缺陷代碼片段和補丁代碼片段的組合),然後通過聚類算法將相似的“缺陷修復對”聚類,提取出對應的代碼模板。在用戶發起評審時,系統會自動掃描變更代碼,若與缺陷模板庫匹配,則會推薦給用戶補丁模板用於修復。

 

 

PRECFIX方法已經在阿里巴巴集團內部落地,其誤報率在5%以下,在內部公開代碼庫中掃描出了800多種缺陷類型,3萬多個缺陷,提取出了3000多個補丁模板。

 

智能研發助手雲豆背後的能力:評審耗時預估

 

 

當存在多個待處理評審的情況時,“評審耗時預估”可以幫助評審人預知評審的工作量,合理安排評審時間,利用碎片化時間進行充分的評審,提升評審效率。

 

“評審耗時預估”的技術實現思路是怎樣的呢?首先從幾百萬次的代碼評審歷史瀏覽數據中抽取特徵,包括評審總行數、編程語言、歷史評審時長、歷史逐行時長等幾十個維度的特徵,從而去訓練機器學習模型。當一個開發者提交了代碼評審時,“雲豆”會從他提交的diff文件中提取這些特徵,從而估算這次評審需要的耗時。

 

智能研發助手雲豆背後的能力:敏感信息檢測SecretRadar

 

 

近年來,業內發生多起敏感信息(API Key、 Database credential、Private token)通過某些站點被無意識地泄露出去的事件,給企業帶來了安全風險。開發者和企業管理者亟需一款穩定健全的敏感信息檢測方法和系統。通過調研我們瞭解到,目前已有的敏感信息檢工具要麼單純考慮規則匹配,要麼採用信息熵技術實現,其召回率或準確率均無法滿足預期。因此我們在規則匹配和信息熵技術的基礎上,結合了多層檢測模型和上下文語義檢測,打造了一款敏感信息檢測工具 ——SecretRadar。

 

 

SecretRadar的技術實現思路主要分爲三層,第一層採用規則匹配這種傳統敏感信息識別技術,“規則匹配”具有良好的準確度和擴展性,但是非常依賴比較固化的長度、前綴、變量名,難以應對不同開發者的不同編碼風格,容易造成漏報。針對難以固定規則捕捉的場景,在第二層我們採用了信息熵算法。信息熵算法用於衡量代碼行混亂程度,對隨機生成型密鑰和隨機身份信息識別效果良好。但信息熵算法也有其侷限性,伴隨召回的提升是誤報率的增加。因此在第三層我們採用了模板聚類的方法進行過濾優化。針對信息熵結果集聚合提取常見關鍵字,並結合上下文分析完成二次過濾。同時通過問題的修復情況建立二分類數據集,完成算法優化。進而從詞法識別迭代爲語義識別。

 

智能研發助手雲豆背後的能力:代碼補全

 

代碼補全是當前代碼智能化領域研究的熱點。目前代碼補全工具主要分爲三種:基於語法解析器的代碼補全;基於統計機器學習的代碼補全;基於深度學習的代碼補全。基於語法解析器的代碼補全工具最爲大家熟知,我們平時使用的IDE中內置的補全工具基本都屬於這類。這種補全工具有個問題,就是補全結果沒有進行合理排序。基於統計機器學習的代碼補全工具不僅可以給出更加合理的補全候選方案,還可以從“補全概率”的維度對候選方案進行排序。但這種補全方式也有其侷限性,推薦的結果比較固定。

 

最近幾年,隨着NLP(自然語言處理)領域對自然語言建模能力的大幅度提升,這種能力也被應用到代碼補全上。相對於基於統計機器學習的代碼補全工具而言,基於深度學習的代碼補全系統能夠更大範圍的瞭解上下文語義,並結合大量數據,給開發者提供動態的代碼補全推薦。當然這種方式在訓練階段以及推理計算時會需要更強大的算力,因此在普通的PC機上基本沒辦法使用這種系統。業內通常的做法是將訓練好的模型部署到遠端服務器上,本地去進行實時查詢,因此對網絡的依賴比較強。

 

在代碼補全的探索中我們遇到很多挑戰和難點,主要有四個方面:不完整代碼上下文理解難度大;代碼片段補全準確率要求極高,對錯誤的容忍度非常低;多Token補全搜索空間無限大,算法效率和準確度難以提升;代碼中單詞的數目是無限大的,一般模型難以處理如此大的詞表。

 

針對以上問題,我們的策略是採用“算法手段+工程手段”相結合的解決方案。算法方面,採用本地+深度模型共同補全,挑選合適的分詞算法(如BPE分詞算法),並結合規則匹配的手段進行實現。在工程方面,通過整合現有語法服務給用戶帶來綜合體驗的提升。

 

我們的代碼補全流程設計如圖所示,分爲預處理階段、實時補全階段、後處理階段。在預處理階段,會進行變量/字符串替換、分詞、索引變量等處理。在實時補全階段,採取本地個性化補全模型和雲端深度補全模型相結合的方法,然後對多模型候選項進行合併、篩選和重排。在後處理階段,會進行變量名替換和填充、語義格式化等操作,並將最終補全候選方案推薦給開發者。

 

總結:

目前雲效智能研發助手“雲豆”主要可提供智能代碼評審、評審耗時預估、智能推薦評審人、代碼補全等智能化能力,未來“雲豆”還可以結合開發者個人研發習慣,提供更多功能。雲豆已經集成在雲效代碼管理平臺(Codeup)中,大家可以登錄雲效官網免費“領養”。

 

以上內容節選自張玉明(玄壇)的主題演講《阿里巴巴智能化代碼平臺的探索與實踐》,如果想了解完整分享內容可以進入2020阿里巴巴研發效能峯會官方網站收看回放視頻。

 

關於雲效:

雲效,企業級一站式DevOps平臺,源於阿里巴巴先進的管理理念和工程實踐,致力於成爲數字企業的研發效能引擎!雲效提供從“需求->開發->測試->發佈->運維->運營”端到端的在線協同服務和研發工具,通過人工智能、雲原生技術的應用助力開發者提升研發效能,持續交付有效價值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章