虛擬主機(jī)空間發(fā)布網(wǎng)站谷歌排名網(wǎng)站優(yōu)化
在科技日新月異的今天,GPT的問(wèn)世無(wú)疑為各行各業(yè)帶來(lái)了一場(chǎng)深刻的變革,而軟件工程領(lǐng)域更是首當(dāng)其沖,正式邁入了軟件工程3.0的新紀(jì)元。2024年,作為軟件工程3.0的元年,伴隨著軟件工程3.0宣言的震撼發(fā)布,一個(gè)全新的軟件范式——ML-DevOps(更精確地表述為L(zhǎng)LM-DevOps:大模型驅(qū)動(dòng)開(kāi)發(fā)與運(yùn)維)悄然崛起,引領(lǐng)著軟件工程的新一輪革新。
回顧軟件工程的發(fā)展歷程,我們可以清晰地看到其演進(jìn)的三個(gè)階段:
-
軟件工程1.0時(shí)代(1968年):這是軟件工程的誕生之年,以瀑布模型為標(biāo)志,強(qiáng)調(diào)結(jié)構(gòu)化、規(guī)范化和工程化。在這個(gè)時(shí)代,軟件開(kāi)發(fā)被視為一項(xiàng)嚴(yán)謹(jǐn)而系統(tǒng)的工程,為后續(xù)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
-
軟件工程2.0時(shí)代(2001年):隨著敏捷宣言的發(fā)布,敏捷和DevOps的風(fēng)潮席卷全球,實(shí)現(xiàn)了持續(xù)構(gòu)建、持續(xù)集成和持續(xù)交付。這個(gè)時(shí)代注重快速響應(yīng)變化、團(tuán)隊(duì)協(xié)作和自動(dòng)化流程,極大地提升了軟件開(kāi)發(fā)的效率和質(zhì)量。
-
軟件工程3.0時(shí)代(2024年):如今,我們迎來(lái)了軟件工程3.0的新時(shí)代。隨著機(jī)器學(xué)習(xí),特別是大模型驅(qū)動(dòng)的LLM-DevOps成為新的核心驅(qū)動(dòng)力,軟件工程正經(jīng)歷著前所未有的變革。LLM-DevOps不僅優(yōu)化了軟件開(kāi)發(fā)流程,還提升了軟件質(zhì)量和可維護(hù)性,為軟件工程的未來(lái)發(fā)展指明了方向。
一、Agent在軟件工程中的廣泛應(yīng)用
在AI技術(shù)的推動(dòng)下,Agent正逐漸成為軟件工程中不可或缺的得力助手。從SE(軟件工程)視角深入分析LLM-based agents的應(yīng)用,我們可以進(jìn)一步探討其在各個(gè)軟件開(kāi)發(fā)和維護(hù)活動(dòng)中的具體作用和影響。
1.1 需求工程:精準(zhǔn)捕捉用戶需求
1.1.1 理論基礎(chǔ)
需求工程(RE)是軟件開(kāi)發(fā)生命周期中的一個(gè)關(guān)鍵階段。它初始化了軟件開(kāi)發(fā)過(guò)程,并涉及幾個(gè)關(guān)鍵活動(dòng):
-
誘發(fā)(需求收集):這個(gè)步驟包括從各種利益相關(guān)者那里收集新的需求。技術(shù)可能包括訪談、調(diào)查和研討會(huì)來(lái)捕捉用戶的需求和期望。
-
建模:在這個(gè)階段,使用抽象且可解釋的模型來(lái)表示需求。常見(jiàn)的建模語(yǔ)言包括統(tǒng)一建模語(yǔ)言(UML)和實(shí)體-關(guān)系-屬性(ERA)模型。
-
協(xié)商(需求規(guī)格):需求被詳細(xì)描述并以正式格式記錄。這份文檔作為開(kāi)發(fā)人員和利益相關(guān)者清晰且無(wú)歧義的參考。
-
驗(yàn)證:需求和模型被驗(yàn)證以確保它們準(zhǔn)確反映了利益相關(guān)者的意圖。這一步確保所有需求都是完整、一致和正確的。
-
演變:隨著利益相關(guān)者需求的變化,需求也在不斷演變。這個(gè)持續(xù)的過(guò)程涉及到更新需求,以符合新的業(yè)務(wù)目標(biāo)或技術(shù)進(jìn)步。
LM-based Agents能夠深入理解用戶需求,并將其轉(zhuǎn)化為具體、可實(shí)施的開(kāi)發(fā)任務(wù)。它們通過(guò)自然語(yǔ)言處理技術(shù),分析用戶意圖,識(shí)別出關(guān)鍵信息和需求點(diǎn)。同時(shí),它們還能根據(jù)歷史數(shù)據(jù)和經(jīng)驗(yàn),提供智能化的需求分析和建議,幫助開(kāi)發(fā)團(tuán)隊(duì)更加準(zhǔn)確地把握用戶需求。
1.1.2 實(shí)例場(chǎng)景
在一個(gè)在線教育平臺(tái)的開(kāi)發(fā)項(xiàng)目中,產(chǎn)品經(jīng)理描述了一個(gè)關(guān)于“實(shí)現(xiàn)個(gè)性化推薦功能”的需求。LLM-based Agent能夠分析這一需求,并自動(dòng)生成詳細(xì)的功能需求文檔,包括用戶畫(huà)像構(gòu)建、推薦算法選擇、界面設(shè)計(jì)等關(guān)鍵要素。同時(shí),它還能識(shí)別出潛在的用戶需求,如多場(chǎng)景推薦、實(shí)時(shí)更新等,為開(kāi)發(fā)團(tuán)隊(duì)提供更全面的指導(dǎo)。
1.1.3 當(dāng)前應(yīng)用(目前還在可研階段沒(méi)到軟件工程)
MARE,是一個(gè)覆蓋多個(gè)需求工程階段的多智能體框架,包括收集、建模、驗(yàn)證和規(guī)范。在收集階段,一組利益相關(guān)者智能體表達(dá)他們的需求,然后由收集者智能體將其組織成草案。隨后,建模者智能體識(shí)別草案中的實(shí)體和關(guān)系,并構(gòu)建需求模型;在驗(yàn)證階段,檢查者智能體根據(jù)其標(biāo)準(zhǔn)評(píng)估當(dāng)前需求草案的質(zhì)量,并將其移交給文檔編寫(xiě)者智能體,該智能體將編寫(xiě)需求規(guī)范或報(bào)告錯(cuò)誤。所有這些智能體都配備了預(yù)定義的操作,并可以在共享工作區(qū)內(nèi)通信,從而實(shí)現(xiàn)中間信息的無(wú)縫交換。
1.2 軟件設(shè)計(jì):AI輔助的創(chuàng)新探索
在設(shè)計(jì)方面,盡管AI的應(yīng)用相對(duì)較少,但它仍然可以輔助設(shè)計(jì),甚至利用機(jī)器學(xué)習(xí)的洞察力探索復(fù)雜設(shè)計(jì)問(wèn)題的新解決方案。
1.2.1 設(shè)計(jì)生成與探索
AI技術(shù)能夠增強(qiáng)產(chǎn)品開(kāi)發(fā)實(shí)踐,從概念到設(shè)計(jì)驗(yàn)證全程指導(dǎo)設(shè)計(jì)人員。例如,Altair DesignAI等工具能夠成倍提高工程團(tuán)隊(duì)的生產(chǎn)力,探索更廣泛的客戶滿意的高性能、有意義且能實(shí)施的新產(chǎn)品設(shè)計(jì)替代方案。同時(shí),Design Explorer等AI驅(qū)動(dòng)的設(shè)計(jì)工具能夠加強(qiáng)協(xié)作、加速設(shè)計(jì)迭代并推動(dòng)產(chǎn)品創(chuàng)新。
1.2.2 優(yōu)化設(shè)計(jì)
從設(shè)計(jì)微調(diào)到設(shè)計(jì)合成,AI能夠利用各種信息探索和創(chuàng)造新理念,確定折衷方案并為決策提供支持。例如,Synopsys DSO.ai的強(qiáng)化學(xué)習(xí)引擎能夠在優(yōu)化過(guò)程中進(jìn)行智能學(xué)習(xí)并縮小設(shè)計(jì)空間,有效優(yōu)化數(shù)萬(wàn)億的設(shè)計(jì)方案,實(shí)現(xiàn)更好的結(jié)果、加快結(jié)果轉(zhuǎn)化速度并降低計(jì)算成本。
1.3 代碼生成:AI技術(shù)的自動(dòng)化編程新篇章
1.3.1理論基礎(chǔ)
隨著人工智能發(fā)展,代碼生成被廣泛探索。大型語(yǔ)言模型(LLMs)經(jīng)大量文本數(shù)據(jù)預(yù)訓(xùn)練,在依給定代碼上下文或自然語(yǔ)言描述生成代碼時(shí)有良好效果,但存在如幻覺(jué)等問(wèn)題,促使研究人員構(gòu)建基于 LLM 的智能體,通過(guò)規(guī)劃和迭代優(yōu)化增強(qiáng)其能力, 下圖展示了相關(guān)擴(kuò)展情況
從Codex到Github Copilot,代碼生成技術(shù)不斷迭代升級(jí)。Codex模型包括非監(jiān)督學(xué)習(xí)的Codex、監(jiān)督訓(xùn)練的Codex-S以及通過(guò)代碼生成代碼文本描述的Codex-D。而Github Copilot則基于Codex模型訓(xùn)練,成為面向開(kāi)發(fā)者的代碼補(bǔ)全產(chǎn)品,迅速提升了代碼生成技術(shù)的能力。
為了擴(kuò)展LLMs的代碼生成能力,研究人員采用了多種規(guī)劃方法,如思維鏈(CoT)策略、動(dòng)態(tài)規(guī)劃策略、不同規(guī)劃步驟的表示形式以及多路徑規(guī)劃策略等。同時(shí),智能體還可以根據(jù)環(huán)境反饋多次迭代優(yōu)化已生成的代碼,包括模型反饋、工具反饋、人類(lèi)反饋以及混合反饋等。
1.3.2實(shí)例場(chǎng)景
對(duì)于專(zhuān)業(yè)開(kāi)發(fā)人員而言,代碼生成工具能夠提高其開(kāi)發(fā)效率,從簡(jiǎn)單重復(fù)的勞動(dòng)中解放出來(lái),專(zhuān)注于架構(gòu)、設(shè)計(jì)等復(fù)雜任務(wù)。而對(duì)于代碼鉆研者、尋求代碼相關(guān)解答的開(kāi)發(fā)者而言,這些工具則能夠支持其快速創(chuàng)建小的、即時(shí)使用的任務(wù)型應(yīng)用程序,如函數(shù)計(jì)算程序等。
1.3.3當(dāng)前應(yīng)用
當(dāng)前,代碼生成工具在軟件開(kāi)發(fā)領(lǐng)域的應(yīng)用已經(jīng)變得十分廣泛。無(wú)論是國(guó)外的GitHub Copilot、Tabnine,還是國(guó)內(nèi)的通義靈碼、CodeGeeX、MarsCode、文心快碼等工具,都展現(xiàn)出了強(qiáng)大的實(shí)力。這些工具通過(guò)分析大量的代碼庫(kù)和編程規(guī)范,能夠自動(dòng)生成高質(zhì)量的代碼片段,甚至完整的函數(shù)和類(lèi),從而極大地提高了開(kāi)發(fā)者的生產(chǎn)效率。
在代碼生成方面,AI技術(shù)已經(jīng)得到了廣泛的應(yīng)用。其中,Codex作為這一領(lǐng)域的鼻祖,為后續(xù)的代碼生成工具奠定了堅(jiān)實(shí)的基礎(chǔ)。而GitHub Copilot更是將代碼生成技術(shù)推向了一個(gè)新的高度,使得更多的開(kāi)發(fā)者能夠享受到這一技術(shù)帶來(lái)的便利。盡管GitHub Copilot在技術(shù)領(lǐng)域備受推崇,但我們也應(yīng)該看到,國(guó)內(nèi)的通義靈碼等工具同樣表現(xiàn)出色,并且提供了免費(fèi)的服務(wù)。
因此,在選擇代碼生成工具時(shí),我們不必局限于某一個(gè)特定的品牌或產(chǎn)品。相反,我們應(yīng)該根據(jù)自己的實(shí)際需求和偏好進(jìn)行選擇,將更多的精力投入到如何更好地應(yīng)用這些工具上。無(wú)論是GitHub Copilot還是國(guó)內(nèi)的通義靈碼等工具,它們都是為了提高開(kāi)發(fā)者的生產(chǎn)效率而存在的。我們應(yīng)該充分利用這些工具的優(yōu)勢(shì),將它們應(yīng)用到實(shí)際的軟件開(kāi)發(fā)過(guò)程中,從而創(chuàng)造出更加優(yōu)質(zhì)、高效的代碼。
1.4 靜態(tài)代碼檢查:AI智能守護(hù)代碼質(zhì)量與安全
1.4.1 理論基礎(chǔ)
在靜態(tài)代碼檢查領(lǐng)域,基于大型語(yǔ)言模型(LLM)的智能體(agents)展現(xiàn)了強(qiáng)大的分析能力,能夠深入洞察代碼中的潛在問(wèn)題,包括語(yǔ)法錯(cuò)誤、安全漏洞以及性能瓶頸等。通過(guò)集成靜態(tài)程序分析工具,這些智能體不僅能提供詳盡的錯(cuò)誤報(bào)告,還能為開(kāi)發(fā)者提供針對(duì)性的修復(fù)建議,從而加速問(wèn)題的修正過(guò)程。
此外,LLM-based agents還具備學(xué)習(xí)和適應(yīng)團(tuán)隊(duì)編碼規(guī)范的能力。它們能夠自動(dòng)檢測(cè)代碼是否符合團(tuán)隊(duì)的編碼標(biāo)準(zhǔn),確保代碼的一致性和可維護(hù)性。
1靜態(tài)漏洞檢測(cè)
盡管LLMs通過(guò)微調(diào)或特定提示能夠識(shí)別代碼中的潛在質(zhì)量問(wèn)題,但由于代碼問(wèn)題的復(fù)雜性和長(zhǎng)代碼上下文的挑戰(zhàn),獨(dú)立LLMs在靜態(tài)代碼檢查中的準(zhǔn)確性和召回率仍受到限制。為了提升性能,可以采用多智能體系統(tǒng)來(lái)增強(qiáng)LLMs在漏洞或脆弱性檢測(cè)方面的能力。這些智能體可以協(xié)同工作,共同分析代碼,從而提高檢測(cè)的準(zhǔn)確性和效率。如下圖
2代碼評(píng)審
傳統(tǒng)的代碼評(píng)審?fù)ǔ1灰暈槎诸?lèi)或序列到序列生成問(wèn)題,通過(guò)微調(diào)或提示深度學(xué)習(xí)模型來(lái)解決。然而,基于LLM的智能體則通過(guò)模擬真實(shí)的同行評(píng)審過(guò)程,實(shí)現(xiàn)了更加智能化的代碼評(píng)審。例如,CodeAgent構(gòu)建了一個(gè)包含多個(gè)智能體的團(tuán)隊(duì),每個(gè)智能體都專(zhuān)注于特定的代碼評(píng)審任務(wù),如代碼質(zhì)量評(píng)估、漏洞報(bào)告、代碼異味檢測(cè)和代碼優(yōu)化等。這些智能體在相關(guān)的GitHub數(shù)據(jù)上進(jìn)行訓(xùn)練,并在多個(gè)基于人工智能的項(xiàng)目上進(jìn)行評(píng)估,證明了多智能體系統(tǒng)在代碼評(píng)審任務(wù)中的巨大潛力。
1.4.2 實(shí)例場(chǎng)景
在一個(gè)大型金融應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程中,LLM-based Agent通過(guò)其靜態(tài)代碼檢查功能成功識(shí)別出了一個(gè)潛在的內(nèi)存泄漏問(wèn)題。該智能體深入分析了代碼中的內(nèi)存分配和釋放情況,發(fā)現(xiàn)了一處未正確釋放內(nèi)存的代碼段,并立即為開(kāi)發(fā)者提供了修復(fù)建議。這一及時(shí)的發(fā)現(xiàn)不僅避免了潛在的性能問(wèn)題,還降低了安全風(fēng)險(xiǎn),確保了系統(tǒng)的穩(wěn)定性和可靠性。
1.4.3當(dāng)前應(yīng)用
目前,靜態(tài)代碼分析工具如SonarQube、Checkstyle等已經(jīng)能夠與LLM-based Agents相結(jié)合,實(shí)現(xiàn)更加智能化的代碼審查。這些工具能夠自動(dòng)檢測(cè)出代碼中的錯(cuò)誤和潛在問(wèn)題,并提供詳細(xì)的修復(fù)建議和代碼重構(gòu)建議。
1.5 軟件測(cè)試:大型語(yǔ)言模型引領(lǐng)的高效驗(yàn)證之路
1.5.1 理論基礎(chǔ)
大型語(yǔ)言模型(LLMs)在軟件測(cè)試中的應(yīng)用,特別是在單元測(cè)試和系統(tǒng)測(cè)試方面,已經(jīng)取得了顯著的成果。這些模型具備強(qiáng)大的自然語(yǔ)言處理和理解能力,能夠?qū)W習(xí)并捕捉語(yǔ)言中的深層次語(yǔ)義和上下文信息,從而生成高質(zhì)量的測(cè)試用例和測(cè)試腳本。
-
單元測(cè)試:單元測(cè)試是對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查的過(guò)程,通常涉及對(duì)方法或類(lèi)的測(cè)試。LLMs能夠自動(dòng)生成具有良好可讀性和可用性的單元測(cè)試用例,這些測(cè)試用例能夠覆蓋多種可能的輸入和輸出情況,從而確保代碼的正確性和穩(wěn)定性。然而,獨(dú)立LLMs生成的單元測(cè)試可能存在編譯或執(zhí)行錯(cuò)誤以及覆蓋度有限的問(wèn)題。為了解決這些問(wèn)題,可以基于LLM構(gòu)建智能體,通過(guò)迭代優(yōu)化來(lái)提升單元測(cè)試的正確性、覆蓋度和故障檢測(cè)能力。
-
系統(tǒng)測(cè)試:系統(tǒng)測(cè)試是一個(gè)全面的過(guò)程,用于評(píng)估集成的軟件系統(tǒng)或組件在不同設(shè)置下的性能。LLMs在系統(tǒng)測(cè)試中的應(yīng)用也頗具挑戰(zhàn),但基于LLM的智能體通過(guò)融合被測(cè)軟件系統(tǒng)的領(lǐng)域知識(shí),能夠生成更加有效且實(shí)用的系統(tǒng)級(jí)測(cè)試用例。這些測(cè)試用例能夠模擬真實(shí)用戶場(chǎng)景,從而確保軟件在實(shí)際使用中的穩(wěn)定性和可靠性。
1.5.2 實(shí)例場(chǎng)景
-
單元測(cè)試場(chǎng)景:在單元測(cè)試中,LLMs可以自動(dòng)生成測(cè)試用例來(lái)驗(yàn)證代碼的正確性和邊界情況。例如,在開(kāi)發(fā)一個(gè)復(fù)雜的算法庫(kù)時(shí),測(cè)試人員可以利用LLMs生成大量的測(cè)試用例來(lái)覆蓋各種可能的輸入和輸出情況。
-
系統(tǒng)測(cè)試場(chǎng)景:在系統(tǒng)測(cè)試中,LLMs可以生成模擬真實(shí)用戶行為的測(cè)試用例來(lái)驗(yàn)證網(wǎng)站的性能和用戶體驗(yàn)。例如,在開(kāi)發(fā)一個(gè)電子商務(wù)網(wǎng)站時(shí),測(cè)試人員可以利用LLMs生成模擬用戶行為的測(cè)試用例,如注冊(cè)、登錄、瀏覽商品、下單等,以驗(yàn)證網(wǎng)站在不同場(chǎng)景下的穩(wěn)定性和可靠性。
-
集成測(cè)試場(chǎng)景:集成測(cè)試是將各個(gè)模塊組合起來(lái)進(jìn)行測(cè)試的過(guò)程。LLMs可以幫助測(cè)試人員識(shí)別模塊之間的接口問(wèn)題,并生成相應(yīng)的測(cè)試用例來(lái)驗(yàn)證接口的兼容性和穩(wěn)定性。這有助于確保各個(gè)模塊能夠協(xié)同工作并達(dá)到預(yù)期的功能。
-
性能測(cè)試場(chǎng)景:性能測(cè)試是評(píng)估軟件在特定條件下的性能表現(xiàn)。LLMs可以模擬大量用戶同時(shí)訪問(wèn)軟件的情況,并生成相應(yīng)的測(cè)試數(shù)據(jù)來(lái)評(píng)估軟件的性能瓶頸和優(yōu)化空間。這有助于開(kāi)發(fā)團(tuán)隊(duì)了解軟件的性能表現(xiàn)并進(jìn)行相應(yīng)的優(yōu)化。
1.5.3 當(dāng)前應(yīng)用
-
單元測(cè)試方面:結(jié)合通義靈碼、JUnit及Mockito等工具,我們可以高效地實(shí)現(xiàn)單元測(cè)試。通義靈碼提供了豐富的單元測(cè)試實(shí)踐案例,為測(cè)試人員提供了有力的支持。
-
系統(tǒng)測(cè)試方面:Testim.io是一個(gè)創(chuàng)新的基于AI的自動(dòng)化測(cè)試平臺(tái),為Web和移動(dòng)應(yīng)用的端到端測(cè)試帶來(lái)了全新的解決方案。其強(qiáng)大的功能包括AI驅(qū)動(dòng)的測(cè)試用例生成、智能元素定位器以及自我修復(fù)測(cè)試等,極大地提升了測(cè)試人員的工作效率。
-
集成測(cè)試方面:TestNG和Cucumber是兩個(gè)備受推崇的自動(dòng)化測(cè)試框架。TestNG適用于Java應(yīng)用程序的單元、集成和端到端測(cè)試,而Cucumber則以其基于自然語(yǔ)言的方法而廣受贊譽(yù),成為行為驅(qū)動(dòng)開(kāi)發(fā)(BDD)愛(ài)好者的首選。
-
性能測(cè)試方面:HP LoadRunner和JMeter是兩款值得關(guān)注的性能測(cè)試工具。HP LoadRunner能夠模擬上萬(wàn)用戶同時(shí)實(shí)施測(cè)試,幫助用戶確認(rèn)和查找存在的瓶頸;而JMeter則基于Java平臺(tái),不僅適用于接口測(cè)試,還廣泛用于系統(tǒng)性能評(píng)估。
1.6 軟件調(diào)試:AI輔助的精準(zhǔn)定位與問(wèn)題解決
1.6.1理論基礎(chǔ)
在軟件調(diào)試領(lǐng)域,尤其是在大型語(yǔ)言模型(LLM)逐漸嶄露頭角的時(shí)代背景下,故障定位、程序修復(fù)以及統(tǒng)一調(diào)試這三個(gè)關(guān)鍵環(huán)節(jié)均得到了顯著的革新與推動(dòng)。
-
故障定位
-
多智能體協(xié)同:在LLM時(shí)代,研究者們構(gòu)建了多個(gè)由LLM驅(qū)動(dòng)的智能體(如AgentFL和RCAgent等),每個(gè)智能體都具備專(zhuān)業(yè)知識(shí)和工具,以實(shí)現(xiàn)項(xiàng)目級(jí)代碼的高效故障定位。這些智能體通過(guò)協(xié)同作用,能夠簡(jiǎn)化復(fù)雜的故障定位過(guò)程,提高定位的準(zhǔn)確性和效率。
-
工具調(diào)用:系統(tǒng)如AUTOFL通過(guò)工具調(diào)用增強(qiáng)了LLM的功能,使其能夠更深入地探索代碼庫(kù)并精確定位故障。這些系統(tǒng)能夠自主決定何時(shí)調(diào)用工具以及調(diào)用哪些工具,從而實(shí)現(xiàn)對(duì)代碼庫(kù)的全面分析。
-
-
程序修復(fù)
-
迭代優(yōu)化:基于LLM的智能體在程序修復(fù)方面采用了迭代優(yōu)化的方法。例如,ChatRepair、CigaR和RepairAgent等系統(tǒng)通過(guò)工具調(diào)用、模型反饋以及硬編碼的反饋機(jī)制等方式,不斷迭代生成和優(yōu)化補(bǔ)丁,直至生成合理且多樣的補(bǔ)丁。
-
多智能體系統(tǒng):系統(tǒng)如AutoSD和ACFIX通過(guò)構(gòu)建多智能體系統(tǒng)來(lái)實(shí)現(xiàn)更高效的程序修復(fù)。這些系統(tǒng)模擬科學(xué)調(diào)試過(guò)程,賦予LLM不同角色,并利用工具反饋和模型反饋來(lái)精細(xì)化控制補(bǔ)丁的生成和驗(yàn)證。
-
-
統(tǒng)一調(diào)試
-
多智能體協(xié)同:FixAgent等系統(tǒng)通過(guò)構(gòu)建多智能體系統(tǒng),實(shí)現(xiàn)了端到端的故障定位、錯(cuò)誤修復(fù)和錯(cuò)誤分析。這些系統(tǒng)通過(guò)智能體專(zhuān)業(yè)化和協(xié)同作用,納入了關(guān)鍵變量跟蹤和程序上下文理解等關(guān)鍵功能,從而提高了統(tǒng)一調(diào)試的準(zhǔn)確性和效率。
-
控制流圖分析:LDB等系統(tǒng)利用控制流圖將有缺陷的程序劃分為基本塊,并通過(guò)LLM檢測(cè)帶有運(yùn)行時(shí)執(zhí)行值的不正確塊。這種方法不僅提高了故障定位的精度,還為程序修復(fù)提供了更具體的優(yōu)化建議。
-
1.6.2實(shí)例場(chǎng)景
-
企業(yè)運(yùn)維自動(dòng)化:大語(yǔ)言模型能夠分析歷史監(jiān)控?cái)?shù)據(jù),學(xué)習(xí)系統(tǒng)的正常運(yùn)行模式,并在異常發(fā)生時(shí)迅速識(shí)別出異常模式,實(shí)現(xiàn)智能監(jiān)控和故障預(yù)警。同時(shí),它還能通過(guò)分析故障現(xiàn)象、系統(tǒng)日志和歷史案例等信息,自動(dòng)推理出可能的故障原因和解決方案。
-
程序自動(dòng)修復(fù):大語(yǔ)言模型能夠理解和生成代碼,因此可以用于程序自動(dòng)修復(fù)任務(wù)。通過(guò)迭代優(yōu)化的方法,大語(yǔ)言模型可以不斷生成和優(yōu)化補(bǔ)丁,以修復(fù)代碼中的缺陷。
-
統(tǒng)一調(diào)試平臺(tái):基于LLM的統(tǒng)一調(diào)試平臺(tái)能夠整合故障定位和程序修復(fù)功能,實(shí)現(xiàn)端到端的調(diào)試過(guò)程。通過(guò)多智能體協(xié)同和控制流圖分析等方法,這些平臺(tái)能夠提供更準(zhǔn)確、高效的調(diào)試服務(wù)。
1.6.3當(dāng)前應(yīng)用
-
Replit:正致力于開(kāi)發(fā)能夠自動(dòng)修復(fù)代碼的大型語(yǔ)言模型。通過(guò)收集用戶會(huì)話中的操作軌跡和語(yǔ)言服務(wù)器協(xié)議的診斷信息,重建項(xiàng)目狀態(tài),并利用LLM生成和篩選代碼差異,實(shí)現(xiàn)代碼的自動(dòng)修復(fù)。通過(guò)監(jiān)督學(xué)習(xí)對(duì)模型進(jìn)行微調(diào),并利用公共基準(zhǔn)測(cè)試集和新創(chuàng)建的數(shù)據(jù)集對(duì)模型進(jìn)行評(píng)估,以提升模型在代碼修復(fù)任務(wù)上的表現(xiàn)。
-
Copilot AutoFix:GitHub Advanced Security(GHAS)推出的AI修復(fù)助手。在檢測(cè)到代碼漏洞后,能夠自動(dòng)生成修復(fù)建議,提高修復(fù)效率,并簡(jiǎn)化安全流程。
-
New Relic AI:將大型語(yǔ)言模型與New Relic的數(shù)據(jù)平臺(tái)相結(jié)合,為用戶提供強(qiáng)大的系統(tǒng)理解和管理能力。用戶可以通過(guò)聊天功能與AI助手互動(dòng),提出問(wèn)題并獲取關(guān)于系統(tǒng)性能和故障排除的見(jiàn)解。AI助手還能夠自動(dòng)創(chuàng)建NRQL查詢,幫助用戶分析系統(tǒng)數(shù)據(jù),并從日志和堆棧跟蹤中提取錯(cuò)誤的摘要和詳細(xì)信息,以快速定位并解決問(wèn)題。此外,AI助手還能夠識(shí)別警報(bào)覆蓋的空白區(qū)域,幫助用戶設(shè)置合成監(jiān)控任務(wù),匯總并檢查支持工單的狀態(tài),以及從儀表板中獲取摘要和見(jiàn)解。
二、端到端軟件開(kāi)發(fā)的全面解析
Agent 通過(guò)執(zhí)行多種開(kāi)發(fā)子任務(wù),包括需求工程、設(shè)計(jì)、代碼生成和質(zhì)量保證(包括靜態(tài)檢查和測(cè)試等),完成從需求到最終程序的全流程開(kāi)發(fā)。目前面向端到端軟件開(kāi)發(fā)的 Agent 主要模擬真實(shí)的軟件開(kāi)發(fā)團(tuán)隊(duì),設(shè)計(jì)不同的軟件開(kāi)發(fā)角色,互相協(xié)作共同完成軟件開(kāi)發(fā)任務(wù)。
2.1 軟件開(kāi)發(fā)流程:經(jīng)典與創(chuàng)新的融合
現(xiàn)有的基于LLM的智能體系統(tǒng),在遵循經(jīng)典的軟件流程模型,如瀑布模型和敏捷開(kāi)發(fā)的基礎(chǔ)上,進(jìn)行了創(chuàng)新性的設(shè)計(jì)。
-
瀑布模型:這一傳統(tǒng)模型以線性且順序的方式,將軟件開(kāi)發(fā)分為需求、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、部署和維護(hù)等階段。然而,一些智能體通過(guò)迭代的方式,對(duì)瀑布模型進(jìn)行了擴(kuò)展,從而提高了生成內(nèi)容的質(zhì)量。
-
敏捷開(kāi)發(fā):強(qiáng)調(diào)迭代和增量的敏捷開(kāi)發(fā)模型,如測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)和Scrum,在AI輔助的軟件開(kāi)發(fā)中同樣大放異彩。實(shí)驗(yàn)表明,Scrum模型在函數(shù)級(jí)代碼生成上表現(xiàn)尤為出色。
2.2 角色專(zhuān)業(yè)化:模擬與分解的雙重奏
為了完成端到端軟件開(kāi)發(fā)任務(wù),基于LLM的智能體系統(tǒng)分配了不同的角色來(lái)處理專(zhuān)門(mén)的子任務(wù)。這些角色既模擬了真實(shí)的軟件開(kāi)發(fā)團(tuán)隊(duì),又根據(jù)工作流程進(jìn)行了巧妙的分解。
-
模擬現(xiàn)實(shí)團(tuán)隊(duì):智能體系統(tǒng)可以分配如經(jīng)理、需求分析師、設(shè)計(jì)師、開(kāi)發(fā)者和質(zhì)量保證專(zhuān)家等角色。這些角色各司其職,共同協(xié)作,將軟件開(kāi)發(fā)任務(wù)逐一攻克。例如,經(jīng)理負(fù)責(zé)全局的協(xié)調(diào)和管理,需求分析師則深入洞察用戶需求,設(shè)計(jì)師則匠心獨(dú)運(yùn)地設(shè)計(jì)系統(tǒng)架構(gòu)和界面,開(kāi)發(fā)者則化繁為簡(jiǎn)地編寫(xiě)代碼,而質(zhì)量保證專(zhuān)家則嚴(yán)格把關(guān),確保軟件的正確性和穩(wěn)定性。
-
依據(jù)工作流程分解角色:智能體系統(tǒng)還可以根據(jù)工作流程的細(xì)微差別,進(jìn)一步分解角色。如代碼庫(kù)、文件和方法層的實(shí)現(xiàn)角色,這些角色更加專(zhuān)注于具體的開(kāi)發(fā)任務(wù),從而提高了開(kāi)發(fā)效率和代碼質(zhì)量。
2.3 協(xié)作機(jī)制:有序與無(wú)序的交響樂(lè)
在端到端軟件開(kāi)發(fā)中,各個(gè)智能體之間的協(xié)調(diào)至關(guān)重要。智能體系統(tǒng)通過(guò)安排合適的協(xié)作模式和通信協(xié)議,確保各個(gè)智能體能夠高效、準(zhǔn)確地完成任務(wù)。
-
協(xié)作模式:
-
有序模式:智能體獨(dú)立決策,并通過(guò)反饋機(jī)制不斷提高質(zhì)量。每個(gè)智能體都在自己的領(lǐng)域內(nèi)發(fā)光發(fā)熱,通過(guò)反饋機(jī)制與其他智能體進(jìn)行交流和協(xié)作,共同推動(dòng)項(xiàng)目的進(jìn)展。
-
無(wú)序模式:智能體平等地提出意見(jiàn),并通過(guò)匯總得出最終決策。這種模式更加靈活和民主,能夠確保決策的全面性和準(zhǔn)確性。然而,它也可能帶來(lái)決策過(guò)程的復(fù)雜性和耗時(shí)性。
-
-
通信協(xié)議:
-
自然語(yǔ)言:智能體之間可以直接對(duì)話,用自然語(yǔ)言靈活表達(dá)意圖。這種通信方式更加自然和直觀,有助于促進(jìn)智能體之間的深入交流和協(xié)作。但自然語(yǔ)言也可能帶來(lái)歧義和誤解的問(wèn)題。
-
結(jié)構(gòu)化信息:智能體之間還可以交換文檔、圖表等結(jié)構(gòu)化信息,特別適用于多輪復(fù)雜任務(wù)。這種通信方式更加準(zhǔn)確和清晰,能夠確保信息的正確傳遞和理解。但準(zhǔn)備和解釋這些信息可能需要更多的時(shí)間和資源。
-
2.4 特定智能體系統(tǒng):Meta GPT
Meta GPT是一種基于大型語(yǔ)言模型的智能體系統(tǒng),它在端到端軟件開(kāi)發(fā)中表現(xiàn)出色。Meta GPT能夠模擬真實(shí)的軟件開(kāi)發(fā)團(tuán)隊(duì),并分配不同的角色來(lái)處理專(zhuān)門(mén)的子任務(wù)。它還可以與其他智能體進(jìn)行高效的協(xié)作和通信,以確保軟件開(kāi)發(fā)任務(wù)的順利完成。這是我目前在跟蹤的開(kāi)源項(xiàng)目。
目前,已經(jīng)有多個(gè)基于大型語(yǔ)言模型的智能體系統(tǒng)被應(yīng)用于端到端軟件開(kāi)發(fā)中。這些系統(tǒng)各具特色,為軟件開(kāi)發(fā)帶來(lái)了全新的可能。如下表:
三、端到端軟件維護(hù)的策略與實(shí)踐
Agent在軟件維護(hù)領(lǐng)域發(fā)揮著重要作用,支持故障定位、修復(fù)及特性維護(hù)等多元化活動(dòng),實(shí)現(xiàn)從問(wèn)題報(bào)告至補(bǔ)丁生成的全面維護(hù)流程。當(dāng)前,基于大型語(yǔ)言模型(LLM)的智能體系統(tǒng)已應(yīng)用于端到端軟件維護(hù),其流程涵蓋預(yù)處理、問(wèn)題重現(xiàn)、問(wèn)題定位、任務(wù)分解、補(bǔ)丁生成、補(bǔ)丁驗(yàn)證及補(bǔ)丁排序等關(guān)鍵環(huán)節(jié)。盡管各智能體在處理各階段時(shí)策略各異,但總體框架相似。
-
預(yù)處理:智能體首先進(jìn)行預(yù)處理,構(gòu)建代碼庫(kù)的知識(shí)圖譜或樹(shù)狀結(jié)構(gòu),為后續(xù)問(wèn)題定位奠定堅(jiān)實(shí)基礎(chǔ)。
-
問(wèn)題重現(xiàn):為有效解決問(wèn)題,智能體設(shè)計(jì)問(wèn)題重現(xiàn)階段,利用LLM根據(jù)問(wèn)題描述生成可執(zhí)行的測(cè)試腳本,以重現(xiàn)用戶遇到的意外行為。
-
問(wèn)題定位:此階段至關(guān)重要,智能體需精確識(shí)別與問(wèn)題相關(guān)的代碼元素。采用策略包括基于檢索、導(dǎo)航、頻譜的定位及模擬等。
-
任務(wù)分解:在補(bǔ)丁生成前,部分智能體會(huì)將任務(wù)細(xì)化為更小的子任務(wù),以精準(zhǔn)定位并解決問(wèn)題。
-
補(bǔ)丁生成:智能體針對(duì)已定位的代碼元素生成補(bǔ)丁,輸入包括問(wèn)題/任務(wù)描述及待修改的代碼元素。
-
補(bǔ)丁驗(yàn)證:驗(yàn)證補(bǔ)丁正確性頗具挑戰(zhàn),智能體采用代碼審查、靜態(tài)及動(dòng)態(tài)檢查等多種策略。
-
補(bǔ)丁排序:為篩選出最可能正確的補(bǔ)丁,部分智能體增設(shè)補(bǔ)丁排序階段。
盡管取得顯著進(jìn)展,基于LLM的智能體在軟件維護(hù)方面仍面臨挑戰(zhàn),如問(wèn)題重現(xiàn)成功率及問(wèn)題定位精確性有待提升。未來(lái)發(fā)展方向可能包括:
-
提高問(wèn)題重現(xiàn)成功率:通過(guò)增強(qiáng)LLM生成能力及引入更多上下文信息,提升重現(xiàn)測(cè)試的可執(zhí)行性和針對(duì)性。
-
增強(qiáng)問(wèn)題定位精確性:結(jié)合先進(jìn)代碼搜索算法及更多代碼上下文信息,提高定位準(zhǔn)確性。
-
優(yōu)化補(bǔ)丁生成與驗(yàn)證:引入約束和優(yōu)化算法,提升補(bǔ)丁質(zhì)量,并采用更全面的驗(yàn)證策略確保補(bǔ)丁正確性。
四、軟件工程未來(lái)的研究趨勢(shì)與方向
在軟件工程的浩瀚宇宙中,Agent正逐漸成為我們探索、開(kāi)發(fā)與維護(hù)代碼的得力助手。然而,如何準(zhǔn)確評(píng)估這些Agent的能力,以及如何實(shí)現(xiàn)更高效的人機(jī)協(xié)同,成為了擺在我們面前的重要課題。
4.1評(píng)測(cè)體系的革新
當(dāng)前的Agent評(píng)測(cè)體系,雖然聚焦于其端到端解決特定任務(wù)的能力,但如同盲人摸象,僅觸及了冰山一角。我們亟需一個(gè)更全面、深入的評(píng)測(cè)基準(zhǔn),來(lái)揭示Agent的決策過(guò)程、失敗原因,以及其在魯棒性、效率等可信指標(biāo)上的表現(xiàn)。同時(shí),評(píng)測(cè)數(shù)據(jù)集也應(yīng)擺脫邏輯簡(jiǎn)化、與現(xiàn)實(shí)脫節(jié)的桎梏,向更高質(zhì)量、更貼近現(xiàn)實(shí)的方向邁進(jìn)。只有這樣,我們才能準(zhǔn)確評(píng)估Agent的真正實(shí)力,為其后續(xù)的優(yōu)化提供有力支撐。
4.2人機(jī)協(xié)同的拓展
在人機(jī)協(xié)同的舞臺(tái)上,Agent的角色仍然有限,主要局限于需求工程、設(shè)計(jì)、測(cè)試評(píng)估等環(huán)節(jié)。而未來(lái),我們期待看到Agent在更多場(chǎng)景中綻放光彩,與人共同編織出更加流暢、自然的協(xié)作樂(lè)章。這需要我們不僅要在技術(shù)上實(shí)現(xiàn)突破,更要深入探索高效友好的交互接口,讓Agent成為我們工作中的得力伙伴。
4.3感知模態(tài)的多樣化
Agent的感知能力,是其理解世界、執(zhí)行任務(wù)的基礎(chǔ)。目前,Agent主要依賴文本或視覺(jué)感知,這在一定程度上限制了其靈活性和可訪問(wèn)性。未來(lái),我們期待看到Agent能夠整合多樣化的感知模態(tài),如語(yǔ)音命令、用戶手勢(shì)等,讓其在更加復(fù)雜、多變的環(huán)境中游刃有余。這樣的Agent,將不僅是一個(gè)編碼助手,更是一個(gè)能夠與我們?nèi)轿换?dòng)的智能伙伴。
4.4軟工任務(wù)的全面覆蓋
盡管Agent在軟工任務(wù)中已經(jīng)展現(xiàn)出強(qiáng)大的潛力,但在設(shè)計(jì)、驗(yàn)證和功能維護(hù)等關(guān)鍵階段,其應(yīng)用仍然有限。這些階段,如同軟件開(kāi)發(fā)的“暗區(qū)”,等待著我們?nèi)ヌ剿?、去征服。為這些階段開(kāi)發(fā)Agent系統(tǒng),將是一項(xiàng)充滿挑戰(zhàn)的任務(wù),但也將為我們帶來(lái)前所未有的機(jī)遇。
4.5基座大模型的構(gòu)建
面向軟件工程領(lǐng)域的基座大模型,是Agent在軟件開(kāi)發(fā)與維護(hù)中的“基石”。它不僅要能夠處理代碼數(shù)據(jù),更要能夠捕捉設(shè)計(jì)、架構(gòu)、開(kāi)發(fā)者討論、程序動(dòng)態(tài)執(zhí)行、歷史演化等多方面的信息。這樣的模型,將為Agent提供更加全面、深入的知識(shí)支持,使其在軟件開(kāi)發(fā)與維護(hù)中發(fā)揮出更大的作用。
4.6軟件工程知識(shí)的融入
在Agent的設(shè)計(jì)中,我們不能忽視軟件工程領(lǐng)域的經(jīng)典方法論和思想。這些方法論和思想,如同Agent的“靈魂”,指導(dǎo)著其在軟件開(kāi)發(fā)與維護(hù)中的每一步行動(dòng)。通過(guò)融入這些知識(shí),我們可以讓Agent的解決方案更加有效、魯棒和高效,從而推動(dòng)軟件工程的進(jìn)一步發(fā)展。
五、結(jié)語(yǔ)
在這個(gè)AI技術(shù)日新月異的時(shí)代,我們應(yīng)當(dāng)全力以赴,將AI融入軟件工程的每一個(gè)角落。通過(guò)不斷優(yōu)化Agent的應(yīng)用、建立全面的評(píng)估體系、優(yōu)化人機(jī)協(xié)同模式以及整合多樣化感知模態(tài),我們可以推動(dòng)軟件工程向更高層次發(fā)展。讓我們攜手共進(jìn),迎接LLM-DevOps帶來(lái)的新紀(jì)元!