一、引言
在軟件開發過程中,測試是至關重要的一環。然而,在傳統開發中,測試常常被忽略或草草處理,很多時候并非開發人員故意為之,而是缺乏相應的測試思路和方法,不知道如何設計測試用例。隨著?AI?技術的飛速發展,如今?AI?已經能夠輔助我們進行單元測試。本文將介紹如何使用通義靈碼來輔助進行?PHP?的單元測試,幫助開發人員更高效地完成測試工作,提升代碼質量和項目的穩定性。
二、通義靈碼簡介
通義靈碼是由阿里云技術團隊精心打造的智能編碼助手。它基于強大的通義大模型,為開發人員提供以下實用功能:
-
代碼續寫和優化:能夠根據現有代碼上下文,智能生成行級或函數級的代碼建議,幫助開發人員快速完成代碼編寫,并對代碼進行優化,提高代碼質量和執行效率。
-
自然語言描述生成代碼:開發人員可以通過自然語言描述需求,通義靈碼能夠將其轉化為相應的代碼,大大簡化了代碼編寫過程,尤其適用于復雜功能的實現。
-
注釋生成和代碼解釋:自動為代碼添加詳細注釋,方便開發人員及團隊成員更好地理解代碼邏輯和功能;同時,能夠對代碼進行詳細解釋,包括數據庫表結構分析、SQL?查詢過程解析等,有助于代碼的維護和優化。
-
單元測試生成:根據代碼自動生成單元測試用例,確保代碼的可靠性和穩定性,提高測試效率。
-
研發智能問答:作為基礎和核心功能,開發人員可以通過與通義靈碼的問答對話,獲取所需的技術支持和解決方案,就像擁有一位智能的編程助手。
-
代碼問題修復:能夠識別代碼中的潛在問題,并提供修復建議,幫助開發人員及時解決代碼錯誤和漏洞。
通義靈碼官網:https://tongyi.aliyun.com/lingma/
通義靈碼支持:JetBrains?IDEs、Visual?Studio?Code、Visual?Studio,及遠程開發場景(Remote?SSH、Docker、WSL、Web?IDE),安裝后登錄賬號即可開始使用。
PHP的單元測試一般使用PHPunit進行,PHP開發可以用的工具很多,但本文選擇使用PHPstorm,因為像PHPstorm這種重量級的IDE提供的測試支持會更好點。
三、環境配置
本文以?PHPStorm?為例,介紹通義靈碼的安裝方法,因為像?PHPStorm?這種重量級的?IDE?提供的測試支持更為完善。
PHPstorm的插件商店提供了通義靈碼的插件,我們可以直接在插件商店下載:
-
點擊頂部菜單欄的?File?->?Settings(在?macOS?上為?PHPStorm?->?Preferences)。
-
在設置窗口的左側菜單中選擇?Plugins,然后點擊?Marketplace。
-
在搜索框中輸入?“通義靈碼”,找到插件后點擊?Install?按鈕進行安裝。
- 安裝完成后,重啟?PHPStorm?以完成插件的加載。
PHPstorm?的安裝方式和?IDEA?的是一樣的,可以參考IntelliJ?IDEA?中安裝和使用通義靈碼?AI?編程助手教程。
四、登錄操作
重啟?PHPstorm?后,在右側工具欄會看到?通義靈碼?的圖標。點擊圖標進入插件界面。
注意:首次使用時,需要點擊登錄按鈕,瀏覽器會自動打開阿里云登錄頁面,完成登錄后即可返回?PHPStorm?使用通義靈碼。
五、推薦?AI?選擇
通義靈碼提供了多個?AI?大模型供調用,但在單元測試生成方面,qwq-plus?生成的測試用例會更詳細。可以在智能問答選項上選擇該模型,后續的所有功能都會基于該模型進行生成。
六、功能演示
(一)單個函數的單元測試生成
單元測試是最小的測試單位,通常針對函數或方法進行。使用通義靈碼進行單元測試十分簡單,只需選擇已寫好的代碼,右鍵選擇通義靈碼的生成單元測試功能,即可自動生成單元測試代碼。
之所以要選擇使用qwq-plus,是因為該模型生成的測試文檔很詳細,包含了被測函數的分析
函數的分支分析
和測試用例的分析
同時提供了mock需求分析,最后并根據該方案給出了測試代碼
對于開發者而言,只需要把生成的測試代碼復制到專門的測試文件中,就可以使用PHPunit開始進行測試了(因為PHP的單元測試一般使用PHPunit,代碼生成的剛好也是PHPunit,我們需要的也是PHPunit,這點剛好不需要進行調整,如果是Python那種有多個測試框架可供選擇的,可以在智能問答中讓AI重新生成對應測試框架的代碼)。
對類的單元測試生成
單元測試也可以對整個類進行測試,實際上在測試管理中,一般會按類或者文件進行分文件管理,比如在Java中,一個類對應一個文件,一個類也對應一個測試文件,PHP也可以這么進行管理。
與之前單個函數的單元測試相同,我們選中整個類的代碼,然后右鍵選擇通義靈碼的生成單元測試
這次我們生成的單元測試是針對整個類的了,它會對每個方法進行分析并生成對應的測試用例。
注意,在項目開發中,應將測試文件單獨存放在一個測試目錄,例如?Laravel?框架生成的項目結構中就有專門用于放置測試文件的?tests?文件夾,可以將整個類的測試代碼存放在這里。
(三)使用智能問答完成測試驅動開發
在我們之前的功能介紹中,我們是先寫完代碼,再進行測試,但在項目工程管理中有一種開發方式叫測試驅動開發,這種開發方式是先寫單元測試代碼,最后再寫功能。在寫測試代碼的時候應該把需求考慮清楚,根據需求進行測試代碼的設計。
例如,我們想要完成一個樹的先序遍歷功能,我們需要知道函數的輸入有哪些可能,以這個案例為例,則是有哪些樹的情況,例如下所示
然后根據輸入情況,判斷會有哪些結果
我們還需要考慮一些極端條件
最后,根據這些結果,寫出對應的測試代碼
到此測試設計部分就完成了,現在開發部分只需要設計出能夠通過這些測試的代碼即可!
是的,你可以看到上面給的流程,其實都是AI輔助生成的,我們只需要在智能問答中提出我們需要的函數的功能,讓AI生成對應的測試代碼即可
我們之前提到過,在某個語言存在多個測試框架情況下,可能生成的測試代碼會與我們需要的不同的情況。比如我在這次提問的時候,AI給我的是Junit的單元測試代碼(這是Java的單元測試框架),我們可以通過重新提問,讓AI生成新的更符合我們要求的答案
(四)使用?AI?程序員幫助進行測試
通義靈碼提供了?AI?程序員功能,可以將其視為一個虛擬的程序員。
在這里,也可以將其作為一個測試程序員使用,直接讓?AI?幫助測試某個類,并生成對應的測試文件和測試方案。
七、總結與展望
通義靈碼作為一款智能編碼助手,為?PHP?單元測試提供了強大的支持。從單個函數到整個類的單元測試生成,再到智能問答輔助測試驅動開發,以及?AI?程序員功能,它幾乎涵蓋了測試過程中的各個方面。通過本文的介紹,希望你能更好地理解和使用通義靈碼,提升測試效率和代碼質量,確保項目的穩定性和可靠性。隨著?AI?技術的不斷發展,相信通義靈碼將在未來的軟件開發測試領域發揮更加重要的作用。