摘要:軟件測試是軟件工程中非常重要的一個環節,是保證軟件質量的重要手段。本文從軟件設計角度出發,提出如何在軟件設計中就考慮易測試性,使得軟件更易維護和修改,并針對軟件設計和測試的現狀和特點,提出提高軟件易測試性和易維護性的一些建議,以達到軟件復用的目的。
關鍵字:軟件設計 軟件測試 結合
從軟件的生存周期看,軟件測試往往是在軟件開發完成后對程序執行結果的測試。這樣做可以使被測對象明確,測試的可操作性相對較強。但是,測試的依據是需求說明書、設計文檔和使用說明書。如果設計有錯誤,測試的質量就難以保證了。即使測試后發現是設計的錯誤,此時修改的代價也非常大了。因此,較理想的做法是在軟件的開發過程中,從軟件工程設計的各個階段就做好測試的準備,將可測試性融入軟件設計中。
一、軟件測試方法和流程
軟件測試方法和技術根據不同角度的分類主要有以下幾種:從是否針對系統內;部結構和具體算法實現可分為白盒法測試和黑盒法測試兩類;從軟件工程開發周期角度可將測試過程分為單元測試、集成測試、確認測試和系統測試。另外,還有基于C/S系統的測試、基于實時系統的測試和面向對象系統的測試。
1、黑盒測試又稱功能測試、數據驅動測試或基于規格說明的測試,是在完全不考慮程序內部結構和內部特性的情況下檢查輸入與輸出之間關系是否符合要求。白盒測試又稱結構測試、邏輯驅動測試或基于程序的測試,是在已知程序內部結構的情況下設計測試用例的測試方法。顯然,白盒測試適合在單元測試中運用,而在獨立測試階段多采用黑盒測試方法。
2、單元測試是對軟件設計的最小單位——軟件模塊進行五個方面的測試,包括模塊接口測試、模塊局部數據結構測試、模塊邊界條件測試、模塊中所有獨立執行通路測試和模塊的各條錯誤處理通路測試。單元測試主要用白盒測試結合采用黑盒測試技術,它的基本原則是:“至少測試一次所有語句,測試所有執行盒邏輯路徑的組合,測試每個模塊的所有入口和出口。集成測試又稱組裝測試,是將軟件模塊集成在一起的過程。從集成方式上又分為非漸增式集成測試和漸增式集成測試。非漸增式測試是將所有軟件模塊統一集成后才進行整體測試。這種方法容易發生混亂,判定出錯原因和位置也很困難,一般不宜采用。漸增式集成測試先選擇一個基準測試模塊,然后逐漸將與該模塊相關的模塊逐個加入,一邊加入一邊測試直至所有軟件模塊加入為止。該方法對錯誤定位和糾正較容易,也是主要的集成測試的方法。系統測試是為了保證系統能在一定的硬件和軟件環境下正常運行。系統測試的測試類型主要有功能測試、恢復測試、安全性測試、強度測試和性能測試。
3、基于C/S系統的測試有三種不同的層次:(1)不考慮服務器和底層網絡,只對客戶端進行測試;(2)客戶端和關聯的服務器被一起測試,不明顯考慮網絡;(3)完整的C/S系統結構的測試。C/S常用的測試方法還有客戶端應用功能測試、服務器測試、數據庫測試、事務測試和網絡通信測試。基于實時系統的測試有任務測試、行為測試、任務間測試和系統測試。
4、面向對象的軟件分三個階段進行測試:測試單個對象類、面向對象集成測試和面向對象系統測試。測試單個對象是將封裝的類或者對象作為最小的可測試單元,一般采用白盒法將語句至少執行一遍。面向對象的集成測試也稱測試對象集群,主要采用三種集成策略:基于使用的測試、基于線程的測試和基于對象的交互測試。面向對象的系統測試與面向過程的系統測試類似,區別主要是測試用例來源于場景。
二、軟件測試和軟件設計相結合
目前,軟件的測試更多是在軟件設計之后。如果我們借鑒一下硬件的測試技術,即在繼承電路上增加額外的引腳,通過這些引腳能夠在測試時探測繼承電路的內部,提高了可控制性和可觀察性,我們就會發現軟件的測試設計應該是在軟件的設計和編碼中就考慮的問題。在不增加或者少增加軟件復雜度的基礎上,將測試設計融入設計和編碼中,將測試成熟的部分加以封裝構成一個個構件,對其出口標明其運行的要求環境,以確保它在新的環境中工作正常,這樣就可以大大節約開發和維護的費用。從構件測試的內容可分為構件內部實現細節的測試、構件接口的測試和構件組裝的測試;從測試者與構件的關系可分為構件開發者的測試(擁有構件的源代碼)、構件復用者和第三方的測試(沒有源代碼;從測試過程中采用的技術手段可分為基于變異測試的方法、基于構件狀態機的方法、對構件的回歸測試以及構件的易測試性設計等。
我們可以針對現在已經做的測試對軟件的開發設計加入測試標量,使得測試更加方便易行。針對軟件測試的多種方法和軟件自身的特點,在軟件設計和編碼階段就將其體現在設計和編碼中。在針對結構的測試中,至于設計結構就可以對其主要的運行結構路徑設定標量;在軟件的單元測試、集成測試、確認測試和系統測試前的設計過程中,對其實現的功能進行標準化;另外,針對基于C/S系統的測試、基于實時系統的測試和面向對象系統的測試,我們可以借助網絡制定一個標準協議。這相當于黑盒測試可以獲得規約卻不能得到設計或源代碼,對其輸入和輸出的依賴關系、調用順序、層次功能描述和并發順序進行規范,以及其他特別要求。
可以想象,在不久的將來,由于軟件開發與測試的有效結合,我們的構件復用將得到充分推廣。我們可以像升級和開發我們的硬件產品一樣避免錯誤的牽制。當然,這除了需要設計和測試技術的發展,還需要軟件行業制定一定的標準和規范,使得構件可以對其執行環境和使用模式進行有準備預測,通過對構件的調用觀察執行結構,判斷構件行為是否正確。當然,這也會產生問題:在測試使用過程中無法檢查執行過程中構件的內部狀態,使得在構件執行中的一些故障被隱藏。這對構件的復用和推廣提出了挑戰。
三、總結
現有的軟件測試技術需要不斷改進,加速將高效的軟件測試產品投入到軟件開發的過程中。軟件測試目前已有向軟件開發的前期發展的趨勢,具有與軟件開發和設計編碼階段向結合的特點。開發具有自測能力的基于構件的開發方法將給軟件測試注入新的生命。可以預見,以后軟件的易測試性將作為衡量軟件品質的一項重要指標。
參考文獻:
[1] 黃愛明,國內軟件測試現狀及對策研究[J],中國管理信息化,2007(02)
[2]李寧、李戰懷,基于黑盒測試的軟件測試策略研究與實踐[J],計算機應用研究,2009(03)