官术网_书友最值得收藏!

1.3 軟件測試概述

在信息技術飛速發(fā)展的今天,各種各樣的軟件產(chǎn)品越來越多,各個行業(yè)的發(fā)展都已經(jīng)離不開軟件,為保證軟件產(chǎn)品的質量,軟件測試工作越來越重要。但是有很多讀者對于軟件測試的基礎知識還不是很了解,本節(jié)將針對軟件測試的概念、目的與分類進行詳細的講解。

1.3.1 軟件測試簡介

在早期的軟件開發(fā)中,軟件大多是結構簡單、功能有限的小規(guī)模軟件,那個時候的測試就等同于調試。隨著計算機軟件技術的發(fā)展,調試慢慢成為軟件開發(fā)不可或缺的工作內容,很多開發(fā)工具都集成了一些調試工具,但這個時候的調試還僅僅傾向于解決編譯、單個方法的問題。

到20世紀50年代左右,隨著軟件規(guī)模越來越大,人們逐漸意識到僅僅依靠調試還不夠,還需要驗證接口邏輯、功能模塊、不同功能模塊之間的耦合等,因此需要引入一個獨立的測試組織進行獨立的測試。在這個階段,人們往往將開發(fā)完成的軟件產(chǎn)品進行集中測試,由于還沒有形成測試方法論,對軟件測試也沒有明確定位與深入思考,測試主要是靠猜想和推斷,因此測試方法比較簡單,軟件交付后還是存在大量問題。

經(jīng)歷這一階段后,人們慢慢開始思考軟件測試的真正意義。1973年,黑澤爾(Hetzel)博士第一次對軟件測試進行了定義:軟件測試是對程序或系統(tǒng)能否完成特定任務建立信心的過程。這個觀點在一段時間內比較盛行,但隨著軟件質量概念的提出,它又不太適用了。1983年,黑澤爾(Heztel)博士對其進行了修改:軟件測試是一項鑒定程序或系統(tǒng)的屬性或能力的活動,其目的在于保證軟件產(chǎn)品的質量。思想一旦爆發(fā),就會呈現(xiàn)出百家爭鳴的景象,這一時期,很多軟件工程師或博士都提出了自己對軟件測試的理解與定義。

G.J. 梅耶斯(G.J. Meyers)博士認為“軟件測試是為了尋找錯誤而執(zhí)行程序的過程”,相對于測試是為了證明程序中不存在錯誤,他的觀點是正確的。

1983年,IEEE在北卡羅納大學召開了首次關于軟件測試的技術會議,然后對軟件測試進行了如下定義:軟件測試是使用人工或自動手段運行或測定某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或是弄清楚預期結果與實際結果之間的差異。

IEEE定義的軟件測試非常明確地提出了測試是為了檢驗軟件是否滿足需求,它是一門需要經(jīng)過設計、開發(fā)和維護等完整階段的過程。

此后,軟件測試便進入了一個全新的時期,形成了各種測試方法、理論與技術,測試工具也開始廣泛使用,慢慢地形成了一個專門學科。

雖然軟件測試得到了長足的發(fā)展,但相比于軟件開發(fā),它的發(fā)展還是相對不足,測試工作幾乎全部是在軟件功能模塊完成或者整個軟件產(chǎn)品完成之后才開始進行,這樣發(fā)現(xiàn)軟件缺陷之后,開發(fā)人員再進行修改,會消耗大量的人力、物力成本。20世紀90年代后興起敏捷模型的軟件開發(fā)模式,促使人們對軟件測試重新進行了思考,更多的人傾向于軟件開發(fā)與軟件測試的融合,即不再是軟件完成之后再進行測試,而是從軟件需求分析階段,測試人員就參與其中,了解整個軟件的需求、設計等,測試人員甚至可以提前開發(fā)測試代碼,這也是我們在敏捷模型中所提到的“開發(fā)未動,測試先行”。軟件開發(fā)與測試融合,雖然兩者的界限變得模糊,但軟件開發(fā)與測試工作的效率都得到了極大的提高,這種工作模式至今依然盛行。

歸結起來,軟件測試的發(fā)展過程可使用圖1-8表示。

025-01

圖1-8 軟件測試發(fā)展過程

如今,隨著人工智能與大數(shù)據(jù)時代的到來,軟件測試更是受到越來越多的重視,但現(xiàn)在軟件測試工作還依然沿用20世紀的方法、理論與思想成果,并沒有突破性、革命性的進展。未來,隨著軟件開發(fā)模型與技術的發(fā)展,軟件測試的思想與方法勢必也會出現(xiàn)里程碑式的變化,這需要更多熱愛軟件測試的人員積極投入研究。

