課件05-嵌入式軟件測試_第1頁
課件05-嵌入式軟件測試_第2頁
課件05-嵌入式軟件測試_第3頁
課件05-嵌入式軟件測試_第4頁
課件05-嵌入式軟件測試_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件單元與集成測試嵌入式軟件測試

第五部分軟件單元與集成測試單元測試集成測試單元與集成測試環(huán)境單元測試—重要性基于軟件問題報告的分析結果在嵌入式軟件開發(fā)中,沒有特定的缺陷類型占據(jù)主導地位需求問題及需求相關問題是主要缺陷原因(36%)歸結于缺乏系統(tǒng)化單元測試的問題是第二大原因(22%)單元測試—對象軟件的獨立單元例子結構化程序設計語言中的函數(shù)或子程序面向對象語言中的類4GL的菜單或畫面單元測試—特點實現(xiàn)-串行或并行測試方法-白盒為主單元測試—測試準備要求的文檔可提交軟件設計規(guī)格說明、軟件接口設計規(guī)格說明源程序符合規(guī)范要求并已無錯誤地通過編譯或匯編被測軟件單元已納入配置管理中具備了規(guī)定的單元測試環(huán)境和測試工具單元測試—通過準則命名符合規(guī)則控制流程正確變量使用無差錯達到質量度量指標功能與設計說明一致性能達到軟件設計指標覆蓋測試達到規(guī)定的覆蓋率對發(fā)現(xiàn)的問題已進行修改并通過回歸測試單元測試—測試策略測試內容靜態(tài)測試動態(tài)測試原則靜態(tài)和動態(tài)測試互補,不能相互替代建議靜態(tài)測試在動態(tài)測試前完成,實踐中,部分動態(tài)測試可與靜態(tài)測試并行單元測試—靜態(tài)測試全面的靜態(tài)分析選擇性代碼檢查補充代碼走查單元測試—靜態(tài)測試度量收集并分析每小時審查的代碼行數(shù)(LOC)每千行代碼(KLOC)生成的變更請求數(shù)(CR)每小時生成的變更請求數(shù)(CR)代碼審查過程花費的總時間單元測試—動態(tài)測試黑盒測試白盒測試基于數(shù)據(jù)結構的測試單元測試—動態(tài)測試被測單元單元接口局部數(shù)據(jù)結構邊界條件獨立執(zhí)行路徑錯誤處理的路徑測試用例單元測試—接口測試調用被測單元時的實際參數(shù)與該單元的形式參數(shù)的一致性個數(shù)、屬性、量綱、順序被測單元調用子模塊時,傳遞的實際參數(shù)與子模塊的形式參數(shù)的一致性個數(shù)、屬性、量綱、順序是否修改了只作為輸入值的形式參數(shù)調用其他模塊時,檢查其可用性和處理結果單元測試—接口測試被測單元調用內部函數(shù)時,使用參數(shù)的正確性個數(shù)、屬性、量綱、順序被測單元使用全局變量/數(shù)據(jù)的合理性是否與定義一致在單元有多個入口的情況下,是否引用了與當前入口無關的參數(shù)常數(shù)是否當作變量來傳遞單元測試—接口測試文件屬性的正確性OPEN/CLOSE語句的正確性文件是否先打開后使用文件結束條件的判斷和處理的正確性規(guī)定的I/O格式說明與I/O語句是否匹配緩沖區(qū)容量與記錄長度是否匹配輸入/輸出錯誤是否檢查并作了處理以及處理的正確性單元測試—接口測試輸出時的文本錯誤內容、格式、長度等使用外部資源時,檢查其可用性并及時釋放資源內存、文件、硬盤、端口等單元測試—局部數(shù)據(jù)結構不正確或不一致的數(shù)據(jù)類型說明錯誤的變量名或函數(shù)名稱變量名或函數(shù)名拼寫錯或縮寫錯誤定義的變量從來沒有被使用,就很可能使用了錯誤的變量名使用了外部變量或函數(shù)變量沒有初始化或未賦值就使用初始值或缺省值錯誤單元測試—局部數(shù)據(jù)結構錯誤的類型轉換不一致的數(shù)據(jù)類型數(shù)組越界非法指針下溢、上溢或是地址錯誤全局數(shù)據(jù)對軟件單元的影響單元測試—邊界條件合法數(shù)據(jù)和非法數(shù)據(jù)的正確處理邊界內點和邊界外點的正確處理例如測試處理n維數(shù)組的第m個元素測試循環(huán)執(zhí)行到最后一次循環(huán)體測試取最大值或最小值測試數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值單元測試—獨立執(zhí)行路徑獨立路徑是指在程序中至少引進一個新的處理語句集合或一個新條件的任一路徑。在程序的控制流圖中,一條獨立路徑是至少包含有一條在其他路徑中從未有過的邊的路徑通過對控制流圈復雜性的分析,可導出基本的、可執(zhí)行的獨立路徑集合單元測試—獨立執(zhí)行路徑不可達或冗余代碼錯誤的算法混合型計算的優(yōu)先級錯誤精度錯誤比較運算錯誤賦值錯誤表達式的不正確符號表示>、>=;=、==、!=循環(huán)錯誤單元測試—錯誤處理路徑錯誤自動檢測機制資源使用前后其他模塊使用前后錯誤處理策略拋出錯誤通知用戶進行記錄錯誤處理的有效性在系統(tǒng)干預前處理報告和記錄的錯誤真實詳細單元測試—動態(tài)測試步驟步驟1-冒煙測試步驟2-肯定測試(Positivetesting)步驟3-否定測試(Negativetesting)步驟4-專用測試步驟5-覆蓋測試(Coveragetesting)步驟6-覆蓋率評估步驟7-覆蓋率完善與實現(xiàn)單元測試—①冒煙測試目標用最簡單的方法執(zhí)行被測單元考核最基本的能力方法基于規(guī)格說明的測試等價類劃分單元測試—②肯定測試目標走查相關規(guī)格說明每個測試用例測試一或多個設計陳述覆蓋全部設計陳述方法基于規(guī)格說明的測試等價類劃分因果圖狀態(tài)轉換單元測試—③否定測試目標確認軟件沒有做規(guī)格說明未指定事情方法邊界值分析內部邊界值測試錯誤猜測單元測試—④專用測試目標驗證性能需求驗證安全性需求驗證保密性需求方法基于規(guī)格說明的測試單元測試—⑤覆蓋測試目標驗證程序控制流的正確性驗證程序數(shù)據(jù)流的正確性方法語句覆蓋分支覆蓋條件覆蓋數(shù)據(jù)流覆蓋單元測試—⑥覆蓋率評估目標測量覆蓋率確定覆蓋率目標是否實現(xiàn)方法覆蓋率度量覆蓋率分析單元測試—⑦覆蓋率完善目標找出無法執(zhí)行測試的路徑或條件發(fā)現(xiàn)不可達或冗余代碼補充測試并達到覆蓋率目標方法覆蓋率分析控制流覆蓋數(shù)據(jù)流覆蓋單元測試—實例1一個實數(shù)平方根的計算函數(shù)設計規(guī)格說明輸入—實數(shù)輸出—實數(shù)當輸入0或大于0的值時,返回輸入值的正數(shù)平方根當輸入小于0的值時,顯示錯誤信息"Squarerooterror-negativeinput"并返回0使用庫函數(shù)Print_Line顯示錯誤信息實例1—分析3個陳述2個約束2個用例可實現(xiàn)覆蓋實例1—基于規(guī)格說明設計設計結果用例1輸入4;返回2執(zhí)行了第1個陳述用例2輸入-10,返回0,用Print_Line輸出"Squarerooterror-illegalnegativeinput"執(zhí)行了第2和3個陳述實例1—等價類劃分設計分析2個輸入等價類2個輸出等價類2個用例可實現(xiàn)覆蓋輸入劃分輸出劃分I<0a≥0II≤0bError實例1—等價類劃分設計設計結果用例1輸入4;返回2執(zhí)行了輸入等價類I和輸出等價類a用例2輸入-10,返回0,,用Print_Line輸出"Squarerooterror-illegalnegativeinput"執(zhí)行了輸入等價類II和輸出等價類b實例1—邊界值分析設計分析輸入域有3個邊界線輸出域的邊界線受輸入域影響5個用例可實現(xiàn)覆蓋輸入域邊界線(i)(ii)-0+|-----------------|------------------|12345

