軟件測試系列--集成測試


一、集成測試(Integration Testing)的概念

集成測試(Integration Testing)是在單元測試的基礎上,將所有模塊按照概要設計要求組裝成為一個子系統或者系統,進行集成測試。

二、集成測試關注的重點

一些模塊雖然能夠單獨工作,但並不能保證連接起來也能正常的工作,程序在某些局部反映不出來的問題,在全局上很可能暴漏出來,影響功能的實現,因此集成測試應當考慮兩大(5個)問題:

1、模塊間的接口(接口的覆蓋率)

(1)在把各個模塊連接起來的時候,穿越模塊接口的數據是否會丟失。

(2)全局數據結構是否有問題,會不會被異常修改。

2、集成后的功能(參數的傳遞)

(1)各個子功能組合起來,能否達到預期要求的父功能。

(2)一個模塊的功能是否會對另一個模塊的功能產生不利的影響。

(3)單個模塊的誤差積累起來,是否會放大,從而達到不可接受的程度。

三、集成測試的三個級別

由於集成的力度不同,一般可以把集成測試划分為三個級別:

1、模塊內集成測試。

2、子系統內集成測試。

3、子系統間集成測試。

四、集成測試策略

集成測試策略最主要的有三種:

1、大爆炸集成(Big Bang Integration)。

2、自頂向下集成(Top-Down Integration)。

3、自底向上集成(Bottom-up Integration)。

基於以上三種測試策略,又提出了以下五種集成測試策略,它們都是在上面的三種主要測試策略的基礎上進行綜合,改進而成的。

1、三明治集成(Sandwich Integration)。

2、基干集成(Backbone Integration)。

3、分層集成(Layers Integration)。

4、基於功能的集成(Function-Based Integration)。

5、基於進度的集成(Schedule-Based Integration)	

下面我們詳細的介紹一下這幾種集成測試策略。

1、大爆炸集成(Big Bang Integration)

(1)概念:大爆炸集成(Big Bang Integration)是屬於非增值式集成(Non-Incremental Integration)的一種方法,也叫一次性組裝貨整體拼裝。該集成把所有組件一次性集合到被測系統中,不考慮組件之間的相互依賴性或者可能存在的風險。

(2)目的:在最短的時間內把系統組裝起來,並且通過最少的測試來驗證整個系統。

(3)策略:在大爆炸這種集成方法中,首先需要對每個模塊進行單元測試,然后把所有單元組裝到一起進行測試,最終得到要求的軟件系統。

(4)優點:
	*在有利的情況下,大爆炸集成可以迅速完成集成測試,並且只要極少數的驅動單元和樁單元(如果需要的話)。
	*需要的測試用例最少。		
	*方法比較簡單。		
	*可以並行開展,對人力、物力的資源利用率較高。

(5)缺點:
	*這種在單元測試的基礎上,將所有組件一次性進行組裝,不考慮組件之間的依賴性,雖然簡單,但是由於程序中不可避免的存在模塊間接口、全局數據結構等方面的問題,所以一次試運行成功的可能性並不大。
	*在發現錯誤的時候,問題定位和修改都比較困難。
	*即使被測系統能夠被一次性集成,但還是會有很多接口問題可以躲過集成測試而進入到系統測試。

(6)適用范圍:
	*一個維護性項目(或者功能增強型項目),以前的產品已經很穩定,並且新增的項目只有少數幾個組件被增加或者修改。
	*被測系統比較小,並且它的每個組件都進行了充分的單元測試。

2、自頂向下集成(Top-Down Integration)

(1)概念:自頂向下集成(Top-Down Integration)采用了和設計一樣的順序進行測試,它在第一時間內對系統的控制接口進行驗證,其中頂層的組件具有控制的責任,首先測試頂層的組件,然后逐步測試處於底層的組件,這種集成方式可以采用深度優先策略和廣度優先策略。

(2)目的:從頂層開始控制,采用和設計一樣的思路對系統進行測試,以驗證系統的接口穩定性。

(3)策略:
	*以主模塊為所測模塊兼驅動模塊,所有直屬於主模塊下的下屬模塊全部用樁單元代替,對主模塊進行測試。
	*采用深度優先(Depth-First)或者廣度優先(Breath-First)的策略,用實際模塊替換相應樁模塊,再用樁模塊代替它們的直接下屬模塊,與已經測試的模塊組成新的子系統或者系統。

