目錄
1、概念
2、手工測試
3、探索式測試
4、局部探索式測試法
5、全局探索式測試法
6、混合探索式測試技術(shù)
7、實踐中的探索式測試
8、測試需要培養(yǎng)的方向
1、概念
2、軟件失效是指軟件運行時產(chǎn)生的一種不希望或不可接受的外部行為
3、軟件失效的機(jī)理可描述為:軟件錯誤 軟件缺陷 軟件故障 軟件失效
4、缺陷引入:程序員引入的缺陷,運行環(huán)境導(dǎo)致的缺陷
5、預(yù)防和檢測
(1)缺陷預(yù)防-開發(fā)角度
(2)缺陷檢測-動態(tài)測試
a.自動化測試(缺點:維護(hù)自動化測試代碼需花費大量時間;優(yōu)點:重復(fù)使用率高,提高測試速度;致命弱點:“預(yù)言家難題”,很難預(yù)估測試完成情況)
b.手工測試
6、測試目標(biāo):軟件發(fā)布前,所有重要的任務(wù)都完成了,而剩下沒做的事情都是比較次要的(不影響用戶的使用和愉悅感)
7、軟件執(zhí)行的4個基本任務(wù):接收輸入、產(chǎn)生輸出、存儲數(shù)據(jù)、進(jìn)行運算
2、手工測試
1、優(yōu)點:更接近真實場景,容易發(fā)現(xiàn)與應(yīng)用程序業(yè)務(wù)邏輯(實現(xiàn)用戶需求的代碼)相關(guān)的缺陷
2、缺點:效率低,沒有規(guī)律,不可反復(fù)使用
3、測試腳本:記錄了實際運行的哪些測試;適用于指定場景,且輸出結(jié)果可判斷
3、探索式測試
1、完全拋開測試腳本
2、測試結(jié)果、測試實例、測試文檔都會在運行測試時創(chuàng)建
3、記錄結(jié)果的最佳工具:截屏軟件、記錄擊鍵的軟件
4、使用含有調(diào)試信息的軟件版本(debug build)、調(diào)試器(debugger)、代理程序(proxy)
5、最適用于:“敏捷開發(fā)過程”的Web應(yīng)用程序
6、缺點:可能在測試中找不到重點,盲目測試,浪費大量時間,效率低下
7、指導(dǎo)方法:局部探索式測試法(輔助測試人員在測試過程中即時做出決定)、全局探索式測試法(用于幫助測試人員設(shè)計整體測試計劃和測試策略)
8、全神貫注,集中精力
9、目標(biāo):理解應(yīng)用程序如何工作,其接口看起來如何,實現(xiàn)了哪些功能;強(qiáng)迫軟件展示其全部能力;找到缺陷
4、局部探索式測試法
1、面臨選擇抉擇時使用探索式測試的策略(局部小范圍),例如:一個網(wǎng)頁,一個對話框,某個類的一個方法
2、好處:測試人員不需要知道很多信息就可以完成細(xì)節(jié)任務(wù)
3、重點:把測試經(jīng)驗、專業(yè)知識、軟件在操作環(huán)境下如何構(gòu)建和運用的知識結(jié)合在一起
4、決策
(1)輸入(input)
a.一般定義:輸入指的是由環(huán)境產(chǎn)生的一種刺激,該刺激導(dǎo)致被測試的應(yīng)用程序有所響應(yīng)
b.分為兩類:
b1.原子輸入(atomic input)- 建議使用“等價類劃分”,簡單到不能再簡單的事件,例如:單擊按鈕,字符串或整數(shù)4
b2.抽象輸入(abstract input)- 非法輸出(illegal output)
c.影響因素:各種輸入之間會相互影響,從而造成軟件失效;輸入這些值時的先后順序也會導(dǎo)致問題出現(xiàn)
d.正向測試(postive testing)
e.逆向測試(negative testing)
f.依據(jù)開發(fā)人員的思路來構(gòu)建一個非法輸入值,牢抓錯誤信息(開發(fā)在哪些地方編寫了錯誤處理(error-handling)代碼,具體錯誤代碼是如何實現(xiàn)的)
g.開發(fā)人員有三種基本方式,定義錯誤處理程序(error handle)
g1.輸入篩選器(input filter)- 防止非法的輸入值被傳遞給應(yīng)用軟件的功能代碼;是否正確實現(xiàn)了該功能(非法輸入和合法輸入的區(qū)分是否錯誤),是否可以繞過篩選器
g2.輸入檢查(input check)- 是應(yīng)用程序代碼的一部分,通常使用類似if、then、else結(jié)構(gòu)的語句實現(xiàn)(或case、select結(jié)構(gòu),或lookup table)
g3.使用異常(exception)- 異常處理代碼把整個routine當(dāng)成一個整體看待,檢測其上發(fā)送的任何一個錯誤
h.常規(guī)輸入/非常規(guī)輸入
i.默認(rèn)輸入/用戶手動輸入(null、刪除默認(rèn)值、默認(rèn)值附近的其他值)
j.根據(jù)輸出指導(dǎo)輸入選擇
j1.先明確功能后確實哪些輸入會引發(fā)相應(yīng)輸出:明確期望輸出結(jié)果,考察所有用戶場景,觀察如何生成期望結(jié)果(主動);先觀察輸出結(jié)果,再選擇新的輸入,并保證新輸出與原先不同
j2.抽象角度:非法輸出(illegal output);合法輸出(lega output)
(2)狀態(tài)(status)
a.定義:軟件的一個狀態(tài)就是狀態(tài)空間的一個點,它是由所有內(nèi)部數(shù)據(jù)結(jié)果的取值來確定
b.軟件狀態(tài)可以看成是用于描述軟件記住過去發(fā)生的所有輸入和輸出的一種方式
c.數(shù)據(jù)轄域:檢驗軟件是否正確實現(xiàn)了數(shù)據(jù)轄域是一個很重要的測試
d.輸入和狀態(tài)相結(jié)合:使用狀態(tài)信息來幫助尋找相關(guān)的輸入;使用狀態(tài)信息來辨別重要的輸入序列,當(dāng)一個輸入導(dǎo)致狀態(tài)信息被更新時,緊接著多次使用同樣的輸入會導(dǎo)致一連串的狀態(tài)變化,狀態(tài)變化被累加,必須考慮是否會溢出(例購物車)
(3)代碼路徑(code path)
a.一條代碼路徑就是一連串的代碼語句,其起始于開始語句,終止于結(jié)束語句
b.必須明確知道程序里可能有哪些分支,并理解哪些輸入會導(dǎo)致軟件走這條分支而不是另一條
(4)用戶數(shù)據(jù)(user date)- 被動的方式
a.創(chuàng)建一個含有特定數(shù)據(jù)的數(shù)據(jù)存儲,其含有的數(shù)據(jù)應(yīng)該和軟件真實用戶使用的數(shù)據(jù)盡量相似
(5)執(zhí)行環(huán)境(execution environment)- 主動的方式
a.使用的操作系統(tǒng)和其當(dāng)前配置,任何可以影響被測軟件行為的因素都是運行環(huán)境的一部分
b.提供輸入,接收輸出
5、全局探索式測試法
1、確定了如何對軟件進(jìn)行探索式測試的整體方向
例如:
單個單獨的測試用例應(yīng)該覆蓋軟件的哪些功能
哪些軟件的功能必須放在一起測
應(yīng)該先測試哪個功能
如何決定哪個功能先測,哪個后測
一個項目中多人測試,應(yīng)該使用怎樣的測試策略,確保相輔相成
2、漫游測試
(1)商業(yè)區(qū)測試類型
a.用戶所要使用的熱門的軟件特性和功能
b.方法
b1.指南測試法 – 根據(jù)用戶手冊
b2.賣點測試法 – 出席銷售人員給客戶的演示會,與銷售人員保持良好合作關(guān)系
b3.地標(biāo)測試法 – 確定關(guān)鍵的軟件特性,再確定其先后順序
b4.極限測試法
b5.快遞測試法 – 專注于數(shù)據(jù),確認(rèn)那些被存儲起來的輸入數(shù)據(jù)并“跟隨”它們走遍軟件
b6.深夜測試法 – 檢測休息時間軟件是否正常運行(盲區(qū))
b7.遍歷測試法 – 選定一個目標(biāo)(例如所有菜單項),使用可以發(fā)現(xiàn)的最短路徑來訪問
(2)歷史區(qū)測試類型
a.針對老功能和缺陷修復(fù)代碼
b.方法
b1.惡鄰測試法 – 對bug聚集地的鄰近功能使用遍歷測試法進(jìn)行測試,驗證已修代碼未引入新bug
b2.博物館測試法 – 找出遺留代碼和老的可執(zhí)行文件,確保其在測試中正常運行
b3.上一版測試法
(3)娛樂區(qū)測試類型
a.測試輔助功能,確保輔助和主線特性結(jié)合
b.方法
b1.配角測試法 – 緊鄰主要功能的特性
b2.深巷測試法 – 最不可能被用到或者最不吸引用戶的特性
b3.通宵測試法 – 連續(xù)不斷地使用某些特性或?qū)⑽募恢北4嬖诖蜷_的狀態(tài)
(4)旅游區(qū)測試類型
a.快速訪問軟件的各種功能
b.方法
b1.收藏家測試法 – 收集軟件的輸出,越多越好,到達(dá)所有可到達(dá)的地方并把觀察到的輸出結(jié)果記錄下來,以小組為單位
b2.長路徑測試法 – 到達(dá)目的地之前盡量多地在應(yīng)用程序中穿行
b3.超模測試法 – 測試界面、外觀、性能、是否與期望符合、是否標(biāo)準(zhǔn)
b4.測一送一測試法 – 測試同時運行同一應(yīng)用程序多個拷貝的情況
b5.蘇格蘭酒吧測試法 – 適用于大規(guī)模的復(fù)雜應(yīng)用程序,找到用戶組并參與討論,花時間了解待測應(yīng)用程序
(5)旅館區(qū)測試類型
a.經(jīng)常被忽視或者在測試計劃中較少描述的次要及輔助功能
b.方法
b1.取消測試法 – 啟動操作然后停止它,確信被取消的操作可以再次執(zhí)行并成功結(jié)束
b2.懶漢測試法 – 盡量少的操作
(6)破舊區(qū)測試類型
a.試圖利用每個可能的機(jī)會暗中破壞程序(故障注入,抓捕漏洞)
a1.強(qiáng)迫軟件做一些操作
a2.掌握軟件成功完成操作必須使用的資源
a3.在不同程度上移除那些資源或限制使用那些資源
b.方法
b1.反叛測試法 – 要求輸入最不可能的數(shù)據(jù),或故意惡意輸入
總結(jié):
逆向測試法 – 最不可能的數(shù)據(jù),測試容錯能力
歹徒測試法 – 如何處理非法輸入,突破限制
錯序測試法 – 錯誤的順序
b2.強(qiáng)迫癥測試法 – 重復(fù)輸入、重復(fù)操作
6、混合探索式測試技術(shù)
1、使用正式腳本可以為探索式測試設(shè)立一個明確的框架,探索式測試法可以提高腳本測試的有效性,為腳本中的測試用例提供更多種多樣的變化
2、基于場景的探索式測試
3、有價值的場景包含
(1)講述用戶故事 – 記錄用戶使用軟件的動機(jī)、目的以及具體動作
(2)描述需求
(3)演示產(chǎn)品功能 – 經(jīng)常出現(xiàn)在在線幫助和用戶說明書中
(4)演示集成場景 – 定義了功能集成后的場景或端對端的場景
(5)描述設(shè)置和安裝
(6)描述警告和出錯情形
4、場景操作 – 對場景的步驟加以操作,給場景注入變化
5、衍生場景 – 對現(xiàn)有場景進(jìn)行操作時,會得到一個新的場景
6、通過(靜態(tài))場景操作注入變化
(1)插入步驟(延長場景)
a.增加更多數(shù)據(jù) – 例,場景要求在購物車中放入一件商品,測試人員可以先加入那件,再加入其他
b.使用附加輸入 – 增加沒有被提到的額外輸入值,有關(guān)聯(lián)但屬于附加。例,要求能添加評論,測試人員可以額外對其他用戶的評論進(jìn)行登記評分
c.訪問新的界面 – 增加相關(guān)的新操作
(2)刪除步驟(化繁為簡,盡量減少)
(3)替換步驟(先刪后插)
(4)重復(fù)步驟(重復(fù)單獨的操作,例查詢)
(5)替換數(shù)據(jù) – 理解應(yīng)用程序連接和使用的數(shù)據(jù)源,確保其交互穩(wěn)定
(6)替換環(huán)境 – 盡量接近用戶場景
a.替換硬件
b.替換軟件
c.替換版本
d.修改本地設(shè)置
7、通過漫游操作注入變化 – 漫游通常比場景操作產(chǎn)生更長的操作步驟(順路)
(1)賣點測試法 – 可以假如新功能
(2)地標(biāo)測試法
(3)極限測試法
(4)深巷測試法 – 可注入新功能
(5)強(qiáng)迫癥測試法
(6)通宵測試法
(7)破壞測試法
(8)收藏夾測試法
(9)超模測試法
(10)配角測試法 – 最近鄰的選擇
(11)取消測試法
(12)混票測試法 – 從一個場景跳到另一個,從而把兩個或更多場景結(jié)合為一個具有混合目的的場景
7、實踐中的探索式測試
1、出租車測試法
要到達(dá)所需的屏幕、對話框或一些其他功能組件,用戶通常有大量的路線可以選擇
測試人員需要熟悉到達(dá)指定位置的每條可能的路徑
例:使用多種方式打開某一功能
2、多元文化測試法 – 多語言測試
8、測試需培養(yǎng)的方向
1、明確目的
(1)決定測試什么 – 從不同的深度和順序檢測,列出特性的功用
(2)決定何時測試 – 明確每個缺陷應(yīng)該在什么時候被發(fā)現(xiàn)
(3)決定如何測試 – 將缺陷類別和漫游方法/測試技術(shù)相聯(lián)系,明確某些缺陷最適合的方法
2、降低重復(fù)性
(1)知道已經(jīng)運行過哪些測試 – 變化測試目標(biāo)、測試要點
(2)知道什么時候注入變異 – 通過改變技術(shù)調(diào)整測試用例
3、降低暫時性
結(jié)合實際 – 真實環(huán)境、真實數(shù)據(jù),用戶介入
4、將單調(diào)變有趣
花時間進(jìn)行測試分類和測試策略,減少測試運行時間(枯燥部分)
5、解決健忘
(1)測試用例不是解決暫時記憶的最好方法
(2)將漫游方法映射到軟件特性和缺陷上,留下相關(guān)產(chǎn)品記錄(結(jié)合實際練習(xí))