测试理论
一、基本概念
定義:軟件測試是為了發現錯誤而執行程序的過程,“尋找錯誤”是測試的目的 使用人工或自動手段運行或測定某個系統的過程,其目的在于檢驗它是否滿足規定的需求或是否弄清預期結果與實際結果之間的差別 軟件測試是一種重要的軟件質量保證活動,測試過程中的活動包括分析軟件和運行軟件,是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼的最終復審,是軟件質量保證的關鍵步驟。測試:找錯誤(證明程序有錯) 調試:該錯誤(使程序正確)
軟件測試的目的: (1)測試是程序執行的過程,目的在于發現錯誤 (2)一個好的測試用例在于能發現至今未發現的錯誤 (3)一個成功的測試是發現至今未發現的錯誤的測試 (測試的成功與失敗在于能否發現錯誤,測試不能表能軟件中不存在錯誤,只能說明軟件中存在錯誤)
通過對軟件錯誤的原因和分布進行歸納,來發現并排除當前軟件產品的缺陷,對在需求和設計過程中存在的問題查缺補漏,從而確保軟件產品的質量;
軟件測試的原則: (1)所有的測試都應追索到用戶的需求:系統中最嚴重的錯誤是導致程序無法滿足用戶需求的錯誤; (2)盡早的和不斷的進行軟件測試:需求和設計時初心的缺陷占很大的比例;缺陷的修改成本隨著階段的推移而急劇上升;缺陷具有放大的特點
(3)不可能完全的測試 (4)80-20原則:測試發現的錯誤80%很可能起源于20%的模塊中,應孤立這些疑點模塊重點測試。 (5)注意測試中的群集現象:在所測程序段中,若發現錯誤數目多,則殘存數目也比較多 (6)避免測試自己的程序 (7)設計周密的測試用例 軟件測試的本質就是針對要測試的內容確定一組測試用例 測試用例至少包括: 執行測試用例前:應滿足的前提條件 輸入 預期輸出 設計測試用例時應包括合理的輸入條件和不合理的輸入條件 (8)回歸測試:程序修改錯誤后必須進行回歸測試,避免引入新的錯誤 (9)嚴格執行測試計劃:排除測試的隨意性
軟件測試的對象: (1)軟件測試貫穿于定義與開發的整個期間 (2)軟件測試的對象 需求規格說明 概要設計規格說明 詳細設計規格說明 源程序 軟件測試分類 ?
是否執行被測試軟件:
靜態測試:不運行被測程序本身,而是通過在對軟件進行分析、檢查和審閱達到測試目的
? ? ? 方法:代碼審查;代碼走查;桌面檢查;技術評審
動態測試:值通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率和健壯性等性能。由三部分組成:編寫測試用例、執行測試結果、分析程序的輸出結果。
黑盒測試:功能測試/數據驅動測試,是在已知產品所應對應具有的功能的前提下,通過測試來檢測每個功能是否都能正常使用。
白盒測試:結構測試/邏輯驅動測試,是在知道產品內部工作過程的前提下,可通過測試來檢測產品內部動作是否按照規格說明書的規定正常進行。
按照軟件測試的策略和過程分(都是動態測試):
單元測試:單元測試的對象軟件設計的最小單位——模塊。單元測試的依據是詳細設計描述,單元測試應對模塊內所有重要的控制路徑設計測試用例,以便發現模塊內部的錯誤。單元測試多采用白盒測試技術,系統內多個模塊可以并行的進行。
集成測試:組裝軟件的系統測試技術,按設計要求把通過單元測試的各個模塊組裝在一起之后,進行集成測試以便發現與接口有關的各種錯誤。
系統測試:是在真實或模擬系統運行的環境下,為驗證和確認系統是否達到需求規格說明書規定的需求而對集成的硬件和軟件系統進行的測試
驗收測試:按照項目任務書或合同、供需雙方約定的驗收依據文檔進行的整個系統的評測,決定是否接受或拒絕系統
按測試內容分:
功能測試:根據功能需求進行測試,以確定軟件與軟件功能需求的一致,功能遺缺和多余
性能測試:評價一個產品或組件與性能需求是否符合的測試
一、性能測試類型
性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬于性能測試,兩者可以結合進行。通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。
2.負載測試(Load Testing)
在給定的測試環境下,通過在被測系統上不斷增加壓力,直到性能指標超過預定指標或某種資源使用已經達到飽和狀態,目的是了解系統性能容量和處理能力極限。負載測試的主要用途是發現系統性能的拐點,尋找系統能夠支持的最大用戶、業務等處理能力的約束。
負載測試是在固定測試環境,在其它測試角度(負載方面)不變的情況下,變化一個測試角度并持續增加壓力,查看系統的性能曲線和處理極限,以及是否有性能瓶頸存在(拐點)。主要意義是從多個不同的測試角度去探測分析系統的性能變化情況,配合性能調優。測試角度可以是并發用戶數、業務量、數據量等不同方面的負載。
3.壓力測試(Stress Testing)
測試系統在一定飽和狀態下系統能夠處理的會話能力,以及是否出現錯誤,一般用于穩定性測試。
可以理解為資源的極限測試。測試關注在資源處于飽和或超負荷的情況下,系統能否正常運行,是一種在極端壓力下的穩定性測試。其主要意義是通過測試、調優保證系統即使在用戶的極端壓力下也不會出錯甚至系統崩潰。
壓力測試的目的是調查系統在其資源超負荷的情況下的表現,尤其是對系統的處理時間有什么影響。這類測試在一種需要在反常數量、頻率或資源的方式下執行系統。目標是通過極限測試方法,發現系統在極限或惡劣環境中自我保護能力。主要驗證系統的可靠性。
4.配置測試(Configuration Testing)
通過對被測系統的軟硬件環境的調整,了解各種不同環境對性能影響的程度,從而找到系統各項資源的最有分配原則。
主要用于性能調優,在經過測試獲得了基準測試數據后,進行環境調整(包括硬件配置、網絡、操作系統、應用服務器、數據庫等),再將測試結果與基準數據進行對比,判斷調整是否達到最佳狀態。
5.并發測試(Concurrency Testing)
模擬并發訪問,測試多用戶并發訪問同一個應用、模塊、數據時是否產生隱藏的并發問題,如內存泄漏、線程鎖、資源爭用問題。
6.可靠性測試(Reliability Testing)
通過給系統加載一定的業務壓力的情況下,讓應用持續運行一段時間,測試系統在這種條件下是否能夠穩定運行。
需要和壓力測試區分開,兩者的測試環境和測試目的不一樣。壓力測試強調在資源極限情況下系統是否出錯,可靠性測試強調在 一定的業務壓力下長時間(如24×7)運行系統,關注系統的運行情況(如資源使用率是否逐漸增加、響應時間是否越來越慢),是否有不穩定征兆。
eg:
負載測試:測試一個應用在重負荷下的表現,例如測試一個web站點在大量負荷下,何時系統的響應會退化或失敗
壓力測試:用來評估在超越最大負載的情況下系統將應如何進行
? ? ? ? ? ? ? ? ? 壓力測試的目標就是發現在高負荷條件下應用程序的缺陷
疲勞測試:采用系統穩定運行情況下能夠支持的最大并發用戶數,持續一段時間業務,通過綜合分析交易執行指標和資源監控指標來確定系統處理最大量強度性能的過程
兼容測試:測試軟件在一個特定的硬件/軟件/操作系統/網絡等環境下性能如何
安全性測試:針對程序中危險防止和危險處理設施進行的測試,以驗證其是否有效
安裝性測試
可用性測試:對“用戶友好性”的測試
? ? ? ? ? ? ? ? ? ? 主觀的:取決于目標最終用戶和可和
? ? ? ? ? ? ? ? ? ? 用戶面談、調查、用戶對話的路線和其他一些技術
? ? ? ? ? ? ? ? ? ? 程序員和測試員通常都不宜做可用性測試員
注:功能的重點在于能做什么;性能在于做的如何
缺陷:最終產品和用戶的期望不一致
? ? ? ? ? ?功能錯誤
? ? ? ? ? ?功能遺漏
? ? ? ? ? ?超出需求的部分
? ? ? ? ? ?性能不符合要求
二、測試模型與過程
? ? ? ?1-1 軟件生命周期
? ? ? ?a.大棒開發法
? ? ? ?b.邊改邊寫法
? ? ? ?? ? ? ?優點:能夠較為迅速的展現結果,適合需要快速制作并且用完就扔的小項目,如示范程序、演示程序等。
? ? ? ?? ? ? ?缺點:其編碼和測試可能是將長期的循環往復的過程
? ? ? ?c. ?瀑布法:將軟件生命周期的各項活動,規定為按照固定順序相連的若干個階段性工作,形如瀑布流水,最終得到軟件產品
? ? ? ?優點:易于理解;調研開發的階段性;強調早期計劃及需求調查;確定何時能交付產品及何時進行評審與測試;
? ? ? ?缺點:需求調查分析只進行一次,不能適應需求變化;順序的開發流程,使得開發中的經驗教訓不能反饋到該項目的開發中去;不能反映出軟件開發過程的反復與迭代性;沒有包含類型的風險評估;開發中出現的問題直到開發后期才暴露(測試在后期階段),因此失去及早糾正的機會。
? ? ? ?d. 快速原型法
? ? ? ?根據客戶需求在較短的時間內解決用戶最迫切解決的問題,完成可演示的產品。這個產品只實現最重要的功能,在得到客戶更加明確的需求之后,原型將丟棄
? ? ? ?e. 螺旋瀑布法
? ? ? ?將瀑布模型和快速原型模型結合起來,強調了其他模型所忽視的風險分析,特別適合于大型復雜的系統。 螺旋模型沿著螺線進行若干次迭代,圖中的四個象限代表了以下活動:
? ? ? ?? ? ? ?(1) 制定計劃:確定軟件目標,選定實施方案,弄清項目開發的限制條件
? ? ? ?? ? ? ?(2) 風險分析:分析評估所選方案,考慮如何識別和消除風險;
? ? ? ?? ? ? ?(3) 實施工程:實施軟件開發和驗證;
? ? ? ?? ? ? ?(4) 客戶評估:評價開發工作,提出修正建議,制定下一步計劃。
螺旋模型由風險驅動,強調可選方案和約束條件從而支持軟件的重用,有助于將軟件質量作為特殊目標融入產品開發之中。但是,螺旋模型也有一定的限制條件,具體如下:(1) 螺旋模型強調風險分析,但要求許多客戶接受和相信這種分析,并做出相關反應是不容易的,因此,這種模型往往適應于內部的大規模軟件開發。
(2) 如果執行風險分析將大大影響項目的利潤,那么進行風險分析毫無意義,因此,螺旋模型只適合于大規模軟件項目。
(3) 軟件開發人員應該擅長尋找可能的風險,準確地分析風險,否則將會帶來更大的風險
一個階段首先是確定該階段的目標,完成這些目標的選擇方案及其約束條件,然后從風險角度分析方案的開發策略,努力排除各種潛在的風險,有時需要通過建造原型來完成。如果某些風險不能排除,該方案立即終止,否則啟動下一個開發步驟。最后,評價該階段的結果,并設計下一個階段。
優點:嚴格的全過程風險管理;強調個開發階段的質量;提供機會評估項目是否有價值繼續下去。
2.軟件測試模型
? ? ? ?V模型的過程從左到右,描述了基本的開發過程和測試行為。V模型的價值在于它非常明確地標明了測試過程中存在的不同級別,并且清楚地描述了這些測試階段和開發過程期間各階段的對應關系;
? ? ? ?局限性:把測試作為最后一個活動,需求分析前期產生的錯誤直到后期的驗收測試才能發現。
? ? ? ?該模型容易使人理解主要是針對程序進行測試尋找錯誤
? ? ? ?實際中,由于需求變更較大,導致要重復變更需求、設計、編碼、測試。返工量大。主要用在快速程序的開發
? ? ? ?在V模型中增加軟件開發各開發階段應同步進行的測試,演化為W模型
? ? ? ?開發的是V,測試是與此并行的V;相對于V模型,W模型更科學,強調的是測試伴隨整個軟件開發周期,并且測試的對象不僅僅是程序,需求、功能、和設計同樣要測試。測試和開發是同步進行的,有利于盡早的發現問題
? ? ? ?缺點:W和V都把軟件的開發視為需求、設計、編碼等一系列串行的活動,無法支撐迭代、自發性以及變更挑戰
? ? ? ?? ? ? ? ? ?主要應用在一些中型軟件并且業務邏輯關聯非常緊密的項目中
? ? ? ?H模型中,軟件測試活動完全獨立,貫穿于整個產品的周期,與其他流程并發的進行,某個測試點準備就緒時,就可以從測試準備階段進行到測試執行階段。軟件測試可以盡早的進行,并且可以根據被測物的不同而分層次進行。
? ? ? ?軟件測試是一個獨立的流程,貫穿產品整個生命周期,與其他流程并發進行
? ? ? ?H模型指出軟件測試要盡早準備,盡早執行,不同的測試活動可以是按照某次序先后進行,但也可能是反復的,只要某個測試達到準備就緒點,測試執行活動就可以開展。
? ? ? ?很好的處理測試與開發的交接過程,交接的過程是一個時間段,而不是一個點。
? ? ? ?左邊描述的是針對單獨程序片段所進行的相互分離的編碼和測試,伺此后將進行頻繁的交接,通過集成最終合成為可執行的程序,然后再對這些可執行的程序進行測試。
? ? ? ?已通過集成測試的產品可以進行封裝并提交給用戶,也可以作為更大規模和范圍內集成的部分,多根并行的曲線表示變更可以在各個部分發生
? ? ? ?X模型還定位了探索性測試,這是不進行實現計劃的特殊測試,給有經驗的測試人員在測試計劃外發現更多軟件缺陷
三、 黑盒測試常用方法
1. 邊界值測試:
? ? ? ?1-1 邊界
? ? ? ?? ? ? ??a. 數值邊界值:數值范圍
? ? ?? ? ? ???b. 字符邊界值 :ASCII表
? ? ?? ? ? ????c. 其他邊界條件:默認值、空白、空值、零值、無輸入等情況
? ? ? ?1-2 基本思想
? ? ? ?? ? ? ??使用輸入變量的最小值、略大于最小值、正常值、略小于最大值和最大值來設計測試用例(min,min+,nom,max-,maz)
? ? ?? ? ? ???單缺陷假設:只讓一個變量取邊界值,其余變量取正常值
? ? ?? ? ? ???多缺陷假設:同時讓多個變量取邊界值
? ? ? ?? ? ? ?(1)邊界值分析(單缺陷)(4N+1)
? ? ? ? ? ? ??(2)健壯性邊界值分析(在異常情況下,軟件還具有正常運行的能力)(增加一個取異常值,其他都正常值的測試用例,6N+1)
? ? ? ? ? ? ??(3)最壞情況測試(多個變量出現極值,最最小值,略大于最小值,正常值,最大值,略小于最大值做笛卡爾乘積,5N)
? ? ? ? ? ?(3)健壯性最壞情況測試(7N)
2. 等價類測試
? ? ? ?2-1 等價類劃分
? ? ?? ? ? ??劃分是指互不相交的一組子集,這些子集的并是整個集合
? ? ? ?2-2 有效等價類
? ? ? ?? ? ? ?是指對于程序的規格說明來說是合理的、有意義的輸入數據構成的集合。利用有效等價類可以驗證程序是否實現了規格說明中的功能和性能。
? ? ? ?2-3 無效等價類
? ? ? ?? ? ? ?對程序的規格說明來說是不合理的或無意義的輸入數據所構成的集合。為了驗證程序做其不應做的事情。
? ? ? ?2-4 等價類劃分方法
? ? ?? ? ? ??(1)按照區間劃分。在輸入條件規定了取值范圍或值得個數的情況下,則可以確立一個有效等價類和兩個無效等價類。
? ? ? ?? ? ? ?(2)按照數值劃分。在規定了輸入數據的一組值(假定n),并且程序要對每一個輸入值分別處理的該情況下,可確立n個有效等價類和一個無效等價類。
? ? ?? ? ? ??(3)按照數值集合劃分。在輸入條件規定了輸入值的集合或者規定了“必須如何”的情況下,可確立一個有效等價類和一個無效等價類。
? ? ? ?? ? ? ?(4)在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類。
? ? ? ?? ? ? ?(5)進一步細分等價類。在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步地劃分為更小的等價類。
? ? ? ?? ? ? ?(6)等價類劃分還應特別默認值、空值、NULL、零值的情況。
? ? ? ?2-5 等價類的特點
? ? ? ?? ? ? ?(1)完備性(全集)(2)無冗余性(互不相交的子集) (3)等價性
? ? ? ?2-6 等價類測試類型
? ?? ? ? ??? ?單/多缺陷:弱/強等價類
? ?? ? ? ?? ?是/否考慮無效等價類:健壯性/一般等價類測試
? ?? ? ? ?? ?eg ?a≤x1≤d,區間為 [a,b) [b,c) [c,d];e≤x2≤g ,區間為?[e,f) ?[f,g]
? ? ? ?? ? ? ?(1)弱一般等價類測試:單缺陷,要求選取的測試用例覆蓋所有的有效等價類
(2)弱一般等價類測試:多缺陷,要求將每個變量的有效等價類做笛卡爾積,設計測試用例覆蓋笛卡爾積的每個元素。
(2)弱健壯性等價類測試:弱指基于單缺陷假設,健壯性指考慮了無效值。對有效輸入,使用每個有效等價類的一個值;對無效輸入,測試用例將擁有一個無效值。補充輸入域邊界以外的值(略小于最小值min-1,略大于與最大值max+1)
(3)基于多缺陷假設,并考慮無效輸入
3 基于判定表的測試
3-1 判定表
(1)條件樁:列出了問題的所有條件。
(2)動作樁:列出了問題規定可能采取的操作。(1、2的排列順序通常沒有約束)
(3)條件項:列出針對它的左列條件的取值
(4)動作項:列出在條件項的各種取值情況下應該采取的動作
4.其他測試方法
4-1 因果圖方法:從用自然羽然書寫的程序規格說明的描述中找出因(輸入條件)和果(輸入或程序狀態的改變)之間的關系繪制出因果圖,然后通過因果圖轉換為判定表。
4-2 正交實驗設計法:使用已經造好的正交表來安排適應并進行數據分析的一種方法,目的使用最小的測試用例達到最高的測試覆蓋率。
4-3 錯誤推測設計方法:基于經驗和直覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例
四、 白盒測試常用方法
1.邏輯覆蓋測試:根據被測試程序的邏輯結構設計測試用例。
2. 語句覆蓋:測試時設計若干測試用例,運行被測試程序,使程序中的每條可執行語句至少執行一次。
優點:檢查所有語句;結構簡單的代碼測試效果好;容易實現自動測試;代碼覆蓋率高;如果是程序塊覆蓋,則不涉及程序塊中的源代碼。
缺點:不能檢查出條件語句錯誤、循環語句錯誤;語句率覆蓋率看似很高,卻有嚴重缺陷(分支覆蓋率)
3. 判定覆蓋/分支覆蓋:設計若干測試用例,運行被測試程序,使得程序中每個判斷的取真分支和取假分支至少經歷一次,即判斷的真假值均曾被滿足。(while/switch/異常處理/跳轉語句)
判定覆蓋率:已取過“真”和“假”兩個值的判定程序占程序中所有條件判定個數的百分比
優點:分支覆蓋比語句覆蓋查錯能力強一些:執行了分支覆蓋,實際也就執行了語句覆蓋
缺點:不能查出條件語句錯誤/邏輯運算錯誤/循環次數錯誤/循環條件錯誤
4. 條件覆蓋:設計若干測試用例,執行被測程序后,要使每個判斷中每個條件的可能取值至少滿足一次,即每個條件至少有一次為真值,有一次為假值
優點:能夠檢查所有的條件錯誤;
缺點:不能實現對每個分支的檢查,用例數量的增加
做到了完全的條件覆蓋,并不能保證達到完全的判定覆蓋。
做到了完全的判定覆蓋也并不能保證達到了完全的條件覆蓋==》條件和分支兼顧
5. 判定-條件覆蓋:將判定覆蓋和條件覆蓋結合起來,即設計足夠的測試用例,使得判斷條件中的每個條件的所有可能取值至少執行一次,并且每個判斷本身的可能判定結果也至少執行一次。
優點:既考慮了每一個條件,又考慮了每一個分支,發現錯誤能力強于分支覆蓋和條件覆蓋。
缺點:并不能全面覆蓋所有路徑;用例數量增加
6. 條件組合覆蓋:設計足夠的測試用例,運行被測程序,使得所有可能的條件取值組合至少執行一次
優點:滿足了判定覆蓋、條件覆蓋和條件-判定覆蓋
缺點:不能全面覆蓋所有路徑
7. 路徑覆蓋:設計足夠多的測試用例來覆蓋程序中所有可能的路徑(不可能:循環、、、、)
8.路徑測試
1. 基路徑測試:把覆蓋的路徑數壓縮到一定限度內,例如程序中的循環體只執行0次和1次
1-1 程序環路復雜性
a. 設E為控制流圖的邊數,N為圖的節點數,則定義環路復雜性為V(G)=E-N+2
b. 設P為控制流圖中的判定節點數,則由V(G)=P+1
c. 將環路復雜性定義為控制流圖中的區域數(控制流圖外面也要算一個區域)
2-1 獨立路徑:包括一組以前沒有處理的語句或條件的一條路徑
3-1 基本路徑集:控制流圖中所有獨立路徑的集合(路徑數=環路復雜性)
4-1 基路徑測試法:通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。設計出的測試用例要保證在測試中的每個可執行語句至少執行一次(路徑數=環路復雜性)。
缺點:測試覆蓋并不充分(循環)
2. 循環測試:針對循環的測試
3.數據流測試:基于程序的控制流,從建立的數據目標狀態的序列中發現異常的結構測試方法,數據的定義/引用缺陷。
三、 單元測試
? ? ? ? 單元:一個可獨立運行的代碼段
? ? ? ? 獨立運行:這個工作不受前一次或接下來的程序運行的結果影響,即不與上下文發送關系。
? ? ? ? 單元測試方法:靜態/動態
? ? ? ? 靜態測試:不需要運行單元代碼,而是對代碼進行逐行的檢測
? ? ? ? 動態測試:需要運行被測單元代碼,由于被測單元需要調用其他單元,或者會被其他單元調用。
3-1 ? 單元測試的環境
? ? ? ? ?靜態測試:無需搭建測試環境
? ? ? ? ?動態單元測試:用一些輔助模塊來模擬與所測模塊相聯系的其他模塊,需要在測試之前搭建相應測試環境
? ? ? ? ? 輔助模塊分兩種:
? ? ? ? ?(1)驅動模塊(Driver):相當于所測模塊的主程序
? ? ? ? ?(2)樁模塊(stub):用于代替所測模塊調用的子模塊
? ? ? ? ? 單元測試三個步驟:模擬輸入->執行單元->檢查驗證輸出
3-2 ? 單元測試的策略和方法
? ? ? ? ?1、靜態代碼分析
? ? ? ? ? ? ? ?代碼走讀:一種交叉檢查,就是自己的代碼由他人來檢查
? ? ? ? ? ? ? ?代碼審查:以會議的形式展開,由大家根據缺陷檢查表共同審核代碼的質量
? ? ? ? ? ? ? ?代碼評審:通常在審查會后進行,審查小組根據記錄和報告進行評估
? ? ? ? ? 2、單元結構測試(主要采用白盒測試)
? ? ? ? ? ? ? ? 關注代碼內部的執行情況,關注代碼執行的覆蓋率。
? ? ? ? ? ? ? ? 基于路徑的測試、基于數據流測試。
? ? ? ? ? 3、單元功能測試(基本方法時黑盒測試)
? ? ? ? ? ? ? ? 常用測試方法:邊界測試、等價類測試、因果圖測試
四、集成測試
? ? ?4-1. 基本概念
? ? ? ? ? ? 集成:把多個單元組合起來形成更大的單元
? ? ? ? ? ? 集成測試:在假定各個軟件單元已經通過單元測試的前提下,檢查各個軟件單元之間的相互接口是否正確,也叫組裝測試或聯合測試
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?具體檢測包括:功能性驗證、接口測試、全局數據結構的測試以及計算精度檢測等在集成測試時可能出現的錯誤
? ? ?4-2. 方法策略
? ? 非增量型集成測試:將所有軟件統一集成后才進行整體測試(大棒集成)
? ? 增量型集成測試:從一個模塊開始,測一次添加一個模塊,邊組裝邊測試,以發泄與結構相聯系的問題(需要驅動程序或樁程序)
? ? ?4-3.基于功能分解的集成
? ? ? ? ? ?(1) 自頂向下集成:從最具控制力的主控模塊開始,按照軟件的控制層次結構,以深度優先或廣度優先的策略,向系統中增加模塊,直至實現整個系統,?需要設計樁模塊
? ? ? ? ? 優點:有助于最大限度減少對驅動程序的需求
? ? ? ? ? 缺點:不能很好地支持有限功能的早期發布
??? ? ? ? 樁 ? ? ? 模塊不能反映真實情況,重要數據不能及時會送到上層模塊,則測試可能并不充分
? ? ? ? ? ?(2)自底向上繼承:從程序模塊結構中最底層的模塊開始組裝,按控制層次增強的順序向系統中增加模塊并測試,直至實現整個系統,不需要再編制樁模塊
? ? ? ?優點:減少了對樁模塊的需求
? ? ? ? ? ? ? ? ??自底向上增值的方式可以實施多個模塊的并行測試,提高測試效率,且管理方便,測試人員能較好地鎖定軟件故障所在位置。
? ? ? ?缺點:對驅動程序的需求使得測試管理變得復雜起來。高級別的邏輯和數據流在晚期測試,只有程序最后一個模塊加入時才具有整體形象。
? ? ? ? ? ? ? ? ?不能很好地支持有限功能的早期發布。
? ? ? ? ? ?(3) 三明治集成:1和2的結合
? ? ?4-4.基于調用圖的集成:以功能分解樹為基礎
七、案例
5-1 如何測試一個杯子
? ? ? ?5-2 測試web登錄界面
? ? ? ?5-3 自動販售機
? ? ? ?5-4 CP命令設計測試用例
? ? ? ? ? ?主要從異常、功能、性能三方面考慮
? ? ? ? ? ?(1)異常
? ? ? ? ? ? ? ? ? ? 參數異常:源和目標參數異常;包含特殊字符;參數超長;指定的位置實際不存在
? ? ? ? ? ? ? ? ? ? 拷貝對象異常:非法的執行權限;存儲介質有破壞;非法的文件格式和內容;
? ? ? ? ? ? ? ? ? ? 執行過程異常:拷貝到一半斷電;拷貝過程中硬盤滿;拷貝過程中源或目的被刪除
? ? ? ? ? ? (2)功能
? ? ? ? ? ? ? ? ? ? ?文件:不同的文件大小:1k,2k,10k...;不同的文件類型:文本,二進制,設備文件
? ? ? ? ? ? ? ? ? ? ?目錄:包含各種文件類型;包含子目錄,目錄深度;目錄文件數量很多;針對文件和目錄分別驗證拷貝的準確性,完整性
? ? ? ? ? ? ?(3)性能
? ? ? ? ? ? ? ? ? ? ? 場景:拷貝大文件;拷貝目錄中存在很多小文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?跨文件系統間拷貝;跨存儲介質間拷貝(硬盤到U盤);構造源的各種磁盤分布(硬盤扇區分布);并發的執行拷貝
? ? ? ? ? ? ? ? ? ? ? 關注的性能點:拷貝時間、CPU、內存、磁盤IO
一、基本概念
定義:軟件測試是為了發現錯誤而執行程序的過程,“尋找錯誤”是測試的目的 使用人工或自動手段運行或測定某個系統的過程,其目的在于檢驗它是否滿足規定的需求或是否弄清預期結果與實際結果之間的差別 軟件測試是一種重要的軟件質量保證活動,測試過程中的活動包括分析軟件和運行軟件,是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼的最終復審,是軟件質量保證的關鍵步驟。測試:找錯誤(證明程序有錯) 調試:該錯誤(使程序正確)
軟件測試的目的: (1)測試是程序執行的過程,目的在于發現錯誤 (2)一個好的測試用例在于能發現至今未發現的錯誤 (3)一個成功的測試是發現至今未發現的錯誤的測試 (測試的成功與失敗在于能否發現錯誤,測試不能表能軟件中不存在錯誤,只能說明軟件中存在錯誤)
通過對軟件錯誤的原因和分布進行歸納,來發現并排除當前軟件產品的缺陷,對在需求和設計過程中存在的問題查缺補漏,從而確保軟件產品的質量;
軟件測試的原則: (1)所有的測試都應追索到用戶的需求:系統中最嚴重的錯誤是導致程序無法滿足用戶需求的錯誤; (2)盡早的和不斷的進行軟件測試:需求和設計時初心的缺陷占很大的比例;缺陷的修改成本隨著階段的推移而急劇上升;缺陷具有放大的特點
(3)不可能完全的測試 (4)80-20原則:測試發現的錯誤80%很可能起源于20%的模塊中,應孤立這些疑點模塊重點測試。 (5)注意測試中的群集現象:在所測程序段中,若發現錯誤數目多,則殘存數目也比較多 (6)避免測試自己的程序 (7)設計周密的測試用例 軟件測試的本質就是針對要測試的內容確定一組測試用例 測試用例至少包括: 執行測試用例前:應滿足的前提條件 輸入 預期輸出 設計測試用例時應包括合理的輸入條件和不合理的輸入條件 (8)回歸測試:程序修改錯誤后必須進行回歸測試,避免引入新的錯誤 (9)嚴格執行測試計劃:排除測試的隨意性
軟件測試的對象: (1)軟件測試貫穿于定義與開發的整個期間 (2)軟件測試的對象 需求規格說明 概要設計規格說明 詳細設計規格說明 源程序 軟件測試分類 ?
是否執行被測試軟件:
靜態測試:不運行被測程序本身,而是通過在對軟件進行分析、檢查和審閱達到測試目的
? ? ? 方法:代碼審查;代碼走查;桌面檢查;技術評審
動態測試:值通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率和健壯性等性能。由三部分組成:編寫測試用例、執行測試結果、分析程序的輸出結果。
黑盒測試:功能測試/數據驅動測試,是在已知產品所應對應具有的功能的前提下,通過測試來檢測每個功能是否都能正常使用。
白盒測試:結構測試/邏輯驅動測試,是在知道產品內部工作過程的前提下,可通過測試來檢測產品內部動作是否按照規格說明書的規定正常進行。
按照軟件測試的策略和過程分(都是動態測試):
單元測試:單元測試的對象軟件設計的最小單位——模塊。單元測試的依據是詳細設計描述,單元測試應對模塊內所有重要的控制路徑設計測試用例,以便發現模塊內部的錯誤。單元測試多采用白盒測試技術,系統內多個模塊可以并行的進行。
集成測試:組裝軟件的系統測試技術,按設計要求把通過單元測試的各個模塊組裝在一起之后,進行集成測試以便發現與接口有關的各種錯誤。
系統測試:是在真實或模擬系統運行的環境下,為驗證和確認系統是否達到需求規格說明書規定的需求而對集成的硬件和軟件系統進行的測試
驗收測試:按照項目任務書或合同、供需雙方約定的驗收依據文檔進行的整個系統的評測,決定是否接受或拒絕系統
按測試內容分:
功能測試:根據功能需求進行測試,以確定軟件與軟件功能需求的一致,功能遺缺和多余
性能測試:評價一個產品或組件與性能需求是否符合的測試
一、性能測試類型
性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。負載測試和壓力測試都屬于性能測試,兩者可以結合進行。通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。
2.負載測試(Load Testing)
在給定的測試環境下,通過在被測系統上不斷增加壓力,直到性能指標超過預定指標或某種資源使用已經達到飽和狀態,目的是了解系統性能容量和處理能力極限。負載測試的主要用途是發現系統性能的拐點,尋找系統能夠支持的最大用戶、業務等處理能力的約束。
負載測試是在固定測試環境,在其它測試角度(負載方面)不變的情況下,變化一個測試角度并持續增加壓力,查看系統的性能曲線和處理極限,以及是否有性能瓶頸存在(拐點)。主要意義是從多個不同的測試角度去探測分析系統的性能變化情況,配合性能調優。測試角度可以是并發用戶數、業務量、數據量等不同方面的負載。
3.壓力測試(Stress Testing)
測試系統在一定飽和狀態下系統能夠處理的會話能力,以及是否出現錯誤,一般用于穩定性測試。
可以理解為資源的極限測試。測試關注在資源處于飽和或超負荷的情況下,系統能否正常運行,是一種在極端壓力下的穩定性測試。其主要意義是通過測試、調優保證系統即使在用戶的極端壓力下也不會出錯甚至系統崩潰。
壓力測試的目的是調查系統在其資源超負荷的情況下的表現,尤其是對系統的處理時間有什么影響。這類測試在一種需要在反常數量、頻率或資源的方式下執行系統。目標是通過極限測試方法,發現系統在極限或惡劣環境中自我保護能力。主要驗證系統的可靠性。
4.配置測試(Configuration Testing)
通過對被測系統的軟硬件環境的調整,了解各種不同環境對性能影響的程度,從而找到系統各項資源的最有分配原則。
主要用于性能調優,在經過測試獲得了基準測試數據后,進行環境調整(包括硬件配置、網絡、操作系統、應用服務器、數據庫等),再將測試結果與基準數據進行對比,判斷調整是否達到最佳狀態。
5.并發測試(Concurrency Testing)
模擬并發訪問,測試多用戶并發訪問同一個應用、模塊、數據時是否產生隱藏的并發問題,如內存泄漏、線程鎖、資源爭用問題。
6.可靠性測試(Reliability Testing)
通過給系統加載一定的業務壓力的情況下,讓應用持續運行一段時間,測試系統在這種條件下是否能夠穩定運行。
需要和壓力測試區分開,兩者的測試環境和測試目的不一樣。壓力測試強調在資源極限情況下系統是否出錯,可靠性測試強調在 一定的業務壓力下長時間(如24×7)運行系統,關注系統的運行情況(如資源使用率是否逐漸增加、響應時間是否越來越慢),是否有不穩定征兆。
eg:
負載測試:測試一個應用在重負荷下的表現,例如測試一個web站點在大量負荷下,何時系統的響應會退化或失敗
壓力測試:用來評估在超越最大負載的情況下系統將應如何進行
? ? ? ? ? ? ? ? ? 壓力測試的目標就是發現在高負荷條件下應用程序的缺陷
疲勞測試:采用系統穩定運行情況下能夠支持的最大并發用戶數,持續一段時間業務,通過綜合分析交易執行指標和資源監控指標來確定系統處理最大量強度性能的過程
兼容測試:測試軟件在一個特定的硬件/軟件/操作系統/網絡等環境下性能如何
安全性測試:針對程序中危險防止和危險處理設施進行的測試,以驗證其是否有效
安裝性測試
可用性測試:對“用戶友好性”的測試
? ? ? ? ? ? ? ? ? ? 主觀的:取決于目標最終用戶和可和
? ? ? ? ? ? ? ? ? ? 用戶面談、調查、用戶對話的路線和其他一些技術
? ? ? ? ? ? ? ? ? ? 程序員和測試員通常都不宜做可用性測試員
注:功能的重點在于能做什么;性能在于做的如何
缺陷:最終產品和用戶的期望不一致
? ? ? ? ? ?功能錯誤
? ? ? ? ? ?功能遺漏
? ? ? ? ? ?超出需求的部分
? ? ? ? ? ?性能不符合要求
二、測試模型與過程
? ? ? ?1-1 軟件生命周期
? ? ? ?a.大棒開發法
? ? ? ?b.邊改邊寫法
? ? ? ?? ? ? ?優點:能夠較為迅速的展現結果,適合需要快速制作并且用完就扔的小項目,如示范程序、演示程序等。
? ? ? ?? ? ? ?缺點:其編碼和測試可能是將長期的循環往復的過程
? ? ? ?c. ?瀑布法:將軟件生命周期的各項活動,規定為按照固定順序相連的若干個階段性工作,形如瀑布流水,最終得到軟件產品
? ? ? ?優點:易于理解;調研開發的階段性;強調早期計劃及需求調查;確定何時能交付產品及何時進行評審與測試;
? ? ? ?缺點:需求調查分析只進行一次,不能適應需求變化;順序的開發流程,使得開發中的經驗教訓不能反饋到該項目的開發中去;不能反映出軟件開發過程的反復與迭代性;沒有包含類型的風險評估;開發中出現的問題直到開發后期才暴露(測試在后期階段),因此失去及早糾正的機會。
? ? ? ?d. 快速原型法
? ? ? ?根據客戶需求在較短的時間內解決用戶最迫切解決的問題,完成可演示的產品。這個產品只實現最重要的功能,在得到客戶更加明確的需求之后,原型將丟棄
? ? ? ?e. 螺旋瀑布法
? ? ? ?將瀑布模型和快速原型模型結合起來,強調了其他模型所忽視的風險分析,特別適合于大型復雜的系統。 螺旋模型沿著螺線進行若干次迭代,圖中的四個象限代表了以下活動:
? ? ? ?? ? ? ?(1) 制定計劃:確定軟件目標,選定實施方案,弄清項目開發的限制條件
? ? ? ?? ? ? ?(2) 風險分析:分析評估所選方案,考慮如何識別和消除風險;
? ? ? ?? ? ? ?(3) 實施工程:實施軟件開發和驗證;
? ? ? ?? ? ? ?(4) 客戶評估:評價開發工作,提出修正建議,制定下一步計劃。
螺旋模型由風險驅動,強調可選方案和約束條件從而支持軟件的重用,有助于將軟件質量作為特殊目標融入產品開發之中。但是,螺旋模型也有一定的限制條件,具體如下:(1) 螺旋模型強調風險分析,但要求許多客戶接受和相信這種分析,并做出相關反應是不容易的,因此,這種模型往往適應于內部的大規模軟件開發。
(2) 如果執行風險分析將大大影響項目的利潤,那么進行風險分析毫無意義,因此,螺旋模型只適合于大規模軟件項目。
(3) 軟件開發人員應該擅長尋找可能的風險,準確地分析風險,否則將會帶來更大的風險
一個階段首先是確定該階段的目標,完成這些目標的選擇方案及其約束條件,然后從風險角度分析方案的開發策略,努力排除各種潛在的風險,有時需要通過建造原型來完成。如果某些風險不能排除,該方案立即終止,否則啟動下一個開發步驟。最后,評價該階段的結果,并設計下一個階段。
優點:嚴格的全過程風險管理;強調個開發階段的質量;提供機會評估項目是否有價值繼續下去。
2.軟件測試模型
? ? ? ?V模型的過程從左到右,描述了基本的開發過程和測試行為。V模型的價值在于它非常明確地標明了測試過程中存在的不同級別,并且清楚地描述了這些測試階段和開發過程期間各階段的對應關系;
? ? ? ?局限性:把測試作為最后一個活動,需求分析前期產生的錯誤直到后期的驗收測試才能發現。
? ? ? ?該模型容易使人理解主要是針對程序進行測試尋找錯誤
? ? ? ?實際中,由于需求變更較大,導致要重復變更需求、設計、編碼、測試。返工量大。主要用在快速程序的開發
? ? ? ?在V模型中增加軟件開發各開發階段應同步進行的測試,演化為W模型
? ? ? ?開發的是V,測試是與此并行的V;相對于V模型,W模型更科學,強調的是測試伴隨整個軟件開發周期,并且測試的對象不僅僅是程序,需求、功能、和設計同樣要測試。測試和開發是同步進行的,有利于盡早的發現問題
? ? ? ?缺點:W和V都把軟件的開發視為需求、設計、編碼等一系列串行的活動,無法支撐迭代、自發性以及變更挑戰
? ? ? ?? ? ? ? ? ?主要應用在一些中型軟件并且業務邏輯關聯非常緊密的項目中
? ? ? ?H模型中,軟件測試活動完全獨立,貫穿于整個產品的周期,與其他流程并發的進行,某個測試點準備就緒時,就可以從測試準備階段進行到測試執行階段。軟件測試可以盡早的進行,并且可以根據被測物的不同而分層次進行。
? ? ? ?軟件測試是一個獨立的流程,貫穿產品整個生命周期,與其他流程并發進行
? ? ? ?H模型指出軟件測試要盡早準備,盡早執行,不同的測試活動可以是按照某次序先后進行,但也可能是反復的,只要某個測試達到準備就緒點,測試執行活動就可以開展。
? ? ? ?很好的處理測試與開發的交接過程,交接的過程是一個時間段,而不是一個點。
? ? ? ?左邊描述的是針對單獨程序片段所進行的相互分離的編碼和測試,伺此后將進行頻繁的交接,通過集成最終合成為可執行的程序,然后再對這些可執行的程序進行測試。
? ? ? ?已通過集成測試的產品可以進行封裝并提交給用戶,也可以作為更大規模和范圍內集成的部分,多根并行的曲線表示變更可以在各個部分發生
? ? ? ?X模型還定位了探索性測試,這是不進行實現計劃的特殊測試,給有經驗的測試人員在測試計劃外發現更多軟件缺陷
三、 黑盒測試常用方法
1. 邊界值測試:
? ? ? ?1-1 邊界
? ? ? ?? ? ? ??a. 數值邊界值:數值范圍
? ? ?? ? ? ???b. 字符邊界值 :ASCII表
? ? ?? ? ? ????c. 其他邊界條件:默認值、空白、空值、零值、無輸入等情況
? ? ? ?1-2 基本思想
? ? ? ?? ? ? ??使用輸入變量的最小值、略大于最小值、正常值、略小于最大值和最大值來設計測試用例(min,min+,nom,max-,maz)
? ? ?? ? ? ???單缺陷假設:只讓一個變量取邊界值,其余變量取正常值
? ? ?? ? ? ???多缺陷假設:同時讓多個變量取邊界值
? ? ? ?? ? ? ?(1)邊界值分析(單缺陷)(4N+1)
? ? ? ? ? ? ??(2)健壯性邊界值分析(在異常情況下,軟件還具有正常運行的能力)(增加一個取異常值,其他都正常值的測試用例,6N+1)
? ? ? ? ? ? ??(3)最壞情況測試(多個變量出現極值,最最小值,略大于最小值,正常值,最大值,略小于最大值做笛卡爾乘積,5N)
? ? ? ? ? ?(3)健壯性最壞情況測試(7N)
2. 等價類測試
? ? ? ?2-1 等價類劃分
? ? ?? ? ? ??劃分是指互不相交的一組子集,這些子集的并是整個集合
? ? ? ?2-2 有效等價類
? ? ? ?? ? ? ?是指對于程序的規格說明來說是合理的、有意義的輸入數據構成的集合。利用有效等價類可以驗證程序是否實現了規格說明中的功能和性能。
? ? ? ?2-3 無效等價類
? ? ? ?? ? ? ?對程序的規格說明來說是不合理的或無意義的輸入數據所構成的集合。為了驗證程序做其不應做的事情。
? ? ? ?2-4 等價類劃分方法
? ? ?? ? ? ??(1)按照區間劃分。在輸入條件規定了取值范圍或值得個數的情況下,則可以確立一個有效等價類和兩個無效等價類。
? ? ? ?? ? ? ?(2)按照數值劃分。在規定了輸入數據的一組值(假定n),并且程序要對每一個輸入值分別處理的該情況下,可確立n個有效等價類和一個無效等價類。
? ? ?? ? ? ??(3)按照數值集合劃分。在輸入條件規定了輸入值的集合或者規定了“必須如何”的情況下,可確立一個有效等價類和一個無效等價類。
? ? ? ?? ? ? ?(4)在輸入條件是一個布爾量的情況下,可確定一個有效等價類和一個無效等價類。
? ? ? ?? ? ? ?(5)進一步細分等價類。在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步地劃分為更小的等價類。
? ? ? ?? ? ? ?(6)等價類劃分還應特別默認值、空值、NULL、零值的情況。
? ? ? ?2-5 等價類的特點
? ? ? ?? ? ? ?(1)完備性(全集)(2)無冗余性(互不相交的子集) (3)等價性
? ? ? ?2-6 等價類測試類型
? ?? ? ? ??? ?單/多缺陷:弱/強等價類
? ?? ? ? ?? ?是/否考慮無效等價類:健壯性/一般等價類測試
? ?? ? ? ?? ?eg ?a≤x1≤d,區間為 [a,b) [b,c) [c,d];e≤x2≤g ,區間為?[e,f) ?[f,g]
? ? ? ?? ? ? ?(1)弱一般等價類測試:單缺陷,要求選取的測試用例覆蓋所有的有效等價類
(2)弱一般等價類測試:多缺陷,要求將每個變量的有效等價類做笛卡爾積,設計測試用例覆蓋笛卡爾積的每個元素。
(2)弱健壯性等價類測試:弱指基于單缺陷假設,健壯性指考慮了無效值。對有效輸入,使用每個有效等價類的一個值;對無效輸入,測試用例將擁有一個無效值。補充輸入域邊界以外的值(略小于最小值min-1,略大于與最大值max+1)
(3)基于多缺陷假設,并考慮無效輸入
3 基于判定表的測試
3-1 判定表
(1)條件樁:列出了問題的所有條件。
(2)動作樁:列出了問題規定可能采取的操作。(1、2的排列順序通常沒有約束)
(3)條件項:列出針對它的左列條件的取值
(4)動作項:列出在條件項的各種取值情況下應該采取的動作
4.其他測試方法
4-1 因果圖方法:從用自然羽然書寫的程序規格說明的描述中找出因(輸入條件)和果(輸入或程序狀態的改變)之間的關系繪制出因果圖,然后通過因果圖轉換為判定表。
4-2 正交實驗設計法:使用已經造好的正交表來安排適應并進行數據分析的一種方法,目的使用最小的測試用例達到最高的測試覆蓋率。
4-3 錯誤推測設計方法:基于經驗和直覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例
四、 白盒測試常用方法
1.邏輯覆蓋測試:根據被測試程序的邏輯結構設計測試用例。
2. 語句覆蓋:測試時設計若干測試用例,運行被測試程序,使程序中的每條可執行語句至少執行一次。
優點:檢查所有語句;結構簡單的代碼測試效果好;容易實現自動測試;代碼覆蓋率高;如果是程序塊覆蓋,則不涉及程序塊中的源代碼。
缺點:不能檢查出條件語句錯誤、循環語句錯誤;語句率覆蓋率看似很高,卻有嚴重缺陷(分支覆蓋率)
3. 判定覆蓋/分支覆蓋:設計若干測試用例,運行被測試程序,使得程序中每個判斷的取真分支和取假分支至少經歷一次,即判斷的真假值均曾被滿足。(while/switch/異常處理/跳轉語句)
判定覆蓋率:已取過“真”和“假”兩個值的判定程序占程序中所有條件判定個數的百分比
優點:分支覆蓋比語句覆蓋查錯能力強一些:執行了分支覆蓋,實際也就執行了語句覆蓋
缺點:不能查出條件語句錯誤/邏輯運算錯誤/循環次數錯誤/循環條件錯誤
4. 條件覆蓋:設計若干測試用例,執行被測程序后,要使每個判斷中每個條件的可能取值至少滿足一次,即每個條件至少有一次為真值,有一次為假值
優點:能夠檢查所有的條件錯誤;
缺點:不能實現對每個分支的檢查,用例數量的增加
做到了完全的條件覆蓋,并不能保證達到完全的判定覆蓋。
做到了完全的判定覆蓋也并不能保證達到了完全的條件覆蓋==》條件和分支兼顧
5. 判定-條件覆蓋:將判定覆蓋和條件覆蓋結合起來,即設計足夠的測試用例,使得判斷條件中的每個條件的所有可能取值至少執行一次,并且每個判斷本身的可能判定結果也至少執行一次。
優點:既考慮了每一個條件,又考慮了每一個分支,發現錯誤能力強于分支覆蓋和條件覆蓋。
缺點:并不能全面覆蓋所有路徑;用例數量增加
6. 條件組合覆蓋:設計足夠的測試用例,運行被測程序,使得所有可能的條件取值組合至少執行一次
優點:滿足了判定覆蓋、條件覆蓋和條件-判定覆蓋
缺點:不能全面覆蓋所有路徑
7. 路徑覆蓋:設計足夠多的測試用例來覆蓋程序中所有可能的路徑(不可能:循環、、、、)
8.路徑測試
1. 基路徑測試:把覆蓋的路徑數壓縮到一定限度內,例如程序中的循環體只執行0次和1次
1-1 程序環路復雜性
a. 設E為控制流圖的邊數,N為圖的節點數,則定義環路復雜性為V(G)=E-N+2
b. 設P為控制流圖中的判定節點數,則由V(G)=P+1
c. 將環路復雜性定義為控制流圖中的區域數(控制流圖外面也要算一個區域)
2-1 獨立路徑:包括一組以前沒有處理的語句或條件的一條路徑
3-1 基本路徑集:控制流圖中所有獨立路徑的集合(路徑數=環路復雜性)
4-1 基路徑測試法:通過分析控制構造的環路復雜性,導出基本可執行路徑集合,從而設計測試用例。設計出的測試用例要保證在測試中的每個可執行語句至少執行一次(路徑數=環路復雜性)。
缺點:測試覆蓋并不充分(循環)
2. 循環測試:針對循環的測試
3.數據流測試:基于程序的控制流,從建立的數據目標狀態的序列中發現異常的結構測試方法,數據的定義/引用缺陷。
三、 單元測試
? ? ? ? 單元:一個可獨立運行的代碼段
? ? ? ? 獨立運行:這個工作不受前一次或接下來的程序運行的結果影響,即不與上下文發送關系。
? ? ? ? 單元測試方法:靜態/動態
? ? ? ? 靜態測試:不需要運行單元代碼,而是對代碼進行逐行的檢測
? ? ? ? 動態測試:需要運行被測單元代碼,由于被測單元需要調用其他單元,或者會被其他單元調用。
3-1 ? 單元測試的環境
? ? ? ? ?靜態測試:無需搭建測試環境
? ? ? ? ?動態單元測試:用一些輔助模塊來模擬與所測模塊相聯系的其他模塊,需要在測試之前搭建相應測試環境
? ? ? ? ? 輔助模塊分兩種:
? ? ? ? ?(1)驅動模塊(Driver):相當于所測模塊的主程序
? ? ? ? ?(2)樁模塊(stub):用于代替所測模塊調用的子模塊
? ? ? ? ? 單元測試三個步驟:模擬輸入->執行單元->檢查驗證輸出
3-2 ? 單元測試的策略和方法
? ? ? ? ?1、靜態代碼分析
? ? ? ? ? ? ? ?代碼走讀:一種交叉檢查,就是自己的代碼由他人來檢查
? ? ? ? ? ? ? ?代碼審查:以會議的形式展開,由大家根據缺陷檢查表共同審核代碼的質量
? ? ? ? ? ? ? ?代碼評審:通常在審查會后進行,審查小組根據記錄和報告進行評估
? ? ? ? ? 2、單元結構測試(主要采用白盒測試)
? ? ? ? ? ? ? ? 關注代碼內部的執行情況,關注代碼執行的覆蓋率。
? ? ? ? ? ? ? ? 基于路徑的測試、基于數據流測試。
? ? ? ? ? 3、單元功能測試(基本方法時黑盒測試)
? ? ? ? ? ? ? ? 常用測試方法:邊界測試、等價類測試、因果圖測試
四、集成測試
? ? ?4-1. 基本概念
? ? ? ? ? ? 集成:把多個單元組合起來形成更大的單元
? ? ? ? ? ? 集成測試:在假定各個軟件單元已經通過單元測試的前提下,檢查各個軟件單元之間的相互接口是否正確,也叫組裝測試或聯合測試
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?具體檢測包括:功能性驗證、接口測試、全局數據結構的測試以及計算精度檢測等在集成測試時可能出現的錯誤
? ? ?4-2. 方法策略
? ? 非增量型集成測試:將所有軟件統一集成后才進行整體測試(大棒集成)
? ? 增量型集成測試:從一個模塊開始,測一次添加一個模塊,邊組裝邊測試,以發泄與結構相聯系的問題(需要驅動程序或樁程序)
? ? ?4-3.基于功能分解的集成
? ? ? ? ? ?(1) 自頂向下集成:從最具控制力的主控模塊開始,按照軟件的控制層次結構,以深度優先或廣度優先的策略,向系統中增加模塊,直至實現整個系統,?需要設計樁模塊
? ? ? ? ? 優點:有助于最大限度減少對驅動程序的需求
? ? ? ? ? 缺點:不能很好地支持有限功能的早期發布
??? ? ? ? 樁 ? ? ? 模塊不能反映真實情況,重要數據不能及時會送到上層模塊,則測試可能并不充分
? ? ? ? ? ?(2)自底向上繼承:從程序模塊結構中最底層的模塊開始組裝,按控制層次增強的順序向系統中增加模塊并測試,直至實現整個系統,不需要再編制樁模塊
? ? ? ?優點:減少了對樁模塊的需求
? ? ? ? ? ? ? ? ??自底向上增值的方式可以實施多個模塊的并行測試,提高測試效率,且管理方便,測試人員能較好地鎖定軟件故障所在位置。
? ? ? ?缺點:對驅動程序的需求使得測試管理變得復雜起來。高級別的邏輯和數據流在晚期測試,只有程序最后一個模塊加入時才具有整體形象。
? ? ? ? ? ? ? ? ?不能很好地支持有限功能的早期發布。
? ? ? ? ? ?(3) 三明治集成:1和2的結合
? ? ?4-4.基于調用圖的集成:以功能分解樹為基礎
七、案例
5-1 如何測試一個杯子
? ? ? ?5-2 測試web登錄界面
? ? ? ?5-3 自動販售機
? ? ? ?5-4 CP命令設計測試用例
? ? ? ? ? ?主要從異常、功能、性能三方面考慮
? ? ? ? ? ?(1)異常
? ? ? ? ? ? ? ? ? ? 參數異常:源和目標參數異常;包含特殊字符;參數超長;指定的位置實際不存在
? ? ? ? ? ? ? ? ? ? 拷貝對象異常:非法的執行權限;存儲介質有破壞;非法的文件格式和內容;
? ? ? ? ? ? ? ? ? ? 執行過程異常:拷貝到一半斷電;拷貝過程中硬盤滿;拷貝過程中源或目的被刪除
? ? ? ? ? ? (2)功能
? ? ? ? ? ? ? ? ? ? ?文件:不同的文件大小:1k,2k,10k...;不同的文件類型:文本,二進制,設備文件
? ? ? ? ? ? ? ? ? ? ?目錄:包含各種文件類型;包含子目錄,目錄深度;目錄文件數量很多;針對文件和目錄分別驗證拷貝的準確性,完整性
? ? ? ? ? ? ?(3)性能
? ? ? ? ? ? ? ? ? ? ? 場景:拷貝大文件;拷貝目錄中存在很多小文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?跨文件系統間拷貝;跨存儲介質間拷貝(硬盤到U盤);構造源的各種磁盤分布(硬盤扇區分布);并發的執行拷貝
? ? ? ? ? ? ? ? ? ? ? 關注的性能點:拷貝時間、CPU、內存、磁盤IO
總結
- 上一篇: python安装pyqt4_window
- 下一篇: OS实验xv6 6.S081 开坑