軟件測試基礎(chǔ)-概念篇

前言

本文章為軟件測試基礎(chǔ)-概念篇課程的筆記記錄。


1-1 軟件測試概要

什么是軟件測試?

早期定義:
軟件測試是對程序能夠按預(yù)期運行建立起一種信心。 —— Bill Hetzel,1973

經(jīng)典定義:
測試是為發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。 —— Myers,1979

IEEE定義
使用人工或自動的手段來運行或測量軟件系統(tǒng)的過程,以檢驗軟件系統(tǒng)是否滿足規(guī)定的需求,并找出與預(yù)期結(jié)果之間的差異

軟件測試的測試對象

測試對象是貫穿整個測試過程的:

  • 軟件需求
  • 軟件概要設(shè)計
  • 軟件詳細(xì)設(shè)計
  • 軟件運行環(huán)境
  • 可運行程序

五大要素和兩個目標(biāo)

  • 要素
    質(zhì)量、人員、資源、流程、技術(shù)
  • 目標(biāo)
    測試覆蓋率、測試效率

軟件測試所遵循的原則

  • 測試顯示缺陷的存在,但不能證明系統(tǒng)不存在缺陷;
  • 窮盡測試是不可能的,應(yīng)設(shè)定及時終止的條件;
  • 測試應(yīng)該盡早進(jìn)行;
  • 缺陷具備群集特性;
  • 測試的殺蟲劑悖論;
  • 測試的二八原則(80%的時間花在20%的重點功能上);
  • 測試活動依賴于測試背景

1-2 軟件測試階段

按測試階段來分類:單元測試、集成測試、系統(tǒng)測試、驗收測試

單元測試

什么是單元測試

對軟件中的最小可測試單元進(jìn)行檢查和驗證。

單元測試的原則

  • 盡可能保證各個測試用例是互相獨立的;
  • 一般由代碼的開發(fā)人員來實施,用以檢驗所開發(fā)的代碼功能符合自己的設(shè)計要求

單元測試的益處

  • 能盡早發(fā)現(xiàn)缺陷
  • 有利于重構(gòu)
  • 簡化集成
  • 文檔
  • 用于設(shè)計

單元測試的限制

  • 不可能覆蓋所有的執(zhí)行路徑,所以不可能保證捕捉到所有路徑的錯誤
  • 每一行代碼,一般需要3~5行測試代碼才能完成單元測試,所以存在投入和產(chǎn)出的一個平衡

單元測試框架

Xunit,如:Junit、nunit、PHPUnit、CppUnit

集成測試

定義

在單元測試的基礎(chǔ)上,測試在將所有的軟件單元按照概要設(shè)計規(guī)格說明的要求組裝成模塊、子系統(tǒng)或系統(tǒng)的過程中各部分工作是否達(dá)到或?qū)崿F(xiàn)相應(yīng)技術(shù)指標(biāo)及要求的活動。

集成測試的主要實施方案

  • Big Bang(全部組裝好,再進(jìn)行集成測試)
  • 自頂向下(從主程序開始,控制層逐層測試)
  • 自底向上(從程序模塊的最底層開始向上組裝;最常用)
  • 核心系統(tǒng)集成
  • 高頻集成(持續(xù)集成)

集成測試 VS 單元測試

  • 測試的對象不同
  • 測試的依據(jù)不同:詳細(xì)設(shè)計 VS 概要設(shè)計
  • 測試的方法不同:接口測試 VS 程序內(nèi)部

系統(tǒng)測試

定義

是將經(jīng)過集成測試的軟件,作為計算機(jī)系統(tǒng)的一個部分,與系統(tǒng)中其它部分結(jié)合起來,在實際運行環(huán)境下對計算機(jī)系統(tǒng)進(jìn)行的一系列嚴(yán)格有效地測試,以發(fā)現(xiàn)軟件潛在的問題,保證系統(tǒng)的正常運行。

