單元測試(白盒測試方法)

一、單元測試

1.單元測試是對軟件的基本組成單元進行的測試,如函數、類或類的方法。

單元測試是對軟件的最小可測試單元(即可獨立編譯或匯編的程序模塊)進行的測試活動,也稱為模塊測試

二、白盒測試方法

實例代碼

    public static int test(int a,int b,int c) {
1         int result = 0;
2         if(a == 0 or b > 2) {
3             result = b - a;}
4         if(a > 0 and c > 0 ) {
5             result = c * a;}
6        return result;}

流程圖

1)語句覆蓋

語句覆蓋法是指設計適當數量的測試用例,使被測程序中的每條語句至少被執行一次

語句覆蓋率的計算方法為:至少被執行一次的語句數量 / 程序中可執行的語句總數

語句覆蓋可以使程序中的語句都被測試到,但是它也是覆蓋最弱的一種邏輯覆蓋方法,無法發現程序中的很多邏輯錯誤

2)分支(判定覆蓋)

分支覆蓋,也叫判定覆蓋,是指運行代碼進行測試時程序中的所有判定語句的真、假分支至少都被執行過一次。

分支覆蓋率的計算方法為:測試時覆蓋到的判定語句真、假分支的總數 / 程序中判定語句真、假分支的總數

分支(判定)覆蓋比語句覆蓋的的覆蓋效果要強一些,但是分支(判定)覆蓋可能還是無法發現程序中的一些邏輯錯誤

3)條件覆蓋

條件覆蓋法是指設計適當數量的測試用例,運行被測程序,使得程序中每個判斷語句中條件的真、假分支至少被執行一次(復合條件要拆分)

但是,滿足了條件覆蓋也不能保證所有的分支都已經得到覆蓋

4)分支-條件覆蓋

指運行代碼進行測試時,程序中所有判斷語句中的條件取值為真、取值為假的情況和整個判斷語句取真分支、假分支的情況都被覆蓋到(即,至少被執行過一次)

無法覆蓋所有路徑

5)條件組合覆蓋

要求讓每個條件為真、為假情況所有可能的組合都至少被執行一次

滿足了條件組合覆蓋也不能保證所有的路徑都已經得到覆蓋

6)路徑覆蓋

程序中的所有路徑都至少被執行一次

但對于包含多且復雜的判斷語句、循環語句的程序來說,要覆蓋每一條路徑將會非常困難

7)基本路徑覆蓋

基本路徑覆蓋法是在程序控制流圖的基礎上,通過分析控制結構的圈復雜度,導出基本可執行的路徑集合設計測試用例,運行被測程序,使程序的基本路徑都得到覆蓋。

控制流圖中如果含有復合條件,需要改為單條件嵌套的形式

V(G) = A + 1,其中 A 代表控制流圖中的封閉區域數量。從下圖可以看出,程序的控制流圖中共有 4 個封閉區域,所以,圈復雜度 V(G) = 4 + 1 = 5 。

V(G) = P + 1,其中 P 代表控制流圖中的判定節點數

V(G) = e - n + 2,其中 e 代表控制流圖中的邊的數量,即控制流中的箭頭數量;n 代表控制流圖的節點數量,即控制流圖中的圓圈數量

圈復雜度是指程序中的獨立路徑數量,是確保程序中每個可執行語句至少執行一次需要的測試用例數量的最小值

可以使程序中的每條獨立路徑都至少執行一次。如果程序中的基本路徑達到了 100% 覆蓋,則分支(判定)覆蓋、條件覆蓋也能達到 100% 覆蓋。

8)簡單循環測試

簡單循環是最簡單的循環,即只有一個循環且沒有嵌套,例如,一個 while 循環、一個do-while 循環、一個 for 循環

簡單循環的測試用例需要考慮下列幾種情況(設最大循環次數為 n ):

(1)循環 0 次:測試跳過整個循環的場景;

(2)循環 1 次:目的是檢查循環的初始值是否正確;

(3)循環 2 次:目的是檢查多次循環是否正確;

(4)循環 m 次(其中 2 < m < n - 1):目的是檢查多次循環是否正確

? 5)循環 n - 1 次:目的是檢查邊界值是否正確;

(6)循環 n 次:目的是檢查邊界值是否正確;

(7)循環 n + 1 次:目的是檢查邊界值是否正確。

9)嵌套循環

是指一個循環語句的循環體內含有其他的循環語句的語法結構

按簡單循環的方法對最內層循環進行測試,其他循環次數設置為最小值

2)由內向外逐步對每一層循環進行測試,直到所有各層循環都測試完成。測試時將當前循環的所有外層循環的循環次數設置為最小值,所有內層循環的循環次數設置為典型值;

3)對各層循環同時取最小循環次數進行測試,如果有最大次數,再同時取最大循環次數進行測試

10)串接循環

是指兩個或多個循環連接在一起的循環結構,也稱連鎖循環

第二種串接循環是各個循環體之間有關聯關系,第二個循環的輸入來自于第一個循環的輸出,對于這種串接循環,我們可以考慮使用嵌套循環的測試方法來進行測試。

按簡單循環的方法對下層循環進行測試,其他循環次數設置為最小值;

2)由下至上逐步對每一層循環進行測試,直到所有循環都測試完成。測試時將當前循環的所有上層循環的循環次數設置為最小值,所有下層循環的循環次數設置為典型值;

3)對各層循環同時取最小循環次數進行測試,如果有最大次數,再同時取最大循環次數進行測試。

三、常見問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98928.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2010-2022 同等學力申碩國考:軟件工程簡答題真題匯總

2010年簡答題 給出數據流圖的定義&#xff0c;并舉例說明數據流圖的四個基本構成成份。 數據流圖&#xff08;Data Flow Diagram, DFD&#xff09;是一種用于描述系統中數據流動和處理過程的圖形工具。它通過直觀的方式展示了系統的輸入數據如何經過一系列處理變換為輸出數據&a…

海外盲盒APP開發:如何用技術重構“驚喜經濟”

當盲盒的神秘感遇上技術的確定性&#xff0c;一場關于消費體驗的革命正在海外市場悄然發生。從概率算法的公平性到AR虛擬開箱的沉浸感&#xff0c;從跨境物流的實時追蹤到多語言支持的無縫切換&#xff0c;海外盲盒APP的開發是一場技術、設計與商業邏輯的深度融合。概率算法&am…

Aosp13 手機sim卡信號格顯示修改

工作中&#xff0c;客戶要求對信號格顯示偏弱不夠友好為由&#xff0c;提出修改&#xff0c;要求使其顯示信號強一些。在此記錄 一問題&#xff1a;修改系統sim卡顯示的信號格&#xff0c;在設備其他配置不變的情況下&#xff0c;使其信號格顯示比原有的要優秀二 …

硬件開發2-匯編2(ARMv7-A)- 裸機開發

一、指令1、b&#xff08;Branch&#xff09;原型&#xff1a;B<c> <label>作用&#xff1a;實現無條件跳轉&#xff0c;常用于不返回的跳轉場景特點&#xff1a;僅跳轉到目標地址&#xff0c;不保存返回地址示例&#xff1a;b reset ;跳轉到reset標號處執…

清源 SCA 社區版更新(V4.2.0)|漏洞前置感知、精準修復、合規清晰,筑牢軟件供應鏈安全防線!

隨著數字化進程加速&#xff0c;軟件供應鏈安全威脅日益復雜&#xff0c;公開漏洞響應滯后、0day 攻擊防不勝防、組件升級編譯失敗、安全與合規風險混雜......這些痛點讓企業安全團隊、運維人員及研發團隊疲于應對。自 2025 年 7 月 1 日安勢清源 SCA 社區版首次正式發布以及在…

氚燃料增殖里程碑:MIT新型BABY包層技術實驗驗證

● 導語 5月20日&#xff0c;麻省理工學院&#xff08;MIT&#xff09;發文稱&#xff0c;BABY實驗首次獲取了氚在裝置內增殖的實測數據&#xff0c;驗證了核心模型&#xff0c;并為未來核聚變電廠的燃料自循環奠定了重要基礎。 原文&#x1f447;&#x1f3fb; https://m…

python+springboot+uniapp微信小程序題庫系統 在線答題 題目分類 錯題本管理 學習記錄查詢系統

目錄技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xff0…

Office轉PDF轉換器v1.0.py

軟件介紹 這是批量將word、Excel、PPT轉換為PDF格式的軟件&#xff0c;不過PPT轉換為PDF需要電腦安裝了office&#xff0c;目前這個我還沒有解決沒有office也可以安裝的方法。 軟件使用 軟件使用是比較簡單的&#xff0c;導入文件/文件夾&#xff0c;在自定義輸出路徑 點擊這…

62_基于深度學習的海洋垃圾檢測識別系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

深入淺出 全面剖析消息隊列(Kafka,RabbitMQ,RocketMQ 等)

