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