軟件測(cè)試技術(shù)與實(shí)踐:?jiǎn)卧獪y(cè)試-2015_第1頁(yè)
軟件測(cè)試技術(shù)與實(shí)踐:?jiǎn)卧獪y(cè)試-2015_第2頁(yè)
軟件測(cè)試技術(shù)與實(shí)踐:?jiǎn)卧獪y(cè)試-2015_第3頁(yè)
軟件測(cè)試技術(shù)與實(shí)踐:?jiǎn)卧獪y(cè)試-2015_第4頁(yè)
軟件測(cè)試技術(shù)與實(shí)踐:?jiǎn)卧獪y(cè)試-2015_第5頁(yè)
已閱讀5頁(yè),還剩98頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單元測(cè)試9/21/20221課前問(wèn)題1. 單元測(cè)試就是模塊測(cè)試嗎?2. 單元測(cè)試應(yīng)該誰(shuí)來(lái)做?9/21/20222本章內(nèi)容為什么要做單元測(cè)試?單元測(cè)試的概述 單元測(cè)試的方法和技術(shù)單元測(cè)試的內(nèi)容單元測(cè)試的過(guò)程9/21/202231 為什么要做單元測(cè)試對(duì)缺陷分析觀察結(jié)果原因思考9/21/20224對(duì)缺陷分析的思考故障發(fā)現(xiàn)階段需求缺陷設(shè)計(jì)缺陷編碼缺陷測(cè)試缺陷總計(jì)需求階段22設(shè)計(jì)階段105060編碼和單元測(cè)試251522系統(tǒng)測(cè)試12100103驗(yàn)收測(cè)試002020總21/20225觀察結(jié)果編碼階段引入的缺陷遠(yuǎn)遠(yuǎn)多于其它階段系統(tǒng)測(cè)試發(fā)現(xiàn)的缺陷大多數(shù)是編碼缺陷測(cè)試版本頻繁,測(cè)試和項(xiàng)

2、目進(jìn)度被無(wú)休止的拖延。 Why?9/21/20226原因1是否開(kāi)發(fā)人員水平不夠?是否開(kāi)發(fā)人員工作強(qiáng)度或工作時(shí)間不夠? 不是!9/21/20227原因2傳統(tǒng)的開(kāi)發(fā)觀念?開(kāi)發(fā)人員的任務(wù)是完成編程,讓系統(tǒng)正確運(yùn)行起來(lái)。程序調(diào)試通過(guò)任務(wù)就完成了。自信自己的程序不會(huì)出錯(cuò)。實(shí)際上:開(kāi)發(fā)人員的任務(wù)是完成程序,直到交付和維護(hù)。人的失誤是不可避免的,無(wú)論多小心,都會(huì)有錯(cuò)誤。9/21/20228原因3測(cè)試是測(cè)試人員的事情,我們只管編程和改正BUG? 錯(cuò)! 測(cè)試是什么?9/21/20229測(cè)試生命周期9/21/202210測(cè)試分類確認(rèn)測(cè)試 確認(rèn)系統(tǒng)是否滿足了用戶的意圖。系統(tǒng)測(cè)試 將整個(gè)系統(tǒng)的硬件、軟件和人員等所有元

3、素結(jié)合在一起的測(cè)試,關(guān)注點(diǎn)是需求的驗(yàn)證:系統(tǒng)是否正確完成了需要的功能。集成測(cè)試 部分模塊的組合測(cè)試,驗(yàn)證接口和集成問(wèn)題。單元測(cè)試9/21/202211原因4開(kāi)發(fā)進(jìn)度和任務(wù)緊,沒(méi)有時(shí)間做自測(cè)?必須關(guān)注質(zhì)量,如果質(zhì)量保證不了:1.太多缺陷,返工和測(cè)試延長(zhǎng),進(jìn)度反而更慢。2.即使搶了市場(chǎng)先機(jī),還是會(huì)被對(duì)手超過(guò)。對(duì)自測(cè)的時(shí)間和工作投入,可以在測(cè)試階段和維護(hù)階段撈回來(lái),從總體上縮短項(xiàng)目周期。項(xiàng)目經(jīng)理應(yīng)該足夠重視單元測(cè)試,并為單元測(cè)試安排足夠的時(shí)間。業(yè)界經(jīng)驗(yàn),1:19/21/202212如果把單元測(cè)試的任務(wù)堆積到系統(tǒng)測(cè)試階段,將會(huì)怎樣?大量的故障堆積在項(xiàng)目中后期:項(xiàng)目后10%的工作,占用了項(xiàng)目90%的時(shí)間

