- 軟件測試的藝術(shù)(原書第3版)
- (美)Glenford J.Myers Tom Badgett Corey Sandler
- 2447字
- 2021-01-14 16:50:39
第1章 一次自評價(jià)測試
自本書30年前首次出版以來,軟件測試變得比以前容易得多,也困難得多。
軟件測試何以變得更困難?原因在于大量的編程語言、操作系統(tǒng)以及硬件平臺的涌現(xiàn)。在20世紀(jì)70年代只有相當(dāng)少的人使用計(jì)算機(jī),而在今天幾乎人人離不開計(jì)算機(jī)。而今天計(jì)算機(jī)不僅僅是指擺在你書桌上的計(jì)算機(jī)了,幾乎所有我們所接觸和使用的電子設(shè)備都內(nèi)置了一個(gè)“計(jì)算機(jī)”或者計(jì)算芯片,以及運(yùn)行在其上的軟件系統(tǒng)。不妨回想一下在今天的社會(huì)中還在使用哪些不需要軟件驅(qū)動(dòng)的設(shè)備,沒錯(cuò),錘子和手推車是,但是這些工具也大量使用在由軟件控制和操作的車間中。軟件的普遍應(yīng)用提升了測試的意義。今天的設(shè)備已經(jīng)千百倍強(qiáng)于它們的“前輩”,今天的“計(jì)算機(jī)”這個(gè)概念也變得越來越廣泛和越來越難準(zhǔn)確地定義。數(shù)字電視、電話、游戲產(chǎn)品、汽車等都有一顆計(jì)算機(jī)的“心”以及運(yùn)行其中的軟件,以至于在某些情況下它們自己本身也能夠被看做是一臺特別的計(jì)算機(jī)。
因此,現(xiàn)在的軟件會(huì)潛在地影響到數(shù)以百萬計(jì)的人,使他們更高效地完成工作,反之也會(huì)給他們帶來數(shù)不清的麻煩,導(dǎo)致工作或事業(yè)的損失。這并不是說今天的軟件比本書第1版發(fā)行時(shí)更重要,但可以肯定地說,今天的計(jì)算機(jī)(以及驅(qū)動(dòng)它的軟件)無疑已影響到了更多的人、更多的行業(yè)。
就某些方面而言,軟件測試變得更容易了,因?yàn)榇罅康能浖筒僮飨到y(tǒng)比以往更加復(fù)雜,內(nèi)部提供了很多已充分測試過的例程供應(yīng)用程序集成,無須程序員從頭進(jìn)行設(shè)計(jì)。例如,圖形用戶界面(GUI)可以從開發(fā)語言的類庫中建立起來,同時(shí),由于它們是經(jīng)過充分調(diào)試和測試的預(yù)編程對象,將其作為自定義應(yīng)用程序的組成部分進(jìn)行測試的要求就減少了許多。
另外,盡管市場上的測試書籍越來越多,甚至有過剩之嫌,似乎依舊有很多開發(fā)人員對全面的測試并不那么歡迎。引入更優(yōu)秀的開發(fā)工具、使用已經(jīng)通過測試的GUI(圖形界面控件)控件、緊張的交付日期以及高度集成的便利開發(fā)環(huán)境會(huì)讓測試變得僅僅是讓那些最基本的測試用例走走過場罷了。影響不大的bug也許只不過會(huì)讓最終用戶覺得使用不方便而已,然而嚴(yán)重的bug則可能造成經(jīng)濟(jì)損失甚至是人身傷害。本書所闡述的方法旨在幫助設(shè)計(jì)人員、開發(fā)工程師以及項(xiàng)目經(jīng)理更好地理解全面綜合測試的意義所在,并提供行之有效的指南以幫助達(dá)成測試的目標(biāo)。
所謂軟件測試,就是一個(gè)過程或一系列過程,用來確認(rèn)計(jì)算機(jī)代碼完成了其應(yīng)該完成的功能,不執(zhí)行其不該有的操作。軟件應(yīng)當(dāng)是可預(yù)測且穩(wěn)定的,不會(huì)給用戶帶來意外驚奇。在本書中,我們將討論多種方法來達(dá)到這個(gè)目標(biāo)。
好了,在開始閱讀本書之前,我們想讓讀者做一個(gè)小測驗(yàn)。我們要求設(shè)計(jì)一組測試用例(特定的數(shù)據(jù)集合),適當(dāng)?shù)販y試一個(gè)相當(dāng)簡單的程序。為此要為該程序建立一組測試數(shù)據(jù),程序須對數(shù)據(jù)進(jìn)行正確處理以證明自身的成功。下面是對該程序的描述:
這個(gè)程序從一個(gè)輸入對話框中讀取三個(gè)整數(shù)值,這三個(gè)整數(shù)值代表了三角形三條邊的長度。程序顯示提示信息,指出該三角形是何種三角形:不規(guī)則三角形、等腰三角形還是等邊三角形。
注意,所謂不規(guī)則三角形是指三角形中任意兩條邊不相等,等腰三角形是指有兩條邊相等,而等邊三角形則是指三條邊相等。另外,等腰三角形等邊的對角也相等(即任意三角形等邊的對角也相等),等邊三角形的所有內(nèi)角都相等。
用你的測試用例集回答下列問題,借以對其進(jìn)行評價(jià)。對每個(gè)回答“是”的答案,可以得1分:
1.是否有這樣的測試用例,代表了一個(gè)有效的不規(guī)則三角形?(注意,如1、2、3和2、5、10這樣的測試用例并不能確?!笆恰钡拇鸢?,因?yàn)榫邆溥@樣邊長的三角形不存在。)
2.是否有這樣的測試用例,代表一個(gè)有效的等邊三角形?
3.是否有這樣的測試用例,代表一個(gè)有效的等腰三角形?(注意,如2、2、4的測試用例無效,因?yàn)檫@不是一個(gè)有效的三角形。)
4.是否至少有三個(gè)這樣的測試用例,代表有效的等腰三角形,從而可以測試到兩等邊的所有三種可能情況(如3、3、4;3、4、3;4、3、3)?
5.是否有這樣的測試用例,某邊的長度等于0?
6.是否有這樣的測試用例,某邊的長度為負(fù)數(shù)?
7.是否有這樣的測試用例,三個(gè)整數(shù)皆大于0,其中兩個(gè)整數(shù)之和等于第三個(gè)?(也就是說,如果程序判斷1、2、3表示一個(gè)不規(guī)則三角形,它可能就包含一個(gè)缺陷。)
8.是否至少有三個(gè)第7類的測試用例,列舉了一邊等于另外兩邊之和的全部可能情況(如1、2、3;1、3、2;3、1、2)?
9.是否有這樣的測試用例,三個(gè)整數(shù)皆大于0,其中兩個(gè)整數(shù)之和小于第三個(gè)整數(shù)(如1、2、4;12、15、30)?
10.是否至少有三個(gè)第9類的測試用例,列舉了一邊大于另外兩邊之和的全部可能情況(如1、2、4;1、4、2;4、1、2)?
11.是否有這樣的測試用例,三邊長度皆為0(0,0,0)?
12.是否至少有一個(gè)這樣的測試用例,輸入的邊長為非整數(shù)值(如2.5、3.5、5.5)?
13.是否至少有一個(gè)這樣的測試用例,輸入的邊長個(gè)數(shù)不對(如僅輸入了兩個(gè)而不是三個(gè)整數(shù))?
14.對于每一個(gè)測試用例,除了定義輸入值之外,是否定義了程序針對該輸入值的預(yù)期輸出值?
當(dāng)然,測試用例集即使?jié)M足了上述條件,也不能確保能查找出所有可能的錯(cuò)誤。但是,由于問題1至問題13代表了該程序不同版本中已經(jīng)實(shí)際出現(xiàn)的錯(cuò)誤,對該程序進(jìn)行的充分測試至少應(yīng)該能夠暴露這些錯(cuò)誤。
開始關(guān)注自己的得分之前,請考慮以下情況:以我們的經(jīng)驗(yàn)來看,高水平的專業(yè)程序員平均得分僅7.8(滿分14)。如果讀者的得分更高,那么祝賀你。如果沒有那么高,我們將盡力幫助你。
這個(gè)測驗(yàn)說明,即使測試這樣一個(gè)小的程序,也不是件容易的事。因此,想象一下測試一個(gè)十萬行代碼的空中交通管制系統(tǒng)、一個(gè)編譯器,甚至一個(gè)普通的工資管理程序的難度。隨著面向?qū)ο缶幊陶Z言(如Java、C++)的出現(xiàn),測試也變得更加困難。舉例來說,為測試這些語言開發(fā)出來的應(yīng)用程序,測試用例必須要找出與對象實(shí)例或內(nèi)存管理有關(guān)的錯(cuò)誤。
從上面這個(gè)例子來看,完全地測試一個(gè)復(fù)雜的、實(shí)際運(yùn)行的程序似乎是不太可能的。情況并非如此!盡管充分測試的難度令人望而生畏,但這是軟件開發(fā)中一項(xiàng)非常必需的任務(wù),也是可以實(shí)現(xiàn)的一部分工作,通過本書我們可以認(rèn)識到這一點(diǎn)。
- PHP 7底層設(shè)計(jì)與源碼實(shí)現(xiàn)
- 編寫整潔的Python代碼(第2版)
- 數(shù)據(jù)結(jié)構(gòu)習(xí)題精解(C語言實(shí)現(xiàn)+微課視頻)
- DevOps Automation Cookbook
- C語言程序設(shè)計(jì)
- SQL語言從入門到精通
- Java游戲服務(wù)器架構(gòu)實(shí)戰(zhàn)
- 精通網(wǎng)絡(luò)視頻核心開發(fā)技術(shù)
- Mastering Ext JS
- Python面向?qū)ο缶幊蹋簶?gòu)建游戲和GUI
- Windows內(nèi)核編程
- PHP+MySQL+Dreamweaver動(dòng)態(tài)網(wǎng)站開發(fā)從入門到精通(第3版)
- QGIS 2 Cookbook
- Java程序設(shè)計(jì)與項(xiàng)目案例教程
- 愛上C語言:C KISS