軟體測試筆記1
----------------------------------------------------------------------------基礎知識點---------------------------------------------------------------------------------------------
一、軟體測試的定義
軟體測試是一個過程或一系列過程,用來確認計算機程式碼完成了其應該完成的功能,不執行其不該有的操作。
1.軟體測試與除錯的區別?
(1)測試是為了發現軟體中存在的錯誤;除錯是為證明軟體開發的正確性。
(2)測試以已知條件開始,使用預先定義的程式,且有預知的結果,不可預見的僅是程式是否通過測試;除錯一般是以不可知的內部條件開始,除統計性除錯外,結果是不可預見的。
(3)測試是有計劃的,需要進行測試設計;除錯是不受時間約束的。
(4)測試經歷發現錯誤、改正錯誤、重新測試的過程;除錯是一個推理過程。
(5)測試的執行是有規程的;除錯的執行往往要求開發人員進行必要推理以至知覺的"飛躍"。
(6)測試經常是由獨立的測試組在不瞭解軟體設計的條件下完成的;除錯必須由瞭解詳細設計的開發人員完成。
(7)大多數測試的執行和設計可以由工具支援;調式時,開發人員能利用的工具主要是偵錯程式。
二、軟體測試的分類
1.按照測試技術劃分
(1)白盒測試:通過對程式內部結構的分析、檢測來尋找問題。檢查是否所有的結構及邏輯都是正確的,檢查軟體內部動作是否按照設計說明的規定正常進行。--結構測試
(2)黑盒測試:通過軟體的外部表現來發現錯誤,是在程式介面處進行測試,只是檢查是否按照需求規格說明書的規定正常實現。--效能測試
2.按照是否讓備測軟體執行劃分
(1)靜態測試 (2)動態測試
3.按照開發階段劃分
(1)單元測試:模組測試,檢查每個程式單元嫩否正確實現詳細設計說明中的模組功能等。
(2)整合測試:組裝測試,將所有的程式模組進行有序、遞增的測試,檢驗程式單元或部件的介面關係 。
(3)系統測試:檢查完整的程式系統能否和系統(包括硬體、外設和網路、系統軟體、支援平臺等)正確配置、連線,並滿足使用者需求。
(4)確認測試:證實軟體是否滿足特定於其用途的需求,是否滿足軟體需求說明書的規定。
(5)驗收測試:按專案任務或合同,供需雙方簽訂的驗收依據文件進行的對整個系統的測試與評審,決定是否接受或拒收系統。
三、軟體測試的原則
1.測試用例中一個必需部分是對預期輸出或結果的定義;
2.程式設計師應當避免測試自己編寫的程式;
3.編寫軟體的組織不應當測試自己編寫的程式;
4.應該徹底檢查每個測試的執行結果;
5.測試用例的編寫不僅應當根據有效和預期的輸入情況,也應當根據無效和未預料到的輸入情況;
6.檢查程式是否“未做其應該做的”僅是測試的一半,測試的另一半是檢查程式是否“做了不應該做的”;
7.應避免測試用例用後既棄,除非軟體本身就是一個一次性的軟體;
8.計劃測試工作時不應默許假定不會發現錯誤;
9.程式某部分存在更多錯誤的可能性,與該部分已發現錯誤的數量成正比;
10.軟體測試是一項極富創造性、極具智力挑戰性的工作。
四、測試用例的設計
1.測試用例的定義
(1)測試用例是為特定的目的而設計的一組測試輸入、執行條件和預期的結果。 (2)測試用例是執行的最小實體。
2.特徵:
(1)最有可能抓住錯誤的; (2)不是重複的、多餘的;
(3)一組相似測試用例中最有效的; (4)既不是太簡單,也不是太複雜。
3.設計測試用例的基本準則
測試用例的代表性、測試結果的可判定性、測試結果的可再現性。
五、黑盒測試
1.等價類劃分法
①等價類劃分法的設計方法:是把所有可能的輸入資料,即程式的輸入域劃分成若干部分(子集),然後從每一個子集中選取少量具有代表性的資料作為測試用例。
等價類是指某個輸入域的子集合。在該子集合中各個輸入資料對於揭露程式中錯誤都是等效的。
併合理地假定:測試某等價類的代表值就等於對這一類其他值的測試。
有效等價類:對於程式的規格說明來說是合理的、有意義的輸入資料構成的集合 無效等價類:對軟體規格說明而言,是無意義的、不合理的輸入資料所構成的集合
等價類對於測試有兩個重要的意義:完備性無冗餘性
②等價類劃分法的原則
(a)按照區間劃分: 一個有效等價類和兩個無效等價類。
(b)按照數值劃分: n 個有效等價類和一個無效等價類
(c)按照數值集合劃分 一個有效等價類和一個無效等價類
(d)按照限制條件或規則劃分:可確定一個有效等價類和若干個無效等價類
(e)細分等價類
③等價類劃分法的步驟
(a)確定等價類
(b)建立等價類表,列出所有劃分出的等價類
(c)從劃分出的等價類中按以下的3個原則設計測試用例: ·為每一個等價類規定一個唯一的編號
·設計一個新的測試用例,使其儘可能多的覆蓋尚未被覆蓋的有效等價類,重複這一步,直到所有的有效等價類都被覆蓋為止;
·設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重複這一步,直到所有的無效等價類都被覆蓋為止。
④確定等價類的方法
(a)先考慮輸入資料的型別(合法型和非法型);
(b)再考慮資料範圍(合法型中的合法區間和非法區間);
(c)最後考慮輸出結果,逆向設定輸入。
2.邊界值分析法
①邊界值分析法就是對輸入或輸出的邊界值進行測試
②特點:具有很強的發現程式錯誤的能力;測試用例來自等價類的邊界;
③基本原理:故障往往發生在輸入定義域和輸出值域的邊界上,而不是在其內部。
④方法:
(a)首先應確定邊界情況.
(b)選取正好等於,剛剛大於或剛剛小於邊界的值作為測試資料
⑤標準邊界值:min、min+、nom、max-、max
健壯邊界值: min、min+、nom、max-、max min- max+
⑥例:
<xnom,ymin><xnom,ymin+><xnom,ymax><xnom,ymax-> <xmin,ynom><xmin+,ynom><xmax,ynom><xmax-,ynom><xnom,ynom>
⑦對於一個含有n個變數的程式,只讓其中一個變數取極值,讓其餘的變數取正常值,被保留的變數依次取min、min+、nom、max-、max值,對每個變數都重複進行。n個變數的程式,邊界值分析測試程式會產生4n+1個測試用例。
六、白盒測試
1.白盒測試概述:白盒測試也稱結構測試或邏輯驅動測試。
2.方法:程式結構分析;邏輯覆蓋測試;基本路徑測試。
3.原則:
(1)保證一個模組中所有獨立路徑至少被測試一次;
(2)所有邏輯值均需測試真(True)和假(False)兩種情況; (3)檢查程式的內部資料結構,保證其結構的有效性; (4)在取值上、下邊界,即可操作範圍內執行所有迴圈.
4.邏輯覆蓋測試:主要是測試覆蓋率,以程式內在邏輯結構為基礎的測試。
6種:語句覆蓋 判斷覆蓋 條件覆蓋 判定-條件覆蓋 條件組合覆蓋 路徑測試.
①語句覆蓋:在測試時,首先設計若干個測試用例,然後執行被測程式,使程式中的每個可執行語句至少執行一次
·判定:整體 控制。 包括:a、單一條件判定;b、符合條件覆蓋 ·語句覆蓋率:已執行的可執行語句佔程式中可執行語句總數的百分比
②判定覆蓋:設計足夠多的測試用例,使程式中的每個判定至少都獲得一次“真值”或“假值”。
③條件覆蓋:構造一組測試用例,使得每一判定語句中每個邏輯條件的可能值至少滿足一次。 滿足條件覆蓋的不一定滿足判定覆蓋,反之亦然。兩者無直接關係。
④判定/條件覆蓋:設計足夠的測試用例,使得判定中每個條件的所有可能(真/假)至少出現一次,並且每個判定本身的判定結果(真/假)也至少出現一次
⑤組合條件覆蓋(MCC):設計足夠的測試用例,使得每個判定中條件的各種可能組合都至少出現一次。
滿足組合條件覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。
⑥修正條件判定覆蓋(MCDC):需要足夠的測試用例來確定各個條件能夠影響到包含的判定的結果,即要求滿足兩個條件。
七、靜態測試
1.靜態測試不實際執行軟體,主要對軟體的程式設計格式、結構等方面進行評估。可以有人工進行,也可藉助軟體工具自動進行。
2.靜態測試的方法
(1)程式碼檢查:程式碼審查 程式碼走查 桌面檢查 同行評分(略)
(2)程式碼審查:通常由4人組成,其中一人是協調人,一人是程式的編寫者,其他人員通常是程式的設計人員以及測試專家。
優點和作用:錯誤列表、高效、會後修正、增加修改錯誤清單、較早發現錯誤。 (3)程式碼走查:為測試員的人會帶著一些書面的測試用例參加會議 (4)桌面檢查:(a)完全沒有約束(b)開發人員測試自己的程式(c)沒有展示自己能力,缺乏良好的效應。(效果遠遠遜於程式碼審查和程式碼走查)
3.靜態結構分析:主要是以圖形的方式表現程式的內部結構。
4.程式碼質量度量:功能性 可靠性 可用性 |有效性 可維護性 輕便性
八、單元測試
1.單元測試的定義
單元測試又稱模組測試,是最小單位的測試,其依據是詳細設描述,對模組內所有重要的控制路徑設計測試用例,以便發現模組內部的錯誤。 單元測試多采用白盒測試技術
2.單元測試的物件
·結構化程式,單元測試的單元是指單個子程式、函式或過程 ·面向物件程式,單元測試的單元是指類或方法(通常為類)。
3.單元測試的目的
將模組的功能與定義模組的功能規格說明或介面規格說明進行比較,揭示出模組與其規格說明之間存在的矛盾。
4.單元測試的人員:開發人員
5.單元測試的針對的問題
(1)模組介面: 檢查進出程式單元的資料流是否正確。
(2)區域性資料結構: 必須測試模組內部的資料能否保持完整性。
(3)邊界條件測試:主要檢查臨界資料是否正確處理。
(4)獨立路徑測試:發現由於不正確的判定或不正常的控制流而產生的錯誤
(5)出錯處理:要求能預見出錯的條件,並設定適當的處理物件,保證其路徑的正確性。
6.單元測試的流程
計劃單元測試設計單元測試執行單元測試評估單元測試
7. 計劃單元測試
(1)驅動模組(Drive):用來模擬被測試模組的上一級模組,相當於被測模組的主程式。它接收資料,將相關資料傳送給被測模組,啟動被測模組,並打印出相應的結果。 (2)樁模組(Stub):用來模擬被測模組工作過程中所呼叫的模組。它們一般只進行很少的資料處理。
8.設計單元測試
(1)需要的資訊
·模組的規格說明:模組的輸入和輸出以及模組的功能。 ·模組的原始碼。
(2)測試用例的設計方法
·模組測試總體上是面向白盒測試的(靜態、動態) ·後續測試針對較大的元素不易進行白盒測試。
·後續測試著眼於發現其他型別的錯誤,不一定與程式邏輯結構有關。
·使用一種或多種白盒測試方法分析模組的邏輯結構,然後使用黑盒測試方法對照模組的規格說明補充測試用例。 9.執行單元測試 (1)設定測試環境 (2)將測試環境初始化 (3)執行測試過程。
九、整合測試
1.整合測試的定義
整合測試又稱組裝測試,整合測試是在單元測試的基礎上,將所有模組按照設計要求組裝成子系統或系統進行的測試活動。
2.整合測試的目的
確保各單元組合在一起後能夠按既定意圖協作執行,並確保增量的行為正確,所測試的內容包括單元間的介面以及整合後的功能。
3.整合測試的層次 (1)模組內整合測試 (2)子系統內整合測試 (3)子系統間整合測試 4.整合測試的流程 5.整合測試的方法
(1)靜態測試:只要指對概要設計的測試。
(2)動態測試:以黑盒測試為主,需要了解內部細節時結合白盒測試 6.整合測試策略
(1)非增量式整合:對所有模組進行個別的單元測試後,按照程式結構圖將各模組連線起來,把連線後的程式當作一個整體進行測試。
--------------------------------------------------------------------------------------------問答-----------------------------------------------------------------------------------------------
1. 軟體生命週期(SDLC)的六個階段
1、問題的定義及規劃
此階段是軟體開發方與需求方共同討論,主要確定軟體的開發目標及其可行性。
2、需求分析
在確定軟體開發可行的情況下,對軟體需要實現的各個功能進行詳細分析。需求分析階段是一個很重要的階段,這一階段做得好,將為整個軟體開發專案的成功打下良好的基礎。"唯一不變的是變化本身。",同樣需求也是在整個軟體開發過程中不斷變化和深入的,因此我們必須制定需求變更計劃來應付這種變化,以保護整個專案的順利進行。
3、軟體設計
此階段主要根據需求分析的結果,對整個軟體系統進行設計,如系統框架設計,資料庫設計等等。軟體設計一般分為總體設計和詳細設計。好的軟體設計將為軟體程式編寫打下良好的基礎。
4、程式編碼
此階段是將軟體設計的結果轉換成計算機可執行的程式程式碼。在程式編碼中必須要制定統一,符合標準的編寫規範。以保證程式的可讀性,易維護性,提高程式的執行效率。
5、軟體測試
在軟體設計完成後要經過嚴密的測試,以發現軟體在整個設計過程中存在的問題並加以糾正。整個測試過程分單元測試、組裝測試以及系統測試三個階段進行。測試的方法主要有白盒測試和黑盒測試兩種。在測試過程中需要建立詳細的測試計劃並嚴格按照測試計劃進行測試,以減少測試的隨意性。
6、執行維護
軟體維護是軟體生命週期中持續時間最長的階段。在軟體開發完成並投入使用後,由於多方面的原因,軟體不能繼續適應使用者的要求。要延續軟體的使用壽命,就必須對軟體進行維護。軟體的維護包括糾錯性維護和改進性維護兩個方面。
2、軟體生命週期模型
從概念提出的那一刻開始,軟體產品就進入了軟體生命週期。在經歷需求、分析、設計、實現、部署後,軟體將被使用並進入維護階段,直到最後由於缺少維護費用而逐漸消亡。這樣的一個過程,稱為"生命週期模型"(Life Cycle Model)。 典型的幾種生命週期模型包括瀑布模型、快速原型模型、迭代模型。
瀑布模型的特點(文件是主體),很多的問題在最後才會暴露出來。迭代模型比瀑布模型問題暴露的要早;快速原型法比瀑布模型直觀。
3.軟體測試概念
廣義概念:指軟體生存週期中所有的檢查、評審和確認工作,其中包括了對分析、
設計階段,以及完成開發後維護階段的各類文件、程式碼的審查和確認 狹義概念:識別軟體缺陷的過程,即實際結果與預期結果的不一致
4.軟體測試目的
1. 測試的目的就是發現軟體中的各種缺陷
2. 測試只能證明軟體存在缺陷,不能證明軟體不存在缺陷
3. 測試可以使軟體中缺陷降低到一定程度,而不是徹底消滅
4. 以較少的用例、時間和人力找出軟體中的各種錯誤和缺陷,以確保軟體的質量
5.軟體測試原則
Good-enough: 一種權衡投入/產出比的原則
保證測試的覆蓋程度,但窮舉測試是不可能的
所有的測試都應追溯到使用者需求
越早測試越好,測試過程與開發過程應是相結合的
測試的規模由小而大,從單元測試到系統測試
為了儘可能地發現錯誤,應該由獨立的第三方來測試
不能為了便於測試擅自修改程式
既應該測試軟體該做什麼也應該測試軟體不該做什麼
6.軟體測試的的重點
測試用例的設計
– 測試用例的設計是整個軟體測試工作的核心 – 測試用例反映對被測物件的質量要求,決定對測試物件的質量評估
測試工作的管理
– 尤其是對包含多個子系統的大型軟體系統,其測試工作涉及大量人力和物力,有效的測試工作管理是保證有效測試工作的必要前提
測試環境的建立
– 測試環境應該與實際測試環境一致
7.黑盒測試
什麼是黑盒測試
– 又稱功能測試或資料驅動測試,是針對軟體的功能需求/實現進行測試,通過測試來檢測每個功能是否符合需求,不考慮程式內部的邏輯結構
黑盒測試方法:– 功能劃分 – 等價類劃分 – 邊界值分析 – 因果圖 – 錯誤推測等
8.什麼是白盒測試
– 白盒測試也稱結構測試或邏輯驅動測試,必須知道軟體內部工作過程,通過測試來檢測軟體內部是否按照需求、設計正常執行
– 白盒測試的主要方法
– 對應於程式的一些主要結構:語句、分支、邏輯路徑、變數;
白盒測試的主要方法是: – 語句覆蓋方法 – 分支覆蓋方法 – 邏輯覆蓋方法
9. 什麼是動態測試
動態測試需要在開發/測試環境或實際執行環境中執行軟體,並使用測試用例去查詢軟體缺陷;動態測試包括功能確認與介面測試、覆蓋率分析、效能分析、記憶體分析等
10.什麼是靜態測試
靜態測試不實際執行軟體,主要是對軟體的程式設計格式、結構等方面進行評估.靜態測試包括程式碼檢查、程式結構分析、程式碼質量度量等。它可以由人工進行,也可以藉助軟體工具自動進行
11.手工測試和自動測試
a.手工測試缺點在於測試工作量大,重複多,迴歸測試難以實現
b.自動測試利用軟體測試工具自動實現全部或部分測試工作:管理、設計、執行和報告;節省大量的測試開銷,並能夠完成一些手工測試無法實現的測試
手工完成測試的全部過程無法保證測試的科學性與嚴密性:
– 修改的缺陷越多,迴歸測試越困難
– 沒有人能向決策層提供精確的資料以度量當前的工作進度及工作效率
– 反覆測試帶來的倦怠情緒及其他人為因素使得測試標準前後不一 – 測試花費的時間越長,測試的嚴格性也就越低
自動測試將測試人員從反覆、煩雜的測試執行中解放出來,用更多的時間進行測試設計和結果分析
軟體測試不可能完全自動化
不能完成所有手工測試任務
無創造性且靈活性差,不能改進測試的有效性
過程中可能會遇到許多意想不到的問題,特別是當軟體不穩定時
測試指令碼的維護高
12. 測試流程 :
單元測試 整合測試 系統測試 使用者驗收測試 迴歸測試
---------------------------------------------------------------------------------試題--------------------------------------------------------------------------------------
一.簡答題和應用題
01.為什麼要在一個團隊中開展軟體測試工作?
因為沒有經過測試的軟體很難在釋出之前知道該軟體的質量,在測試的過程發現軟體中存在的問題,及時讓開發人員得知並修改問題,在即將釋出時,從測試報告中得出軟體的質量情況。
02.您認為做好測試用例設計工作的關鍵是什麼?
白盒測試用例設計的關鍵是以較少的用例覆蓋儘可能多的內部程式邏輯結果
黑盒法用例設計的關鍵同樣也是以較少的用例覆蓋模組輸出和輸入介面。不可能做到完全測試,以最少的用例在合理的時間內發現最多的問題
2.什麼是軟體測試?
答:軟體測試是為了發現錯誤而執行程式的過程。或者說,軟體測試是根據軟體開發各
階段的規格說明和程式的內部結構而精心設計一批測試用例(即輸入資料及其預期的輸出結果),並利用這些測試用例去執行程式,以發現程式錯誤的過程。
3.比較軟體測試過程和軟體開發過程?
4.比較白盒測試和黑盒測試?
使用白盒測試方法時,確定測試資料應根據程式的內部邏輯和指定的覆蓋標準; 黑盒測試法是通過分析程式的介面功能來設計測試用例的。
5.簡述軟體測試的步驟?
軟體測試的複雜性分析;軟體測試方法與策略;單元測試;整合測試;確認測試;驗收測試;測試後的除錯;面向物件的軟體測試!
6.什麼是測試用例
答:測試用例是為特定的目的而設計的一組測試輸入、執行條件和預期的結果。測試用例是執行的最小實體。
7.軟體測試的步驟
答:單元測試、整合測試、系統測試、確認測試(產品釋出)
定義時期:問題定義,可行性研究;
開發時期:需求分析,軟體設計,編碼,測試; 維護時期:維護;
8.QTP工具使用流程
答: 錄製測試指令碼,編輯測試(結構化)指令碼(專家檢視),除錯測試指令碼,執行測試指令碼, 分析測試結果(QTP自動產生測試報告)
9.瞭解4-5中軟體測試型別
二.填空題:
1.單元測試是以 詳細設計 說明書為指導,測試源程式程式碼;整合測試以 概要設計 說明書為指導,測試軟體結構;確認測試以 需求分析 說明書為指導。
2.程式碼複審屬於 靜態測試(或人工測試) ,不實際執行程式。
3.動態測試分為 黑盒測試法 即功能測試,和 白盒測試法 即結構測試。
4.邊界值分析法屬於 黑盒測試法 。
5.邏輯覆蓋屬於 白盒測試法 ,包括 語句覆蓋 、分支覆蓋、 條件覆蓋 、判定/條件覆蓋、條件組合覆蓋 、 路徑覆蓋 。
6.軟體是包括 程式 、 資料、 相關文件 的完整集合
7.硬體與軟體的最大區別是:軟體產品是 邏輯 產品,硬體產品是物質產品。
8. 計算機軟體 和 計算機硬體 構成了完整的計算機系統。
9. 軟體工程的結構化生命週期方法是將軟體開發的全過程劃分為相互獨立而又相互依存的階段,軟體的 邏輯模型是形成於 需求分析階段 。
三.判斷題:
1.(×)用黑盒法測試時,測試用例是根據程式內部邏輯設計的。
2.(√)白盒測試是基於對程式控制結構瞭解的基礎上來設計測試用例的。
3.(×)測試是為了驗證軟體正確地實現了使用者需求。
4.(√)確認測試主要測試軟體功能是否滿足使用者的合理需求,以“需求規格說明書”為測試依據。
5.(×)軟體測試時經常要輸入無效的,不合理的資料進行測試。
6.(×)如果釋出的軟體有質量問題,那是軟體測試人員的錯。
7.(×)設計-實現-測試,軟體測試是開發後期的一個階段。
四.選擇題:
1.軟體測試是按照特定的規程,__A___的過程。
A發現軟體錯誤 B說明程式正確
C證明程式沒有錯誤 D設計並執行測試用例
2.測試用例是專門為了發現軟體錯誤而設計的一組或多組資料,它由___C____組成。
A測試輸入資料 B預期的測試輸出資料
C測試輸入和預期的輸出資料 D按照測試用例設計方法設計出的資料
3.一個成功的測試是____B___。
A發現錯誤 B發現了至今尚未發現的錯誤 C沒有發現錯誤 D證明發現不了錯誤
4.測試過程的活動幾乎貫穿整個開發過程,他大體分為___D___和系統測試階段。
A模組測試、整合測試、有效性測試 B模組測試、功能測試、迴歸測試 C單元測試、功能測試、使用者測試 D單元測試、整合測試、確認測試
5.測試過程的三個測試階段分別以___A____文件為指導。
A需求規格說明書、概要設計、詳細設計 B產品目標設計、產品設計、測試計劃 C產品需求分析、產品設計、產品測試計劃 D測試計劃、測試用例設計、測試報告
6.在白盒法中,無論採用那種覆蓋標準都不可能達到100%覆蓋率。它們的目標都是_ A___。
A 用盡可能少的測試用例發現儘可能多的錯誤。 B 從理論上證明100%的覆蓋率是不可能達到的。
C 說明測試的強度是可估量的。 D 說明測試的標準是可比較的。
7.白盒法與黑盒法最大的不同在於___B____。
A測試用例設計方法不同 B測試的任務不同 C應用的測試階段不同 D基於的知識集不同
8.使用白盒測試方法時,確定測試資料應根據__ A_ __和指定的覆蓋標準;
黑盒測試法是通過分析___D____來設計測試用例的。
A 程式的內部邏輯 B 程式的複雜程度 C 使用說明書 D 程式的介面功能
9.單元測試一般以 A 為主,測試的依據是 C 。
A白盒法 B黑盒法 C模組內部邏輯規格說明
D系統結構圖 E系統需求規格說明
10.編碼階段產生的錯誤由 A 檢查出來。
A單元測試 B 整合測試
C有效性測試 D 系統測試