4、。故障難以定位故障飄忽不定開(kāi)發(fā)、測(cè)試人員疲于奔命9/21/202213原因5單元測(cè)試難做? 單元測(cè)試比編寫(xiě)程序更難嗎?Yes。9/21/202214XP極限編程測(cè)試先行,開(kāi)發(fā)以測(cè)試為導(dǎo)向?qū)懖怀鰷y(cè)試用例,就談不上編寫(xiě)單元代碼開(kāi)發(fā)一個(gè)單元的代碼的步驟:1.設(shè)計(jì)和編寫(xiě)測(cè)試它的用例代碼2.編寫(xiě)單元的代碼3.使用前面的用例測(cè)試它單元測(cè)試是編碼的一部分!9/21/2022152 單元測(cè)試概述9/21/202216單元測(cè)試是什么?單元測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位 程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。 Unit:函數(shù),源代碼文件,類把測(cè)試比作是清洗一臺(tái)機(jī)器: 系統(tǒng)測(cè)試就是清除機(jī)器外面的塵土。 集成測(cè)試就是保

5、證機(jī)器各個(gè)部件的接頭處干凈。 單元測(cè)試就是清洗各個(gè)零件的內(nèi)部。9/21/202217單元測(cè)試不是不是模塊測(cè)試?不是子系統(tǒng)測(cè)試不是功能測(cè)試?9/21/202218單元測(cè)試是自測(cè)的主要方式軟件模塊自測(cè)的手段:代碼走查:?jiǎn)稳嘶蚨嗳嗽u(píng)審閱讀代碼軟件模塊的系統(tǒng)級(jí)測(cè)試:從軟件模塊完成的功能方面,放在整個(gè)系統(tǒng)中進(jìn)行驗(yàn)證。單元測(cè)試:設(shè)計(jì)和編寫(xiě)測(cè)試用例,運(yùn)行檢查9/21/202219單元測(cè)試定義單元測(cè)試,是針對(duì)軟件設(shè)計(jì)的最小單位 代碼模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。 函數(shù) 文件(.c .cpp .java .pas) 類9/21/202220單元測(cè)試的對(duì)象單元單元測(cè)試的對(duì)象是軟件設(shè)計(jì)的最小單位單元。9/21/2

6、02221單元的特征軟件系統(tǒng)的基本組成單位由一個(gè)程序員完成在系統(tǒng)詳細(xì)規(guī)范中詳細(xì)說(shuō)明其功能特性能被單獨(dú)地匯編和測(cè)試規(guī)模較小,邏輯較簡(jiǎn)單9/21/202222單元測(cè)試特點(diǎn)關(guān)注程序的基本組成部分若干個(gè)單元可以并行測(cè)試發(fā)現(xiàn)錯(cuò)誤后容易隔離和定位規(guī)模和復(fù)雜性較低,可利用多種測(cè)試技術(shù)進(jìn)行比較充分細(xì)致的測(cè)試 9/21/202223單元測(cè)試關(guān)注點(diǎn)代碼 關(guān)注代碼問(wèn)題,而不是功能問(wèn)題。 功能測(cè)試是測(cè)試部的職責(zé)。9/21/202224單元測(cè)試內(nèi)容單元接口局部數(shù)據(jù)結(jié)構(gòu)重要的執(zhí)行路徑錯(cuò)誤處理的路徑影響上述幾點(diǎn)的邊界條件9/21/202225單元測(cè)試時(shí)機(jī)盡早進(jìn)行9/21/202226單元測(cè)試人選由誰(shuí)去做由誰(shuí)去做:通常由開(kāi)發(fā)