關(guān)注點

  • 關(guān)注系統(tǒng)本身的使用
  • 關(guān)注系統(tǒng)與其他相關(guān)系統(tǒng)間的聯(lián)通
  • 關(guān)注系統(tǒng)在不同使用壓力下的表現(xiàn)
  • 關(guān)注系統(tǒng)在真實使用環(huán)境下的使用

系統(tǒng)測試 VS 集成測試

  • 測試對象不同
    • 集成測試:由通過了單元測試各個模塊所集成起來的構(gòu)件
    • 系統(tǒng)測試:除了軟件之外,還包括計算機(jī)硬件及相關(guān)的外圍設(shè)備、數(shù)據(jù)采集和傳輸機(jī)構(gòu)、支持軟件、系統(tǒng)操作人員等整個系統(tǒng)
  • 測試時間不同
    • 集成測試:介于單元測試和系統(tǒng)測試之間
    • 系統(tǒng)測試:在集成測試之后
  • 測試內(nèi)容不同
    • 集成測試:各個單元模塊之間的接口
    • 系統(tǒng)測試:整個系統(tǒng)的功能和性能
  • 測試角度不同
    • 集成測試:偏于技術(shù)角度的驗證
    • 系統(tǒng)測試:偏于業(yè)務(wù)角度的驗證

驗收測試

定義

也稱交付測試。針對用戶需求、業(yè)務(wù)流程的正式測試,確定系統(tǒng)是否滿足驗收標(biāo)準(zhǔn),由用戶、客戶或其他授權(quán)機(jī)構(gòu)決定是否接受系統(tǒng)。

細(xì)分

  • 用戶驗收測試
  • 運行驗收測試
  • 合同和規(guī)范驗收測試
  • Alpha測試(開發(fā)者提供的場景,用戶運行)
  • Beta測試(用戶提供的場景下測試)

2-2 軟件測試手段

按測試時對象的可見度:黑盒測試、白盒測試
按狀態(tài):靜態(tài)測試、動態(tài)測試
按測試執(zhí)行的方式:手工測試、自動化測試

黑盒測試

過程

輸入 ——> 用戶需求/事件驅(qū)動 ——> 輸出

優(yōu)點

  • 容易實施,不需要關(guān)注內(nèi)部的實現(xiàn)
  • 更貼近用戶的實用角度

缺點

  • 測試覆蓋率較低,一般只能覆蓋到代碼量的不到40%
  • 針對黑盒的自動化測試,復(fù)用率較低,維護(hù)成本較高

黑盒測試主要測試什么?

  • 是否有不正確或遺漏的功能?
  • 在接口上,輸入是否能正確的接受?能否輸出正確的結(jié)果?
  • 是否在數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤?
  • 性能上是否能夠滿足要求?

黑盒測試的主要設(shè)計方法

  • 等價類劃分法
  • 邊界值分析法
  • 錯誤推斷法
  • 因果圖法
  • 正交試驗分析法
  • 狀態(tài)遷移圖法
  • 流程分析法

白盒測試

過程

輸入 ——> 邏輯覆蓋 ——> 輸出

主要的邏輯單位

語句、條件、條件組合、分支、路徑

優(yōu)點

  • 迫使測試人員去仔細(xì)思考軟件的實現(xiàn),理解原理
  • 可以檢測代碼中的每條分支和路徑
  • 揭示隱藏在代碼中的錯誤
  • 對代碼的測試比較徹底

缺點

  • 成本高,昂貴
  • 無法檢測代碼中遺漏的路徑和數(shù)據(jù)敏感性錯誤
  • 不能直接驗證需求的正確性

白盒測試的主要設(shè)計方法

  • 代碼檢測法:多面檢查,代碼審查和走查
  • 靜態(tài)結(jié)構(gòu)分析法:通過測試工具分析代碼結(jié)構(gòu)邏輯
  • 靜態(tài)質(zhì)量度量法:質(zhì)量標(biāo)準(zhǔn)
  • 邏輯覆蓋法:語句、條件、條件組合、分支、路徑覆蓋
  • 基本路徑測試法:非常主要的方法

