第九章軟件測試_第1頁
第九章軟件測試_第2頁
第九章軟件測試_第3頁
第九章軟件測試_第4頁
第九章軟件測試_第5頁
已閱讀5頁,還剩178頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章軟件測試第1頁,課件共183頁,創(chuàng)作于2023年2月軟件測試的目的基于不同的立場,存在著兩種完全不同的測試目的。從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。第2頁,課件共183頁,創(chuàng)作于2023年2月Myers軟件測試目的(1)測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯誤;(2)一個好的測試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯誤;(3)一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤的測試。第3頁,課件共183頁,創(chuàng)作于2023年2月?lián)Q言之,測試的目的是想以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。如果我們成功地實施了測試,我們就能夠發(fā)現(xiàn)軟件中的錯誤。測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。實施測試收集到的測試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。

測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。

第4頁,課件共183頁,創(chuàng)作于2023年2月測試信息流第5頁,課件共183頁,創(chuàng)作于2023年2月測試信息流軟件配置:軟件需求規(guī)格說明、軟件設(shè)計規(guī)格說明、源代碼等;測試配置:測試計劃、測試用例、測試程序等;測試工具:測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等等。第6頁,課件共183頁,創(chuàng)作于2023年2月測試結(jié)果分析:比較實測結(jié)果與預期結(jié)果,評價錯誤是否發(fā)生。排錯(調(diào)試):對已經(jīng)發(fā)現(xiàn)的錯誤進行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔。修正后的文檔再測試:直到通過測試為止。第7頁,課件共183頁,創(chuàng)作于2023年2月通過收集和分析測試結(jié)果數(shù)據(jù),對軟件建立可靠性模型利用可靠性分析,評價軟件質(zhì)量:

軟件的質(zhì)量和可靠性達到可以接受的程度;

所做的測試不足以發(fā)現(xiàn)嚴重的錯誤;如果測試發(fā)現(xiàn)不了錯誤,可以肯定,測試配置考慮得不夠細致充分,錯誤仍然潛伏在軟件中。第8頁,課件共183頁,創(chuàng)作于2023年2月軟件測試的原則1.應當把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘。2.測試用例應由測試輸入數(shù)據(jù)和對應的預期輸出結(jié)果這兩部分組成。3.程序員應避免檢查自己的程序。4.在設(shè)計測試用例時,應包括合理的輸入條件和不合理的輸入條件。第9頁,課件共183頁,創(chuàng)作于2023年2月5.充分注意測試中的群集現(xiàn)象。

經(jīng)驗表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。6.嚴格執(zhí)行測試計劃,排除測試的隨意性。7.應當對每一個測試結(jié)果做全面檢查。8.妥善保存測試計劃,測試用例,出錯統(tǒng)計和最終分析報告,為維護提供方便。

第10頁,課件共183頁,創(chuàng)作于2023年2月測試的特性挑剔性:測試是證明程序有錯,而不是證明程序無錯;復雜性:設(shè)計測試用例是一項需要細致和高度技巧的工作,不亞于程序的開發(fā);不徹底性:不可能讓被測程序在一切可能的輸入情況下全部執(zhí)行一遍。第11頁,課件共183頁,創(chuàng)作于2023年2月測試的種類程序測試靜態(tài)分析(程序不執(zhí)行)動態(tài)分析(程序執(zhí)行)靜態(tài)分析器分析(自動方式)代碼評審(人工方式)代碼會審走查辦公桌檢查黑盒測試(測試程序功能)白盒測試(測試程序結(jié)構(gòu))第12頁,課件共183頁,創(chuàng)作于2023年2月

軟件測試的對象

軟件測試并不等于程序測試。軟件測試應貫穿于軟件定義與開發(fā)的整個期間。需求分析、概要設(shè)計、詳細設(shè)計以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計規(guī)格說明、詳細設(shè)計規(guī)格說明以及源程序,都應成為軟件測試的對象。第13頁,課件共183頁,創(chuàng)作于2023年2月從源程序的測試中找到的程序錯誤不一定都是程序編寫過程中造成的。據(jù)美國一家公司的統(tǒng)計表明,在查找出的軟件錯誤中,屬于需求分析和軟件設(shè)計的錯誤約占64%,屬于程序編寫的錯誤約占36%。第14頁,課件共183頁,創(chuàng)作于2023年2月為把握軟件開發(fā)各個環(huán)節(jié)的正確性,需要進行各種確認和驗證工作。確認(Validation),是一系列的活動和過程,目的是想證實在一個給定的外部環(huán)境中軟件的邏輯正確性。

需求規(guī)格說明確認程序確認(靜態(tài)確認、動態(tài)確認)

驗證(Verification),試圖證明在軟件生存期各個階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。第15頁,課件共183頁,創(chuàng)作于2023年2月第16頁,課件共183頁,創(chuàng)作于2023年2月測試與軟件開發(fā)各階段的關(guān)系軟件開發(fā)過程是一個自頂向下,逐步細化的過程軟件計劃階段定義軟件作用域軟件需求分析建立軟件信息域、功能和性能需求、約束等軟件設(shè)計把設(shè)計用某種程序設(shè)計語言轉(zhuǎn)換成程序代碼

第17頁,課件共183頁,創(chuàng)作于2023年2月測試過程是依相反順序安排的自底向上,逐步集成的過程。返第18頁,課件共183頁,創(chuàng)作于2023年2月測試用例設(shè)計兩種常用的測試方法黑盒測試白盒測試第19頁,課件共183頁,創(chuàng)作于2023年2月動態(tài)黑盒測試—閉著眼睛測試軟件軟件輸入不深入代碼細節(jié)的測試方法稱為動態(tài)黑盒測試。軟件測試員充當客戶來使用它。輸出第20頁,課件共183頁,創(chuàng)作于2023年2月動態(tài)白盒測試—帶上X光眼鏡測試??????????????3581322.293419985680302829734315250*(1+0.015)*((1+0.015)^360-1)/0.015250*(1+0.015)*((1+0.015)^360-1)/0.015假如知道一個盒子包含一臺計算機,而另一個盒子是人用紙筆計算,就會選擇不同的測試用例了解軟件的運作方式會影響測試手段第21頁,課件共183頁,創(chuàng)作于2023年2月黑盒測試這種方法是把測試對象看做一個黑盒子,測試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明。黑盒測試又叫做功能測試或數(shù)據(jù)驅(qū)動測試。第22頁,課件共183頁,創(chuàng)作于2023年2月黑盒測試方法是在程序接口上進行測試,主要是為了發(fā)現(xiàn)以下錯誤:

是否有不正確或遺漏了的功能?在接口上,輸入能否正確地接受?能否輸出正確的結(jié)果?

是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤?

性能上是否能夠滿足要求?

是否有初始化或終止性錯誤?第23頁,課件共183頁,創(chuàng)作于2023年2月用黑盒測試發(fā)現(xiàn)程序中的錯誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查程序是否都能產(chǎn)生正確的輸出。但這是不可能的。第24頁,課件共183頁,創(chuàng)作于2023年2月假設(shè)一個程序P有輸入量X和Y及輸出量Z。在字長為32位的計算機上運行。若X、Y取整數(shù),按黑盒方法進行窮舉測試:可能采用的測試數(shù)據(jù)組:232×232

=264

