人工智能(AI)正在顛覆一切,軟件工程也不能幸免。生成式人工智能(AIGC)在編碼、設計、測試和 DevOps 方面的最新展示確實令人印象深刻,甚至可以說令人敬畏。 AIGC是人工智能的一個分支,專注于創建和生成新的內容,如圖像、文本、音頻甚至視頻,這些內容很難與人類生成的內容區分開來。近幾個月來,由于大型語言模型(LLM)的進步,以及 OpenAI、Stable Diffusion 和其他大廠的產品發布,AIGC備受關注。
雖然很難量化AIGC的準確傳播范圍,但可以肯定的是,研究人員、開發人員和軟件從業人員正在積極探索和利用AIGC的各種功能領域,如圖像和文本生成、音樂和聲音合成、視頻生成、虛擬人物和化身創建以及數據增強。 軟件工程是AI革命的一部分,而AIGC可以為軟件開發生命周期(SDLC)的各個階段帶來顯著的幫助。
由于軟件有著天生的數字化特性,軟件工程尤其適合借助AIGC的力量。
具體的工程任務,如數值分析和數據工程、文檔編制、編碼和質量控制,在某種程度上可能是重復性的;因此,非常適合由訓練有素的AI模型提供幫助。其次,復雜的算法代碼結構適合由AI助手生成。此外,軟件開發人員面臨的許多挑戰可能已經解決。因此,對于訓練有素的AI模型來說,代碼模塊已經可用,生成整個函數或類也就變得可行了。
AIGC是增強人類能力和加速軟件開發的有力工具。
對于業務依賴于創建、維護或銷售軟件的公司來說,使用正確的AIGC工具可以提高開發人員的效率、創造超越競爭對手的機會。企業可以通過多種方式利用AIGC工具,包括開發人員的優化和和培訓的工作,以及為關鍵工程任務啟用AIGC工具。 本文將對AI驅動/輔助軟件工程生態系統、可用的最新工具、可幫助完成的工程任務以及應避免的注意事項進行高屋建瓴的闡述。
1. 當前的 SDLC(軟件開發生命周期)
要了解AIGC對軟件工程的幫助有多大,快速了解一下目前公認的敏捷軟件開發生命周期(SDLC)可能會有所幫助。 經典的敏捷軟件開發生命周期(SDLC)以較小的、可操作的、迭代的和增量的周期啟動并進行演化,直到代碼完全開發、測試并部署到生產環境中。同樣,分析、設計、編碼和測試也被分成較小的塊來執行,而 DevOps 則在整個過程中持續進行。
在敏捷分析階段一般會包括用戶故事和史詩(Epic)的編寫,而設計階段則會引入架構圖的創建和數據結構的設計。編碼和測試階段通常包括用不同的語言編寫軟件和制作測試線束,以確保它們按照特定要求運行。測試和QA還可能包括獨立測試,以確保一切按預期運行。同樣,DevOps 也采用不同的方法,如環境配置、基礎設施即代碼和 CI/CD 流水線。
圖1 當前的敏捷 SDLC
2. AI驅動的 SDLC
AI可以協助 SDLC 的每個階段,縮短整個SDLC的反饋環路,使公司能夠更快地推出產品。結果如何?企業通過在 SDLC 中使用人工智能驅動的工具來提高競爭優勢。
OpenAI 開發的 ChatGPT 等工具可以幫助進行市場調研和趨勢分析。AI可以分析客戶偏好,并通過簡單的文本提示幫助編寫用戶故事。從技術角度來看,它們還可以在產品發布前自動執行 CI/CD 流程、環境腳本、安全測試和性能測試。
GPT-4 還能幫助開發人員生成功能代碼、測試線束和自動化。此外,還可以創建數據模型、DDL 和序列圖。
圖1 AI的敏捷 SDLC
GitHub Copilot 、AWS CodeWhisperer 、華為CodeArts Snap等AI工具可在集成開發環境中自動完成大型代碼塊并檢查代碼質量問題,從而提高開發人員的工作效率。GitHub 和微軟最近進行的一項研究表明,當開發人員使用 Copilot 提供代碼幫助時,開發人員的效率提升超過 55%。從歷史的角度來看,這是生產率的顯著提高,超過了 19 世紀中期蒸汽機的引入,當時蒸汽機 "僅 "將大型工廠的生產率提高了 15%。
人工智能在整個 SDLC 中的累積效應可使綜合效率提高 30-50%。
3. 在軟件工程中應用AI
現在眾所周知,AI具有為技術組織增值的巨大潛力。但是,AI能直接幫助哪些關鍵的軟件工程活動呢?下面列出的只是AI能為創建軟件的團隊做些什么。
1)代碼生成
GitHub Copilot 、CodeWhisperer 、CodeArtsSnap等AI工具可以根據簡單的文本提示生成整個代碼功能。
讓我們來看看下面這個例子:在 Visual Studio Code 中,安裝 AWS CodeWhisperer 擴展后,當用戶鍵入下面的提示時,就會得到一個能解決問題的完整函數:
(在 JavaScript 中生成 CSV 字符串解析函數的文本提示)
生成的結果是一個完全可用的函數:
當我們嘗試上述提示的變體,增加額外的復雜度時,我們很可能會發現當前AI工具的一個缺陷。
讓我們試試下面的提示:
(提示:用于生成美國郵政編碼的解析函數,同時將郵政編碼轉換為經度和緯度)
結果生成如下所示的函數:
(生成的代碼確實會根據提示接收字符串并解析 CSV,但不會進一步將郵政編碼地理編碼為經緯度值。) 雖然這項更為復雜的任務需要進一步引導它去查詢,例如訪問 REST API(如美國人口普查局 Geocoder REST APIs8 提供的 REST API),但還是需要謹慎和警惕,因為該工具甚至沒有嘗試徹底解決問題。相反,它只是提供了一個模板代碼,沒有達到預期效果。
這個例子凸顯了當前AI工具的局限性之一:不能盲目相信生成的代碼,開發人員仍處于主導地位。“檢查代碼的準確性、完整性和錯誤” 對于AI驅動的開發人員工作流程至關重要。隨著工具日臻完善并向每位開發人員學習,生成代碼的準確性和復雜性也會隨之提高。盡管如此,如今開發人員仍然牢牢掌握著控制權。
2)代碼解釋 作為開發人員,我們有時會加入一個項目或繼承復雜的應用程序代碼。我們可能需要花上好幾天的時間才能理解項目的結構和代碼的工作原理,尤其是在文檔很少的情況下。在這種情況下,ChatGPT 可以幫助我們解釋代碼。 例如,讓我們看看下面的 Angular 函數:
我們可以給出提示 "解釋下面的 Angular 代碼是做什么的"。 下面 ChatGPT 的回復相當全面準確地解釋了函數的作用:
正如該示例所示,ChatGPT 可以減少閱讀、理解和解釋現有應用程序代碼所需的時間,并進一步幫助開發人員加快入職或在新代碼庫中提高工作效率。
3)AI驅動的軟件工程的其他任務
除了編寫和解釋代碼,AI每天都在掌握新的技能。下面列出的只是AI輔助軟件開發能力不斷增長的少數例子:
編寫用戶故事
生成數據模型
生成 DDL 和 DML
用人魚腳本生成數據圖表
生成序列圖
生成系統圖
用任何語言生成 OO 類模型
生成代碼
將代碼從一種語言翻譯成另一種語言
編寫自動測試
編寫代碼文檔
為基于 REST 的應用程序接口編寫 Swagger 定義
改進(重構)現有代碼
編寫代碼注釋
生成線框(GalileoAI)
調試代碼 + 靜態分析(Deepcode)
自動代碼重構(Sourcery)
設計模式識別
代碼審查(DeepScan)
更完整的清單超出了本文的范圍,將在后續文章中介紹。不過,在開始一項復雜的任務之前,最好先在網上查看一下AI功能。可能已經有AI工具或插件可以解決問題。未來還將帶來更多工具,并擴展現有工具的功能。
在AI的幫助下,開發人員、架構師和參與 SDLC 的每個人都將變成能夠更快地編寫出更好代碼的超人。
4. 結論
AIGC的出現為技術組織提供了提高效率的工具和技術。團隊可以創建更好的軟件產品,縮短開發生命周期,并對新原型進行市場測試,從而接觸到更多客戶,提高團隊效率。
企業可以通過擁抱變化并將AI定位為技術轉型的核心(AI+X),從AI革命中獲益;我們需要將AI的力量視為一種推動力,而不是一種威脅;我們的員工必須根據新出現的新一代AI工具接受再培訓,以了解其真正的潛力。此外,企業還可以將AI的應用范圍從軟件工程擴展到產品管理、質量保證、網絡安全和 DevOps。 總之,本文表明,雖然AIGC仍處于起步階段,但每天都會出現新的、功能更強的工具,這為專注于不斷學習、適應和發展的企業提供了可持續的長期競爭優勢。
審核編輯:劉清
-
人工智能
+關注
關注
1791文章
47350瀏覽量
238759 -
AWS
+關注
關注
0文章
432瀏覽量
24391 -
javascript語言
+關注
關注
0文章
3瀏覽量
961 -
OpenAI
+關注
關注
9文章
1096瀏覽量
6556 -
LLM
+關注
關注
0文章
290瀏覽量
351
原文標題:AI如何助力、驅動軟件研發?
文章出處:【微信號:軟件質量報道,微信公眾號:軟件質量報道】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論