灰盒測試

介于黑、白盒測試之間的,關(guān)注輸出對于輸入的正確性,同時也關(guān)注內(nèi)部表現(xiàn)。

靜態(tài)測試

定義

靜態(tài)測試是指無需執(zhí)行被測程序,而是通過評審軟件文檔或代碼,度量程序靜態(tài)復(fù)雜度,檢查軟件是否符合變成標(biāo)準(zhǔn),借以發(fā)現(xiàn)編寫的程序的不足之處,減少錯誤出現(xiàn)的概率。

方式

互審 —— 走查 —— 會議(不正式 —— 正式)

動態(tài)測試

動態(tài)測試是指通過運行被測程序,檢查運行結(jié)果與預(yù)期結(jié)果的差異,并分析運行效率、正確性和健壯性等。

手工測試

由專門的測試人員從用戶視角來驗證軟件是否滿足設(shè)計要求的行為,更適用針對深度的測試和強(qiáng)調(diào)主觀判斷的測試。
例如:眾包測試、探索式測試

自動化測試

定義

使用單獨的測試工具軟件控制測試的自動化執(zhí)行以及對預(yù)期和結(jié)果進(jìn)行**自動檢查。
例如:單元測試、接口測試、性能測試等

手工測試 VS 自動化測試

  • 手工測試
    • 優(yōu)點:1)易發(fā)現(xiàn)缺陷;2)容易實施;3)創(chuàng)造性、靈活性
    • 缺點:1)覆蓋量化難;2)重復(fù)測試效率低;3)不一致性、可靠性低;4)人力資源依賴
  • 自動化測試
    • 優(yōu)點:1)高效率、速度快;2)高復(fù)用性;3)覆蓋率容易度量;4)準(zhǔn)確、可靠;5)不知疲勞
    • 缺點:1)機(jī)械、發(fā)現(xiàn)缺陷率低;2)一次性投入較大

2-3 軟件測試模式

按測試模式來分類:敏捷測試、基于腳本的測試、基于風(fēng)險的測試、探索式測試等。

傳統(tǒng)的瀑布模型

流程

項目計劃—>需求分析—>軟件設(shè)計—>程序開發(fā)—>軟件測試—>集成維護(hù)

瀑布模型的優(yōu)缺點

  • 優(yōu)點
    • 強(qiáng)調(diào)需求、設(shè)計的作用;
    • 前一階段完成后,只需關(guān)注后續(xù)階段;
    • 為項目提供了按階段劃分的檢查點,里程碑清晰;
    • 文檔規(guī)范
  • 缺點
    • 難以適應(yīng)需求的頻繁變化;
    • 項目周期后段才能看到成果;
    • 強(qiáng)制的里程碑、完成時間點;
    • 文檔工作量大

V模型

流程

需求分析—>概要設(shè)計—>詳細(xì)設(shè)計—>軟件編碼—>單元測試—>集成測試—>系統(tǒng)測試—>驗收測試

局限性

  • 僅僅將測試放在后半段,忽視了測試對需求的分析和驗證
  • 違背了測試需要盡早進(jìn)行的原則

W模型

W模型

X模型

X模型

H模型

H模型

2-4 軟件測試模式—敏捷測試

敏捷測試

定義

Agile Testing,遵循敏捷宣言的一種測試實踐。

敏捷宣言

我們通過身體力行和幫助他人來揭示更好的軟件開發(fā)方式,借由這種工作,我們形成了如下的價值觀:
個人與交互 重于 過程和工具
可用的軟件 重于 完備的文檔
客戶協(xié)作 重于 合同談判
響應(yīng)變化 重于 遵循計劃
在每對比較中,后者并非全無價值,但我們更看重前者

特點

  • 強(qiáng)調(diào)從客戶角度進(jìn)行測試
  • 重點關(guān)注迭代測試新功能,不再強(qiáng)調(diào)測試階段
  • 盡早測試,不間斷測試,具備條件即測試
  • 強(qiáng)調(diào)持續(xù)反饋
  • 預(yù)防缺陷重于發(fā)現(xiàn)缺陷

