軟體測試太枯燥,AI來代勞

Software Testing Is Tedious. AI Can Help.
馬修.羅吉 Matthew Lodge
瀏覽人數:933
Artur Debat/Getty Images
在當今,無論你身處哪個產業,想要勝過競爭對手,都必須讓自己成為一個軟體企業,因為軟體能控制工廠、管理庫存、交易股票,成為與顧客接觸的最重要介面。然而,要達到這個目標,公司就必須盡可能讓那些既昂貴又稀少的軟體開發人員提高生產力。而透過AI讓耗時的工作自動化,是最快的解決辦法。這麼做的另一大好處,是可以釋放開發人員的精力,讓他們更專注於研發,以便更好、更迅速服務顧客。

在軟體開發中,速度為王:誰能最快推出沒有錯誤的更新,就能贏得市場。科技公司早已知道這點,但商界的其他公司也很快明白過來。公司的高階領導人開始體認到,他們的企業,無論主要業務的產業是汽車製造、食品服務或金融,也都漸漸變成軟體企業。軟體現在能控制工廠、管理庫存、交易股票,並逐漸成為與顧客接觸的最重要介面。

但如果軟體是保持競爭力的關鍵,公司就必須盡可能讓自家那些既昂貴又稀少的軟體開發人員提高生產力。讓耗時的工作自動化,是最快做到這一點的方法。

以新的車用娛樂系統介面為例,這類系統的外觀,大多與五年前的系統非常相似。比起自家汽車的地圖系統,大多數駕駛更喜愛Google地圖,因為使用者介面更優秀、擁有以秒為單位的正確度。食物服務公司持續浪費食物,因為無法預測需求。這類例子隨處可見,但並不是因為缺乏更好的解決方案。而是開發人員努力設法跟上進度時,積壓了很多專案,而且,這些專案必須按輕重緩急分類處理。

然而,隨著公司飛速跟上,也迅速得知第二項殘酷的事實:沒有足夠的軟體開發人員,來撰寫所有必要的程式,而需求只會持續增加。撰寫軟體,不只需要花費大量時間,辛苦靠人力寫出數百萬行程式碼,還需要時間來測試那些程式碼。2019年,一項針對開發人員的調查顯示,他們花費35%的時間來測試軟體。隨著更多公司推動數位轉型,開發人員的工作量也持續增加,就更難找到可勝任的員工。公司無法憑空變出更多開發人員,因此剩下一種選擇:設法讓既有員工做出更多貢獻。

這可能比聽起來更容易達成。很少長字輩高階主管了解,自家軟體開發流程中,暗藏效率低落的問題,以及解決這種效率低落的狀況,能明顯提升自家公司的競爭優勢。隨著人工智慧(AI)的進步,以及軟體產出流程變得更自動化,企業愈來愈有可能讓開發人員,擺脫那些重要但例行又重複的任務,這些任務目前占據他們多達一半的時間,例如單元測試(unit test),也就是撰寫用來驗證程式碼運作是否符合預期的測試軟體。

執行長與技術長應該詢問,自家組織部署軟體的頻率為何。如果一年只有幾次或更少,他們可能就需要自動化的軟體流水線(pipeline)來保持競爭力。而有競爭力的企業知道,這個流水線中,每年都有幾個部分適合進行自動化。現在,自動測試的時機成熟了。

AI會創造瓶頸,但也能突破瓶頸

並非所有軟體開發工作流程都能自動化,但隨著科技逐步改進,已有可能以自動化方式,進行更重要的任務:二十年前,昇陽電腦(SUN Microsystems)的一位開發人員,創造一種自動化系統,最後命名為Jenkins,這套系統解決軟體流水線持續整合、持續交付過程中的許多瓶頸。三年前,臉書(Facebook)推出一項名為Getafix的工具,這項工具會從工程師過去修復的程式碼中學習,並建議如何修正錯誤。這些進步為開發人員節省了大量時間,最終將會減少錯誤與停機時間,並確保可靠度與復原能力,而這些將直接影響營收。

但隨著AI讓軟體製作加速,需要測試的程式碼數量累積速度,超過開發人員能確實維護的速度。幸好,自動化加上新的自動化工具,也有助於解決這個問題。

