成人不卡在线,日日夜夜网站,国产精品天天看,日韩理论在线播放

智能化軟件開發(fā):程序員與 AI 機器人一起結對編程

軟件 2018-10-30 19:05:45 來源:雷鋒網

原標題:智能化軟件開發(fā):程序員與 AI 機器人一起結對編程

雷鋒網 AI 科技評論按:伴隨著 AI 技術的發(fā)展和應用,人們對「人工智能」的認知也不斷被刷新和拓展,在大眾眼中,AI 正變得越來越強大,不僅可以下棋博弈戰(zhàn)勝人類的頂尖選手,還可以進行語音識別、自動翻譯、人臉識別,甚至可以自動駕駛汽車。最近,北京大學與硅心科技團隊聯(lián)合推出了一項新的 AI 成果——aiXcoder,它利用 AI 技術輔助開發(fā)者自動進行程序編寫,引燃了人們關于「AI+軟件」的巨大發(fā)展?jié)摿σ约啊杠浖_發(fā)自動化」發(fā)展前景的討論與思考。

讓計算機自動編寫代碼,不僅是軟件開發(fā)領域關心的問題,也是人工智能領域長期關心的問題。早在 1964 年,機器學習領域的先驅者 Solomonoff 就曾提出,「對人類而言,編寫計算機程序是一項既困難又耗時的活動,通過自動代碼生成或程序歸納來實現(xiàn)這個過程的自動化是人工智能領域的一個長期研究主題?!菇陙?,DeepMind 和 Facebook 在其論文中也提出了類似的論述。