敏捷測試 VS 傳統(tǒng)測試

  • 傳統(tǒng)測試
    • 測試是質(zhì)量的最后保護(hù)者
    • 嚴(yán)格的變更管理
    • 預(yù)先的計劃和細(xì)節(jié)的準(zhǔn)備
    • 重量級文檔
    • 各階段測試嚴(yán)格的入口和出口標(biāo)準(zhǔn)
    • 更多在回歸測試時進(jìn)行重量級的自動化測試
    • 嚴(yán)格依賴流程執(zhí)行
    • 測試團(tuán)隊和開發(fā)團(tuán)隊是相互獨立的
  • 敏捷測試
    • 開發(fā)和測試人員是緊密合作,大家都有責(zé)任對軟件負(fù)責(zé)
    • 變更是可接受的,擁抱變更
    • 計劃隨著進(jìn)展時常調(diào)整
    • 只需要絕對必要的文檔
    • 各迭代之間已經(jīng)沒有明顯的入口和出口標(biāo)準(zhǔn)
    • 所有階段都需要自動測試,每個人都需要做,是項目集成的一部分
    • 流程不再需要嚴(yán)格執(zhí)行
    • 團(tuán)隊合作是無縫隙合作

基于腳本的測試—SBT

  • Scirpt-based Testing
  • Scripted Testing(ST) 腳本測試
  • Exploratory Testing (ET) 探索式測試
探索式測試

完全拋開測試腳本的測試,是一種測試風(fēng)格、思維而不是測試技術(shù)。

ST vs ET

  • ST
    • 系統(tǒng)性強(qiáng)
    • 容易管理、控制
    • 設(shè)計在先,執(zhí)行在后
    • 主要是驗證自己的思路
    • 可預(yù)見性
  • ET
    • 自由靈活
    • 和ST是互補(bǔ)的
    • 執(zhí)行和設(shè)計(思考)并行
    • 不斷和系統(tǒng)交互,帶著問題測試
    • 學(xué)習(xí)的過程

探索式測試的優(yōu)點

  • 更能激發(fā)測試人員的創(chuàng)造性和工作樂趣
  • 增加了發(fā)現(xiàn)新的或較深入Bug的可能性
  • 在較短時間內(nèi)找到更多Bug以及對SUT做一個快速的評估
  • 有利于更加有效地實施自動化
  • 更加適用于敏捷項目
  • 減少了在簡單、繁復(fù)上用例的無謂編寫時間

探索式測試的缺點

  • 測試管理上有局限性,較難協(xié)調(diào)和控制
  • 對于Bug的重復(fù)利用和重現(xiàn)上作用有限
  • 對測試人員的測試技能和業(yè)務(wù)知識深度依賴較大
  • 只有在SUT已完全可用的前提下才更有作用
  • ET的生產(chǎn)率很難定義
  • ET本身較難進(jìn)行自動化

局部探索式測試

五大要素:

  • 輸入(接受輸入,產(chǎn)生輸出,存儲數(shù)據(jù),進(jìn)行運算)(測試要點:輸入順序,輸入內(nèi)容,輸出異常)
  • 狀態(tài)(臨時狀態(tài),永久狀態(tài))(測試要點:運行時有效,階段有效,數(shù)據(jù)庫保存,文件保存)
  • 代碼路徑(對代碼的覆蓋)
  • 用戶數(shù)據(jù)(盡量使用真實的數(shù)據(jù))
  • 執(zhí)行環(huán)境

全局探索式測試

漫游測試法

  • 商業(yè)區(qū):軟件從啟動到關(guān)閉之間客戶可能使用到的主功能
  • 旅館區(qū):軟件休息或未運行時的功能,一般在后臺
  • 歷史區(qū):歷史遺留代碼或問題
  • 旅游區(qū):新用戶使用或比較關(guān)注的功能
  • 娛樂區(qū):系統(tǒng)主要功能之外的一些輔助功能
  • 破舊區(qū):已廢棄或隱藏的功能