實例1—邊界值分析設計用例1輸入最大的負數(shù),返回0,用Print_Line輸出"Squarerooterror-illegalnegativeinput“執(zhí)行了等價類I的下邊界用例2輸入僅比0小的數(shù),返回0,用Print_Line輸出"Squarerooterror-illegalnegativeinput“執(zhí)行了等價類I的上邊界實例1—邊界值分析設計用例3輸入0,返回0執(zhí)行了等價類I的上邊界外點,等價類II的下邊界,等價類a的下邊界用例4輸入僅比0大的數(shù),返回輸入值的正數(shù)平方根執(zhí)行了等價類II下邊界內點實例1—邊界值分析設計用例5輸入最大的正數(shù),返回輸入值的正數(shù)平方根執(zhí)行了等價類II上邊界內點,等價類a的上邊界實例1—分支覆蓋設計分析根據(jù)規(guī)格說明,通常會有2個分支2個用例可實現(xiàn)覆蓋實例1—分支覆蓋設計設計結果用例1輸入4;返回2執(zhí)行了有效輸入處理分支用例2輸入-10,返回0,用Print_Line輸出"Squarerooterror-illegalnegativeinput"執(zhí)行了無效輸入處理分支實例1—實現(xiàn)方式1IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE Usemathsco-processortocalculatetheanswer RETURNtheanswerEND_IF實例1—實現(xiàn)方式2IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0 ELSE IFinput=0THEN RETURN0 ELSE Usemathsco-processortocalculatetheanswer RETURNtheanswer END_IFEND_IF實例1—實現(xiàn)方式3Usemathsco-processortocalculatetheanswerExamineco-processorstatusregistersIFstatus=errorTHEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE RETURNtheanswerEND_IF實例1—實現(xiàn)方式4IFinput<0THEN CALLPrint_Line"Squarerooterror-negativeinput“ RETURN0ELSE_IFinput=0THEN RETURN0ELSE Calculatefirstapproximation LOOP Calculateerror EXIT_LOOPWHENerror<desiredaccuracy Adjustapproximation END_LOOP RETURNtheanswerEND_IF實例1—條件覆蓋設計分析假定用實現(xiàn)方式4的解決方案假定最多迭代10次調整實現(xiàn)方案:EXIT_LOOPWHEN(error<desiredaccuracy)or(iterations=10)

:實例1—條件覆蓋設計設計結果(1/2)用例110次迭代,所有迭代:error>desiredaccuracy用例22次迭代,第1次迭代:error>=desiredaccuracy,第2次迭代:error<desiredaccuracy實例1—條件覆蓋設計設計結果(2/2)其他用例2個條件都為true或false實例1—數(shù)據(jù)流覆蓋設計項目定義使用1InputtoroutineBythemathsco-processor2Co-processorstatusTestforstatus=error3ErrormessageByPrint_Line

4RETURN0Bythecallingunit5Answerbyco-processorRETURNtheanswer6RETURNtheanswerBythecallingunit實例1—數(shù)據(jù)流覆蓋設計設計結果用例1輸入4;返回2執(zhí)行了定義-使用對1,2,5,6用例2輸入-10,返回0,用Print_Line輸出"Squarerooterror-illegalnegativeinput"執(zhí)行了定義-使用對1,2,3,4實例1—內部邊界值分析分析假定用實現(xiàn)方式4的解決方案:CalculatefirstapproximationLOOPCalculateerrorEXIT_LOOPWHENerror<desiredaccuracyAdjustapproximationEND_LOOPRETURNtheanswer:實例1—內部邊界值分析設計結果用例1誤差僅大于desiredaccuracy用例2誤差等于desiredaccuracy用例3誤差僅小于desiredaccuracy單元測試—困惑單元測試工作量大,發(fā)現(xiàn)問題少單元測試—原則在可能且合理的情況下,充分測試邊界條件包括大量負載情況單元測試—原則不要為明顯沒有缺陷的代碼編寫測試用例例如基于代碼結構,完全出于實現(xiàn)覆蓋目標的測試單元測試—原則代碼庫1代碼庫2識別缺陷修復缺陷修補代碼庫

1測試代碼庫

1新的隱藏缺陷!!!相依關系單元測試—原則代碼庫1代碼庫2識別缺陷修復缺陷所有測試通過后,修補所有代碼庫測試所有代碼庫相依關系集成測試—對象軟件部件的組裝過程;組裝得到的軟件部件。集成測試—目的檢驗軟件單元和軟件部件之間的接口關系驗證軟件部件是否符合設計要求集成測試—圖示Component#1OperationsandFunctionswithI/OinputinterfaceoperationComponent#2OperationsandFunctionswithI/Ooutputoperation集成測試—技術要求(1/3)應對軟件部件進行必要的靜態(tài)測試,并先于動態(tài)測試;軟件部件的每個特性應被至少一個正常的測試用例和一個被認可的異常測試用例覆蓋;測試用例的輸入應至少包括有效等價類值、無效等價類值和邊界數(shù)據(jù)值;應采用增量法,測試組裝新的軟件部件;應逐項測試軟件設計文檔規(guī)定的軟件部件的功能、性能等特性;集成測試—技術要求(2/3)應測試軟件部件之間、軟件部件和硬件之間的所有接口;應測試軟件單元和軟件部件之間的所有調用,達到100%的測試覆蓋率;應測試軟件部件的輸出數(shù)據(jù)及其格式;應測試運行條件(如數(shù)據(jù)結構、輸入/輸出通道容量、內存空間、調用頻率等)在邊界狀態(tài)下,進而在人為設定的狀態(tài)下,軟件部件的功能和性能;集成測試—技術要求(3/3)應按設計文檔要求,對軟件部件的功能、性能進行強度測試;對安全性關鍵的軟件部件,應對其進行安全性分析,明確每一個危險狀態(tài)和導致危險的可能原因,并對此進行針對性的測試??筛鶕?jù)軟件測試任務書(合同或項目計劃)及軟件部件的重要性、安全性關鍵等級等要求對上述內容進行裁剪。集成測試—進入條件具有軟件需求規(guī)格說明(包含接口需求規(guī)格說明)、軟件設計文檔(含接口設計文檔)、軟件單元測試報告、被測軟件部件的源程序和可執(zhí)行代碼;待測試的軟件單元和部件已納入軟件受控庫;待集成的軟件單元已通過單元測試;軟件部件源代碼通過編譯或匯編;具備了滿足要求的集成測試環(huán)境和測試工具。集成測試—焦點部件/模塊間的接口測試全局數(shù)據(jù)結構測試軟件功能模塊的功能測試性能測試邊界和人為條件下的性能集成測試—重點尋找的缺陷軟件系統(tǒng)結構的設計和構造在子系統(tǒng)層次上被集成的功能或操作組件/模塊之間的接口和相互作用資源集成環(huán)境集成集成測試—因交互問題快速單元(獨立)慢下來(組合)誤差放大(如,舍入)由于協(xié)調問題帶來的接口錯誤對于實時系統(tǒng)同步問題(死鎖、活鎖、資源競爭)集成測試—動態(tài)測試內容全局數(shù)據(jù)結構測試全局數(shù)據(jù)結構的完整性適合性方面對軟件設計文檔分配給軟件部件的每一項功能逐項進行測試。必要時,測試組裝成的中間功能模塊的功能集成測試—動態(tài)測試內容準確性方面對軟件部件中具有準確性要求的功能和精度要求的項(如,數(shù)據(jù)處理精度、時間控制精度、時間測量精度)進行測試。集成測試—動態(tài)測試內容互操作性方面(1/2)測試兩種接口:所加入的軟件單元和部件與已存在的軟件單元和部件之間的接口;軟件部件與支持其運行的其他軟件部件、例行程序或硬件設備件的接口。對接口的輸入和輸出數(shù)據(jù)的格式、內容、傳遞方式、接口協(xié)議等進行測試。集成測試—動態(tài)測試內容互操作性方面(2/2)測試軟件部件的控制信息,如,信號或中斷的來源,信號或中斷的目的,信號或中斷的優(yōu)先級,信號或中斷的表示格式或表示值,信號或中斷的最小、最大和平均頻率,響應方式和響應時間等。集成測試—動態(tài)測試內容容錯性方面測試軟件部件對錯誤輸入、錯誤中斷、漏中斷等情況的容錯能力,并考慮通過仿真平臺或硬件測試設備形成一些人為條件,測試軟件部件的功能、性能的降級情況。集成測試—動態(tài)測試內容時間特性方面測試軟件部件的運行時間,算法的最長路徑下的計算時間。必要時,可考慮測試組裝成的中間功能部件的運行時間。資源利用性方面測試軟件部件運行占用的內存空間。必要時,可考慮測試組裝成的中間功能部件運行占用的內存空間。集成測試—結束條件(1/2)已按要求完成了規(guī)定的測試任務;實際測試過程遵循了原定的軟件部件測試計劃和軟件部件測試說明;詳細、客觀地記錄了測試過程和測試中發(fā)現(xiàn)的所有問題;測試文檔齊全、符合規(guī)范;測試工作通過了軟件部件測試評審;測試的全過程自始至終在控制下進行;集成測試—結束條件(2/2)測試中的異常有合理解釋或正確有效的處理;全部的測試文檔、測試用例、測試軟件、被測軟件部件和評審結果已納入配置管理。集成測試—策略非漸增式集成(大爆炸集成)漸增式集成自頂向下集成自底向上集成多層結構式測試(三明治式測試)高頻集成集成策略—實例ABCDGFE層I層II層III集成策略—大爆炸集成圖示Test

ATestA,B,C,D,E,F,GABCDGFE層I層II層IIITest

BTest

CTest

GTest

ETest

FTest

