能騙過(guò)真正的人類工程師,機(jī)器人改Bug這么牛?
1789年本杰明•富蘭克林寫(xiě)道:“在這個(gè)世界上,除了死亡和稅收外,沒(méi)有什么可以說(shuō)是確定無(wú)疑的。”但如果富蘭克林生活在現(xiàn)代,他可能會(huì)另外添加“軟件bug”這一項(xiàng)。
軟件開(kāi)發(fā)過(guò)程中 Bug 的存在無(wú)可避免。對(duì)工程師來(lái)說(shuō),“找 Bug 修 Bug”是一趟沒(méi)有終點(diǎn)的旅程,工作中必須為此消耗大量時(shí)間與資源,因此開(kāi)發(fā)者多半都非常期望能有快速、高質(zhì)量的機(jī)器人來(lái)搜尋錯(cuò)誤代碼并協(xié)助修補(bǔ)。
修 Bug 是所有軟件開(kāi)發(fā)計(jì)劃的常見(jiàn)過(guò)程,計(jì)算機(jī)科學(xué)家早就知道自動(dòng)化編寫(xiě)修補(bǔ)程序理論上可行,但不清楚的是機(jī)器人程序能否像人類一樣快速完成這項(xiàng)工作并達(dá)到相同的質(zhì)量。以目前來(lái)說(shuō),盡管許多研究人員已開(kāi)發(fā)出可自動(dòng)完成這項(xiàng)過(guò)程的機(jī)器人,但不是速度太慢就是寫(xiě)的代碼不夠好到能用。
經(jīng)過(guò)數(shù)年努力下,瑞典皇家理工學(xué)院(KTH)馬丁•蒙佩盧斯(Martin Monperrus)團(tuán)隊(duì)成功測(cè)試出有人類競(jìng)爭(zhēng)力的機(jī)器人“Repairnator”,團(tuán)隊(duì)認(rèn)為這是自動(dòng)化修復(fù)研究的里程碑。
Repairnator的自動(dòng)程序員編寫(xiě)的補(bǔ)丁好得足以騙過(guò)真正的人類工程師,但團(tuán)隊(duì)如何證實(shí)它“具人類競(jìng)爭(zhēng)力”?其實(shí)答案很簡(jiǎn)單,那便是讓 Repairnator 偽裝成人類開(kāi)發(fā)員,在 GitHub 協(xié)助產(chǎn)生修補(bǔ)程序來(lái)修復(fù)漏洞,看看人類開(kāi)發(fā)者能否接受其為對(duì)代碼庫(kù)的有效貢獻(xiàn)。
團(tuán)隊(duì)為 Repairnator 建了一個(gè)名為 Luc Esape 的 GitHub 用戶,看起來(lái)似乎就是研究實(shí)驗(yàn)室的軟件工程師。為了讓 Luc 的存在更真實(shí),團(tuán)隊(duì)還上傳了一張個(gè)人照片,讓它看起來(lái)就像初級(jí)開(kāi)發(fā)人員渴望在 GitHub 對(duì)開(kāi)源大力貢獻(xiàn)。
這種欺騙很有必要,因?yàn)槿祟惏嬷魍圆煌囊暯腔驑?biāo)準(zhǔn)來(lái)評(píng)估機(jī)器人的工作和人類的工作。蒙佩盧斯和他的團(tuán)隊(duì)認(rèn)為:“為了測(cè)試與人類相競(jìng)爭(zhēng)的科學(xué)假設(shè),這種偽裝必不可少。”他們現(xiàn)在已向相關(guān)人員告知了真相。
2017 年 2~12 月,團(tuán)隊(duì)進(jìn)行第一次實(shí)驗(yàn),讓 Repairnator 原型持續(xù)在 14,188 個(gè) GitHub 項(xiàng)目的固定列表尋找錯(cuò)誤;Repairnator 每天約能執(zhí)行 30 次修 Bug 嘗試,在這段期間,Repairnator 分析超過(guò) 11,500 個(gè)漏洞,并能在 3,000 多個(gè)案例中重現(xiàn)失敗,最終開(kāi)發(fā)了 15 個(gè)案例的修補(bǔ)程序。
但這些修補(bǔ)程序最終都沒(méi)有被接受,因?yàn)?Repairnator 不是花太長(zhǎng)時(shí)間開(kāi)發(fā),就是編寫(xiě)修補(bǔ)程序的質(zhì)量過(guò)低而沒(méi)有被使用者接納。
相較之下,第二次實(shí)驗(yàn)就較成功。雖然團(tuán)隊(duì)并未具體說(shuō)明改進(jìn) Repairnator 哪些地方,但 2018 年 1~6 月期間,團(tuán)隊(duì)讓它透過(guò) Travis 持續(xù)向開(kāi)發(fā)者提供協(xié)助。而在 1 月初,Repairnator 編寫(xiě)的修補(bǔ)程序首次被人類開(kāi)發(fā)者接受。
(Source:arXiv.org)
接下來(lái) 6 個(gè)月里,Repairnator 繼續(xù)制作的 5 個(gè)修補(bǔ)程序也都順利被人類使用者接納。團(tuán)隊(duì)認(rèn)為這項(xiàng)令人印象深刻的工作為新一代軟件開(kāi)發(fā)奠定了基礎(chǔ),同時(shí)也引申出一些有趣的問(wèn)題。
5 月 12 日 Repairnator 為 GitHub 項(xiàng)目“eclipse/ditto”開(kāi)發(fā)修補(bǔ)程序后,收到開(kāi)發(fā)人員的信息:“我們只能接受簽署 Eclipse Contributor Agreement 協(xié)議用戶的協(xié)助修訂(Pull Requests)。”
蒙佩盧斯認(rèn)為,這引申出一個(gè)有趣的問(wèn)題,因?yàn)闄C(jī)器人無(wú)法簽署許可協(xié)議。“誰(shuí)有機(jī)器人貢獻(xiàn)的知識(shí)財(cái)產(chǎn)權(quán)和責(zé)任──機(jī)器人操作員,機(jī)器人執(zhí)行者還是修復(fù)算法的設(shè)計(jì)師?”
在人類和機(jī)器人更密切合作之前,這類問(wèn)題必須解決。但蒙佩盧斯對(duì)此非常樂(lè)觀。“我們相信 Repairnator 預(yù)先展示了軟件開(kāi)發(fā)的某種未來(lái),機(jī)器人和人類將會(huì)好好合作,甚至攜手開(kāi)發(fā)軟件。”
最后,我們可以用一句網(wǎng)絡(luò)上的段子來(lái)結(jié)尾:
“你已經(jīng)是個(gè)成熟的軟件了,要學(xué)會(huì)自己調(diào)參修 Bug。”
參考論文:《用Repairnator自動(dòng)修復(fù)程序,編寫(xiě)出與人類不相上下的補(bǔ)丁》