7、人員自己測(cè)試 。也可是專職測(cè)試人員。也可是其他開(kāi)發(fā)人員。開(kāi)發(fā)者是單元測(cè)試的最佳人選9/21/202227單元測(cè)試應(yīng)該開(kāi)發(fā)人員來(lái)做代碼級(jí)的測(cè)試效率:了解和熟悉程序方法:白盒,不可能讓測(cè)試人員讀懂程序手段:通常需要通過(guò)編寫(xiě)程序角度:開(kāi)發(fā)人員提高質(zhì)量覺(jué)悟9/21/202228單元測(cè)試的目標(biāo)單元測(cè)試的目標(biāo):確保模塊被正確地編碼 。使用詳細(xì)設(shè)計(jì)描述作為指南,對(duì)重要的控制路徑進(jìn)行測(cè)試以發(fā)現(xiàn)模塊內(nèi)的錯(cuò)誤。9/21/202229單元測(cè)試的依據(jù)單元測(cè)試的依據(jù)是詳細(xì)設(shè)計(jì)描述。9/21/202230單元測(cè)試退出準(zhǔn)則什么時(shí)候可以停止:通常是當(dāng)程序員感到代碼沒(méi)有缺陷時(shí) 。有的公司有量化的度量標(biāo)準(zhǔn)。(例如,當(dāng)某段時(shí)間內(nèi)該

8、模塊千行代碼錯(cuò)誤率小于某一閥值。)9/21/202231單元測(cè)試的量化要求舉例1.靜態(tài)檢查:編程規(guī)則觸犯率低于10%(每十行代碼至多有一個(gè)編碼規(guī)范錯(cuò)誤)2.動(dòng)態(tài)檢查:無(wú)內(nèi)存泄漏,無(wú)越界讀寫(xiě),無(wú)未處理異常3.測(cè)試用例: 語(yǔ)句覆蓋90%,關(guān)鍵模塊100% 判定覆蓋80%(關(guān)鍵模塊),條件覆蓋不要求 接口邊界檢查(關(guān)鍵模塊:根據(jù)80%原則,要求最復(fù)雜的,缺陷最集中的20%的單元) 最低測(cè)試范圍:修改的代碼和新增的代碼。單元測(cè)試記錄和文檔故障記錄:通常沒(méi)有記錄 ?;蛴涗洸蝗?。文檔:?jiǎn)卧獪y(cè)試規(guī)程單元測(cè)試報(bào)告9/21/2022333單元測(cè)試方法 可用手段:白盒測(cè)試方法 靜態(tài)分析 動(dòng)態(tài)分析 黑盒測(cè)試方法9/

9、21/202234單元測(cè)試方法怎樣去測(cè)試: 白盒為主 系統(tǒng)內(nèi)多個(gè)模塊可以并行地進(jìn)行測(cè)試。關(guān)注覆蓋率(應(yīng)對(duì)模塊內(nèi)所有重要的控制路徑設(shè)計(jì)測(cè)試用例,以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤。 )關(guān)注運(yùn)行錯(cuò)誤:如邏輯錯(cuò)誤,算法錯(cuò)誤,內(nèi)存錯(cuò)誤,異常錯(cuò)誤。黑盒為輔 接口錯(cuò)誤9/21/202235為什么要白盒測(cè)試9/21/202236白盒測(cè)試技術(shù)實(shí)現(xiàn)手段:設(shè)計(jì)驅(qū)動(dòng)和樁 為了得到一個(gè)完全隔離的單元,把此單元以外的代碼進(jìn)行隔離和控制。 接口(輸入輸出),全局變量,子調(diào)用實(shí)現(xiàn)方法:代碼覆蓋 確保程序運(yùn)行過(guò)所有邏輯路徑,各個(gè)角落得到清掃! 9/21/202237為什么單元要做覆蓋率測(cè)試?覆蓋率測(cè)試是單元測(cè)試的核心!是清除軟件代碼BU

10、G的最主要的手段!9/21/202238測(cè)試覆蓋率語(yǔ)句覆蓋率 以Statement為單位判定覆蓋率 以分支為單位條件覆蓋率 以邏輯條件為單位條件覆蓋判定覆蓋語(yǔ)句覆蓋9/21/202239白盒用例設(shè)計(jì)方法控制流: 基本路徑法,條件測(cè)試法數(shù)據(jù)流 循環(huán)測(cè)試9/21/202240基本路徑法控制流圖節(jié)點(diǎn),邊,區(qū)域9/21/202241工具 Logiscope Audit1.根據(jù)代碼生成程序流程圖和控制流圖。2.自動(dòng)計(jì)算環(huán)形復(fù)雜度。3.流圖和代碼對(duì)應(yīng)。借助Logiscope Audit和Logiscope TestChecker,可以更加有效的進(jìn)行單元測(cè)試。9/21/202242循環(huán)測(cè)試循環(huán)分類:簡(jiǎn)單循環(huán)

11、,串接循環(huán),嵌套循環(huán),不規(guī)則循環(huán)。簡(jiǎn)單循環(huán)9/21/202243循環(huán)測(cè)試嵌套循環(huán)串接循環(huán)9/21/202244循環(huán)測(cè)試不規(guī)則循環(huán)9/21/202245循環(huán)的測(cè)試用例設(shè)計(jì)簡(jiǎn)單循環(huán)的測(cè)試集(假設(shè)有n次循環(huán)):1)整個(gè)跳過(guò)循環(huán)2)只有一次通過(guò)循環(huán)3)兩次通過(guò)循環(huán)4)某個(gè)m次通過(guò)循環(huán),mn5)n-1,n,n+1次通過(guò)循環(huán)9/21/202246循環(huán)的測(cè)試用例設(shè)計(jì)嵌套循環(huán)的測(cè)試集1.從最內(nèi)層循環(huán)開(kāi)始,把其它循環(huán)設(shè)為最小值。2.從對(duì)最內(nèi)層循環(huán)使用簡(jiǎn)單循環(huán)測(cè)試,使得外層循環(huán)為最小值3.由內(nèi)到外構(gòu)造下一個(gè)循環(huán)的測(cè)試,但其它外層循環(huán)最小,內(nèi)層循環(huán)為典型值。 4.繼續(xù)直到全部循環(huán)測(cè)試完。 9/21/202247循環(huán)

