什么是集成測驗
集成測驗(Integration Testing),也叫組裝測驗或聯合測驗,在單元測驗的基礎上,將所有模塊按照設計要求(如根據結構圖)組裝成為子系統或系統,進行集成測驗,
集成測驗(也叫組裝測驗,聯合測驗)是單元測驗的邏輯擴展,它最簡單的形式是:把兩個已經測驗過的單元組合成一個組件,測驗它們之間的介面,從這一層意義上講,組件是指多個單元的集成聚合,在現實方案中,許多單元組合成組件,而這些組件又聚合為程式的更大部分,方法是測驗片段的組合,并最終擴展成行程,將模塊與其他組的模塊一起測驗,最后,將構成行程的所有模塊一起測驗,此外,如果程式由多個行程組成,應該成對測驗它們,而不是同時測驗所有行程,
集成測驗是在單元測驗的基礎上,測驗在將所有的軟體單元按照概要設計規格說明的要求組裝成模塊、子系統或系統的程序中各部分作業是否達到或實作相應技術指標及要求的活動,也就是說,在集成測驗之前,單元測驗應該已經完成,集成測驗中所使用的物件應該是已經經過單元測驗的軟體單元,這一點很重要,因為如果不經過單元測驗,那么集成測驗的效果將會受到很大影響,并且會大幅增加軟體單元代碼糾錯的代價,
所有的軟體專案都不能擺脫系統集成這個階段,不管采用什么開發模式,具體的開發作業總得從一個一個的軟體單元做起,軟體單元只有經過集成才能形成一個有機的整體,具體的集成程序可能是顯性的也可能是隱性的,只要有集成,總是會出現一些常見問題,工程實踐中,幾乎不存在軟體單元組裝程序中不出任何問題的情況,從集成測驗需要花費的時間遠遠超過單元測驗,直接從單元測驗過渡到系統測驗是極不妥當的做法,
測驗關注的重點
一些模塊雖然能夠單獨作業,但并不能保證連接起來也能正常的作業,程式在某些區域反映不出來的問題,在全域上很可能暴漏出來,影響功能的實作,因此集成測驗應當考慮兩大(5個)問題:
1、模塊間的介面(介面的覆寫率)
(1)在把各個模塊連接起來的時候,穿越模塊介面的資料是否會丟失,
(2)全域資料結構是否有問題,會不會被例外修改,
2、集成后的功能(引數的傳遞)
(1)各個子功能組合起來,能否達到預期要求的父功能,
(2)一個模塊的功能是否會對另一個模塊的功能產生不利的影響,
(3)單個模塊的誤差積累起來,是否會放大,從而達到不可接受的程度,
集成測驗的三個級別
由于集成的力度不同,一般可以把集成測驗劃分為三個級別:
1、模塊內集成測驗,
2、子系統內集成測驗,
3、子系統間集成測驗,
集成測驗的模式
1.非漸增測驗:先分別測驗每個模塊,再把所有模塊按設計要求一次全部組裝起來所要的系統,然后進行整體測驗,非漸增式測驗時可能發現一大堆錯誤,為每個錯誤定位和糾正非常困難,并且在改正一個錯誤的同時又可能引入新的錯誤,新舊錯誤混雜,更難斷定出錯的原因和位置,非漸增式的方法如:大爆炸集成,
2.漸增測驗:逐個把未經測驗的模塊組裝到已經過測驗的模塊上去進行集成測驗,每加入一個新模塊進行一次測驗,重復此程序直至程式組裝完成,漸增式測驗有以下組裝方法:自頂向下和自底向上,
兩者的區別是:
1、非漸增式方法是把單元測驗和集成測驗分成兩個不同的階段,前一階段完成模塊的單元測驗,后一階段完成集成測驗,而漸增式測驗則是把單元測驗和集成測驗結合在一起,同時完成,
2、非漸增式需要更多的作業量,因為每個模塊都需要驅動模塊和樁模塊,而漸增式利用已測驗過的模塊作為驅動模塊或樁模塊,因此作業量少,
3、漸增式可以較早地發現介面間的錯誤,非漸增式到最后組裝的時候才發現,
4、漸增式有利于拍錯,發生錯誤往往和最近新加入的模塊有關,而非漸增式發現介面錯誤推遲到最后,很難判斷是哪一部分介面出錯,
5、漸增式比較徹底,已測驗的模塊和新的模塊在測驗,
6、非漸增式開始可并行測驗所有模塊,能充分利用人力,對測驗大型軟體很有意義,
集成測驗策略
集成測驗策略最主要的有三種:
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)
大爆炸集成(Big Bang Integration)
(1)概念:大爆炸集成(Big Bang Integration)是屬于非漸增式集成(Non-Incremental Integration)的一種方法,也叫一次性組裝貨整體拼裝,該集成把所有組件一次性集合到被測系統中,不考慮組件之間的相互依賴性或者可能存在的風險,
(2)目的:在最短的時間內把系統組裝起來,并且通過最少的測驗來驗證整個系統,
(3)策略:在大爆炸這種集成方法中,首先需要對每個模塊進行單元測驗,然后把所有單元組裝到一起進行測驗,最終得到要求的軟體系統,
(4)優點:
- 在有利的情況下,大爆炸集成可以迅速完成集成測驗,并且只要極少數的驅動單元和樁單元(如果需要的話),
- 需要的測驗用例最少,
- 方法比較簡單,
- 可以并行開展,對人力、物力的資源利用率較高,
(5)缺點:
- 這種在單元測驗的基礎上,將所有組件一次性進行組裝,不考慮組件之間的依賴性,雖然簡單,但是由于程式中不可避免的存在模塊間介面、全域資料結構等方面的問題,所以一次試運行成功的可能性并不大,
- 在發現錯誤的時候,問題定位和修改都比較困難,
- 即使被測系統能夠被一次性集成,但還是會有很多介面問題可以躲過集成測驗而進入到系統測驗,
(6)適用范圍:
- 一個維護性專案(或者功能增強型專案),以前的產品已經很穩定,并且新增的專案只有少數幾個組件被增加或者修改,
- 被測系統比較小,并且它的每個組件都進行了充分的單元測驗,
自頂向下集成(Top-Down Integration)
(1)概念:自頂向下集成(Top-Down Integration)采用了和設計一樣的順序進行測驗,它在第一時間內對系統的控制介面進行驗證,其中頂層的組件具有控制的責任,首先測驗頂層的組件,然后逐步測驗處于底層的組件,這種集成方式可以采用深度優先策略和廣度優先策略,
(2)目的:從頂層開始控制,采用和設計一樣的思路對系統進行測驗,以驗證系統的介面穩定性,
(3)策略:
- 以主模塊為所測模塊兼驅動模塊,所有直屬于主模塊下的下屬模塊全部用樁單元代替,對主模塊進行測驗,
- 采用深度優先(Depth-First)或者廣度優先(Breath-First)的策略,用實際模塊替換相應樁模塊,再用樁模塊代替它們的直接下屬模塊,與已經測驗的模塊組成新的子系統或者系統,
(4)優點:
- 自頂向下這種集成方式,在測驗程序中較早的驗證了主要的控制和判斷點,如果主要控制有問題,盡早發現它能夠減少以后的返工,所以這是十分必要的,
- 如果采用深度優先的策略,就可以首先實作和驗證一個完整的軟體功能,可以先對邏輯輸入的分支進行組裝和測驗,檢查和客服潛藏的錯誤和缺陷,驗證功能的正確性,為之后對主要加工分支的組裝和測驗提供了保證,
- 功能的可行性較早得到了證實,
- 最多只需要一個驅動模塊,減少了驅動模塊的費用開支,也減輕了后期對驅動模塊的維護,
- 由于該方法和設計的思路是一樣的,所以可以和設計并行開展,如果目標環境或者設計需要改變,這種方式也可以靈活的適應,
- 支持故障隔離,例如:A模塊測驗正常,但是假如B模塊之后,出現問題,那么可以確定,要么就是B模塊有問題,要么就是A模塊和B模塊之間的介面有問題,
(5)缺點:
- 樁在每個測驗中都必須提供,所以樁的開發和維護是該策略的最大成本,
- 底層組件中的一個無法預計的需要可能會導致許多頂層組件的修改,這破壞了部分先前構造的測驗包,
- 底層組件行為的驗證被推遲了,
- 隨著底層模塊的不斷增加,系統越來越復雜,導致底層模塊的測驗肯那個不夠充分,尤其是那些被重用的模塊,
(6)適用范圍:
- 產品控制結構比較清晰和穩定,
- 產品的高層借口比較穩定,底層變化比較頻繁,
- 產品的控制模塊可能存在技術風險,需要較早被驗證,
- 希望盡早能夠看到產品的系統功能行為,
自底向上集成(Bottom-up Integration)
(1)概念:自底向上集成(Bottom-up Integration)方式是從程式模塊結構的最底層的模塊開始組裝和測驗,因為模塊是自底向上進行測驗的,對于一個給定層次的模塊,它的子模塊已經組裝并測驗完成,所以不再需要樁模塊,需要從子模塊中得到的資訊可以直接運行子模塊得到,
(2)目的:從具有最小依賴性的底層組件開始按照依賴關系樹的結構,逐層向上集成,以驗證整個系統的穩定性,
(3)策略:
- 起始于系統的最底層模塊,也可以把多個子模塊合并到一起進行測驗,
- 使用驅動模塊對選定的模塊進行測驗,
- 用實際模塊代替驅動模塊,與它已經測驗過的子模塊組裝成為一個更大的模塊組進行測驗,
- 重復上面的步驟,直到系統最頂層模塊加入到已測系統中,
(4)優點:
- 允許對底層模塊行為的早期驗證,
- 在作業的最初可以采用并行進行集成,比自頂向下的測驗效率高,
- 由于驅動模塊是額外撰寫的,而不是實際的模塊,所以對實際被測模塊的可測驗性要求比自頂向下的測驗策略要小,
- 減少了樁模塊的作業量,
- 故障隔離,
(5)缺點:
- 驅動模塊的開發作業量比較大,
- 對高層的驗證被推遲到最后,設計上的錯誤不能盡早的被發現,尤其對于那些控制機構在整個體系中比較關鍵的產品,
- 隨著集成到了頂層,整個系統將變得越來越復雜,并且對于底層的一些例外很難覆寫,
(6)適用范圍:
- 采用契約式開發(Design by Contract)的產品,
- 底層介面比較穩定的產品,
- 高層介面變化比較頻繁的產品,
- 底層模塊較早被完成的產品,
三明治集成(Sandwich Integration)
由于自頂向下集成策略和自底向上集成策略都有各自的缺點,所以就出現了一種結合這兩種測驗策略的集成方式,即:三明治集成,
(1)概念:三明治集成(Sandwich Integration)有時也被稱為混合式集成,三明治集成就是把系統劃分為三層,中間一層為目標層,測驗的時候,對目標層上面的一層使用自頂向下的集成策略,對目標層下面的一層使用自底向上的集成策略,最后測驗在目標層會合,
(2)目的:綜合自頂向下的集成測驗策略和自底向上的集成測驗策略的優點,
(3)策略:
- 首先對目標層上面的一層采用自頂向下的測驗策略,對主模塊A進行測驗,對A呼叫的子模塊(目標層)用樁單元代替,
- 其次對目標層下面的一層采用自底向上的測驗策略,
- 最后將三層集成在一起,
(4)優點:集合了自頂向下和自底向上的兩種集成策略的優點,
(5)缺點:中間層在被集成前測驗不充分,
(6)適用范圍:大部分軟體開發專案都可以使用這種集成策略,
基干集成(Backbone Integration)
(1)概念:在很多系統中,尤其在嵌入式系統中,一般可以劃分成兩個部分:內核部分(基干部分)和外圍應用部分,這兩部分經常會被不同的專案組并發開發,
(2)目的:結合自頂向下,自底向上和大爆炸集成的元素,以驗證緊密耦合的子系統間的互操作性,
(3)策略:
- 對基干中的每個模塊進行單獨的充分的測驗,必要時使用驅動和樁,
- 對基干中所有的模塊進行大爆炸集成,形成基干子系統,并使用一個驅動模塊檢查經過大爆炸的基干,
- 對應用的控制子系統進行自頂向下的集成,
- 把基干和控制子系統進行集成,重新構造控制子系統,
- 對個應用子系統采用自底向上的集成策略,
- 集成基干子系統,控制子系統和各應用子系統形成整個系統,
(4)優點:具有三明治集成的優點,更適合于大型復雜專案的集成,
(5)缺點:
- 必須對系統的結構和相互依存性進行仔細的分析,
- 必須開發樁和驅動模塊,并且由于被測系統的復雜性導致這些模塊開發作業量的加大,可以通過復用技術在一定程度上降低成本,
- 由于區域采用了大爆炸的策略,所以有些介面可能測驗不完整,
(6)適用范圍:適合大型復雜的專案
- 具有多層協議的嵌入式系統,
- 作業系統產品
分層集成(Layers Integration)
(1)概念:分層模型在通訊系統中很常見,分層集成就是針對這個特點使用的一種集成,
(2)目的:通過增量式集成的方法驗證一個具有層次性體系結構的應用系統的穩定性和互操作性,
(3)策略:
- 劃分系統的層次,
- 確定每個層次內部的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略,一般對于頂層可能還有第二層的內部采用自頂向下的集成策略;對于中間采用自底向上的集成策略,對于底層主要采用進行單獨測驗,
- 確定層次間的集成策略,該策略可以使用大爆炸集成,自頂向下集成,自底向上集成和三明治集成中的任何一種策略,
(4)優缺點:因為每個層次間和層次內部采用的策略不同,所以優缺點也就是和它采用的測驗策略相對應,
(5)適用范圍:有明顯線性層次關系的產品系統,
基于功能的集成(Function-Based Integration)
(1)概念:在開發程序中,盡早的看到系統主要功能的實作,對于談對來說也是很有必要的,基于功能的集成是從功能角度出發,按照功能的關鍵程度對模塊的集成順序進行組織,
(2)目的:采用增值的方法,盡早的驗證系統關鍵功能,
(3)策略:
- 1.確定功能的優先級別,
- 2.分析優先級別最高的功能路徑,把該路徑上的所有模塊集成到一起,必要時使用樁模塊和單元模塊,
- 3.增加一個關鍵功能,繼續上面一個步驟,直到所有模塊都被集成到被測系統中,
(4)優點:
- 采用該方法,可以盡快的看到關鍵功能的實作,并驗證關鍵功能的正確性,
- 由于該方法在驗證某個功能的時候,可能會加入多個模塊,因此在進度上,比自頂向下和自底向上還有三明治的集成策略要快一點,
- 介面的覆寫使用的測驗用例比較少,
- 可以減少驅動模塊的開發
(5)缺點:
- 對于復雜的系統,功能之間的相互關聯性可能是錯綜復雜并難以分析的,
- 對有些介面的測驗不充分,會丟失許多介面錯誤,
- 一些初始的集成需要使用樁模塊,
- 可能會有比較大的冗余測驗,
(6)適用范圍:
- 關鍵功能具有較大風險的產品,
- 技術探索性的專案,其功能的實作遠比質量更關鍵,
- 對于功能的實作沒有把握的產品,
基于進度的集成(Schedule-Based Integration)
(1)概念:進度壓力在我們實際的作業中,每個軟體開發專案都會遇到,,
為了完成進度,有可能會犧牲質量,基于進度的集成就是在兼顧質量和進度兩者之間尋找了一個均衡點,
(2)目的:盡可能早的進行集成測驗,提高開發與集成的并行性,有效的縮短進度,
(3)策略:這個集成的策略就是把最早可獲得的代碼拿來激勵進行集成,必要的時候開發樁模塊和驅動模塊,子啊最大程度上保持與開發的并行性,從而縮短了專案集成的時間,
(4)優點:
- 具有比較高的并行度,
- 有效縮短專案開發的進度,
(5)缺點:
- 可能最早拿到的模塊之間缺乏整體性,只能進行獨立的集成,導致許多介面必須等到后期才能驗證,但此時系統可能已經很復雜,往往無法發現有效的介面問題,
- 樁模塊和驅動模塊的作業量可能會變得很龐大,
- 由于進度的原因,模塊可能很不穩定且會不斷變動,導致測驗的重復和浪費,
(6)適用范圍:進度優先級高于質量的專案,
集成測驗策略
集成測驗是一種正規測驗程序,必須精心計劃,并與單元測驗的完成時間協調起來,在制定測驗計劃時,應考慮如下因素:
1、是采用何種系統組裝方法來進行組裝測驗;
2、組裝測驗程序中連接各個模塊的順序;
3、模塊代碼編制和測驗進度是否與組裝測驗的順序一致
4、測驗程序中是否需要專門的硬體設備;
解決了上述問題之后,就可以列出各個模塊的編制、測驗計劃表,標明每個模塊單元測驗完成的日期、首次集成測驗的日期、集成測驗全部完成的日期、以及需要的測驗用例和所期望的測驗結果,
在缺少軟體測驗所需要的硬體設備時,應檢查該硬體的交付日期是否與集成測驗計劃一致,例如,若測驗需要數字化儀和繪圖儀,則相應測驗應安排在這些設備能夠投入使用之時,并需要為硬體的安裝和交付使用保留一段時間,以留下時間余量,此外,在測驗計劃中需要考慮測驗所需軟體(驅動模塊、樁模塊、測驗用例生成程式等)的準備情況,
單元測驗后,有必要進行集成測驗,發現并排除在模塊連接中可能發生的上述問題,最終構成要求的軟體子系統或系統,對子系統,集成測驗也叫部件測驗,
任何合理地組織集成測驗,即選擇什么方式把模塊組裝起來形成一個可運行的系統,直接影響到模塊測驗用例的形式、所用測驗工具的型別、模塊編號和測驗的次序、生成測驗用例和除錯的費用,通常,有兩種不同的組裝方式:一次性組裝方式和增值式組裝方式,
集成測驗完成標準
怎樣判定集成測驗程序完成了,可按以下幾個方面檢查:
1、成功地執行了測驗計劃中規定的所有集成測驗;
2、修正了所發現的錯誤;
3、測驗結果通過了專門小組的評審,
集成測驗應由專門的測驗小組來進行,測驗小組由有經驗的系統設計人員和程式員組成,整個測驗活動要在評審人員出席的情況下進行,
在完成預定的組裝測驗作業之后,測驗小組應負責對測驗結果進行整理、分析,形成測驗報告,測驗報告中要記錄實際的測驗結果、在測驗中發現的問題、解決這些問題的方法以及解決之后再次測驗的結果,此外還應提出不能解決、還需要管理人員和開發人員注意的一些問題,提供測驗評審和最終決策,以提出處理意見,
最后如果你想學習自動化測驗,歡迎加入筆者的交流群:735745871,里面會有很多資源和大佬答疑解惑,我們一起交流一起學習!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/557144.html
標籤:其他
上一篇:資料結構-鏈表帶哨兵
下一篇:返回列表