




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
練習(xí)題一軟件質(zhì)量就是軟件產(chǎn)品的質(zhì)量。該說法正確的是(A)A.狹義質(zhì)量觀B.廣義質(zhì)量觀C.錯(cuò)誤的D.無法判斷嚴(yán)重程度高的缺陷被修復(fù)的優(yōu)先級(jí)別一定高。該說法正確嗎?為什么?答案:不正確。軟件系統(tǒng)往往是為特定的業(yè)務(wù)服務(wù)的,某些業(yè)務(wù)功能對企業(yè)的核心業(yè)務(wù)至關(guān)重要。如果一個(gè)不太嚴(yán)重的缺陷影響了核心業(yè)務(wù)功能,而一個(gè)嚴(yán)重的缺陷影響的是非核心業(yè)務(wù)功能,那么修復(fù)影響核心業(yè)務(wù)功能的缺陷的優(yōu)先級(jí)可能會(huì)更高。修復(fù)缺陷的優(yōu)先級(jí)是綜合考慮缺陷的嚴(yán)重程度、可規(guī)避性、出現(xiàn)頻率、修復(fù)成本和風(fēng)險(xiǎn)以及業(yè)務(wù)優(yōu)先級(jí)等多種因素的結(jié)果。請舉例說明缺陷(Fault)、錯(cuò)誤(Error)、失效(Failure)的區(qū)別。答案:缺陷(Fault)指軟件中的靜態(tài)錯(cuò)誤,是產(chǎn)生不正確結(jié)果的人為動(dòng)作;錯(cuò)誤(Error)指工作產(chǎn)品中出現(xiàn)的瑕疵或缺點(diǎn),導(dǎo)致軟件產(chǎn)品無法滿足用戶需求或者規(guī)格說明,需要修復(fù)或替換,它是內(nèi)部的錯(cuò)誤狀態(tài);失效(Failure)指軟件運(yùn)行時(shí),缺陷被激活導(dǎo)致的不正確現(xiàn)象或者錯(cuò)誤顯示,是外部的不正確行為。如下面的代碼: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,此處為程序員輸入錯(cuò)誤;錯(cuò)誤(Error):輸入測試用例[2,7,0]時(shí),期望輸出為1,實(shí)際輸出為1。在首次循環(huán)迭代時(shí),i應(yīng)該為0,程序里為1,內(nèi)部狀態(tài)錯(cuò)誤,但不影響輸出結(jié)果;失效(Failure):輸入測試用例[0,2,7]時(shí),期望輸出為1,實(shí)際輸出為0。在首次循環(huán)迭代時(shí),i應(yīng)該為0,程序里為1,內(nèi)部狀態(tài)錯(cuò)誤,傳遞出來影響到輸出結(jié)果。軟件測試是軟件質(zhì)量保證的唯一手段嗎?為什么?答案:軟件測試是軟件質(zhì)量保證的主要手段,是質(zhì)量控制的方法。軟件質(zhì)量保證是一個(gè)全面的、貫穿整個(gè)軟件生命周期的過程,包括從需求分析、設(shè)計(jì)、編碼到測試、維護(hù)等各個(gè)階段的質(zhì)量控制和管理。驗(yàn)證(Verification)與確認(rèn)(Validation)有什么區(qū)別?答案:驗(yàn)證是評價(jià)系統(tǒng)或組件,以確定給定階段的產(chǎn)品是否滿足該階段開始時(shí)確定的條件的過程。確認(rèn)是在開發(fā)過程之中或結(jié)束時(shí)評價(jià)系統(tǒng)或組件,以確定其是否滿足所描述需求的過程。驗(yàn)證活動(dòng)關(guān)注“我們是否恰當(dāng)?shù)貥?gòu)建產(chǎn)品”,確認(rèn)活動(dòng)關(guān)注“我們是否構(gòu)建恰當(dāng)?shù)漠a(chǎn)品”。驗(yàn)證和確認(rèn)是相輔相成的。驗(yàn)證確保軟件按照設(shè)計(jì)實(shí)現(xiàn),確認(rèn)確保軟件滿足用戶需求。只有兩者都通過,才能確保軟件的質(zhì)量。通常先進(jìn)行驗(yàn)證,再進(jìn)行確認(rèn)。驗(yàn)證是確認(rèn)的基礎(chǔ),只有驗(yàn)證通過的軟件才有資格進(jìn)入確認(rèn)階段。為什么需要軟件測試用例?答案:實(shí)現(xiàn)測試目標(biāo),完成測試,需要設(shè)計(jì)測試用例來實(shí)現(xiàn)。測試用例根據(jù)軟件需求規(guī)格設(shè)計(jì),涵蓋需求功能、性能等要求。測試用例是測試執(zhí)行的基礎(chǔ)。測試不可能進(jìn)行窮舉測試,測試用例為某個(gè)特定的測試目標(biāo)而設(shè)計(jì),它是測試操作過程序列、條件、預(yù)期結(jié)果及相關(guān)數(shù)據(jù)的一個(gè)特定的集合。設(shè)計(jì)好的測試用例能以最小的財(cái)力、物力、時(shí)間解決問題。軟件測試和軟件質(zhì)量保證有哪些區(qū)別與聯(lián)系?答案:二者相同點(diǎn):都是貫穿整個(gè)軟件開發(fā)生命周期的;二者不同點(diǎn):軟件質(zhì)量保證側(cè)重對流程中各過程的管理與控制,是一項(xiàng)管理工作,側(cè)重于流程和方法。而測試是對流程中各過程管理與控制策略的具體執(zhí)行與實(shí)施,其對象是軟件產(chǎn)品(包括階段性的產(chǎn)品),即測試是對軟件產(chǎn)品的檢驗(yàn),是一項(xiàng)技術(shù)性的工作。測試,常常被認(rèn)為是質(zhì)量控制的最主要手段。軟件的質(zhì)量與哪些因素有關(guān)?答案:第一個(gè)因素是能滿足用戶需要;第二能合理處理進(jìn)度、成本、功能的關(guān)系;第三具備一定的可擴(kuò)展性和靈活性,能夠適應(yīng)一定程度的需求變化;第四具備一定的可靠性,能夠有效處理例外的情況,能夠承受各種非法情況的沖擊;最后的因素是保持成本和性能的平衡。請辨析軟件的質(zhì)量是“設(shè)計(jì)出來的”還是“測試出來的”觀點(diǎn)。答案:軟件的質(zhì)量既是設(shè)計(jì)出來的也是測試出來的,不論是設(shè)計(jì)還是測試都不可能做到不出現(xiàn)問題,不論是設(shè)計(jì)還是測試都旨在引導(dǎo)和滿足客戶的需求,通過良好的設(shè)計(jì)或者整個(gè)開發(fā)過程的測試得到高質(zhì)量的軟件,將質(zhì)量達(dá)到客戶、開發(fā)人員、開發(fā)企業(yè)的一個(gè)平衡點(diǎn)。如何規(guī)范地描述一個(gè)缺陷?答案:規(guī)范地描述一個(gè)缺陷是軟件測試和質(zhì)量保證中的關(guān)鍵環(huán)節(jié)。通常包括以下描述項(xiàng):缺陷編號(hào)、標(biāo)題、描述、環(huán)境、重現(xiàn)步驟、預(yù)期結(jié)果、實(shí)際結(jié)果、嚴(yán)重程度、優(yōu)先級(jí)、截圖與附件等。在測試管理中,應(yīng)該收集哪些測試過程數(shù)據(jù),并如何對這些過程數(shù)據(jù)進(jìn)行分析?答案:在測試管理中,收集和分析測試過程數(shù)據(jù)是確保測試活動(dòng)有效性和效率的關(guān)鍵環(huán)節(jié)。主要有測試計(jì)劃文檔、測試計(jì)劃變更記錄;測試用例總數(shù)、用例狀態(tài)、用例覆蓋率、用例優(yōu)先級(jí);缺陷總數(shù)、缺陷狀態(tài)、缺陷嚴(yán)重程度、缺陷優(yōu)先級(jí)、缺陷修復(fù)情況;測試執(zhí)行進(jìn)度、時(shí)間、頻率;測試人員、工具、環(huán)境情況;以及測試報(bào)告、會(huì)議記錄、用戶反饋等。通過收集這些數(shù)據(jù),利用缺陷趨勢分析、分布分析、來源分析等方法、測試用例覆蓋率分析、有效性分析、執(zhí)行效率分析、資源利用分析等方法,可以監(jiān)控測試進(jìn)度、評估測試質(zhì)量、優(yōu)化測試策略,并為項(xiàng)目決策提供支持。練習(xí)題二軟件測試的對象包括(B)A)目標(biāo)程序和相關(guān)文檔B)源程序、目標(biāo)程序、數(shù)據(jù)及相關(guān)文檔C)目標(biāo)程序、操作系統(tǒng)和平臺(tái)軟件D)源程序和目標(biāo)程序下列說法正確的是(D)。A)測試要執(zhí)行所有可能的輸入;B)有時(shí)間就多測試一些,來不及就少測試一些;C)軟件測試是測試人員的事,與開發(fā)人員無關(guān);D)好的測試不一定要使用很多的測試工具。簡述測試過程和開發(fā)過程的關(guān)系。答案:測試過程和軟件開發(fā)過程都應(yīng)貫穿軟件過程的整個(gè)生命周期,它們是相輔相成和相互依賴的。測試過程和開發(fā)過程是同步的,即在做系統(tǒng)分析、產(chǎn)品功能設(shè)計(jì)的同時(shí),測試工程師就可以閱讀、評審需求規(guī)格說明書,從而確定測試目標(biāo),開始測試工作。測試過程是對軟件開發(fā)過程中階段性成果和最終產(chǎn)品進(jìn)行驗(yàn)證和確認(rèn)的過程,二者相互依賴。在開發(fā)前期,測試過程更多依賴于開發(fā)過程;在開發(fā)后期,開發(fā)過程更多依賴于測試過程。二者目標(biāo)相同,都是開發(fā)客戶滿意的高質(zhì)量產(chǎn)品。對比不同測試模型的優(yōu)缺點(diǎn)。答案:V模型:優(yōu)點(diǎn):強(qiáng)調(diào)了在整個(gè)軟件項(xiàng)目開發(fā)中需要經(jīng)歷的若干個(gè)測試級(jí)別,并與每一個(gè)開發(fā)級(jí)別對應(yīng)。缺點(diǎn):忽略了測試的對象不應(yīng)該僅僅包括程序,沒有明確指出對需求、設(shè)計(jì)的測試。W模型:優(yōu)點(diǎn):補(bǔ)充了V模型中忽略的內(nèi)容,強(qiáng)調(diào)了測試計(jì)劃等工作的先行和對系統(tǒng)需求和系系統(tǒng)設(shè)計(jì)的測試。缺點(diǎn):與V模型相同,沒有對軟件測試的流程進(jìn)行說明。X模型:優(yōu)點(diǎn):定位了探索性測試,這是不進(jìn)行事先計(jì)劃的探索性的特殊類型的測試,這一方式往往能幫助有經(jīng)驗(yàn)的測試人員在測試計(jì)劃之外發(fā)現(xiàn)更多的軟件錯(cuò)誤。缺點(diǎn):X模型從沒有被文檔化,沒有明確的需求角色確認(rèn)。H模型:優(yōu)點(diǎn):強(qiáng)調(diào)了測試是獨(dú)立的,只要測試準(zhǔn)備完成,就可以執(zhí)行測試,可以與其他流程并發(fā)執(zhí)行;軟件測試活動(dòng)可以盡早準(zhǔn)備、執(zhí)行,具有很強(qiáng)的靈活性。缺點(diǎn):管理要求高,需要清晰地定義規(guī)則和管理制度;技能要求高,需要精準(zhǔn)地定義每個(gè)迭代的規(guī)模;測試就緒點(diǎn)分析困難。在進(jìn)行軟件測試中,如何確定合理的測試模型和測試過程?答案:測試人員要明確軟件項(xiàng)目的測試目的、所采用的開發(fā)過程模型和組織條件等,據(jù)此選擇合適的測試模型,盡可能應(yīng)用模型中對項(xiàng)目有實(shí)用價(jià)值的方面。在軟件測試過程中,沒有最好的過程可以遵循,可以根據(jù)項(xiàng)目的類型,開發(fā)模型,企業(yè)的管理、員工的層次等方面來綜合考慮。6、從測試模型演化過程可以看到,軟件測試的地位發(fā)生了怎樣的變化?為什么?答案:從瀑布模型到敏捷開發(fā),軟件測試的地位經(jīng)歷了從邊緣到核心、從被動(dòng)到主動(dòng)、從單一到綜合的顯著變化,我們可以發(fā)現(xiàn)軟件測試在不斷左移,意味著人們越來越重視軟件質(zhì)量,測試成為軟件質(zhì)量的關(guān)鍵環(huán)節(jié);由于軟件復(fù)雜性的增加、市場需求的變化、技術(shù)的進(jìn)步、敏捷開發(fā)的普及以及安全需求的增加,現(xiàn)代軟件測試不僅是發(fā)現(xiàn)缺陷,更是預(yù)防缺陷、優(yōu)化流程、提升用戶體驗(yàn)的重要手段,盡早測試,修復(fù)缺陷的代價(jià)就會(huì)降低。7、請闡述在智能時(shí)代軟件測試人員應(yīng)具備哪些品質(zhì)和能力?答案:一名優(yōu)秀的軟件測試工程師應(yīng)具備計(jì)算機(jī)專業(yè)技能包括測試專業(yè)技能、軟件編程技能、掌握網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)庫、中間件等計(jì)算機(jī)基礎(chǔ)知識(shí);行業(yè)領(lǐng)域知識(shí);個(gè)人素養(yǎng)要優(yōu)秀包括對測試的興趣、好奇心、做事專心細(xì)心耐心有責(zé)任心和自信心。智能時(shí)代,軟件測試人員不僅需要掌握技術(shù)硬實(shí)力,如測試分析、測試設(shè)計(jì)、測試部署與執(zhí)行、測試總結(jié),以及專項(xiàng)能力,如自動(dòng)化測試、AI應(yīng)用、性能測試等,還需要具備良好的軟技能,如團(tuán)隊(duì)合作、溝通能力、持續(xù)學(xué)習(xí)、適應(yīng)新技術(shù)、關(guān)注行業(yè)動(dòng)態(tài)等。練習(xí)題三如何結(jié)合使用等價(jià)類測試技術(shù)和邊界值分析技術(shù)設(shè)計(jì)測試用例?答案:進(jìn)行黑盒測試時(shí)需要根據(jù)被測試對象選擇合適的測試方法。在任何情況下都必須使用邊界值分析方法。經(jīng)驗(yàn)表明用這種方法設(shè)計(jì)出測試用例發(fā)現(xiàn)程序錯(cuò)誤的能力最強(qiáng)。必要時(shí)用等價(jià)類劃分方法補(bǔ)充一些測試用例。有一個(gè)小程序,能夠求出三個(gè)0~9999間整數(shù)中的最大值,請分別用邊界值分析和健壯性測試方法設(shè)計(jì)測試用例。答案:輸入值a、b、c的極值分析min-minmin+nommax-maxmax+-1062~99979998999910000邊界值分析測試用例、健壯性分析測試用例序號(hào)abc預(yù)期結(jié)果測試結(jié)果備注16707c取極值26717367999899984679999999956788abc為nom66077b取極值761778699987999896999979999b取極值100677a取極值111677129998679998139999679999146710000輸入無效考慮c值健壯性1567-1166-17考慮b值健壯167考慮a值健壯性191000067注:序號(hào)1-13為邊界值分析測試用例;序號(hào)1-19為健壯性分析測試用例。為什么要進(jìn)行等價(jià)類的劃分?等價(jià)類劃分應(yīng)遵循哪些原則?答案:使用等價(jià)類劃分可以在測試資源有限的情況下,用少量有代表性的數(shù)據(jù)得到比較好的測試結(jié)果?;驹瓌t如下:等價(jià)類測試的弱形式不如對應(yīng)的強(qiáng)形式的測試全面。如果實(shí)現(xiàn)語言是強(qiáng)類型,則沒有必要使用健壯形式的測試。如果錯(cuò)誤條件非常,則進(jìn)行健壯形式的測試是合適的如果輸入數(shù)據(jù)以離散值區(qū)間和集合定義,則等價(jià)類測試是合適的。當(dāng)然也適用于如果變量值越界系統(tǒng)就會(huì)出現(xiàn)故障的系統(tǒng)。通過結(jié)合邊界值測試,等價(jià)類測試可得到加強(qiáng)。如果程序函數(shù)很復(fù)雜,則等價(jià)類測試是被指示的。在這種情況下,函數(shù)的復(fù)雜性可以幫助標(biāo)識(shí)有用的等價(jià)類。強(qiáng)等價(jià)類測試假設(shè)變量是獨(dú)立的,相應(yīng)的測試用例相乘會(huì)引起冗余問題。如果存在依賴關(guān)系,則常常會(huì)生成錯(cuò)誤測試用例。在發(fā)現(xiàn)合適的等價(jià)關(guān)系之前,可能需要進(jìn)行多次嘗試。針對以下問題:某一8位計(jì)算機(jī),其十六進(jìn)制常數(shù)的定義是以0x或0X開頭的十六進(jìn)制整數(shù),其取值范圍為-7f~7f(不區(qū)分大小寫字母),如0x11,0x2A,-0x3c。請采用等價(jià)類劃分的方法設(shè)計(jì)測試用例。答案:(1)劃分等價(jià)類輸入條件等價(jià)類有效等價(jià)類編號(hào)無效等價(jià)類編號(hào)長度3-5位0小于3位8大于5位9符號(hào)無1長度大于1的字符串10+或—2非+和—的一個(gè)其它字符11前綴0X3一個(gè)數(shù)字或字符120x4長度大于2的數(shù)字字符串13長度為2的非0x和0X字符串14第一位數(shù)值0到7之間的數(shù)5非數(shù)字符號(hào)15大于7的整數(shù)16第二位數(shù)值數(shù)6非數(shù)字非字母的符號(hào)17a到f的字母或A到F的字母7其它字母18(2)根據(jù)上述等價(jià)類設(shè)計(jì)測試用例測試用例編號(hào)輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋等價(jià)類符號(hào)前綴第一位數(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假定一臺(tái)ATM機(jī)允許提取增量為50元,總金額從100~2000(包含2000)不等的現(xiàn)金,請結(jié)合等價(jià)類方法和邊界值分析進(jìn)行測試。答案:邊界值分析法:測試用例輸入金額預(yù)期輸出150超出[100,2000]2150正常取出31000正常取出41950正常取出52050超出[100,2000]等價(jià)分析法:有效等價(jià)類編號(hào)無效等價(jià)類編號(hào)整數(shù)1浮點(diǎn)數(shù)4在100到2000之間2小于1005大于20006在100到2000之間,能被50整除3在100到2000之間,不能被50整除7用例編號(hào)輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋的等價(jià)類1100提取成功1、2、32100.5提示:輸入無效2,4350提示:輸入無效542050提示:輸入無效2,65101提示:輸入無效2,7有一個(gè)學(xué)生成績管理系統(tǒng),要求把成績好的同學(xué)放到前面,其中每個(gè)人都有三門課程成績:語文、數(shù)學(xué)、英語。首先是按個(gè)人的總成績進(jìn)行排名,如果某兩個(gè)人的總分相同,則按他們的語文成績進(jìn)行排名;如果總成績和語文成績都相同,則按照他們的數(shù)學(xué)成績進(jìn)行排名,請用等價(jià)類方法進(jìn)行測試。(1)劃分等價(jià)類等價(jià)類輸入條件有效等價(jià)類編號(hào)無效等價(jià)類編號(hào)三個(gè)0-100的數(shù)0-100的數(shù)1小于07大于1008三個(gè)數(shù)2未輸入成績9只輸入一個(gè)數(shù)10只輸入兩個(gè)數(shù)11輸入非數(shù)字12排名總成績不同3總成績相同,語文不同4總成績和語文均相同,數(shù)學(xué)不同5總成績和各科成績均相同6程序有三個(gè)輸入變量mouth、day、year(均為整數(shù),且滿足:1<=mouthc=12,1<=day<=31,1900<=year<=2050),分別作為輸入日期的月份、日、年份,通過程序可以輸出日期在日歷上隔一天(第三天〉的日期。例如,輸入為2005年11月29日,則該程序的輸出為2005年12月1日。請用等價(jià)類測試和邊界測試方法設(shè)計(jì)測試用例。答案:邊界值測試:測試用例輸入數(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]等價(jià)類測試:等價(jià)類有效等價(jià)類編號(hào)無效等價(jià)類編號(hào)month整數(shù)1浮點(diǎn)數(shù)101<=month<=122month<111month>1212day整數(shù)3浮點(diǎn)數(shù)13month=[1、3、5、7、8、10、12]時(shí)1<=day<=314day<114day>3115month=[4、6、9、11]時(shí)1<=day<=305month為4、6、9、11時(shí)day>3016month=2且leapyear1<=day<=296month為2且year為閏年時(shí),day>2917month=2且不為leapyear1<=day<=287month為2且year不是閏年時(shí),day>2818year整數(shù)8浮點(diǎn)數(shù)191990<=year<=20509year<199020year>205021測試用例編號(hào)輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋等價(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某軟件的一個(gè)模塊的需求規(guī)格說明書中描述:(1)年薪制員工:嚴(yán)重過失,扣年終風(fēng)險(xiǎn)金的4%;過失,扣年終風(fēng)險(xiǎn)金的2%。(2)非年薪制員工:嚴(yán)重過失,扣當(dāng)月薪資的8%;過失,扣當(dāng)月薪資的4%。請繪制出判定表,并設(shè)計(jì)相應(yīng)的測試用例。請繪制出判定表,并設(shè)計(jì)相應(yīng)的測試用例。答案:(1)繪制判定表1234567條件年薪制員工YYYNNN—嚴(yán)重過失YYNYYNN過失YNYYNYN動(dòng)作扣年終風(fēng)險(xiǎn)金的4%√√扣年終風(fēng)險(xiǎn)金的2%√√扣當(dāng)月薪資的8%√√扣當(dāng)月薪資的4%√√不扣√(2)設(shè)計(jì)測試用例測試用例編號(hào)輸入數(shù)據(jù)預(yù)期結(jié)果覆蓋的規(guī)則1年薪制員工嚴(yán)重過失扣年終風(fēng)險(xiǎn)金的4%12年薪制員工過失扣年終風(fēng)險(xiǎn)金的2%23非年薪制員工嚴(yán)重過失扣當(dāng)月薪資的8%34非年薪制員工過失扣當(dāng)月薪資的4%45年薪制員工無過失不扣5某公司折扣政策:年交易額在10萬元以下的,無折扣;在10萬元以上的并且近三個(gè)月無欠款的,折扣率10%;在10萬元以上,雖然近三個(gè)月有欠款,但是與公司交易在10年以上的,折扣率8%;在10萬元以上,近三個(gè)月有欠款,且交易在10年以下的折扣率5%;請用判定表來描述該公司的折扣政策。答案:12345條件年交易<=10萬元YNNNN近三月無存款-YYNN與公司交易>=10年-YNYN動(dòng)作無折扣√折扣率5%√折扣率8%√折扣率10%√√請討論判定表測試能夠在多大程度上處理多缺陷假設(shè)。答案:判斷表在表達(dá)是可以處理多缺陷假設(shè)的,在判斷表的表示上,條件樁羅列了多個(gè)條件,可以通過條件組合,生成多個(gè)規(guī)則來解決輸入條件的多缺陷問題。請使用因果圖法為三角形問題設(shè)計(jì)測試用例。答案:因:正整數(shù)3個(gè)數(shù)a+b>ca+c>bb+c>aa=b!=ca=c!=bb=c!=aa=b=ca!=b!=c果:不能構(gòu)成三角形等腰三角形等邊三角形一般三角形因果圖如下:測試用例(略)分析中國象棋中走馬的實(shí)際情況(下面未注明的均指的是對馬的說明)答案:(1)如果落點(diǎn)在棋盤外,則不移動(dòng)棋子;(2)如果落點(diǎn)與起點(diǎn)不構(gòu)成日字型,則不移動(dòng)棋子;(3)如果落點(diǎn)處有自己方棋子,則不移動(dòng)棋子;(4)如果在落點(diǎn)方向的鄰近交叉點(diǎn)有棋子(絆馬腿),則不移動(dòng)棋子;(5)如果不屬于1-4條,且落點(diǎn)處無棋子,則移動(dòng)棋子;(6)如果不屬于1-4條,且落點(diǎn)處為對方棋子(非老將),則移動(dòng)棋子并除去對方棋子;(7)如果不屬于1-4條,且落點(diǎn)處為對方老將,則移動(dòng)棋子,并提示戰(zhàn)勝對方,游戲結(jié)束。(1)原因:1.落點(diǎn)在棋盤上;2.落點(diǎn)與起點(diǎn)構(gòu)成日字;3.落點(diǎn)處不為自己方棋子;4.落點(diǎn)方向的鄰近交叉點(diǎn)有棋子;5.落點(diǎn)處無棋子;6.落點(diǎn)處為對方棋子(非老將);7.落點(diǎn)處為對方老將。(2)結(jié)果:21.不移動(dòng)棋子;22.移動(dòng)棋子;23.移動(dòng)棋子,并除去對方棋子;24.移動(dòng)棋子,并提示戰(zhàn)勝對方,結(jié)束游戲。添加中間結(jié)點(diǎn)11(3)繪制因果圖,如圖所示。1111123457621232224OE假設(shè)商店貨品價(jià)格(R)都不大于100元(且為整數(shù)),若顧客付款(P)在100元內(nèi),現(xiàn)有一個(gè)程序能在每位顧客付款后給出找零錢的最佳組合(找給顧客貨幣張數(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不能支付等價(jià)分析法:等價(jià)類有效等價(jià)類編號(hào)無效等價(jià)類編號(hào)R整數(shù)1浮點(diǎn)數(shù)101<=R<=1002R<111R>10012P整數(shù)3浮點(diǎn)數(shù)131<=P<=R<=1004P<114P>10015R>P16N整數(shù)5浮點(diǎn)數(shù)19N50=0||N50=16N50!=0||N50!=1200<=N10<=47N10<021N10>422N5=0||N5=18N5!=0||N5!=1230=<N1<=49N1<024N1>425測試用例編號(hào)輸入數(shù)據(jù)預(yù)期結(jié)果R(價(jià)格)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{
/**
*該方法接收兩個(gè)整數(shù)參數(shù)(科目成績),返回等級(jí)
*@paramx科目1的分?jǐn)?shù)
*@paramy科目2的分?jǐn)?shù)
*@returnchar等級(jí)
*/
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è)計(jì)一組測試用例,要求分別滿足語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。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:請計(jì)算上述控制流圖的圈復(fù)雜度V(G)(獨(dú)立線性路徑數(shù))問題3:假設(shè)輸入的取值范圍是0<year<2010,請使用基本路徑測試法為變量year設(shè)計(jì)測試用例,使其滿足基本路徑覆蓋的要求。答案:問題1:(圖中紅色字符對應(yīng)代碼行號(hào))問題2:V(G)=E–N+2=12–10+2=4V(G)=判定節(jié)點(diǎn)數(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è)計(jì)判別一個(gè)整數(shù)x(x≥2)是否為素?cái)?shù)的程序,并設(shè)計(jì)測試用例滿足條件覆蓋和基本路徑覆蓋。答案:源碼:/**
*判斷是否為質(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));
}
}某程序的功能是:輸入兩個(gè)正整數(shù),計(jì)算這兩個(gè)數(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)計(jì)算控制流圖的圈復(fù)雜度。(3)找出程序獨(dú)立路徑。(4)設(shè)計(jì)測試用例,實(shí)現(xiàn)基路徑覆蓋。(5)設(shè)計(jì)測試用例,實(shí)現(xiàn)語句覆蓋。 答案:控制流圖圈復(fù)雜度V(G)=E–N+2=13–10+2=5V(G)=判定節(jié)點(diǎn)數(shù)+1=4+1=5v(G)=區(qū)域數(shù)=5獨(dú)立路徑: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)指一個(gè)可獨(dú)立運(yùn)行的代碼段,獨(dú)立運(yùn)行是指的是這個(gè)工作不受前一次或接下來的程序運(yùn)行的結(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í)別的測試活動(dòng)。測試進(jìn)行得越早越好。 D)測試工作主要是由程序開發(fā)人員進(jìn)行自測和互測,同時(shí)還需要單獨(dú)的測試角色,來進(jìn)行測試和評審答案:ABCD3.單元測試中驅(qū)動(dòng)模塊(Driver)的作用? A)調(diào)用被測試單元; B)它接收測試數(shù)據(jù),并把數(shù)據(jù)傳送給被測單元, C)出實(shí)測結(jié)果。 D)被測試單元調(diào)用答案:ABC單元測試有那些步驟,各個(gè)步驟有那些實(shí)施內(nèi)容。答案:單元測試包含制訂測試計(jì)劃、單元測試設(shè)計(jì)、測試執(zhí)行、測試評估等步驟。制定測試計(jì)劃的實(shí)施內(nèi)容主要包括單元測試準(zhǔn)備、制定單元測試策略和單元測試計(jì)劃日程。單元測試設(shè)計(jì)的實(shí)施內(nèi)容主要是根據(jù)設(shè)計(jì)規(guī)格說明書,建立單元測試環(huán)境,完成測試設(shè)計(jì)和腳本的開發(fā)。測試執(zhí)行的實(shí)施內(nèi)容主要是測試組根據(jù)測試計(jì)劃和測試日程安排進(jìn)行測試,并輸出測試結(jié)果,同時(shí)注意回歸測試的執(zhí)行。測試評估的實(shí)施內(nèi)容是由測試結(jié)果評估小組或評估人員對測試結(jié)果進(jìn)行評測、分析,并輸出分析結(jié)果。最后將從測試計(jì)劃開始到評估結(jié)束的所有文檔進(jìn)行整理收集,提交測試結(jié)果。簡述單元測試的目標(biāo)和意義。答案:單元測試的目的:一個(gè)是查找錯(cuò)誤,提高軟件質(zhì)量;另一方面是節(jié)約成本和削減開發(fā)時(shí)間。單元測試的包含兩層意義:單元測試對軟件設(shè)計(jì)實(shí)現(xiàn)的意義。單元測試對軟件設(shè)計(jì)實(shí)現(xiàn)至關(guān)重要,旨在保障軟件質(zhì)量、降低開銷,并促進(jìn)代碼重構(gòu)與可測試性。它揭示設(shè)計(jì)流程,確保架構(gòu)分層合理,業(yè)務(wù)邏輯實(shí)現(xiàn)于邏輯層。單元測試作為實(shí)例,促進(jìn)開發(fā)者理解被測單元,替代過時(shí)文檔,提高代碼維護(hù)性,促進(jìn)團(tuán)隊(duì)溝通,是推行質(zhì)量文化的關(guān)鍵。單元測試對軟件開發(fā)者的意義。盡管單元測試看似增加工作量,但實(shí)則為開發(fā)者帶來諸多益處。它幫助開發(fā)者明確設(shè)計(jì)規(guī)格,鍛煉邏輯思維與代碼分析能力,促進(jìn)編寫標(biāo)準(zhǔn)一致,通過代碼審閱增進(jìn)團(tuán)隊(duì)跨領(lǐng)域理解與學(xué)習(xí)機(jī)會(huì)。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)覆蓋測試等價(jià)類測試特殊值測試測試后,針對缺陷,對代碼進(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);
}等價(jià)類,本例中對輸入數(shù)據(jù)進(jìn)行有效等價(jià)類和無效等價(jià)類劃分,有效類通過基路徑測試和循環(huán)測試進(jìn)行測試,這里測試無效數(shù)據(jù)。@DisplayName("等價(jià)類測試-數(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("等價(jià)類測試-數(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簡述基于功能分解的集成的特點(diǎn),并分析其適用的應(yīng)用場景。答案:針對不同的順序結(jié)構(gòu),基于功能分解的集成可分為自頂向下集成、自底向上集成、三明治集成。(1)自頂向下集成的優(yōu)點(diǎn)是可以使高級(jí)別的邏輯和數(shù)據(jù)流可以在過程的早期階段測試,有助于最大限度地減少對驅(qū)動(dòng)程序的需求。缺點(diǎn)是低級(jí)別的模塊在開發(fā)周期中相對較晚的周期測試,這樣不能很好地支持有限功能的早期發(fā)布,如果樁模塊不能反應(yīng)真實(shí)情況,重要數(shù)據(jù)不能及時(shí)送回到上層模塊,則測試可能不充分。自頂向下集成適用場景:控制結(jié)構(gòu)比較清晰和穩(wěn)定、高層接口變化比較小、底層接口未定義或經(jīng)常可能被修改、控制模塊具有較大的\t"/html/31/_self"技術(shù)風(fēng)險(xiǎn),需要盡早驗(yàn)證、希望能夠盡早看到產(chǎn)品的系統(tǒng)功能行為。(2)自底向上集成的優(yōu)點(diǎn)是可以最大限度地減少對樁模塊的需求,并且可以實(shí)施多個(gè)模塊的并行測試,提高了測試效率,測試人員能較好地鎖定軟件故障所在的位置。缺點(diǎn)是對驅(qū)動(dòng)程序的需求使得測試管理變得復(fù)雜,不能很好地支持有限功能的早期發(fā)布。自底向上集成適用場景:底層接口比較穩(wěn)定、高層接口變化比較頻繁、底層模塊較早完成。(3)三明治集成兼有自頂向下集成和自底向上集成的優(yōu)缺點(diǎn)。三明治集成方法在軟件測試中適用于大多數(shù)項(xiàng)目,特別事當(dāng)系統(tǒng)的模塊層次結(jié)構(gòu)較為復(fù)雜,且中間層模塊功能較為關(guān)鍵時(shí),推薦使用該方法。簡述基于調(diào)用圖的集成的特點(diǎn),并分析其適用的應(yīng)用場景。答案:基于調(diào)用圖的集成測試是關(guān)注于程序模塊(函數(shù)方法)的調(diào)用關(guān)系來設(shè)計(jì)測試會(huì)話的,相對基于功能分解的集成測試而言,該測試方法對于功能層次關(guān)系不是很明確的軟件系統(tǒng)的集成測試,特別是對于調(diào)用關(guān)系復(fù)雜的軟件項(xiàng)目的集成測試很是適用。而基于調(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度供暖供氣設(shè)施施工安全協(xié)議
- 二零二五年度鋼材現(xiàn)貨交易居間服務(wù)協(xié)議
- 2025年度電子商務(wù)合伙拆伙協(xié)議終止協(xié)議
- 2025年度離職解除勞動(dòng)合同模板:傳媒廣告行業(yè)員工離職流程
- 會(huì)計(jì)財(cái)務(wù)審計(jì)作業(yè)指導(dǎo)書
- 公司股權(quán)購買協(xié)議詳細(xì)版
- 金融服務(wù)個(gè)人風(fēng)險(xiǎn)免責(zé)聲明
- 《數(shù)學(xué)思維訓(xùn)練課程:數(shù)形結(jié)合學(xué)習(xí)指導(dǎo)》
- 肉類銷售代理合同
- 關(guān)于項(xiàng)目進(jìn)度管理的解決方案
- 2025年湖南有色金屬職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫參考答案
- 2025年哈爾濱幼兒師范高等??茖W(xué)校單招職業(yè)技能測試題庫1套
- 儲(chǔ)能站施工組織設(shè)計(jì)施工技術(shù)方案(技術(shù)標(biāo))
- 2025部編版小學(xué)道德與法治一年級(jí)下冊教學(xué)計(jì)劃
- 女職工權(quán)益保護(hù)法律知識(shí)競賽題庫(293題附答案)
- 樓梯 欄桿 欄板(一)22J403-1
- 2024湖北省聯(lián)合發(fā)展投資集團(tuán)限公司招聘221人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 03S702鋼筋混凝土化糞池-標(biāo)準(zhǔn)圖集
- 國網(wǎng)直流電源系統(tǒng)技術(shù)監(jiān)督規(guī)定
- 香港雇傭合同協(xié)議書
- 部編版四年級(jí)語文下冊第二單元《習(xí)作:我的奇思妙想》課件PPT
評論
0/150
提交評論