基于風(fēng)險的測試—RBT

定義

Risk-based Testing,一種基于對軟件失效的風(fēng)險評估并以此指導(dǎo)測試計劃、設(shè)計、執(zhí)行、結(jié)果評價的軟件測試類型。

哪些是風(fēng)險?

  • 質(zhì)量風(fēng)險
  • 管理風(fēng)險
    風(fēng)險級別 = 風(fēng)險可能性 * 風(fēng)險嚴(yán)重度

識別風(fēng)險

  • 可能性:復(fù)雜度、時間壓力、高變更率、技能水平、地理分散度
  • 嚴(yán)重程度:使用頻率、失效可視性、商業(yè)損失、組織負(fù)面影響和損害、社會損失和法律責(zé)任
    風(fēng)險要素分 = Sum(單項權(quán)重 * 得分)

基于模型的測試—MBT

定義

Model-based testing is software testing in which test cases are derived in whole or in part from a model that describes some (usually functional) aspects of the system under test (SUT).

主要的MBT工具

  • Spec Explorer (Microsoft)
  • GraphWalker (OpenSource)
  • Tcases (OpenSource)
  • Modeljunit (OpenSource)

3-1 軟件測試類型

按測試類型來分類:
功能測試,性能測試,部署測試,文檔測試,安全測試,兼容性測試,易用性測試,本地化測試,無障礙測試,可靠性測試

功能測試

定義

根據(jù)產(chǎn)品特性、操作描述和用戶方法,測試一個產(chǎn)品的特性和可操作行為以確定他們滿足設(shè)計需求。

針對的問題

功能錯誤或遺漏、界面問題、性能錯誤(軟件本身的性能)、數(shù)據(jù)及訪問錯誤、初始化及終止錯誤

功能測試工具

  • 商用:QTP、Winrunner、silk Test、Rational robot
  • 開源:selenium(Web)、Watir(Web)、Sikuli(基于屏幕截圖)

性能測試

細(xì)分

  • 負(fù)載測試:在測試過程中,逐步增加負(fù)載,并記錄下被測系統(tǒng)的性能表現(xiàn),最終確認(rèn)出系統(tǒng)在正常指標(biāo)下的最大負(fù)載
  • 壓力測試:測試系統(tǒng)在極限負(fù)載下的壓力情況,確定系統(tǒng)在什么壓力下會導(dǎo)致系統(tǒng)失敗,不能正常運行,測試系統(tǒng)所能承受的極限。
  • 穩(wěn)定性測試:一般是稍大于業(yè)務(wù)量的負(fù)載,進(jìn)行長時間的測試。

性能指標(biāo)

并發(fā)用戶數(shù)VU、每秒事務(wù)數(shù)TPS、系統(tǒng)響應(yīng)時間、設(shè)備性能

性能測試工具

Loadrunner、Silkperformer、JMeter、WebLoad、Apache Bench、LoadUI

靜態(tài)性能評估

  • 定義:開發(fā)Web應(yīng)用時,基于一系列Web應(yīng)用頁面性能優(yōu)化的最佳實踐對Web應(yīng)用的頁面進(jìn)行靜態(tài)分析,并給出評估結(jié)果的性能分析方法。
  • 工具:YSlow、PageSpeed

應(yīng)用性能管理(APM)

Application performance Management,提供對系統(tǒng)的實時監(jiān)控以實現(xiàn)性能管理、故障管理的解決方案。

安全測試

定義

對軟件產(chǎn)品進(jìn)行測試以確保其符合產(chǎn)品安全需求和質(zhì)量標(biāo)準(zhǔn)。

滲透測試

通過模擬對軟件系統(tǒng)的惡意攻擊行為來評估系統(tǒng)安全性的一種測試。

滲透測試 VS 安全測試

  • 滲透測試:攻、點
  • 安全測試:防、面