D集成策略—大爆炸集成前提被測部件在通過部件范圍的測試后,只有少量單元加入或修改被測部件較小并具有良好可測試性,每個單元都經過充分測試被測部件中的單元緊密連接,無法分別測試測試不考慮單元之間的相依性或風險集成策略—大爆炸集成缺點調試困難大量廢棄代碼關鍵的與一般的外圍模塊沒有區(qū)分直到開發(fā)周期的很晚時間用戶才能看到產品集成失敗帶來的風險較大集成策略—自頂向下集成首先開發(fā)和測試在最高控制層的單元,下層單元用樁實現(xiàn)繼續(xù)在每一層按寬度或深度優(yōu)先進行,用真正的單元代替樁,并建立更下一層樁每一個單元集成進來的時候都要進行測試用回歸測試保證沒有引入新錯誤以這種方式繼續(xù),直到被測部件中的所有樁已經被真正的實現(xiàn)替代并得到了測試集成策略—廣度優(yōu)先TestATestA,B,C,DTestA,B,C,D,E,F,GABCDGFE層I層II層IIITestBTestCTestDStubs1TestETestFTestGStubs2集成策略—深度優(yōu)先TestATestA,B,E,FTestA,B,C,D,E,F,GABCDGFE層I層II層IIITestA,B,E,F,CTestA,B,E,F,C,DTestA,BStubs1Stubs2Stubs3Stubs4TestBTestETestFTestCTestDTestG集成策略—自頂向下集成優(yōu)點可以依據(jù)部件的功能需求開始測試不需要開發(fā)驅動器缺點需要建立和維護大量的樁,用樁模擬所有的情況有時是困難的底層單元的變化會影響上層已集成的單元集成策略—自底向上集成第一階段對底層模塊編碼,并使用驅動模塊對其測試;底層模塊組合成能夠實現(xiàn)軟件特定子功能的簇,寫驅動模塊對簇進行測試;移走驅動模塊,沿著程序結構的層次向上對簇進行組合,使用驅動模塊對其測試;以這種方式繼續(xù)集成直到整個部件使用真實的主控制模塊進行測試。集成策略—自底向上集成TestFTestETestGTestCTestCluster2(D,G)TestCluster1(B,E,F)TestA,B,C,D,E,F,GABCDGFE層I層II層IIITestBTestDTestADriverA1Driver

A2集成策略—自底向上集成優(yōu)點不需要樁模塊可并行測試缺點需要驅動模塊部件中處于頂層的重要簇或功能可能在較晚才得到測試,如UI設計上問題往往到最終測試才能發(fā)現(xiàn)集成策略—自底向上集成場景面向對象系統(tǒng)實時系統(tǒng)有嚴格性能要求的系統(tǒng)集成策略—多層結構式測試自頂向下策略與自底向上策略相結合以三層視角看待被測部件處于中間的目標層目標層之上的層目標層之下的層測試在目標層會合集成策略—多層結構式測試TestETestD,GTestB,E,FTestFTestGTestA底層測試TestA,B,C,DTestA,B,C,D,E,F,GABCDGFE層I層II層III頂層測試TestBTestDTestCDriverA1DriverA2Stubs1TestA,B,C,D集成策略—多層結構式測試當部件結構多于3層時,如何選擇目標層?探索法嘗試使樁和驅動器數(shù)量最小化集成策略—多層結構式測試優(yōu)點頂層和底層測試可以并行進行缺點在沒有完成集成之前無法測試完整的部件在沒有完成集成之前無法充分測試接口需要同時使用樁和驅動器集成策略—改進多層結構式并行測試:用驅動器和樁測試中間層用樁測試頂層用驅動器測試底層并行測試:頂層訪問中間層(用頂層單元代替驅動器)底層被中間層訪問(用底層單元代替樁)集成策略—改進多層結構式TestFTestETestBTestGTestDTestATestCTestB,E,FTestD,GTestA,CTestA,B,C,D,E,F,GABCDGFE層I層II層III集成策略—高頻集成特征適用于時間緊且復雜度高的軟件自底向上/自頂向下的集成方式每日構建與冒煙測試(DailyBuildandSmokeTesting)冒煙測試從頭到尾檢測整個系統(tǒng)(當前狀態(tài)下)。它不一定必須是窮舉的,但是應該能夠暴露主要問題。冒煙測試應該是足夠充分的,如果構件通過了冒煙測試,就可以假定該構件已經足夠穩(wěn)定,可以繼續(xù)進行更加徹底的測試。-McConnel,S.集成策略—高頻集成前提可得到一個穩(wěn)定的增量大多數(shù)有意義的增量可在頻率間隔內產生測試包和代碼并行開發(fā)并保持當前有效必須進行自動化測試必須使用配置管理工具集成策略—高頻集成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論