軟件測試及軟件質(zhì)量控制



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