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。
相關文章
- 推薦!國外程式設計師整理的機器學習資源大全程式設計師機器學習
- 程式設計師歌曲推薦程式設計師
- 程式設計師推薦書單程式設計師
- 國外程式設計師推薦的免費程式設計書籍資源程式設計師
- 老程式設計師推薦10個程式設計策略程式設計師
- 頂級程式設計師推薦的程式設計開發書籍【整合】程式設計師
- 程式設計師面試 刷題推薦程式設計師面試
- 推薦!國外程式設計師整理的Java資源大全程式設計師Java
- 推薦!國外程式設計師整理的PHP資源大全程式設計師PHP
- 推薦!國外程式設計師整理的 PHP 資源大全程式設計師PHP
- 推薦幾個私藏的適合99%程式設計師的開源專案程式設計師
- 程式設計師朋友推薦的好用API程式設計師API
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- 【收藏系列】程式設計師高效學習資源站點推薦程式設計師
- 推薦!國外程式設計師整理的 C++ 資源大全程式設計師C++
- 國外程式設計師推薦:每個程式設計師都應讀的書程式設計師
- 國外程式設計師推薦:每個程式設計師都應該讀的非程式設計書程式設計師
- 好程式設計師Python培訓分享開發工具推薦程式設計師Python
- 程式設計師簡歷模板程式設計師
- 推薦!國外程式設計師整理的系統管理員資源大全程式設計師
- 【推薦】程式設計師/設計師能用上的75份速查表程式設計師
- 程式設計師經典書籍推薦-附 PDF程式設計師
- 推薦幾個好用的程式設計師效率神器程式設計師
- 每個程式設計師都在推薦的好用api程式設計師API
- 推薦Java程式設計師閱讀的書籍Java程式設計師
- 推薦 | 機器學習開源專案 Top 10機器學習
- 如何向新手程式設計師介紹程式設計?程式設計師
- metarank: 推薦排名類的低程式碼機器學習工具機器學習
- StackOverflow程式設計師推薦:每個程式設計師都應讀的30本書(轉載)程式設計師
- 程式設計師們都在推薦使用的API介面大全程式設計師API
- 免費好用api推薦,程式設計師的介面福利API程式設計師
- 2015,為程式設計師推薦書單程式設計師
- Android程式設計師必讀電子書推薦Android程式設計師
- 推薦閱讀:<<Java程式設計師的修煉之道>>Java程式設計師
- 程式設計科普書籍推薦程式設計
- 新時代程式設計字型推薦程式設計
- 推薦的程式設計網站程式設計網站
- 10年DotNet老程式設計師推薦的7個開發工具程式設計師