Facebook開源Aroma: 通過機器學習向程式設計師推薦程式碼模板
為了簡化和加快編寫會對許多系統產生影響的程式碼的過程,工程師經常需要一種方法來查詢其他人如何編寫程式碼來處理類似的任務。我們建立了Aroma,一種程式碼到程式碼的搜尋和推薦工具,它使用機器學習(ML)使得從大型程式碼庫獲得洞察力的過程變得更加容易。
在Aroma之前,現有的工具都沒有完全解決這個問題。文件工具並不總是可用且可能過時,程式碼搜尋工具通常會返回無數匹配結果,並且很難立即找到慣用的使用模式。通過Aroma,工程師可以輕鬆找到常見的編碼模式,而無需手動瀏覽數十個程式碼段,從而節省了日常開發工作流程的時間和精力。
讓我們看看Android工程師想要了解其他人如何編寫類似程式碼的情況。假設工程師編寫以下內容來解碼Android手機上的點陣圖:
Bitmap bitmap = BitmapFactory.decodeStream(input); bitmap = BitmapFactory.decodeStream(input); |
這是可行的,但工程師想知道其他人如何在相關專案中實現此功能,尤其是設定了哪些常用選項,或處理了哪些常見錯誤,以避免應用程式在生產中崩潰。
Aroma使工程師能夠使用程式碼片段本身進行搜尋查詢。結果作為程式碼建議返回。每個程式碼建議都是從儲存庫中找到的類似程式碼片段的叢集中建立的,並表示常見的使用模式。以下是Aroma為此示例返回的第一條建議:
程式碼示例1
final BitmapFactory.Options options = new BitmapFactory.Options(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2;.inSampleSize = 2; // ...// ... Bitmap bmp = BitmapFactory.decodeStream(is, null, options); Bitmap bmp = BitmapFactory.decodeStream(is, null, options); |
這段程式碼建議是從儲存庫中找到的五個類似方法的集合中合成的。此處僅顯示了方法叢集中的公共程式碼,並在間隙(省略號...部分)中刪除了各個方法的具體細節。
這段程式碼建議試圖說明什麼?嗯,它說在五種不同的情況下,工程師在解碼點陣圖時設定了額外的選項。設定樣本大小有助於減少解碼大點陣圖時的記憶體消耗,實際上,Stack Overflow上的一個熱門帖子暗示了相同的模式。Aroma通過發現包含此模式的程式碼片段集自動建立此建議。
讓我們看看另一個建議。
程式碼示例2
try { { InputStream is = am.open(fileName);InputStream is = am.open(fileName); image = BitmapFactory.decodeStream(is);= BitmapFactory.decodeStream(is); is.close();is.close(); } catch (IOException e) {} catch (IOException e) { // ...// ... }} |
此程式碼段是從另外四種方法聚類而來的。它顯示了InputStream在解碼點陣圖中的慣用用法。此外,此建議演示了在開啟InputStream時捕獲潛在IOException的良好做法。如果此異常在執行時發生且未捕獲,則應用程式將立即崩潰。負責任的工程師應使用此建議擴充套件程式碼並正確處理此異常。
與傳統的程式碼搜尋工具相比,Aroma的程式碼推薦功能有以下幾個優點:
- Aroma在語法樹上執行搜尋。Aroma不是尋找字串級別或令牌級別的匹配,而是可以找到語法上與查詢程式碼類似的例項,並通過修剪不相關的語法結構來突出顯示匹配的程式碼。
- Aroma自動將類似的搜尋結果聚集在一起以生成程式碼建議。這些建議代表慣用的編碼模式,比非聚集搜尋匹配更容易使用。
- Aroma足夠快,可以實時使用。在實踐中,即使對於非常大的程式碼庫,它也會在幾秒鐘內建立建議,並且不需要提前進行模式挖掘。
- Aroma的核心演算法與語言無關。我們在Hack,JavaScript,Python和Java的內部程式碼庫中部署了Aroma。
相關文章
- 【收藏系列】程式設計師高效學習資源站點推薦程式設計師
- 程式設計師歌曲推薦程式設計師
- metarank: 推薦排名類的低程式碼機器學習工具機器學習
- 推薦 | 機器學習開源專案 Top 10機器學習
- 頂級程式設計師推薦的程式設計開發書籍【整合】程式設計師
- 學習 Qt 程式設計的好書精品推薦!QT程式設計
- 程式設計師朋友推薦的好用API程式設計師API
- 推薦幾個私藏的適合99%程式設計師的開源專案程式設計師
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- 《機器學習:演算法原理和程式設計實踐》4:推薦系統原理機器學習演算法程式設計
- 好程式設計師Python培訓分享開發工具推薦程式設計師Python
- 資源 | 普通程式設計師如何自學機器學習?這裡有一份指南~程式設計師機器學習
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 轉行學程式設計推薦學什麼?程式設計
- 通過 SingleFlight 模式學習 Go 併發程式設計模式Go程式設計
- 開源四足機器人 附設計圖及程式碼機器人
- 每個程式設計師都在推薦的好用api程式設計師API
- 程式設計師經典書籍推薦-附 PDF程式設計師
- 推薦幾個好用的程式設計師效率神器程式設計師
- 強烈推薦!最好用的《機器學習實用指南》第二版終於來了,程式碼已開源!機器學習
- 初學者學習Java程式設計的基礎書籍推薦Java程式設計
- 用Python進行機器學習(附程式碼、學習資源)Python機器學習
- 機器學習完整資源推薦(持續更新中)機器學習
- 寫給Java程式設計師的Java虛擬機器學習指南Java程式設計師虛擬機機器學習
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 程式設計師們都在推薦使用的API介面大全程式設計師API
- 免費好用api推薦,程式設計師的介面福利API程式設計師
- 讀HikariCP原始碼學Java(一)-- 通過ConcurrentBag類學習併發程式設計思想原始碼Java程式設計
- 程式導向程式設計哲學程式設計
- Python學習之物件導向程式設計Python物件程式設計
- 好程式設計師Java學習資源分享RabbitMQ介紹程式設計師JavaMQ
- 1024程式設計師節:向改變世界的程式設計師致敬程式設計師
- 推薦一波知名學府的計算機/程式設計/AI免費公開課計算機程式設計AI
- 程式設計師英語學習指南程式設計師
- PHP 程式設計師的堆學習PHP程式設計師
- 程式設計師,請停止學習框架!程式設計師框架
- 好程式設計師Python培訓分享機器學習面試題一程式設計師Python機器學習面試題
- 機器學習必看書籍推薦機器學習