版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章軟件的質(zhì)量與測(cè)試
軟件工程研究室SoftwareEngineering1
主要內(nèi)容
軟件的質(zhì)量
軟件的測(cè)試目的:測(cè)試是軟件質(zhì)量保證中至關(guān)重要的一個(gè)環(huán)節(jié)28.1軟件的質(zhì)量
8.1.1軟件的質(zhì)量觀Juran
的質(zhì)量觀:
產(chǎn)品在使用時(shí),能適合用戶需要的目標(biāo)程度。ISO的質(zhì)量觀:“一個(gè)產(chǎn)品或服務(wù)是否能夠滿足其指定的或蘊(yùn)含的需求有關(guān)的性質(zhì)與特征總和”.
3
產(chǎn)品質(zhì)量的特性質(zhì)量由多種因素組成,但互不獨(dú)立,
可能是沖突的,也不一定同等重要;
在一定前提下來衡量質(zhì)量,不能脫離代價(jià)來衡量產(chǎn)品的質(zhì)量.4
8.1.2軟件質(zhì)量因素
McCall軟件質(zhì)量模型(1977):
產(chǎn)品修改產(chǎn)品操作產(chǎn)品改型易使用性高效性正確性可靠性完整性易維護(hù)性靈活性易測(cè)試性易移植性易復(fù)用性互用性
圖8-1McCall
軟件質(zhì)量模型5每個(gè)要素包含系列衡量標(biāo)準(zhǔn)正確性易追溯性一致性完備性從需求中找到實(shí)現(xiàn)能力實(shí)現(xiàn)了所有的功能一致的術(shù)語和技術(shù)高效性運(yùn)行效率存儲(chǔ)效率使用最少的處理時(shí)間使用最小的內(nèi)存空間6易使用性輸入、輸出量輸入、輸出速度易交流培訓(xùn)易操作可靠性簡潔性準(zhǔn)確性一致性容錯(cuò)性:異常,仍能操作7易維護(hù)性一致性模塊性簡潔性:易理解簡明性:代碼少自我描述性:有解釋靈活性易擴(kuò)展性模塊性一致性自我描述性8易測(cè)試性簡潔性模塊性檢視:測(cè)量、識(shí)別錯(cuò)誤能力自我描述性易移植性硬件獨(dú)立性軟件獨(dú)立性自我描述性模塊性9易復(fù)用性硬件獨(dú)立性模塊性通用性軟件獨(dú)立性自我描述性互用性數(shù)據(jù)共同性通訊共同性模塊性10Boehm模型
(1978)在該模型中,軟件質(zhì)量的全體稱為總體效用分為現(xiàn)存效用、易維護(hù)性指不涉及軟件的修改質(zhì)量因素11總體效用易維護(hù)性現(xiàn)存效用易修改性易理解性易測(cè)試性效率人機(jī)界面可靠性易移植性易更改性
可認(rèn)性
簡明性結(jié)構(gòu)性自我描述性易交流性易存取性設(shè)備效率可依靠性一致性完整性準(zhǔn)確性自我包含性硬件獨(dú)立性圖8-2Boehm模型12McCall和Boehm模型從用戶出發(fā)的質(zhì)量觀為基礎(chǔ)提出的.模型都是層次結(jié)構(gòu)模型.使用模型時(shí)需根據(jù)具體情況決定質(zhì)量要素的相對(duì)重要性.13軟件質(zhì)量要素之間的關(guān)系正確性可靠性效率完整性易使用性易維護(hù)性易測(cè)試性靈活性易移植性易復(fù)用性互用性正確性可靠性效率完整性易使用性易維護(hù)性易測(cè)試性靈活性易移植性易復(fù)用性互用性直接相關(guān)反向相關(guān)無關(guān)圖8-3Perry的質(zhì)量要素之間關(guān)系148.2軟件測(cè)試
軟件測(cè)試它既令人興奮,也令人煩腦;既令人羨慕不己,也令人望而卻步;要想在預(yù)算內(nèi)按時(shí)交付高質(zhì)量的軟件,測(cè)試是必不可少的。158.2軟件測(cè)試
軟件測(cè)試概述
程序錯(cuò)誤分類
軟件測(cè)試的V模型
軟件測(cè)試的方法
軟件的調(diào)試
168.2.1軟件測(cè)試概述
(1)什么是軟件測(cè)試?
和測(cè)試接近的詞:
過失
(Mistake):人為產(chǎn)生的不正確結(jié)果.
故障
(Fault):過失發(fā)展結(jié)果,可能導(dǎo)致失效.
失效
(Failure):故障引起的結(jié)果.
錯(cuò)誤
(Error)、過錯(cuò)(Mistake)稱bug
不正確結(jié)果的全部.
缺陷(Defect):錯(cuò)誤的表現(xiàn)結(jié)果.
事故
(Incident):失效時(shí)可能呈現(xiàn)給用戶.
測(cè)試(Test):
測(cè)試要處理錯(cuò)誤、缺陷、失效和事故.
測(cè)試是采用測(cè)試用例執(zhí)行的軟件活動(dòng).
17(2)軟件測(cè)試的目的
軟件測(cè)試是對(duì)軟件質(zhì)量的度量,并代表了規(guī)約、設(shè)計(jì)和編碼的最終評(píng)審.
為找出錯(cuò)誤而運(yùn)行程序或系統(tǒng)的過程.(Myers,1979).
測(cè)試是證明錯(cuò)誤的存在,而不是證明錯(cuò)誤的不存在(Dijstra)
確信程序做了它應(yīng)該做的事(Hetzel,1973).
確認(rèn)程序正確地實(shí)現(xiàn)了所要求的功能.
軟件測(cè)試概述18(3)軟件測(cè)試的準(zhǔn)則#盡早地和不斷地進(jìn)行軟件測(cè)試.#
所有的測(cè)試應(yīng)能追溯到用戶需求#
測(cè)試用例:由輸入數(shù)據(jù)和與之對(duì)應(yīng)的預(yù)期輸出結(jié)果組成;包括合理的輸入和不合理的輸入條件.#
測(cè)試從小規(guī)模開始,逐漸擴(kuò)到大規(guī)模,#
窮舉測(cè)試不可能.#
測(cè)試人員,WhoPerformstheTest?#
獨(dú)立測(cè)試組或SoftwareTestEngineer#
使用或開發(fā)測(cè)試工具.#
需求確定后,制定測(cè)試計(jì)劃,并執(zhí)行測(cè)試計(jì)劃.#
測(cè)試中發(fā)現(xiàn)8o%錯(cuò)誤,可能由程序的20%的組件造成的(Pareto原理)
軟件測(cè)試概述19(4)軟件的可測(cè)試性
程序被測(cè)試的難易程度一個(gè)特定測(cè)試集覆蓋產(chǎn)品的充分程度軟件可測(cè)試性的度量特征:
a.可操作性b.可觀察性c.可控制性
d可分解性e.簡單性f.穩(wěn)定性
g.可理解性
軟件測(cè)試概述20(5)軟件測(cè)試的對(duì)象
軟件測(cè)試并不等于程序測(cè)試,應(yīng)貫穿于軟件定義與開發(fā)的各個(gè)階段。
測(cè)試包括:
需求規(guī)格說明概要設(shè)計(jì)規(guī)格說明詳細(xì)設(shè)計(jì)規(guī)格說明源程序21軟件測(cè)試對(duì)象之間關(guān)系軟件需求用戶:要什么需求說明書分析員:可以提供什么設(shè)計(jì)說明書設(shè)計(jì)員:讓軟件怎么做源程序程序員:讓計(jì)算機(jī)做什么運(yùn)行結(jié)果計(jì)算機(jī):程序運(yùn)行得到的結(jié)果理解正確性表達(dá)正確性理解正確性設(shè)計(jì)正確性表達(dá)正確性理解正確性編碼正確性輸入正確性運(yùn)行正確性相符嗎?圖8-4軟件測(cè)試對(duì)象之間關(guān)系228.2.2軟件錯(cuò)誤分類
Beizer
給出的軟件錯(cuò)誤:
抽樣大小—6877000條語句(含注釋)總錯(cuò)誤數(shù)—16209個(gè)錯(cuò)每千條語句錯(cuò)誤數(shù)—2.36個(gè)錯(cuò)23錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)需求錯(cuò)誤13178.1需求不正確6494.0需求邏輯錯(cuò)1530.9需求不完備2241.4需求文檔描述錯(cuò)130.1需求變更2781.7表8-1需求錯(cuò)誤錯(cuò)誤分類24錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)功能和性能錯(cuò)誤262416.2功能和性能不正確4562.8性能不完整2311.4功能不完整1931.2適用范圍錯(cuò)7784.8用戶信息和診斷信息錯(cuò)8575.3異常處理錯(cuò)790.5其他功能錯(cuò)300.2表8-2功能和性能錯(cuò)誤錯(cuò)誤分類25錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)程序結(jié)構(gòu)錯(cuò)誤408225.2控制流和控制順序錯(cuò)誤、變量、分支、循環(huán)等問題207812.8處理器錯(cuò)200412.4表8-3程序結(jié)構(gòu)錯(cuò)誤錯(cuò)誤分類26錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)數(shù)據(jù)錯(cuò)誤363822.4數(shù)據(jù)類型定義,引用及結(jié)構(gòu)錯(cuò)180511.1數(shù)據(jù)存取及處理錯(cuò)183111.3其他數(shù)據(jù)錯(cuò)(比較、計(jì)算、精度、零為除數(shù))2表8-4數(shù)據(jù)錯(cuò)誤錯(cuò)誤分類27錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)編碼與實(shí)現(xiàn)錯(cuò)誤16019.9編碼與程序輸入錯(cuò)誤3322.0違反編程標(biāo)準(zhǔn)或風(fēng)格3182.0文檔錯(cuò)9605.9其他實(shí)現(xiàn)錯(cuò)10.0表8-5編碼與實(shí)現(xiàn)錯(cuò)誤錯(cuò)誤分類28錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)軟件集成錯(cuò)誤14559.0內(nèi)部接口錯(cuò)8595.3外部接口,時(shí)間吞吐量不匹配5183.2其他集成錯(cuò)780.5系統(tǒng)及軟件結(jié)構(gòu)錯(cuò)2821.7表8-6軟件集成錯(cuò)誤錯(cuò)誤分類29錯(cuò)誤分類錯(cuò)誤數(shù)百分比(%)測(cè)試定義和執(zhí)行錯(cuò)誤4472.8測(cè)試設(shè)計(jì)錯(cuò)110.1測(cè)試執(zhí)行錯(cuò)3552.2測(cè)試文檔錯(cuò)110.1測(cè)試用例不充分640.4其他測(cè)試錯(cuò)誤60.0其他錯(cuò)誤
(定時(shí)和協(xié)調(diào),性能,故障恢復(fù),不付合標(biāo)準(zhǔn))7634.7表8-7測(cè)試定義和執(zhí)行錯(cuò)誤錯(cuò)誤分類308.2.3軟件測(cè)試的V模型模塊規(guī)約系統(tǒng)結(jié)構(gòu)與子系統(tǒng)規(guī)約用戶需求分析規(guī)約確定系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)模塊實(shí)現(xiàn)規(guī)約用戶需求用戶要求用戶接受測(cè)試系統(tǒng)測(cè)試系統(tǒng)集成子系統(tǒng)集成與測(cè)試模塊測(cè)試模塊代碼測(cè)試后的模塊測(cè)試后子系統(tǒng)集成的系統(tǒng)檢驗(yàn)過的系統(tǒng)交付的系統(tǒng)圖8-5軟件測(cè)試的V模型318.2.4軟件測(cè)試的分類
(1)
按實(shí)施步驟分:(2)
按測(cè)試對(duì)象分:單元測(cè)試--軟件單元測(cè)試組裝測(cè)試--軟件部件測(cè)試確認(rèn)測(cè)試--軟件配置項(xiàng)測(cè)試系統(tǒng)測(cè)試--系統(tǒng)測(cè)試(3)
按使用的測(cè)試技術(shù)分:靜態(tài)測(cè)試:動(dòng)態(tài)測(cè)試:白盒測(cè)試、黑盒測(cè)試32軟件測(cè)試的分類
(4)按軟件組裝策略分:
(5)按測(cè)試的完整性分:
--增量測(cè)試--完全性和連續(xù)性測(cè)試
自頂向下
--圖路徑測(cè)試
自底向上
--程序路徑測(cè)試
三明治
--窮舉測(cè)試
--非增量測(cè)試33軟件測(cè)試的分類
(6)按項(xiàng)目測(cè)試條目分:
--
功能測(cè)試--恢復(fù)性測(cè)試
--性能測(cè)試--敏感性測(cè)試
--接口測(cè)試--安裝性測(cè)試
--強(qiáng)度測(cè)試--協(xié)調(diào)性測(cè)試
--安全性測(cè)試--人機(jī)界面測(cè)試
--可靠性測(cè)試
348.2.5軟件測(cè)試技術(shù)軟件測(cè)試技術(shù)靜態(tài)測(cè)試動(dòng)態(tài)測(cè)試黑盒測(cè)試白盒測(cè)試功能測(cè)試結(jié)構(gòu)測(cè)試圖8-6軟件測(cè)試技術(shù)分類35靜態(tài)測(cè)試(代碼會(huì)審/走查/辦公桌)
數(shù)據(jù)引用錯(cuò)(使用未賦值的變量)
數(shù)據(jù)說明錯(cuò)(類型不符錯(cuò))
數(shù)據(jù)計(jì)算錯(cuò)(混合類型,零為除數(shù))
數(shù)據(jù)比較錯(cuò)(運(yùn)算符、邏輯符不符)
控制流錯(cuò)(循環(huán)初值、次數(shù)不對(duì))
接口錯(cuò)輸入輸出錯(cuò)文件錯(cuò)檢查:36表8-8黑盒測(cè)試與白盒測(cè)試
黑盒(功能)測(cè)試白盒(結(jié)構(gòu))測(cè)試只利用規(guī)格說明標(biāo)識(shí)測(cè)試用例只利用程序源代碼標(biāo)識(shí)測(cè)試用例如果程序?qū)崿F(xiàn)了未描述的行為,功能測(cè)試無法意識(shí)到。如果已描述的行為未能實(shí)現(xiàn),結(jié)構(gòu)性測(cè)試無法意識(shí)到冗余度大,可能會(huì)有漏洞具有覆蓋率指標(biāo)動(dòng)態(tài)測(cè)試37
任何程序都可以看作是將輸入定義域取值映射到輸出值域的函數(shù)。將系統(tǒng)看成“黑盒”。也稱黑盒測(cè)試軟件InputOutput1)
功能測(cè)試(FunctionTesting)圖8-7黑盒測(cè)試38
證實(shí)每個(gè)實(shí)現(xiàn)了的功能是否符合需求規(guī)格說明書的要求。
黑盒測(cè)試要在軟件的接口處進(jìn)行.目的:39黑盒測(cè)試可以發(fā)現(xiàn)如下錯(cuò)誤:
是否有不正確或遺漏的功能?在接口上,輸入能否被正確地接受?能否輸出正確的結(jié)果?是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息
(例如數(shù)據(jù)文件)訪問錯(cuò)誤?性能上是否能夠滿足要求?是否有初始化或終止性錯(cuò)誤?40功能測(cè)試的方法:
等價(jià)類分析邊界值分析錯(cuò)誤推測(cè)法因果圖法隨機(jī)測(cè)試基于決策樹的測(cè)試41(1)等價(jià)類(Equivalencepartitioning)
把輸入的數(shù)據(jù)按有效的和無效的劃分為若干個(gè)等價(jià)類.
不考慮程序的內(nèi)部結(jié)構(gòu),只依據(jù)程序的規(guī)格說明來設(shè)計(jì)測(cè)試用例.
42
等價(jià)類概念等價(jià)類:
等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中的錯(cuò)誤都是等效的.
有效等價(jià)類:對(duì)于程序規(guī)格說明,是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。
無效等價(jià)類:是指對(duì)于程序規(guī)格說明,是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合.功能測(cè)試43等價(jià)類劃分的原則:
按區(qū)間劃分
按數(shù)值劃分按數(shù)值集合劃分
按限制條件或規(guī)則劃分
功能測(cè)試44測(cè)試用例={測(cè)試數(shù)據(jù)十期望結(jié)果}
測(cè)試結(jié)果={測(cè)試數(shù)據(jù)十期望結(jié)果十實(shí)際結(jié)果}
在確立了等價(jià)類之后,建立等價(jià)類表,列出所有劃分出的等價(jià)類數(shù)據(jù)十期望結(jié)果確立測(cè)試用例功能測(cè)試等價(jià)類劃分
………
……………….無效等價(jià)類有效等價(jià)類輸入條件表8-9劃分出的等價(jià)類45
輸入條件有效等價(jià)類無效等價(jià)類標(biāo)識(shí)符個(gè)數(shù)
1個(gè)(1)多個(gè)(2)
0個(gè)(3)標(biāo)識(shí)符字符數(shù)
1—8個(gè)(4)0個(gè),>8個(gè),>80個(gè)
(5)
(6)(7)標(biāo)識(shí)符組成
字母(8)
數(shù)字(9)
非字母數(shù)字字符(10)
保留字(11)第一個(gè)標(biāo)識(shí)符字母(12)非字母(13)標(biāo)識(shí)符使用先說明后使用
(14)
未說明已使用(15)表8-10標(biāo)識(shí)符的等價(jià)類劃分例1為標(biāo)識(shí)符劃分等價(jià)類46測(cè)試用例:
VARX,T1234567:REAL;(1,2,4,8,9,12,14)X=3.414;T1234567:=2.73VAR:REAL;(3)VARX,:REAL;(5)VART12345678:REAL;(6)VART123456789….:REAL(7)>80VART$:CHAR;(10)VARGOTO:INTEGER;(11)VAR2T:REAL;(13)VARPAR:REAL;(15)47
三角形問題的等價(jià)類測(cè)試用例
對(duì)于三角形問題,可能由四種輸出:
三角形
不等邊三角形等腰三角形等邊三角形根據(jù)四種輸出標(biāo)識(shí)輸出(值域)等價(jià)類。例248表8-11三角形問題的等價(jià)類測(cè)試用例測(cè)試用例ABC預(yù)期輸出WN1555等邊三角形WN2223等腰三角形WN3345不等邊三角形WN4412不構(gòu)成三角形49表8-12三角形問題的等價(jià)類測(cè)試用例b取值不在所允許的范圍內(nèi)abc取值不在所允許的范圍內(nèi)測(cè)試用例abc預(yù)期輸出SR1a取值不在所允許的范圍內(nèi)5c取值不在所允許的范圍內(nèi)ab取值不在所允許的范圍內(nèi)
bc取值不在所允許的范圍內(nèi)ac取值不在所允許的范圍內(nèi)
SR2SR3SR4SR5SR6SR75-15-1-15-1-1-1-1-155555-1-1-1-1-150
NextDate函數(shù)等價(jià)類測(cè)試
NextDate是一個(gè)三個(gè)變量函數(shù):月、日、年這些變量的有效區(qū)間:M1={月份:1月份12}D1={日期:1日期31}Y1={年:1812年2012}例351NextDate函數(shù)等價(jià)類測(cè)試
無效等價(jià)類M1={月份:月份<1}M1={月份:月份>12}D1={日期:日期<1}D1={日期:日期>31}Y1={年:年<1812}Y1={年:年>2012}52表8-13NextDate函數(shù)等價(jià)類測(cè)試表用例ID月份日期年預(yù)期輸出SR1-1151912月份,日期不在有效值域SR26-11912日期不在有效值域1...31中SR36151811年,日期不在有效值域中SR4-1-11912月份,日期不在有效值域中SR56-11811年,日期不在有效值域中SR6-1151811年,月份,日期不在有效值域SR7-1-11811年,月份,日期不在有效值域53確定等價(jià)類的原則小結(jié)(1)
如果輸入條件規(guī)定了取值范圍,或者值的個(gè)數(shù),則可以確定一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類;如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,則可以確立一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類;如果輸入條件是一個(gè)布爾量,則可以確立一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類;54確定等價(jià)類的原則小結(jié)(2)
如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(即遵守規(guī)則的數(shù)據(jù))和若干無效等價(jià)類(從不同角度違反規(guī)則的數(shù)據(jù));如果確知以劃分的等價(jià)類中的各元素在程序中的處理方式不同,則應(yīng)進(jìn)一步劃分成更小的等價(jià)類
55選擇測(cè)試用例的原則:
設(shè)計(jì)盡可能少的測(cè)試用例,覆蓋所有的有效等價(jià)類.
針對(duì)每一個(gè)無效等價(jià)類,設(shè)計(jì)一個(gè)測(cè)試用例來覆蓋它.等價(jià)類劃分56(2)邊界值法(BoundaryValueAnalysis)
把測(cè)試值選在等價(jià)類的邊界上.
abcd錯(cuò)誤可能出現(xiàn)在輸入變量的極值附近。功能測(cè)試圖8-8邊界值測(cè)試法57邊界值測(cè)試abcd5個(gè)元素情況:
最小值略高于最小值正常值略低于最大值最大值
n個(gè)變量,有4n+1個(gè)測(cè)試用例
圖8-9邊界值測(cè)試法58邊界值健壯性測(cè)試
對(duì)例外情況的測(cè)試abcd在5個(gè)元素基礎(chǔ)上增如:略高于最大值略低于最小值圖8-10邊界值測(cè)試法59例三角形問題
輸入:三角形的三條邊a、b、c三個(gè)整數(shù)輸出:由這三條邊確定的三角形類型:等邊三角形、等腰三角形、不等邊三角形或非三角形.整數(shù)a、b、c必須滿足以下條件:
c1:1a200;c2:1b200c3:1c200;c4:a<
b+cc5:b<
a+c
;
c6:c<
a+b60
如果輸入值沒有滿足上述條件中的一個(gè),則程序應(yīng)該輸出故障信息如果a、b、c滿足c1、c2、c3則給出以下四種相互排斥輸出中的一個(gè):如果三邊相等,則程序輸出是等邊三角形;如果恰好由兩邊相等,則程序輸出是等腰三角形;如果沒有兩邊相等,則程序輸出不等邊三角形;如果c4、c5、c6有一個(gè)條件不滿足,則程序的輸出是非三角形;
61三角形程序的具體實(shí)現(xiàn)(1)Programtriangle‘StructuredprogrammingversionofsimplerspecificationDima,b,cAsIntegerDimIsATriangleAsBoolean‘Step1:GetInputOutput(“Enter3integerwhicharesideofatriangle”)Input(a,b,c)Output(“SideAis“,a)Output(“SideBis“,b)Output(“SideCis“,c)62‘Step2:IsAtriangleIf(a<b+c)AND(b<a+c)AND(c<a+b) ThenIsATriangle=TRUEElseIsATriangle=FALESEndIf63‘Step3:DetermineTriangleTypeIfIsATriangle
ThenIf(a=b)AND(b=c) ThenOutput(“Equilateral”) ElseIf(ab)AND(bc) ThenOutput(“Scalene”) ElseOutput(“Isosceles”)
EndIf
EndIf Elseoutput(“NotaTriangle”)EndIfEndtriangle64三角形程序的具體實(shí)現(xiàn)(2)Programtriangle2‘StructuredprogrammingversionofimprovedspecificationDima,b,cAsIntegerDimIsATriangleAsBoolean‘Step1:GetInputDoOutput(“Enter3integerwhicharesideofatriangle”)Input(a,b,c)c1=(1<=a)AND(a<=200)c2=(1<=b)AND(b<=200)c3=(1<=c)AND(c<=200)65IfNOT(c1) ThenOutput(“Valueofaisnotintherangeofpermittedvalues”)EndIfIfNOT(c2) ThenOutput(“Valueofbisnotintherangeofpermittedvalues”)EndIfIfNOT(c3) ThenOutput(“Valueofcisnotintherangeofpermittedvalues”)EndIfUntilc1ANDc2ANDc3Output(“SideAis“,a)Output(“SideBis“,b)Output(“SideCis“,c)66‘Step2:IsAtriangleIf(a<b+c)AND(b<a+c)AND(c<a+b) ThenIsATriangle=TRUEElseIsATriangle=FALESEndIf67‘Step3:DetermineTriangleTypeIfIsATriangle
ThenIf(a=b)AND(b=c) ThenOutput(“Equilateral”) ElseIf(ab)AND(bc) ThenOutput(“Scalene”) ElseOutput(“Isosceles”)
EndIf
EndIf Elseoutput(“NotaTriangle”)EndIfEndtriangle268基本思想:
列舉出程序中所有可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,根據(jù)它們選擇測(cè)試用例.
利用經(jīng)驗(yàn)確定程序中容易出錯(cuò)的地方。(3)錯(cuò)誤推測(cè)法功能測(cè)試69例對(duì)排序程序進(jìn)行測(cè)試
邊界值法
-輸入表為空
-輸入表中僅有一個(gè)數(shù)據(jù)
-輸入表為滿表
錯(cuò)誤猜測(cè)法
-輸入表已排好序
-輸入表的排序與要求的順序相反
-輸入表中的所有數(shù)據(jù)全部相同70(4)因果圖(Cause-EffectGraphing)
借助圖形來設(shè)計(jì)測(cè)試用例的一種方法.
用于被測(cè)程序具有多種輸入條件,而輸出又依賴于輸入條件的各種組合情況.
因果圖方法最終生成的就是判定表。功能測(cè)試71因果圖中的基本符號(hào)Ci表示原因,Ei表示結(jié)果。各結(jié)點(diǎn)表示狀態(tài),“0”---狀態(tài)不出現(xiàn),“1”---狀態(tài)出現(xiàn).CiEi恒等CiEi非C1EiC2或C1EiC2與圖8-12因果圖基本符號(hào)72表示約束條件的因果圖符號(hào)EabE(互斥、排他)IabI(包含、或)cOabO(唯一)RabR(要求)MabM(屏蔽)圖8-13表示約束條件的因果圖符號(hào)73例
利用因果圖設(shè)計(jì)測(cè)試用例飲料自動(dòng)售貨機(jī)軟件測(cè)試用例。售1杯飲料單價(jià)5角.若投入5角錢或1元錢的硬幣,按下橙汁或啤酒的按鈕,則飲料流出.若售貨機(jī)沒有零錢找,則顯示一個(gè)零錢找完的紅燈亮,這時(shí)若投入1元錢硬幣并按下按鈕,則不僅不送出飲料而且退出1元錢;若有零錢找,則顯示零錢找完的紅燈滅,并在送出飲料的同時(shí)退還5角硬幣。74自動(dòng)售貨機(jī)軟件測(cè)試用例原因結(jié)果1.售貨機(jī)有零錢找21.售貨機(jī)零錢找完紅燈亮2.投入1元硬幣22.退還1元硬幣3.投入5角硬幣23.退還5角硬幣4.按下橙汁按鈕24.送出橙汁飲料5.按下啤酒按鈕25.送出啤酒飲料75自動(dòng)售貨機(jī)軟件測(cè)試用例
中間狀態(tài)11.投入1元硬幣且按下飲料按鈕12.按下橙汁或啤酒按鈕13.應(yīng)當(dāng)找5角錢且售貨機(jī)有零錢找14.錢已付清76按下橙汁按鈕12345售貨機(jī)有零錢找投入1元硬幣投入5角硬幣按下啤酒按鈕2122232425售貨機(jī)零錢找完紅燈亮退還1元硬幣找回5角硬幣送出橙汁飲料送出啤酒飲料E11131412E該找5角可找5角按下按鈕錢已付清圖8-14自動(dòng)售貨機(jī)的因果圖77
因果圖方法生成測(cè)試用例的步驟:
找出軟件規(guī)格說明中的原因(輸入條件或輸入條件的等價(jià)類),及由原因引起的結(jié)果(即輸出條件動(dòng)作).b.分析軟件規(guī)格說明描述中的語義,找出原因與結(jié)果之間,原因與原因之間對(duì)應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系畫,出因果圖.
78因果圖方法生成測(cè)試用例的步驟:c.由于語法或環(huán)境限制,有些原因與原因之間,原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號(hào)標(biāo)明約束或限制條件.d.把因果圖轉(zhuǎn)換成判定表.e.把判定表的每一列拿出來作為依據(jù),設(shè)計(jì)測(cè)試用例.79(5)綜合策略的測(cè)試方法Myers提出了使用各種測(cè)試方法的綜合策略:-任何情況下都必須使用邊界值分析方法。必要時(shí)用等價(jià)類劃分法補(bǔ)充一些測(cè)試用例.
用錯(cuò)誤推測(cè)法再追加一些測(cè)試用例.
如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法.
測(cè)試用例的邏輯覆蓋程度要達(dá)到要求的覆蓋標(biāo)準(zhǔn).
80(6)窮舉測(cè)試
是不可能的
對(duì)于黑盒測(cè)試來講,最簡單程序,設(shè)A、B、C都是整形變量,在字長為32位的計(jì)算機(jī)上運(yùn)行,則輸入數(shù)據(jù)的可能性有232x232=264種,如果這個(gè)程序執(zhí)行一次需1ms,則所有的組合完全測(cè)試一次將需要5億年。ProgramABCc81功能性測(cè)試
方法優(yōu)點(diǎn):與軟件如何實(shí)現(xiàn)無關(guān),如果實(shí)現(xiàn)發(fā)生變化,測(cè)試用例仍然有用;測(cè)試用例開發(fā)可以與程序的實(shí)現(xiàn)并行進(jìn)行.
方法缺點(diǎn):測(cè)試用例之間可能存在嚴(yán)重的冗余;存在測(cè)試的不徹底性.822)結(jié)構(gòu)測(cè)試(白盒測(cè)試)
測(cè)試軟件產(chǎn)品的內(nèi)部操作,是否符合設(shè)計(jì)規(guī)格要求.
主要對(duì)程序模塊進(jìn)行如下的檢查:
對(duì)模塊的每一個(gè)獨(dú)立的執(zhí)行路徑至少測(cè)試一次.
對(duì)所有的邏輯判定的每一個(gè)分支,
(真與假)都至少測(cè)試一次.
在循環(huán)的邊界和運(yùn)行界限內(nèi)執(zhí)行循環(huán)體.
測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性.83結(jié)構(gòu)測(cè)試方法語句覆蓋判定/分支覆蓋條件覆蓋條件組合覆蓋邏輯覆蓋:基本路徑測(cè)試條件測(cè)試數(shù)據(jù)流測(cè)試循環(huán)測(cè)試控制結(jié)構(gòu)測(cè)試:84
(1)語句覆蓋
每一可執(zhí)行語句至少執(zhí)行一次.
Procedureexample(a,b:real;VarX:real)
beginif(a>1)and(b=0)thenS1elses2end例邏輯覆蓋85(a>1)∧(b=0)S1FTStartS2End圖8-15程序流程圖語句覆蓋是最弱的覆蓋。86
(2)判定覆蓋
被測(cè)程序中每一個(gè)分支至少被執(zhí)行一次.
(3)
條件覆蓋被測(cè)程序判定語句中的每一個(gè)條件均按“真”、“假”兩種取值,至少被執(zhí)行一次.(4)條件組合覆蓋判定和條件組合(對(duì)于每一個(gè)判定,要求所有可能的條件取值的組合都必須取到).
87
覆蓋種類
滿足條件
測(cè)試數(shù)據(jù)
期望結(jié)果
判定覆蓋
A>1,B=0A>1,B≠0或
A≤1,B=0或
A≤1,B≠0
A=2,B=0A=2,B=1或
A=1,B=0或
A=1,B=1執(zhí)行S1
執(zhí)行S2
條件覆蓋
A>1或B=0或
A≤1或B≠0
A=2,B=0A=1,B=1執(zhí)行S2條件組合覆蓋
A>1,B=0A>1,B≠0A≤1,B=0A≤1,B≠0
A=2,B=0A=2,B=1A=1,B=0A=1,B=1
執(zhí)行S1
執(zhí)行S2
執(zhí)行S2
執(zhí)行S288例流程圖L1(ace)L2(abd)
L3(abe)L4(acd)Start(a>1)∧(b=0)
X=X/aFTabc(a=2)∨(X>1)
X=X+1FTdeEnd選擇L1設(shè)計(jì)測(cè)試用例[a,b,X]:{[2,0,4],[2,0,3〕}圖8-16程序流程圖89
判定覆蓋
如果選擇路徑L1和L2(或L3和L4)可實(shí)現(xiàn)判定覆蓋,測(cè)試用例為:
[a,b,X]:{[2,0,4],[2,0,3]}覆蓋L1
[a,b,X]:{[1,1,1],[1,1,1]}覆蓋L2[a,b,X]:{[2,1,1],[2,1,2]}覆蓋L3[a,b,X]:{[3,0,3],[3,1,1]}覆蓋L490條件覆蓋表8-14條件覆蓋表91表8-15條件組合覆蓋92
(5)路徑覆蓋測(cè)試
(TomMcCabe提出)
設(shè)計(jì)足夠的測(cè)試用例,覆蓋程序中所有可能的路徑.表8-16路徑覆蓋控制結(jié)構(gòu)的測(cè)試93
程序圖符號(hào)順序語句If語句While語句Until語句case語句路徑測(cè)試圖8-17程序圖符號(hào)94
流程圖與流圖對(duì)應(yīng)1368754291011圖8-18流程圖與程序圖12,34567109811節(jié)點(diǎn)邊邊R1R2R3R4區(qū)域路徑測(cè)試95
程序?qū)?yīng)的程序(流)圖Procedure:sort1:dowhilerecordsremainReadrecord2:ifrecordfield1=03:thenprocessrecord;Storeinbuffer;Incrementcounter;4:Elseifrecordfield2=05:Thenresetcounter;6:Elseprocessrecord;Storeinfield7a:endif
endif7b:enddo8:end123467b7a58R1R2R3R4路徑測(cè)試圖8-19程序與程序圖96AND、NAND、OR、NOR
. . .IfaORbThenprocedurexElseprocedurey
EndIfabxyx
邏輯組合條件情況路徑測(cè)試圖8-20邏輯組合條件流圖97
邏輯組合條件情況
. . .IfaANDbThenprocedurexElseprocedureyEndIf路徑測(cè)試圖8-21邏輯組合條件流圖aybyx98流圖中的獨(dú)立路徑包括:1。1—112。1—2—3—4—5—10—1—113。1—2—3—6—7—9—10—1—114。1—2—3—6—8—9—10—1—11而:
1—2—3—4—5—10—1—2—3—6—8—9—10—1—11就不是獨(dú)立路徑。1234567109811R1R2R3R4
程序的環(huán)路復(fù)雜性
獨(dú)立路徑:沒有處理過的語句或條件的一組路徑。
圖8-22復(fù)雜環(huán)路流圖99
根據(jù)圖求出環(huán)路復(fù)雜性
環(huán)路復(fù)雜性V(G)=判斷節(jié)點(diǎn)
+1
或
V(G)=基本路徑的個(gè)數(shù)基本路徑并不是唯一的,對(duì)于給定的流圖,可以得到不同的基本路徑.路徑測(cè)試100例1求平均值本程序要求計(jì)算不超過100個(gè)數(shù)字的平均值;同時(shí)計(jì)算總和與有效數(shù)字個(gè)數(shù)。minimum<Input.valid<maxinum輸入為有效數(shù)字;否則為無效數(shù)字.如果輸入為-999,則表示輸入停止。路徑測(cè)試101procedureaverageTYPEvalue[i:100]ISSCALARARRAYTYPEaverage,total.input,total.valid,minimum,maxinum,sumISSCALARTYPEiISIntegeri=1;total.input=total.valid=0;sum=0;DOWHILEvalue[i]<>-999ANDtotal.input<100 incrementtotal.inputby1; IFvalue[i]>=minimumANDvalue[i]<=maxium THENincrementtotal.validby1; sum=sum+value[i] ELSEskip ENDIF incrementiby1;ENDDO123987654102IFtotal.valid>0 THENaverage=sum/total.valid; ELSEaverage=-999ENDIFENDaverag出控制流圖13121110987654321V(G)=6個(gè)區(qū)域V(G)=5個(gè)判斷節(jié)點(diǎn)+1=6V(G)=17條邊-13個(gè)結(jié)點(diǎn)
+2=6圖8-23求平均值流圖104根據(jù)環(huán)路復(fù)雜性導(dǎo)出基本路徑Path1:1--2--10--11--13path2:1--2--10--12--13path3:1--2--3--10--11--13path4:1--2--3--4--5--8--9--2……path5:1--2--3--4--5--6--8--9--2……path6:1--2--3--4--5--6--7--8--9--2……105準(zhǔn)備測(cè)試用例Path1:輸入數(shù)據(jù):value[k]=有效數(shù)據(jù),限于k<ivalue[i]=-999,當(dāng)2<=i<=100.輸出結(jié)果:n個(gè)值的正確的平均值,正確的總計(jì)數(shù);Path2:輸入數(shù)據(jù):value[1]=-999預(yù)期結(jié)果:平均值=-999,總計(jì)數(shù)取初值。106準(zhǔn)備測(cè)試用例Path3:試圖處理101個(gè)或更多的值,而前100個(gè)應(yīng)當(dāng)是有效的值。預(yù)期輸出:n個(gè)值的正確的平均值,正確的總計(jì)數(shù);Path4:輸入數(shù)據(jù):value[i]=有效輸入,且i<100value[k]<最小值,當(dāng)k<=i時(shí).預(yù)期輸出:n個(gè)值的正確的平均值,正確的總計(jì)數(shù);107準(zhǔn)備測(cè)試用例Path5:輸入數(shù)據(jù):value[i]=有效輸入,且i<100value[k]<最小值,當(dāng)k<=i時(shí).預(yù)期輸出:n個(gè)值的正確的平均值,正確的總計(jì)數(shù);Path6:輸入數(shù)據(jù):value[i]=有效輸入,且i<100預(yù)期輸出:n個(gè)值的正確的平均值,正確的總計(jì)數(shù);108開始讀入成績表,讀入numnum<>0印出“未找到”查找結(jié)束在上半部分?找到所查學(xué)號(hào)?讀入下一numfirst,last,middle賦初值打印分?jǐn)?shù)重算middle調(diào)整first調(diào)整last結(jié)束內(nèi)FTTFTFTF(a)流程圖
外12345678910acbdefghlnmq(b)程序圖例2成績查詢圖8-24成績查詢流程圖與程序圖109simpleloopnestedloops(6)循環(huán)體測(cè)試循環(huán)體類型零次循環(huán)一次循環(huán)二次循環(huán)m次循環(huán)m-1,m+1
次循環(huán)從內(nèi)層循環(huán)開始測(cè)試,所有其他循環(huán)設(shè)為最小值內(nèi)層循環(huán)使用簡單循環(huán)測(cè)試方法,
外層循環(huán)迭代參數(shù)取最小值.
為越界值或非法值增加測(cè)試由內(nèi)向外對(duì)每一個(gè)循環(huán)測(cè)試,外層循環(huán)取最小值.110圖8-25循環(huán)體類型concatenatedloopsUnstructured
loops改造結(jié)構(gòu)若兩個(gè)循環(huán)完全獨(dú)立用簡單循環(huán)測(cè)試方法否則,用嵌套循環(huán)測(cè)試方法
111(7)數(shù)據(jù)流測(cè)試
數(shù)據(jù)的定義與引用關(guān)系的測(cè)試數(shù)據(jù)間交互作用的測(cè)試結(jié)構(gòu)性數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)測(cè)試過程間的數(shù)據(jù)流112路徑測(cè)試步驟小結(jié)
使用路徑測(cè)試技術(shù)設(shè)計(jì)測(cè)試用例的步驟如下:
根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖
計(jì)算流圖的環(huán)形復(fù)雜度
確定現(xiàn)行獨(dú)立路徑的基本集合
設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)試用例113選擇任何一種測(cè)試方法意味著
選擇一種風(fēng)險(xiǎn)!
窮舉是最安全、最全面的方法,但是不可能。任何一種方法的選擇,都將面臨著不完全、不安全。為此,不得不選擇一種或多種方法。114
單元測(cè)試集成測(cè)試確認(rèn)測(cè)試系統(tǒng)測(cè)試8.2.6軟件測(cè)試步驟115軟件測(cè)試的分類
在不同的測(cè)試步驟中采用不同的測(cè)試技術(shù)單元測(cè)試黑盒測(cè)試、白盒測(cè)試、靜態(tài)測(cè)試集成測(cè)試黑盒測(cè)試、白盒測(cè)試、靜態(tài)測(cè)試、增量測(cè)試確認(rèn)測(cè)試黑盒測(cè)試、靜態(tài)測(cè)試系統(tǒng)測(cè)試黑盒測(cè)試、表8-17測(cè)試步驟與測(cè)試技術(shù)結(jié)合116軟件測(cè)試的分類
測(cè)試步驟和測(cè)試類別:集成測(cè)試接口測(cè)試確認(rèn)測(cè)試功能測(cè)試、性能測(cè)試、人機(jī)界面測(cè)試系統(tǒng)測(cè)試可靠性測(cè)試、強(qiáng)度測(cè)試…………表8-18測(cè)試步驟和測(cè)試類別結(jié)合117(1)單元測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試單元測(cè)試錯(cuò)誤或缺陷跟蹤測(cè)試步驟118
單元測(cè)試的內(nèi)容及環(huán)境接口局部數(shù)據(jù)結(jié)構(gòu)邊界條件獨(dú)立的路徑、循環(huán)路徑錯(cuò)誤處理驅(qū)動(dòng)模塊被測(cè)模塊樁模塊樁驅(qū)動(dòng)器驅(qū)動(dòng)器驅(qū)動(dòng)器驅(qū)動(dòng)器驅(qū)動(dòng)器測(cè)試用例樁模塊圖8-27單元測(cè)試的內(nèi)容及環(huán)境119驅(qū)動(dòng)模塊:為被測(cè)模塊提供數(shù)據(jù)驅(qū)動(dòng)程序A驅(qū)動(dòng)程序B驅(qū)動(dòng)程序C驅(qū)動(dòng)程序D調(diào)用從屬模塊從表或外部文件中傳送參數(shù)顯示參數(shù)兼有驅(qū)動(dòng)程序B、C的功能表示傳送的參數(shù)信息120樁模塊:只做少量的數(shù)據(jù)操作模塊A顯示跟蹤信息模塊A顯示傳遞信息模塊A從一個(gè)表或外部文件返回一個(gè)值模塊A進(jìn)行一項(xiàng)表查詢根據(jù)輸入?yún)?shù)返回輸出參數(shù)121
單元測(cè)試方法
檢查代碼代碼審查數(shù)學(xué)方法完全測(cè)試語句測(cè)試路徑測(cè)試122(2)集成測(cè)試
a)集成測(cè)試考慮的問題:模塊接口的數(shù)據(jù)是否會(huì)丟失組合后的子功能,能否達(dá)到預(yù)期要求的父功能模塊的功能是否會(huì)相互產(chǎn)生不利的影響全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問題模塊的誤差累積是否會(huì)放大單個(gè)模塊的錯(cuò)誤是否會(huì)導(dǎo)致數(shù)據(jù)庫錯(cuò)誤測(cè)試步驟123
b)集成測(cè)試的集成方式
FEDCBABADCEFECd1FFd2Bd3d4d5Ds5s4s3A一次成功的可能性不大;很難定位發(fā)現(xiàn)的錯(cuò)誤;查錯(cuò)和改錯(cuò)的工作量大;無法確定接口的模塊錯(cuò)誤.
一次性集成方式:E圖8-28一次性集成124
增殖式集成方式
自頂向下集成--深度優(yōu)先:A、B、E、C、D、F
—廣度優(yōu)先:A、B、C、D、E、F集成方式As1s2s3s3s3Bs2AEs2BAs3CBAES5EDCBAFEDCBAs4加入D圖8-29加入B加入E加入C測(cè)試A采用回歸測(cè)試加入F自頂向下集成125
增殖式集成方式
-自底向上集成
-混合增殖式測(cè)試
(三明治測(cè)試,SandwichTesting)
自底向上-自頂向下結(jié)合測(cè)試.回歸測(cè)試
調(diào)用圖(有向圖)的集成成對(duì)節(jié)點(diǎn)集成、相鄰節(jié)點(diǎn)集成
基于路徑的集成集成方式126
c)接口測(cè)試
接口類型:
參數(shù)接口、共享內(nèi)存接口、程序接口、消息傳遞接口
測(cè)試內(nèi)容:
參數(shù)類型、順序等,
調(diào)用方式、共享數(shù)據(jù),
強(qiáng)度.
127
d)集成測(cè)試文檔大綱I.測(cè)試范圍
1.對(duì)模塊n的測(cè)試描述II.測(cè)試計(jì)劃
2.
額外軟件的描述
A.測(cè)試階段和結(jié)構(gòu)
3.
期望的結(jié)果
B.組裝進(jìn)度
C.
測(cè)試環(huán)境
C.額外的軟件
1.
特殊的工具和技術(shù)
D.環(huán)境和資源
2.額外的軟件描述III.測(cè)試過程n
D.
測(cè)試用例數(shù)據(jù)
A.組裝順序
E.
建立n所期望的結(jié)果
1.
目的IV.實(shí)際的測(cè)試結(jié)果
2.要測(cè)試模塊V.參考文獻(xiàn)
B.對(duì)結(jié)構(gòu)中模塊單元的測(cè)試VI.
附錄128(3)確認(rèn)測(cè)試
驗(yàn)證軟件的有效性(功能、性能等)測(cè)試步驟選擇測(cè)試人員有效測(cè)試用例實(shí)際運(yùn)行測(cè)試軟件計(jì)劃用戶文檔開發(fā)文檔源程序文檔支持環(huán)境有效性測(cè)試專家鑒定會(huì)管理機(jī)構(gòu)裁決軟件配置審查軟件配置測(cè)試報(bào)告交用戶運(yùn)行維護(hù)圖8-30確認(rèn)測(cè)試過程129確認(rèn)測(cè)試
-有效性測(cè)試(功能測(cè)試)用黑盒測(cè)試方法,驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說明中列出的需求.
測(cè)試其它軟件需求,如可移植性、兼容性、出錯(cuò)自動(dòng)恢復(fù)等.
軟件配置復(fù)查保證軟件配置的所有成分齊全,質(zhì)量符合要求,具有維護(hù)階段必需的細(xì)節(jié).130確認(rèn)測(cè)試
-驗(yàn)收測(cè)試
驗(yàn)收測(cè)試是以用戶為主的測(cè)試。使用用戶界面輸入測(cè)試數(shù)據(jù),并分析測(cè)試的輸出結(jié)果.一般使用實(shí)際數(shù)據(jù)進(jìn)行測(cè)試。
α測(cè)試由一個(gè)用戶在開發(fā)環(huán)境下進(jìn)行的測(cè)試.
評(píng)價(jià)軟件產(chǎn)品的功能、可使用性、可靠性、性能和支持,尤其注重產(chǎn)品的界面和特色
β測(cè)試多個(gè)用戶在一個(gè)或多個(gè)用戶的實(shí)際使用環(huán)境下進(jìn)行的測(cè)試。開發(fā)者通常不在測(cè)試現(xiàn)場.
衡量產(chǎn)品功能、可使用性、可靠性、性能。著重于產(chǎn)品的支持性,包括文檔、客戶培訓(xùn)和支持產(chǎn)品生產(chǎn)能力等.
131(4)系統(tǒng)測(cè)試
測(cè)試的種類:
設(shè)計(jì)評(píng)審代碼審查功能測(cè)試結(jié)構(gòu)測(cè)試回歸測(cè)試可靠性測(cè)試性能測(cè)試恢復(fù)測(cè)試強(qiáng)度測(cè)試配置測(cè)試安全測(cè)試啟動(dòng)/停止可使用性可支撐性互聯(lián)測(cè)試兼容性容量測(cè)試安裝測(cè)試文檔測(cè)試測(cè)試步驟1328.2.7軟件的調(diào)試
(1)調(diào)試的目的確定程序中可疑錯(cuò)誤的確切性質(zhì)和位置;
對(duì)程序(設(shè)計(jì),編碼)進(jìn)行修改,排除錯(cuò)誤.(2)調(diào)試的方法
以分析為主,強(qiáng)調(diào)思考強(qiáng)行排錯(cuò)回溯法排錯(cuò)歸納法排錯(cuò)演繹法排錯(cuò)133圖8-31歸納、演繹糾錯(cuò)法開始收集錯(cuò)誤癥狀提出假想錯(cuò)誤歸納癥狀找到真實(shí)錯(cuò)誤測(cè)試糾錯(cuò)證明假想錯(cuò)誤結(jié)束YYNN(a)歸納糾錯(cuò)法開始羅列可能的病因有余下病因?排除矛盾的病因確定真實(shí)病因測(cè)試糾錯(cuò)能證實(shí)病因有能無不能(b)演繹糾錯(cuò)法結(jié)束134(3)確定錯(cuò)誤的性質(zhì)和位置的原則:用頭腦去分析思考與錯(cuò)誤征兆有關(guān)的信息.避開死胡同.把調(diào)試工具當(dāng)做輔助手段來使用.避免用試探法,最多只能把它當(dāng)做最后手段.(4)修改錯(cuò)誤的原則:在出現(xiàn)錯(cuò)誤的地方,很可能還有別的錯(cuò)誤.修正一個(gè)錯(cuò)誤的同時(shí),有可能會(huì)引入新的錯(cuò)誤.修改錯(cuò)誤的過程將迫使人們暫時(shí)回到程序設(shè)計(jì)階段.修改源代碼程序,不要改變目標(biāo)代碼.
軟件的調(diào)試135
(5)改錯(cuò)的輔助手段
設(shè)置顯示輸出,打印語句寫記錄文件使用工具:CodeAnalysisToolsTestExecutionToolsTestCaseGenerators136(6)排錯(cuò)實(shí)踐經(jīng)驗(yàn)
好線索,簡單錯(cuò)誤經(jīng)驗(yàn)1:尋找熟悉的模式如出現(xiàn)超范圍的存儲(chǔ)器訪問;
出現(xiàn)特別大的整數(shù);特大特小的整數(shù)浮點(diǎn)數(shù);
忘記對(duì)全局變量的初始化等等.
經(jīng)驗(yàn)2:檢查最近的改動(dòng)經(jīng)驗(yàn)3:不要兩次犯同樣的錯(cuò)誤經(jīng)驗(yàn)4:現(xiàn)在排除,而不是以后經(jīng)驗(yàn)5:取得堆棧軌跡137
失敗位置的源程序行號(hào),堆棧追蹤中屢次出現(xiàn)的部分都是最有用的排錯(cuò)信息;
不應(yīng)出現(xiàn)的參數(shù)值如空指針,應(yīng)是很小的整數(shù)值現(xiàn)在卻特別大,應(yīng)是正值現(xiàn)是負(fù)值,字符串里的非字母字符等等.
如對(duì)一個(gè)整數(shù)組排序,應(yīng)該用整數(shù)比較函數(shù)
icmp調(diào)用qsort:
int
arr[N];
qsort(arr,N,sizeof(arr[0],icmp);無意中把字符串比較函數(shù)傳進(jìn)去:?int
arr[N];
?qsort(arr,N,sizeof(arr[0],scmp);138
編譯無法發(fā)現(xiàn)這類錯(cuò)誤,災(zāi)難就發(fā)生了.程序運(yùn)行時(shí)會(huì)垮臺(tái),它訪問非法的存儲(chǔ)器地址。運(yùn)行排錯(cuò)系統(tǒng)產(chǎn)生的堆棧追蹤是:0strcmp(0x1a2,0x1c2)[“strcmp.s”:311scmp(p1=0x10001048,p2=0x1000105c)[“badqs.c”;13]2sst(0x10001048,0x10001074,0x400b20,0x4)[“qsort.c”:147]3qsort(0x10001048,0x1c2,0x4,0x400b20)[“qsort.c”:63]4main()[“badqs.c”:45]5–istart()[“crtltinit.s”:13]
程序死在strcmp里,送給strcmp的兩個(gè)指針都特別小,
這是出毛病的的一個(gè)明確標(biāo)志.堆棧追蹤給出每個(gè)函數(shù)調(diào)用的源程序行號(hào),在測(cè)試程序badqs.c里的第13行是;returnstrcmp(v1,v2);
失敗的調(diào)用,矛頭直指錯(cuò)誤.
139無線索,難辦的錯(cuò)誤經(jīng)驗(yàn)6:把錯(cuò)誤弄成可重現(xiàn)的.經(jīng)驗(yàn)7:分而治之
導(dǎo)致程序失敗的輸入弄得更小一點(diǎn),或用二分檢索的方式丟掉一半輸入,檢查輸出.經(jīng)驗(yàn)8:研究錯(cuò)誤的計(jì)數(shù)特性如拼寫錯(cuò)誤,字符丟失.經(jīng)驗(yàn)9:顯示輸出,使搜索局部化
顯示更多信息,驗(yàn)證你對(duì)程序的理解.經(jīng)驗(yàn)10:寫自檢測(cè)代碼140經(jīng)驗(yàn)11:寫記錄文件
記錄垮臺(tái)前發(fā)生的情況.
保證做了I/O緩沖區(qū)刷新,使最后的記錄也能出現(xiàn)在記錄文件里.
像printf一類的輸出函數(shù)通常對(duì)輸出采用緩沖方式,提高打印效率。在程序非正常終止時(shí),位于緩沖里的輸出信息可能就被丟掉了.
在C語言里調(diào)用一次函數(shù)fflush,就能保證把緩沖區(qū)里的數(shù)據(jù)寫出去.C++和Java語言對(duì)輸出流也有與fflush類似的函數(shù).
標(biāo)準(zhǔn)庫函數(shù)setbuf和setvbuf用于做緩沖控制,
調(diào)用setbuf(fp,NULL)將關(guān)閉對(duì)于流fp的緩沖.141
標(biāo)準(zhǔn)錯(cuò)誤流(stder.cerr和System.err)的默認(rèn)方式一般都不是緩沖的.經(jīng)驗(yàn)11:畫一個(gè)圖
圖形幫助理解數(shù)據(jù)結(jié)構(gòu)特別有效.
最后的手段經(jīng)驗(yàn)12:以步進(jìn)方式遍歷程序
概念性的錯(cuò)誤卻很簡單,如運(yùn)算符優(yōu)先級(jí),
用錯(cuò)了運(yùn)算符,程序縮寫形式與實(shí)際結(jié)構(gòu)不符,作用域錯(cuò)誤,局部變量與全局變量同名,全局變量侵犯了一個(gè)局部作用域,編輯之后遺留下某些東西,
草率的輸入,參數(shù)次序錯(cuò)又恰出現(xiàn)在類型無法發(fā)現(xiàn)的地方,你不知全局變量或共享變量被修改.142
算法或數(shù)據(jù)結(jié)構(gòu)里存在致命缺陷.
如用一組鏈接表操作函數(shù)來建立新元素,將它們鏈接在表的前面或后面,等等.
也寫一個(gè)測(cè)試程序,如:
?While(scanf(“%s%d”,name,&alue)!=EOF){?P=newitem(name,alue);?list1=addfront(list1,p);?List2=addend(list2,p);?}?For(p=list1;p!=NULL;p=p->next)?printf(“%s%d,p->name,p->value);143在第1個(gè)循環(huán)里,結(jié)點(diǎn)p被同時(shí)放進(jìn)兩個(gè)表里,打印時(shí),指針己被覺得亂七八槽了.
這種情況下,排錯(cuò)比較困難.錯(cuò)誤出現(xiàn)在測(cè)試代碼里.
注意,了解整個(gè)程序的結(jié)構(gòu),順著程序的實(shí)際工作流程,而不是頭腦里設(shè)想的流程.144經(jīng)驗(yàn)13:偶然也會(huì)遇到這種情況
問題確實(shí)出現(xiàn)在編譯系統(tǒng),或者庫,或者操作系統(tǒng),計(jì)算機(jī)硬件,環(huán)境里剛剛換過的什么東西.
如,很久前一個(gè)程序運(yùn)行在一個(gè)雙處理器上.程序中表達(dá)式1/2的計(jì)算結(jié)果有時(shí)為0.5,有時(shí)為0.7432.
其原因是一個(gè)處理器的浮點(diǎn)單元有毛病.
又如:電路板松了,當(dāng)機(jī)器發(fā)熱時(shí),電路板從插槽翹出,使更多的數(shù)據(jù)位與底板斷開,導(dǎo)致浮點(diǎn)計(jì)算低位出錯(cuò).145經(jīng)驗(yàn)14:不可重現(xiàn)的錯(cuò)誤
根據(jù)信息本身,找出非確定性行為
有的錯(cuò)誤不是算法本身的問題,而是有些代碼以某種方式使用了什么信息,這些信息在每一次程序運(yùn)行時(shí)又可能是不同的.
出現(xiàn)某個(gè)隨機(jī)值--檢查所有變量是否都正確地進(jìn)行了初始化.增加排錯(cuò)代碼之后錯(cuò)誤的行為改變了,甚至消失
--可能是一個(gè)存儲(chǔ)分配錯(cuò).排錯(cuò)代碼加入后,
改變了存儲(chǔ)安排,也可能改變了存儲(chǔ)的行為.
如輸出函數(shù),從printf到對(duì)話窗口,在工作過程中都要分配存儲(chǔ),可能把水?dāng)嚮?146
一個(gè)程序?qū)δ橙四芄ぷ?而對(duì)另一個(gè)人則不行
--是某些東西依賴于外部環(huán)境(程序需要讀的文件、環(huán)境變量、命令的查找路徑、各種默認(rèn)的東西和啟動(dòng)文件等)經(jīng)驗(yàn)15:其他人的程序錯(cuò)誤147小結(jié)帶著一種好心情,排錯(cuò)也是件愉快的事情,就像是解一個(gè)迷題.排錯(cuò)也是一種藝術(shù),要去實(shí)踐它.
書寫良好的代碼一開始包含的錯(cuò)誤就比較少,剩下的錯(cuò)誤也比較容易查清楚.
看到了一個(gè)程序,應(yīng)考慮出錯(cuò)的可能線索:
錯(cuò)誤從何來?熟不熟…
若無法發(fā)現(xiàn)好的線索,思考,縮小錯(cuò)誤范圍,分而治之。借助其他力量,排錯(cuò)工具。了解自己,易犯什么錯(cuò)誤。148
(6)什么時(shí)候停止測(cè)試
判斷系統(tǒng)故障數(shù)上升?還是下降?
故障注入(FaultSeeding)
用于估計(jì)一個(gè)程序中故障數(shù)量的技術(shù)基本方法:一人向程序中注入故障,
另一個(gè)人查找故障.
設(shè):S為種植的故障數(shù)
有:S/s=N/ns為測(cè)試中找到的種植的故障數(shù)
N=S*n/sN為程序中總的故障數(shù)
設(shè):S=100,
n為測(cè)試找到非種植故障數(shù)
s=50,n=20
缺點(diǎn):種植的故障類型難以確定.
則:N=40個(gè)故障
149
改進(jìn)的方法:
設(shè)兩個(gè)小組測(cè)同一個(gè)程序
x:Grop1發(fā)現(xiàn)的故障數(shù)
y:Grop2發(fā)現(xiàn)的故障數(shù)
q:共同發(fā)現(xiàn)的故障數(shù)q≤x,q≤yn:程序總故障數(shù)組1發(fā)現(xiàn)了組2發(fā)現(xiàn)的y個(gè)故障中的q個(gè)故障組1測(cè)試效率E1=x/n,E1=x/n=q/y
組2測(cè)試效率E2=y/n,E2=y/n=q/x
所以,n=q/(E1*E2)
設(shè):x=25,y=30,q=15
則:n=50(程序中約有50個(gè)故障)150
1.測(cè)試代碼的邊界情況
檢查條件所導(dǎo)致的分支是否正確;
檢查循環(huán)實(shí)際執(zhí)行的次數(shù)是否正確;
檢查不存在或空的輸入;
檢查單個(gè)輸入項(xiàng);
檢查一個(gè)正好填滿了的數(shù)組;等等.
觀點(diǎn):大部分錯(cuò)誤都出現(xiàn)在邊界上測(cè)試實(shí)例編程過程中測(cè)試151
測(cè)試代碼的邊界情況
模擬fgets,讀入一些字符,直到迂到一個(gè)換行或緩沖區(qū)滿了.
inti;
chars[MAX];
for(i=0;(s[i]=getchar())!=‘\n’&&i<MAX-1;++i)
;
s[--i]=‘\0’;第1個(gè)邊界測(cè)試:
讀入一個(gè)空行,一開始就是個(gè)換行符.結(jié)果如何?152循環(huán)在第1次重復(fù)時(shí)就結(jié)束了,這時(shí)i=0最后一行代碼i值減小到-1,并把一個(gè)空字節(jié)寫入s[-1]在數(shù)組開始之前,通過邊界測(cè)試發(fā)現(xiàn)錯(cuò)誤重寫循環(huán),用字符填充數(shù)組的方法:for(i=0;i<MAX-1;i++)if((s[i]=getchar())==‘\n’)break;
s[i]=‘\0’;
153重復(fù)前面邊界測(cè)試,對(duì)只有一個(gè)換行字符的行,程序能正確處理.i=0,第1個(gè)輸入字符跳出循環(huán),而‘\0’
被存入s[0]中
對(duì)一個(gè)或兩個(gè)字符之后是換行符的輸入做類似檢查,在接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教職工勞動(dòng)合同書
- 勞動(dòng)合同履行中的非法招聘問題研究
- 辦公用品采購合同書2024年
- 員工宿舍出租合同
- 【初中地理】《世界人口數(shù)量的變化》作業(yè)練習(xí) 2024-2025學(xué)年人教版地理七年級(jí)上冊(cè)
- 家庭教師兼職合同范例
- 老年人租房免責(zé)協(xié)議書經(jīng)典版
- 房產(chǎn)保密協(xié)議2024年
- 國外銷售代理合同范例
- 2024版勞務(wù)派遣合同書范本大全
- 登高車高空作業(yè)施工方案
- GB/T 15822.3-2024無損檢測(cè)磁粉檢測(cè)第3部分:設(shè)備
- 2024年第八屆全國醫(yī)藥行業(yè)特有職業(yè)技能競賽(物流服務(wù)師)理論考試題庫(含答案)
- 專題1.2絕對(duì)值(壓軸題專項(xiàng)講練)(人教版)(原卷版)
- 《科研誠信與學(xué)術(shù)規(guī)范》學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 3 游戲中的觀察(教學(xué)設(shè)計(jì))-2024-2025學(xué)年科學(xué)一年級(jí)上冊(cè)教科版
- 江蘇省南京市棲霞區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期中語文試題及答案
- 主管領(lǐng)導(dǎo)對(duì)分管領(lǐng)導(dǎo)廉政談話記錄
- 2024年江蘇省高考政治試卷(真題+答案)
- 電梯安裝改造維修質(zhì)量保證手冊(cè)-電梯資質(zhì)認(rèn)證用資料正規(guī)機(jī)構(gòu)編制符合TSG-2019要求
- 人音版音樂一年級(jí)上冊(cè)第3課《中華人民共和國國歌》齊唱說課稿
評(píng)論
0/150
提交評(píng)論