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

  • QTP自動化測試實踐
  • 51Testing軟件測試網組編
  • 11字
  • 2018-12-29 21:55:33

第1篇 自動化測試基礎篇

第1章 軟件測試基礎

軟件測試是軟件質量保證的重要手段,通過軟件測試發現軟件缺陷,從而修改缺陷,提高軟件的質量水平。本章介紹軟件測試的基本知識,包括軟件缺陷與軟件測試的關系,軟件質量與軟件測試的關系,以及軟件開發與軟件測試的關系。本章內容也是軟件自動化測試的基礎知識。

1.1 軟件缺陷與軟件測試

在軟件測試領域,至今為止,還沒有一種有效的缺陷檢測機制,可以完全發現所有的缺陷。因為軟件缺陷與硬件缺陷存在很多不同之處。

1.1.1 軟件缺陷與硬件缺陷的異同

軟件缺陷與硬件缺陷一樣,會對產品的使用方造成困擾。但是軟件缺陷在一般情況下,不會對用戶造成直接的人身傷害,所以很多人沒有意識到軟件缺陷的危害性和嚴重性。然而,在一些依賴軟件進行業務處理的領域,軟件缺陷可能造成重大的經濟損失,甚至危及人身安全,例如,2007年4月,某個軟件缺陷導致某地鐵系統的列車火災,軟件未能檢測和防止剩余動力在設備中的使用,導致列車過熱而起火。

美國標準和技術研究機構(National Institute of Standards and Technology)在2002年公布的一項關于軟件缺陷引起的經濟損失的報告中的數據表明:由于軟件缺陷造成的美國經濟損失高達595億美元。

因此,軟件缺陷與硬件缺陷一樣,可能會對用戶造成重大的損失,人們需要像對待硬件缺陷一樣重視軟件缺陷。很多硬件缺陷的出錯模式是可以預見的,而軟件缺陷的可預見性則沒有那么強。軟件缺陷的一個重要特點是它的隱蔽性,由于軟件的復雜度高、狀態空間廣闊,因此,要覆蓋軟件所有可能的行為幾乎是不可能的。

1.1.2 如何通過軟件測試發現軟件缺陷

為了解決軟件缺陷帶來的困擾,人們仍然在不斷地尋找有效發現軟件錯誤的方法,手工測試仍然是主要的查找錯誤的方式,自動化測試能部分地解決覆蓋面的問題和測試效率的問題,但是不能從根本上解決問題。

不能單單靠軟件測試來保證軟件不出錯,軟件測試僅僅是發現軟件缺陷的一種手段而已。在軟件測試人員的角色出現之前,是由開發人員來負責缺陷控制的,而開發人員往往停留在“調試”階段的測試水平,在代碼調試通過后,往往不會花太多專門的時間來發現缺陷。而且,開發人員一般不習慣于對自己的代碼進行批判性的檢查,很多時候,對自己編寫的代碼過于自信,因此,很多缺陷就留待用戶來發現了。

由于軟件測試是比較直接的發現軟件缺陷的手段,因此也就成為了軟件缺陷控制的主要手段。測試人員通過研究軟件產品的需求,以及用戶的實際業務場景,設計出各種測試用例,通過執行測試用例,判斷被測試的應用程序是否滿足用戶需求。

執行測試用例的過程可以是一個手動的過程,也可以是一個自動化的過程。如果把這些測試用例轉換成一個可被自動化測試工具執行的腳本,則成為一個自動化測試用例。

測試用例大體分為兩種類型:一種是用于驗證軟件的功能是正確的;另一種是用于證明軟件是錯誤的。兩種類型的測試用例都可以轉化成自動化測試腳本,使用自動化的方式執行。

1.2 軟件質量與軟件測試

軟件質量是軟件產品的核心價值體現,也是軟件企業競爭力的體現,重視軟件質量的企業通常能獲得更多的收益。軟件質量是軟件項目管理的重要組成部分,在不同的開發模式中,都會圍繞軟件質量管理提出相關的做法。

1.2.1 軟件質量管理在項目管理中的地位

軟件項目的成敗是由成本、進度、質量三者共同決定的,缺一不可。無論是哪一種軟件工程的模型,都必須充分考慮這3個方面,并且要考慮如何協調這3個方面,使其搭配達到最佳的平衡點。

(1)成本主要考慮項目的開銷,包括人員成本、工具成本、設備成本、錯誤成本等。所謂錯誤成本是指軟件生產過程中由于缺陷錯誤的產生導致的收回、返工等成本。某些軟件還需要考慮市場營銷成本等。

(2)進度主要考慮時間上的控制。如何在規定的時間范圍內,完成一個令顧客滿意的軟件產品,是每個項目的首要挑戰。

(3)質量主要考慮軟件對顧客需求的滿足程度。一個低質量的軟件,即使生產成本很低,進度控制良好,也不能讓顧客接受。因此,質量是軟件產品的生命線。

QTP自動化測試實踐

1.2.2 軟件開發模式與軟件測試

在不同的軟件開發模式中,軟件測試的地位和作用略有不同,例如,在傳統的瀑布開發模型中,軟件測試作為一個獨立的階段出現,在進入軟件測試階段之前,應該完成編碼,并且提供完善的需求、設計和開發文檔。

而在迭代模型中,則不會有一段獨立的測試時間和階段,測試必須跟隨開發的迭代而迭代。因此,回歸測試的重要性就不言而喻了。

而在敏捷開發模式中,軟件測試與軟件開發的界限變得模糊,由于敏捷開發所推崇的測試驅動,使得開發人員開始習慣于單元測試,在開發的過程中不斷測試,只有當測試完成后才能宣告開發結束,因此軟件測試與開發過程能很緊密地耦合在一起。

提示

不管是哪一種開發模式,軟件測試是不可能消失的,而且軟件測試作為保證軟件質量的重要手段,應該得到所有項目成員的重視和參與。

1.2.3 軟件開發模式與自動化測試

采用不同的項目開發模型對自動化測試有不同的影響。

(1)瀑布模型:瀑布模型在需求定義方面做得很好,這對自動化測試是有益的,包括可以盡早選擇合適的自動化測試策略,讓自動化測試可以高層次、整體地進行計劃。

(2)RUP:RUP強調的迭代開發讓自動化測試可以應用在開發周期的很大一部分時間中。但是,也意味著頻繁的變更,自動化測試需要與開發策略緊密結合,關注早期構建、迭代的速度、風險、覆蓋目標等。

(3)敏捷:敏捷方法打破了傳統的自動化測試方法。第一個破壞點集中在自動化的可接受性測試。這種測試所使用的工具超越了傳統的自動化測試工具的范圍,并且,很難被其他類型的自動化重用。細粒度的迭代讓每次自動化測試難以集中目標和定義標準。

1.2.4 軟件測試能保證軟件質量嗎

雖然軟件測試是目前為止發現缺陷的最有效手段,但是軟件測試能保證質量嗎?軟件測試可以在開發過程中發現大部分的軟件缺陷,但是,單靠軟件測試是不能保證軟件質量的,尤其是在軟件測試的時間沒辦法充分保證、測試資源無法有效提供的情況下,測試人員只能盡量在允許的時間范圍內發現盡可能多的問題。

除了軟件測試,還應該通過軟件配置管理、進度控制等項目管理手段來確保軟件研發的順利、有序開展,結合軟件需求控制、需求分析、設計評審、代碼審查等多種形式來保證軟件質量。

1.3 軟件開發與軟件測試

軟件開發是軟件測試的基礎,而軟件測試則是軟件開發的質量保證手段,軟件開發人員是軟件質量的最終創造者,軟件測試人員應該成為軟件開發人員的最好幫手。

1.3.1 軟件開發與軟件測試的對立統一

軟件開發與軟件測試是一個對立面,因為軟件開發是一種創造性的活動,而軟件測試則是一種破壞性的活動。軟件開發人員在努力地實現各種軟件功能,而測試人員則在努力地尋找里面的缺陷。

軟件的質量不能靠開發人員來保證,因為出于“保護”心理,開發人員不忍心對自己辛苦創造出來的產品進行批判;軟件的質量也不能靠測試人員來保證,因為測試人員不能確保發現所有缺陷,并且即使發現了缺陷,最終還是要靠開發人員來修正。

軟件的質量應該由開發人員和測試人員來一起保證,軟件開發人員應該尋求測試人員的幫助,利用測試人員的“批判性”、“破壞性”思維,以及對缺陷的“敏感度”來幫助自己發現程序的錯誤,從而修正錯誤,提高產品質量。

而測試人員則應該把自己的工作當成是一種服務,努力發現關于軟件質量的方方面面的信息,把這些信息準確、客觀、公正地提供給項目組中的所有人。

1.3.2 測試人員需要的開發技術

對于測試人員而言,編程技能未必是必不可缺的技能,但是如果能掌握基本的編程技巧,則會對測試有很大的幫助。大部分的自動化測試工具,需要測試人員具備一定的編碼能力和語言知識。對于黑盒測試、手工測試者而言,具備一定的編程能力也會有好處。至少,在與開發人員溝通一個Bug的時候,能理解開發人員的話,開發人員也會感覺測試人員是明白和理解其代碼的人,而不會被認為是生硬的、不可理喻的、專門挑刺的人。

測試人員的編程技巧與開發人員的編程技巧,所需要的范圍和方面是不一樣的。開發人員要更專業一些,他們需要懂得處理很多專門的軟件開發和設計上的問題,需要深入了解很多語言的特性,如組件編程、面向對象、可重用性、可擴展性、設計模式、高效率、性能等等。而測試人員則更偏向于快速地應用編程知識解決測試方面的問題,不需要追求精致的語言應用,不需要追求完美的可重用性,甚至有些時候不追求性能和效率。但是,需要快速地解決實際的問題。

主站蜘蛛池模板: 新兴县| 太谷县| 靖宇县| 安阳县| 广德县| 邵东县| 措勤县| 应用必备| 三明市| 长寿区| 清涧县| 福海县| 喀什市| 新营市| 承德县| 井陉县| 长宁区| 斗六市| 虞城县| 青田县| 梧州市| 扎赉特旗| 东乌珠穆沁旗| 孟津县| 抚宁县| 乌审旗| 汉阴县| 临邑县| 城市| 南乐县| 邢台市| 砀山县| 泰安市| 石泉县| 陵水| 秦安县| 定兴县| 大余县| 双牌县| 金川县| 拉萨市|