概述
軟體測試是伴隨著軟體的產生而產生的。早期的軟體開發過程中軟體規模都很小、複雜程度低,軟體開發的過程混亂無序、相當隨意,測試的含義比較狹窄,開發人員將測試等同於“調試”,目的是糾正軟體中已經知道的故障,常常由開發人員自己完成這部分的工作。對測試的投入極少,測試介入也晚,常常是等到形成代碼,產品已經基本完成時才進行測試。到了上世紀80年代初期,軟體和IT行業進入了大發展,軟體趨向大型化、高複雜度,軟體的質量越來越重要。這個時候,一些軟體測試的基礎理論和實用技術開始形成,並且人們開始為軟體開發設計了各種流程和管理方法,軟體開發的方式也逐漸由混亂無序的開發過程過渡到結構化的開發過程,以結構化分析與設計、結構化評審、結構化程式設計以及結構化測試為特徵。人們還將“質量”的概念融入其中,軟體測試定義發生了改變,測試不單純是一個發現錯誤的過程,而且將測試作為軟體質量保證(SQA)的主要職能,包含軟體質量評價的內容,Bill Hetzel在《軟體測試完全指南》(Complete Guide of Software Testing)一書中指出:“測試是以評價一個程式或者系統屬性為目標的任何一種活動。測試是對軟體質量的度量。”這個定義至今仍被引用。軟體開發人員和測試人員開始坐在一起探討軟體工程和測試問題。
軟體測試已有了行業標準(IEEE/ANSI ),1983年IEEE提出的軟體工程術語中給軟體測試下的定義是:“使用人工或自動的手段來運行或測定某個軟體系統的過程,其目的在於檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別”。這個定義明確指出:軟體測試的目的是為了檢驗軟體系統是否滿足需求。它再也不是一個一次性的,而且只是開發後期的活動,而是與整個開發流程融合成一體。軟體測試已成為一個專業,需要運用專門的方法和手段,需要專門人才和專家來承擔。
測試原則
對計算機軟體進行測試前,首先需遵循軟體測試原則,即不完全原則的遵守。不完全原則即為若測試不完全、測試過程中涉及免疫性原則的部分較多,可對軟體測試起到一定幫助。因軟體測試因此類因素具有一定程度的免疫性,測試人員能夠完成的測試內容與其免疫性成正比,若想使軟體測試更為流暢、測試效果更為有效,首先需遵循此類原則,將此類原則貫穿整個開發流程,不斷進行測試,而並非一次性全程測試。
測試方法
1、靜態測試方法
靜態測試方式指軟體代碼的靜態分析測驗,此類過程中套用數據較少,主要過程為通過軟體的靜態性測試 (即人工推斷或計算機輔助測試)測試程式中運算方式、算法的正確性,進而完成測試過程,此類測試的優點在於能夠消耗較短時間、較少資源完成對軟體、軟體代碼的測試,能夠較為明顯地發現此類代碼中出現的錯誤。靜態測試方法適用範圍較大,尤其適用於較大型的軟體測試。
2、動態測試
計算機動態測試的主要目的為檢測軟體運行中出現的問題,較靜態測試方式相比,其被稱為動態的原因即為其測試方式主要依賴程式的運用,主要為檢測軟體中動態行為是否缺失、軟體運行效果是否良好。其最為明顯的特徵即為進行動態測試時軟體為運轉狀態,只有如此才能於使用過程中發現軟體缺陷,進而對此類缺陷進行修復。目前動態測試過程中可包括兩類因素,即被測試軟體與測試中所需數據,兩類因素決定動態測試正確展開、有效展開。
3、黑盒測試
黑盒測試,顧名思義即為將軟體測試環境模擬為不可見的“黑盒”。通過數據輸入觀察數據輸出,檢查軟體內部功能是否正常。測試展開時,數據輸入軟體中,等待數據輸出。數據輸出時若與預計數據一致,則證明該軟體通過測試,若數據與預計數據有出入,即便出入較小亦證明軟體程式內部出現問題,需儘快解決。
4、白盒測試
白盒測試相對於黑盒測試而言具有一定透明性,原理為根據軟體內部套用、原始碼等對產品內部工作過程進行調試。測試過程中常將其與軟體內部結構協同展開分析,最大優點即為其能夠有效解決軟體內部應用程式出現的問題,測試過程中常將其與黑盒測試方式結合,當測試軟體功能較多時,白盒測試法亦可對此類情況展開有效調試。其中,判定測試作為白盒測試法中最為主要的測試程式結構之一,此類程式結構作為對程式邏輯結構的整體實現,對於程式測試而言具有較為重要的作用。此類測試方式針對程式中各類型的代碼進行覆蓋式檢測,覆蓋範圍較廣,適用於多類型程式。實際檢測中,白盒測試法常與黑盒檢測法並用,以動態檢測方式中測試出的未知錯誤為例,首先使用黑盒檢測法,若程式輸入數據與輸出數據相同,則證明內部數據未出現問題,應從代碼方面進行分析,若出現問題則使用白盒測試法,針對軟體內部結構進行分析,直至檢測出問題所在,及時加以修改。
測試策略
1、單元測試
單元測試即為將整個軟體分解為各個單元,隨後對單元進行測試。此類測試策略的優點在於所需分析數據較少,且針對性較強,程式開發者於開發過程中可通過操作經驗明確出現問題的大致區域,隨後針對此類問題對相關單元展開分析,進行問題排查。但需注意的是,某些程式中無具體單元驅動程式,即單個單元無法有效驅動,易出現問題,若針對此類軟體展開測試,需重點注意此類分解單元。
2、集成測試
集成測試與單元測試相反,原理為將部分需測試部分作為整體進行集成,隨後針對此類集成部分進行測試。測試要求為此類被測試集成題應具有一定的結構,且屬於非漸增方式集成。對於較大軟體而言,集成測試方式較單元測試方式而言較為繁瑣,目前多數大型軟體的測試皆採取漸增方式進行測試。漸增測試方式為集成測試方式的衍生,其能夠按照不同次序對軟體進行測試,日常測試中,常將兩類方式進行集成測試,隨後按照次序展開選擇。
發展現狀
目前現在軟體系統越來越複雜,一個軟體不能夠由單獨的軟體工程師單獨編寫,而是由團隊進行配合,每個 人可能只負責一個模組,對於全局沒有過多的了解,這時如果運行軟體就會容易產生很多的錯誤。在行業內將這些錯誤叫做BUG。並且每一個軟體工程師都會有思維的死角,自己不容易發現自己編寫出來的錯誤。所以這個時候就需要專門的軟體測試工程師用專業的測試方式來檢查軟體。檢查該軟體是否符合客戶要求的產品設計,是否能夠符合大多數用戶的使用習慣,如果發現異常狀態及時進行處理。目前軟體市場雖然遠遠沒有達到飽和但是各種各樣功能的軟體也層出不窮競爭激烈,對軟體開發的質量要求也是日益增高。
所以軟體測試是由於軟體開發編程行業高度成熟後所形成的產物。從行業的整體成熟度來講,軟體開發行業的整體成熟度更高,人們對軟體開發的理解也更為全面深入。故此通常將軟體測試和軟體開發放在一起做比較。縱然二者都屬於產品研發但通常人們的關注點有所傾斜。所以經常用軟體開發設計工程師的要求來評價軟體測試工程師,僅看到軟體測試和軟體開發相比的弱勢卻看不到優勢。
發展趨勢
從整體行業背景看,一方面,在中國的很多軟體企業存在著重開發、輕測試的現象,造成日後的軟體產品的質量問題頻出,亟待解決;另一方面市場上的軟體測試人員偏少,崗位缺口較大,不少企業以開發暫代測試,以作急用。目前軟體測試人才的缺口在30萬人以上。
從個人職業發展看,軟體測試人才更強調崗位的經驗積累。從業者在擁有幾年的測試經驗背景後,可以逐步轉向管理或者資深測試工程師,擔當測試經理或者部門主管,所以職業壽命更長。另外,由於國內軟體測試工程師人才奇缺,並且一般只有大中型企業才會單獨設立軟體測試部門,所以很有保障,待遇普遍較高。
綜合以上分析來看,軟體測試行業前景廣闊。