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