我們正在進入特斯拉人工智能主管Andrej Karpathy所謂的“軟件2.0”的時代,在這個時代里,神經(jīng)網(wǎng)絡(luò)會編寫代碼,而人們的主要工作是定義任務(wù),收集數(shù)據(jù)和創(chuàng)建用戶界面。
但并非所有任務(wù)都可以通過神經(jīng)網(wǎng)絡(luò)來解決(至少現(xiàn)在還不行),而傳統(tǒng)的軟件開發(fā)仍然可以發(fā)揮作用。然而,即便如此,人工智能、機器學(xué)習(xí)和高級分析正在改變軟件的設(shè)計、編寫、測試和部署方式。
測試
總部位于巴西的TOTVS為大約100,000名企業(yè)客戶提供關(guān)鍵的行業(yè)軟件。例如,其金融服務(wù)解決方案每天處理數(shù)萬億美元的交易。
此類應(yīng)用需要得到強有力的測試。創(chuàng)建測試用例的人必須非常慎重地考慮如何設(shè)計測試場景,每個測試場景都要花幾個小時來創(chuàng)建。
TOTVS實驗室的執(zhí)行董事Vicente Goetten表示,要跟上步伐并不容易。每個測試用例都必須定制化,以適合用戶界面。應(yīng)用程序不斷得到重新設(shè)計,因此界面也總是在變化。如果平臺本身發(fā)生了變化(例如更新到更新版本的JavaScript時),所有設(shè)計元素都會立即發(fā)生變化。
Goetten說:“不妨想象一下重寫成千上萬用例的情景。”
因此TOTVS向人工智能求助。TOTVS使用Functionalize這個測試平臺,該平臺現(xiàn)在支持測試用例的智能創(chuàng)建。該技術(shù)可以像人一樣查看屏幕,從而能識別輸入字段和按鈕的位置,而不是依賴于底層代碼。它還可以提供測試場景和樣本數(shù)據(jù)來對應(yīng)用程序進行壓力測試。
Goetten說:“以前,高級質(zhì)量保證人員需要花一天的時間來完成我們所使用的傳統(tǒng)解決方案中的測試用例,現(xiàn)在,他們可以在幾分鐘內(nèi)創(chuàng)建相同的測試用例。”
Gotten說,還有就是,F(xiàn)unctionalize能理解平直的語言。
他說:“你可以命令它測試要測試的東西,它會自動為你創(chuàng)建一個測試用例。這為我們指明了新的方向。我們不再需要那么多高級質(zhì)量確認人員來測試用例。”
監(jiān)控和部署
即使軟件通過了質(zhì)量確認,它也并不總是按預(yù)期發(fā)揮效用。“就在今天早上,我們獲得了一些已經(jīng)得到采用的產(chǎn)品數(shù)據(jù),而網(wǎng)站尚不能處理這些數(shù)據(jù)”,在線家居裝修零售商Build.com的高級技術(shù)總監(jiān)Patrick Berry如是說。
我們花了數(shù)百小時來監(jiān)控Build.com軟件的性能,當(dāng)問題出現(xiàn)時,公司將軟件恢復(fù)到之前已知的良好狀態(tài),并將其發(fā)送給開發(fā)人員以解決問題。
Berry說:“我們面臨的問題是,我們編寫的軟件變得非常復(fù)雜,流量太大,大到任何人都無法查看現(xiàn)有的所有監(jiān)控系統(tǒng),哪怕是一群人也做不到,他們會說,‘一切都很好’或‘一切都很糟糕,該做點事情了’,軟件耗費了太多時間并放慢了發(fā)布速度。我們無法以足夠快的速度為客戶創(chuàng)造價值,我們也沒有以足夠快的速度向開發(fā)人員反饋必須得到補救的事情。”
因此,Build.com向Harness求助,這是一個軟件交付即服務(wù)(software-delivery-as-a-service)平臺,該平臺將性能監(jiān)控所需的時間幾乎降為零,將部署速度提升了20倍,Berry如是說?,F(xiàn)在,如果有問題出現(xiàn),系統(tǒng)將自動恢復(fù)到先前的已知良好狀態(tài),并根據(jù)內(nèi)置的機器學(xué)習(xí)功能將問題發(fā)送出去以進行補救。Build.com也正在考慮大舉使用人工智能,以此作為代碼開發(fā)過程的一部分。
Berry說:“我們實際上還沒有能寫代碼的代碼,但人工智能和機器學(xué)習(xí)在開發(fā)方面大有裨益,這實際上關(guān)系到我們是否理解常見模式的好壞利弊。它可以突顯這是一個異常現(xiàn)象,我們可以回過頭來對其進行修復(fù)。”
安全性
Berry還希望有更多能利用人工智能的工具相繼問世,從而一開始就能幫各大公司編寫更好更安全的代碼。
Berry說:“這就是我們真心希望在開發(fā)方面使用人工智能和機器學(xué)習(xí)的領(lǐng)域——加強這些領(lǐng)域,這些領(lǐng)域人手不足,無法解決問題,比方說,你的代碼庫有數(shù)百萬行代碼。你要用多少人來審計這數(shù)百萬行代碼?我們需要的是可擴展的解決方案。”
例如,Build.com使用GitHub來存儲代碼。Berry說:“他們正在引入某些系統(tǒng),這些系統(tǒng)將監(jiān)控你的代碼并向你發(fā)出提醒,讓你知道我們使用的第三方庫中可能存在的漏洞。”
GitHub的機器學(xué)習(xí)工程師Omoju Miller說,這是GitHub的一個活躍的開發(fā)領(lǐng)域。Berry說:“我們正致力于創(chuàng)建各種模型,這些模型能為常見漏洞和暴露發(fā)現(xiàn)(exposures discovery)提供支持。”
Berry說,GitHub剛剛發(fā)布了一個工具,這個工具可以幫開發(fā)人員發(fā)現(xiàn)他們在代碼中意外共享令牌的位置。
發(fā)現(xiàn)
Miller說,GitHub還致力于開發(fā)“幫開發(fā)人員以自然方式發(fā)現(xiàn)功能的工具”,有了人工智能,開發(fā)人員就可以根據(jù)自己的意圖搜尋各種功能。
Miller說:“由于在GitHub的開源編碼平臺上使用大量公開代碼,機器學(xué)習(xí)研究團隊在實現(xiàn)這一目標(biāo)方面取得了重大進展。有了語義代碼搜索的功能,開發(fā)人員就可以增加和簡化計算方面解決問題的需求。”
Miller說,這就是說,開發(fā)人員將不再受自身認知的限制,“他們可以利用存儲在GitHub上的所有代碼知識來幫忙解決問題。”
分析
Constellation Research的首席分析師兼創(chuàng)始人Ray Wang表示,人工智能技術(shù)也出現(xiàn)在靜態(tài)和動態(tài)軟件分析工具中。
Wang說:“機器學(xué)習(xí)的功能已經(jīng)很豐富了,比18個月前更加豐富。神經(jīng)網(wǎng)絡(luò)漸漸得到了應(yīng)用。如今,與其說這是靜態(tài)分析,不如說是動態(tài)分析,但由人工智能驅(qū)動的動態(tài)分析將在未來幾年出現(xiàn)。”
開發(fā)代碼
然而,就從頭開始編寫新代碼而言,當(dāng)前的技術(shù)還有待改進,Build.com的Berry如是說。
Berry說:“現(xiàn)在我們可以使用一些現(xiàn)成的系統(tǒng),如你的集成開發(fā)環(huán)境,但這更像內(nèi)置模板剪切粘貼得來的。”
但情況開始發(fā)生變化。最受歡迎的集成開發(fā)環(huán)境(微軟的Visual Studio)在4月發(fā)布的最新版本中內(nèi)置了人工智能代碼自動完成功能。微軟Visual Studio IntelliCode的高級項目經(jīng)理Mark Wilson-Thomas表示,該功能基于數(shù)千個開源的GitHub存儲庫提供的機器學(xué)習(xí)。
“我們吸取了開源社區(qū)代碼的智慧結(jié)晶”,微軟Visual Studio和Visual Studio Code程序管理合作總監(jiān)Amanda Silver如是說。
Silver補充說,這也有助于他們理解常用類的使用方式,“在處理不熟悉的代碼時,這尤其有用。”
最近對IntelliCode用戶進行的一項調(diào)查發(fā)現(xiàn),超過70%的人表示,與經(jīng)典的IntelliSense相比,使用新的由人工智能驅(qū)動的IntelliCode使他們覺得有更高的效率,Silver如是說。
Silver說,使用這個工具的企業(yè)也可以為自己的員工創(chuàng)建自定義的私有模型。
Silver說:“這使IntelliCode與你的團隊或組織有共同的代碼語言,你無需將源代碼發(fā)給微軟。”
Gartner的分析師Svetlana Sicular表示,這種功能是微軟購買GitHub的首要原因。
GitHub擁有1億多個存儲庫(其中有2500多萬個存儲庫是開源的),微軟于去年收購了GitHub。該平臺對公共存儲庫和小型的私有項目免費開放。
Sicular說:“GitHub是一個代碼存儲庫。在我看來,微軟將使用它來生成新的代碼。”
智能應(yīng)用程序開發(fā)平臺
Build.com的Berry也在密切關(guān)注低代碼和無代碼領(lǐng)域里發(fā)生的事情。
Berry說:“這根本談不上是新鮮事兒,只要有開發(fā),開發(fā)人員就已經(jīng)將系統(tǒng)整合在一起了。”
Berry說,最近,人工智能系統(tǒng)的部署因此而變得更輕松快捷。他說:“例如,用于推薦引擎的固有解決方案將過去很難實施的解決方案和定制的解決方案商品化。”
現(xiàn)在,這種低代碼方法變得更加智能,使公司不再浪費時間創(chuàng)建商品系統(tǒng),Berry如是說。他說:“我們因此有機會提出全新的,真正的創(chuàng)新,這就是這種方法的意義所在。我對這些領(lǐng)域在未來所能做出的貢獻感到非常興奮。”
以Mendix為例,該公司在長達十年的時間里一直提供積木式的系統(tǒng),這些系統(tǒng)可以用來創(chuàng)建各種應(yīng)用程序。開發(fā)人員將平臺上各種可用的功能集中在一起,當(dāng)這些功能不夠用時,他們就使用外部代碼。如今,該公司創(chuàng)建了一個深度學(xué)習(xí)系統(tǒng)來分析這些模型,考察這些模型在生產(chǎn)中的表現(xiàn),看看哪些模型是最管用并據(jù)此來識別各種模式。
Deloitte Cyber的應(yīng)用程序安全負責(zé)人Vikram Kunchala說,IT部門依然十分抗拒這些平臺,而業(yè)務(wù)方又缺乏信心。
Kunchala說:“此刻,對平臺的采用似乎更像是好奇心使然。企業(yè)正在一點點進行對這些平臺進行試驗。又或者是他們不得不盡快落實——我們已經(jīng)見過這種情況了。但我沒有看到哪個客戶將其視作我所了解的企業(yè)標(biāo)準(zhǔn)。”
軟件2.0
但最大的變化是,企業(yè)開始使用與傳統(tǒng)代碼毫無聯(lián)系的應(yīng)用程序。
比如說,你想創(chuàng)建一個玩三子棋(Tic-Tac-Toe)的應(yīng)用程序。你可以編寫規(guī)則和游戲策略。對手怎么做,你就怎么做。開發(fā)人員的工作是選擇正確的策略并創(chuàng)建驚艷的用戶界面。
如果以擊敗人類棋手為目的,那么這種策略適用于三子棋、跳棋、甚至是國際象棋。但是對于圍棋等更高難度的棋類競技,創(chuàng)建規(guī)則并不容易。這時深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)等人工智能技術(shù)就登臺亮相了,這些技術(shù)徹底改變了軟件開發(fā)流程。
開發(fā)人員不是從制定規(guī)則開始,而是從收集數(shù)據(jù)開始——大量的棋類競技。谷歌根據(jù)人類棋手下的大量棋局來訓(xùn)練系統(tǒng)。由于有了最新的AlphaGo Zero,訓(xùn)練數(shù)據(jù)來自系統(tǒng)與自身對弈的棋局,始于隨機下子。
只要培訓(xùn)數(shù)據(jù)清晰且充分,而且評估其好壞的標(biāo)準(zhǔn)也十分明確,那么這種方法就有可能徹底改變軟件開發(fā)。如今,開發(fā)人員必須努力管理培訓(xùn)數(shù)據(jù)和評估標(biāo)準(zhǔn)并讓系統(tǒng)來編寫代碼,而不是弄懂對弈規(guī)則并編寫對弈規(guī)則。
特斯拉的人工智能主管Andrej Karpathy表示,這正是特斯拉對自動駕駛汽車所采用的方法。
Karpathy在去年的技術(shù)會議主題演講中說道:“這是一種全新的軟件設(shè)計方式。如今,我們不是毫不隱諱地編寫代碼,而是積累和優(yōu)化數(shù)據(jù)集,而這些數(shù)據(jù)集實際上就是代碼。”
例如,因此,特斯拉駛經(jīng)隧道時很難判斷要不要啟動雨刮器。在傳統(tǒng)的軟件開發(fā)中,程序員會查看代碼,從而發(fā)現(xiàn)邏輯錯誤出在哪里。由于有了Software 2.0,開發(fā)人員只要查看數(shù)據(jù)就可以了。
例如,在這種特殊情況下,穿越隧道的車輛缺乏訓(xùn)練數(shù)據(jù)。特斯拉必須上路實測,獲得更多數(shù)據(jù),對這些數(shù)據(jù)進行注釋,將其添加到訓(xùn)練數(shù)據(jù)集并重新運行深度學(xué)習(xí)算法。
Karpathy說:“我們通過這種方法使所有問題看起來都一個樣子。”
Karpathy補充說,傳統(tǒng)的發(fā)展仍有生存空間。目前,這些系統(tǒng)的用戶界面是手動創(chuàng)建的,與其他平臺的集成也仍然是手動完成的。
但隨著越來越多的公司向人工智能求助,用于那些有大量可用數(shù)據(jù)和其他低代碼平臺的應(yīng)用程序,那么軟件開發(fā)的工作將在不久的將來發(fā)生巨大變化。