軟件測(cè)試(普遍認(rèn)同):
- 軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程痕貌;
- 測(cè)試是為了證明程序有錯(cuò)谍肤,而不是證明程序無錯(cuò)誤胧砰;
- 一個(gè)好的測(cè)試用例是在于它能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤唉匾;
- 一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試凄硼。
zero-bug vs. good-enough
防止過少和過量的測(cè)試铅协。
木桶原則
不能有短板。測(cè)試僅作為重要的一環(huán)帆喇,不能僅依賴測(cè)試來保證質(zhì)量警医;
80-20原則
能被發(fā)現(xiàn)的Bug僅占全部Bug的80%,還有20%只有在大范圍坯钦、長(zhǎng)時(shí)間使用下才能暴露预皇。
測(cè)試用例(Test Case)
是為某個(gè)特殊目標(biāo)而編制的一組測(cè)試輸入、執(zhí)行條件以及預(yù)期結(jié)果婉刀,以便測(cè)試某個(gè)程序路徑或核實(shí)是否滿足某個(gè)特定需求吟温。
測(cè)試和調(diào)試
- 調(diào)試:目的比較明確,是為了解決某一個(gè)特定問題突颊,調(diào)試可以看作測(cè)試的一部分鲁豪。
- 測(cè)試:比較完整的檢查軟件是否滿足用戶需求的一種有計(jì)劃的行為。
軟件和硬件
- 表現(xiàn)形式:硬件有形? 軟件無形律秃、軟件運(yùn)行時(shí)才能看出優(yōu)劣爬橡、管理困難;
- 生產(chǎn)方式:軟件是邏輯產(chǎn)品棒动、通信的誤差糙申;
- 質(zhì)量要求:精度?有的軟件是誤差零容忍;
- 維護(hù):硬件更換?軟件升級(jí)船惨。
軟件缺陷/Defect/Bug
存在于軟件(文檔柜裸、數(shù)據(jù)缕陕、程序)中那些不希望、或不可接受的偏差疙挺,而導(dǎo)致軟件產(chǎn)生的質(zhì)量問題扛邑。
常見缺陷
- 未實(shí)現(xiàn)要求功能;
- 出現(xiàn)說明書中指明的不能出現(xiàn)的錯(cuò)誤铐然;
- 實(shí)現(xiàn)未提到功能蔬崩;
- 未實(shí)現(xiàn)說明書未提及但應(yīng)該實(shí)現(xiàn)的目標(biāo);
- 軟件難以理解锦爵、不易使用舱殿、運(yùn)行緩慢。
缺陷分類
按表現(xiàn)形式
- Function
- Interface
- Algorithm
- Documentation
...
按嚴(yán)重程度
- critical(關(guān)鍵的)
- cosmetic
- minor
- major
按優(yōu)先級(jí)
- high
- middle
- low
按在生命周期的出現(xiàn)階段
- Requirement
- Design
- Architecture
- Test
- Code
按根源
- 測(cè)試策略
- 工具和方法
- 團(tuán)隊(duì)和人
- 缺乏通信
...
按缺陷的生命周期
- new/unconfirmed
- confirmed
- fixed
- closed
- reopen
報(bào)告缺陷的原則
- 早原則:初期的錯(cuò)誤vs.后期錯(cuò)誤
- 有效原則:簡(jiǎn)短险掀、單一沪袭、術(shù)語、明確
- 中立原則:缺陷不可避免樟氢、允許缺陷產(chǎn)生
- 重現(xiàn)原則:確保錯(cuò)誤能重現(xiàn)冈绊。
缺陷管理工具
一個(gè)網(wǎng)絡(luò)應(yīng)用程序,提供多用戶操作埠啃、管理缺陷死宣,分析缺陷報(bào)告等功能。
舉例子:
- Bugzilla:一款開源碴开、免費(fèi)毅该、全球許多組織喜愛的缺陷管理工具。Mozilla項(xiàng)目組開發(fā)和使用潦牛。
- Mantis
- Trac
使用的兩種模式
- 服務(wù)端模式:組件服務(wù)器眶掌,為其他用戶提供缺陷管理平臺(tái)。一般需安裝:數(shù)據(jù)庫巴碗、網(wǎng)頁服務(wù)器朴爬、工具軟件。
- 客戶端模式:訪問已有服務(wù)器橡淆。所需軟件:瀏覽器或者客戶端軟件召噩。
軟件質(zhì)量
ISO關(guān)于質(zhì)量的定義:一個(gè)實(shí)體的所有特性,基于這些特性可以滿足明顯的或隱含的需求逸爵。而質(zhì)量就是實(shí)體基于這些特性滿足需求的程度具滴。
質(zhì)量層次
- 符合需求規(guī)格:符合開發(fā)者明確定義的目標(biāo)。
- 符合用戶顯式需求:符合用戶所明確說明的目標(biāo)师倔。
- 符合用戶實(shí)際需求:包括用戶明確說明的和隱含的需求构韵。
影響軟件質(zhì)量的因素
- 流程
- 技術(shù)
- 組織
動(dòng)態(tài)測(cè)試工作分類
組織內(nèi)部進(jìn)行:
- 單元測(cè)試
- 集成測(cè)試
- 系統(tǒng)測(cè)試
用戶參與進(jìn)行:
- 驗(yàn)收測(cè)試
- α(ALPHA)測(cè)試
- β(BETA)測(cè)試
單元測(cè)試
針對(duì):軟件基本組成單元(設(shè)計(jì)的最小單位)
目的:與《詳細(xì)設(shè)計(jì)說明書》的符合程度
測(cè)試方法:白盒測(cè)試
評(píng)估基準(zhǔn):邏輯覆蓋率
集成測(cè)試
基礎(chǔ):在單元測(cè)試基礎(chǔ)上,將所有模塊按照概要設(shè)計(jì)要求組裝成為子系統(tǒng)或系統(tǒng)。
針對(duì):組裝后功能以及模塊間接口
目的:與《概要設(shè)計(jì)說明書》的符合程度
測(cè)試方法:灰盒測(cè)試
評(píng)估基準(zhǔn):接口覆蓋率
系統(tǒng)測(cè)試
針對(duì):已集成好的軟件系統(tǒng)贞绳,作為整個(gè)基于計(jì)算機(jī)系統(tǒng)的一個(gè)元素,與計(jì)算機(jī)硬件致稀、外設(shè)冈闭、某些支持軟件、數(shù)據(jù)和人員等其他系統(tǒng)元素結(jié)合在一起
目的:與《需求規(guī)格說明書》的符合程度
測(cè)試方法:黑盒測(cè)試
評(píng)估基準(zhǔn):測(cè)試用例對(duì)需求規(guī)格的覆蓋率
穿插:回歸測(cè)試(Regression Testing)
目的:驗(yàn)證缺陷得到了正確的修復(fù)抖单,同時(shí)對(duì)系統(tǒng)的變更沒有影響以前的功能萎攒。
發(fā)生階段:任何階段,包括單元測(cè)試矛绘、集成測(cè)試和系統(tǒng)測(cè)試
【拓展】捕捉回放工具
對(duì)系統(tǒng)測(cè)試功能比較簡(jiǎn)單耍休、測(cè)試界面相對(duì)穩(wěn)定并且測(cè)試用例良好組織的測(cè)試來說,采用捕捉回放工具是比較合適的:
- QTP
- Robot
- SilkTest
回歸測(cè)試分類
完全重復(fù)測(cè)試
重新執(zhí)行所有在前期測(cè)試階段建立的測(cè)試用例货矮。
選擇性重復(fù)測(cè)試
選擇地重新執(zhí)行部分在前期測(cè)試階段建立的測(cè)試用例
它又可以分為:
- 覆蓋修改法:針對(duì)被修改的部分羊精,驗(yàn)證沒有錯(cuò)誤發(fā)生。
- 周邊影響法:要包含覆蓋修改法確定的用例囚玫,還需要分析修改的擴(kuò)散影響喧锦。
- 指標(biāo)達(dá)成方法:類似于單元測(cè)試的方法。在重新執(zhí)行測(cè)試前抓督,先確定一個(gè)要達(dá)成的指標(biāo)燃少,基于這種要求選擇一個(gè)最小的測(cè)試用例集合。
驗(yàn)收測(cè)試
基礎(chǔ):通過內(nèi)部系統(tǒng)測(cè)試及軟件配置審查之后
組成:項(xiàng)目組成員铃在、用戶代表等組成
基準(zhǔn):驗(yàn)收測(cè)試根據(jù)合同阵具、《需求規(guī)格說明書》/《驗(yàn)收測(cè)試計(jì)劃》
α測(cè)試
組成:用戶、開發(fā)者
過程: 軟件在一個(gè)自然設(shè)置狀態(tài)下使用定铜。開發(fā)者坐在用戶旁阳液,隨時(shí)記下錯(cuò)誤情況和使用中的問題
目的:評(píng)價(jià)軟件產(chǎn)品的FLURPS(即功能、局域化宿稀、可用性趁舀、可靠性、性能和技術(shù)支持
β測(cè)試
組成:用戶
過程:由軟件的多個(gè)用戶在一個(gè)或多個(gè)用戶的實(shí)際使用環(huán)境下進(jìn)行的測(cè)試
過程:開發(fā)者通常不在測(cè)試現(xiàn)場(chǎng)祝沸,情況不可控矮烹。
測(cè)試過程
階段劃分
- 計(jì)劃 – 測(cè)試計(jì)劃
- 設(shè)計(jì) – 測(cè)試方案
- 實(shí)現(xiàn) – 測(cè)試用例、測(cè)試規(guī)程
- 執(zhí)行 – 測(cè)試報(bào)告
常見過程模型
- 瀑布模型
- H模型
- V&V模型
驗(yàn)證(Verification)
- 保證軟件正確地實(shí)現(xiàn)特定功能的一系列活動(dòng)
- 檢測(cè)每一階段形成的工作產(chǎn)品是否與前一階段定義的規(guī)格相一致
確認(rèn)(Validation)
- 保證所生產(chǎn)的軟件可追溯到用戶需求的一系列活動(dòng)
- 檢測(cè)每一階段的工作產(chǎn)品是否與最初定義的軟件需求罩锐、規(guī)格相一致
軟件靜態(tài)測(cè)試
在不運(yùn)行程序的情況下奉狈,對(duì)程序進(jìn)行檢查和審核
主要包括:
- 各階段評(píng)審
- 代碼檢查
- 程序結(jié)構(gòu)分析
- 代碼質(zhì)量度量
軟件復(fù)雜性
Halstead復(fù)雜度
根據(jù)可執(zhí)行代碼的操作符和操作數(shù)的數(shù)量來計(jì)算程序的復(fù)雜性。
程序的實(shí)際長(zhǎng)度與其預(yù)測(cè)長(zhǎng)度非常接近:
- 實(shí)際長(zhǎng)度= N1 + N2涩惑;
- 預(yù)測(cè)長(zhǎng)度= n1?log(2?n1)+n2?log(2?n2)
其中各個(gè)變量的意思:
- n1 =不同運(yùn)算符的個(gè)數(shù)仁期;
- n2 =不同操作數(shù)的個(gè)數(shù);
- N1 =實(shí)際運(yùn)算符的個(gè)數(shù);
- N2 =實(shí)際操作數(shù)的個(gè)數(shù)跛蛋。
靜態(tài)測(cè)試工具
FindBugs:一個(gè)免費(fèi)的Java靜態(tài)分析工具熬的,可以直接加載到Eclipse中運(yùn)行。
配置Eclipse中的FindBugs赊级;
使用FindBugs對(duì)Sudoku進(jìn)行靜態(tài)測(cè)試押框;
查看FindBugs查出的錯(cuò)誤,并進(jìn)行相應(yīng)修改理逊。
白盒測(cè)試
插樁法
在被測(cè)程序中插入操作(探測(cè)器)橡伞,實(shí)現(xiàn)探查和監(jiān)控的功能。
通過運(yùn)行被測(cè)試程序晋被,檢查運(yùn)行結(jié)果兑徘,分析其性能。
組成部分羡洛;
構(gòu)造測(cè)試用例挂脑;
運(yùn)行程序;
分析結(jié)果翘县。
覆蓋
- 判斷覆蓋
- 條件覆蓋
- 條件組合覆蓋
- 路徑覆蓋
- 語句覆蓋
判斷覆蓋關(guān)心判定表達(dá)式的結(jié)果最域,而條件覆蓋關(guān)心每個(gè)表達(dá)式的取值,不關(guān)心整個(gè)判定表達(dá)式的最終值锈麸。
路徑測(cè)試
基于路徑覆蓋的思想镀脂,考慮各分支的覆蓋情況,壓縮串行部分忘伞。
McCabe圈復(fù)雜度V (G)
V (G) = m ? n + 2薄翅,其中
m:弧數(shù)
n:節(jié)點(diǎn)數(shù)
覆蓋測(cè)試工具EclEmma
- 綠色表示該行代碼被完整的執(zhí)行;
- 紅色表示該行代碼根本沒有被執(zhí)行氓奈;
- 黃色表示該行代碼部分被執(zhí)行翘魄。
黑盒測(cè)試
邊界值
導(dǎo)致程序失效極少是有兩個(gè)或多個(gè)缺陷同時(shí)作用引起的,而大部分是由單個(gè)變量在邊界值附近取值引起的舀奶。
基本邊界值分析
當(dāng)考慮一個(gè)變量的邊界值附近取值時(shí)暑竟,其他變量取正常值。
因此邊界值分析中:
對(duì)于 n 變量的被測(cè)程序育勺,需要測(cè)試用例為多少個(gè)但荤?
4n + 1個(gè)健壯性邊界值分析
簡(jiǎn)單擴(kuò)展,增加 max+ 和 min- 兩個(gè)非正常值
含非正常值的測(cè)試用例關(guān)心的不是輸入本身涧至,而是程序的輸出腹躁。
等價(jià)劃分
每一類中的代表數(shù)據(jù)與其他數(shù)據(jù)對(duì)揭示程序的缺陷有相等的作用,一損俱損南蓬,一榮俱榮纺非;
- 強(qiáng)一般等價(jià)類測(cè)試:基于“多缺陷”假設(shè)哑了,變量的有效等價(jià)類的任意組合。
- 弱健壯等價(jià)類測(cè)試:在弱一般等價(jià)類基礎(chǔ)上增加無效等價(jià)類的情形烧颖。
- 強(qiáng)健壯等價(jià)類測(cè)試:在強(qiáng)一般等價(jià)類基礎(chǔ)上增加無效等價(jià)類的情形弱左。
因果圖
直觀的表達(dá)輸入條件和輸出動(dòng)作之間的關(guān)系,幫助測(cè)試人員把注意力集中到與程序功能有關(guān)的輸入組合上炕淮。
決策表
比因果圖法更加嚴(yán)謹(jǐn)科贬,需考慮各種條件的組合情況。
一般因果圖和決策表的設(shè)計(jì)過程比較麻煩鳖悠,僅在復(fù)雜的核心算法中才考慮采用。
正交試驗(yàn)法
研究和處理多因素實(shí)驗(yàn)的一種科學(xué)方法
幫助選擇最佳的或滿意的實(shí)驗(yàn)條件
構(gòu)造正交表优妙,相當(dāng)于前面的方法設(shè)計(jì)的用例乘综,但實(shí)驗(yàn)點(diǎn)更加均勻,又能減少實(shí)驗(yàn)次數(shù)套硼。
正交表:
每一列各種數(shù)字出現(xiàn)的次數(shù)一樣多卡辰;
任何兩列所構(gòu)成的有序數(shù)對(duì)出現(xiàn)的次數(shù)一樣多。
正交表記為L(zhǎng)4(2^3 )
其中
3 表示因子的數(shù)量邪意;
2 表示每個(gè)因子可以取得值(稱為水平九妈,等價(jià)類);
4 為【查表的】正交表的行數(shù)(即測(cè)試用例個(gè)數(shù))雾鬼。
最少實(shí)驗(yàn)次數(shù) = 求和(水平數(shù)-1)+1
Use case 場(chǎng)景法
基于以事件觸發(fā)來控制流程的一種方法萌朱,測(cè)試用例就是描述事件觸發(fā)時(shí)的事件流。
- 基本流: 按一定事件正確實(shí)現(xiàn)軟件功能的基本流程策菜;
- 備選流: 其他出現(xiàn)故障或缺陷晶疼、例外的流程。
狀態(tài)遷移圖法
許多需求用狀態(tài)機(jī)的方式來描述又憨,狀態(tài)機(jī)的測(cè)試主要關(guān)注在測(cè)試狀態(tài)轉(zhuǎn)移的正確性上面翠霍。
- 畫出有限狀態(tài)自動(dòng)機(jī)
- 從自動(dòng)機(jī)推導(dǎo)出測(cè)試路徑
- 根據(jù)測(cè)試路徑編寫合法測(cè)試用例
- 編寫非法測(cè)試用例
JUnit
引入JUnit架包;
自動(dòng)生成測(cè)試框架蠢莺;
組織 AAA 設(shè)計(jì)測(cè)試用例寒匙;
用@Before標(biāo)記初始化函數(shù);
用@After標(biāo)記結(jié)束清理函數(shù)躏将。