(4)優點:
	*自頂向下這種集成方式,在測試過程中較早的驗證了主要的控制和判斷點,如果主要控制有問題,盡早發現它能夠減少以后的返工,所以這是十分必要的。
	*如果采用深度優先的策略,就可以首先實現和驗證一個完整的軟件功能,可以先對邏輯輸入的分支進行組裝和測試,檢查和客服潛藏的錯誤和缺陷,驗證功能的正確性,為之后對主要加工分支的組裝和測試提供了保證。		
	*功能的可行性較早得到了證實。		
	*最多只需要一個驅動模塊,減少了驅動模塊的費用開支,也減輕了后期對驅動模塊的維護。
	*由於該方法和設計的思路是一樣的,所以可以和設計並行開展,如果目標環境或者設計需要改變,這種方式也可以靈活的適應。
	*支持故障隔離。例如:A模塊測試正常,但是假如B模塊之后,出現問題,那么可以確定,要么就是B模塊有問題,要么就是A模塊和B模塊之間的接口有問題。

(5)缺點:
	*樁在每個測試中都必須提供,所以樁的開發和維護是該策略的最大成本。
	*底層組件中的一個無法預計的需要可能會導致許多頂層組件的修改,這破壞了部分先前構造的測試包。
	*底層組件行為的驗證被推遲了。
	*隨着底層模塊的不斷增加,系統越來越復雜,導致底層模塊的測試肯那個不夠充分,尤其是那些被重用的模塊。

(6)適用范圍:
	*產品控制結構比較清晰和穩定。
	*產品的高層借口比較穩定,底層變化比較頻繁。
	*產品的控制模塊可能存在技術風險,需要較早被驗證。
	*希望盡早能夠看到產品的系統功能行為。

3、自底向上集成(Bottom-up Integration)

(1)概念:自底向上集成(Bottom-up Integration)方式是從程序模塊結構的最底層的模塊開始組裝和測試,因為模塊是自底向上進行測試的,對於一個給定層次的模塊,它的子模塊已經組裝並測試完成,所以不再需要樁模塊。需要從子模塊中得到的信息可以直接運行子模塊得到。

(2)目的:從具有最小依賴性的底層組件開始按照依賴關系樹的結構,逐層向上集成,以驗證整個系統的穩定性。

(3)策略:
	*起始於系統的最底層模塊,也可以把多個子模塊合並到一起進行測試。
	*使用驅動模塊對選定的模塊進行測試。
	*用實際模塊代替驅動模塊,與它已經測試過的子模塊組裝成為一個更大的模塊組進行測試。
	*重復上面的步驟,直到系統最頂層模塊加入到已測系統中。

(4)優點:
	*允許對底層模塊行為的早期驗證。
	*在工作的最初可以采用並行進行集成,比自頂向下的測試效率高。		
	*由於驅動模塊是額外編寫的,而不是實際的模塊,所以對實際被測模塊的可測試性要求比自頂向下的測試策略要小。		
	*減少了樁模塊的工作量。
	*故障隔離。

(5)缺點:
	*驅動模塊的開發工作量比較大。
	*對高層的驗證被推遲到最后,設計上的錯誤不能盡早的被發現,尤其對於那些控制機構在整個體系中比較關鍵的產品。
	*隨着集成到了頂層,整個系統將變得越來越復雜,並且對於底層的一些異常很難覆蓋。

(6)適用范圍:
	*采用契約式開發(Design by Contract)的產品。
	*底層接口比較穩定的產品。
	*高層接口變化比較頻繁的產品。
	*底層模塊較早被完成的產品。

4、三明治集成(Sandwich Integration)

由於自頂向下集成策略和自底向上集成策略都有各自的缺點,所以就出現了一種結合這兩種測試策略的集成方式,即:三明治集成。

(1)概念:三明治集成(Sandwich Integration)有時也被稱為混合式集成,三明治集成就是把系統划分為三層,中間一層為目標層,測試的時候,對目標層上面的一層使用自頂向下的集成策略,對目標層下面的一層使用自底向上的集成策略,最后測試在目標層會合。

(2)目的:綜合自頂向下的集成測試策略和自底向上的集成測試策略的優點。

(3)策略:
	*首先對目標層上面的一層采用自頂向下的測試策略,對主模塊A進行測試,對A調用的子模塊(目標層)用樁單元代替。
	*其次對目標層下面的一層采用自底向上的測試策略。
	*最后將三層集成在一起。

(4)優點:集合了自頂向下和自底向上的兩種集成策略的優點。

(5)缺點:中間層在被集成前測試不充分。

(6)適用范圍:大部分軟件開發項目都可以使用這種集成策略。

5、基干集成(Backbone Integration)

(1)概念:在很多系統中,尤其在嵌入式系統中,一般可以划分成兩個部分:內核部分(基干部分)和外圍應用部分,這兩部分經常會被不同的項目組並發開發。

