擼一個c++的測試工具(一、分析)

需求分析——採用技術——理論支持
在這裏插入圖片描述

1.需求分析

1.1團隊代碼開發工作流

1.規約、文檔、需求分析原型設計
2.架構與編碼 (代碼版本管理系統Git/SVN)
3.代碼審查、測試與調試【本篇主要任務】
4.發佈、部署

1.2需要的功能
參考我上一篇博客收集到的現有工具來進行分析:
代碼檢查、評審、單元測試工具 大搜集

軟件測試對象的6種分類:

單元測試(靜態檢查、動態測試)
集成測試
壓力測試
迴歸測試
Alpha測試(系統測試)
Bete測試(交付測試)

  • IDE界面
    讓使用者可以粘貼或修改代碼,提供語法高亮和檢查
  • 導入工程 配置編譯器
    爲方便使用和整體測試,提供可以全工程導入的方法
    爲適應不同編譯環境的系統,讓代碼跑起來的環境應該可以自定義,對新手提供路徑方法提示
  • 生成測試用例
    可以手動輸入用例、可以自動按類型生成測試用例、可以按規則設置用例、可以導入導出用例
  • 靜態測試、動態測試,迴歸測試
    可以進行迴歸測試,判斷按照斷言機制,生成驅動函數並返回正確率
  • 性能測試(時間、內存,類似在線判題系統)
    對運行各個模塊所消耗的時間和內存進行記錄
  • 生成報表
    可以生成徵提的測試報告
  • 樁函數 覆蓋率分析
    爲解決不便測又存在於其他模塊流程中的模塊的運行問題,進行樁函數處理
    對控制語句進行白盒測試的覆蓋率分析

2.採用技術(功能模塊)

  • IDE界面
    使用現有開源的IDE作爲基礎,並對其進行精簡和二次開發,測試的反饋頁顯示在它上面

  • 導入工程 配置編譯器
    貌似是調用系統命令行驚醒自動處理,配置改的就是其調用參數

  • 生成測試用例 斷言與迴歸測試
    用例進行擴充,包括名字、電話等類型的自動生成
    使用現有開源測試框架,自動生成其基礎之上的驅動函數再運行
    C++ 的單元測試工具 —— Catch
    google test

  • 樁函數 覆蓋率分析
    不懂

  • 性能測試(時間、內存,類似在線判題系統)
    google benchmark

  • 生成報表
    不懂

3.理論支持

  • 單元測試(Unit Testing)
    顆粒度最小,一般由開發小組採用白盒方式來測試,主要測試單元是否符合“設計”;是指對軟件中的最小可測試單元進行檢查和驗證。
  • 集成測試
    介於單元測試和系統測試之間,一般由開發小組採用白盒+黑盒的方法來測試,即驗證“設計”又驗證“需求”。主要用來測試模板與模板之間的接口,同時還要測試一些主要的業務功能。
  • 系統測試
    顆粒度最大,一般由獨立的測試小組採用黑盒的方式來測試,主要測試系統是否符合“需求規格說明書”。在經過以上各階段測試確認後,把系統完整的模擬客戶環境來進行測試。

以上摘自:什麼是:單元測試、集成測試、系統測試

其中,集成測試對象是由通過了單元測試的各個模塊所集成起來的構件;系統測試對象則除了軟件之外,還包括計算機硬件及相關的外設、數據採集和傳輸機構、支持軟件、系統操作人員等整個系統。
所以此處我們着重討論單元測試

以下摘自:

軟件測試概念及分類整理彙總(真大佬,很全面)
單元測試(自頂向下,自底向上,靜態測試)

單元(Unit)指一個可獨立運行的代碼段,獨立運行指這個工作不受前一次或接下來的程序運行的結果影響。
單元測試的內容包括對最小單元進行功能、性能、接口和設計約束等正確性檢驗,主要- 測試其在語法、格式和邏輯上的錯誤。

3.1單元測試重點內容

在這裏插入圖片描述

  • 白盒測試
    語句覆蓋測試
    判定覆蓋測試
    條件覆蓋測試
    判定—條件覆蓋測試
    條件組合測試
    路徑覆蓋測試
  • 黑盒測試
    等價類劃分方法
    邊界值分析方法
    錯誤推測方法
  • 靜態測試
    代碼走查
    代碼審查
    代碼評審

3.2單元測試的內容

在這裏插入圖片描述

  • 模塊接口測試
    對通過被測模塊的數據流進行測試,檢查進出模塊的數據是否正確。
    調用本模塊的輸入參數是否正確;
    本模塊調用子模塊時輸入給子模塊的參數是否正確;
    全局量的定義在各模塊中是否一致;
    外部輸入、輸出。
    模塊局部數據結構測試

  • 檢查局部數據結構能否保持完整性。
    不正確或不一致的數據類型說明
    變量無初值
    變量初始化或默認值有錯
    不正確的變量名或從來未被使用過
    出現上溢或下溢和地址異常
    模塊邊界條件測試

  • 檢查臨界數據是否正確處理
    普通合法數據是否正確處理
    普通非法數據是否正確處理
    邊界內最接近邊界的(合法)數據是否正確處理
    邊界外最接近邊界的(非法)數據是否正確處理
    模塊獨立執行路徑測試

  • 對模塊中重要的執行路徑進行測試。檢查由於計算錯誤、判定錯誤、控制流錯誤導致的程序錯誤。
    運算符優先級
    混合類型計算
    精度不夠
    表達式的不正確符號
    循環變量的使用錯誤
    模塊內部錯誤處理測試

  • 檢查內部錯誤處理設施是否有效。
    輸出的出錯信息難以理解
    記錄的錯誤與實際不相符
    程序定義的出錯處理前系統已介入
    異常處理不當
    未提供足夠的定位出錯信息

3.3單元測試的環境

基本單元本身不是一個獨立的程序,自己不能運行,要靠其它部分來調用和驅動。
在這裏插入圖片描述
驅動模塊的設計比樁模塊簡單

  • 驅動模塊(driver)
    被測基本單元的主程序,它接收測試數據,並把數據傳送給被測單元,最後輸出實測結果。
  • 樁模塊(stub) ──存根模塊
    用來代替被測基本單元調用的其他基本單元。

3.4其他補充

軟件代碼缺陷分類及其應用
在這裏插入圖片描述

4.擼起袖子加油幹!

基本思路就是——IDE+調用分析+編譯運行+結果記錄。
4.1蒐集養料

先進行頂層設計,搭好框架,要用什麼做出有什麼功能的東西?
不同功能之間的代碼低耦合,最好能以插件形式存在(靜態、動態、錄製……)

C++ 動態鏈接庫的兩種調用方式
開源一個代碼規範檢測工具
基於動態輸入追蹤的模糊技術研究
下圖來自論文“基於動態輸入追蹤的模糊技術研究”,這是個逆向的漏洞測試。
在這裏插入圖片描述

還有 Cppcheck分析報告裏的處理流程和功能組成
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.2編輯界面+編譯選項——簡單的IDE
在VS code中使用MSVC+命令行編譯生成C++程序
Cppcheck的命令行使用

我採用qt框架和c++語言,先搭出編輯器的架子
開發自己的IDE(十),我終於搞定了智能提示了哇哈哈

4.3調用cppcheck進行靜態分析
通過命令行進行調用?

4.4使用googletest框架進行動態測試
如何使用googletest?

4.5性能測試
記錄並顯示

4.6覆蓋率分析、生成報表
如何使用googletest?

4.7操作錄製,自動化測試
這又是另一種問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章