在過去,需要開發人員手動撰寫程式碼的關鍵任務,一直都較難自動化。例如,單元測試,也就是檢查程式碼的最小獨立片段,已成為軟體企業的基石,而這是另一項直到最近才能用自動化工具來解決的常見瓶頸。軟體開發人員撰寫並執行單元測試,以確保應用程式的某個部分,是按照預期的方式運作。單元測試是在開發階段早期迅速進行,開發人員可在撰寫程式碼時修正問題,因而能更快交付完成的軟體。

但撰寫單元測試,是一項枯燥、容易出錯且耗時的工作,測試人員必須反覆仔細查核同事的工作成果,因而無法進行更有創意的工作,而這些創意工作,是會為企業賺錢的。在許多方面,測試工作都比建構軟體更耗費人力。開發人員必須為軟體的每個單元,撰寫針對性能、功能、安全等項目的測試。這是價值120億美元的產業,但其中幾乎所有錢都花在人工作業上,而其中大部分交給外包。

這就是自動化可發揮作用的地方。演算法無論是在內部開發,或是有現成的工具可用,撰寫測試的速度都比人類開發人員快上更多倍,而且能隨程式碼的演變發展,而自動維護那些測試。此外,自動化測試能以人類容易理解的方式撰寫。在應用程式可能包含數千萬行程式碼的時代,這代表公司有絕佳機會節省高技能的人力。

採用這種自動化技術,能為公司帶來一些重大優勢。

首先,這可以推動以前根本無法進行的測試。自動化不只是取代人力,更能進行許多公司目前因為太耗人力,而忽略的必要工作。現在,許多推動世界運作的服務與應用程式,都規模龐大。沒有人能全面掌握正在發生的所有事情。公司有過去留下來的大量程式碼,這些程式碼從未進行過適當的單元測試。隨著程式碼演變,品質問題也開始浮現,但公司無力重新撰寫或從頭來過。如果沒有盡早進行良好的測試,很容易就會在反覆改善與升級軟體時,引入新的錯誤,之後費時、費力地找出並修正這些錯誤,而這會限制程式碼發布的頻率。

看看銀行業的例子。例如,世界上一些最大型的銀行,仰賴數億行程式碼運作。對完全由內部開發的銀行應用程式來說,隨著軟體演變,特別是當公司更快推出新版本,就可能會發生衝突。消費者開始預期程式會隨時間過去而自動更新,並增加功能,所以,許多銀行都採取持續整合與持續交付的做法,這導致開發新功能或改變程式碼的作業時間縮短,從數個月壓縮為數分鐘。為解決這個問題,高盛(Goldman Sachs)等銀行已開始運用AI,以自動化方式撰寫單元測試,而其他金融機構可能會跟進。

其次,這使他們能更頻繁推出新軟體與更新。這種軟體開發模式聖經《加速》(Accelerate)作者蒐集的數據資料顯示,更頻繁推出程式碼的組織,故障率只有五分之一,而且,軟體從停機中恢復的速度,也快了170倍。

最後,開發人員省下來的時間,可用於解決更有挑戰性的問題,以及構思可讓使用者更滿意的新做法。另一項較不明顯的好處,是讓開發人員有喘息空間,能去處理計畫之外的工作、調整計畫,以滿足顧客需求,或是進行改善工作。這不僅有助於雇主留任工程人才,也表示開發人員能更快做出因應。

自動化是軟體開發的未來

自動化正在進入軟體開發流程的所有環節,有些部分進入較快,有些較慢,而隨著AI系統愈來愈強大,自動化的選項只會增加。非營利人工智慧研究組織OpenAI的大型語言模型GPT-3,已能將自然人類語言轉化成網頁設計,而且,最終可能可用於自動撰寫程式碼。但到最後,軟體建構、交付與維護供應鏈的大部分工作,都將交由機器處理。遲早,AI會把撰寫應用程式軟體的工作完全自動化。

但現在,執行長與技術長只需要注意當前能自動化的領域,例如撰寫單元測試,以及其他低階但很重要的工作。而且,他們應該持續留意其他一些領域,隨著技術進步,這些領域最終也能跟進採取自動化做法。最終,領導人必須把這些展望納入長期商業計畫中,因為不這麼做的公司,將會面臨非常緊迫的瓶頸。

(游樂融譯)



馬修.羅吉 Matthew Lodge

在軟體產業有超過25年經驗,目前是Diffblue執行長,這家公司最近發布針對一般使用的自動化單元測試解決方案Diffblue Cover,另外也發布Diffblue Cover: Community Edition,這是為使用IntelliJ開發人員推出的免費版本,IntelliJ是最流行的Java企業版整合開發環境(IDE)。


本篇文章主題創新