消息隊列 一、概念 消息隊列&#xff08;MQ&#xff09;&#xff1a;一種異步通信機制&#xff0c;通過“消息”的形式讓不同系統或模塊解耦核心思想&#xff1a;發送方&#xff08;生產者Producer&#xff09;只負責發送消息&#xff0c;接收方&#xff08;消費者Consumer&…

Flux Images Generation API 對接說明

本文將介紹一種 Flux Images Generation API 對接說明&#xff0c;它是可以通過輸入自定義參數來生成Flux官方的圖片。 接下來介紹下 Flux Images Generation API 的對接說明。 申請流程 要使用 API&#xff0c;需要先到 Flux Images Generation API 對應頁面申請對應的服務…

CSS布局 - 網格布局 -- 筆記3

目錄網格布局基礎網格網格剖析CSS 提供了一些控制網頁布局的幾個重要工具&#xff0c;這里介紹網格布局。 網格布局 CSS 網格可以定義由行和列組成的二維布局&#xff0c;然后將元素放置到網格中。有些元素可能只占據網格的一個單元&#xff0c;另一些元素則可能占據多行或多…

合約開發完后部署測試

一 編譯npx hardhat compile二 測試npx hardhat test三部署注意部署的時候2.0和3版本有所區別&#xff0c;3.0如下# 部署到本地網絡&#xff08;如已運行 npx hardhat node&#xff09; npx hardhat ignition deploy ./ignition/modules/MyModule.ts --network localhost# 部署…

產品無法正確解析復雜表格和流程圖,有什么替代方案或優化方法?

在真實辦公場景中&#xff0c;文檔內的元素往往不具備標準化和格式化特征&#xff0c;像雙欄表格、無線圖表等復雜元素十分常見。而傳統 OCR 工具在面對這類復雜文檔時&#xff0c;存在明顯的能力短板&#xff1a;它無法準確判斷復雜表格的結構邏輯以及內容的順序邏輯&#xff…

《Html模板》HTML數學題目生成器 - 讓數學練習更簡單(附源碼)

目錄專欄導讀&#x1f9ee; HTML數學題目生成器 - 讓數學練習更簡單項目簡介? 核心功能&#x1f3af; 靈活的運算類型選擇&#x1f4ca; 智能題目生成算法?? 個性化參數設置&#x1f5a8;? 專業打印優化&#x1f3a8; 用戶體驗設計現代化界面交互體驗&#x1f6e0;? 技術實…

Go語言設計模式(七)組合模式

組合模式是指將一組相似對象當做一個單一對象的設計模式.1.組成角色:1.1組件:組合中的對象聲明接口,主要用于訪問和管理其子組件.1.2葉子節點:定義組合中原始對象行為的類.葉子節點表示組合中的葉對象.1.3組合:又稱為容器,存儲子組件并在組件接口中實現與子組件有關的類.1.4客戶…

AI 3D 生成工具知識庫:當前產品格局與測評總結

聚焦于 AI 3D 生成領域的領軍產品、功能比較及實測性能。內容分為產品格局、通用功能、測評系統與基準測試&#xff0c;以及單視圖生成實測結果。所有信息基于腳本分析&#xff0c;并交叉驗證了產品名稱、團隊背景&#xff08;如 VAST AI 的 TripoSR/Meshy 的 Meshy-1、影眸科技…

淘客app的容器化部署與編排:基于Kubernetes的微服務架構實踐

淘客app的容器化部署與編排&#xff1a;基于Kubernetes的微服務架構實踐 大家好&#xff0c;我是阿可&#xff0c;微賺淘客系統及省賺客APP創始人&#xff0c;是個冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在淘客app的業務迭代中&#xff0c;傳統物理機部署面…

當GitHub不再純粹:Python自動化測試的未來是AI還是危機?

全球最大的開源代碼平臺&#xff0c;徹底被卷進了AI洪流&#xff01;作為全球最大的“程序員交友平臺”&#xff08;手動狗頭&#xff09;&#xff0c;GitHub 可以說是每一個開發者又愛又恨的“家”。沒錯&#xff0c;就是那個全球最大、沒有之一的開源代碼托管平臺&#xff01…

Spring Boot + MySQL 創建超級管理員

Spring Boot系統創建超管實現方式1. 數據庫腳本初始化&#xff08;最直接的方式&#xff09;2. Spring Boot 啟動時自動創建&#xff08;代碼級初始化&#xff09;2.1 實體類定義2.2 Repository 接口2.3 初始化組件2.4 配置密碼加密器3. 通過接口手動創建&#xff08;最安全的方…