12、的測(cè)試用例設(shè)計(jì)串接循環(huán)的測(cè)試集如果兩個(gè)循環(huán)相互獨(dú)立,分別采用簡(jiǎn)單循環(huán)方式。如果互相不獨(dú)立,比如上一個(gè)循環(huán)的計(jì)數(shù)是下一個(gè)循環(huán)計(jì)數(shù)的初始值,推薦使用嵌套循環(huán)方式。9/21/202248循環(huán)的測(cè)試用例設(shè)計(jì)不規(guī)則循環(huán) 盡量把這些循環(huán)重新設(shè)計(jì)為結(jié)構(gòu)化的程序設(shè)計(jì)。 結(jié)構(gòu)化編程的定義:任何一個(gè)控制流圖,如果可以化簡(jiǎn)為環(huán)形復(fù)雜度為1的圖,它就滿足了結(jié)構(gòu)化編程的要求。 9/21/202249靜態(tài)分析編程規(guī)范檢查 遵循編程規(guī)范,可以大大降低編碼缺陷。標(biāo)準(zhǔn)有:C/C+軟件編程規(guī)范Java軟件編程規(guī)范 Delphi代碼編程規(guī)范 GUI通用軟件界面規(guī)范代碼質(zhì)量分析 分析代碼結(jié)構(gòu),給出復(fù)雜度,可維護(hù)性,穩(wěn)定性,可讀性等度

13、量,找出缺陷可能性最多的代碼,進(jìn)行修改和單元測(cè)試。9/21/202250靜態(tài)分析工具Logiscope RuleChecker C/C+,Java Audit C/C+,JavaCodeClearCodeWizardPCLINT9/21/202251動(dòng)態(tài)分析內(nèi)存錯(cuò)誤:內(nèi)存泄漏,內(nèi)存(數(shù)組)越界讀寫(xiě),讀未經(jīng)過(guò)初始化的內(nèi)存,內(nèi)存分配錯(cuò)誤。異常錯(cuò)誤:沒(méi)有處理的異常覆蓋率檢查:尋找沒(méi)有運(yùn)行的代碼, 內(nèi)部邊界點(diǎn),強(qiáng)制錯(cuò)誤運(yùn)行效率分析:分析運(yùn)行瓶頸,提高性能9/21/202252動(dòng)態(tài)分析工具1.Rational PurifyPlus(PurifyPlus RealTime) Purify 內(nèi)存和運(yùn)行錯(cuò)誤

14、PureCovarage 代碼行覆蓋率 Quanlity 運(yùn)行效率分析2.Parasoft Insure+3.BoundChecker9/21/202253黑盒測(cè)試把測(cè)試對(duì)象看做一個(gè)黑盒子,不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只關(guān)注接口。 待測(cè)單元(UUT)9/21/202254黑盒測(cè)試技術(shù)實(shí)現(xiàn)手段:設(shè)計(jì)驅(qū)動(dòng)和樁 為了得到一個(gè)完全隔離的單元,把此單元以外的代碼進(jìn)行隔離和控制。 接口(輸入輸出),全局變量,調(diào)用實(shí)現(xiàn)方法:用數(shù)據(jù)對(duì)接口進(jìn)行測(cè)試 確保接口正確,預(yù)定的輸入,產(chǎn)生預(yù)料中的輸出。 9/21/202255黑盒用例設(shè)計(jì)方法按照功能需求等價(jià)類劃分邊界值9/21/202256測(cè)試用例代碼打樁編寫(xiě)驅(qū)

15、動(dòng)工具 C+Test(自動(dòng)生成驅(qū)動(dòng)、樁和部分用例數(shù)據(jù)) Rational Test RealTime,VectorCast(自動(dòng)生成驅(qū)動(dòng)、樁) JUnit,CppUnit,DUnit,cUnit(提供代碼框架)利用開(kāi)發(fā)工具的Debug功能 斷點(diǎn)和修改變量,單步,插樁(Instrumentation)9/21/2022574單元測(cè)試的內(nèi)容單元測(cè)試內(nèi)容包括:1 模塊接口測(cè)試;2 模塊局部數(shù)據(jù)結(jié)構(gòu)測(cè)試;3 模塊邊界條件測(cè)試;4 模塊中所有獨(dú)立執(zhí)行通路測(cè)試;5 模塊的各條錯(cuò)誤處理通路測(cè)試 9/21/2022584.1模塊接口測(cè)試模塊接口測(cè)試是單元測(cè)試的基礎(chǔ)。對(duì)模塊接口的測(cè)試保證在測(cè)試時(shí)進(jìn)出程序單元的數(shù)

