軟件測試之-軟件測試方法


一、本篇文章主要目的

  1、介紹測試方法;
  2、區分黑盒測試、灰盒測試和白盒測試(邏輯覆蓋測試);
  3、區分靜態測試(控制流分析、數據流分析、信息流分析;同行評審)和動態測試(動態測試工具);
  4、了解手工測試和自動化測試。

在介紹以上軟件測試方法時,需要先了解軟件產品的概念,軟件研發過程中產生的所有文檔和代碼都可以稱之為軟件產品,同時,只要是軟件產品,都是測試的對象,即軟件測試對象為軟件生命周期中產生的所有文檔和代碼。

二、軟件測試方法介紹及分類

@@@根據利用的被測對象信息的不同,將軟件測試方法分為黑盒測試、灰盒測試和白盒測試。

1、白盒測試

   1)概念(定義):是依據被測軟件分析程序內部構造,並根據內部構造分析用例,來對內部控制流程進行測試,可完全不顧程序的整體功能實現情況,即已知軟件產品的內部實現過程,可以通過測試證明每種內部操作是否符合設計規格的要求,所有內部成分是否已經過檢查。
   2)思想:白盒測試又被稱為玻璃盒測試、透明盒測試、開放盒測試、結構化測試、邏輯驅動測試、是基於程序結構的邏輯驅動測試。
   3)測試對象: 函數、算法與數據結構
   4)目的
       (1)一般在測試前期進行,通過達到一定的邏輯覆蓋率指標,使得軟件內部邏輯控制結構上的問題能基本得到消除;
       (2)保證內部結構達到一定的覆蓋程度,能夠給予軟件代碼質量更大的保證;
       (3)白盒測試發現問題后,解決問題的成本較低。

   5)白盒測試的常用技術:
       (1)靜態分析:包括控制流分析、數據流分析、信息流分析
       (2)動態分析:邏輯覆蓋測試(分支測試、路徑測試等)、程序插裝等 
                    邏輯覆蓋測試根據覆蓋的對象不同,可以分為:語句覆蓋、判定(分支)覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋。
                    程序插裝指調試程序時,在程序中插入一些打印語句,程序執行時打印出我們關心的信息,通過這些信息了解執行過程中程序的一些動態行為。
                    邏輯覆蓋率的統計通過程序插裝來實現。
   6)白盒測試的特點:
       (1)測試人員需要了解軟件的實現;
       (2)可以檢測代碼中的每條分支和路徑;
       (3)揭示隱藏在代碼中的錯誤;
       (4)對代碼的測試比較徹底;
       (5)實現代碼結構上的優化;
       (6)投入較大,成本高;
       (7)無法檢測代碼中遺漏的路徑和數據敏感性錯誤;
       (8)不驗證規格的正確性。

2、黑盒測試

   1)定義:把測試對象看成是一個黑盒,只考慮其整體特性,不考慮其內部具體實現過程。即已知產品的需求規格,但不知其內部實現,可以進行測試證明每個需求是否實現。
   2)思想:基於規格的測試,測試類型都來源於質量模型。
   3)測試對象:系統、子系統、模塊、子模塊、函數等。
   4)常用的黑盒測試方法:等價類划分法、邊界值分析法、因果圖分析法、判定表法、狀態遷移法等。
   5)目的:減少測試時的測試用例數,用盡量少的測試用例完成測試,發現更多的問題。
   6)黑盒測試的特點
       (1)對於更大的代碼單元來說(子系統甚至系統級)比白盒測試效率要高;
       (2)測試人員不需要了解軟件的實現細節,包括特定的編程語言;
       (3)從用戶的視角進行測試,很容易被理解和接受;
       (4)有助於暴露任何規格不一致或有歧義的問題;
       (5)沒有清洗和簡明的規格,測試用例很難設計;
       (6)不能控制內部執行路徑,會有很多內部程序路徑沒有被測試到;
       (7)不能直接針對特定的程序段,這些程序可能非常復雜(因此可能隱藏更多的問題)

3、灰盒測試

利用被測對象的整體特性信息,采用黑盒測試方法;利用被測對象的內部具體實現信息,采用白盒測試方法;介於白盒和黑盒測試之間的測試方法測試方法稱之為灰盒測試。

  1)定義:如果即利用被測對象的整體特性信息,又利用被測對象的內部具體實現信息,采用得就是灰盒測試方法。兩種信息占得比例不同,相應的灰度就不同。
  2)適用對象:一般集成測試采用灰盒測試方法。

@@@按照被測試的軟件系統是否運行,將測試分為靜態測試和動態測試。

