一、集成測試(Integration Testing)的概念
集成測試(Integration Testing)是在單元測試的基礎上,將所有模塊按照概要設計要求組裝成為一個子系統(tǒng)或者系統(tǒng),進行集成測試。
二、集成測試關注的重點
一些模塊雖然能夠單獨工作,但并不能保證連接起來也能正常的工作,程序在某些局部反映不出來的問題,在全局上很可能暴漏出來,影響功能的實現(xiàn),因此集成測試應當考慮兩大(5個)問題:
1、模塊間的接口(接口的覆蓋率)
(1)在把各個模塊連接起來的時候,穿越模塊接口的數(shù)據(jù)是否會丟失。
(2)全局數(shù)據(jù)結構是否有問題,會不會被異常修改。
2、集成后的功能(參數(shù)的傳遞)
(1)各個子功能組合起來,能否達到預期要求的父功能。
(2)一個模塊的功能是否會對另一個模塊的功能產生不利的影響。
(3)單個模塊的誤差積累起來,是否會放大,從而達到不可接受的程度。
三、集成測試的三個級別
由于集成的力度不同,一般可以把集成測試劃分為三個級別:
1、模塊內集成測試。
2、子系統(tǒng)內集成測試。
3、子系統(tǒng)間集成測試。
四、集成測試策略
集成測試策略最主要的有三種:
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)的一種方法,也叫一次性組裝貨整體拼裝。該集成把所有組件一次性集合到被測系統(tǒng)中,不考慮組件之間的相互依賴性或者可能存在的風險。
(2)目的:在最短的時間內把系統(tǒng)組裝起來,并且通過最少的測試來驗證整個系統(tǒng)。
(3)策略:在大爆炸這種集成方法中,首先需要對每個模塊進行單元測試,然后把所有單元組裝到一起進行測試,最終得到要求的軟件系統(tǒng)。
(4)優(yōu)點:
*在有利的情況下,大爆炸集成可以迅速完成集成測試,并且只要極少數(shù)的驅動單元和樁單元(如果需要的話)。
*需要的測試用例最少。
*方法比較簡單。
*可以并行開展,對人力、物力的資源利用率較高。
(5)缺點:
*這種在單元測試的基礎上,將所有組件一次性進行組裝,不考慮組件之間的依賴性,雖然簡單,但是由于程序中不可避免的存在模塊間接口、全局數(shù)據(jù)結構等方面的問題,所以一次試運行成功的可能性并不大。
*在發(fā)現(xiàn)錯誤的時候,問題定位和修改都比較困難。
*即使被測系統(tǒng)能夠被一次性集成,但還是會有很多接口問題可以躲過集成測試而進入到系統(tǒng)測試。
(6)適用范圍:
*一個維護性項目(或者功能增強型項目),以前的產品已經很穩(wěn)定,并且新增的項目只有少數(shù)幾個組件被增加或者修改。
*被測系統(tǒng)比較小,并且它的每個組件都進行了充分的單元測試。
2、自頂向下集成(Top-Down Integration)
(1)概念:自頂向下集成(Top-Down Integration)采用了和設計一樣的順序進行測試,它在第一時間內對系統(tǒng)的控制接口進行驗證,其中頂層的組件具有控制的責任,首先測試頂層的組件,然后逐步測試處于底層的組件,這種集成方式可以采用深度優(yōu)先策略和廣度優(yōu)先策略。
(2)目的:從頂層開始控制,采用和設計一樣的思路對系統(tǒng)進行測試,以驗證系統(tǒng)的接口穩(wěn)定性。
(3)策略:
*以主模塊為所測模塊兼驅動模塊,所有直屬于主模塊下的下屬模塊全部用樁單元代替,對主模塊進行測試。
*采用深度優(yōu)先(Depth-First)或者廣度優(yōu)先(Breath-First)的策略,用實際模塊替換相應樁模塊,再用樁模塊代替它們的直接下屬模塊,與已經測試的模塊組成新的子系統(tǒng)或者系統(tǒng)。
(4)優(yōu)點:
*自頂向下這種集成方式,在測試過程中較早的驗證了主要的控制和判斷點,如果主要控制有問題,盡早發(fā)現(xiàn)它能夠減少以后的返工,所以這是十分必要的。
*如果采用深度優(yōu)先的策略,就可以首先實現(xiàn)和驗證一個完整的軟件功能,可以先對邏輯輸入的分支進行組裝和測試,檢查和客服潛藏的錯誤和缺陷,驗證功能的正確性,為之后對主要加工分支的組裝和測試提供了保證。
*功能的可行性較早得到了證實。
*最多只需要一個驅動模塊,減少了驅動模塊的費用開支,也減輕了后期對驅動模塊的維護。
*由于該方法和設計的思路是一樣的,所以可以和設計并行開展,如果目標環(huán)境或者設計需要改變,這種方式也可以靈活的適應。
*支持故障隔離。例如:A模塊測試正常,但是假如B模塊之后,出現(xiàn)問題,那么可以確定,要么就是B模塊有問題,要么就是A模塊和B模塊之間的接口有問題。
(5)缺點:
*樁在每個測試中都必須提供,所以樁的開發(fā)和維護是該策略的最大成本。
*底層組件中的一個無法預計的需要可能會導致許多頂層組件的修改,這破壞了部分先前構造的測試包。
*底層組件行為的驗證被推遲了。
*隨著底層模塊的不斷增加,系統(tǒng)越來越復雜,導致底層模塊的測試肯那個不夠充分,尤其是那些被重用的模塊。
(6)適用范圍:
*產品控制結構比較清晰和穩(wěn)定。
*產品的高層借口比較穩(wěn)定,底層變化比較頻繁。
*產品的控制模塊可能存在技術風險,需要較早被驗證。
*希望盡早能夠看到產品的系統(tǒng)功能行為。
3、自底向上集成(Bottom-up Integration)
(1)概念:自底向上集成(Bottom-up Integration)方式是從程序模塊結構的最底層的模塊開始組裝和測試,因為模塊是自底向上進行測試的,對于一個給定層次的模塊,它的子模塊已經組裝并測試完成,所以不再需要樁模塊。需要從子模塊中得到的信息可以直接運行子模塊得到。
(2)目的:從具有最小依賴性的底層組件開始按照依賴關系樹的結構,逐層向上集成,以驗證整個系統(tǒng)的穩(wěn)定性。
(3)策略:
*起始于系統(tǒng)的最底層模塊,也可以把多個子模塊合并到一起進行測試。
*使用驅動模塊對選定的模塊進行測試。
*用實際模塊代替驅動模塊,與它已經測試過的子模塊組裝成為一個更大的模塊組進行測試。
*重復上面的步驟,直到系統(tǒng)最頂層模塊加入到已測系統(tǒng)中。
(4)優(yōu)點:
*允許對底層模塊行為的早期驗證。
*在工作的最初可以采用并行進行集成,比自頂向下的測試效率高。
*由于驅動模塊是額外編寫的,而不是實際的模塊,所以對實際被測模塊的可測試性要求比自頂向下的測試策略要小。
*減少了樁模塊的工作量。
*故障隔離。
(5)缺點:
*驅動模塊的開發(fā)工作量比較大。
*對高層的驗證被推遲到最后,設計上的錯誤不能盡早的被發(fā)現(xiàn),尤其對于那些控制機構在整個體系中比較關鍵的產品。
*隨著集成到了頂層,整個系統(tǒng)將變得越來越復雜,并且對于底層的一些異常很難覆蓋。
(6)適用范圍:
*采用契約式開發(fā)(Design by Contract)的產品。
*底層接口比較穩(wěn)定的產品。
*高層接口變化比較頻繁的產品。
*底層模塊較早被完成的產品。
4、三明治集成(Sandwich Integration)
由于自頂向下集成策略和自底向上集成策略都有各自的缺點,所以就出現(xiàn)了一種結合這兩種測試策略的集成方式,即:三明治集成。
(1)概念:三明治集成(Sandwich Integration)有時也被稱為混合式集成,三明治集成就是把系統(tǒng)劃分為三層,中間一層為目標層,測試的時候,對目標層上面的一層使用自頂向下的集成策略,對目標層下面的一層使用自底向上的集成策略,最后測試在目標層會合。
(2)目的:綜合自頂向下的集成測試策略和自底向上的集成測試策略的優(yōu)點。
(3)策略:
*首先對目標層上面的一層采用自頂向下的測試策略,對主模塊A進行測試,對A調用的子模塊(目標層)用樁單元代替。
*其次對目標層下面的一層采用自底向上的測試策略。
*最后將三層集成在一起。
(4)優(yōu)點:集合了自頂向下和自底向上的兩種集成策略的優(yōu)點。
(5)缺點:中間層在被集成前測試不充分。
(6)適用范圍:大部分軟件開發(fā)項目都可以使用這種集成策略。
5、基干集成(Backbone Integration)
(1)概念:在很多系統(tǒng)中,尤其在嵌入式系統(tǒng)中,一般可以劃分成兩個部分:內核部分(基干部分)和外圍應用部分,這兩部分經常會被不同的項目組并發(fā)開發(fā)。
(2)目的:結合自頂向下,自底向上和大爆炸集成的元素,以驗證緊密耦合的子系統(tǒng)間的互操作性。
(3)策略:
*對基干中的每個模塊進行單獨的充分的測試,必要時使用驅動和樁。
*對基干中所有的模塊進行大爆炸集成,形成基干子系統(tǒng),并使用一個驅動模塊檢查經過大爆炸的基干。
*對應用的控制子系統(tǒng)進行自頂向下的集成。
*把基干和控制子系統(tǒng)進行集成,重新構造控制子系統(tǒng)。
*對個應用子系統(tǒng)采用自底向上的集成策略。
*集成基干子系統(tǒng),控制子系統(tǒng)和各應用子系統(tǒng)形成整個系統(tǒng)。
(4)優(yōu)點:具有三明治集成的優(yōu)點,更適合于大型復雜項目的集成。
(5)缺點:
*必須對系統(tǒng)的結構和相互依存性進行仔細的分析。
*必須開發(fā)樁和驅動模塊,并且由于被測系統(tǒng)的復雜性導致這些模塊開發(fā)工作量的加大,可以通過復用技術在一定程度上降低成本。
*由于局部采用了大爆炸的策略,所以有些接口可能測試不完整。
(6)適用范圍:適合大型復雜的項目
*具有多層協(xié)議的嵌入式系統(tǒng)。
*操作系統(tǒng)產品
6、分層集成(Layers Integration)
(1)概念:分層模型在通訊系統(tǒng)中很常見,分層集成就是針對這個特點使用的一種集成。
(2)目的:通過增量式集成的方法驗證一個具有層次性體系結構的應用系統(tǒng)的穩(wěn)定性和互操作性。
(3)策略:
*劃分系統(tǒng)的層次。
*確定每個層次內部的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略,一般對于頂層可能還有第二層的內部采用自頂向下的集成策略;對于中間采用自底向上的集成策略,對于底層主要采用進行單獨測試。
*確定層次間的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略。
(4)優(yōu)缺點:因為每個層次間和層次內部采用的策略不同,所以優(yōu)缺點也就是和它采用的測試策略相對應。
(5)適用范圍:有明顯線性層次關系的產品系統(tǒng)。
7、基于功能的集成(Function-Based Integration)
(1)概念:在開發(fā)過程中,盡早的看到系統(tǒng)主要功能的實現(xiàn),對于談對來說也是很有必要的,基于功能的集成是從功能角度出發(fā),按照功能的關鍵程度對模塊的集成順序進行組織。
(2)目的:采用增值的方法,盡早的驗證系統(tǒng)關鍵功能。
(3)策略:
*確定功能的優(yōu)先級別。
*分析優(yōu)先級別最高的功能路徑,把該路徑上的所有模塊集成到一起,必要時使用樁模塊和單元模塊。
*增加一個關鍵功能,繼續(xù)上面一個步驟,直到所有模塊都被集成到被測系統(tǒng)中。
(4)優(yōu)點:
*采用該方法,可以盡快的看到關鍵功能的實現(xiàn),并驗證關鍵功能的正確性。
*由于該方法在驗證某個功能的時候,可能會加入多個模塊,因此在進度上,比自頂向下和自底向上還有三明治的集成策略要快一點。
*接口的覆蓋使用的測試用例比較少。
*可以減少驅動模塊的開發(fā)
(5)缺點:
*對于復雜的系統(tǒng),功能之間的相互關聯(lián)性可能是錯綜復雜并難以分析的。
*對有些接口的測試不充分,會丟失許多接口錯誤。
*一些初始的集成需要使用樁模塊。
*可能會有比較大的冗余測試。
(6)適用范圍:
*關鍵功能具有較大風險的產品。
*技術探索性的項目,其功能的實現(xiàn)遠比質量更關鍵。
*對于功能的實現(xiàn)沒有把握的產品。
8、基于進度的集成(Schedule-Based Integration)
(1)概念:進度壓力在我們實際的工作中,每個軟件開發(fā)項目都會遇到,。
為了完成進度,有可能會犧牲質量,基于進度的集成就是在兼顧質量和進度兩者之間尋找了一個均衡點。
(2)目的:盡可能早的進行集成測試,提高開發(fā)與集成的并行性,有效的縮短進度。
(3)策略:這個集成的策略就是把最早可獲得的代碼拿來激勵進行集成,必要的時候開發(fā)樁模塊和驅動模塊,子啊最大程度上保持與開發(fā)的并行性,從而縮短了項目集成的時間。
(4)優(yōu)點:
*具有比較高的并行度。
*有效縮短項目開發(fā)的進度。
(5)缺點:
*可能最早拿到的模塊之間缺乏整體性,只能進行獨立的集成,導致許多接口必須等到后期才能驗證,但此時系統(tǒng)可能已經很復雜,往往無法發(fā)現(xiàn)有效的接口問題。
*樁模塊和驅動模塊的工作量可能會變得很龐大。
*由于進度的原因,模塊可能很不穩(wěn)定且會不斷變動,導致測試的重復和浪費。
(6)適用范圍:進度優(yōu)先級高于質量的項目。
|