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