AI 不上位,與程式設計師合作寫程式碼才是正道

  • 2019 年 11 月 29 日
  • 筆記

By 超神經

著名的遊戲研發公司育碧( Ubisoft )和開源技術大廠 Mozila 近期發布了聯手開發的 Clever-Commit 編程輔助工具,為工程師提供 Bug 預警和更正的功能。

我們曾發布過文章《協助你寫 Python,只是 AI 取代程式設計師的第一步》,介紹了寫程式碼的過程中有越來越多的 AI 工具可以幫助工程師,提高自己的程式碼品質和工作效率。

協助你寫 Python,只是 AI 取代程式設計師的第一步(點擊圖片閱讀)

比如 GitHub CEO 投資的 Kite ,能夠智慧地根據當前的生產環境,起到程式碼片段補全、函數調用和文檔 demo 查詢的功能。我們因為 Kite 曾調侃 AI 的野心不止於給人類打下手,最終是要替代掉工程師職能的。

當然這些只是玩笑,就目前看來 AI 想要完全替代掉手藝人的可能性並不大,在未來更多的還是 AI 的介入幫助工程師更高效優質的工作。

當你發現你的程式碼運行不了

近日,一款由 Mozila 和育碧公司聯合開發的 AI 編碼助手 Clever-Commit 冒了出來,而它的作用,就是將 Firefox 後面的工程師從 Bug 中解救出來。2月12 日, Mozila 發出消息,他們與 Ubisoft 合作開始使用這款工具,促使程式碼編寫更高效,從而帶給 Firefox 的用戶更好的使用瀏覽體驗。

Clever-Commit :前方高能 Bug 預警!

Clever-Commit 的前身是 Ubisoft 於去年推出的 Commit- Assistant 。

Commit- Assistant 是用於查找 Bug 和建議修復的系統,它是一款輔助開發人員改善遊戲體驗的程式碼助手。而這個 AI 助手的誕生,得益於他們擁有龐大的程式碼庫。據稱,在訓練時,它接受了 Ubisoft 約十年的工作程式碼,包括有許多被修改過 Bug 的程式碼。

在這樣的背景下,Mozlia 和 Ubisoft 合作,推出了升級版的 Clever-Commit 。

Clever-Commit 是一款輔助編程工具,可以簡單的說是對程式碼進行檢查的 AI 助手。開發人員將程式碼更改提交到 Firefox 程式碼庫時,它能把新加入的程式碼和之前的進行比較,看是否和已經找出的 bug 類似。如果助手判斷新提交的部分很可疑,則會提醒開發人員。

如果這個助手的判斷準確率很高,這意味著可以在將 Bug 提交到源存儲庫之前查出並提醒。對於部分 Bug ,Clever-Commit 甚至可以提出合適的修復建議。

Mozilla 計劃首先在程式碼審查期間使用 Clever-Commit,然後隨著時間的推移,將其擴展到其他開發階段。值得一提的是,它完全適用於Mozilla用於Firefox的三種語言: C ++ , JavaScript 和 Rust 。

它發現 Bug 的原理是什麼?

其實它的出現是必然的,故障的自動預防和解決是軟體發展的一個必由之路。現有方法利用程式碼和流程度量來構建基於度量的模型,可以有效地防止軟體項目中的缺陷插入。

而這裡面用到的技術叫做 CLEVER ,最早是由 Ubisoft 和 Concordia 大學的研究人員開發出來的,他們曾寫過一篇論文《 CLEVER: Combining Code Metrics with Clone Detection for Just-In-Time Fault Prevention and Resolution in Large Industrial Projects 》,闡釋了它的細節,總的來說是一種結合級別的 Bug 預防和解決技術。

文章地址:https://montreal.ubisoft.com/wp-content/uploads/2018/05/ICSE-CE-MSR-165.pdf

它的要點在於將程式碼加入時,準確的判斷出是否是有風險的部分,從而進行攔截或者修復。

實施的方法主要有兩個階段,第一是基於已有指標建立一個庫,這能夠判斷新加入的程式碼是不是和有風險的程式碼相似;第二階段是在程式碼的克隆區加入這些看起來危險的程式碼,然後再判斷是否為風險程式碼。

此外, CLEVER 不僅僅只對當前項目評估,它的判定也考慮了其他的關聯項目,所以達到了更高的智慧性。基於程式碼庫匹配和之前的數據積累, CLEVER 在 Bug 識別率和改進意見方面都處在領先的水平。

Ubisoft 和 Firefox 的跨界合作

說到 CLEVER 為什麼厲害,那是因為它的背後,擁有強大的資源。Ubisoft 是影片遊戲界的巨頭,專門從事高預算影片遊戲的設計和實施。

Ubisoft 軟體系統高度耦合,包含數百萬個文件和提交,由分布在六大洲29個地點的8,000多名開發人員開發和維護。這對 CLEVER 的開發和訓練都是得天獨厚的優勢。

為了對比 CLEVER 的性能,他們在 12 個 Ubisoft 系統進行了測試,結果表明 CLEVER 對於有風險的程式碼提交,達到了 79% 的精度和 65% 的召回率,這超出同類方法 Commit-guru( 66% 精度和 63% 召回)的性能。此外,CLEVER 能夠向開發人員推薦如何修復 66.7% 的風險提交。

應用了 CLEVER 技術的 Clever-Commit,一旦完全融入 Mozilla 的開發流程,預計會取得很好的效果,這也會大大減少開發人員的苦楚。在提交之前,捕獲四到五個漏洞,比它們提交進去之後才發覺,要節省更多的資源。

Firefox 的工程團隊已經表明,將在其程式碼編寫,測試和發布過程中開始使用 Clever-Commit。他們期望能夠通過這個方法,節省數百小時的漏洞風險分析和檢測。

還有其他的?

使用機器學習從大型程式碼庫中進行 Bug 排查也有其他的嘗試。

去年,微軟就在 Visual Studio 中推出了類似的工具:IntelliCode

據悉,IntelliCode 研究了最受歡迎的公共 GitHub 存儲庫(超過 2,000 個項目,每個項目超過100顆),以發現最佳編碼實踐的特徵。

IntelliCode 的初始目的挺保守的,它根據其他項目如何使用相同的 API,通過了解哪些建議更有可能被使用,提供更智慧的 IntelliSense 完成建議。它還用於檢測編碼樣式和空格使用情況,以便它能夠以類似程式碼寫作風格的方式寫程式碼。

像 Clever-Commit 一樣,IntelliCode 可用於查找 Bug。對開發人員的一時紕漏進行及時的補救。

超神經小百科

注意力機制 Attention mechanism

視覺注意力機制是人類視覺所特有的大腦訊號處理機制。這是人類利用有限的注意力資源從大量資訊中快速篩選出高價值資訊的手段,是人類在長期進化中形成的一種生存機制,人類視覺注意力機制極大地提高了視覺資訊處理的效率與準確性。

深度學習中的注意力機制從本質上講和人類的選擇性視覺注意力機制類似,核心目標也是從眾多資訊中選擇出對當前任務目標更關鍵的資訊。

注意力模型( Attention Model )被廣泛使用在自然語言處理、影像識別及語音識別等各種不同類型的深度學習任務中,是深度學習技術中最值得關注與深入了解的核心技術之一。