如果測試一組數(shù)據(jù)需要1毫秒,一年工作365×24小時,完成所有測試需5億年。第25頁,課件共183頁,創(chuàng)作于2023年2月白盒測試此方法把測試對象看做一個透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。第26頁,課件共183頁,創(chuàng)作于2023年2月軟件人員使用白盒測試方法,主要想對程序模塊進行如下的檢查:對所有的邏輯判定,取“真”與取“假”的兩種情況都至少測試一次,稱邏輯覆蓋測試。對程序模塊的所有獨立的執(zhí)行路徑至少測試一次,稱路徑測試。第27頁,課件共183頁,創(chuàng)作于2023年2月對一個具有多重選擇和循環(huán)嵌套的程序,不同的路徑數(shù)目可能是天文數(shù)字。給出一個小程序的流程圖,它包括了一個執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達520條,對每一條路徑進行測試需要1毫秒,假定一年工作365×24小時,要想把所有路徑測試完,需3170年。第28頁,課件共183頁,創(chuàng)作于2023年2月第29頁,課件共183頁,創(chuàng)作于2023年2月黑盒測試與白盒測試比較

黑盒測試是從用戶觀點,按規(guī)格說明書要求的輸入數(shù)據(jù)與輸出數(shù)據(jù)的對應關(guān)系設(shè)計測試用例,是根據(jù)程序外部特征進行測試。

白盒測試是根據(jù)程序內(nèi)部邏輯結(jié)構(gòu)進行測試。第30頁,課件共183頁,創(chuàng)作于2023年2月黑盒測試與白盒測試不論黑盒還是白盒測試都不能進行窮盡測試,所以軟件測試不可能發(fā)現(xiàn)程序中存在的所有錯誤,因此需精心設(shè)計測試方案,力爭盡可能少的次數(shù),測出盡可能多的錯誤。第31頁,課件共183頁,創(chuàng)作于2023年2月等價分類法把輸入數(shù)據(jù)的可能值劃分為若干等價類,使每類中的任何一個測試用例,都能代表同一等價類中的其他測試用例。換句話說,如果從某一等價類中任意選出一個測試用例未能發(fā)現(xiàn)程序的錯誤,該類中的其他測試用例也不會發(fā)現(xiàn)錯誤。不僅考慮有效等價類,還要考慮無效等價類。第32頁,課件共183頁,創(chuàng)作于2023年2月如何劃分等價類?有效等價類(合理等價類)無效等價類(不合理等價類)

劃分等價類的標準:覆蓋不相交代表性第33頁,課件共183頁,創(chuàng)作于2023年2月劃分等價類的規(guī)則(1)如果輸入條件規(guī)定了取值范圍,可定義一個有效等價類和兩個無效等價類。例

輸入值是學生成績,范圍是0~1000100

有效等價類1≤成績≤100無效等價類成績>100

無效等價類成績<0第34頁,課件共183頁,創(chuàng)作于2023年2月(2)如果某個輸入條件規(guī)定了輸入數(shù)據(jù)的個數(shù),則可劃分為一個有效等價類和兩個無效等價類。例如:每名學生一學期內(nèi)只能選修1~3門課程。有效等價類:選修1~3無效等價類:不選修和選修超過3門劃分等價類的規(guī)則第35頁,課件共183頁,創(chuàng)作于2023年2月劃分等價類的規(guī)則(3)如規(guī)定了輸入數(shù)據(jù)的一組值,且程序?qū)Σ煌斎胫底霾煌幚?,則每個允許的輸入值是一個有效等價類,并有一個無效等價類(所有不允許的輸入值的集合)。例:輸入條件說明學歷可為:???、本科、碩士、博士四種之一,則分別取這四種這四個值作為四個有效等價類,另外把四種學歷之外的任何學歷作為無效等價類.第36頁,課件共183頁,創(chuàng)作于2023年2月劃分等價類的規(guī)則:(4)如果某個輸入條件規(guī)定了一組必須成立的條件,則可定義一個有效等價類和一個無效等價類。例如,標志符的第一個字符必須是字母。有效等價類:第一個字符是字母無效等價類:第一個字符不是字母第37頁,課件共183頁,創(chuàng)作于2023年2月劃分等價類的規(guī)則:(5)如果某個輸入條件是一個布爾量,則可定義一個有效等價類和一個無效等價類。第38頁,課件共183頁,創(chuàng)作于2023年2月劃分等價類的規(guī)則:(6)如果規(guī)定了輸入數(shù)據(jù)為整數(shù),則可以劃分為正整數(shù)、零和負整數(shù)三個有效等價類和一個無效等價類。第39頁,課件共183頁,創(chuàng)作于2023年2月用等價類劃分法設(shè)計測試用例步驟(1)形成等價類表,每一等價類規(guī)定一個唯一的編號;(2)設(shè)計一測試用例,使其盡可能多地覆蓋尚未覆蓋的有效等價類,重復這一步驟,直到所有有效等價類均被測試用例所覆蓋;(3)設(shè)計一新測試用例,使其只覆蓋一個無效等價類,重復這一步驟直到所有無效等價類均被覆蓋;第40頁,課件共183頁,創(chuàng)作于2023年2月例:某報表處理系統(tǒng)要求用戶輸入處理報表的日期,日期限制在2001年1月至2005年12月,即系統(tǒng)只能對該段期間內(nèi)的報表進行處理,如日期不在此范圍內(nèi),則顯示輸入錯誤信息。系統(tǒng)日期規(guī)定由年、月的6位數(shù)字字符組成,前四位代表年,后兩位代表月。如何用等價類劃分法設(shè)計測試用例,來測試程序的日期檢查功能?第41頁,課件共183頁,創(chuàng)作于2023年2月第一步:等價類劃分輸入等價類有效等價類無效等價類

報表日期的類型及長度6位數(shù)字字符(1)有非數(shù)字字符(4)少于6個數(shù)字字符(5)多于6個數(shù)字字符(6)年份范圍在2001~2005之間(2)小于2001(7)大于2005(8)月份范圍在1~12之間(3)“報表日期”輸入條件的等價類表小于1(9)大于12(10)第42頁,課件共183頁,創(chuàng)作于2023年2月第二步為有效等價類設(shè)計測試用例對表中編號為1,2,3的3個有效等價類用一個測試用例覆蓋:

測試數(shù)據(jù)期望結(jié)果覆蓋范圍200105等價類(1)(2)(3)輸入有效第43頁,課件共183頁,創(chuàng)作于2023年2月第三步:為每一個無效等價類設(shè)至少設(shè)計一個測試用例

測試數(shù)據(jù)期望結(jié)果覆蓋范圍001MAY等價類(4)輸入無效20015等價類(5)輸入無效2001005等價類(6)輸入無效200005等價類(7)輸入無效200805等價類(8)輸入無效200100等價類(9)輸入無效200113等價類(10)輸入無效不能出現(xiàn)相同的測試用例本例的10個等價類至少需要8個測試用例第44頁,課件共183頁,創(chuàng)作于2023年2月例:某工廠招工,規(guī)定報名者的年齡應在16~35歲之間,若不在此區(qū)間,拒絕接受,并顯示“年齡不合格”等信息。解:第一步:劃分等價類輸入數(shù)據(jù)有效等價類無效等價類出生年齡①6位數(shù)字字符②有非數(shù)字字符③少于6個數(shù)字符④多于6個數(shù)字符對應數(shù)值⑤在196702~198603之間⑥<196702⑦>198603月份對應數(shù)值⑧在1~12之間⑨等于“0”⑩>12第45頁,課件共183頁,創(chuàng)作于2023年2月第二步:設(shè)計有效等價類的測試用例。測試數(shù)據(jù)期望結(jié)果測試范圍-------------------------------------------------------------------------------------------------------------------------------------------