OWASP (Open Web Application Security Project)

  • OWASP Top10
  • Test Guide

兼容性測試

多維度

  • 軟件本身的兼容性(版本之間)
  • 不同平臺下的兼容性(如底層系統(tǒng))
  • 軟件對運行設(shè)備的兼容性(如硬件設(shè)備)
  • 軟件互操作性(同一個廠商或者其他主流應(yīng)用)

瀏覽器內(nèi)核

  • Trident4-6:IE6-8、9、10
  • Gecko:Firefox
  • WebKit:Safari、Chrome
  • Presto:Opera

瀏覽器兼容性測試工具

  • BrowserShots(截圖對比)
  • Brower Sandbox
  • Chrome插件:w3help

文檔測試

定義

針對軟件產(chǎn)品的交付品,配套的文檔類部件的測試,如用戶手冊、使用說明、用戶幫助文檔等。

文檔測試關(guān)注要點

完整性、正確性、一致性、易理解性、易瀏覽性

可靠性測試

軟件可靠性、硬件可靠性(主要)

易用性測試

易用性測試是指測試用戶使用軟件時是否感覺方便,是否能保證用戶使用體驗的測試類型。

本地化測試

定義

針對軟件的本地化版本實施的針對性測試

主要測試內(nèi)容

  • 語言、書寫習(xí)慣
  • 時區(qū)、日期格式、貨幣
  • 當(dāng)?shù)亓?xí)俗、法律法規(guī)
  • 政治敏感內(nèi)容

部署測試

定義

也稱安裝測試,主要驗證系統(tǒng)部署過程,并確保軟件經(jīng)過安裝測試后可以正常使用。

主要測試內(nèi)容

  • 在不同環(huán)境下的部署驗證
  • 參照部署文檔執(zhí)行,過程的合理、正確性
  • 基礎(chǔ)數(shù)據(jù)

無障礙測試

Accessibility Test,也稱可訪問性測試。是指軟件需要提供便于特殊人群使用的功能,包括視障、聽障、老年人、身體殘疾用戶等,無障礙測試則是針對這部分功能的測試。

4-1 其他測試分類

其他的一些測試類型概念
回歸測試、冒煙測試、Monkey測試、AB測試

回歸測試

定義

軟件功能修改后,對軟件進(jìn)行重新測試以確認(rèn)修改沒有引入新的錯誤或?qū)е缕渌糠之a(chǎn)生錯誤。

回歸測試的中心在關(guān)鍵模塊重點功能組件。

軟件研發(fā)周期中會進(jìn)行多次回歸測試,且盡量實現(xiàn)自動化。

冒煙測試

定義

來自于硬件板卡驗證術(shù)語。軟件上則用于確認(rèn)代碼中的更改會按預(yù)期運行,且不會破壞整個版本的穩(wěn)定性。

“每日構(gòu)建”中用冒煙測試來確認(rèn)合入的代碼沒有影響主要功能的正常。

Monkey測試

定義

也稱搞怪測試。就是用一些隨機(jī)、稀奇古怪的方式來操作軟件,以測試系統(tǒng)的健壯性和穩(wěn)定性。

A/B測試

定義

多用于互聯(lián)網(wǎng)行業(yè),通過為頁面提供2個版本給用戶使用并記錄相關(guān)的用戶行為數(shù)據(jù),來確定更優(yōu)化設(shè)計的一種測試方案。

A/B測試實施要點

  • 多個方案并行
  • 每次測試僅改動一個變量
  • 按照某種規(guī)則進(jìn)行優(yōu)勝劣汰

A/B測試工具

  • Google Analytics Content Experiments
  • Visual Website Optimizer
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,362評論 2 126
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,405評論 7 278
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,873評論 5 101
  • 1.切割文件 awk -F '\t' '{print $1}' xx.log |awk -F ':' '{prin...
    一只蝸牛的吐槽閱讀 103評論 0 0

友情鏈接更多精彩內(nèi)容