軟件測(cè)試及軟件質(zhì)量控制
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,*,軟件系統(tǒng)的開發(fā)過(guò)程中,軟件測(cè)試占據(jù)著重要地位。盡管人們實(shí)行了多種保證軟件質(zhì)量的措施,由于軟件系統(tǒng)的客觀困難性,人們的主觀相識(shí)不行能完全符合客觀實(shí)際,完備無(wú)缺,每個(gè)階段的技術(shù)審查也不行能毫無(wú)遺漏地查出和訂正全部的設(shè)計(jì)和分析上的錯(cuò)誤,在軟件生命周期的各個(gè)階段,都不行避開地會(huì)產(chǎn)生差錯(cuò),這些差錯(cuò)遲早會(huì)在軟件的生產(chǎn)和運(yùn)用過(guò)程中暴露出來(lái)。,軟件工程實(shí)踐的閱歷表明,發(fā)覺軟件的時(shí)刻越晚,改正這些錯(cuò)誤所花費(fèi)的代價(jià)也越高,假如在軟件投入運(yùn)用之前沒有發(fā)覺和訂正軟件的大部分錯(cuò)誤,人們付出的代價(jià)會(huì)更高,往往會(huì)造成惡劣的后果。,從廣義上來(lái)說(shuō),軟件測(cè)試工作散布在軟件生命周期的各個(gè)開發(fā)階段,人們相識(shí)到,軟件測(cè)試是保證軟件質(zhì)量的主要手段,各階段的評(píng)審工作和驗(yàn)證工作,均是廣義概念上的測(cè)試工作。而主要的測(cè)試是在編碼和測(cè)試這兩個(gè)階段進(jìn)行的。因此,狹義的軟件測(cè)試就是程序測(cè)試。,6.1,軟件測(cè)試基本概念,G.J.Myers給出了關(guān)于測(cè)試的一些規(guī)則,被軟件工程領(lǐng)域認(rèn)可:,(1)測(cè)試是為了發(fā)覺程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程;,(2)好的測(cè)試方案極有可能發(fā)覺迄今為止尚未發(fā)覺的錯(cuò)誤;,(3)成功的測(cè)試是發(fā)覺了至今為止尚未發(fā)覺的錯(cuò)誤。,6.1,軟件測(cè)試基本概念,這些規(guī)則,事實(shí)上是軟件測(cè)試的狹義概念程序測(cè)試。,狹義的軟件測(cè)試:測(cè)試是為了發(fā)覺錯(cuò)誤而執(zhí)行程序的過(guò)程。是依據(jù)軟件開發(fā)的各個(gè)階段的說(shuō)明和程序的內(nèi)部結(jié)構(gòu)而細(xì)心設(shè)計(jì)的一批測(cè)試用例(有輸入數(shù)據(jù)及預(yù)期的結(jié)果),并利用這些測(cè)試用例執(zhí)行程序及發(fā)覺錯(cuò)誤的過(guò)程。,6.1,軟件測(cè)試基本概念,廣義的軟件測(cè)試是對(duì)軟件支配、軟件系統(tǒng)分析、軟件設(shè)計(jì)、軟件編碼進(jìn)行的查錯(cuò)活動(dòng),包括代碼執(zhí)行和人工審查活動(dòng),測(cè)試的目的是找出軟件生命周期的各個(gè)階段的錯(cuò)誤,有利于以后進(jìn)行修改和訂正。但測(cè)試本身不修正錯(cuò)誤,調(diào)試才會(huì)修正錯(cuò)誤。即找錯(cuò)的活動(dòng)是測(cè)試;分析錯(cuò)誤的性質(zhì)與位置,進(jìn)行糾錯(cuò)的活動(dòng)是調(diào)試,保證算法的正的確現(xiàn)。軟件測(cè)試與程序測(cè)試都是查找錯(cuò)誤的活動(dòng),差別在于查找錯(cuò)誤的范圍不同。,6.1,軟件測(cè)試基本概念,由于測(cè)試的目標(biāo)是暴露程序的錯(cuò)誤,從心理學(xué)角度看,由設(shè)計(jì)者自己進(jìn)行測(cè)試是不恰當(dāng)?shù)模O(shè)計(jì)小組和測(cè)試小組應(yīng)當(dāng)分別設(shè)立,有利于進(jìn)行客觀和公正的軟件測(cè)試。測(cè)試是有限的,由于通常的測(cè)試過(guò)程不行能窮盡一切狀況,即使經(jīng)過(guò)了嚴(yán)格的測(cè)試之后,仍舊可能存在沒有被發(fā)覺的錯(cuò)誤隱藏在程序中,不能證明程序中沒有錯(cuò)誤。,6.1,軟件測(cè)試基本概念,因此,測(cè)試僅僅有可能找出程序的錯(cuò)誤,測(cè)試不能證明程序是正確的。軟件工程中全部其它階段都是“建設(shè)性”的,軟件工程師力圖從抽象概念動(dòng)身,逐步設(shè)計(jì)出具體的軟件系統(tǒng),而測(cè)試人員的工作表面上看卻是“破壞性”的,竭力證明軟件中含有錯(cuò)誤,不能按預(yù)定要求正確工作。凡是進(jìn)行對(duì)比的方式均可理解為測(cè)試驗(yàn)證。,6.1.2,軟件測(cè)試的對(duì)象,軟件測(cè)試應(yīng)當(dāng)貫穿于軟件生命期的各個(gè)階段,各階段的工作是相互連接、相互影響的,前一階段發(fā)生的問(wèn)題自然要影響到下一階段的工作。為了把握各個(gè)環(huán)節(jié)的正確性,人們須要進(jìn)行各種確認(rèn)和驗(yàn)證工作。,軟件確認(rèn)是廣義上的軟件測(cè)試,它是企圖證明軟件在一個(gè)給定的外部環(huán)境中軟件的邏輯正確性的一系列活動(dòng)和過(guò)程,如需求說(shuō)明書的確認(rèn)、程序的確認(rèn)等。,6.1.2,軟件測(cè)試的對(duì)象,程序的確認(rèn)又分為靜態(tài)確認(rèn)與動(dòng)態(tài)確認(rèn)。,靜態(tài)確認(rèn)一般不在計(jì)算機(jī)上執(zhí)行程序,而是通過(guò)程序正確性證明、靜態(tài)分析或人工分析來(lái)確認(rèn)程序的正確性;,動(dòng)態(tài)確認(rèn)主要通過(guò)動(dòng)態(tài)分析和動(dòng)態(tài)測(cè)試,用執(zhí)行程序的過(guò)程來(lái)檢查執(zhí)行的狀態(tài),確認(rèn)程序是否有問(wèn)題;,6.1.2,軟件測(cè)試的對(duì)象,正確性證明主要是企圖繞過(guò)困難的測(cè)試,干脆證明程序的正確性。,如程序的輸入輸出斷言法。,設(shè)程序段為S,其前斷言為P,后斷言為R。假如執(zhí)行S以前P為真,則執(zhí)行S后R也為真,則證明S是正確的,記為PSR。,6.1.2,軟件測(cè)試的對(duì)象,任何程序總可以分成S1、S2、Sn個(gè)結(jié)點(diǎn),對(duì)應(yīng)的斷言為R1、R2、Rn,起初R1為輸入斷言,R2為輸出斷言,也是下一個(gè)輸入斷言,Rn為最終的輸出斷言,我們總可以,將S1、S2、Sn逐個(gè)證明,自頂向下或自底向上都可證明程序的正確性,該分支已發(fā)展為計(jì)算機(jī)代數(shù)學(xué);,6.1.2,軟件測(cè)試的對(duì)象,軟件驗(yàn)證也屬于廣義上的軟件測(cè)試,它試圖證明在軟件生命期的各個(gè)階段、各階段的邏輯協(xié)調(diào)性、完備性和正確性。,包括系統(tǒng)分析員理解用戶要求的正確性、表達(dá)的正確性、設(shè)計(jì)人員對(duì)需求規(guī)格說(shuō)明理解的正確性、設(shè)計(jì)與設(shè)計(jì)表達(dá)的正確性、程序編碼的正確性和運(yùn)行軟件程序時(shí)輸入的正確性、運(yùn)行結(jié)果的正確性等,運(yùn)行結(jié)果與用戶預(yù)期的結(jié)果是否一樣等,這說(shuō)明任何一個(gè)環(huán)節(jié)上發(fā)生了問(wèn)題都可能在軟件測(cè)試中表現(xiàn)出來(lái)。,6.1.3,測(cè)試信息流,將測(cè)試的過(guò)程用數(shù)據(jù)流圖表示,可得測(cè)試信息流如圖6-1所示。,(至軟件配置),軟件配置 1 測(cè)試結(jié)果 2 錯(cuò)誤 3 修正的軟件,測(cè)試配置 測(cè)試結(jié)果,測(cè)試工具 測(cè)試 評(píng)價(jià) 調(diào)試 正確,預(yù)測(cè)結(jié)果 出錯(cuò)率 4,數(shù)據(jù) 可靠性,分析,圖,6-1,測(cè)試信息流,6.1.3,測(cè)試信息流,1.測(cè)試過(guò)程須要三類輸入:,(1)軟件配置:包括軟件開發(fā)文檔(用戶文檔、需求規(guī)格說(shuō)明、軟件設(shè)計(jì)說(shuō)明、源程序代碼)、目標(biāo)執(zhí)行程序、數(shù)據(jù)結(jié)構(gòu);,(2)測(cè)試配置:包括測(cè)試支配、測(cè)試用例、測(cè)試驅(qū)動(dòng)程序等;事實(shí)上在整個(gè)軟件開發(fā)過(guò)程中,測(cè)試配置只是軟件配置的一個(gè)子集;,(3)測(cè)試工具:為提高軟件測(cè)試效率,運(yùn)用測(cè)試工具為測(cè)試工作服務(wù);如:測(cè)試數(shù)據(jù)自動(dòng)生成程序,靜態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果分析程序及標(biāo)準(zhǔn)例程測(cè)試數(shù)據(jù)庫(kù)等。,6.1.3,測(cè)試信息流,測(cè)試之后,對(duì)全部測(cè)試結(jié)果進(jìn)行分析,將實(shí)際測(cè)試的結(jié)果與預(yù)期的結(jié)果進(jìn)行比較。假如發(fā)覺出錯(cuò)的數(shù)據(jù),則意味著軟件有錯(cuò)誤,須要糾錯(cuò),應(yīng)進(jìn)行調(diào)試,確定錯(cuò)誤的位置和出錯(cuò)的性質(zhì),改正這些錯(cuò)誤,同時(shí)修正相關(guān)文檔。修正過(guò)的文檔一般需經(jīng)過(guò)再次測(cè)試,直到通過(guò)測(cè)試為止。,6.1.3,測(cè)試信息流,通過(guò)收集和分析測(cè)試結(jié)果的有關(guān)數(shù)據(jù),可以建立軟件評(píng)估的牢靠性模型。,假如常常出現(xiàn)須要修改設(shè)計(jì)的嚴(yán)峻錯(cuò)誤,那么軟件的質(zhì)量和牢靠性就值得懷疑,同時(shí)也表明須要進(jìn)一步測(cè)試。,相反,假如軟件功能能夠正確完成,出現(xiàn)的錯(cuò)誤易于修改,那么就可能有兩種評(píng)價(jià):,6.1.3,測(cè)試信息流,一種是軟件的質(zhì)量和牢靠性達(dá)到可以接受的程度。,另一種是所做的測(cè)試還不足以發(fā)覺軟件的嚴(yán)峻錯(cuò)誤。,假如得到的評(píng)價(jià)是沒有發(fā)覺錯(cuò)誤,很有可能測(cè)試的配置考慮得不夠充分和細(xì)致,軟件仍有潛藏的錯(cuò)誤,以后改正錯(cuò)誤須要付出昂揚(yáng)的代價(jià)。,6.1.3,測(cè)試信息流,2.軟件錯(cuò)誤可以從不同角度進(jìn)行分類:,(1)從錯(cuò)誤對(duì)程序的影響程度來(lái)分:,嚴(yán)峻性錯(cuò)誤:嚴(yán)峻影響程序的運(yùn)行,甚至不能運(yùn)行;,一般性錯(cuò)誤:常常影響程序的運(yùn)行,特殊狀況下表現(xiàn)正常;,6.1.3,測(cè)試信息流,微小錯(cuò)誤:一般狀況下程序能運(yùn)行,特殊狀況下表現(xiàn)異樣;,無(wú)影響性錯(cuò)誤:不影響程序的運(yùn)行。,6.1.3,測(cè)試信息流,(2)從開發(fā)過(guò)程的轉(zhuǎn)換環(huán)節(jié)上分:,構(gòu)造錯(cuò)誤:編碼實(shí)現(xiàn)與設(shè)計(jì)不一樣;,設(shè)計(jì)錯(cuò)誤:設(shè)計(jì)邏輯與說(shuō)明不一樣;,說(shuō)明書錯(cuò)誤:說(shuō)明書與用戶要求不一樣;,需求錯(cuò)誤:不滿足用戶的實(shí)際要求;,配置錯(cuò)誤:軟件配置不滿足實(shí)際環(huán)境。,6.1.3,測(cè)試信息流,(3)從測(cè)試結(jié)果的表現(xiàn)上分類:,1)功能錯(cuò)誤:由系統(tǒng)需求分析不完整引起的;,2)結(jié)構(gòu)錯(cuò)誤:由總體設(shè)計(jì)的錯(cuò)誤引起的;,3)過(guò)程錯(cuò)誤:由具體設(shè)計(jì)的錯(cuò)誤引起的;,4)數(shù)據(jù)錯(cuò)誤:由軟件編碼或具體設(shè)計(jì)的錯(cuò)誤引起的;,5)編碼錯(cuò)誤:由軟件編碼引起的錯(cuò)誤;,6)其它錯(cuò)誤:由文檔和其它系統(tǒng)元素引起的錯(cuò)誤;,6.1.3,測(cè)試信息流,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,軟件測(cè)試一般分為四個(gè)步驟:,(1)單元測(cè)試(也稱模塊測(cè)試):針對(duì)軟件設(shè)計(jì)的基本單元程序模塊,進(jìn)行正確性檢驗(yàn)的測(cè)試工作。目的在于發(fā)覺各個(gè)模塊內(nèi)部可能存在的各種差錯(cuò)。單元測(cè)試須要從程序內(nèi)部結(jié)構(gòu)動(dòng)身設(shè)計(jì)測(cè)試用例,多個(gè)模塊可以平行、獨(dú)立地進(jìn)行測(cè)試;,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,(2)集成測(cè)試(也稱組裝測(cè)試,聯(lián)合測(cè)試):在單元測(cè)試的基礎(chǔ)上,將全部模塊按設(shè)計(jì)要求集成在一起進(jìn)行測(cè)試,以檢驗(yàn)總體設(shè)計(jì)中各模塊間的接口設(shè)計(jì)問(wèn)題、模塊之間的相互影響、上層模塊存在的各種差錯(cuò)及全局?jǐn)?shù)據(jù)結(jié)構(gòu)對(duì)系統(tǒng)的影響等方面。,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,(3)確認(rèn)測(cè)試(也稱驗(yàn)收測(cè)試,有效性測(cè)試):主要檢驗(yàn)軟件的功能和性能是否與需求說(shuō)明書中的規(guī)定一樣。,(4)系統(tǒng)測(cè)試:將軟件系統(tǒng)作為一個(gè)元素,放入整個(gè)實(shí)際的計(jì)算機(jī)系統(tǒng)中,與計(jì)算機(jī)硬件、其他軟件、運(yùn)用人員等系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)用環(huán)境下進(jìn)行綜合全面的測(cè)試。,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,前面多次強(qiáng)調(diào),運(yùn)用軟件生命期(瀑布模型)模型,軟件開發(fā)過(guò)程是一個(gè)自頂向下,逐步細(xì)化的過(guò)程,而軟件測(cè)試過(guò)程則是與開發(fā)過(guò)程相反的次序進(jìn)行的,是一個(gè)自底向上,逐步集成的過(guò)程,低一層測(cè)試為上一層測(cè)試準(zhǔn)備測(cè)試條件和數(shù)據(jù)驅(qū)動(dòng)環(huán)境,也包含兩者平行進(jìn)行測(cè)試。,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,因此,發(fā)覺引起錯(cuò)誤的緣由依次也與開發(fā)過(guò)程的相次序反,首先對(duì)每一個(gè)模塊進(jìn)行單元測(cè)試,消退程序模塊內(nèi)部邏輯上和功能上的錯(cuò)誤和缺陷,再比照軟件設(shè)計(jì)進(jìn)行集成測(cè)試(有時(shí)也叫整體測(cè)試),檢測(cè)和解除子系統(tǒng)或系統(tǒng)結(jié)構(gòu)上的錯(cuò)誤,再比照需求進(jìn)行確認(rèn)測(cè)試(也稱為有效性測(cè)試),最終進(jìn)行系統(tǒng)測(cè)試,運(yùn)行系統(tǒng),看軟件系統(tǒng)是否滿足功能和性能及其它要求。,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,需求分析,軟件設(shè)計(jì),軟件編碼,確認(rèn)測(cè)試,集成測(cè)試,單元測(cè)試,系統(tǒng),測(cè)試,圖6-2 軟件測(cè)試與軟件開發(fā)過(guò)程間的關(guān)系,6.1.4,軟件測(cè)試步驟與軟件開發(fā)各階段的關(guān)系,需求分析,說(shuō)明書,概要設(shè)計(jì),說(shuō)明書,詳細(xì)設(shè)計(jì),說(shuō)明書,源程序,代碼,確認(rèn)測(cè)試,集成測(cè)試,單元測(cè)試,系統(tǒng)測(cè)試,圖6-3 軟件測(cè)試與開發(fā)文檔之間的關(guān)系,6.1.5,軟件測(cè)試原則,(1)將軟件測(cè)試貫穿于軟件開發(fā)的各個(gè)階段中,在開發(fā)過(guò)程中盡早地發(fā)覺和預(yù)防錯(cuò)誤,杜絕隱患,提高軟件質(zhì)量;,(2)測(cè)試用例必需包含輸入數(shù)據(jù)和與之對(duì)應(yīng)的預(yù)期輸出結(jié)果,細(xì)心設(shè)計(jì)測(cè)試用例;,(3)測(cè)試時(shí)應(yīng)避開設(shè)計(jì)者檢查自己設(shè)計(jì)的程序;,(4)設(shè)計(jì)測(cè)試用例時(shí),應(yīng)包括合理的與不合理的輸入條件;,6.1.5,軟件測(cè)試原則,(5)充分留意測(cè)試中出現(xiàn)的錯(cuò)誤群集現(xiàn)象,若發(fā)覺錯(cuò)誤數(shù)目較多,則可能殘存的錯(cuò)誤數(shù)目也較多,這種錯(cuò)誤出現(xiàn)的群集現(xiàn)象,已為很多程序測(cè)試實(shí)踐所證明;,(6)嚴(yán)格執(zhí)行測(cè)試支配,以軟件需求說(shuō)明書為基準(zhǔn)設(shè)計(jì)測(cè)試用例,解除測(cè)試的隨意性;,6.1.5,軟件測(cè)試原則,(7)對(duì)每一個(gè)測(cè)試結(jié)果做全面檢查,不能遺漏錯(cuò)誤出現(xiàn)的征兆,軟件修改后要進(jìn)行回來(lái)測(cè)試,即用修改前測(cè)試過(guò)的測(cè)試用例進(jìn)行測(cè)試,再用新的測(cè)試用例測(cè)試;,(8)妥當(dāng)保存測(cè)試支配、測(cè)試用例、出錯(cuò)統(tǒng)計(jì)數(shù)據(jù)和最終分析報(bào)告,為維護(hù)供應(yīng)便利。,在一個(gè)程序段中,還存在著尚未發(fā)覺的錯(cuò)誤概率與已發(fā)覺的錯(cuò)誤數(shù)正相關(guān)。,6.1.5,軟件測(cè)試原則,殘存錯(cuò)誤的可能性,已發(fā)現(xiàn)的錯(cuò)誤數(shù),圖6-4 軟件錯(cuò)誤的群集現(xiàn)象示意圖,6.2,軟件測(cè)試的方法,軟件的測(cè)試方法很多,不同的動(dòng)身點(diǎn)得到不同的測(cè)試方法。有:,從測(cè)試過(guò)程來(lái)分:靜態(tài)分析法、動(dòng)態(tài)測(cè)試法;,從視察結(jié)構(gòu)的透亮性方式來(lái)分:白盒法、黑盒法、灰盒法;,從獲得測(cè)試數(shù)據(jù)形式上分:窮盡法;等價(jià)類劃分法;邊界值分析法;,6.2,軟件測(cè)試的方法,從邏輯分析上分:因果圖法;錯(cuò)誤推想法;,從測(cè)試步驟上分:?jiǎn)卧獪y(cè)試、集成測(cè)試、確認(rèn)測(cè)試、系統(tǒng)測(cè)試等;,從考察形式上分:功能測(cè)試,邏輯測(cè)試;,6.2,軟件測(cè)試的方法,如何測(cè)試得更完全、怎樣進(jìn)行測(cè)試用例的設(shè)計(jì),是軟件測(cè)試中的關(guān)鍵技術(shù)。無(wú)論用哪種方法進(jìn)行測(cè)試,都是設(shè)法用較少的測(cè)試用例集合測(cè)試出程序中較多的潛在錯(cuò)誤。,靜態(tài)分析時(shí),不執(zhí)行程序,可對(duì)需求分析說(shuō)明書、軟件設(shè)計(jì)說(shuō)明書、源程序做結(jié)構(gòu)檢查、流圖分析、符號(hào)執(zhí)行來(lái)分析軟件可能導(dǎo)致的異樣狀況,找出軟件錯(cuò)誤。從測(cè)試過(guò)程來(lái)分:靜態(tài)分析法、動(dòng)態(tài)測(cè)試法;,6.2,軟件測(cè)試的方法,結(jié)構(gòu)檢查是手工分析技術(shù),對(duì)需求說(shuō)明、程序設(shè)計(jì)、編碼、測(cè)試工作進(jìn)行評(píng)議,虛擬地(模擬