197011輸入有效①、⑤、⑧第三步:為每一無效等價類至少設(shè)計一個測試用例。測試數(shù)據(jù)期望結(jié)果測試范圍-------------------------------------------------------------------------------------------------------------------------------------------MAY,70輸入無效②19705輸入無效③1968011輸入無效④195512年齡不合格⑥196006年齡不合格⑦196200輸入無效⑨197222輸入無效⑩第46頁,課件共183頁,創(chuàng)作于2023年2月實踐表明,在處理邊界情況時,易發(fā)生編碼錯誤。邊界值分析法,就是要選擇測試用例,使得被測程序能在邊界值及其附近運行,從而有效地暴露程序中潛在的錯誤。邊界值分析法第47頁,課件共183頁,創(chuàng)作于2023年2月

A、按照輸入值范圍的邊界。例如:輸入值的范圍是-1.0至1.0,則可選擇用例–1.0、1.0、-1.001、1.001。

B、按照輸入/輸出值個數(shù)的邊界。

例如:輸入文件可有1-255個記錄,則設(shè)計用例:文件的記錄數(shù)為0個、1個、255個、256個。

C、輸出值域的邊界。

例如:檢索文獻摘要,最多4篇。設(shè)計用例:可檢索0篇、1篇、4篇,和5篇(錯誤)。

D、輸入/輸出有序集(如順序文件、線性表)的邊界。

應選擇第一個元素和最后一個元素。邊值分析法舉例第48頁,課件共183頁,創(chuàng)作于2023年2月輸入等價類測試用例說明測試數(shù)據(jù)期望結(jié)果出生年月1個數(shù)字字符5個數(shù)字字符7個數(shù)字字符1個非數(shù)字字符全是非數(shù)字字符6個數(shù)字字符51970516801119705AAugust196702輸入無效

輸入有效對應數(shù)值35周歲16周歲>35周歲<16周歲

196702198603196702198604月份對應數(shù)值月份為1月月份為12月月份>1月份<12196702198603196700197413合格年齡不合格年齡輸入有效輸入無效第49頁,課件共183頁,創(chuàng)作于2023年2月錯誤猜測法所謂猜錯,就是猜測被測程序在哪些地方容易出錯,然后針對可能的薄弱環(huán)節(jié)來設(shè)計測試用例。這種方法更多依靠測試人員的直覺與經(jīng)驗。上例中可補充一些測試用例:①出生年月為“0”②漏送“出生年月”③年月次序顛倒第50頁,課件共183頁,創(chuàng)作于2023年2月例如:測試一個排序子程序,可考慮如下情況:輸入表為空;輸入表只有一個元素;輸入表的所有元素都相同;輸入表已排好序。又如,測試二分法檢索子程序,可以考慮如下情況:表中只有1個元素;表長為2n;表長為2n-1表長為2n+1第51頁,課件共183頁,創(chuàng)作于2023年2月白盒測試通過在不同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。第52頁,課件共183頁,創(chuàng)作于2023年2月邏輯覆蓋

語句覆蓋

判定覆蓋條件覆蓋判定-條件覆蓋

條件組合覆蓋邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例的技術(shù)。它屬白盒測試。第53頁,課件共183頁,創(chuàng)作于2023年2月語句覆蓋

語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。(若邏輯運算有問題)

TFA∧BA∧B=.T.第54頁,課件共183頁,創(chuàng)作于2023年2月

判定覆蓋判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。

TFA∧BA∧B=.T.A∧B=.F.

第55頁,課件共183頁,創(chuàng)作于2023年2月條件覆蓋條件覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。

TFA∧BA=.T.A=.F.B=.T.B=.F.

第56頁,課件共183頁,創(chuàng)作于2023年2月判定-條件覆蓋判定-條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,每個判斷中的每個分支至少執(zhí)行一次。

TFA∧BA∧B=.T.A∧B=.F.A=.T.A=.F.B=.T.B=.F.

第57頁,課件共183頁,創(chuàng)作于2023年2月條件組合覆蓋條件組合覆蓋就是設(shè)計足夠的測試用例,運行被測程序,使得每個判斷的所有可能的條件取值組合至少執(zhí)行一次。

TFA∧BA=.T.∧B=.T.A=.T.∧B=.F.A=.F.∧B=.T.A=.F.∧B=.F.

第58頁,課件共183頁,創(chuàng)作于2023年2月例(A>1)

and

(B=0)(A=2)

or

