摘要:分析了基于框架的軟件產(chǎn)品線測試方法、當(dāng)前的狀況以及相關(guān)的自動化測試工具,為確保軟件產(chǎn)品線的可靠性以及促使軟件生產(chǎn)在時間、成本和質(zhì)量方面獲得顯著的改善提供了有力支持。
關(guān)鍵詞:軟件產(chǎn)品線測試;面向?qū)ο蟮能浖y試;V模型;自動化工具支持
引言
軟件產(chǎn)品線是一套軟件密集型系統(tǒng),它擁有一組能滿足特定需求的公共的、可管理的特性,并且是按預(yù)定義的方式由一組公共的核心資產(chǎn)開發(fā)而來。軟件產(chǎn)品線可以提供重用軟件資產(chǎn),生產(chǎn)和開發(fā)一組類似系統(tǒng)的方法,使用這種方法可以有效地降低成本、縮短產(chǎn)品面世時間、提高軟件質(zhì)量。它是軟件產(chǎn)業(yè)向大規(guī)模定制模式發(fā)展的一個重要途徑和方法。
面向?qū)ο蟮膽?yīng)用框架是一種軟件半成品,是軟件產(chǎn)品線的主干(backbone)。框架具有很強的領(lǐng)域特性,是對問題領(lǐng)域共性的抽取(領(lǐng)域分析),它用一種抽象可擴展的方式描述產(chǎn)品線中所有產(chǎn)品的共性特征?;诳蚣艿拈_發(fā)方法把軟件復(fù)用提高到了設(shè)計層次,提高了軟件生產(chǎn)率。
在軟件開發(fā)過程中,測試是一項持續(xù)性活動,同時也是一項勞動密集型活動。傳統(tǒng)的面向?qū)ο蟮臏y試方法是產(chǎn)品線測試的基礎(chǔ),因為軟件產(chǎn)品線,尤其是框架通常是用面向?qū)ο蠹夹g(shù)來進行設(shè)計和實施的。為了確??蚣艿目煽啃?,在應(yīng)用它之前必須進行仔細(xì)的檢測。實踐中,通常是通過測試應(yīng)用程序來測試框架,因而難以區(qū)分框架和應(yīng)用程序的編碼錯誤。同時,當(dāng)前測試框架和產(chǎn)品線的方法還非常不成熟,因此對成熟測試方法的需求十分迫切,測試過程也應(yīng)獲得測試工具更多的支持。
1 面向?qū)ο蟮能浖到y(tǒng)測試
1.1面向?qū)ο笙到y(tǒng)的測試方法與過程
為了保證軟件的質(zhì)量和可靠性,應(yīng)力求在分析、設(shè)計等各個開發(fā)階段,對軟件進行嚴(yán)格技術(shù)評審。近年來,測試的作用在很多組織中得以擴展,進而為軟件可靠性的評估提供技術(shù)支持。
面向?qū)ο蠹夹g(shù)產(chǎn)生更好的系統(tǒng)結(jié)構(gòu),更規(guī)范的編程風(fēng)格,極大地優(yōu)化了數(shù)據(jù)使用的安全性,提高了程序代碼的使用率,然而正是因為面向?qū)ο蠹夹g(shù)開發(fā)的軟件代碼重用率高,這就需要更嚴(yán)格的測試,避免錯誤的繁衍。
測試要求有一個詳細(xì)規(guī)劃,并有一個明確定義的過程。例如,面向?qū)ο蟮能浖到y(tǒng)可以根據(jù)圖1所示的v模型進行測試。V模型描述了一些不同的測試級別,以及這些級別所對應(yīng)的生命周期中不同的階段。如模型圖中所示,左邊是開發(fā)過程各階段,與此相對應(yīng)的是右邊上升的部分,即測試過程的各個階段。V模型的價值就在于它非常明確地標(biāo)明了測試過程中存在的不同級別,并且清楚地描述了這些測試階段和開發(fā)過程期間各階段的對應(yīng)關(guān)系。
在V模型中,單元測試是基于代碼的測試,驗證可執(zhí)行程序代碼的各個部分是否已達(dá)到了預(yù)期的功能要求;集成測試驗證了兩個或多個單元之間的集成是否正確,并有針對性地對詳細(xì)設(shè)計中所定義的各單元之間的接口進行檢查;在所有單元測試和集成測試完成后,系統(tǒng)測試則以客戶環(huán)境模擬系統(tǒng)的運行,以驗證系統(tǒng)是否達(dá)到了概要設(shè)計中所定義的功能和性能;最后,當(dāng)技術(shù)部門完成了所有測試工作后,由業(yè)務(wù)專家或用戶進行驗收測試,以確保產(chǎn)品能真正符合用戶業(yè)務(wù)上的需要。
1.2測試自動化和工具支持
近幾年來,許多研究工作者通過使用自動化的測試工具對軟件的質(zhì)量進行保障研究。到現(xiàn)在為止自動化測試工具已經(jīng)足夠完善了,完全可以應(yīng)用自動化測試工具來大幅度地提高軟件測試的效率和質(zhì)量。在使用自動化的測試工具的時候應(yīng)盡早地開始測試工作,這樣可以使修改錯誤更加地容易和廉價,并且可以減少更正錯誤對軟件開發(fā)周期的影響。
自動化支持的一個關(guān)鍵因素是是否有用于所有測試交付物和工作產(chǎn)品的中心項目數(shù)據(jù)庫。這可以指的是測試管理系統(tǒng),包括用于對測試進行保存、描述、文檔化和跟蹤,并且對測試目標(biāo)和結(jié)果進行記錄、跟蹤、評審的輔助設(shè)施。好的工具可以使得這些信息很容易被項目組獲得,并且提供穩(wěn)定的工作流支持來簡化和跟蹤軟件開發(fā)過程。
根據(jù)V模型,面向?qū)ο鬁y試可以由從低到高的各類自動化測試工具實現(xiàn)不同層次的自動化,在低層產(chǎn)生測試驅(qū)動和樁模塊,在高層則提供整體的測試環(huán)境。圖2展示了在v模型的不同層次中,能夠使用的各種不同種類的測試工具。在模型的左邊,利用測試設(shè)計工具,可以在需求確立,概要設(shè)計以及詳細(xì)設(shè)計的不同階段設(shè)計用例,在代碼層,可以利用靜態(tài)分析工具產(chǎn)生單元測試用例。在模型的右邊,完成實際的測試,覆蓋工具用來評估單元測試覆蓋范圍,動態(tài)分析工具和調(diào)試工具在單元測試和集成測試中使用。在測試的頂層,用模擬器來完成系統(tǒng)測試和確認(rèn)測試。另外,在模型右邊的每一個層次,可以用執(zhí)行和比較工具來執(zhí)行測試和對比運行結(jié)果與預(yù)期的偏差。
除了商業(yè)化的工具外,測試自動化已經(jīng)引起了學(xué)術(shù)研究領(lǐng)域的廣泛關(guān)注。例如,JUnit作為開源面向?qū)ο筌浖y試工具對Java語言編寫的軟件提供了測試支持,包括從單元級的測試(JTest工具)到代碼覆蓋(JCoverage工具),再到性能監(jiān)視(JProfiler工具),JUnit對V模型的各層都提供了支撐。
2 軟件產(chǎn)品線測試方法
在軟件產(chǎn)品線測試時雖然可以使用傳統(tǒng)面向?qū)ο蟮臏y試方法,但仍強烈需要一個明確定義的產(chǎn)品線測試過程和方法,包括工具支持。這是因為當(dāng)一個產(chǎn)品線或多個產(chǎn)品線被測試時,一些具體問題就會暴露出來。例如規(guī)模問題,因為產(chǎn)品線中的所有應(yīng)用都需要測試,這就使得產(chǎn)品線的測試要比單獨的產(chǎn)品測試要復(fù)雜得多。產(chǎn)品線測試的關(guān)鍵在于重用測試用例和測試件(Testware,指測試工作形成的產(chǎn)品),而不是將產(chǎn)品線中的每個軟件作為一個單獨的產(chǎn)品來進行測試。
2.1軟件產(chǎn)品線測試
產(chǎn)品線測試關(guān)系到多個方面,包括回歸測試、非完整性項目測試和有效使用可重用的測試資產(chǎn)等等?;貧w測試是用來確認(rèn)前期可正常工作的組件在面臨某些修改時,是否還能正確運行。產(chǎn)品線中的成員在共享許多共性特征的基礎(chǔ)上又各自變化,因此回歸測試適合于產(chǎn)品線或重用情況。與單個系統(tǒng)開發(fā)項目不同,測試也是可以重用于大多數(shù)產(chǎn)品中的活動,它本身產(chǎn)生町重用的核心資產(chǎn)。建立可重用的測試資產(chǎn)能使產(chǎn)品線測試擁有較高的成本效益比。
產(chǎn)品線測試也需要詳細(xì)規(guī)劃并給出一個明確定義的過程,把測試集成到過程的每個階段,以生產(chǎn)出高質(zhì)量的產(chǎn)品。在產(chǎn)品線中組件被大量重用,有效的故障修復(fù)顯得尤其重要。領(lǐng)域工程中的缺陷使風(fēng)險演變?yōu)閱栴},因為可重用資產(chǎn)中的缺陷蔓延到重用它的每個產(chǎn)品中。然而在軟件產(chǎn)品線方法中,測試不能很好地區(qū)分領(lǐng)域工程和應(yīng)用工程任務(wù)。雖然根據(jù)V模型進行測試,但I(xiàn)SAPS、CAFE和SEI提出的框架還是不能完全將V模型測試的各個階段集成到軟件開發(fā)中去。在實踐中,將測試過程集成到整個產(chǎn)品線過程中被證明是最棘手的問題。
產(chǎn)品線測試的主要問題可以從兩個方面來進行論述。在領(lǐng)域工程中測試核心資產(chǎn)時,測試者試圖減少應(yīng)用測試,但卻很難保證軟件在不明確的用例情景下都正常運作;產(chǎn)品線中的成員在共享許多共性特征的基礎(chǔ)上又各自變化,測試者發(fā)現(xiàn)根據(jù)v模型進行集成和系統(tǒng)測試并不可行。而在應(yīng)用工程中,在核心資產(chǎn)和其它應(yīng)用測試的基礎(chǔ)上,測試者想使充分測試特定產(chǎn)品的費用最小化,但很難確定哪些已有測試結(jié)果是可以利用的,哪些產(chǎn)品測試是必須進行的。
2.2當(dāng)前產(chǎn)品線測試狀況
目前產(chǎn)品線測試的工作重心主要放在驗收和系統(tǒng)測試上。但由于產(chǎn)品線中大量重用組件,因此它們的低級別測試(例如,單元級)也應(yīng)該得到保證。換而言之,當(dāng)前的研究和實踐主要集中在高級別的產(chǎn)品線測試上。假設(shè)傳統(tǒng)的面向?qū)ο蟮臏y試方法可以不做任何修改就用于產(chǎn)品線測試過程,那么這一假設(shè)存在許多疑點。例如,目前尚不清楚將使用哪一種面向?qū)ο蟮臏y試方法以及如何將之用于產(chǎn)品線測試,更加不清楚是否還需要新的、具體的產(chǎn)品線測試方法。
與標(biāo)準(zhǔn)模型相關(guān)的軟件產(chǎn)品線測試的當(dāng)前工作重點如圖3所示。工作的重點放在需求說明和概要設(shè)計相對應(yīng)的驗收和系統(tǒng)測試上?,F(xiàn)有的產(chǎn)品線具體測試方法主要用于這些內(nèi)容。而集成和單元測試只受到很少的關(guān)注,并且基于這些階段的產(chǎn)品線具體測試方法目前基本上不存在。正因為如此,現(xiàn)有高級別的測試方法大多數(shù)情況下都沒被使用,產(chǎn)品線中的應(yīng)用仍然用傳統(tǒng)的測試方法測試,這就意味著沒有有效地使用可重用的測試資產(chǎn),而且整個測試過程被反復(fù)應(yīng)用于產(chǎn)品線中的每個應(yīng)用。
在基于框架的軟件產(chǎn)品線測試方法中,應(yīng)用框架是產(chǎn)品線的核心,在所有應(yīng)用從它產(chǎn)生之前就應(yīng)該得到很好的測試。但是以框架為基礎(chǔ)的產(chǎn)品線的實際測試中,往往沒有使用產(chǎn)品線的任何信息。例如,諾基亞的移動瀏覽器產(chǎn)品線是按照如下要求進行產(chǎn)品線測試的:“產(chǎn)品線測試的復(fù)雜性要遠(yuǎn)大于單個軟件產(chǎn)品的測試。必須測試在不同情景下的產(chǎn)品線。為了控制測試的復(fù)雜性,應(yīng)縮減單個產(chǎn)品的測試,取而代之的是對整個產(chǎn)品線的測試。這樣才能保證測試的簡化以及產(chǎn)品質(zhì)量”。
2.3軟件產(chǎn)品線自動化測試及相關(guān)工具支持
在軟件產(chǎn)品線測試方法中,工具支持比在傳統(tǒng)面向?qū)ο鬁y試中更加重要。這是因為包含數(shù)個相同體系結(jié)構(gòu)的產(chǎn)品線測試規(guī)模要大于單個產(chǎn)品測試。當(dāng)一個組織有幾個產(chǎn)品線時,規(guī)模的問題就更加突出。產(chǎn)品線的工具支持因使用可重用的測試資產(chǎn)可以減少費用,并且使復(fù)雜的測試過程更易于管理。圖2表明能夠應(yīng)用于V模型不同階段的不同類型的測試工具。在產(chǎn)品線的測試中,所有這些工具可以而且應(yīng)該使用。
現(xiàn)今有許多成熟的測試工具,但是產(chǎn)品線和框架測試缺乏有效的工具支持。通常這些工具也能夠應(yīng)用于產(chǎn)品線的測試,但它們只適用于像單元測試這樣低級別的測試。在產(chǎn)品線方面,需要詳細(xì)而精確的測試工具。測試工具應(yīng)有效地管理可重用的測試資產(chǎn)。工具支持應(yīng)從測試執(zhí)行和測試結(jié)果的分析擴展到集成產(chǎn)品線測試的整個過程。
目前赫爾辛基大學(xué)已經(jīng)開發(fā)出RITA工具。RITA是一個能覆蓋所有領(lǐng)域的測試支持工具。但是所有設(shè)計功能并沒有在RITA的第一版中完全實現(xiàn)。同時,RITA工具的焦點在于支持基于框架結(jié)構(gòu)的低水平的白盒測試。
3 結(jié)束語
軟件產(chǎn)品線受到越來越多的關(guān)注和研究,特別是在工業(yè)應(yīng)用領(lǐng)域。但是產(chǎn)品線的測試所受到的關(guān)注還是很少。產(chǎn)品線需要一個詳細(xì)規(guī)劃的測試過程,它要能夠比較容易地被不同的產(chǎn)品線應(yīng)用領(lǐng)域所采納和運用。然而,測試產(chǎn)品線是一項非常具有挑戰(zhàn)性的工作。因此迫切需要一些成熟的測試方法和工具。