聶蕓
摘要:軟件測試是保證軟件質量,提高軟件可靠性的關鍵,文章介紹了軟件測試的必要性和目的,同時對幾種常用的軟件測試方法進行介紹,指出軟件測試的一般流程,并對今后的發展方向進行了展望。關鍵詞:軟件測試;質量;測試方法
隨著科技和時代的發展,軟件的規模和復雜度越來越大,從而對軟件質量提出更高的要求。為滿足用戶日趨復雜的需求,軟件開發趨向繁瑣化和復雜化,軟件投入使用的過程中出現漏洞和缺陷的數量也在不斷增加,所以,采用高效的軟件測試是軟件質量、可靠性和穩定性的重要保證。通過調查相關數據了解,目前,軟件測試的工作量在整個軟件開發工作總量中的比重達到了40%以上,對于測試的成本投入也達到軟件開發總額的50%。可以說軟件測試是軟件開發過程必不可少的環節,軟件測試的成功對軟件開發的成功具有決定性的意義。
軟件測試是一個破壞性、重復性的過程,其目的是以盡量少的時間和資源盡早的找出軟件中潛在的錯誤和缺陷。通過分析錯誤和缺陷產生的原因及分布特征,可以幫助項目管理人員發現軟件開發過程的不足,以便過程改進。同時,也有利于設計出高效的、有針對性的測試用例。
1 測試的主要方法
1.1 黑盒測試和白盒測試
依據是否了解程序代碼內部實現方式,測試方法可分為黑盒測試和白盒測試。黑盒測試是把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常工作,程序是否能正確接收輸入數據而產生正確的輸出信息。主要針對軟件界面和軟件功能進行測試。在實際操作中,測試人員既需要測試正確的輸入信號,還需要測試不正確的輸入信號,以測試軟件對錯誤的處理能力。當輸入錯誤信號時,軟件系統應友好的提示用戶,而不能出現系統崩潰、用戶數據丟失等現象。
白盒測試是按照程序內部的結構測試程序,檢測程序內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。這一方法是把測試對象看作一個打開的盒子,測試人員依據程序內部邏輯結構相關信息,設計或選擇測試用例,對程序邏輯路徑進行測試,通過在不同點檢查程序的狀態,確定實際的狀態是否與預期的狀態一致。
1.2 錯誤驅動測試
通過性的功能測試僅能測試系統已實現的功能的正確性,而對系統容錯能力卻無法測試。在用戶實際使用的過程中,會有大量的不正確的輸入,此時系統能否對不正確的輸入進行容錯處理?基于經驗和直覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例進行測試就是錯誤驅動測試。
1.3 回歸測試
軟件測試是一個發現錯誤和改正錯誤不斷循環的過程。由于程序的復雜性,各個模塊及元素(變量、函數、類)之間存在著相互關聯性、耦合性,因此對于改正后的錯誤,需要測試驗證。一方面驗證錯誤是否已被修改,另一方面檢查對錯誤的修改是否影響其它模塊產生新的錯誤,這就需要將已執行過的測試用例重新執行,這就是回歸測試。
2 軟件測試的流程
2.1 單元測試
單元測試是軟件開發過程中對程序最小可測單元進行的測試活動。其目的在于根據詳細設計說明書,從程序的內部結構出發,檢查每個程序單元是否正確實現詳細設計說明書中的模塊功能、性能、接口和設計約束等要求。
單元測試是在程序單元的代碼編寫完成,確認沒有語法錯誤之后由程序員進行,根據詳細設計說明書和源程序清單,對該模塊的邏輯結構,程序內部分支路徑進行測試,來發現和修改代碼編寫過程中的錯誤。主要采用白盒測試和黑盒測試相結合的方式進行測試,使之對任何合理的和不合理的輸入,都能鑒別和響應。單元測試的主要內容包括接口測試、功能測試、局部數據結構、覆蓋條件、執行路徑測試、出錯處理、邊界測試等。
2.2 集成測試
集成測試在單元測試的基礎上,將兩個或多個模塊按照概要設計說明書的要求有序的、遞增的組裝成子系統,對這個子系統進行測試。集成測試,著眼于測試當各個模塊連接起來的時候,穿越模塊接口的數據是否會丟失,一個模塊的功能是否會對另一個模塊的功能產生不利的影響,各個子功能組合起來,能否達到預期要求的父功能,全局數據結構是否有問題,單個模塊的誤差累積起來,是否會放大,從而達到不能接受的程度。集成測試多采用增量式組裝測試,增量式測試是一種可行性比較高的方法。增量式測試又分為自底向上和自頂向下兩種測試方式。
自頂向下測試從程序的頂點模塊開始,然后逐步組裝下一級的模塊進行測試。為了模擬被測試模塊的下一級模塊,需要構建啞模塊或樁子模塊。它從主控模塊開始,按照軟件的控制層次結構,以廣度優先或者深度優先的策略,把各個單元模塊組裝集成在一起。自頂向下測試的主要好處就是較早地驗證了主要控制點和判斷點,按深度優先可以首先實現和驗證一個完整的軟件功能,功能能夠較早獲得證實,帶來信心,只需一個驅動,減少驅動器開發的成本,支持故障隔離,它可以讓人們看見系統的早期版本并證明系統的正確性。主要缺點是需要樁子模塊,底層驗證被推遲,底層組件測試不充分。
自底向上測試策略從程序的最底層模塊開始。為了模擬上一層的模塊需要開發一定的驅動模塊。當對所有的低一層模塊測試完畢才對高一層模塊組合進行測試。自底向上測試方法的優點是測試數據的建立不存在困難,對底層組件行為較早驗證,工作最初可以并行集成,比自頂向下效率高,減少了樁的工作量,支持故障隔離。驅動模塊模擬所有的調用參數,如果關鍵模塊位于調用模塊的底部,則自底向上測試方法更優。自底向上測試的主要缺點是系統的早期版本直到最后模塊測試完畢才產生,驅動的開發工作量大,對高層模塊的驗證被推遲,設計上的錯誤不能被及時發現,因為不可在底層模塊設計之前進行測試。
當各單元被分別測試后,集成測試根據設計階段形成的功能分解樹,自頂向下或自底向上逐步用各個單元來替換樁和驅動程序。集成測試一般在完成了軟件的所有或大部分編碼,并且完成單元測試工作后,由各單元模塊開發人員一起完成。一般采用白盒測試與黑盒測試相結合的方法。
2.3 系統測試
系統測試是將軟件系統與計算機硬件、外設、其它系統軟件、數據和人員等其它系統元素結合在一起,依據需求規格說明書,發現軟件不符合需求規格說明書的地方。系統測試的測試用例是根據需求規格說明書來設計,并模擬用戶使用環境來執行。系統測試的內容極其廣泛,包括功能測試、容錯性測試、性能測試、壓力測試、協議測試、安全性測試、兼容性測試、穩定性測試等等。通常采用黑盒測試。
2.4 驗收測試
驗收測試是按照項目任務書或合同、供需雙方約定的驗收依據文檔進行的對整個系統的測試與評審,決定是否接收或拒收系統。驗收測試是為了向用戶證明軟件已經實現需求規格說明書所定義的功能和要求,軟件能正確的、安全的、按照預定要求的為用戶服務。測試重點主要是軟件是否實現用戶需求,而不是針對功能進行的測試。所以驗收測試不需要專業的測試技術,也可以是使用該產品的最終用戶來體驗該軟件是否能夠滿足使用要求,也可以由開發團隊和用戶方以外的第三方按照用戶需求規格說明書來跟蹤和測試軟件是否能實現需求。
3 軟件測試的展望
隨著國家信息化和軟件行業的發展,軟件系統的規模越來越大,國內外的軟件開發企業和軟件用戶越來越重視軟件質量,軟件企業已經建立了獨立的軟件測試和質量保證部門,并配置了專職的測試和質量保證人員,并且在軟件行業中已經出現了獨立的第三方軟件評測機構,軟件測試作為一個獨立的專業和行業正逐步走向成熟。在今后的軟件系統開發中,軟件測試工作將不再局限于單元測試、集成測試、系統測試和驗收測試,而會將測試工作進一步前移,對需求的精確性和完整性的測試技術,對系統設計的測試技術將成為新的研究熱點。