究竟什麼是軟體測試

2021-06-05 05:57:48 字數 3018 閱讀 4374

「什麼是軟體測試」是乙個最基本的問題,但凡從事軟體測試的人都能回答這個問題,而且多數測試人員的答案不外乎是下面兩種敘述的一種:

軟體測試是為了發現程式或軟體系統中問題而進行的一系列活動。

軟體測試是為了驗證程式或軟體系統是否符合設計要求、是否符合滿足客戶的需求。

這並沒有錯,也就是軟體測試認識的正向思維和逆向思維的不同觀點的表現:

證明軟體是「不工作的」,以反向思維方式,不斷思考開發人員理解的誤區、不良的習慣、程式**的邊界、無效資料的輸入以及系統的弱點,試圖找出各種各樣的問題。畢竟開發人員力求構造軟體,所以開發人員的思維方式以正向為主,測試人員的工作可以看做開發工作的乙個補充,逆向思維更為重要,而且這樣的工作效率也更高。

驗證軟體是驗證軟體是「工作的」,以正向思維,針對軟體系統的所有功能點,逐個驗證其正確性。這是傳統工業的質檢工作在軟體業的自然延伸。

但僅僅這樣理解軟體測試還不夠,需要更全面的理解軟體測試,就可以更好地做好工作,也可以適應不同的軟體開發過程所帶來的挑戰,包括敏捷方法帶給軟體測試的極大挑戰。

將近30年前,在g.j.myers的經典著作《軟體測試之藝術》(the art of software testing)中,給出了測試的定義:「程式測試是為了發現錯誤而執行程式的過程」。那時對軟體測試的認識還非常具有侷限性,這也是受軟體開發瀑布模型的影響,認為軟體測試是程式設計之後的乙個階段。只有等待**開發出來之後,通過執行程式,像使用者那樣操作軟體發現問題,這就是「動態測試」。

如果在此時發現功能設計不合理或效能不好,就需要修改需求或修改設計,那就不得不返工到需求定義或系統設計階段,造成很大的代價。所以,有必要將軟體測試延伸到需求、設計階段,對需求、設計進行驗證,因為需求定義文件、設計的技術文件也都是產品的組成部分,即階段性的成果輸出,只要有輸出就需要驗證。通過需求評審、設計審查活動,可以更早地發現問題,及時地修正問題。這就是靜態測試,即對軟體開發過程中階段性產品進行互為評審、走讀或會議評審,發現其中的問題。通過靜態測試,可以更早地發現問題,把問題消滅在萌芽之中,將每個階段產生的缺陷及時清除。所以,通過需求評審、設計評審和**評審等,能夠提高產品的質量,並能大大降低企業的成本。

軟體測試是由「靜態測試」和「動態測試」構成,不僅僅對軟體的主題——程式進行檢驗,還有對階段性半產品也要進行檢驗,確保軟體開發過程中的輸出都能滿足要求。所以,軟體測試是貫穿整個軟體開發生命的質量保證活動,是軟體質量保證的重要手段之一。從本質上看,軟體測試還是事後檢驗,是對產品(包括階段性產品和最終產品)的檢驗,也就是說對產品質量的評估。通過對軟體產品的各個質量屬性(功能、效能、安全性、相容性、易用性等)進行檢查,從而了解軟體產品在這些方面滿足事先設定要求的程度。從這個意義上看,軟體測試是對軟體質量的全面評估,以決定軟體產品能否發布出去。而且,通過對軟體質量的全面評估,了解、確定開發人員容易犯的錯誤,為軟體開發過程的改進提供依據。貫穿整個軟體開發生命的軟體測試活動,就可以看作對軟體產品質量的持續評估。所以,在敏捷方法中,不僅提倡持續整合,而且提倡持續測試,就是持續的質量評估,如圖1所示。更重要的是,持續整合是為了持續測試、持續的質量評估。

軟體測試是持續的質量評估

同時,我們知道「不能窮舉測試」,即對複雜的或大規模的軟體系統,測試的覆蓋度不能做到100%,即使能夠百分之百地覆蓋**、分支和條件,也不能百分之百地覆蓋路徑組合、不能覆蓋各種輸入資料、各種使用條件和環境的組合等。所以,軟體測試總是存在風險的,軟體的風險還**於需求不明確、標準不夠充分。從風險角度看,軟體測試是找到最大的風險、主要的風險,從而消除這些風險。舉乙個例子,當你的經理給你安排乙個測試任務時,按照實際情況和高質量的要求,要完成這個任務需要兩周時間,現在你的經理只給你一周時間。這時,你當然可以爭取更多的測試時間,但是如果你的經理說,時間不能商量,只能給一周時間,而且也沒有更多的人可以給。這時,你也無需拒絕任務,也無需加班,而只是設法縮小測試範圍,按照測試優先順序來決定測試的工作,並將更大的風險告訴經理。也就是說,兩周的測試會消除更多的風險,包括非常小的風險,達到非常高的質量水準。而一周的測試會增加風險,但我們可以消除絕大部分的主要風險,只是承擔一些比較小的風險,也能達到較高的質量水準。在基於風險的測試概念下,首先,我們要評估測試的風險,功能出問題的概率有多大?哪些是使用者最常用的20%功能——pareto原則(也叫80/20原則)?如果某個功能出問題,其對使用者的影響有多大?然後根據風險大小確定測試的優先順序。優先順序高的測試,優先得到執行,一般來講,針對使用者最常用的20%功能(優先順序高)的測試會得到完全執行,而低優先順序的測試(另外使用者不經常用的80%功能)就不是必要的,如果時間或經費不夠,就暫時不做或少做。

「乙個好的測試用例是在於它能發現至今未發現的錯誤」,體現了軟體測試的經濟學觀點。實際上,軟體測試經濟學問題至今仍是業界關注的問題之一。經濟學的核心就是要盈利,盈利的基礎就是要有乙個清楚的商業性目標。同樣,商業性目標是否正確,直接決定了企業是否盈利的結果。多數情況下,軟體測試是在公司內的執行。正是公司的行為目的,決定了軟體測試含義或定義的經濟性一面。正如,對軟體質量的定義不僅僅局陷於「和客戶需求的一致性、適用性」,而且要增加其它的要求——「預算內、按時發布、易於維護」。軟體測試所花費的成本可以看作是保障性成本,而由於軟體缺陷引起的成本是劣質成本,從經濟觀點來看,當保障性成本小於或遠遠小於劣質成本,軟體測試的工作才有意義。所以,軟體測試也不可能無止境地進行下去,也是適可而止,即軟體測試的目標是「足夠的好(good enough)」,而不追求完美。這一點,在敏捷開發中、在網際網路軟體行業體現得更為充分。

從標準論來看軟體測試,可以定義為軟體測試就是「驗證(verification)」和「有效性確認(validation)」活動構成的整體,即軟體測試 = v&v。

「驗證」是檢驗軟體是否已正確地實現了產品規格書所定義的系統功能和特性。驗證過程提供證據表明軟體相關產品與所有生命週期活動的要求(如正確性、完整性、一致性、準確性等)相一致。相當於,以spec為標準進行軟體測試活動,驗證軟體產品和spec的一致性。

「有效性確認」是確認所開發的軟體是否滿足使用者真正需求的活動。相當於,保持對軟體需求定義、設計的懷疑,一切從客戶出發,理解客戶的需求,發現需求定義和產品設計中的問題。這主要通過各種軟體評審活動來實現。

究竟什麼是軟體測試呢?綜上所述,軟體測試是貫穿整個軟體開發生命週期、對軟體產品(包括階段性產品)進行驗證和確認的活動過程,是持續的質量評估過程,其目的是盡快盡早地發現在軟體產品中所存在的各種問題,盡最大可能消除軟體質量問題所帶來的風險,使企業獲得良好的競爭力和效益。

第2回 究竟什麼是軟體測試?

在 g.j.myers 的經典著作 軟體測試之藝術 the art of software testing 中,給出了測試的定義 程式測試是為了發現錯誤而執行程式的過程 這個定義,被業界所認可,經常被引用。除此之外,g.j.myers 測試是為了證明程式有錯,而不是證明程式無錯誤 乙個好的測試用例是...

什麼是軟體測試?

1983,ieee提出的軟體工程標準術語,定義為 使用人工和自動手段執行或測試某個系統的過程,其目的在於檢測它是否滿足規定的需求或是弄清楚預期結果與實際結果之間的差別。g.j.myers認為 測試時為了發現錯誤而執行程式的過程。好的測試方案是發現迄今為止尚未發現的錯誤的測試方案。成功的測試是發現了迄...

軟體測試 1 什麼是軟體測試?

軟體測試 qa 的定義無比簡單 所謂軟體測試,就是乙個或者一系列過程,確保軟體可以完成了該完成的功能,不執行不該有的操作。身為開發,恐怕沒有幾個人會樂於常常和測試打交道。原因很簡單,無非就是測試會站在乙個第三者的角度上將一些你寫的 中一些 他認為的 漏洞揪出來,而且像討債一樣催著你趕快fix。而很多...