程序員的革命or災(zāi)難:機器人在GitHub修復(fù)bug、與人不相上下(附論文)
這個名為Repairnator的自動程序員編寫的補丁好得足以騙過真正的人類工程師。
1789年本杰明•富蘭克林寫道:“在這個世界上,除了死亡和稅收外,沒有什么可以說是確定無疑的。”但如果富蘭克林生活在現(xiàn)代,他可能會另外添加“軟件bug”這一項。
現(xiàn)代計算機程序非常復(fù)雜,開發(fā)過程中難免會出現(xiàn)各種各樣的bug(缺陷)。這就是為什么找到缺陷并編寫修復(fù)它們的補丁是任何軟件開發(fā)計劃的一項常規(guī)工作。確實,像Travis這樣的公司在向廣大開發(fā)人員提供這項服務(wù)。
但是,查找和修復(fù)補丁是一件很費時的差事,耗用大量資源。眾多研究人員開發(fā)出了使這個過程自動化的機器人,但是它們往往不是速度慢,就是編寫的代碼差強人意,過不了關(guān)。因此,開發(fā)人員非常希望能夠依賴一種速度快、質(zhì)量高的機器人來查找代碼中的錯誤,然后編寫補丁來修復(fù)錯誤。
今天開發(fā)人員終于夢想成真了,這歸功于瑞典斯德哥爾摩KTH皇家理工學(xué)院的馬丁•蒙佩盧斯(Martin Monperrus)及其同仁所做的工作。這些研究人員最終開發(fā)出了一款機器人,它在尋找缺陷并編寫高質(zhì)量的補丁方面與人類開發(fā)人員相比毫不遜色。
這些人稱這款機器人為Repairnator,已成功地進行了測試,讓它可與人類開發(fā)人員一較高下、找到修復(fù)程序。他們說:“這是程序自動修復(fù)方面的軟件工程研究界取得的重大里程碑,做到了能夠與人類相競爭。”
計算機科學(xué)家們早就知道,可以使編寫補丁的過程實現(xiàn)自動化。但目前尚不清楚機器人能不能與人類一樣快速地完成這項工作,并獲得相同的質(zhì)量。
因此蒙佩盧斯和同仁對此進行了測試,他們將Repairnator偽裝成人類開發(fā)人員,讓它可以與人類一較高下,開發(fā)放在GitHub(面向軟件開發(fā)人員的版本控制網(wǎng)站)上的補丁。蒙佩盧斯和同仁說:“Repairnator的關(guān)鍵設(shè)計想法是,自動生成修復(fù)構(gòu)建錯誤的補丁,然后將補丁拿給人類開發(fā)人員過目,最終看看那些人類開發(fā)人員會不會接受這些補丁,視作代碼庫的有效貢獻。”
該團隊創(chuàng)建了一個名為Luc Esape的GitHub用戶,他似乎是他們研究實驗室的一名軟件工程師。他們說:“Luc有一張個人資料照片,看起來像是一名初級開發(fā)人員,渴望在GitHub上貢獻開源代碼。”
鏈接:https://github.com/lucesape
但Luc實際上是偽裝的Repairnator。這種欺騙很有必要,因為人類版主往往以不同的視角或標(biāo)準(zhǔn)來評估機器人的工作和人類的工作。蒙佩盧斯和同仁說:“為了測試與人類相競爭的科學(xué)假設(shè),這種偽裝必不可少。”他們現(xiàn)在已向相關(guān)人員告知了真相。
該團隊進行了兩次測試Repairnator。第一趟測試是在2017年2月至12月,當(dāng)時團隊針對14188個GitHub項目的固定列表運行了Repairnator,以尋找錯誤。他們說:“我們發(fā)現(xiàn),我們的原型每天能夠執(zhí)行大約30次修復(fù)。”
在此期間,Repairnator分析了11500多個有缺陷的構(gòu)建項目。其中,它能夠重現(xiàn)3000多個項目中的缺陷。然后它又針對15個項目開發(fā)了補丁。
然而,這些補丁沒有一個得到接受、成為構(gòu)建項目的一部分,因為Repairnator花了太長的時間來開發(fā),或者編寫了無法接受的低質(zhì)量補丁。
第二次實驗的結(jié)果比較成功。這一回,該團隊讓Luc在2018年1月至6月期間在Travis持續(xù)集成服務(wù)上運行。雖然團隊沒有具體表明他們對Repairnator做了哪些改進,但是在1月12日,該機器人編寫了得到人類版主接受、成為構(gòu)建項目一部分的補丁。“換句話說,Repairnator第一次可以與人類相競爭。”
在接下來的六個月里,Repairnator繼續(xù)編寫了人類版主接受的五個補丁。
這項出色的工作為新一代軟件開發(fā)奠定了基礎(chǔ)。它還提出了一些值得關(guān)注的問題。
蒙佩盧斯和同仁提到了Repairnator在5月12日為一個名為“eclipse/ditto”的GitHub項目開發(fā)的補丁。
然后,該團隊收到了其中一位開發(fā)人員發(fā)來的下列消息:“我們只能接受來自簽署了Eclipse基金會貢獻者許可證協(xié)議的用戶的合并請求(pull-request)。”
這引發(fā)了一個棘手的問題,因為機器人無法實際簽署許可證協(xié)議。蒙佩盧斯和同仁問道: “誰擁有機器人貢獻的代碼的知識產(chǎn)權(quán),并承擔(dān)相應(yīng)責(zé)任:是機器人操作者、機器人實施者還是修復(fù)算法設(shè)計師?”
在人類和機器人可以更深入細(xì)致地合作之前,必須解決這類問題。不過蒙佩盧斯和同仁頗為樂觀。他們說:“我們認(rèn)為,Repairnator預(yù)示著軟件開發(fā)的美好未來,到時機器人和人類將在軟件開發(fā)上順暢協(xié)作,甚至通力合作。”
富蘭克林這位以創(chuàng)造性聞名的發(fā)明家本人若在世的話,肯定也會大為驚嘆。
論文《用Repairnator自動修復(fù)程序,編寫出與人類不相上下的補丁》
鏈接:https://arxiv.org/pdf/1810.05806.pdf