(X>1)X=X/AX=X+1TTFFabdce第59頁,課件共183頁,創(chuàng)作于2023年2月L1(ace)={(A>1)and(B=0)}and{(A=2)or(X/A>1)}=(A>1)and(B=0)and(A=2)or(A>1)and(B=0)and(X/A>1)=(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

第60頁,課件共183頁,創(chuàng)作于2023年2月L2(abd)=not{(A>1)and(B=0)}

andnot{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{not(A=2)andnot(X>1)}=

not(A>1)andnot(A=2)andnot(X>1)

or

not(B=0)and

not(A=2)andnot(X>1)第61頁,課件共183頁,創(chuàng)作于2023年2月L3(abe)=not{(A>1)and(B=0)}and

{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and

{(A=2)or(X>1)}=not(A>1)and(A=2)

or

not(A>1)and

(X>1)

or

not(B=0)and(A=2)

or

not(B=0)and(X>1)第62頁,課件共183頁,創(chuàng)作于2023年2月L4(acd)={(A>1)and(B=0)}

andnot

{(A=2)or(X/A>1)}=(A>1)and(B=0)andnot(A=2)and

not(X/A>1)第63頁,課件共183頁,創(chuàng)作于2023年2月語句覆蓋

語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。在圖例中,正好所有的可執(zhí)行語句都在路徑L1上,所以選擇路徑L1設(shè)計測試用例,就可以覆蓋所有的可執(zhí)行語句。

第64頁,課件共183頁,創(chuàng)作于2023年2月測試用例的設(shè)計格式如下

【輸入的(A,B,X),輸出的(A,B,X)】為圖例設(shè)計滿足語句覆蓋的測試用例是:

【(2,0,4),(2,0,3)】覆蓋ace【L1】(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

第65頁,課件共183頁,創(chuàng)作于2023年2月

判定覆蓋判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。對于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例:第66頁,課件共183頁,創(chuàng)作于2023年2月【(2,0,4),(2,0,3)】覆蓋ace【L1】

【(1,1,1),(1,1,1)】覆蓋abd【L2】(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

not(A>1)andnot(A=2)andnot(X>1)

ornot(B=0)and

not(A=2)andnot(X>1)第67頁,課件共183頁,創(chuàng)作于2023年2月如果選擇路徑L3和L4,還可得另一組可用的測試用例:

【(2,1,1),(2,1,2)】覆蓋abe【L3】

【(3,0,3),(3,0,1)】覆蓋acd【L4】

not(A>1)and(X>1)

ornot(B=0)and

(A=2)

ornot(B=0)and(X>1)(A>1)and(B=0)andnot(A=2)and

not(X/A>1)第68頁,課件共183頁,創(chuàng)作于2023年2月條件覆蓋條件覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。在圖例中,我們事先可對所有條件的取值加以標記。例如,對于第一個判斷:條件A>1取真為,取假為

條件B=0取真為,取假為

第69頁,課件共183頁,創(chuàng)作于2023年2月對于第二個判斷:條件A=2取真為,取假為

條件X>1取真為,取假為測試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)

【(1,0,1),(1,0,1)】L2(b,d)【(2,1,1),(2,1,2)】L3(b,e)或第70頁,課件共183頁,創(chuàng)作于2023年2月

測試用例

覆蓋分支

條件取值【(1,0,3),(1,0,4)】L3(b,e)【(2,1,1),(2,1,2)】L3(b,e)

判定-條件覆蓋判定-條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,每個判斷中的每個分支至少執(zhí)行一次。第71頁,課件共183頁,創(chuàng)作于2023年2月

測試用例

覆蓋分支

條件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)(A=2)and(B=0)

or

(A>1)and(B=0)and(X/A>1)

not(A>1)andnot(A=2)andnot(X>1)

ornot(B=0)and

not(A=2)andnot(X>1)第72頁,課件共183頁,創(chuàng)作于2023年2月判定—條件覆蓋從表面上看測試了所有條件的取值,但實際某些條件掩蓋了另一些條件。例如:對表達式(A>1)and(B=0)來說,若(A>1)的測試結(jié)果為真,則還要測試(B=0),才能決定表達式的值;而若(A>1)的測試結(jié)果為假,可立刻確定表達式的結(jié)果為假。這時就不再測試(B=0),因此條件(B=0)就沒有被檢查,因此采用判定-條件覆蓋,邏輯表達式的錯誤不一定能檢查出來。第73頁,課件共183頁,創(chuàng)作于2023年2月

andorA>1TB=0TX=X/ATFFA=2TFX>1FX=X+1第74頁,課件共183頁,創(chuàng)作于2023年2月條件組合覆蓋條件組合覆蓋就是設(shè)計足夠的測試用例,運行被測程序,使得每個判斷的所有可能的條件取值組合至少執(zhí)行一次。記①A>1,B=0作

②A>1,B≠0作

③A≯1,B=0作④A≯1,B≠0作第75頁,課件共183頁,創(chuàng)作于2023年2月

⑤A=2,X>1作

⑥A=2,X≯1作

⑦A≠2,X>1作

⑧A≠2,X≯1作

測試用例

覆蓋條件

覆蓋組合【(2,0,4),(2,0,3)】(L1) ①,⑤【(2,1,1),(2,1,2)】(L3) ②,⑥【(1,0,3),(1,0,4)】(L3) ③,⑦【(1,1,1),(1,1,1)】(L2) ④,⑧第76頁,課件共183頁,創(chuàng)作于2023年2月條件組合覆蓋測試也并不完全,有可能漏掉某些路徑。第77頁,課件共183頁,創(chuàng)作于2023年2月路徑測試路徑測試就是設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑。1、程序圖(ProgramGraph)

第78頁,課件共183頁,創(chuàng)作于2023年2月1、程序圖(ProgramGraph)的優(yōu)化①順序執(zhí)行的多個結(jié)點,可合并成一個結(jié)點。第79頁,課件共183頁,創(chuàng)作于2023年2月A≥BQ②含有復合條件的判斷框,可分解成幾個簡單條件的判定框PA>BQPA=BP第80頁,課件共183頁,創(chuàng)作于2023年2月

路徑測試的特征

路徑測試,就是對程序圖中每一條可能的程序執(zhí)行路徑至少測試一次。如果程序中含有循環(huán),則每個循環(huán)至少執(zhí)行一次。滿足結(jié)構(gòu)測試的最低要求。語句覆蓋又稱點覆蓋。判定覆蓋又稱邊覆蓋。滿足語句覆蓋和判定覆蓋為完全覆蓋。滿足路徑覆蓋,就滿足完全覆蓋,也就是滿足了白盒測試的最低要求。第81頁,課件共183頁,創(chuàng)作于2023年2月例如:2134abcde測試路徑覆蓋結(jié)點/邊覆蓋標準acd①,②,③,④點覆蓋acd,bea,b,c,d,e邊覆蓋acd,beae,bcd①,②,③,④a,b,c,d,e路徑覆蓋第82頁,課件共183頁,創(chuàng)作于2023年2月循環(huán)測試路徑選擇循環(huán)分為4種不同類型:簡單循環(huán)、嵌套循環(huán)、連鎖循環(huán)和非結(jié)構(gòu)循環(huán)。

(1)簡單循環(huán)①零次循環(huán):從循環(huán)入口到出口②一次循環(huán):檢查循環(huán)初始值

③二次循環(huán):檢查多次循環(huán)

④m次循環(huán):檢查在多次循環(huán)

⑤最大次數(shù)循環(huán)、比最大次數(shù)多一次、少一次的循環(huán)。第83頁,課件共183頁,創(chuàng)作于2023年2月

①對最內(nèi)層循環(huán)做簡單循環(huán)的全部測試。所有其它層的循環(huán)變量置為最小值;

②逐步外推,對其外面一層循環(huán)進行測試。測試時保持所有外層循環(huán)的循環(huán)變量取最小值,所有其它嵌套內(nèi)層循環(huán)的循環(huán)變量取“典型”值。。

③反復進行,直到所有各層循環(huán)測試完畢。(2)

嵌套循環(huán)第84頁,課件共183頁,創(chuàng)作于2023年2月第85頁,課件共183頁,創(chuàng)作于2023年2月

④對全部各層循環(huán)同時取最小循環(huán)次數(shù),或者同時取最大循環(huán)次數(shù)(3)連鎖循環(huán)

如果各個循環(huán)互相獨立,則可以用與簡單循環(huán)相同的方法進行測試。但如果幾個循環(huán)不是互相獨立的,則需要使用測試嵌套循環(huán)的辦法來處理。(4)非結(jié)構(gòu)循環(huán)

這一類循環(huán)應該使用結(jié)構(gòu)化程序設(shè)計方法重新設(shè)計測試用例。

第86頁,課件共183頁,創(chuàng)作于2023年2月測試用例設(shè)計黑盒測試用例設(shè)計:

現(xiàn)有以下的三角形分類程序。該程序的功能是,讀入代表三角形邊長的3個整數(shù),判斷它們能否組成三角形。如果能夠,則輸出三角形是等邊、等腰或任意三角形的分類信息。第87頁,課件共183頁,創(chuàng)作于2023年2月

A<B+CT印出“等邊三角形”F開始B<C+AC<A+BA=BB=C終止FF印出“不是三角形”A=CB=C印出“等腰三角形”印出“任意三角形”TTTTFFFFTT第88頁,課件共183頁,創(chuàng)作于2023年2月aikjbcdfemptqnS123456910711812Ewghlr程序圖第89頁,課件共183頁,創(chuàng)作于2023年2月第一步:確定測試策略。

①判斷是否組成三角形②識別等邊三角形③識別等腰三角形④識別任意三角形第二步:用黑盒法設(shè)計輸入①用等價類法劃分有效和無效等價類②用邊界值法和③猜錯法作補充第90頁,課件共183頁,創(chuàng)作于2023年2月有效等價類輸入三個正整數(shù):3數(shù)相等①A、B相等②3數(shù)中2數(shù)相等B、C相等③C、A相等④3數(shù)均不相等⑤最大數(shù)為A⑥2數(shù)之和不大于第3數(shù)最大數(shù)為B⑦

最大數(shù)為B⑧邊界值:2數(shù)之和等于第3數(shù)⒁猜錯法:輸入3個零⒂輸入3個負數(shù)⒃等價分類法無效等價類含有零數(shù)據(jù)⑼含有負整數(shù)⑽少于3個整數(shù)⑾含有非整數(shù)⑿含有非數(shù)字符⒀第91頁,課件共183頁,創(chuàng)作于2023年2月第三步:提出一組初步的測試用例序號測試內(nèi)容測試數(shù)據(jù)期望結(jié)果abc1等邊5,5,5等邊三角形2等腰4,4,55,4,44,5,4等腰三角形3任意3,4,5任意三角形4非三角形9,4,44,9,44,4,95退化三角形8,4,44,8,44,4,86零數(shù)據(jù)0,4,54,0,54,5,0不是三角形70,0,08負數(shù)據(jù)-3,4,53,-4,53,4,-59-3,-4,-510遺漏數(shù)據(jù)3,4,運行錯誤11非整數(shù)3.3,4,512非數(shù)字符A,4,5(類型不符)第92頁,課件共183頁,創(chuàng)作于2023年2月測試用例設(shè)計白盒測試用例設(shè)計:

學生成績查詢程序。存放100個學生的成績,按學號排序。如果輸入的學號在這批學生內(nèi),就輸出該學生的成績,否則便回答“學號沒有找到”。①程序由內(nèi)外兩層循環(huán)嵌套而成②鍵入學號為“0”,結(jié)束查找③內(nèi)層循環(huán)執(zhí)行“折半查找”第93頁,課件共183頁,創(chuàng)作于2023年2月INTEGERfirst,last,middle,Studntno,numDIMENSIONstudntno(100),score(100)Read(*,*)kRead(*,*)(studntno(i),score(i),i=1,k)Read(*,*)numDo30,While(num.NE.0)First=1last=kmiddle=(first+last)/2IF(num.EQ.Studno(middle).OR.First.EQ.Last)GOTO2010IF(num.LT.Studntno(middle))Thenlast=middle第94頁,課件共183頁,創(chuàng)作于2023年2月

Elsefirst=middle+1EndIFmiddle=(first+last)/2GOTO1020CONTINUEIF(num.EQ.Studntno(middle))ThenWrite(*,’(1X,’studentnumber’,I6,2X,’score=‘,I3)’)num,score(middle)ElseWrite(*,’(1X,’studentnumber’,I6,2X,’notfound,’)’)numEndIFRead(*,*)num30CONTINUEEND第95頁,課件共183頁,創(chuàng)作于2023年2月

調(diào)整first開始num<>()查找結(jié)束?在上半部分?TF調(diào)整last讀入成績表讀入numFirst,last,Middle賦初值F內(nèi)T重算middleTF123外第96頁,課件共183頁,創(chuàng)作于2023年2月

印出“未找到”結(jié)束找到所查學號?打印分數(shù)讀入下一個numTF123第97頁,課件共183頁,創(chuàng)作于2023年2月abcdfe12345697108gh程序圖qmnjki第98頁,課件共183頁,創(chuàng)作于2023年2月第一步:確定測試策略。

折半查找是實現(xiàn)查找的一種算法。用路徑覆蓋作為測試策略第二步:令成績表的長度為1項和5項,在成績表的不同位置查1±1個學生情況:①成績表只有1項,查0個學生②成績表只有1項,查1個在成績表中的學生③成績表只有1項,查2個都不在成績表中的學生④成績表只有5項,查1個學生(正好是表的中間項)⑤成績表只有5項,查1個學生(在表的上半部分)⑥成績表只有5項,查1個學生(在表的下半部分)⑦成績表只有5項,查1個學生(不是表中的學生)第99頁,課件共183頁,創(chuàng)作于2023年2月測試數(shù)據(jù)覆蓋的結(jié)點①②③④⑤⑥⑦⑧⑨⑩測試數(shù)據(jù)abcdefghIjklmnqK=1,studntno={100}Num={0}={100,0}={90,110,0}K=5,studntno={2,4,6,8,10}Num={6,0}{2,0}{8,0}{9,0}√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√第100頁,課件共183頁,創(chuàng)作于2023年2月調(diào)試的步驟(1)從錯誤的外部表現(xiàn)形式入手,確定程序中出錯位置;(2)研究有關(guān)部分的程序,找出錯誤的內(nèi)在原因;(3)修改設(shè)計和代碼,以排除這個錯誤;(4)重復進行暴露了這個錯誤的原始測試或某些有關(guān)測試。

第101頁,課件共183頁,創(chuàng)作于2023年2月從技術(shù)角度來看,查找錯誤的難度在于:

現(xiàn)象與原因所處的位置可能相距甚遠。當其它錯誤得到糾正時,這一錯誤所表現(xiàn)出的現(xiàn)象可能會暫時消失,但并未實際排除?,F(xiàn)象實際上是由一些非錯誤原因(例如,舍入不精確)引起的。第102頁,課件共183頁,創(chuàng)作于2023年2月

現(xiàn)象可能是由于一些不容易發(fā)現(xiàn)的人為錯誤引起的。錯誤是由于時序問題引起的,與處理過程無關(guān)?,F(xiàn)象是由于難于精確再現(xiàn)的輸入狀態(tài)(例如,實時應用中輸入順序不確定)引起?,F(xiàn)象可能是周期出現(xiàn)的。在軟、硬件結(jié)合的嵌入式系統(tǒng)中常常遇到。

第103頁,課件共183頁,創(chuàng)作于2023年2月糾錯的策略糾錯策略試湊法正向跟蹤反向跟蹤(回溯法)適用于小程序跟蹤法推理法歸納推理演繹推理適用于大、小程序第104頁,課件共183頁,創(chuàng)作于2023年2月試湊法:一種“邊試邊瞧”的做法。首先設(shè)定可疑區(qū),然后插入打印語句,看是否可以發(fā)現(xiàn)錯誤。跟蹤法:跟蹤執(zhí)行可疑的程序段,實行單步執(zhí)行,每執(zhí)行完一條語句,就停下來檢查執(zhí)行的結(jié)果,確認正常后再繼續(xù)執(zhí)行,是對小型程序糾錯的常用策略。如:Fori:=1to10ix=iy/(k\n)(其中k=5,n=6)第105頁,課件共183頁,創(chuàng)作于2023年2月歸納法調(diào)試歸納法是一種從特殊推斷一般的系統(tǒng)化思考方法。歸納法調(diào)試的基本思想是:從一些線索(錯誤征兆)著手,通過分析它們之間的關(guān)系來找出錯誤。

收集有關(guān)的數(shù)據(jù)

列出所有已知的測試用例和程序執(zhí)行結(jié)果??茨男┹斎霐?shù)據(jù)的運行結(jié)果是正確的,哪些輸入數(shù)據(jù)的運行結(jié)果有錯誤。

第106頁,課件共183頁,創(chuàng)作于2023年2月

組織數(shù)據(jù)

由于歸納法是從特殊到一般的推斷過程,所以需要組織整理數(shù)據(jù),以發(fā)現(xiàn)規(guī)律。常以3W1H形式組織可用的數(shù)據(jù):“What”列出一般現(xiàn)象;“Where”說明發(fā)現(xiàn)現(xiàn)象的地點;“When”列出現(xiàn)象發(fā)生時所有已知情況;“How”說明現(xiàn)象的范圍和量級;第107頁,課件共183頁,創(chuàng)作于2023年2月第108頁,課件共183頁,創(chuàng)作于2023年2月“Yes”描述出現(xiàn)錯誤的3W1H;“No”作為比較,描述了沒有錯誤的3W1H。通過分析找出矛盾來。

提出假設(shè) 分析線索之間的關(guān)系,利用在線索結(jié)構(gòu)中觀察到的矛盾現(xiàn)象,設(shè)計一個或多個關(guān)于出錯原因的假設(shè)。如果一個假設(shè)也提不出來,歸納過程就需要收集更多的數(shù)據(jù)。此時,應當再設(shè)計與執(zhí)行一些測試用例,以獲得更多的數(shù)據(jù)。

第109頁,課件共183頁,創(chuàng)作于2023年2月

證明假設(shè)把假設(shè)與原始線索或數(shù)據(jù)進行比較,若它能完全解釋一切現(xiàn)象,則假設(shè)得到證明;否則,就認為假設(shè)不合理,或不完全,或是存在多個錯誤,以致只能消除部分錯誤。第110頁,課件共183頁,創(chuàng)作于2023年2月開始提出假想錯誤能測試糾錯收集錯誤癥狀歸納癥狀不能證明假想錯誤找到真實錯誤結(jié)束能不能歸納糾錯法第111頁,課件共183頁,創(chuàng)作于2023年2月演繹法調(diào)試

演繹法是一種從一般原理或前提出發(fā),經(jīng)過排除和精化的過程來推導出結(jié)論的思考方法。演繹法排錯是測試人員首先根據(jù)已有的測試用例,設(shè)想及枚舉出所有可能出錯的原因做為假設(shè);然后再用原始測試數(shù)據(jù)或新的測試,從中逐個排除不可能正確的假設(shè);最后,再用測試數(shù)據(jù)驗證余下的假設(shè)確是出錯的原因。第112頁,課件共183頁,創(chuàng)作于2023年2月

列舉所有可能出錯原因的假設(shè)

把所有可能的錯誤原因列成表。通過它們,可以組織、分析現(xiàn)有數(shù)據(jù)。

利用已有的測試數(shù)據(jù),排除不正確的假設(shè)

仔細分析已有的數(shù)據(jù),尋找矛盾,力求排除前一步列出所有原因。如果所有原因都被排除了,則需要補充一些數(shù)據(jù)(測試用例),以建立新的假設(shè)。第113頁,課件共183頁,創(chuàng)作于2023年2月

改進余下的假設(shè)

利用已知的線索,進一步改進余下的假設(shè),使之更具體化,以便可以精確地確定出錯位置。

證明余下的假設(shè)第114頁,課件共183頁,創(chuàng)作于2023年2月演繹糾錯法開始有余下病因?有測試糾錯羅列可能的病因排除矛盾的病因無能證實病因確定真實病因結(jié)束能不能第115頁,課件共183頁,創(chuàng)作于2023年2月1、插入打印語句Sum=0:score=0:num=0Whilescore<>999Input‘score=‘;scoresum=sum+scorenum=num+1Wendaverage=sum/numPrintaverage90End常用的糾錯技術(shù)第116頁,課件共183頁,創(chuàng)作于2023年2月在程序中插入打印語句Printnum,score,sumScore=7017070Score=80280150Score=90390240Score=99949991239309.75第117頁,課件共183頁,創(chuàng)作于2023年2月2、設(shè)置斷點在程序的可疑區(qū)設(shè)置斷點,每當程序執(zhí)行到設(shè)置的斷點時,就會暫停執(zhí)行,以便觀察變量的內(nèi)容和分析程序的運行狀況。Dima(5)Fori=1to10leta(i)=INextIEnd常用的糾錯技術(shù)第118頁,課件共183頁,創(chuàng)作于2023年2月3、隱蔽部分程序把不需要檢查的程序隱蔽起來,只讓可疑的部分程序反復運行??墒褂萌缦路椒[蔽程序:①在要隱蔽的程序前加注釋符,變成注釋語句。②把要隱蔽的程序段置于“常假”的選擇結(jié)構(gòu)中,使它總沒機會執(zhí)行。③用GOTO語句跳過要隱蔽的程序段。第119頁,課件共183頁,創(chuàng)作于2023年2月4、蠻力糾錯技術(shù)打印或轉(zhuǎn)存可疑區(qū)的全部數(shù)據(jù),供糾錯者使用。優(yōu)點:信息齊全,只要有耐心,一定能找出錯誤。缺點:數(shù)據(jù)量大,效率低。第120頁,課件共183頁,創(chuàng)作于2023年2月多模塊程序測試的策略測試過程按4個步驟進行,即單元測試、組裝測試、確認測試和系統(tǒng)測試。開始是單元測試,集中對用源代碼實現(xiàn)的每一個程序單元進行測試,檢查各個程序模塊是否正確地實現(xiàn)了規(guī)定的功能。第121頁,課件共183頁,創(chuàng)作于2023年2月第122頁,課件共183頁,創(chuàng)作于2023年2月組裝測試把已測試過的模塊組裝起來,主要對與設(shè)計相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進行測試。確認測試則是要檢查已實現(xiàn)的軟件是否滿足了需求規(guī)格說明中確定了的各種需求,以及軟件配置是否完全、正確。系統(tǒng)測試把已經(jīng)經(jīng)過確認的軟件納入實際運行環(huán)境中,與其它系統(tǒng)成份組合在一起進行測試。第123頁,課件共183頁,創(chuàng)作于2023年2月程序錯誤的類型語法錯誤編譯是發(fā)現(xiàn)語法錯誤的最好工具,應注意一處語法錯誤會產(chǎn)生多條錯誤信息,只要改正該錯誤,所有錯誤信息就可能全部消失。結(jié)構(gòu)性錯誤包括結(jié)構(gòu)異常、結(jié)構(gòu)不全和結(jié)構(gòu)多余等錯誤。第124頁,課件共183頁,創(chuàng)作于2023年2月開始y<0Tx←x+yReady結(jié)束Fx←yy>0Tx←yReadyFx<0TFx未賦初值就引用x變量未使用該路徑永遠不會執(zhí)行結(jié)構(gòu)性錯誤:第125頁,課件共183頁,創(chuàng)作于2023年2月功能性錯誤指程序功能與用戶需求不相符合引起的錯誤。功能性錯誤主要靠動態(tài)測試來發(fā)現(xiàn)。發(fā)現(xiàn)錯誤的時間越早越好。接口錯誤調(diào)用函數(shù)和子程序時,實參和形參的類型、個數(shù)及順序不一致。全局變量引用不當。集成測試的重點是檢測接口錯誤。第126頁,課件共183頁,創(chuàng)作于2023年2月單元測試(UnitTesting)單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位─程序模塊,進行正確性檢驗的測試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨立進行單元測試。第127頁,課件共183頁,創(chuàng)作于2023年2月1、測試內(nèi)容模塊模塊接口測試局部數(shù)據(jù)結(jié)構(gòu)測試重要路徑測試錯誤處理測試邊界條件測試I/O參數(shù)值的個數(shù)、類型、次序、格式是否正確,I/O文件屬性、操作是否正確等。數(shù)據(jù)說明是否正確、一致,變量及其初值定義是否正確等。檢查“錯誤處理程序”本身的錯誤。邊界條件常包括循環(huán)邊界,最大最小值、控制流中等于、大于、小于的比較值等。重要路徑通常是指完成模塊功能的主要路徑,一般是控制結(jié)構(gòu)。單元測試(unittesting)第128頁,課件共183頁,創(chuàng)作于2023年2月單元測試的步驟編譯靜態(tài)分析器檢查代碼評審動態(tài)測試編譯編譯程序檢查代碼中的語法錯誤。靜態(tài)分析器以檢查結(jié)構(gòu)性錯誤為主,節(jié)省人力。

代碼評審辦公桌檢查走查代碼會審第129頁,課件共183頁,創(chuàng)作于2023年2月1.桌前檢查(DeskChecking)

這是一種傳統(tǒng)的檢查方法。由程序員自己檢查自己編寫的程序。程序員在程序通過編譯之后,進行單元測試設(shè)計之前,對源程序代碼進行分析,檢驗,并補充相關(guān)的文檔,目的是發(fā)現(xiàn)程序中的錯誤。檢查項目有:

(1)檢查變量的交叉引用表──重點是檢查未說明的變量和違反了類型規(guī)定的變量;還要對照源程序,逐個檢查變量的引用、變量的使用序列;臨時變量在某條路徑上的重寫情況;局部變量、全局變量與特權(quán)變量的使用;

(2)檢查標號的交叉引用表──驗證所有標號的正確性:檢查所有標號的命名是否正確;轉(zhuǎn)向指定位置的標號是否正確。

(3)檢查子程序、宏、函數(shù)──驗證每次調(diào)用與被調(diào)用位置是否正確;確認每次被調(diào)用的子程序、宏、函數(shù)是否存在;檢驗調(diào)用序列中調(diào)用方式與參數(shù)順序、個數(shù)、類型上的一致性。

第130頁,課件共183頁,創(chuàng)作于2023年2月(4)等值性檢查──檢查全部等價變量的類型的一致性,解釋所包含的類型差異。

(5)常量檢查──確認每個常量的取值和數(shù)制、數(shù)據(jù)類型;檢查常量每次引用同它的取值、數(shù)制和類型的一致性;

(6)標準檢查──用標準檢查程序或手工檢查程序中違反標準的問題。

(7)風格檢查──檢查在程序設(shè)計風格方面發(fā)現(xiàn)的問題。

(8)比較控制流──比較由程序員設(shè)計的控制流圖和由實際程序生成的控制流圖,尋找和解釋每個差異,修改文檔和校正錯誤。

(9)選擇、激活路徑──在程序員設(shè)計的控制流圖上選擇路徑,再到實際的控制流圖上激活這條路徑。如果選擇的路徑在實際控制流圖上不能激活,則源程序可能有錯。用這種方法激活的路徑集合應保證源程序模塊的每行代碼都被檢查,即桌前檢查應完成至少是語句覆蓋。

(10)對照程序的規(guī)格說明,詳細閱讀源代碼──程序員對照程序的規(guī)格說明書、規(guī)定的算法和程序設(shè)計語言的語法規(guī)則,仔細地閱讀源代碼,逐字逐句進行分析和思考,比較實際的代碼和期望的代碼,從它們的差異中發(fā)現(xiàn)程序的問題和錯誤。

第131頁,課件共183頁,創(chuàng)作于2023年2月(11)補充文檔──桌前檢查的文檔是一種過渡性的文檔,不是公開的正式文檔。通過編寫文檔,也是對程序的一種下意識的檢查和測試,可以幫助程序員發(fā)現(xiàn)和抓住更多的錯誤。管理部門也可以通過審查桌前檢查文檔,了解模塊的質(zhì)量、完全性、測試方法和程序員的能力。這種文檔的主要內(nèi)容有:

·建立小型的數(shù)據(jù)詞典,描述程序中出現(xiàn)的每一種數(shù)據(jù)結(jié)構(gòu)、變量和寄存器的用法,建立相應的各種交叉引用表格。

·描述主要的路徑和異常的路徑,為覆蓋準備條件。

·當測試采用邏輯驅(qū)動時,即利用判定表或布爾代數(shù)方法來確定邏輯覆蓋時,應討論邏輯情況。此外,在狀態(tài)測試情形,即考慮模塊中狀態(tài)的組合和狀態(tài)的遷移時對狀態(tài)控制變量進行設(shè)計,以及利用語法制導的測試,也都要討論邏輯情況。要使文檔編制適應測試技術(shù)。

·以純粹的功能術(shù)語來描述輸入與輸出。

·描述全部已知的限制和假定。

·描述全部的接口和對接口的假定。

這種桌前檢查,由于程序員熟悉自己的程序和自身的程序設(shè)計風格,可以節(jié)省很多的檢查時間,但應避免主觀片面性。

第132頁,課件共183頁,創(chuàng)作于2023年2月2.代碼會審(CodeReadingReview)

代碼會審是由若干程序員和測試員組成一個會審小組,通過閱讀、討論和爭議,對程序進行靜態(tài)分析的過程。

代碼會審分兩步:第一步,小組負責人提前把設(shè)計規(guī)格說明書、控制流程圖、程序文本及有關(guān)要求、規(guī)范等分發(fā)給小組成員,作為評審的依據(jù)。小組成員在充分閱讀這些材料之后,進入審查的第二步:召開程序?qū)彶闀?。在會上,首先由程序員逐句講解程序的邏輯。在此過程中,程序員或其他小組成員可以提出問題,展開討論,審查錯誤是否存在。實踐表明,程序員在講解過程中能發(fā)現(xiàn)許多原來自己沒有發(fā)現(xiàn)的錯誤,而討論和爭議則促進了問題的暴露。例如對某個局部性小問題修改方法的討論,可能發(fā)現(xiàn)與之牽連的其它問題,甚至涉及到模塊的功能說明、模塊間接口和系統(tǒng)總體結(jié)構(gòu)的大問題,從而導致對需求的重定義、重設(shè)計和重驗證,進而大大改善了軟件質(zhì)量。

第133頁,課件共183頁,創(chuàng)作于2023年2月在會前,應當給會審小組每個成員準備一份常見錯誤的清單,把以往所有可能發(fā)生的常見錯誤羅列出來,供與會者對照檢查,以提高會審的實效。

這個常見錯誤清單也叫做檢查表,它把程序中可能發(fā)生的各種錯誤進行分類,對每一類列舉出盡可能多的典型錯誤,然后把它們制成表格,供在會審時使用。這種檢查表類似于本章單元測試中給出的檢查表。在代碼會審之后,需要做以下幾件事:

①把發(fā)現(xiàn)的錯誤登記造表,并交給程序員;

②若發(fā)現(xiàn)錯誤較多,或發(fā)現(xiàn)重大錯誤,則在改正之后,再次組織代碼會審;

③對錯誤登記表進行分析、歸類、精煉,以提高審議效果。

第134頁,課件共183頁,創(chuàng)作于2023年2月3.走查(Walkthroughs)走查與代碼會審基本相同,其過程分為兩步。

第一步也把材料先發(fā)給走查小組每個成員,讓他們認真研究程序,然后再開會。開會的程序與代碼會審不同,不是簡單地讀程序和對照錯誤檢查表進行檢查,而是讓與會者“充當”計算機。即首先由測試組成員為被測程序準備一批有代表性的測試用例,提交給走查小組。走查小組開會,集體扮演計算機角色,讓測試用例沿程序的邏輯運行一遍,隨時記錄程序的蹤跡,供分析和討論用。走查著重于從流程的角度來考察程序,借助于程序流程圖來進行數(shù)據(jù)流和控制流的分析。第135頁,課件共183頁,創(chuàng)作于2023年2月第136頁,課件共183頁,創(chuàng)作于2023年2月2.驅(qū)動模塊和樁模塊模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。

驅(qū)動模塊(driver)

樁模塊(stub)──存根模塊第137頁,課件共183頁,創(chuàng)作于2023年2月第138頁,課件共183頁,創(chuàng)作于2023年2月2、模塊測試步驟 考慮到被測模塊與其它模塊的聯(lián)系,因此測試時需要使用兩類輔助模塊來模擬其他模塊。

驅(qū)動模塊(driver)—模擬主程序功能,用于向被測模塊傳遞數(shù)據(jù),接收、打印從被測模塊返回的數(shù)據(jù)。

樁模塊(stub)—又稱為假模塊,用于模擬那些由被測模塊所調(diào)用的下屬模塊功能。 一般,驅(qū)動模塊比樁模塊容易設(shè)計。但都是額外開銷。測試方法以白盒法為主。被測模塊驅(qū)動模塊樁模塊樁模塊樁模塊第139頁,課件共183頁,創(chuàng)作于2023年2月集成測試(IntegratedTesting)集成測試(組裝測試、聯(lián)合測試)通常,在單元測試的基礎(chǔ)上,需要將所有模塊按照設(shè)計要求組裝成為系統(tǒng)。這時需要考慮的問題是:在把各個模塊連接起來的時侯,穿越模塊接口的數(shù)據(jù)是否會丟失;

一個模塊的功能是否會對另一個模塊的功能產(chǎn)生不利的影響;

第140頁,課件共183頁,創(chuàng)作于2023年2月

各個子功能組合起來,能否達到預期要求的父功能;

全局數(shù)據(jù)結(jié)構(gòu)是否有問題;

單個模塊的誤差累積起來,是否會放大,從而達到不能接受的程度。在單元測試的同時可進行組裝測試,發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問題,最終構(gòu)成要求的軟件系統(tǒng)。

第141頁,課件共183頁,創(chuàng)作于2023年2月1、組裝測試的任務①確定模塊組裝方案,將經(jīng)過測試的模塊組裝為一個完整的系統(tǒng)。組裝方案分為漸增式及非漸增式。②測試方法以黑盒法為主,按照組裝方案進行測試。 重點測試模塊的接口部分,需設(shè)計測試過程使用的驅(qū)動模塊或樁模塊。問題:漸增式與非漸增式各有何優(yōu)、缺點?為什么通常采用漸增式?第142頁,課件共183頁,創(chuàng)作于2023年2月2、漸增式組裝測試 漸增式是先進行模塊測試,然后將這些模塊逐步組裝成較大的系統(tǒng),每連接一個模塊進行一次測試。兩種方案:設(shè)計驅(qū)動模塊或樁模塊,對每一個新組裝的子系統(tǒng)進行測試,對發(fā)現(xiàn)問題較多的子系統(tǒng)或模塊應該用白盒法作回歸測試。自頂而下增值自底而上增值第143頁,課件共183頁,創(chuàng)作于2023年2月自頂而下增值M1M4M3M2M6M5程序模塊示意圖S5M1S1S1S1S2S2S2S3S3S3第一步,測試主控模塊M1設(shè)計樁模塊S1、S2、S3,模擬被M1調(diào)用的M2、M3、M4。第二步,依次用M2、M3、M4替代樁模塊S1、S2、S3,每替代一次進行一次測試。S4S4S4S5S5第三步,對由主控模塊M1和模塊M2、M3、M4構(gòu)成的子系統(tǒng)進行測試,設(shè)計樁模塊S4、S5。第四步,依次用模塊M5和M6替代樁模塊S4、S5,并同時進行新的測試。組裝測試完畢。第144頁,課件共183頁,創(chuàng)作于2023年2月自底而上增值M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第四步,把已測試的子系統(tǒng)按程序結(jié)構(gòu)連接起來完成程序整體的組裝測試。D4D4D4D5D5D5M1M4M3M2M6M5程序模塊示意圖第一步,對最底層的模塊M3、M5、M6進行測試,設(shè)計驅(qū)動模塊D1、D2、D3來模擬調(diào)用。第三步,設(shè)計驅(qū)動模塊D4、D5和D6模擬調(diào)用,分別對新子系統(tǒng)進行測試。第二步,用實際模塊M2、M1和M4替換驅(qū)動模塊D1、D2、D3。D6第145頁,課件共183頁,創(chuàng)作于2023年2月深度優(yōu)先與寬度優(yōu)先 無論是自頂而下增值還是自底而上增值,還可選擇深度優(yōu)先或者寬度優(yōu)先增值。舉例:按自頂而下增值法,寫出下圖中分別按照深度優(yōu)先或者寬度優(yōu)先增值的模塊組裝次序。ABCDHGJEFIKLMN第146頁,課件共183頁,創(chuàng)作于2023年2月問題(1)自頂而下增值與自底而上增值各有何優(yōu)、缺點?(2)為什么在實際的組裝測試中,都應該采用混合增值的方法?(3)請自己設(shè)計2-3個混合增值的測試方法。第147頁,課件共183頁,創(chuàng)作于2023年2月確定集成過程的原則自頂而下增值優(yōu)點:能夠盡早發(fā)現(xiàn)系統(tǒng)主控方面的問題。缺點:無法驗證樁模塊是否完全模擬了下屬模塊的功能。自底而上增值優(yōu)點:驅(qū)動模塊較容易編寫樁模塊,能夠盡早查出底層涉及較復雜的算法和實際的I/O模塊中的錯誤。缺點:最后才能發(fā)現(xiàn)系統(tǒng)主控方面的問題。第148頁,課件共183頁,創(chuàng)作于2023年2月集成過程的原則①盡早測試關(guān)鍵模塊。②盡早測試包含I/O的模塊。第149頁,課件共183頁,創(chuàng)作于2023年2月3、混合增值常見的混合增值方案:衍變的自頂而下先自底而上集成子系統(tǒng),再自頂而下集成總系統(tǒng)。自底而上—自頂而下增值對含有讀操作的子系統(tǒng)采用自底而上。對含有寫操作的子系統(tǒng)采用自頂而下?;貧w測試在回歸測試中自底而上,對其余部分(尤其是對修改過的子系統(tǒng))采用自頂而下。第150頁,課件共183頁,創(chuàng)作于2023年2月1.一次性組裝方式(bigbang)它是一種非增殖式組裝方式。也叫做整體拼裝。使用這種方式,首先對每個模塊分別進行模塊測試,然后再把所有模塊組裝在一起進行測試,最終得到要求的軟件系統(tǒng)。第151頁,課件共183頁,創(chuàng)作于2023年2月第152頁,課件共183頁,創(chuàng)作于2023年2月2.增殖式組裝方式這種組裝方式又稱漸增式組裝首先對一個個模塊進行模塊測試,然后將這些模塊逐步組裝成較大的系統(tǒng)在組裝的過程中邊連接邊測試,以發(fā)現(xiàn)連接過程中產(chǎn)生的問題通過增殖逐步組裝成為要求的軟件系統(tǒng)。

第153頁,課件共183頁,創(chuàng)作于2023年2月(1)自頂向下的增殖方式這種組裝方式將模塊按系統(tǒng)程序結(jié)構(gòu),沿控制層次自頂向下進行組裝。自頂向下的增殖方式在測試過程中較早地驗證了主要的控制和判斷點。選用按深度方向組裝的方式,可以首先實現(xiàn)和驗證一個完整的軟件功能。第154頁,課件共183頁,創(chuàng)作于2023年2月第155頁,課件共183頁,創(chuàng)作于2023年2月(2)自底向上的增殖方式這種組裝的方式是從程序模塊結(jié)構(gòu)的最底層的模塊開始組裝和測試。因為模塊是自底向上進行組裝,對于一個給定層次的模塊,它的子模塊(包括子模塊的所有下屬模塊)已經(jīng)組裝并測試完成,所以不再需要樁模塊。在模塊的測試過程中需要從子模塊得到的信息可以直接運行子模塊得到。

第156頁,課件共183頁,創(chuàng)作于2023年2月自頂向下增殖的方式和自底向上增殖的方式各有優(yōu)缺點。一般來講,一種方式的優(yōu)點是另一種方式的缺點。第157頁,課件共183頁,創(chuàng)作于2023年2月(3)混合增殖式測試衍變的自頂向下的增殖測試首先對輸入/輸出模塊和引入新算法模塊進行測試;再自底向上組裝成為功能相

溫馨提示

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

評論

0/150

提交評論