16、據(jù)流是正確的。只有在數(shù)據(jù)能正確流入、流出模塊的前提下,其他測(cè)試才有意義。所以模塊接口測(cè)試要在其它測(cè)試之前進(jìn)行。 9/21/202259模塊接口測(cè)試內(nèi)容測(cè)試接口正確與否應(yīng)該考慮下列因素:1 輸入的實(shí)際參數(shù)與形式參數(shù)的個(gè)數(shù)是否相同;2 輸入的實(shí)際參數(shù)與形式參數(shù)的屬性是否匹配;3 輸入的實(shí)際參數(shù)與形式參數(shù)的量綱是否一致;4 調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的個(gè)數(shù)是否與被調(diào)模塊的形參個(gè)數(shù)相同;9/21/202260模塊接口測(cè)試內(nèi)容5 調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的屬性是否與被調(diào)模塊的形參屬性匹配;6調(diào)用其他模塊時(shí)所給實(shí)際參數(shù)的量綱是否與被調(diào)模塊的形參量綱一致;7 調(diào)用預(yù)定義函數(shù)時(shí)所用參數(shù)的個(gè)數(shù)、屬性和次序是否

17、正確;8 是否存在與當(dāng)前入口點(diǎn)無(wú)關(guān)的參數(shù)引用;9/21/202261模塊接口測(cè)試內(nèi)容9 是否修改了只讀型參數(shù);10 對(duì)跨模塊的全局變量的定義是否一致;11是否把某些約束作為參數(shù)傳遞。 9/21/202262模塊接口測(cè)試內(nèi)容當(dāng)一個(gè)模塊執(zhí)行外部I/O操作的時(shí)候,必須進(jìn)行附加的接口測(cè)試,考慮下列因素:1 文件屬性是否正確;2 OPEN/CLOSE語(yǔ)句是否正確;3 格式說(shuō)明與輸入輸出語(yǔ)句是否匹配;9/21/202263模塊接口測(cè)試內(nèi)容4緩沖區(qū)大小與記錄長(zhǎng)度是否匹配;5文件使用前是否已經(jīng)打開(kāi);6是否處理了文件結(jié)束條件;7是否處理了輸入/輸出錯(cuò)誤;8在輸出信息中是否有文字性錯(cuò)誤。 9/21/2022644

18、.2模塊局部數(shù)據(jù)結(jié)構(gòu)測(cè)試 對(duì)局部數(shù)據(jù)結(jié)構(gòu)的檢查保證臨時(shí)存儲(chǔ)的數(shù)據(jù)在算法執(zhí)行的整個(gè)過(guò)程中都能維持其完整性。局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)全局?jǐn)?shù)據(jù)?9/21/202265檢查局部數(shù)據(jù)結(jié)構(gòu)檢查局部數(shù)據(jù)結(jié)構(gòu)是為了保證臨時(shí)存儲(chǔ)在模塊內(nèi)的數(shù)據(jù)在程序執(zhí)行過(guò)程中完整、正確。局部數(shù)據(jù)結(jié)構(gòu)往往是錯(cuò)誤的根源,應(yīng)仔細(xì)設(shè)計(jì)測(cè)試用例。9/21/202266檢查局部數(shù)據(jù)結(jié)構(gòu)常見(jiàn)錯(cuò)誤:1 不正確或者不一致的數(shù)據(jù)類型描述;2變量無(wú)初值;3變量初始化或省缺值有錯(cuò);4不正確的變量名(拼錯(cuò)或不正確地截?cái)啵?5出現(xiàn)上溢、下溢和地址錯(cuò)誤。 9/21/202267全局?jǐn)?shù)據(jù)除了局部數(shù)據(jù)結(jié)構(gòu)外,單元測(cè)試時(shí)還應(yīng)該查清全局?jǐn)?shù)據(jù)(例如多個(gè)模塊共享全局?jǐn)?shù)據(jù),

