洛奇
如今,開發(fā)人員的準(zhǔn)入門檻比以往任何時候都要高。重復(fù)性的任務(wù)占據(jù)了軟件開發(fā)的大部分時間,并且很容易出錯。市場上軟件開發(fā)人才短缺,團(tuán)隊超負(fù)荷工作,許多企業(yè)既無法完全掌握現(xiàn)有的日益復(fù)雜的代碼,又追不上新程序開發(fā)日新月異的發(fā)展步伐。
對于人工智能愛好者來說,推測人工智能如何改進(jìn)軟件開發(fā)是件令人興奮的事兒。人工智能能否在幾天之內(nèi)創(chuàng)建好原型框架而不用耗時幾個月甚至幾年?它會教人類開發(fā)人員如何更好地編寫代碼嗎?人工智能的研究范圍很廣,計算機(jī)編程的靈活性基本上也是無邊界的,所以很難想象當(dāng)智能程序可以幫助人類與代碼交互時,軟件開發(fā)會是什么樣子。
許多開發(fā)人員和技術(shù)經(jīng)理沒有意識到的是,在過去短短幾年里,人工智能對開發(fā)團(tuán)隊的重要性就已經(jīng)產(chǎn)生了質(zhì)的飛躍,目前我們已經(jīng)走到了人工智能輔助軟件開發(fā)的初級階段。
所有的軟件開發(fā)組織都追求高效、敏捷開發(fā),自動化技術(shù)已經(jīng)能實現(xiàn)大規(guī)模敏捷開發(fā)。過去十年,在進(jìn)行自動化測試時,一旦代碼發(fā)生變化,開發(fā)人員能夠立即做出反饋,同時進(jìn)行相應(yīng)的調(diào)整,因此軟件質(zhì)量有了很大提升。自動化軟件流水線利用機(jī)器人助手來生成 Pull Request 請求,從而保證更新的持續(xù)交付。
但是許多已經(jīng)運(yùn)用了這項技術(shù)的公司發(fā)現(xiàn),僅依靠自動化是不夠的。自動化過程仍然存在瓶頸,大多數(shù)問題出現(xiàn)在新代碼的創(chuàng)建上。例如,自動化可以快速完成成百上千個單元測試,如果開發(fā)團(tuán)隊自己來編寫這些測試,則需要幾個小時甚至幾周。但是如果這些提交沒有經(jīng)過測試驗證,那么自動化的流水線就會產(chǎn)生垃圾。盡管會打破原本自動化的過程,但在添加新代碼(和新測試)時,還是需要進(jìn)行人工操作。
一個好的消息是通過自動編寫驗證自動化流水線其余部分的測試代碼,現(xiàn)有的人工智能代碼技術(shù)已經(jīng)可以一次性解決掉這兩個問題。這樣的任務(wù)過去需要耗費(fèi)開發(fā)人員很多時間,妨礙了他們?nèi)プ鰟?chuàng)建新功能等這種更有價值的工作。在單元測試中使用人工智能讓自動化更加完善,盡管這個過程并不容易。
正如曾經(jīng)預(yù)期的那樣,人工智能創(chuàng)建的測試與人類編寫的測試存在差異。但這些測試能在很短的時間內(nèi)生成,而且功能也算合格。如果不能做到比人類編寫的代碼更好,那就要保證出現(xiàn)問題時代碼能很容易地被修復(fù)。就如Martin Fowler在他 2006 年《論持續(xù)集成》一文中所總結(jié)的那樣:“頻繁地運(yùn)行不完美的測試,比完全不寫的完美測試要強(qiáng)得多。”
利用人工智能幫助開發(fā)者編寫代碼,讓開發(fā)人員和 IT 經(jīng)理不再被時間、成本和工作質(zhì)量無法權(quán)衡的問題所困擾。不少開發(fā)人員在最初進(jìn)行軟件開發(fā)時都頗具創(chuàng)造力,但是大量的重復(fù)性的工作消磨掉了他們原本的創(chuàng)造力。人工智能輔助開發(fā)不僅能讓開發(fā)人員在不犧牲質(zhì)量的情況下更快、更經(jīng)濟(jì)地創(chuàng)建新產(chǎn)品,也能幫助他們快速地完成重復(fù)性任務(wù),把注意力回歸到創(chuàng)造性任務(wù)中,讓他們在工作中更有獲得感。
像金融業(yè)這些高度重視代碼質(zhì)量的行業(yè),也已經(jīng)開始使用人工智能輔助軟件開發(fā)。例如,為提高軟件開發(fā)效率,高盛(Goldman Sachs)最近已經(jīng)開始使用人工智能編寫代碼。他們利用 AI 工具為一個遺留的應(yīng)用程序編寫了 3000 多個單元測試和 1.5 萬多行代碼,在幾個小時內(nèi)就創(chuàng)建了一個完整的測試套件。與人工編寫測試每個平均耗時 30 分鐘相比,AI 工具能以超過 180 倍的速度編寫測試??偟膩碚f,銀行利用這項技術(shù)節(jié)省了一年多的開發(fā)時間。
微軟也曾開源Sketch2Code,利用人工智能輔助技術(shù)幫助設(shè)計師和工程師將手繪的用戶界面草圖轉(zhuǎn)換為可用的 HTML 代碼。設(shè)計師和工程師們在設(shè)計上達(dá)成一致意見后,會將草圖拍攝下來,然后手動將草圖翻譯成 HTML 代碼,這個翻譯過程耗時耗力,還會拖慢整個設(shè)計過程。因此,開發(fā)人員設(shè)想如果將白紙上手繪的這些設(shè)計草圖立即反映在瀏覽器中會怎樣呢?結(jié)果是設(shè)計師們在頭腦風(fēng)暴結(jié)束后,立即可以擁有一個已經(jīng)由設(shè)計師、開發(fā)人員甚至客戶驗證過的現(xiàn)成原型,這樣可以為網(wǎng)站和應(yīng)用程序開發(fā)省去不少時間,因此也就有了 Sketch2Code 的誕生。
Facebook 在這方面也不甘落后,早在去年公司就開發(fā)了一款名為Getafix的工具,可以自動查找出 bug 的修復(fù)方案,并提供給工程師審批,這極大提高了工程師的工作效率和整體代碼質(zhì)量。Getafix 不僅能夠為工程師提供直觀的修復(fù)方案,還能利用更強(qiáng)大的聚類算法,分析問題代碼的上下文找到更合適的修復(fù)方案。這款 AI 輔助bug 修復(fù)軟件——Getafix 已經(jīng)被部署到擁有數(shù)十億用戶的 Facebook 的生產(chǎn)環(huán)境中,大大提升了應(yīng)用程序的穩(wěn)定性。
值得一提的是,目前人工智能輔助開發(fā)還停留在非常初級的階段,只能輔助開發(fā)人員編碼和進(jìn)行自動測試,無法實現(xiàn)大規(guī)模工業(yè)化應(yīng)用,復(fù)雜和高難度的編程還要依靠人類開發(fā)人員。但我們依然需要這樣的 AI 輔助技術(shù)幫助開發(fā)人員扛下那些基礎(chǔ)性的“粗活累活”,讓他們有更多時間和精力完成更加復(fù)雜的開發(fā)。
隨著人工智能技術(shù)的不斷進(jìn)步以及成功應(yīng)用在更多案例中,各個行業(yè)未來都將加大人工智能在軟件開發(fā)方面的投入。全球科技巨頭們躍躍欲試開源各種 AI 輔助開發(fā)工具,可見,他們想要在這項技術(shù)領(lǐng)域中分一杯羹的野心昭然若揭。為了在競爭中保持優(yōu)勢并擴(kuò)大規(guī)模,市場主體還需要將提高效率的新工具集成到開發(fā)過程中。與此同時,人工智能輔助軟件開發(fā)技術(shù)正在完成首次迭代更新,也讓我們初步了解了未來編碼技術(shù)將如何發(fā)展。