使用這些AI工作流來減少您的技術債務,你學會了嗎?
利用AI和Dagger,自愈工作流有望通過自動化錯誤檢測、生成測試覆蓋率和迭代優化代碼來提高代碼質量。
譯自Use These AI Workflows To Reduce Your Technical Debt,作者 Kambui Nurse。
技術債務通常是許多軟件開發組織中,尤其是在構建和測試過程中創新的主要阻礙。隨著代碼庫的增長和復雜性的提高,快速的修復和遺留系統不斷累積,從而導致效率低下,減慢構建速度,增加測試時間,并引入脆弱的依賴關系。
最初為了滿足眼前的目標而做出的微小權衡可能會演變成嚴重的瓶頸,從而使擴展和迭代變得更加困難。對于旨在保持敏捷性的軟件組織而言,解決這一債務至關重要,以確保其CI/CD管道保持快速、可靠并能夠支持快速的功能交付。
然而,與此同時,它往往似乎是一個棘手的問題。我們知道我們應該投資,我們也試圖取得進展,但感覺就像逆流而上。盡管我們進行了投資,但技術債務仍在不斷累積。
一些人提出將AI作為一種解決方法。將AI指向你的基礎設施,它就能神奇地開始變得更好,這難道不是很好嗎?作為一個擁有超過20年經驗的冷靜工程師,我已經學會忽略供應商的炒作和靈丹妙藥的白日夢。但事實證明,在這種情況下,可能確實有一些東西。
你聽說過自主式工作流嗎?這種新的AI方法具有令人難以置信的潛力,也是我在過去幾個月里大力投資的一個領域,因為它可能是我們解決我們所有人積累的大量技術債務的最佳機會。
對于不熟悉自主式工作流的人,這里有一個快速入門:
自主式工作流是指自主軟件代理承擔傳統上需要人工決策或干預的任務。
關鍵期望特性:
- 自主性: 代理應該獨立于人工指導運行,根據預定義規則或AI驅動的算法執行任務,無需來自人類的提示或指示
- 主動性: 代理需要能夠根據不斷變化的條件或模式來預測需求、啟動行動或提出建議
- 適應性: 與僵化的腳本或手動流程不同,我們希望代理能夠適應實時數據、意外變化或新需求,根據需要重新配置工作流
- 決策能力: 代理應該能夠通過分析數據、權衡選擇和確定工作流環境中最佳行動方案來做出復雜的決策
- 目標導向: 自主式工作流應該專注于實現特定結果,而不僅僅是完成預定義的步驟。
自主式工作流有望改變我們測試和構建軟件的方式,但我們必須從某個地方開始。我決定選擇一個困擾我組織的簡單問題,以展示AI在軟件開發管道中的潛在能力。
選擇一個易于處理的問題:代碼覆蓋率
在許多組織中,確保完整的代碼覆蓋率可能是一項艱巨的任務。我們的代碼庫有多少應該由自動單元測試進行測試?開發人員經常必須在截止日期和質量之間取得平衡,導致代碼倉促完成且測試不足。這種缺乏測試覆蓋率會帶來風險,因為未經測試的代碼部分可能包含錯誤或不兼容性。
AI可以在哪里提供幫助?
- 生成單元測試: 使用AI自動為代碼的未測試部分生成單元測試
- 覆蓋率報告: 使用覆蓋率報告來識別測試不足的區域,然后提示AI為這些區域生成測試
利用新型容器引擎——Dagger
傳統的構建工具、CI平臺和像Docker這樣的容器引擎有其作用,但它們無法提供我們自己實現所需目標的必要功能。幾年前,我開始使用Dagger,這是Solomon Hykes和Docker早期技術團隊正在開發的新的面向管道的容器引擎。我花在Dagger上的時間越多,就越能看到它改變我們從根本上管理軟件管道的潛力。
為什么我喜歡 Dagger?因為它通過提供一個對復雜管道系統的抽象層,簡化了工作流的創建和部署。Dagger 允許開發人員自動化并在使用容器的環境中分配任務。它在管理依賴項、容器化和 CI/CD 管道方面發揮著重要作用,同時也允許開發人員通過模塊化設計定制其工作流。在這種情況下,Dagger 在管理代理工作流背后的基礎設施方面至關重要。該系統使用 Dagger 創建、運行和管理封裝 AI 生成的代碼的 Docker 容器。這確保了代碼在一致的環境中執行。
但是 Docker 呢?我們仍然使用它,但用于其設計目的。生成的代碼在 Docker 容器中運行,允許一致且隔離的測試環境。Dagger 與 Docker 無縫集成,使管理容器化工作流更容易,無需人工監督。
如果沒有 Dagger,我能做到嗎?當然可以,但是 Dagger 大大簡化了處理依賴項的過程。在我的初始設計中,管理 AI 代碼生成工具的各種依賴項非常繁瑣。Dagger 通過在運行時自動處理依賴項來幫助降低復雜性。
AI 生成的單元測試
我首先構建了一個試點項目,該項目使用 AI 創建工作流來生成單元測試。AI 分析覆蓋率報告并根據未覆蓋的代碼生成測試用例。以下是流程的工作方式:
- AI 生成: AI 根據覆蓋率報告中確定的差距生成代碼。
- 執行和錯誤處理: 生成的代碼在容器中執行,并在其中檢測錯誤。
- 反饋循環: 如果發現錯誤,AI 會接收該反饋并改進其生成的代碼,從而創建一個持續改進循環。
持續集成平臺的作用
將工作流集成到 CI 管道中,允許在每次將新代碼推送到存儲庫時自動測試生成的單元測試。這確保了每個代碼提交都經過質量和正確性驗證,從而降低了將錯誤引入生產環境的風險。
自糾正循環
這里的關鍵創新是創建一個自糾正循環,其中 AI 生成的代碼在每次迭代中都會得到改進。循環的工作方式如下:
- AI 根據輸入數據生成初始解決方案。
- 執行代碼,并返回錯誤(如有)。
- 將這些錯誤反饋到 AI 模型中,使其能夠改進下一次迭代。
- 重復此過程,直到代碼成功運行或達到預定義的迭代次數。
此循環使系統隨著時間的推移越來越準確,解決了代碼生成不完整或不正確的常見問題。該試點的循環用于改進 AI 生成功能單元測試的能力。
開發者界面:VS Code 擴展和分布式 CLI
最初,我將其構建為一個可以生成單元測試的 VS Code 擴展。但是,我很快發現這會使擴展難以跨不同的開發環境進行擴展。由于大型組織中的開發人員使用許多編輯器,我需要創建多個版本的擴展才能支持我的所有開發人員。
更優雅的版本是利用 Dagger 創建一個分布式 CLI,它可以在不依賴特定編輯器的情況下運行 AI 模型并生成測試。這允許更靈活的解決方案,可以在不同的工具中使用,無需構建特定于編輯器的擴展。
擴展 AI 在管道中的使用
這種代理工作流的潛在應用非常廣泛。除了生成單元測試之外,我還看到了將系統擴展到執行其他與代碼相關的任務的潛力,例如:
- 重構代碼: AI 可以建議重構以使代碼更高效或更容易測試。
- 持續代碼審查: AI 可以通過自動生成評論或改進建議來參與拉取請求。
- 自愈工作流: 系統可以自動生成針對測試期間檢測到的問題的修復程序,允許 AI 建議更改并實施更改。
計劃開發 Python 和其他編程語言的插件,以支持多種編程語言,從而在不同項目中更廣泛地使用工作流。
結論
將AI集成到軟件開發中,有可能顯著減少編寫單元測試和執行代碼審查等手動任務所需的時間和精力。我的早期探索已經證明了如何利用現成的AI工具以及新興的Dagger開源框架來創建可擴展的分布式工作流,這些工作流使用AI來自動化和改進這些流程。實現具有自我糾正循環的系統應該能夠提高代碼質量,同時減輕開發人員的測試負擔。
這種自主工作流是當今開發團隊的強大工具,也是AI增強型開發未來的縮影。我們正處于一個令人興奮的時代。我預計AI將改變我們工作場所中的許多常見任務。看到AI可能如何顯著改進對我們公司和生活至關重要的軟件的構建和測試,這令人興奮。