19、其它模塊修改全局?jǐn)?shù)據(jù)對(duì)本模塊的影響評(píng)估)對(duì)模塊的影響。 9/21/2022684.3模塊邊界條件測(cè)試邊界條件測(cè)試是單元測(cè)試中最重要的一項(xiàng)任務(wù)。對(duì)邊界條件的測(cè)試保證模塊在極限或嚴(yán)格的情形下仍然能夠正確執(zhí)行。眾所周知,軟件經(jīng)常在邊界上失效,采用邊界值分析技術(shù),針對(duì)邊界值及其左、右設(shè)計(jì)測(cè)試用例,很有可能發(fā)現(xiàn)新的錯(cuò)誤。 9/21/2022694.4模塊中獨(dú)立執(zhí)行路徑測(cè)試 單元測(cè)試中,應(yīng)對(duì)模塊控制結(jié)構(gòu)中的每一條獨(dú)立執(zhí)行路徑(基本路徑)進(jìn)行遍歷測(cè)試,以保證模塊中每條語(yǔ)句至少執(zhí)行一次。對(duì)執(zhí)行路徑的測(cè)試(即代碼覆蓋測(cè)試)是單元測(cè)試中最主要的任務(wù)。此時(shí)基本路徑測(cè)試和循環(huán)測(cè)試是最常用且最有效的測(cè)試技術(shù)。 9/21

20、/202270模塊中獨(dú)立執(zhí)行路徑的測(cè)試 測(cè)試用例應(yīng)能發(fā)現(xiàn)由于錯(cuò)誤計(jì)算、不正確的比較、或者不正常的控制流而產(chǎn)生的錯(cuò)誤。還有其他常見(jiàn)的錯(cuò)誤,如下:9/21/202271計(jì)算中常見(jiàn)的錯(cuò)誤計(jì)算中常見(jiàn)的錯(cuò)誤包括: 誤解或用錯(cuò)了算術(shù)優(yōu)先級(jí);混合類型的運(yùn)算;變量初始化不正確;精度不夠精確;表達(dá)式的不正確符號(hào)表示。9/21/202272比較判斷常見(jiàn)錯(cuò)誤比較判斷和控制流常常緊密地耦合在一起(比如,控制流的轉(zhuǎn)移是在比較之后發(fā)生的),測(cè)試用例應(yīng)當(dāng)能夠發(fā)現(xiàn)下列錯(cuò)誤:不同數(shù)據(jù)類型之間進(jìn)行比較;不正確地邏輯操作或優(yōu)先級(jí);應(yīng)該相等的地方由于精度的錯(cuò)誤而不能相等。(因計(jì)算機(jī)表示的局限性)9/21/202273比較判斷常見(jiàn)錯(cuò)誤

21、不正確的比較或變量出錯(cuò);不正常的或者不存在的循環(huán)終止條件;當(dāng)遇到分支循環(huán)的時(shí)候不能退出;不適當(dāng)?shù)匦薷难h(huán)變量。 9/21/2022744.5模塊的錯(cuò)誤處理路徑測(cè)試 好的設(shè)計(jì)應(yīng)能預(yù)見(jiàn)各種出錯(cuò)條件,并預(yù)設(shè)各種出錯(cuò)處理路徑。當(dāng)錯(cuò)誤真的發(fā)生的時(shí)候,錯(cuò)誤處理被建立,以重定向或者干凈地終止處理。在錯(cuò)誤處理部分應(yīng)當(dāng)考慮的潛在錯(cuò)誤有下列情況:輸出的出錯(cuò)描述信息難以理解;所報(bào)的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不一致;9/21/202275模塊的錯(cuò)誤處理路徑測(cè)試 錯(cuò)誤條件在錯(cuò)誤處理之前就引起了系統(tǒng)異常;異常處理不當(dāng);錯(cuò)誤描述中未能提供足夠的信息來(lái)幫助確定錯(cuò)誤發(fā)生的位置。常見(jiàn)壞現(xiàn)象:把錯(cuò)誤處理路徑加到了軟件中,但從不進(jìn)行出錯(cuò)路