那么,在沒有人類程序員干預的情況下,完全依賴 AI 技術進行程序代碼生成,當前的研究進展情況如何呢?下面是近年來的幾項典型研究工作:

  • 2016 年,Google Deep Mind 發(fā)表了論文「Neural Programmer-Interpreters」,提出了一種利用程序的輸入輸出結果生成簡單程序的深度神經網絡模型,但它生成程序的規(guī)模具有較大限制,通常是由簡單指令組合而成的短小程序;

    2017 年,F(xiàn)acebook 在論文「Unsupervised Program Induction with Hierarchical Generative Convolutional Neural Networks」中也提出了一種在包含 8 種基本指令的數(shù)據(jù)集上選擇指令,組合出程序的方法;

    同年,微軟針對類似的問題發(fā)表論文「DeepCoder: Learning to Write Programs」提升了程序生成的速度,但在程序規(guī)模與生成效果上仍未能取得質的提升。

    這些成果對程序自動生成的研究起到了重要的推動作用,但同時也可以看出,在完全不依賴程序員的場景下,進行工業(yè)級程序的編寫,仍需要進一步研究。

    與上述研究思路不同,來自北京大學的研究團隊,正致力于「輔助人類程序員自動編寫程序代碼」?!鸽m然在完全不依賴人類程序員的場景中自動生成程序仍需進一步研究,但我們可以利用人工智能技術來輔助人類編寫程序。」北京大學高可信軟件技術教育部重點實驗室副教授李戈對雷鋒網表示,「我們已經在『利用 AI 輔助程序員編程,以提高程序編寫的效率和質量』方面取得了重要的研究進展?!?/p>

    李戈所在的研究團隊是國際上最早從事基于深度神經網絡的計算機程序分析與生成研究的團隊之一,在代碼功能語義分析、代碼自動生成與補全等方面的研究成果受到國內外同行的高度關注。近年來,該團隊取得了一系列重要研究成果,形成了一批重要的行業(yè)專利及學術論文?;谒〉玫目蒲谐晒?,李戈所在實驗室正轉向產業(yè)化應用,致力于將「智能化軟件開發(fā)技術」轉化為能夠支持工業(yè)界生產的商業(yè)產品——aiXcoder。

    aiXcoder 智能編程機器人

    aiXcoder 是一款全新的智能編程機器人產品,它采用與程序員一起「結對編程」的方式為程序員提供服務,從而提高程序員的編程效率。在 aiXcoder 的輔助下,程序將徹底擺脫傳統(tǒng)的編程模式,不再需要「逐字逐句」編寫程序。

    aiXcoder 能夠自動預測程序員的編程意圖,連續(xù)向程序員推薦「即將書寫的下一段代碼」,程序員可以通過「一鍵補全」的方式,直接確認接下來輸入的代碼,從而大大提升代碼的編寫效率。同時,aiXcoder 還能夠在程序編程的過程中,不斷智能地搜索并推薦與當前程序功能相似的規(guī)范程序代碼,為程序員提供有力的編程參考。目前,aiXcoder 編程機器人已經推出了 Android、JFinal、Tensorflow 等多個版本,為不同領域的編程者提供輔助。

    據(jù) aiXcoder 研發(fā)團隊的核心技術人員郝逸洋對雷鋒網介紹:aiXcoder 采用了先進的專門應用于程序分析與生成的特定深度神經網絡模型,并利用嚴格篩選的海量領域源代碼數(shù)據(jù)進行訓練,從而使 aiXcoder 能夠充分學習和掌握隱含于海量代碼中的編碼模式與規(guī)律,并將該信息用于后續(xù)代碼的生成與補全。

    不僅如此,經過訓練的 aiXcoder 還能快速了解一個程序員的個人編程習慣,自動記錄程序員常用的程序模式、常用的 API 調用序列等等,從而在程序員編程過程中進行有效地自動輔助,在最大程度上協(xié)助程序員自動完成非創(chuàng)造性的編程工作。

    當前,aiXcoder 采用「云服務」的運行模式,其深度學習模型如同部署在云端的「編程大腦」,其客戶端以插件的形式集成在 IDE 中,實現(xiàn)了與 IntelliJ、Eclipse、VS-Code 等主流集成開發(fā)平臺的無縫對接,程序員可以通過 aiXcoder 插件實現(xiàn)與「云端 AI 服務」的對接,隨時隨地使用自己的「編程大腦」。

    同時,aiXcoder 還可以為軟件企業(yè)提供專業(yè)領域的定制化專屬服務,以企業(yè)內部云的方式為軟件企業(yè)提供專屬服務。使用過該服務的某軟件外包公司反饋:aiXcoder 不僅能夠有效節(jié)省程序員的開發(fā)時間,還能夠有效降低程序員對 API 文檔或相關信息的依賴,「原本需要上網搜索相似代碼和搜索 API 使用模式的時間,被節(jié)省了下來,可以更加集中精力編寫特定系統(tǒng)所需要的代碼?!拐驹诔绦騿T的角度,在 aiXcoder 的幫助下,開發(fā)者可以把更多時間用于「全新」代碼的編寫,提高個人價值。

    aiXcoder 的研究歷程

    談到研究這一智能編程機器人的初衷,李戈副教授說起當前的軟件開發(fā)流程存在「開發(fā)階段的缺陷被滯后解決」的問題,即程序員在編程的過程中未能解決的程序缺陷、錯誤等問題,常常需要依賴后續(xù)的代碼掃描、代碼審查、程序測試等環(huán)節(jié)才能被發(fā)現(xiàn),然后再重新送回到程序員的開發(fā)現(xiàn)場去解決,然而,當上述問題重新返回到開發(fā)現(xiàn)場時,程序員往往早已變更了開發(fā)場景,他們只能重建起以前的開發(fā)現(xiàn)場才能對返回的代碼進行修改。這一不合理流程大大延遲了編程問題的解決時間,造成了開發(fā)效率的降低。

    以百度為例,百度高級副總裁王海峰在今年出席軟博會時曾提到,百度每天新增需求卡片達到 6700 張,系統(tǒng)每天構建次數(shù)超過 70000 次,每天系統(tǒng)上線發(fā)布次數(shù)超過 700 次。在這樣的研發(fā)需求壓力下,要求軟件開發(fā)必須實現(xiàn)快速迭代,研發(fā)周期必須被縮短,大量的研發(fā)需求必須在編程階段完成,而不是「把編程階段應解決的問題向后續(xù)環(huán)節(jié)延遲」。因此,如何利用智能化手段提高軟件編碼的效率和質量,成為當前軟件開發(fā)的重要問題。

    如何將 AI 技術應用于軟件開發(fā)中,協(xié)助開發(fā)者在開發(fā)階段解決更多的問題,提高軟件開發(fā)的效率和質量?這正是李戈副教授的研究團隊一直深入思考的問題。要使 AI 能夠協(xié)助程序員編寫程序,必須首先要讓 AI 模型能夠理解程序員已經寫下的程序,并能夠領會程序員的編程意圖。帶著這一思考,他們開始了利用深度學習技術的程序代碼分析與生成的研究。

    2013 年底,李戈在斯坦福大學人工智能實驗室擔任訪問學者,當時與他同一實驗室的研究者正從事基于深度學習的自然語言處理的相關研究。這些相關領域的研究方法給了他啟發(fā),他認為可以利用特定的深度學習模型來進行程序代碼語義的分析。然而,程序語言與自然語言存在諸多不同:

    首先,程序語言通?;陧樞?、分支、循環(huán)三種類型的語法結構來進行語義描述,具有更強的結構性,而且程序的結構信息具有多種表達方式,例如數(shù)據(jù)流圖、控制流圖、調用圖、程序切面圖等等;

    • 其次,程序的整體語義對單個詞義的依賴較弱,其字面語義與程序語義可能存在較大區(qū)別,具有更強的抽象性;

      再次,程序分析的粒度比自然語言更大,通常以模塊為分析單位,一個程序模塊通常會包含很多條密切關聯(lián)的語句;

      除此之外,程序語義還依賴于大量的背景知識,如 API 知識、領域需求知識等等。

      這些問題的存在使李戈意識到,想要獲知程序所表達的語義,必須設計適用于程序語言的全新模型。

      基于多年的研究基礎和對程序特性的深入思考,李戈研究團隊設計并構造了一系列專門用于程序分析與生成的深度神經網絡模型。同時,他們利用從 Github、Stackoverflow 等獲取的開放源代碼資源,經過一系列清洗、分析、標注,積累了大量規(guī)范化程序代碼數(shù)據(jù)用于支持深度神經網絡的訓練,并最終獲得了優(yōu)異的訓練結果,形成了多項業(yè)界領先的科研成果,這些成果構成了 aiXcoder 的基礎。

      以 aiXcoder 的 Tensorflow 版本為例,他們使用了超過 30 萬份經過處理的 Tensorflow 源代碼作為訓練數(shù)據(jù),使神經網絡模型學會了編寫 Tensorflow 代碼所需的各種規(guī)范模式、潛在規(guī)則、常用 API 序列、慣用編碼模式等知識和經驗。在程序員編寫代碼的過程中,aiXcoder 能夠自動推測程序員的編程語義,并按照這些知識和經驗及時向程序員推薦可能要使用的編程語句,以達到輔助程序員自動完成程序的目的,大大提升程序開發(fā)的速度。

      當前的 aiXcoder 正以「結對編程」的形式輔助程序員工作,它就像一個時刻陪伴程序員工作的「伙伴」,與程序員一起編寫代碼,幫助程序員差缺補漏。

      「傳統(tǒng)的結對編程是人與人結對,我們希望能夠實現(xiàn)人與機器的結對工作」,李戈介紹說,「我們希望 aiXcoder 能夠承擔更多的『勞動』,能夠讓程序員有更多的時間和精力投入到有創(chuàng)造性的工作中,讓程序員的創(chuàng)造性價值得到更加充分的體現(xiàn)?!?/p>

      「Leave Artificial Intelligence to aiXcoder, Leave Real Intelligence to Human.」(把人工智能留給 aiXcoder,把真正的智能留給人類。),這正是 aiXcoder 研發(fā)團隊的信條和口號。

      aiXcoder 官網地址:http://www.aixcoder.com/

免責聲明:本文僅代表作者個人觀點,與中創(chuàng)網無關。其原創(chuàng)性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。

分享:

掃一掃在手機閱讀、分享本文