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