22、徑的測(cè)試。 9/21/2022765單元測(cè)試過(guò)程9/21/202277按造哪些步驟做單元測(cè)試推薦的步驟:1.靜態(tài)檢查:用工具Logiscope或者人工檢查單2.動(dòng)態(tài)檢查:用工具PurifyPlus或者人工調(diào)試3.測(cè)試用例執(zhí)行(工具或人工)設(shè)計(jì)測(cè)試用例及數(shù)據(jù);(提前)編寫(xiě)測(cè)試用例代碼、腳本、驅(qū)動(dòng)模塊和樁模塊;(提前)運(yùn)行測(cè)試用例,記錄結(jié)果。(在步驟1,2之后進(jìn)行) 單元測(cè)試的輸入軟件詳細(xì)設(shè)計(jì)(可以是代碼)待測(cè)單元列表和代碼可重用的已有測(cè)試用例9/21/202279單元測(cè)試的輸出1.編程規(guī)范檢查報(bào)告。(工具生成或人工編制)2.運(yùn)行異常檢查報(bào)告。(工具生成或人工編制)3.測(cè)試用例執(zhí)行報(bào)告。(工具生成

23、或人工編制) 測(cè)試用例代碼 測(cè)試用例數(shù)據(jù)和說(shuō)明 運(yùn)行結(jié)果(覆蓋率統(tǒng)計(jì))合格準(zhǔn)則:同行可以讀懂,可以用它們來(lái)重新驗(yàn)證或做回歸測(cè)試,鼓勵(lì)使用工具。 9/21/2022805.1單元測(cè)試用例設(shè)計(jì)單元測(cè)試常被看作編碼步驟的附屬品。在源代碼被開(kāi)發(fā)、編譯調(diào)試、審查后,單元測(cè)試用例設(shè)計(jì)就開(kāi)始了,也有可能提前。對(duì)設(shè)計(jì)信息的復(fù)審可能能夠?yàn)榻⑶懊嬗懻摰拿恳活愬e(cuò)誤的測(cè)試用例提供指導(dǎo)。測(cè)試用例的設(shè)計(jì)應(yīng)與設(shè)計(jì)信息的復(fù)審工作相結(jié)合,根據(jù)設(shè)計(jì)信息選取測(cè)試數(shù)據(jù),將增大發(fā)現(xiàn)上述各類錯(cuò)誤的可能性。在確定測(cè)試用例的同時(shí),應(yīng)給出期望結(jié)果。 9/21/202281單元測(cè)試用例設(shè)計(jì)正常數(shù)據(jù):在測(cè)試中所用的正常數(shù)據(jù)的量是最大的,而且也是

24、最關(guān)鍵的。少量的測(cè)試數(shù)據(jù)不能完全覆蓋需求,但我們要從中提取出一些具有高度代表性的數(shù)據(jù)作為測(cè)試數(shù)據(jù),以減少測(cè)試時(shí)間。 邊緣數(shù)據(jù):邊緣測(cè)試是界于正常數(shù)據(jù)和錯(cuò)誤數(shù)據(jù)之間的一種數(shù)據(jù)。它可以針對(duì)某一種編程語(yǔ)言、編程環(huán)境或特定的數(shù)據(jù)庫(kù)而專門設(shè)定。9/21/202282單元測(cè)試用例設(shè)計(jì)例如若使用SQL Server數(shù)據(jù)庫(kù),則可把SQL Server關(guān)鍵字(如:;AS;Join等)設(shè)為邊緣數(shù)據(jù)。其它邊緣數(shù)據(jù)還有:HTML的HTML;等關(guān)鍵字以及空格、負(fù)數(shù)、超長(zhǎng)字符等。邊緣數(shù)據(jù)要靠測(cè)試人員的豐富經(jīng)驗(yàn)來(lái)制定。 錯(cuò)誤數(shù)據(jù):顯而易見(jiàn),錯(cuò)誤數(shù)據(jù)就是編寫(xiě)與程序輸入規(guī)范不符的數(shù)據(jù)從而檢測(cè)輸入篩選、錯(cuò)誤處理等程序的分支。 9

25、/21/2022835.2代碼靜態(tài)檢查方法:審查走查通過(guò)代碼靜態(tài)檢查找到的錯(cuò)誤可以比測(cè)試用例測(cè)試所能找到的錯(cuò)誤更加深入;并且發(fā)現(xiàn)錯(cuò)誤的時(shí)間也比測(cè)試用例要早。代碼檢查要以代碼標(biāo)準(zhǔn)(根各公司具體情況自行制定)為依據(jù)。(編程規(guī)范) 9/21/202284代碼靜態(tài)檢查內(nèi)容 代碼風(fēng)格和規(guī)則審核 程序設(shè)計(jì)和結(jié)構(gòu)的審核 業(yè)務(wù)邏輯的審核 9/21/202285代碼風(fēng)格和規(guī)則檢查代碼風(fēng)格和規(guī)則的審核是在每個(gè)程序員完成一個(gè)模塊或類的 時(shí)候要進(jìn)行編碼規(guī)范的檢查。要召開(kāi)審核會(huì)議讓所有的項(xiàng)目組人員都參加。在會(huì)前項(xiàng)目經(jīng)理要做一個(gè)檢查表,以表的內(nèi)容為檢查依據(jù),檢查表的內(nèi)容主要是檢查的要點(diǎn)。在審核會(huì)上項(xiàng)目組的每一個(gè)人員都能看

