軟體測試目的和作用

2021-04-14 02:00:34 字數 3578 閱讀 4929

測試人員會告訴你他們的主要工作是發現

bug。但我們知道測試永遠不能發現所有的

bug,而且不可能去測試軟體質量。

許多領域內專家也極力主張軟體測試的目的主要是在於發現軟體錯誤,希望在軟體開發生命週期內盡可能早的發現盡可能多得

bug。這種認識源於我們沒有辦法對軟體進行完全測試,即對程式的正確性進行完全證明,但遺憾的是,我們至今還沒有使用的技術做到這一點。包括e.w.dijkstra指出「測試只能證明程式有錯, 不能保證程式無錯」。所以,人們認為能夠發現程式缺陷的測試是成功的測試,測試的根本目的就是為了發現盡可能多地缺陷。然而不幸的是,這種對軟體測試過分單一的闡述和解釋會帶來兩個原則性的問題。

首先,盡可能早的發現盡可能多的

bug,會使軟體測試成為乙個數字遊戲。大量的bug數量的統計會意味著軟體測試的工作做的特好?大量的bug數量並不一定意味著測試的結果是最重要的關鍵問題被越早被發現, 另乙個潛在的方面,簡單的盡可能早的發現盡可能多的bug將導致貌似bug統計數量的**,這是因為許多虛報或者重複的bug也被統計在內了。缺陷表現在許多方面。如果乙個測試這部花費時間對導致bug的原因作認真的調查研究,那就有可能導致對同乙個錯誤根源引起的若干個bug作若干個bug報告。不幸的是,許多測試人員(不一定是新手)經常堅信他們越早發現越多的bug可以改善軟體質量。請記住,我們並不能測試軟體質量! 其次

, 當測試工程師集中精力尋找更多的錯誤,他們往往跳過一些不容易發現錯誤的地方或者想當然認為一些地方沒有錯誤,從而使軟體測試覆蓋率降低。有證據表明,許多測試人員由於太過專注於發現重大或者重要的錯誤,往往忽略過一些極易發現錯誤的所謂簡單地方。比如,在測試邊界條件的時候,測試人員會簡單的在邊界條件有效值範圍內指定最小值、最大值和中間值來做測試,如果通過則認為沒有問題;但這樣則錯過了超出邊界條件的無效值的驗證。比如,最小值減一(min-1)和最大值加一(max+1),這恰恰是最容易出現錯誤的地方。

軟體測試工程師的角色應體現在質量度量,質量控制和缺陷預防等方面,遵循應用系統的質量標準,有效的計量和評估系統的功能,效能和其他屬性是否達到或滿足質量標準;確保軟體開發過程中,開發流程和處理過程以及職責定義符合軟體質量標準要求;通過開發過程中各個環節的正式檢查,程式**審查以及可測性的檢查等預防缺陷發生;作為客戶代表,建立客戶檔案,準備產品支援服務資料等。

從長遠考慮,測試人員需要很強的軟體測試技能和對軟體工程的深刻理解,要知道測試存在於軟體開發生命週期的每乙個階段。

測試工作應在軟體開發周期的每乙個階段都要展開。

軟體測試應貫穿於軟體定義與開發的整個期間。因此,需求分析、概要設計、詳細設計程式編碼等個階段所得到的文件,包括需求規格說明、概要設計規格說明、詳細設計規格說明以及源程式,都應當成為軟體測試的物件。

測試的目的主要有下列用途 :

1.1.1.1.

質量改進

to improve quality.

應用於關鍵應用中的計算機和軟體系統出現問題的後果是十分嚴重的。軟體錯誤將引起巨大的損失。比如軟體錯誤可以導致飛機失事,火箭失去控制,**交易中斷等。更糟糕的是,比如計算機

2023年問題,產生於家庭手工作坊式的計算機工具系統差一點導致現代社會中止在21世紀來臨的第一天。在嵌入式應用系統中, 軟體質量和可靠性更是生死攸關.

質量意味著產品符合設計的要求規範。正確性是軟體質量的最低要求,正確性是指軟體符合特定環境下可執行的要求。除錯是軟體測試中的乙個重要方法,是程式設計師定位和修復軟體錯誤的乙個過程。發現和修復錯誤是程式除錯的主要目的。

1.1.1.2.

驗證和確認

for verification & validation (v&v)

軟體質量是客觀的,能被精確地度量和比較。質量屬性包括功能性,可用性,安全性,可靠性和可測性等;而價值是主觀的,價值的判斷包括滿意度,足夠好,幸福感,喜好性,憎惡感等。

軟體測試的乙個重要目的是驗證和確認軟體質量。測試作為乙個度量尺度,是乙個驗證和確認軟體質量的過程。測試人員對產品質量的評測主要基於對測試結果的解釋,比如軟體是否在特定條件下能夠正常工作。軟體質量依賴於對軟體需求的正確分析和設計以及實現

, 測試有助於提高軟體的質量,但是提高軟體的質量不能依賴於測試。測試與質量的關係很象在考試中「檢查」與「成績」的關係。學習好的學生,在考試時通過認真檢查能減少因疏忽而造成的答題錯誤,從而「提高」 了考試成績(取得他本來就該得的好成績)。而學習差的學生,他原本就不會做題目,無論檢查多麼細心,也不能提高成績。可見,軟體的高質量是設計出來的,而不是靠測試修補出來的。所以,我們不能直接對質量進行測試,但我們可以通過測試質量相關的因素對軟體質量進行度量。

質量因素表現在三個典型方面:功能性

,工程性和適應性。這三個方面的因素可視為軟體質量的三維空間。

verification and validation

功能性(外在質量)functionality (exterior quality)

正確性,可靠性,可用性,完整性

工程性(內在質量)engineering (interior quality)

有效性,可測性,文件化

適應性(未來質量)adaptability (future quality)

可擴充套件性,可重用性,可維護性

良好的測試會對所有質量相關的因素做度量。而對於軟體質量維度,則其特殊因素的重要程度因應用不同而不同。對人們生活息息相關的應用系統尤其強調可靠性和完整性,而可用性和可維護性則是典型商務應用系統的兩個關鍵因素,乙個適時的科學計算程式則更強調正確性和可靠性。我們的測試,要充分發揮作用,就必須面向衡量各相關因素,使質量度量成為有形的可見的。

以有效性和正確性驗證為目的的軟體測試稱之為正面測試。即驗證軟體是工作的。這種測試缺點在於它只能驗證軟體在特定用例情況下能正常工作。有限次數的測試不能確認軟體能在各種條件下都能正常工作,反之,如果有乙個測試失敗,則足以確認該軟體是不能正常工作。負面測試,指按規範注入錯誤,旨在破壞軟體的正常工作,以檢驗軟體處理錯誤的能力。即驗證軟體是不工作的。乙個好的軟體,必須有足夠的例外處理能力去接受破壞性測試的考驗。

好的可測的軟體設計是能夠容易被驗證,更新和維護的設計。由於測試是一項嚴格的工作,需要花費大量的時間和費用,

可測性設計,也是軟體開發設計規範乙個重要的因素。

1.1.1.3.

可靠性評估

for reliability estimation

軟體可靠性有著重要的關係,表現在軟體的許多方面,主要包括軟體結構以及受制於它的大量測試。基於軟體使用操作描述,可以通過對各種相關輸入使用頻率進行估計,作為統計抽樣的方法得到軟體使用可靠性量化的評估。

軟體測試遠遠沒有成熟,它仍然是一門藝術,而不能使它成為一門成熟的學科。雖然軟體測試及其技術在近些年有了飛速發展,但仍然沒有本質上的改善和提高,我們仍然使用與10年

20年前相同的技術和方法,其中有些仍屬於炮製性或啟發式的方法而非良好的工程方法。軟體測試的花費的代價可能很昂貴,但沒有經過測試的軟體在投入使用後將會帶來更大更昂貴的代價付出。

解決軟體測試的問題並不比解決圖林的停止問題

turing halting problem

更容易。我們甚至不能完全確認即使很小的軟體是正確的,也不能完全確認軟體規格描述是正確的。使用沒有經過認證的系統來驗證某一程式或系統的正確性,我們當然不能確信這一系統或程式的正確性。

軟體測試的目的

軟體測試的目的是以最少的人力 物力和時間找出軟體中潛在的各種錯誤和缺陷,通過修正各種錯誤和缺陷提高軟體質量,迴避軟體發布後由於潛在的軟體缺陷和錯誤造成的隱患所帶來的商業風險,一句話就是規避風險。乙個好的測試用例在於發現從前未發現的錯誤 乙個成功的測試是發現了從前未發現的錯誤的測試。所以更為合適的定義...

軟體測試的目的

軟體 測試的目的決定了如何去組織 測試。如果測試的目的是為了盡可能多地找出錯誤,那麼測試就應該直接針對軟體比較複雜的部分或是以前出錯比較多的位置。如果測試目的是為了給終端使用者提供具有一定可信度的質量評價,那麼測試就應該直接針對在實際應用中會經常用到的商業假設。不同的機構會有不同的測試目的 相同的機...

軟體測試的目的

測試的目的是什麼呢?這是乙個看起來很簡單 不太值得討論的問題,但往往這樣的問題其實是很難回答的,比如人生的意義是什麼?好,現在我們就來,列舉一下我們經常聽到的對這個問題的回答 軟體測試的目的是盡可能發現並改正被測試軟體中的錯誤,提高軟體的可靠性。這個定義聽起來很正確,但用它來指導測試會帶來很多問題。...