版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
練習(xí)題一軟件質(zhì)量就是軟件產(chǎn)品的質(zhì)量。該說法正確的是(A)A.狹義質(zhì)量觀B.廣義質(zhì)量觀C.錯誤的D.無法判斷嚴(yán)重程度高的缺陷被修復(fù)的優(yōu)先級別一定高。該說法正確嗎?為什么?答案:不正確。軟件系統(tǒng)往往是為特定的業(yè)務(wù)服務(wù)的,某些業(yè)務(wù)功能對企業(yè)的核心業(yè)務(wù)至關(guān)重要。如果一個不太嚴(yán)重的缺陷影響了核心業(yè)務(wù)功能,而一個嚴(yán)重的缺陷影響的是非核心業(yè)務(wù)功能,那么修復(fù)影響核心業(yè)務(wù)功能的缺陷的優(yōu)先級可能會更高。修復(fù)缺陷的優(yōu)先級是綜合考慮缺陷的嚴(yán)重程度、可規(guī)避性、出現(xiàn)頻率、修復(fù)成本和風(fēng)險以及業(yè)務(wù)優(yōu)先級等多種因素的結(jié)果。請舉例說明缺陷(Fault)、錯誤(Error)、失效(Failure)的區(qū)別。答案:缺陷(Fault)指軟件中的靜態(tài)錯誤,是產(chǎn)生不正確結(jié)果的人為動作;錯誤(Error)指工作產(chǎn)品中出現(xiàn)的瑕疵或缺點,導(dǎo)致軟件產(chǎn)品無法滿足用戶需求或者規(guī)格說明,需要修復(fù)或替換,它是內(nèi)部的錯誤狀態(tài);失效(Failure)指軟件運行時,缺陷被激活導(dǎo)致的不正確現(xiàn)象或者錯誤顯示,是外部的不正確行為。如下面的代碼:publicstaticintnumZero(int[]arr){//Effects:IfarrisnullthrowNullPointerException//elsereturnthenumberofoccurrencesof0inarrintcount=0;for(inti=1;i<arr.length;i++){if(arr[i]==0){count++;}}returncount;}缺陷(Fault):循環(huán)變量inti=1,應(yīng)為i=0,此處為程序員輸入錯誤;錯誤(Error):輸入測試用例[2,7,0]時,期望輸出為1,實際輸出為1。在首次循環(huán)迭代時,i應(yīng)該為0,程序里為1,內(nèi)部狀態(tài)錯誤,但不影響輸出結(jié)果;失效(Failure):輸入測試用例[0,2,7]時,期望輸出為1,實際輸出為0。在首次循環(huán)迭代時,i應(yīng)該為0,程序里為1,內(nèi)部狀態(tài)錯誤,傳遞出來影響到輸出結(jié)果。軟件測試是軟件質(zhì)量保證的唯一手段嗎?為什么?答案:軟件測試是軟件質(zhì)量保證的主要手段,是質(zhì)量控制的方法。軟件質(zhì)量保證是一個全面的、貫穿整個軟件生命周期的過程,包括從需求分析、設(shè)計、編碼到測試、維護(hù)等各個階段的質(zhì)量控制和管理。驗證(Verification)與確認(rèn)(Validation)有什么區(qū)別?答案:驗證是評價系統(tǒng)或組件,以確定給定階段的產(chǎn)品是否滿足該階段開始時確定的條件的過程。確認(rèn)是在開發(fā)過程之中或結(jié)束時評價系統(tǒng)或組件,以確定其是否滿足所描述需求的過程。驗證活動關(guān)注“我們是否恰當(dāng)?shù)貥?gòu)建產(chǎn)品”,確認(rèn)活動關(guān)注“我們是否構(gòu)建恰當(dāng)?shù)漠a(chǎn)品”。驗證和確認(rèn)是相輔相成的。驗證確保軟件按照設(shè)計實現(xiàn),確認(rèn)確保軟件滿足用戶需求。只有兩者都通過,才能確保軟件的質(zhì)量。通常先進(jìn)行驗證,再進(jìn)行確認(rèn)。驗證是確認(rèn)的基礎(chǔ),只有驗證通過的軟件才有資格進(jìn)入確認(rèn)階段。為什么需要軟件測試用例?答案:實現(xiàn)測試目標(biāo),完成測試,需要設(shè)計測試用例來實現(xiàn)。測試用例根據(jù)軟件需求規(guī)格設(shè)計,涵蓋需求功能、性能等要求。測試用例是測試執(zhí)行的基礎(chǔ)。測試不可能進(jìn)行窮舉測試,測試用例為某個特定的測試目標(biāo)而設(shè)計,它是測試操作過程序列、條件、預(yù)期結(jié)果及相關(guān)數(shù)據(jù)的一個特定的集合。設(shè)計好的測試用例能以最小的財力、物力、時間解決問題。軟件測試和軟件質(zhì)量保證有哪些區(qū)別與聯(lián)系?答案:二者相同點:都是貫穿整個軟件開發(fā)生命周期的;二者不同點:軟件質(zhì)量保證側(cè)重對流程中各過程的管理與控制,是一項管理工作,側(cè)重于流程和方法。而測試是對流程中各過程管理與控制策略的具體執(zhí)行與實施,其對象是軟件產(chǎn)品(包括階段性的產(chǎn)品),即測試是對軟件產(chǎn)品的檢驗,是一項技術(shù)性的工作。測試,常常被認(rèn)為是質(zhì)量控制的最主要手段。軟件的質(zhì)量與哪些因素有關(guān)?答案:第一個因素是能滿足用戶需要;第二能合理處理進(jìn)度、成本、功能的關(guān)系;第三具備一定的可擴展性和靈活性,能夠適應(yīng)一定程度的需求變化;第四具備一定的可靠性,能夠有效處理例外的情況,能夠承受各種非法情況的沖擊;最后的因素是保持成本和性能的平衡。請辨析軟件的質(zhì)量是“設(shè)計出來的”還是“測試出來的”觀點。答案:軟件的質(zhì)量既是設(shè)計出來的也是測試出來的,不論是設(shè)計還是測試都不可能做到不出現(xiàn)問題,不論是設(shè)計還是測試都旨在引導(dǎo)和滿足客戶的需求,通過良好的設(shè)計或者整個開發(fā)過程的測試得到高質(zhì)量的軟件,將質(zhì)量達(dá)到客戶、開發(fā)人員、開發(fā)企業(yè)的一個平衡點。如何規(guī)范地描述一個缺陷?答案:規(guī)范地描述一個缺陷是軟件測試和質(zhì)量保證中的關(guān)鍵環(huán)節(jié)。通常包括以下描述項:缺陷編號、標(biāo)題、描述、環(huán)境、重現(xiàn)步驟、預(yù)期結(jié)果、實際結(jié)果、嚴(yán)重程度、優(yōu)先級、截圖與附件等。在測試管理中,應(yīng)該收集哪些測試過程數(shù)據(jù),并如何對這些過程數(shù)據(jù)進(jìn)行分析?答案:在測試管理中,收集和分析測試過程數(shù)據(jù)是確保測試活動有效性和效率的關(guān)鍵環(huán)節(jié)。主要有測試計劃文檔、測試計劃變更記錄;測試用例總數(shù)、用例狀態(tài)、用例覆蓋率、用例優(yōu)先級;缺陷總數(shù)、缺陷狀態(tài)、缺陷嚴(yán)重程度、缺陷優(yōu)先級、缺陷修復(fù)情況;測試執(zhí)行進(jìn)度、時間、頻率;測試人員、工具、環(huán)境情況;以及測試報告、會議記錄、用戶反饋等。通過收集這些數(shù)據(jù),利用缺陷趨勢分析、分布分析、來源分析等方法、測試用例覆蓋率分析、有效性分析、執(zhí)行效率分析、資源利用分析等方法,可以監(jiān)控測試進(jìn)度、評估測試質(zhì)量、優(yōu)化測試策略,并為項目決策提供支持。練習(xí)題二軟件測試的對象包括(B)A)目標(biāo)程序和相關(guān)文檔B)源程序、目標(biāo)程序、數(shù)據(jù)及相關(guān)文檔C)目標(biāo)程序、操作系統(tǒng)和平臺軟件D)源程序和目標(biāo)程序下列說法正確的是(D)。A)測試要執(zhí)行所有可能的輸入;B)有時間就多測試一些,來不及就少測試一些;C)軟件測試是測試人員的事,與開發(fā)人員無關(guān);D)好的測試不一定要使用很多的測試工具。簡述測試過程和開發(fā)過程的關(guān)系。答案:測試過程和軟件開發(fā)過程都應(yīng)貫穿軟件過程的整個生命周期,它們是相輔相成和相互依賴的。測試過程和開發(fā)過程是同步的,即在做系統(tǒng)分析、產(chǎn)品功能設(shè)計的同時,測試工程師就可以閱讀、評審需求規(guī)格說明書,從而確定測試目標(biāo),開始測試工作。測試過程是對軟件開發(fā)過程中階段性成果和最終產(chǎn)品進(jìn)行驗證和確認(rèn)的過程,二者相互依賴。在開發(fā)前期,測試過程更多依賴于開發(fā)過程;在開發(fā)后期,開發(fā)過程更多依賴于測試過程。二者目標(biāo)相同,都是開發(fā)客戶滿意的高質(zhì)量產(chǎn)品。對比不同測試模型的優(yōu)缺點。答案:V模型:優(yōu)點:強調(diào)了在整個軟件項目開發(fā)中需要經(jīng)歷的若干個測試級別,并與每一個開發(fā)級別對應(yīng)。缺點:忽略了測試的對象不應(yīng)該僅僅包括程序,沒有明確指出對需求、設(shè)計的測試。W模型:優(yōu)點:補充了V模型中忽略的內(nèi)容,強調(diào)了測試計劃等工作的先行和對系統(tǒng)需求和系系統(tǒng)設(shè)計的測試。缺點:與V模型相同,沒有對軟件測試的流程進(jìn)行說明。X模型:優(yōu)點:定位了探索性測試,這是不進(jìn)行事先計劃的探索性的特殊類型的測試,這一方式往往能幫助有經(jīng)驗的測試人員在測試計劃之外發(fā)現(xiàn)更多的軟件錯誤。缺點:X模型從沒有被文檔化,沒有明確的需求角色確認(rèn)。H模型:優(yōu)點:強調(diào)了測試是獨立的,只要測試準(zhǔn)備完成,就可以執(zhí)行測試,可以與其他流程并發(fā)執(zhí)行;軟件測試活動可以盡早準(zhǔn)備、執(zhí)行,具有很強的靈活性。缺點:管理要求高,需要清晰地定義規(guī)則和管理制度;技能要求高,需要精準(zhǔn)地定義每個迭代的規(guī)模;測試就緒點分析困難。在進(jìn)行軟件測試中,如何確定合理的測試模型和測試過程?答案:測試人員要明確軟件項目的測試目的、所采用的開發(fā)過程模型和組織條件等,據(jù)此選擇合適的測試模型,盡可能應(yīng)用模型中對項目有實用價值的方面。在軟件測試過程中,沒有最好的過程可以遵循,可以根據(jù)項目的類型,開發(fā)模型,企業(yè)的管理、員工的層次等方面來綜合考慮。6、從測試模型演化過程可以看到,軟件測試的地位發(fā)生了怎樣的變化?為什么?答案:從瀑布模型到敏捷開發(fā),軟件測試的地位經(jīng)歷了從邊緣到核心、從被動到主動、從單一到綜合的顯著變化,我們可以發(fā)現(xiàn)軟件測試在不斷左移,意味著人們越來越重視軟件質(zhì)量,測試成為軟件質(zhì)量的關(guān)鍵環(huán)節(jié);由于軟件復(fù)雜性的增加、市場需求的變化、技術(shù)的進(jìn)步、敏捷開發(fā)的普及以及安全需求的增加,現(xiàn)代軟件測試不僅是發(fā)現(xiàn)缺陷,更是預(yù)防缺陷、優(yōu)化流程、提升用戶體驗的重要手段,盡早測試,修復(fù)缺陷的代價就會降低。7、請闡述在智能時代軟件測試人員應(yīng)具備哪些品質(zhì)和能力?答案:一名優(yōu)秀的軟件測試工程師應(yīng)具備計算機專業(yè)技能包括測試專業(yè)技能、軟件編程技能、掌握網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫、中間件等計算機基礎(chǔ)知識;行業(yè)領(lǐng)域知識;個人素養(yǎng)要優(yōu)秀包括對測試的興趣、好奇心、做事專心細(xì)心耐心有責(zé)任心和自信心。智能時代,軟件測試人員不僅需要掌握技術(shù)硬實力,如測試分析、測試設(shè)計、測試部署與執(zhí)行、測試總結(jié),以及專項能力,如自動化測試、AI應(yīng)用、性能測試等,還需要具備良好的軟技能,如團(tuán)隊合作、溝通能力、持續(xù)學(xué)習(xí)、適應(yīng)新技術(shù)、關(guān)注行業(yè)動態(tài)等。練習(xí)題三如何結(jié)合使用等價類測試技術(shù)和邊界值分析技術(shù)設(shè)計測試用例?答案:進(jìn)行黑盒測試時需要根據(jù)被測試對象選擇合適的測試方法。在任何情況下都必須使用邊界值分析方法。經(jīng)驗表明用這種方法設(shè)計出測試用例發(fā)現(xiàn)程序錯誤的能力最強。必要時用等價類劃分方法補充一些測試用例。有一個小程序,能夠求出三個0~9999間整數(shù)中的最大值,請分別用邊界值分析和健壯性測試方法設(shè)計測試用例。答案:輸入值a、b、c的極值分析min-minmin+nommax-maxmax+-1062~99979998999910000邊界值分析測試用例、健壯性分析測試用例序號abc預(yù)期結(jié)果測試結(jié)果備注16707c取極值26717367999899984679999999956788abc為nom66077b取極值761778699987999896999979999b取極值100677a取極值111677129998679998139999679999146710000輸入無效考慮c值健壯性1567-1166-17考慮b值健壯167考慮a值健壯性191000067注:序號1-13為邊界值分析測試用例;序號1-19為健壯性分析測試用例。為什么要進(jìn)行等價類的劃分?等價類劃分應(yīng)遵循哪些原則?答案:使用等價類劃分可以在測試資源有限的情況下,用少量有代表性的數(shù)據(jù)得到比較好的測試結(jié)果?;驹瓌t如下:等價類測試的弱形式不如對應(yīng)的強形式的測試全面。如果實現(xiàn)語言是強類型,則沒有必要使用健壯形式的測試。如果錯誤條件非常,則進(jìn)行健壯形式的測試是合適的如果輸入數(shù)據(jù)以離散值區(qū)間和集合定義,則等價類測試是合適的。當(dāng)然也適用于如果變量值越界系統(tǒng)就會出現(xiàn)故障的系統(tǒng)。通過結(jié)合邊界值測試,等價類測試可得到加強。如果程序函數(shù)很復(fù)雜,則等價類測試是被指示的。在這種情況下,函數(shù)的復(fù)雜性可以幫助標(biāo)識有用的等價類。強等價類測試假設(shè)變量是獨立的,相應(yīng)的測試用例相乘會引起冗余問題。如果存在依賴關(guān)系,則常常會生成錯誤測試用例。在發(fā)現(xiàn)合適的等價關(guān)系之前,可能需要進(jìn)行多次嘗試。針對以下問題:某一8位計算機,其十六進(jìn)制常數(shù)的定義是以0x或0X開頭的十六進(jìn)制整數(shù),其取值范圍為-7f~7f(不區(qū)分大小寫字母),如0x11,0x2A,-0x3c。請采用等價類劃分的方法設(shè)計測試用例。答案:(1)劃分等價類輸入條件等價類有效等價類編號無效等價類編號長度3-5位0小于3位8大于5位9符號無1長度大于1的字符串10+或—2非+和—的一個其它字符11前綴0X3一個數(shù)字或字符120x4長度大于2的數(shù)字字符串13長度為2的非0x和0X字符串14第一位數(shù)值0到7之間的數(shù)5非數(shù)字符號15大于7的整數(shù)16第二位數(shù)值數(shù)6非數(shù)字非字母的符號17a到f的字母或A到F的字母7其它字母18(2)根據(jù)上述等價類設(shè)計測試用例測試用例編號輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋等價類符號前綴第一位數(shù)值第二位數(shù)值10x拒絕820x4455拒絕930x75接收1、3、5、64-0X0A接收2、4、5、75Ab0x05拒絕106*0X0a拒絕117+A0B拒絕12801X57拒絕139+Ab63拒絕1410-0xaB拒絕1511-0X89拒絕1612+0x7*拒絕1713oX5Z拒絕18假定一臺ATM機允許提取增量為50元,總金額從100~2000(包含2000)不等的現(xiàn)金,請結(jié)合等價類方法和邊界值分析進(jìn)行測試。答案:邊界值分析法:測試用例輸入金額預(yù)期輸出150超出[100,2000]2150正常取出31000正常取出41950正常取出52050超出[100,2000]等價分析法:有效等價類編號無效等價類編號整數(shù)1浮點數(shù)4在100到2000之間2小于1005大于20006在100到2000之間,能被50整除3在100到2000之間,不能被50整除7用例編號輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋的等價類1100提取成功1、2、32100.5提示:輸入無效2,4350提示:輸入無效542050提示:輸入無效2,65101提示:輸入無效2,7有一個學(xué)生成績管理系統(tǒng),要求把成績好的同學(xué)放到前面,其中每個人都有三門課程成績:語文、數(shù)學(xué)、英語。首先是按個人的總成績進(jìn)行排名,如果某兩個人的總分相同,則按他們的語文成績進(jìn)行排名;如果總成績和語文成績都相同,則按照他們的數(shù)學(xué)成績進(jìn)行排名,請用等價類方法進(jìn)行測試。(1)劃分等價類等價類輸入條件有效等價類編號無效等價類編號三個0-100的數(shù)0-100的數(shù)1小于07大于1008三個數(shù)2未輸入成績9只輸入一個數(shù)10只輸入兩個數(shù)11輸入非數(shù)字12排名總成績不同3總成績相同,語文不同4總成績和語文均相同,數(shù)學(xué)不同5總成績和各科成績均相同6程序有三個輸入變量mouth、day、year(均為整數(shù),且滿足:1<=mouthc=12,1<=day<=31,1900<=year<=2050),分別作為輸入日期的月份、日、年份,通過程序可以輸出日期在日歷上隔一天(第三天〉的日期。例如,輸入為2005年11月29日,則該程序的輸出為2005年12月1日。請用等價類測試和邊界測試方法設(shè)計測試用例。答案:邊界值測試:測試用例輸入數(shù)據(jù)預(yù)期輸出monthdayyear16151899year超出[1900,2050]261519001900.6.18361519011901.6.18461519751975.6.18561520492049.6.18661520502050.6.1876152051year超出[1900,2050]86-11975day超出[1,31]96119751975.6.4106219751975.6.51162719751975.6.301262819751975.7.11362919751975.7.21463019751975.7.3156311975輸入日期超界1643119751975.5.31722920002000.3.3182292001輸入日期超界19-1152000month超出[1,12]2011520002000.1.182121520002000.2.1822111520002000.11.1823121520002000.12.182413152000month超出[1,12]等價類測試:等價類有效等價類編號無效等價類編號month整數(shù)1浮點數(shù)101<=month<=122month<111month>1212day整數(shù)3浮點數(shù)13month=[1、3、5、7、8、10、12]時1<=day<=314day<114day>3115month=[4、6、9、11]時1<=day<=305month為4、6、9、11時day>3016month=2且leapyear1<=day<=296month為2且year為閏年時,day>2917month=2且不為leapyear1<=day<=287month為2且year不是閏年時,day>2818year整數(shù)8浮點數(shù)191990<=year<=20509year<199020year>205021測試用例編號輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋等價類monthdayyear11119901990.1.31、2、3、4、8、92113019911991.12.21、2、3、5、8、9322919961996.3.21、2、3、6、8、9422820502050.3.21、2、3、7、8、951.521995拒絕106051996拒絕11732301997拒絕12831.31905拒絕139501906拒絕16122302004拒5拒絕19157211989拒絕20168222051拒絕21某軟件的一個模塊的需求規(guī)格說明書中描述:(1)年薪制員工:嚴(yán)重過失,扣年終風(fēng)險金的4%;過失,扣年終風(fēng)險金的2%。(2)非年薪制員工:嚴(yán)重過失,扣當(dāng)月薪資的8%;過失,扣當(dāng)月薪資的4%。請繪制出判定表,并設(shè)計相應(yīng)的測試用例。請繪制出判定表,并設(shè)計相應(yīng)的測試用例。答案:(1)繪制判定表1234567條件年薪制員工YYYNNN—嚴(yán)重過失YYNYYNN過失YNYYNYN動作扣年終風(fēng)險金的4%√√扣年終風(fēng)險金的2%√√扣當(dāng)月薪資的8%√√扣當(dāng)月薪資的4%√√不扣√(2)設(shè)計測試用例測試用例編號輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋的規(guī)則1年薪制員工嚴(yán)重過失扣年終風(fēng)險金的4%12年薪制員工過失扣年終風(fēng)險金的2%23非年薪制員工嚴(yán)重過失扣當(dāng)月薪資的8%34非年薪制員工過失扣當(dāng)月薪資的4%45年薪制員工無過失不扣5某公司折扣政策:年交易額在10萬元以下的,無折扣;在10萬元以上的并且近三個月無欠款的,折扣率10%;在10萬元以上,雖然近三個月有欠款,但是與公司交易在10年以上的,折扣率8%;在10萬元以上,近三個月有欠款,且交易在10年以下的折扣率5%;請用判定表來描述該公司的折扣政策。答案:12345條件年交易<=10萬元YNNNN近三月無存款-YYNN與公司交易>=10年-YNYN動作無折扣√折扣率5%√折扣率8%√折扣率10%√√請討論判定表測試能夠在多大程度上處理多缺陷假設(shè)。答案:判斷表在表達(dá)是可以處理多缺陷假設(shè)的,在判斷表的表示上,條件樁羅列了多個條件,可以通過條件組合,生成多個規(guī)則來解決輸入條件的多缺陷問題。請使用因果圖法為三角形問題設(shè)計測試用例。答案:因:正整數(shù)3個數(shù)a+b>ca+c>bb+c>aa=b!=ca=c!=bb=c!=aa=b=ca!=b!=c果:不能構(gòu)成三角形等腰三角形等邊三角形一般三角形因果圖如下:測試用例(略)分析中國象棋中走馬的實際情況(下面未注明的均指的是對馬的說明)答案:(1)如果落點在棋盤外,則不移動棋子;(2)如果落點與起點不構(gòu)成日字型,則不移動棋子;(3)如果落點處有自己方棋子,則不移動棋子;(4)如果在落點方向的鄰近交叉點有棋子(絆馬腿),則不移動棋子;(5)如果不屬于1-4條,且落點處無棋子,則移動棋子;(6)如果不屬于1-4條,且落點處為對方棋子(非老將),則移動棋子并除去對方棋子;(7)如果不屬于1-4條,且落點處為對方老將,則移動棋子,并提示戰(zhàn)勝對方,游戲結(jié)束。(1)原因:1.落點在棋盤上;2.落點與起點構(gòu)成日字;3.落點處不為自己方棋子;4.落點方向的鄰近交叉點有棋子;5.落點處無棋子;6.落點處為對方棋子(非老將);7.落點處為對方老將。(2)結(jié)果:21.不移動棋子;22.移動棋子;23.移動棋子,并除去對方棋子;24.移動棋子,并提示戰(zhàn)勝對方,結(jié)束游戲。添加中間結(jié)點11(3)繪制因果圖,如圖所示。1111123457621232224OE假設(shè)商店貨品價格(R)都不大于100元(且為整數(shù)),若顧客付款(P)在100元內(nèi),現(xiàn)有一個程序能在每位顧客付款后給出找零錢的最佳組合(找給顧客貨幣張數(shù)最少)。假定此商店的貨幣面值只包括:50元(N50)、10元(N10)、5元(N5)、1元(N1)四種。答案:邊界值分析法:測試用例輸入金額預(yù)期輸出1R=101R超出[1,100]2R=99能夠支付3P=101P超出[1,100]4R<=P<=100能夠支付5P<R不能支付等價分析法:等價類有效等價類編號無效等價類編號R整數(shù)1浮點數(shù)101<=R<=1002R<111R>10012P整數(shù)3浮點數(shù)131<=P<=R<=1004P<114P>10015R>P16N整數(shù)5浮點數(shù)19N50=0||N50=16N50!=0||N50!=1200<=N10<=47N10<021N10>422N5=0||N5=18N5!=0||N5!=1230=<N1<=49N1<024N1>425測試用例編號輸入數(shù)據(jù)預(yù)期結(jié)果R(價格)P(支付)N1N5N10N50199991000接受291914100接受390900010接受460600040接受550500001接受649491001接受746464001接受845450101接受941414101接受1040400040接受11994100接受12550100接受13444000接受14101-----拒絕121599.5100----拒絕101691919000拒絕25179000200拒絕231840400060拒絕221990900002拒絕20第4章--練習(xí)題4請用邏輯覆蓋法對下面的java代碼段進(jìn)行測試。publiccharfunction(intx,inty){
chart;
if((x>=90)&&(y>=90)){
t='A';
}else{
if((x+y)>=165)
t='B';
else
t='C';
}
returnt;
}答案::修改代碼:/**
*第4章練習(xí)題1
*/
publicclassSample1{
/**
*該方法接收兩個整數(shù)參數(shù)(科目成績),返回等級
*@paramx科目1的分?jǐn)?shù)
*@paramy科目2的分?jǐn)?shù)
*@returnchar等級
*/
publiccharfunction(intx,inty){
chart;
if((x>=90)&&(y>=90)){
t='A';
}else{
if((x+y)>=165)
t='B';
else
t='C';
}
returnt;
}
}測試代碼如:importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.api.Test;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample1Test{
@DisplayName("語句覆蓋")
@Test
voidlineTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
@DisplayName("分支覆蓋")
@Test
voidbranchTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
@DisplayName("條件覆蓋")
@Test
voidconditionTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
@DisplayName("判定-條件覆蓋")
@Test
voidbranchConditionTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
@DisplayName("條件組合覆蓋")
@Test
voidconditionComTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('C',sample1.function(70,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
@DisplayName("條件組合覆蓋")
@Test
voidpathTest(){
Sample1sample1=newSample1();
assertEquals('A',sample1.function(90,90));
assertEquals('B',sample1.function(90,75));
assertEquals('C',sample1.function(80,75));
}
}為以下流程圖所示的程序段設(shè)計一組測試用例,要求分別滿足語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。t=-1t=-1x>8andy>5x>16ory>10x>0ory>0t=0t=10FalseFalseTrueTrueTrueFalset=5答案:畫出程序流程圖對應(yīng)的控制流圖,如圖所示(說明:圖中綠色和紅色的標(biāo)準(zhǔn)對應(yīng)程序流程圖中條件和判定),提示復(fù)合條件需要拆分。記:x>8 T1, x<=9 F1,y>5 T2, y<=5 F2,x>0 T3, x<=0 F3,y>0 T4, y<=0 F4,x>16 T5, x<=16 F5,y>10 T6, y<=10 F6(2)語句覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(3)判定覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(4)條件覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(5)判定-條件覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9(6)組合覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9x=20,y=15T1T2T3T4T5T622’41-2-2’-4-8-9x=0,y=15F1T2F3T4F5T62-3-3’1-2-3-3’-6-9(7)路徑覆蓋測試用例覆蓋條件覆蓋分支執(zhí)行路徑x=4,y=4F1F2T3T4F5F6361-2-3-6-9x=10,y=6T1T2T3T4F5F622’44’1-2-2’-4-4’-7-9x=0,y=0F1F2F3F4F5F6233’1-2-3-3’-5-9x=20,y=15T1T2T3T4T5T622’44’1-2-2’-4-8-9請用邏輯覆蓋和基路徑測試方法對下面的java代碼進(jìn)行測試。代碼的功能是:用折半查找法在元素呈升序排列的數(shù)組中查找值為key的元素。/**
*二分查找
*/
publicclassSample3{
/**
*二分查找
*@paramarray數(shù)組
*@paramkey關(guān)鍵字
*@return位置
*/
publicintbinSearch(intarray[],intkey){
intmid,low,high;
low=0;
high=array.length-1;
while(low<=high){
mid=(low+high)/2;
if(key==array[mid])
returnmid;
elseif(key<array[mid])
high=mid-1;
else
low=mid+1;
}
return-1;
}
}答案:importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.params.ParameterizedTest;
importvider.CsvSource;
importjava.util.Arrays;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample3Test{
@DisplayName("基路徑測試")
@ParameterizedTest(name="{index}=>查找''{1}''預(yù)期位置{2}")
@CsvSource({"[1:2:3:4:5:6:7:8:9:10],9,8",
"[1:2:3:4:5:6:7:8:9:10],10,9",
"[1:2:3:4:5:6:7:8:9:10],4,3",
"[1:2:3:4:5:6:7:8:9:10],-1,-1"
})
voidbasePathTest(StringarrStr,intkey,intpos){
arrStr=arrStr.substring(1,arrStr.length()-1);
Sample3sample3=newSample3();
String[]arrayString=arrStr.split(":");
int[]array=Arrays.stream(arrayString)
.mapToInt(Integer::parseInt)
.toArray();
assertEquals(pos,sample3.binSearch(array,key));
}
@DisplayName("邏輯覆蓋")
@ParameterizedTest(name="{index}=>查找''{1}''預(yù)期位置{2}")
@CsvSource({"[1:2:3:4:5:6:7:8:9:10],9,8",
"[1:2:3:4:5:6:7:8:9:10],10,9",
"[1:2:3:4:5:6:7:8:9:10],4,3",
"[1:2:3:4:5:6:7:8:9:10],1,0",
"[1:2:3:4:5:6:7:8:9:10],15,-1",
"[1:2:3:4:5:6:7:8:9:10],-1,-1"
})
voidlogicTest(StringarrStr,intkey,intpos){
arrStr=arrStr.substring(1,arrStr.length()-1);
Sample3sample3=newSample3();
String[]arrayString=arrStr.split(":");
int[]array=Arrays.stream(arrayString)
.mapToInt(Integer::parseInt)
.toArray();
assertEquals(pos,sample3.binSearch(array,key));
}
}以下代碼由java語言書寫,請按要求回答問題。publicintisLeap(intyear){ if(year%4==0){ if(year%100==0){ if(year%400==0) leap=1; else leap=0; } else leap=1;}else leap=0; returnleap;}問題1:請畫出以上代碼的控制流圖問題2:請計算上述控制流圖的圈復(fù)雜度V(G)(獨立線性路徑數(shù))問題3:假設(shè)輸入的取值范圍是0<year<2010,請使用基本路徑測試法為變量year設(shè)計測試用例,使其滿足基本路徑覆蓋的要求。答案:問題1:(圖中紅色字符對應(yīng)代碼行號)問題2:V(G)=E–N+2=12–10+2=4V(G)=判定節(jié)點數(shù)+1=3+1=4v(G)=區(qū)域數(shù)=4問題3:源碼:/**
*閏年判斷
*/
publicclassSample4{
/**
*閏年判斷
*
*@paramyear年份
*@return閏年
*/
publicBooleanisLeap(intyear){
Booleanleap;
if(year%4==0){
if(year%100==0){
if(year%400==0)
leap=true;
else
leap=false;
}else
leap=true;
}else
leap=false;
returnleap;
}
}測試代碼:importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.params.ParameterizedTest;
importvider.CsvSource;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample4Test{
@DisplayName("基路徑測試")
@ParameterizedTest(name="{index}=>測試年:{0}")
@CsvSource({"2000,true",
"2024,true",
"1900,false",
"2001,false"
})
voidisLeapTest(intyear,booleanleap){
Sample4sample4=newSample4();
assertEquals(leap,sample4.isLeap(year));
}
}設(shè)計判別一個整數(shù)x(x≥2)是否為素數(shù)的程序,并設(shè)計測試用例滿足條件覆蓋和基本路徑覆蓋。答案:源碼:/**
*判斷是否為質(zhì)數(shù)
*/
publicclassSample5{
/**
*判斷是否為質(zhì)數(shù)
*@paramn數(shù)字
*@return是否為質(zhì)數(shù)
*/
publicbooleanprimeNumber(intn){
inti;
for(i=2;i<n;i++){
if(n%i==0){
returnfalse;
}
}
if(n==i){
returntrue;
}else{
returnfalse;
}
}
}測試代碼:importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.params.ParameterizedTest;
importvider.CsvSource;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample5Test{
@DisplayName("基路徑測試")
@ParameterizedTest(name="{index}=>測試年:{0}")
@CsvSource({"2,true","3,true",
"1,false","4,false",
})
voidprimeNumberTest(intn,booleanprime){
Sample5sample5=newSample5();
assertEquals(prime,sample5.primeNumber(n));
}
}某程序的功能是:輸入兩個正整數(shù),計算這兩個數(shù)的最大公約數(shù)。程序代碼如下。Publicintdivisor_c(inta,
intb){ if(a<=0||b<=0){ return
0; } while(a!=b){ if(a>b) a=a-b; else b=b-a; } returna; }請根據(jù)程序內(nèi)容,請完成下列題目。(1)根據(jù)程序代碼繪制控制流圖。(2)計算控制流圖的圈復(fù)雜度。(3)找出程序獨立路徑。(4)設(shè)計測試用例,實現(xiàn)基路徑覆蓋。(5)設(shè)計測試用例,實現(xiàn)語句覆蓋。 答案:控制流圖圈復(fù)雜度V(G)=E–N+2=13–10+2=5V(G)=判定節(jié)點數(shù)+1=4+1=5v(G)=區(qū)域數(shù)=5獨立路徑:1-2-91-1’-2-91-3-7-91-3-4-5-8-3-7-91-3-4-6-8-3-7-9(5)測試用例代碼如下:源碼:/**
*求最大公約數(shù)
*/
publicclassSample6{
/**
*求最大公約數(shù)
*@parama數(shù)字a
*@paramb數(shù)字b
*@return最大公約數(shù)
*/
publicintdivisor(inta,intb){
if(a<=0||b<=0){
return0;
}
while(a!=b){
if(a>b)
a=a-b;
else
b=b-a;
}
returna;
}
}測試代碼importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.params.ParameterizedTest;
importvider.CsvSource;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample6Test{
@DisplayName("基路徑測試")
@ParameterizedTest(name="{index}=>測試:{0}|{1}公約數(shù){2}")
@CsvSource({"2,1,1","2,4,2",
"3,3,3","4,6,2",
"-3,3,0","4,-6,0",
})
voiddivisorTest(inta,intb,intexpected){
Sample6sample6=newSample6();
assertEquals(expected,sample6.divisor(a,b));
}
}第5章--練習(xí)題51.單元測試中的單元描述正確的有哪些? A)指一個可獨立運行的代碼段,獨立運行是指的是這個工作不受前一次或接下來的程序運行的結(jié)果影響; B)面向過程的測試中指函數(shù)或子過程; C)面向?qū)ο蟮臏y試中指類或類的方法; D)面向?qū)ο蟮臏y試中成員屬性的測試;答案:ABC2.單元測試的描述中正確的描述有哪些? A)單元測試是對軟件基本組成單元進(jìn)行的測試。 B)單元測試從程序的內(nèi)部結(jié)構(gòu)出發(fā)來進(jìn)行測試的,多采用白盒測試(結(jié)構(gòu)性測試)技術(shù)。 C)單元測試是軟件開發(fā)過程中進(jìn)行的最低級別的測試活動。測試進(jìn)行得越早越好。 D)測試工作主要是由程序開發(fā)人員進(jìn)行自測和互測,同時還需要單獨的測試角色,來進(jìn)行測試和評審答案:ABCD3.單元測試中驅(qū)動模塊(Driver)的作用? A)調(diào)用被測試單元; B)它接收測試數(shù)據(jù),并把數(shù)據(jù)傳送給被測單元, C)出實測結(jié)果。 D)被測試單元調(diào)用答案:ABC單元測試有那些步驟,各個步驟有那些實施內(nèi)容。答案:單元測試包含制訂測試計劃、單元測試設(shè)計、測試執(zhí)行、測試評估等步驟。制定測試計劃的實施內(nèi)容主要包括單元測試準(zhǔn)備、制定單元測試策略和單元測試計劃日程。單元測試設(shè)計的實施內(nèi)容主要是根據(jù)設(shè)計規(guī)格說明書,建立單元測試環(huán)境,完成測試設(shè)計和腳本的開發(fā)。測試執(zhí)行的實施內(nèi)容主要是測試組根據(jù)測試計劃和測試日程安排進(jìn)行測試,并輸出測試結(jié)果,同時注意回歸測試的執(zhí)行。測試評估的實施內(nèi)容是由測試結(jié)果評估小組或評估人員對測試結(jié)果進(jìn)行評測、分析,并輸出分析結(jié)果。最后將從測試計劃開始到評估結(jié)束的所有文檔進(jìn)行整理收集,提交測試結(jié)果。簡述單元測試的目標(biāo)和意義。答案:單元測試的目的:一個是查找錯誤,提高軟件質(zhì)量;另一方面是節(jié)約成本和削減開發(fā)時間。單元測試的包含兩層意義:單元測試對軟件設(shè)計實現(xiàn)的意義。單元測試對軟件設(shè)計實現(xiàn)至關(guān)重要,旨在保障軟件質(zhì)量、降低開銷,并促進(jìn)代碼重構(gòu)與可測試性。它揭示設(shè)計流程,確保架構(gòu)分層合理,業(yè)務(wù)邏輯實現(xiàn)于邏輯層。單元測試作為實例,促進(jìn)開發(fā)者理解被測單元,替代過時文檔,提高代碼維護(hù)性,促進(jìn)團(tuán)隊溝通,是推行質(zhì)量文化的關(guān)鍵。單元測試對軟件開發(fā)者的意義。盡管單元測試看似增加工作量,但實則為開發(fā)者帶來諸多益處。它幫助開發(fā)者明確設(shè)計規(guī)格,鍛煉邏輯思維與代碼分析能力,促進(jìn)編寫標(biāo)準(zhǔn)一致,通過代碼審閱增進(jìn)團(tuán)隊跨領(lǐng)域理解與學(xué)習(xí)機會。6.對案例中的排序程序進(jìn)行修改,替換成為起泡排序程序。具體程序如下:publicvoidbubbleSort(){for(inti=arr.length;--i>=0;){for(intj=0;j<i;j++){if(arr[j]>arr[j+1]){intt=arr[j];arr[j]=arr[j+1];arr[j+1]=t;}pause(i,j);}}}熟讀程序,并對其進(jìn)行單元測試。要求完成以下測試:代碼規(guī)范檢查和邏輯結(jié)構(gòu)檢查基路徑覆蓋測試循環(huán)覆蓋測試等價類測試特殊值測試測試后,針對缺陷,對代碼進(jìn)行修復(fù),并在修復(fù)后進(jìn)行回歸測試。答案:規(guī)范后代碼/**
*冒泡排序
*/
publicclassSample6{
privateint[]arr;
/**
*冒泡排序
*/
publicvoidbubbleSort(){
for(inti=arr.length;--i>=0;){
for(intj=0;j<i;j++){
if(arr[j]>arr[j+1]){
intt=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
pause(i,j);
}
}
}
/**
*設(shè)置數(shù)組
*@return數(shù)組
*/
publicvoidsetArr(int[]arr){
this.arr=arr;
}
/**
*暫停函數(shù),這里打印數(shù)據(jù)
*@parami位置i
*@paramj位置j
*/
publicvoidpause(inti,intj){
System.out.println("交換數(shù)據(jù)位置:i="+i+",j="+j);
}
}基路徑覆蓋測試代碼@DisplayName("基路徑覆蓋測試")
@ParameterizedTest
@CsvSource({"[1:70:3:4:5:6:7:8:9:10],[1:3:4:5:6:7:8:9:10:70]",
"[1:-2:3],[-2:1:3]",
"[10:2:3:4:5:16:7:8:9:10],[2:3:4:5:7:8:9:10:10:16]",
})
voidbubbleSortPathTest(StringarrStr,StringarrExp){
Sample6sample6=newSample6();
String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");
int[]array=Arrays.stream(arrayString)
.mapToInt(Integer::parseInt)
.toArray();
String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");
int[]arrayExp=Arrays.stream(arrayStringExp)
.mapToInt(Integer::parseInt)
.toArray();
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(arrayExp,array);
}循環(huán)測試代碼,按照循環(huán)測試要求,測試循環(huán)次數(shù),本例中只需測試測試循環(huán)0次)@DisplayName("循環(huán)覆蓋測試")
@Test
voidbubbleSortCycleTest(){
Sample6sample6=newSample6();
int[]array=newint[]{};
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(newint[]{},array);
}等價類,本例中對輸入數(shù)據(jù)進(jìn)行有效等價類和無效等價類劃分,有效類通過基路徑測試和循環(huán)測試進(jìn)行測試,這里測試無效數(shù)據(jù)。@DisplayName("等價類測試-數(shù)組為null")
@Test
voidbubbleSortTest(){
Sample6sample6=newSample6();
int[]array=null;
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(null,array);
}特殊值測試,這里主要測試按正序排列數(shù)據(jù),倒序排列數(shù)據(jù),相同數(shù)據(jù)的排序的測試@DisplayName("特殊值測試")
@ParameterizedTest
@CsvSource({"[1:1:1:1:1],[1:1:1:1:1]",
"[1:2:3:4:5],[1:2:3:4:5]",
"[5:4:3:2:1],[1:2:3:4:5]",
})
voidbubbleSortSpecialTest(StringarrStr,StringarrExp){
Sample6sample6=newSample6();
String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");
int[]array=Arrays.stream(arrayString)
.mapToInt(Integer::parseInt)
.toArray();
String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");
int[]arrayExp=Arrays.stream(arrayStringExp)
.mapToInt(Integer::parseInt)
.toArray();
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(arrayExp,array);
}整理代碼,抽象公共函數(shù)。測試代碼如下:packagecn.st.ex5;
importorg.junit.jupiter.api.DisplayName;
importorg.junit.jupiter.api.Test;
importorg.junit.jupiter.params.ParameterizedTest;
importvider.CsvSource;
importjava.util.Arrays;
importstaticorg.junit.jupiter.api.Assertions.*;
classSample6Test{
@DisplayName("基路徑覆蓋測試")
@ParameterizedTest
@CsvSource({"[1:70:3:4:5:6:7:8:9:10],[1:3:4:5:6:7:8:9:10:70]",
"[1:-2:3],[-2:1:3]",
"[10:2:3:4:5:16:7:8:9:10],[2:3:4:5:7:8:9:10:10:16]",
})
voidbubbleSortPathTest(StringarrStr,StringarrExp){
test(arrStr,arrExp);
}
@DisplayName("循環(huán)覆蓋測試")
@Test
voidbubbleSortCycleTest(){
Sample6sample6=newSample6();
int[]array=newint[]{};
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(newint[]{},array);
}
@DisplayName("等價類測試-數(shù)組為null")
@Test
voidbubbleSortTest(){
Sample6sample6=newSample6();
int[]array=null;
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(null,array);
}
@DisplayName("特殊值測試")
@ParameterizedTest
@CsvSource({"[1:1:1:1:1],[1:1:1:1:1]",
"[1:2:3:4:5],[1:2:3:4:5]",
"[5:4:3:2:1],[1:2:3:4:5]",
})
voidbubbleSortSpecialTest(StringarrStr,StringarrExp){
test(arrStr,arrExp);
}
voidtest(StringarrStr,StringarrExp){
Sample6sample6=newSample6();
String[]arrayString=arrStr.substring(1,arrExp.length()-1).split(":");
int[]array=Arrays.stream(arrayString)
.mapToInt(Integer::parseInt)
.toArray();
String[]arrayStringExp=arrExp.substring(1,arrExp.length()-1).split(":");
int[]arrayExp=Arrays.stream(arrayStringExp)
.mapToInt(Integer::parseInt)
.toArray();
sample6.setArr(array);
sample6.bubbleSort();
assertArrayEquals(arrayExp,array);
}
}測試后,測試用例不能完全通過,源碼沒有對arr為空的值進(jìn)行處理,修改后的源碼如下:/**
*冒泡排序
*/
publicclassSample6{
privateint[]arr;
/**
*冒泡排序
*/
publicvoidbubbleSort(){
if(arr==null||arr.length==0){
return;
}
for(inti=arr.length;--i>=0;){
for(intj=0;j<i;j++){
if(arr[j]>arr[j+1]){
intt=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
pause(i,j);
}
}
}
/**
*設(shè)置數(shù)組
*@return數(shù)組
*/
publicvoidsetArr(int[]arr){
this.arr=arr;
}
/**
*交換暫停打印
*@parami位置i
*@paramj位置j
*/
publicvoidpause(inti,intj){
System.out.println("交換數(shù)據(jù)位置:i="+i+",j="+j);
}
}第6章--練習(xí)題6基于功能分解的集成的方法有哪些? A)非漸增式集成; B)自頂向下集成; C)自底向上集成; D)三明治集成;答案:BCD基于調(diào)用圖的集成方法有: A)成對集成 B)相鄰集成 C)大棒集成 D)基于MM路徑的集成答案:AB簡述基于功能分解的集成的特點,并分析其適用的應(yīng)用場景。答案:針對不同的順序結(jié)構(gòu),基于功能分解的集成可分為自頂向下集成、自底向上集成、三明治集成。(1)自頂向下集成的優(yōu)點是可以使高級別的邏輯和數(shù)據(jù)流可以在過程的早期階段測試,有助于最大限度地減少對驅(qū)動程序的需求。缺點是低級別的模塊在開發(fā)周期中相對較晚的周期測試,這樣不能很好地支持有限功能的早期發(fā)布,如果樁模塊不能反應(yīng)真實情況,重要數(shù)據(jù)不能及時送回到上層模塊,則測試可能不充分。自頂向下集成適用場景:控制結(jié)構(gòu)比較清晰和穩(wěn)定、高層接口變化比較小、底層接口未定義或經(jīng)??赡鼙恍薷?、控制模塊具有較大的\t"/html/31/_self"技術(shù)風(fēng)險,需要盡早驗證、希望能夠盡早看到產(chǎn)品的系統(tǒng)功能行為。(2)自底向上集成的優(yōu)點是可以最大限度地減少對樁模塊的需求,并且可以實施多個模塊的并行測試,提高了測試效率,測試人員能較好地鎖定軟件故障所在的位置。缺點是對驅(qū)動程序的需求使得測試管理變得復(fù)雜,不能很好地支持有限功能的早期發(fā)布。自底向上集成適用場景:底層接口比較穩(wěn)定、高層接口變化比較頻繁、底層模塊較早完成。(3)三明治集成兼有自頂向下集成和自底向上集成的優(yōu)缺點。三明治集成方法在軟件測試中適用于大多數(shù)項目,特別事當(dāng)系統(tǒng)的模塊層次結(jié)構(gòu)較為復(fù)雜,且中間層模塊功能較為關(guān)鍵時,推薦使用該方法。簡述基于調(diào)用圖的集成的特點,并分析其適用的應(yīng)用場景。答案:基于調(diào)用圖的集成測試是關(guān)注于程序模塊(函數(shù)方法)的調(diào)用關(guān)系來設(shè)計測試會話的,相對基于功能分解的集成測試而言,該測試方法對于功能層次關(guān)系不是很明確的軟件系統(tǒng)的集成測試,特別是對于調(diào)用關(guān)系復(fù)雜的軟件項目的集成測試很是適用。而基于調(diào)用圖的集成測試,結(jié)合了結(jié)構(gòu)性測試的方法,不僅關(guān)注模塊間的調(diào)用關(guān)系,還
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年大學(xué)環(huán)境生態(tài)學(xué)期末試題附完整答案【典優(yōu)】
- 2026廣西百色平果市協(xié)力初級中學(xué)教師招聘2人參考題庫附答案
- 2026年數(shù)字化管理專家認(rèn)證題庫200道含答案【奪分金卷】
- 2025-2030文化創(chuàng)意產(chǎn)業(yè)園區(qū)發(fā)展模式研究區(qū)域品牌打造與產(chǎn)業(yè)生態(tài)建設(shè)
- 2025-2030文化傳媒產(chǎn)業(yè)內(nèi)容創(chuàng)新生產(chǎn)與多渠道分發(fā)協(xié)同策略分析
- 2025-2030文化IP衍生品開發(fā)路徑及版權(quán)交易平臺現(xiàn)狀分析報告
- 2025-2030整合營銷傳播行業(yè)市場競爭格局發(fā)展投資布局與發(fā)展策略
- 2025-2030挪威魚肉蛋白行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析報告
- 2025-2030挪威漁業(yè)捕撈裝備制造業(yè)發(fā)展水平評定與政策支持分析
- 2025-2030挪威海洋航運產(chǎn)業(yè)現(xiàn)狀供需調(diào)研與發(fā)展規(guī)劃分析研究投資報告
- JJF(京) 151-2024 藥物溶出度儀溫度參數(shù)校準(zhǔn)規(guī)范
- (新版)特種設(shè)備安全管理取證考試題庫(濃縮500題)
- 標(biāo)準(zhǔn)維修維護(hù)保養(yǎng)服務(wù)合同
- GB/T 4706.9-2024家用和類似用途電器的安全第9部分:剃須刀、電理發(fā)剪及類似器具的特殊要求
- 蘇教譯林版五年級上冊英語第八單元Unit8《At Christmas》單元測試卷
- 《社會調(diào)查研究與方法》課程復(fù)習(xí)題-課程ID-01304試卷號-22196
- 電力工程有限公司管理制度制度范本
- 科研倫理與學(xué)術(shù)規(guī)范-課后作業(yè)答案
- 頂管工程施工檢查驗收表
- mbd技術(shù)體系在航空制造中的應(yīng)用
- 《中文》華文教育出版社-第五冊第一課《買文具》課件
評論
0/150
提交評論