26、到自己和其他人員的編碼問(wèn)題,從而起到預(yù)防的作用。這些問(wèn)題都要被解決,并且解決的結(jié)果要在審議會(huì)上被確認(rèn)。自動(dòng)檢查工具 9/21/202286程序設(shè)計(jì)和結(jié)構(gòu)的審核 進(jìn)行程序設(shè)計(jì)和結(jié)構(gòu)的審議是因?yàn)殚_(kāi)發(fā)工具的不同和項(xiàng)目時(shí)間的限制而造成設(shè)計(jì)不詳細(xì)。比較深入的設(shè)計(jì)通常是在編碼階段完成的,但由于程序人員和設(shè)計(jì)人員的經(jīng)驗(yàn)是不同的,所以會(huì)出現(xiàn)很大的問(wèn)題。我們引入了程序設(shè)計(jì)和結(jié)構(gòu)審核來(lái)保證質(zhì)量。審核人員要有先進(jìn)的技術(shù)開(kāi)發(fā)經(jīng)驗(yàn)。9/21/202287程序設(shè)計(jì)和結(jié)構(gòu)的審核 在審核之前也要一個(gè)審核列表,列出主要幾項(xiàng),如:程序的概要、詳細(xì)設(shè)計(jì)。但僅局限于列表是不夠的,審議人員 還要審議程序的精巧度和具有創(chuàng)造力的方面,這只

27、能靠經(jīng)驗(yàn)而不能只靠列表中的內(nèi)容來(lái)審議。對(duì)于不同的程序員所檢測(cè)代碼的寬度和深度也是不同的。項(xiàng)目經(jīng)理可以根據(jù)程序員經(jīng)驗(yàn)的不同制定被審議人員的寬度和深度。例如:年輕的程序員要審議所有代碼。但有經(jīng)驗(yàn)的就可適當(dāng)減少。 9/21/202288業(yè)務(wù)邏輯性審議業(yè)務(wù)邏輯性審議必須要在代碼完成后審議。業(yè)務(wù)邏輯審議實(shí)際上是審議單元模塊的功能。這些功能是以系統(tǒng)說(shuō)明為依據(jù)的。審議人員要有開(kāi)發(fā)的經(jīng)驗(yàn)并且對(duì)系統(tǒng)也要熟悉。審議人員通過(guò)執(zhí)行程序從而了解底層代碼的狀態(tài)。這階段的審議實(shí)際也包含了前兩種審議,因?yàn)閷徸h者也可以通過(guò)最后的結(jié)果檢測(cè)單元模塊設(shè)計(jì)和結(jié)構(gòu)的準(zhǔn)確性。 9/21/202289單元測(cè)試過(guò)程代碼審查以上三種審議都要耗費(fèi)

28、一定的時(shí)間和資源,但是它卻能更早地發(fā)現(xiàn)和解決不易顯現(xiàn)的錯(cuò)誤。 代碼審查通過(guò)后,我們終于可以使用測(cè)試用例來(lái)進(jìn)行代碼測(cè)試了。 9/21/2022905.3代碼動(dòng)態(tài)檢查它主要包括: 編譯調(diào)試內(nèi)存泄漏檢查(工具)9/21/2022915.4測(cè)試用例執(zhí)行它主要包括: 功能測(cè)試 代碼覆蓋測(cè)試性能和健壯性測(cè)試9/21/202292功能測(cè)試我們可使用已編好的用例并以正常數(shù)據(jù)測(cè)試用例進(jìn)行測(cè)試,若不能正常運(yùn)行則要用調(diào)試工具調(diào)試。在這階段,我們要用大量正常數(shù)據(jù)去測(cè)試。測(cè)試后,該程序應(yīng)可在絕大多數(shù)的正常數(shù)據(jù)中運(yùn)行。 9/21/202293代碼覆蓋測(cè)試目標(biāo): 測(cè)試到每一個(gè)最小語(yǔ)句的代碼 測(cè)試到所有的輸出結(jié)果 我們應(yīng)該通過(guò)一步步的調(diào)試去運(yùn)行每個(gè)程序的所有語(yǔ)句和分支。如果我們想要百分之百地覆蓋就應(yīng)適當(dāng)運(yùn)用邊緣數(shù)據(jù)和錯(cuò)誤數(shù)據(jù)。測(cè)試在這個(gè)階段的質(zhì)量是難以掌握的。它基于程序員的責(zé)任心和經(jīng)驗(yàn)。當(dāng)這階段完成后,每個(gè)程序員所測(cè)的深度也是不同的。 。 9/21/202294性能和健壯性測(cè)試性能(代碼行性能分析工具):找到瓶頸,改進(jìn)。穩(wěn)定性(健壯性):內(nèi)存泄漏、資源吊死9/21/202295單元測(cè)試環(huán)境驅(qū)動(dòng)模塊樁模塊樁模塊樁模塊被測(cè)單元9/21/202296單元測(cè)試驅(qū)動(dòng)模塊和樁模塊驅(qū)動(dòng)模塊: 用以模擬被測(cè)單元的上層模塊,測(cè)試執(zhí)行時(shí)由驅(qū)動(dòng)模塊調(diào)用被測(cè)單元使其運(yùn)行。樁模塊: 模擬被測(cè)單元

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論