(2)目的:結合自頂向下,自底向上和大爆炸集成的元素,以驗證緊密耦合的子系統間的互操作性。

(3)策略:
	*對基干中的每個模塊進行單獨的充分的測試,必要時使用驅動和樁。
	*對基干中所有的模塊進行大爆炸集成,形成基干子系統,並使用一個驅動模塊檢查經過大爆炸的基干。
	*對應用的控制子系統進行自頂向下的集成。
	*把基干和控制子系統進行集成,重新構造控制子系統。
	*對個應用子系統采用自底向上的集成策略。
	*集成基干子系統,控制子系統和各應用子系統形成整個系統。
	
(4)優點:具有三明治集成的優點,更適合於大型復雜項目的集成。

(5)缺點:
	*必須對系統的結構和相互依存性進行仔細的分析。
	*必須開發樁和驅動模塊,並且由於被測系統的復雜性導致這些模塊開發工作量的加大,可以通過復用技術在一定程度上降低成本。
	*由於局部采用了大爆炸的策略,所以有些接口可能測試不完整。

(6)適用范圍:適合大型復雜的項目
	*具有多層協議的嵌入式系統。
	*操作系統產品

6、分層集成(Layers Integration)

(1)概念:分層模型在通訊系統中很常見,分層集成就是針對這個特點使用的一種集成。

(2)目的:通過增量式集成的方法驗證一個具有層次性體系結構的應用系統的穩定性和互操作性。

(3)策略:
	*划分系統的層次。
	*確定每個層次內部的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略,一般對於頂層可能還有第二層的內部采用自頂向下的集成策略;對於中間采用自底向上的集成策略,對於底層主要采用進行單獨測試。
	*確定層次間的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略。

(4)優缺點:因為每個層次間和層次內部采用的策略不同,所以優缺點也就是和它采用的測試策略相對應。

(5)適用范圍:有明顯線性層次關系的產品系統。

7、基於功能的集成(Function-Based Integration)

(1)概念:在開發過程中,盡早的看到系統主要功能的實現,對於談對來說也是很有必要的,基於功能的集成是從功能角度出發,按照功能的關鍵程度對模塊的集成順序進行組織。

(2)目的:采用增值的方法,盡早的驗證系統關鍵功能。

(3)策略:

	*確定功能的優先級別。
	*分析優先級別最高的功能路徑,把該路徑上的所有模塊集成到一起,必要時使用樁模塊和單元模塊。
	*增加一個關鍵功能,繼續上面一個步驟,直到所有模塊都被集成到被測系統中。
	
(4)優點:

	*采用該方法,可以盡快的看到關鍵功能的實現,並驗證關鍵功能的正確性。
	*由於該方法在驗證某個功能的時候,可能會加入多個模塊,因此在進度上,比自頂向下和自底向上還有三明治的集成策略要快一點。
	*接口的覆蓋使用的測試用例比較少。
	*可以減少驅動模塊的開發

(5)缺點:

	*對於復雜的系統,功能之間的相互關聯性可能是錯綜復雜並難以分析的。
	*對有些接口的測試不充分,會丟失許多接口錯誤。
	*一些初始的集成需要使用樁模塊。
	*可能會有比較大的冗余測試。

(6)適用范圍:

	*關鍵功能具有較大風險的產品。
	*技術探索性的項目,其功能的實現遠比質量更關鍵。
	*對於功能的實現沒有把握的產品。

8、基於進度的集成(Schedule-Based Integration)

(1)概念:進度壓力在我們實際的工作中,每個軟件開發項目都會遇到,。
為了完成進度,有可能會犧牲質量,基於進度的集成就是在兼顧質量和進度兩者之間尋找了一個均衡點。

(2)目的:盡可能早的進行集成測試,提高開發與集成的並行性,有效的縮短進度。

(3)策略:這個集成的策略就是把最早可獲得的代碼拿來激勵進行集成,必要的時候開發樁模塊和驅動模塊,子啊最大程度上保持與開發的並行性,從而縮短了項目集成的時間。

(4)優點:

	*具有比較高的並行度。
	*有效縮短項目開發的進度。
		
(5)缺點:

	*可能最早拿到的模塊之間缺乏整體性,只能進行獨立的集成,導致許多接口必須等到后期才能驗證,但此時系統可能已經很復雜,往往無法發現有效的接口問題。
	*樁模塊和驅動模塊的工作量可能會變得很龐大。
	*由於進度的原因,模塊可能很不穩定且會不斷變動,導致測試的重復和浪費。

(6)適用范圍:進度優先級高於質量的項目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM