1. 程式人生 > >軟體測試學習教程(三)-測試理論

軟體測試學習教程(三)-測試理論

今天一起學習軟體測試理論:軟體測試目的,軟體測試定義,軟體測試原則,軟體測試分類,軟體測試方法,測試基本流程。

軟體測試定義:軟體測試(英語:software testing),描述一種用來促進鑑定軟體的正確性、完整性、安全性和質量的過程。換句話說,軟體測試是一種實際輸出與預期輸出之間的稽核或者比較過程。軟體測試的經典定義是:在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估的過程,為軟體產品的質量和評價提供依據。

一、軟體測試目的:

1、確保軟體完成了它所承諾或公佈的功能。

2、確保軟體滿足效能和效率的要求。

3、確保軟體是健壯的、適應使用者的環境。

4、提早預防、儘早發現、及時跟蹤軟體缺陷,滿足產品釋出需求。

二、軟體測試原則:

1、有計劃的儘早測試,解決問題的成本越小。測試需求貫穿整個軟體的生命週期,缺陷修復成本隨著各個階段的靠後而提升。

2、成功的測試在於發現迄今未發現的缺陷。

3、測試並不能保證軟體100%的沒有問題。進行測試時可以查詢並報告發現的軟體缺陷和錯誤,但是不能保證軟體的缺陷和錯誤能全部找到,繼續經一部測試可能還會找到一些,也就是說測試只能證明軟體存在錯誤而不能證明軟體沒有錯誤。

4、測試工作的本質都應追溯到使用者需求。

5、測試的規模由小而大,從單元測試到系統測試。

6、0 bug,good-enough原則,窮舉測試是不可能實現的。即Zero Bug與Good Enough;本條給我們灌輸的是一種測試執行通過的標準。顯示任何測試通過不可能達到0bug。那我們就應該達到Good Enough。這條原則是一種權衡投入/產出比的原則:測試既不能不充分也能過,我們需要制定測試通過標準和測試內容,比如:遺留的bug數&嚴重程度,測試用例的執行率&通過率等來解決上面的問題。

7、程式設計師應避免檢查自己的程式。

8、迴歸測試的關聯性迴歸測試的關聯性一定要引起充分注意。修改一個錯誤而引起更多錯誤出現的現象並不少見。

9、關注程式不該做的事。檢查程式應該完成哪些功能,這只是測試工作的一半,測試工作的另一半是,檢查程式完成了哪些不應該完成的功能。

三、測試基本流程:

第一步:對要執行測試的產品/專案進行分析,確定測試策略,制定測試計劃。該計劃被稽核批准後轉向第二步。測試工作啟動前一定要確定正確的測試策略和指導方針,這些是後期開展工作的基礎。只有將本次的測試目標和要求分析清楚,才能決定測試資源的投入。

第二步:設計測試用例。設計測試用例要根據測試需求和測試策略來進行,進度壓力不大時,應該設計的詳細,如果進度、成本壓力較大,則應該保證測試用例覆蓋到關鍵性的測試需求。該用例被批准後轉向第三步。

第三步:如果滿足“啟動準則”(EntryCriteria),那麼執行測試。執行測試主要是搭建測試環境,執行測試用例。執行測試時要進行進度控制、專案協調等工作。

第四步:提交缺陷。這裡要進行缺陷稽核和驗證等工作。

第五步:消除軟體缺陷。通常情況下,開發經理需要稽核缺陷,並進行缺陷分配。程式設計師修改自己負責的缺陷。在程式設計師修改完成後,進入到迴歸測試階段。如果滿足“完成準則”(ExitCriteria),那麼正常結束測試。

第六步:撰寫測試報告。對測試進行分析,總結本次的經驗教訓,在下一次的工作中改。

需求分析(概念)階段:閱讀需求,理解需求,分析業務需求點,提取測試需求。

計劃階段:編寫測試用例計劃,參考軟體需求規格說明書、專案總體計劃,制定測試計劃和測試方案內容包括測試範圍、進度的安排,人力物力的分配,整體測試策略的制定,風險評估與規避措施,主管編寫,參與評審工作。

設計階段:編寫測試用例,參考需求分析、概要設計、詳細設計,不明確的與開發、產品經理溝通。編寫測試用例完成後進行評審。

開發階段:首先搭建測試環境,執行預測,判定當前版本是否可測,預測通過,正式進入系統測試,遇到問題提交bug到缺陷管理平臺,並對bug進行跟蹤,直到被測試軟體達到測試需求要求,沒重大bug,測試結束。

評估階段:出測試報告,對整個測試的過程和版本質量做一個詳細的評估總結經驗和教訓。

四、測試物件:

軟體(英語:software)是一系列按照特定順序組織的電腦資料和指示,是電腦中的非有形部分,在這裡我們可以將“指示”理解為程式。外設硬體(滑鼠,鍵盤或者其他)給出指令(點選,輸入等),作業系統接收指令,再將指令分發給程式,程式再做出響應,反饋給作業系統,作業系統再反饋給硬體。軟體並不一定只包括可以在計算機上執行的計算機程式,有些定義中,與計算機程式相關的文件,一般也被認為是軟體的一部分所以測試物件=程式 + 資料 + 文件。

五、軟體測試分類:

軟體測試按階段分,可以分為單元測試,整合測試,系統測試,驗收測試。

1、單元測試是對軟體組成單元(最小可測試單元)進行測試,其目的是檢驗軟體基本組成單位的正確性,測試的物件是軟體設計的最小單位:函式。一般來說,最小單元要根據實際情況去判定其具體所指,如C語言中單元指一個函式,Java裡單元指一個類,圖形化的軟體中可以指一個視窗或一個選單等。總的來說,單元就是人為規定的最小的被測功能模組。單元測試是在軟體開發過程中要進行的最低級別的測試活動,軟體的獨立單元將在與程式的其他部分相隔離的情況下進行測試。

通常,小型測試是由SWE來實現,也會有少量的SET參與,TE幾乎不參與小型測試。-《google測試之道》

所以通常而言:誰編寫程式碼,誰負責編寫單元測試用例,即單元測試由開發人員自己執行。

2、整合測試是指通過測試的單元模組組裝成子系統,然後再進行的測試,主要測試內容是介面。
整合測試大部分是介面測試和互動測試。一般來說整合測試由測試人員完成。

在產品早期開發過程中,在獨立模組功能被開發完畢之後,SET會驅動這些測試的實現及執行,SWE會深度參與,一起編碼、除錯和維護這些測試。-《google測試之道》

3、系統測試是指對整個系統的測試,將硬體、軟體、操作人員看作一個整體,檢驗它是否有不符合系統說明書的地方。主要包括功能測試、介面測試、可靠性測試、易用性測試、效能測試。一般而言:系統測試是測試人員的工作。

功能測試: 對產品的各功能(包括功能可用性、功能實現程度(功能流程&業務流程、資料處理&業務資料處理)方面測試)進行驗證,以檢查是否滿足需求的要求。
效能測試:通過自動化測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項效能指標進行測試。

4、驗收測試是部署軟體之前的最後一個測試操作。在軟體產品完成了單元測試、整合測試和系統測試之後,產品釋出之前所進行的軟體測試活動。它是技術測試的最後一個階段,也稱為交付測試。驗收測試的目的是確保軟體準備就緒,並且可以讓終端使用者將其用於執行軟體的既定功能和任務。主要有Apha和Bta測試:Alpha測試通常是階段性的開發完成後所開始進行,一直持續到進入Beta測試階段前的階段。Alpha測試是一種驗證測試,在模擬的環境中以模擬的資料來執行。在這個階段中,通常是開發人員與測試人員以模擬或實際操作性的方式進行驗證測試。在系統測試中通常先進行Alpha測試以驗證資訊系統匹配使用者以及設計需求所期望的功能。當Alpha階段完成後,開發過程進入到Beta階段,由公眾參與的測試的階段。Beta測試可稱為確認測試,在一個真實的環境中以實際的資料來執行測試,以確認效能,系統執行有效率,系統撤消與備份作業正常,通過測試讓資訊系統日後可以更趨完善。Bta測試又分為兩種:封閉測試和公開測試:由軟體的終端使用者在一個或多個使用者場所來進行的,開發者通常不在現場,使用者記錄測試中遇到的問題並報告給開發者。

封閉測試(Closed Beta,常簡作封測或CB)是軟體或服務等產品在開發完成後、將公開上市前的測試過程。相對於公開測試,封閉測試的主要用途是測試軟體的功能和檢查程式錯誤等等,因此通常只提供給少數人進行測試。有些公司會要求參與測試者簽署保密協議,以避免測試的產品提前外流。MMORPG的封測結束之後,遊戲公司常會將角色資料刪除,但也有少數不刪的。

公開測試(Open Beta,常簡作公測或OB),一般常指軟體或服務等產品在正式上市前開放給不特定人試用,雖然原意是希望試用者能夠提報bug,但並不是把試用者當做真正的驗證人員。由於通常為免費性質,故常常能夠吸引到大批的試用者參與,可視為另一種營銷策略。另一方面也節省下測試人員的成本,和驗證穩定度(對於多人使用的頻寬及機器是否能負載,又稱壓力測試)的時間。

另外一個不常提及的是Gmma測試:Gamma測試是一個很少被提及的非正式測試階段,該測試階段對應的是對“存在缺陷”產品的測試。考慮到任何產品都可以被稱為“存在缺陷”的產品(測試只能發現產品中存在的問題,不能說明產品不存在問題),因此這個概念存在一定的不確定性。

六、軟體測試方法

1、按照測試設計分類可以分為 Black box黑盒測試、White box白盒測試、Gray box灰盒測試。

黑盒測試:又稱功能測試或資料驅動測試,是針對軟體的功能需求/實現進行測試,通過測試來檢測每個功能是否符合需求,把軟體系統當作一個“黑盒”,不考慮程式內部的邏輯結構,從軟體的行為,而不是內部結構出發來設計測試。

常見的黑盒測試方法:等價類劃分、邊界值分析、因果圖、錯誤推測、場景法。

白盒測試:白盒測試也稱結構測試或邏輯驅動測試,設計者可以看到軟體系統的內部結構,並且使用軟體的內部知識來指導測試資料及方法的選擇,通過測試來檢測軟體內部是否按照需求、設計正常執行。
常見的白盒測試方法:邏輯覆蓋(語句覆蓋、分支覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋)、迴圈覆蓋(簡單迴圈、巢狀迴圈、串接迴圈)。

灰盒測試:介於白盒測試與黑盒測試之間的一種測試,灰盒測試多用於整合測試階段,不僅關注輸出、輸入的正確性,同時也關注程式內部的情況。

2、按照是否需要測試人員操作分類分為手動測試(人工測試,比如頁面操作的測試)、自動測試(測試人員編寫指令碼/程式碼/工具代替人工,來完成相應測試工作)和半自動測試(程式碼或指令碼,與人工結合的測試)。

3、按照測試目的分類

功能測試:測試軟體產品的功能是否能達到預期;

效能測試:通常驗證軟體的效能在正常環境和系統條件下重複使用是否還能滿足效能指標,分為壓力測試(評估應用程式在峰值負載和正常情況下的行為)和負載測試(負載測試的目的是通過不斷地、穩定地增加系統的負載來測試系統,直到達到閾值。它是效能測試的一個子集)。

介面測試:測試系統元件間介面的一種測試;

安全測試:測試系統在防止非授權的內部或外部使用者的訪問或故意破壞等情況時怎麼樣;

相容性測試:測試軟體在一個特定的硬體/軟體/作業系統/網路等環境下的效能如何。向上相容向下相容,軟體相容硬體相容;

迴歸測試:對軟體進行修改之後進行的測試,目的是檢驗對軟體進行的修改是否正確。一是所做的修改達到了預定的目的,也就是確認測試,二是還要保證不影響軟體的其他功能的正確性。

4、按照是否執行程式分類

靜態測試:不執行被測程式本身,僅通過分析或檢查源程式的文法、結構、過程、介面等來檢查程式的正確性。也包括測試文件。

動態測試:通過執行軟體來檢驗軟體的動態行為和執行結果的正確性。