1.3.2 軟件測試的目的

軟件測試的目的大家都能隨口說出,如查找程序中的錯誤、保證軟件質量、檢驗軟件是否符合客戶需求等。這些都對,但它們只是籠統(tǒng)地對軟件測試目的進行了概括,比較片面。結合軟件開發(fā)、軟件測試與客戶需求可以將軟件測試的目的歸結為以下幾點。

(1)對于軟件開發(fā)來說,軟件測試通過找到的問題缺陷幫助開發(fā)人員找到開發(fā)過程中存在的問題,包括軟件開發(fā)的模式、工具、技術等方面存在的問題與不足,預防下次缺陷的產(chǎn)生。

(2)對于軟件測試來說,使用最少的人力、物力、時間等找到軟件中隱藏的缺陷,保證軟件的質量,也為以后軟件測試積累豐富的經(jīng)驗。

(3)對于客戶需求來說,軟件測試能夠檢驗軟件是否符合客戶需求,對軟件質量進行評估和度量,為客戶評審軟件提供有力的依據(jù)。

1.3.3 軟件測試的分類

目前,軟件測試已經(jīng)形成一個完整的、體系龐大的學科,不同的測試領域都有不同的測試方法、技術與名稱,有很多讀者可能也聽過類似的黑盒測試、白盒測試、冒煙測試、單元測試等,其實它們是按照不同的分類方法而產(chǎn)生的測試名稱。按照不同的分類標準,可以將軟件測試分為很多不同的種類。

1. 按照測試階段分類

按照測試階段可以將軟件測試分為單元測試、冒煙測試、集成測試、系統(tǒng)測試與驗收測試。這種分類方式與軟件開發(fā)過程相契合,是為了檢驗軟件開發(fā)各個階段是否符合要求。

(1)單元測試

單元測試是軟件開發(fā)的第一步測試,目的是為了驗證軟件單元是否符合軟件需求與設計。單元測試大多是開發(fā)人員進行的自測。

(2)冒煙測試

冒煙測試最初是從電路板測試得來的,當電路板做好以后,首先會加電測試,如果電路板沒有冒煙再進行其他測試,否則就必須重新設計后再次測試。后來這種測試理念被引入到軟件測試中。在軟件測試中,冒煙測試是指軟件構建版本建立后,對系統(tǒng)的基本功能進行簡單的測試,這種測試重點驗證的是程序的主要功能,而不會對具體功能進行深入測試。如果測試未通過,需要返回給開發(fā)人員進行修正;如果測試通過則再進行其他測試。因此,冒煙測試是對新構建版本軟件進行的最基本測試。

(3)集成測試

集成測試是冒煙測試之后進行的測試,它是將已經(jīng)測試過的軟件單元組合在一起測試它們之間的接口,用于驗證軟件是否滿足設計需求。

(4)系統(tǒng)測試

系統(tǒng)測試是將經(jīng)過測試的軟件在實際環(huán)境中運行,并與其他系統(tǒng)的成分(如數(shù)據(jù)庫、硬件和操作人員等)組合在一起進行的測試。

(5)驗收測試

驗收測試主要是對軟件產(chǎn)品說明進行驗證,逐行逐字地按照說明書的描述對軟件產(chǎn)品進行測試,確保其符合客戶的各項要求。

2. 按照測試技術分類

按照使用的測試技術可以將軟件測試分為黑盒測試與白盒測試。

(1)黑盒測試

黑盒測試就是把軟件(程序)當作一個有輸入與輸出的黑匣子,它把程序當作一個輸入域到輸出域的映射,只要輸入的數(shù)據(jù)能輸出預期的結果即可,不必關心程序內部是怎么樣實現(xiàn)的,如圖1-9所示。

027-01

圖1-9 黑盒測試

(2)白盒測試

白盒測試又叫透明盒測試,它是指測試人員了解軟件程序的邏輯結構、路徑與運行過程,在測試時,按照程序的執(zhí)行路徑得出結果。白盒測試就是把軟件(程序)當作一個透明的盒子,測試人員清楚地知道從輸入到輸出的每一步過程,如圖1-10所示。

027-02

圖1-10 白盒測試

相對于黑盒測試來說,白盒測試對測試人員的要求會更高一點,它要求測試人員具有一定的編程能力,而且要熟悉各種腳本語言。但是在軟件公司里,黑盒測試與白盒測試并不是界限分明的,在測試一款軟件時往往是黑盒測試與白盒測試相結合對軟件進行完整全面的測試。

3. 按照軟件質量特性分類

按照軟件質量特性可以將軟件測試分為功能測試與性能測試。

(1)功能測試

功能測試就是測試軟件的功能是否滿足客戶的需求,包括準確性、易用性、適合性、互操作性等。

(2)性能測試

性能測試就是測試軟件的性能是否滿足客戶的需求,性能測試包括負載測試、壓力測試、兼容性測試、可移植性測試和健壯性測試等。

4. 按照自動化程度分類

按照自動化程度可以將軟件測試分為手工測試與自動化測試。

(1)手工測試

手工測試是測試人員一條一條地執(zhí)行代碼完成測試工作。手工測試比較耗時費力,而且測試人員如果是在疲憊狀態(tài)下,則很難保證測試的效果。

(2)自動化測試

自動化測試是借助腳本、自動化測試工具等完成相應的測試工作,它也需要人工的參與,但是它可以將要執(zhí)行的測試代碼或流程寫成腳本,執(zhí)行腳本完成整個測試工作。

5. 按照測試類型分類

軟件測試類型有多種,包括界面類測試、功能測試、性能測試、安全性測試、文檔測試等,其中功能測試與性能測試前面已經(jīng)介紹,下面主要介紹其他幾種測試。

(1)界面類測試

界面類測試是驗證軟件界面是否符合客戶需求,包括界面布局是否美觀、按鈕是否齊全等。

(2)安全性測試

安全性測試是測試軟件在沒有授權的內部或外部用戶的攻擊或惡意破壞時如何進行處理,是否能保證軟件與數(shù)據(jù)的安全。

(3)文檔測試

文檔測試以需求分析、軟件設計、用戶手冊、安裝手冊為主,主要驗證文檔說明與實際軟件之間是否存在差異。

6. 其他分類

還有一些軟件測試無法具體歸到哪一類,但在測試行業(yè)中也會經(jīng)常進行這些測試,如α測試、β測試、回歸測試等,具體介紹如下。

(1)α測試

α測試是指對軟件最初版本進行測試。軟件最初版本一般不對外發(fā)布,在上線之前,由開發(fā)人員和測試人員或者用戶協(xié)助進行測試。測試人員記錄使用過程中出現(xiàn)的錯誤與問題,整個測試過程是可控的。

(2)β測試

β測試是指對上線之后的軟件版本進行測試,此時軟件已上線發(fā)布,但發(fā)布的版本中可能會存在較輕微的Bug,由用戶在使用過程中發(fā)現(xiàn)錯誤與問題并進行記錄,然后反饋給開發(fā)人員進行修復。

小提示:根據(jù)軟件開發(fā)版本周期劃分軟件測試

根據(jù)軟件開發(fā)版本周期進行劃分,可以將軟件測試分為預覽版本Preview測試、內部測試版本Alpha測試、公測版本Beta測試、候選版本Release測試。在這些測試完成之后產(chǎn)品就可以正式發(fā)布上線。

(3)回歸測試

當測試人員發(fā)現(xiàn)缺陷以后,會將缺陷提交給開發(fā)人員,開發(fā)人員對程序進行修改,修改之后,測試人員會對修改后的程序重新進行測試,確認原有的缺陷已經(jīng)消除并且沒有引入新的缺陷,這個重新測試的過程就叫作回歸測試。回歸測試是軟件測試工作中非常重要的一部分,軟件開發(fā)的各個階段都會進行多次回歸測試。

(4)隨機測試

隨機測試是沒有測試用例、檢查列表、腳本或指令的測試,它主要是根據(jù)測試人員的經(jīng)驗對軟件進行功能和性能抽查。隨機測試是根據(jù)測試用例說明書執(zhí)行測試用例的重要補充手段,是保證測試覆蓋完整性的有效方式和過程。

主站蜘蛛池模板: 囊谦县| 泌阳县| 额敏县| 西昌市| 永昌县| 永康市| 进贤县| 化州市| 筠连县| 雅江县| 凌云县| 烟台市| 资中县| 无极县| 普定县| 临沭县| 九台市| 滨海县| 三江| 香港| 乌兰浩特市| 湘潭市| 紫云| 蒙城县| 琼结县| 平湖市| 仪陇县| 稷山县| 方城县| 石林| 惠安县| 凌源市| 罗定市| 台东县| 衡阳县| 察雅县| 临漳县| 平凉市| 巴林右旗| 寻乌县| 双柏县|