1、靜態測試

  1)定義:不運行被測試的軟件系統,而是采用其他手段和技術對被測試軟件進行檢測的一種測試技術,例如:代碼走讀、文檔評審、程序分析等。
  2)常用技術:靜態分析技術。
       (1)定義:靜態分析是一種不通過執行程序而分析程序的技術。
       (2)功能:檢查軟件的表示和描述是否一致,沒有沖突或者沒有歧義
       (3)目的:糾正軟件系統在描述、表示和規格上的錯誤,因此是任何進一步測試的前提。
       (4)靜態分析技術主要有3種不同的程序測試可能性
            *1*:考慮程序是否滿足編碼規則,語法上是否具有一致性和完整性;
            *2*:考慮文檔描述是否規范、准確、便於查閱;
            *3*:考慮程序和文檔之間的一致性。
       (5)靜態分析技術有:控制流分析、數據流分析和信息流分析,下面一一介紹:
            *1*控制流分析
                #1#控制流相關概念
                     ………1、程序元素:一個程序元素通常是一個條件,一個簡單的語句或者一塊語句(多個連續語句)。
                     ………2、控制流關系:一個程序的控制流關系(Control Flow Relation)敘述了程序元素和他們執行的次序之間的關系。
                     ………3、控制流圖:對應於控制流關系的圖被稱為控制流圖。
                     ………4、控制流矩陣:有控制流圖得到,反映相鄰程序元素之間的先后順序關系。
                #2#控制流分析能發現的問題
                     通過對控制流信息進行分析,確保寫出的程序不應包含:轉向並不存在的標號;沒用的語句標號;從程序入口進入后無法達到的語句;不能達到停機語句的語句。

            *2*數據流分析
                #1#數據流相關概念
                     數據流分析最初是隨着編譯系統要生成有效的目標碼而出現的,這類方法主要用於代碼優化(代碼優化主要包含:結構優化即可讀性、時間效率和空間效率優化、可移植性優化)。
                     數據流分析法關鍵是數據的引用和定義。
                     ………1、數據的定義:如果程序中某一語句執行時能改變某程序變量V的值,則稱V是被該語句定義的。
                     ………2、數據的引用:如果程序中一語句的執行引用了內存中變量V的值,則稱V是被該語句引用的。
                #2#數據流分析步驟
                     ………1、根據代碼得到數據流表
                     ………2、分析數據流表找到以下兩種錯誤:
                           變量未定義但被引用
                           變量定義但未被引用

2、動態測試

   1)定義:按照預先設計的數據和步驟去運行被測軟件系統,從而對被測試軟件進行檢測的一種測試技術。
   2)特點:主要分析軟件系統在模擬或是真實的環境中執行之前、之中、之后的動態行為。
   3)常用技術:動態分析技術
       (1)定義:對軟件系統運行行為進行分析,包含程序在受控的環境下使用特定的輸入進行正式的運行,和期望的結果比較以檢查系統運行是正確還是不正確。
       (2)常用動態分析技術:
            *1*:路徑測試
            *2*:分支測試
            *3*:性能測試
       (4)常用動態分析工具及功能
            *1*:測試覆蓋率分析:用於測試對代碼的檢測范圍;
            *2*:跟蹤:跟蹤程序執行期間的所有路徑
            *3*:調整:度量程序執行過程中所有的資源
            *4*:模擬:模擬系統的部分

@@@所有測試方法都可以歸類為手工測試和自動化測試。

1、手工測試

   1)定義:手工測試是傳統的測試方法,由測試人員手工編寫測試用例,執行,觀察結果。
   2)缺點:測試工作量大,重復多,回歸測試難以實現

2、自動化測試

   1)定義:自動化測試指利用軟件測試工具自動實現全部或者部分測試工作:管理、設計、執行和報告,自動化測試節省大量的測試開銷,並能夠完成一些手工測試無法實現的測試。
   2)自動化測試的意義     
       (1)對程序新版本運行前一版本執行的測試,提高回歸測試效率
       (2)可以運行更多更頻繁的測試
       (3)可以執行手工測試困難或不可能做到的測試,比如大量的重復操作或者集成測試
       (4)更好的利用資源,比如測試儀器或者被測對象
       (5)測試具有一致性和可重復性,及自動化測試的步驟和結果完全一樣的測試的復用性,及自動化測試甲苯可以拆分開給其他測試腳本使用
       (6)可以更快地將軟件推向市場,軟件發布前進行高效的回歸測試,減少軟件發布的時間
       (7)增加軟件的信任度,通過自動化測試提高了測試效率,可以吧節約的時間拿出來做更多的測試
   3)自動化測試的限制
       (1)不能取代手工測試,自動化測試只能提高測試效率,不能提高測試有效性,即不可能發現更多缺陷更多
       (2)對測試設計依賴性極大,測試設計的不好會遺漏問題
       (3)自動化測試對軟件開發具有很大的依賴性,開發出現變更可能導致前面的自動化測試完全失效
       (4)工具本身並不具備想象力,工具不具有智能
   4)自動化測試的誤區
       (1)不現實的期望,希望自動化能取代手工測試
       (2)缺乏測試實踐經驗,手工測試都做不好,或者經驗積累不夠,就嘗試自動化,很難成功
       (3)期望自動化測試發現大量新缺陷,自動化只能保證測試執行效率,確保已有的問題不會再發生,發現新缺陷不是其目的
       (4)安全性錯覺,認為進行了自動化測試的軟件就是安全的、質量有保證的只有手工測試做好了,明確了測試的觀察點,才能把自動化測試做好,所以手工測試是自動化測試的一個基礎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM