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

第1篇 自動化測試基礎(chǔ)篇

第1章 軟件測試基礎(chǔ)

軟件測試是軟件質(zhì)量保證的重要手段,通過軟件測試發(fā)現(xiàn)軟件缺陷,從而修改缺陷,提高軟件的質(zhì)量水平。本章介紹軟件測試的基本知識,包括軟件缺陷與軟件測試的關(guān)系,軟件質(zhì)量與軟件測試的關(guān)系,以及軟件開發(fā)與軟件測試的關(guān)系。本章內(nèi)容也是軟件自動化測試的基礎(chǔ)知識。

1.1 軟件缺陷與軟件測試

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

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

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

美國標(biāo)準(zhǔn)和技術(shù)研究機構(gòu)(National Institute of Standards and Technology)在2002年公布的一項關(guān)于軟件缺陷引起的經(jīng)濟損失的報告中的數(shù)據(jù)表明:由于軟件缺陷造成的美國經(jīng)濟損失高達(dá)595億美元。

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

1.1.2 如何通過軟件測試發(fā)現(xiàn)軟件缺陷

為了解決軟件缺陷帶來的困擾,人們?nèi)匀辉诓粩嗟貙ふ矣行Оl(fā)現(xiàn)軟件錯誤的方法,手工測試仍然是主要的查找錯誤的方式,自動化測試能部分地解決覆蓋面的問題和測試效率的問題,但是不能從根本上解決問題。

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

由于軟件測試是比較直接的發(fā)現(xiàn)軟件缺陷的手段,因此也就成為了軟件缺陷控制的主要手段。測試人員通過研究軟件產(chǎn)品的需求,以及用戶的實際業(yè)務(wù)場景,設(shè)計出各種測試用例,通過執(zhí)行測試用例,判斷被測試的應(yīng)用程序是否滿足用戶需求。

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

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

1.2 軟件質(zhì)量與軟件測試

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

1.2.1 軟件質(zhì)量管理在項目管理中的地位

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

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

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

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

QTP自動化測試實踐

1.2.2 軟件開發(fā)模式與軟件測試

在不同的軟件開發(fā)模式中,軟件測試的地位和作用略有不同,例如,在傳統(tǒng)的瀑布開發(fā)模型中,軟件測試作為一個獨立的階段出現(xiàn),在進(jìn)入軟件測試階段之前,應(yīng)該完成編碼,并且提供完善的需求、設(shè)計和開發(fā)文檔。

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

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

提示

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

1.2.3 軟件開發(fā)模式與自動化測試

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

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

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

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

1.2.4 軟件測試能保證軟件質(zhì)量嗎

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

除了軟件測試,還應(yīng)該通過軟件配置管理、進(jìn)度控制等項目管理手段來確保軟件研發(fā)的順利、有序開展,結(jié)合軟件需求控制、需求分析、設(shè)計評審、代碼審查等多種形式來保證軟件質(zhì)量。

1.3 軟件開發(fā)與軟件測試

軟件開發(fā)是軟件測試的基礎(chǔ),而軟件測試則是軟件開發(fā)的質(zhì)量保證手段,軟件開發(fā)人員是軟件質(zhì)量的最終創(chuàng)造者,軟件測試人員應(yīng)該成為軟件開發(fā)人員的最好幫手。

1.3.1 軟件開發(fā)與軟件測試的對立統(tǒng)一

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

軟件的質(zhì)量不能靠開發(fā)人員來保證,因為出于“保護(hù)”心理,開發(fā)人員不忍心對自己辛苦創(chuàng)造出來的產(chǎn)品進(jìn)行批判;軟件的質(zhì)量也不能靠測試人員來保證,因為測試人員不能確保發(fā)現(xiàn)所有缺陷,并且即使發(fā)現(xiàn)了缺陷,最終還是要靠開發(fā)人員來修正。

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

而測試人員則應(yīng)該把自己的工作當(dāng)成是一種服務(wù),努力發(fā)現(xiàn)關(guān)于軟件質(zhì)量的方方面面的信息,把這些信息準(zhǔn)確、客觀、公正地提供給項目組中的所有人。

1.3.2 測試人員需要的開發(fā)技術(shù)

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

測試人員的編程技巧與開發(fā)人員的編程技巧,所需要的范圍和方面是不一樣的。開發(fā)人員要更專業(yè)一些,他們需要懂得處理很多專門的軟件開發(fā)和設(shè)計上的問題,需要深入了解很多語言的特性,如組件編程、面向?qū)ο蟆⒖芍赜眯浴⒖蓴U展性、設(shè)計模式、高效率、性能等等。而測試人員則更偏向于快速地應(yīng)用編程知識解決測試方面的問題,不需要追求精致的語言應(yīng)用,不需要追求完美的可重用性,甚至有些時候不追求性能和效率。但是,需要快速地解決實際的問題。

主站蜘蛛池模板: 通河县| 蒙阴县| 沙河市| 巴中市| 基隆市| 宜丰县| 农安县| 黄石市| 正安县| 富民县| 隆德县| 清河县| 苗栗县| 涿州市| 河曲县| 东莞市| 普安县| 深水埗区| 隆尧县| 农安县| 连江县| 赞皇县| 射洪县| 阳春市| 海宁市| 兴安盟| 定边县| 铁岭市| 固原市| 大理市| 札达县| 临湘市| 万全县| 苏尼特右旗| 伊川县| 沙田区| 阳信县| 香港 | 新晃| 龙岩市| 雷山县|