2023-學(xué)習(xí)資料大全:《軟件測(cè)試的藝術(shù)》讀書(shū)筆記_第1頁(yè)
2023-學(xué)習(xí)資料大全:《軟件測(cè)試的藝術(shù)》讀書(shū)筆記_第2頁(yè)
2023-學(xué)習(xí)資料大全:《軟件測(cè)試的藝術(shù)》讀書(shū)筆記_第3頁(yè)
2023-學(xué)習(xí)資料大全:《軟件測(cè)試的藝術(shù)》讀書(shū)筆記_第4頁(yè)
2023-學(xué)習(xí)資料大全:《軟件測(cè)試的藝術(shù)》讀書(shū)筆記_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

知識(shí)改變命運(yùn)勤奮塑造成功整理人落葉時(shí)間2011-4-15天才是百分之九十九的勤奮加百分之一的靈感TheArtofSoftWareTesting?讀書(shū)筆記〔1〕_引子有關(guān)自己與軟件測(cè)試之間的淵源而言,得悉這個(gè)領(lǐng)域的時(shí)間不長(zhǎng),接觸的時(shí)間就更可謂短暫,但仔細(xì)想來(lái),還要從大學(xué)期間說(shuō)起比擬好。軟件測(cè)試這個(gè)概念第一次出現(xiàn)在我的眼前時(shí),是大四上學(xué)期開(kāi)的軟件工程這個(gè)科目中所涉及到的一點(diǎn)點(diǎn)。由于某些因素,使我在大學(xué)期間忽略了對(duì)測(cè)試領(lǐng)域相關(guān)知識(shí)的儲(chǔ)藏。第二次面對(duì)它時(shí),是考研復(fù)習(xí)準(zhǔn)備階段。那時(shí),我對(duì)測(cè)試這個(gè)領(lǐng)域也僅僅只是知道,就是中文書(shū)面表達(dá)的“測(cè)試〞這兩個(gè)漢字的含義而已。工作的前兩年里,或許是因?yàn)閺氖碌氖怯嘘P(guān)算法方面性質(zhì)的工作,所以并未對(duì)測(cè)試這個(gè)領(lǐng)域給予過(guò)多的關(guān)注,還好,或多或少還是接觸到了一些。直到最近一年多來(lái),由于一個(gè)大型工程人手不夠的緣故,所以臨時(shí)從自己負(fù)責(zé)的另一個(gè)研究工程中抽過(guò)來(lái)〔剛好該工程階段性完成〕,負(fù)責(zé)有關(guān)此工程的測(cè)試部署與規(guī)劃。而這個(gè)時(shí)候,才能說(shuō)是:真正意義上接觸到了軟件測(cè)試這個(gè)領(lǐng)域。雖然,在此工程中也有自己開(kāi)發(fā)的一些模塊、算法及一些模塊、算法的優(yōu)化跟重構(gòu)。但,從這個(gè)工程階段性結(jié)束后自己的體會(huì)而言,給我感悟最深的還是有關(guān)軟件測(cè)試這個(gè)領(lǐng)域的。通過(guò)在這個(gè)工程里的工作,讓我真正體會(huì)到了:軟件測(cè)試是一門(mén)藝術(shù)。恰恰也是因?yàn)檫@個(gè)緣故,這也才讓我開(kāi)始有了想重新認(rèn)識(shí)和品位測(cè)試藝術(shù)這一領(lǐng)域的微妙所在。?TheArtofSoftWareTesting?讀書(shū)筆記〔2〕_前言喜歡在網(wǎng)上書(shū)店中遛達(dá),看到不錯(cuò)的書(shū)就買(mǎi)下。為什么不去書(shū)店?一個(gè)字,懶唄!總覺(jué)得,有那去書(shū)店的時(shí)間,完全可以好好睡一美覺(jué),亦或可親手烹制一頓美味可口的美食。哎,反正就是,懶得走出家門(mén)去逛街!恰巧,此次瀏覽書(shū)籍時(shí),無(wú)意間看到了?TheArtofSoftwareTesting?這本書(shū)。在看了大家所給予它極高的評(píng)價(jià)留言后,雖然有些疑惑〔畢竟這個(gè)時(shí)代,槍手太多了!〕,但我深信:一本書(shū)能夠“活〞25年,應(yīng)該還是很不簡(jiǎn)單的。于是,就半信半疑的訂購(gòu)了這本書(shū),期望能夠從這本書(shū)中得悉到有用的知識(shí),來(lái)豐富一下自己面對(duì)這個(gè)領(lǐng)域時(shí)的貧乏困境,亦作為知識(shí)儲(chǔ)藏。暈,這么??!這是我拿到這本書(shū)后的第一反響。真的!沒(méi)有預(yù)料到這書(shū)會(huì)這么??!原以為這本經(jīng)典的書(shū),會(huì)諸如?C++Primer?、?TheC++ProgrammingLanguage?、?ProgrammingWindows?等這些著作那么厚。而當(dāng)翻看了幾章后,覺(jué)得確實(shí)很經(jīng)典,也明白了為什么這本書(shū)會(huì)“活〞了25年。于是,就誕生了我對(duì)這本書(shū)的第二感覺(jué):薄而精!看來(lái)是需要自己多花些時(shí)間去慢慢的品味,這樣才方可體味到最純最美的底醞。打住自己對(duì)這本書(shū)的侃侃而談〔怕跑題太遠(yuǎn),拽不回來(lái)〕,還是關(guān)注一下軟件測(cè)試這個(gè)領(lǐng)話題吧!軟件測(cè)試,怎么說(shuō)呢?就自身經(jīng)歷而言,確實(shí)如書(shū)上所說(shuō):測(cè)試依然是軟件開(kāi)發(fā)中的“黑色藝術(shù)〞。大學(xué)期間,計(jì)算機(jī)課程開(kāi)的不少,沒(méi)聽(tīng)說(shuō)有專門(mén)開(kāi)一門(mén)關(guān)于測(cè)試的課程。所以,在學(xué)生階段,測(cè)試就屬于是個(gè)被拋棄掉的名詞!畢業(yè)時(shí),不是做軟件就是去搞網(wǎng)絡(luò),沒(méi)有聽(tīng)到一個(gè)同學(xué)去應(yīng)聘測(cè)試的!工作中,有專門(mén)的測(cè)試組〔或部門(mén)〕,就更不用自己怎么上心去研究了!如今的氣氛就是:紅的夠紅,黑的夠黑!那叫一個(gè)“專〞!哎,為什么不實(shí)行“兩手都要抓,兩手都要硬〞的政策呢〔一己之見(jiàn),偏頗在所難免〕?或許,我還不明白:“術(shù)業(yè)有專攻〞的深刻含義吧!算了,最后還是談?wù)剬?duì)這本書(shū)的總觀吧!該書(shū)是針對(duì)測(cè)試這一主題進(jìn)行的實(shí)踐探討,而不是理論研究,順便捎帶了些對(duì)新的語(yǔ)言和過(guò)程的探討;前言中提到了一個(gè)最為重要而又是長(zhǎng)期、根本的指南:如何確保所開(kāi)發(fā)的所有軟件做了其應(yīng)該做的,并且同樣重要的是,未做其不應(yīng)該做的?引言里指出一條著名的經(jīng)驗(yàn):即在一個(gè)典型的編程工程中,軟件測(cè)試或系統(tǒng)測(cè)試大約占用50%的工程時(shí)間和超過(guò)50%的總本錢(qián)。?TheArtofSoftWareTesting?讀書(shū)筆記〔3〕_一次自我檢測(cè)有創(chuàng)意!這是我對(duì)該書(shū)第一章的評(píng)價(jià),也是唯一一次在看新書(shū)開(kāi)篇時(shí),能夠把第一章給透透徹徹看完的。為何?還不是實(shí)在不能恭維有些書(shū)籍在開(kāi)篇就進(jìn)行枯燥而繁多的總結(jié)性、介紹性的文字。雖心里也清楚這些文字存在的重要性。但每每,還總是先粗略瞄過(guò),在通讀全書(shū)后,才會(huì)再次認(rèn)認(rèn)真真的看那些文字〔這時(shí),才真的能感悟到“提綱攜領(lǐng)〞的中文含義啊〕。創(chuàng)意在于:它只通過(guò)展示一次自評(píng)價(jià)測(cè)試,就能吸引我的眼球,并涌出一種想繼續(xù)向下讀的沖動(dòng);更能引起對(duì)自身一些有關(guān)邏輯思維〔考慮欠周全、縝密,存在盲點(diǎn)〕、聯(lián)想能力〔需拓展思維,要富于聯(lián)想與想像,即:思維“活〞起來(lái)〕、角度問(wèn)題〔要巧妙轉(zhuǎn)換角度〕等方面,所可能存在的缺乏進(jìn)行深思。當(dāng)然,能夠引起深思的緣故,還不是在于那個(gè)評(píng)價(jià)測(cè)試嘛!提起來(lái),汗顏!依據(jù)所謂的測(cè)試用例〔即:特定的數(shù)據(jù)集合〕自測(cè)試后,發(fā)現(xiàn)自己只能考慮到11項(xiàng)〔總14項(xiàng)〕需要測(cè)試的關(guān)鍵點(diǎn)。文尾,談?wù)勛髡邔?duì)“軟件測(cè)試〞這個(gè)概念的定義吧。所謂軟件測(cè)試,就是一個(gè)過(guò)程或一系列過(guò)程,用來(lái)確認(rèn)計(jì)算機(jī)代碼完成了其應(yīng)該完成的功能,不執(zhí)行其不該有的操作。軟件應(yīng)當(dāng)是可預(yù)測(cè)且穩(wěn)定的,是不會(huì)給用戶帶來(lái)意外驚奇的。?TheArtofSoftWareTesting?讀書(shū)筆記〔4〕_初次探究“軟件測(cè)試是一項(xiàng)技術(shù)性工作,但同時(shí)也涉及經(jīng)濟(jì)學(xué)和人類心理學(xué)的一些重要因素〞,這是該書(shū)第二章中最吸引我的話,耐人深思。而對(duì)于該章的內(nèi)容,我個(gè)人覺(jué)得可概括為以下三個(gè)方面:心理學(xué)角度:駁斥了一些社會(huì)普遍存在的錯(cuò)誤認(rèn)識(shí),并給出了測(cè)試的正確定義及在含義上進(jìn)行了延伸?!灿脤?xiě)文章上常用的術(shù)語(yǔ)來(lái)說(shuō),是:先破后立?!辰?jīng)濟(jì)學(xué)角度:驗(yàn)證軟件測(cè)試不能夠發(fā)現(xiàn)“所有〞的錯(cuò)誤?!残g(shù)語(yǔ)是:各個(gè)擊破?!硽w納了軟件測(cè)試中的一些根本原那么〔術(shù)語(yǔ)是:歸納與演繹?!?,及三個(gè)重要的測(cè)試原那么:軟件測(cè)試是為發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程;一個(gè)好的測(cè)試用例具有較高的發(fā)現(xiàn)某個(gè)尚未發(fā)現(xiàn)的錯(cuò)誤的可能性;一個(gè)成功的測(cè)試用例能夠發(fā)現(xiàn)某個(gè)尚未發(fā)現(xiàn)的錯(cuò)誤。文尾,值得一提的是:在本章能明顯感到作者側(cè)重于從心理學(xué)角度來(lái)分析一些潛在的問(wèn)題。TheArtofSoftWareTesting?讀書(shū)筆記〔5〕_心理學(xué)視角解析〔上〕先談?wù)剰男睦韺W(xué)角度所需要分析的問(wèn)題。在章節(jié)的開(kāi)始,作者就明確的給予了一個(gè)認(rèn)知:要成功地測(cè)試一個(gè)軟件應(yīng)用程序,測(cè)試人員也需要有正確的態(tài)度。在某些情況下,測(cè)試人員的態(tài)度可能比實(shí)際的測(cè)試過(guò)程本身還要重要。并且,分析了現(xiàn)在社會(huì)上普遍存在的兩種“本末倒置〞的錯(cuò)誤認(rèn)識(shí)。針對(duì)程序員:一開(kāi)始就把“測(cè)試〞這個(gè)術(shù)語(yǔ)的定義搞錯(cuò)了。所以可想而知,作者肯定要先破其錯(cuò)誤的根源和弊端,然后再立其正確的認(rèn)知,為了能更深入的理解和在實(shí)踐上的把握,作者又對(duì)正確的認(rèn)知給予了進(jìn)一步延伸的闡述;針對(duì)工程經(jīng)理:針對(duì)測(cè)試方面而言,對(duì)“成功的〞和“不成功的〞的理解認(rèn)識(shí)上的錯(cuò)誤。文尾,值得一提的是:作者在這引薦一個(gè)病人去醫(yī)生那里看病的例子,于是將一些繞人的關(guān)系和原理,剎那間弄的清晰易懂了??磥?lái)恰當(dāng)適宜的舉例還是比枯燥的講解概念間的區(qū)別與聯(lián)系要容易的多,也生動(dòng)的多,并且使人也能理解的更加深刻。?TheArtofSoftWareTesting?讀書(shū)筆記〔6〕_心理學(xué)視角解析〔中〕上次談到了兩個(gè)錯(cuò)誤認(rèn)識(shí),那就繼續(xù)這個(gè)話題吧。先分析與工程經(jīng)理有關(guān)的這個(gè)錯(cuò)誤認(rèn)識(shí)吧。因?yàn)檫@個(gè)因素可能會(huì)導(dǎo)致一些在測(cè)試問(wèn)題上的根本性錯(cuò)誤的認(rèn)識(shí)。作者主要是從“成功的〞和“不成功的〞這兩個(gè)方面來(lái)剖析的:指明了錯(cuò)誤認(rèn)識(shí)的根源:“成功的測(cè)試〞是指沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試用例;而“不成功的測(cè)試〞是指發(fā)現(xiàn)了某個(gè)新錯(cuò)誤的測(cè)試。明確正確認(rèn)識(shí)的本質(zhì):如果在測(cè)試某段程序時(shí)發(fā)現(xiàn)了錯(cuò)誤,而且這些錯(cuò)誤是可以修復(fù)的,就將這次合理的設(shè)計(jì)和由此得到有效執(zhí)行的測(cè)試稱為是“成功的〞;并對(duì)如果在本次測(cè)試中可以最終確定再無(wú)其他可查出的錯(cuò)誤,同樣也被稱作是“成功的〞;而對(duì)未能適當(dāng)?shù)貙?duì)程序進(jìn)行檢查,且在大多數(shù)情況下,未能找出錯(cuò)誤的測(cè)試被稱為是“不成功的〞。引薦病人去找醫(yī)生看病的這一生動(dòng)的例子,加以引申理解并給予了結(jié)論:能發(fā)現(xiàn)新錯(cuò)誤的測(cè)試用例不太可能被認(rèn)為是“不成功的〞,相反,能發(fā)現(xiàn)錯(cuò)誤就證明它是值得設(shè)計(jì)的。一個(gè)“不成功的〞測(cè)試用例,會(huì)使程序輸出正確的結(jié)果,但不能發(fā)現(xiàn)任何錯(cuò)誤。細(xì)想:如果規(guī)劃的測(cè)試用例是能使程序輸出正確的結(jié)果,但不能發(fā)現(xiàn)任何錯(cuò)誤的話,那是多么的可怕阿。那么測(cè)試就等于沒(méi)有測(cè)試,或者是在徒勞。而潛在的錯(cuò)誤還依然潛在,這會(huì)開(kāi)發(fā)人員跟用戶來(lái)說(shuō),都是有不小的隱患的。這才真正認(rèn)識(shí)到:發(fā)現(xiàn)測(cè)試真的是一門(mén)需要去潛心研究的藝術(shù)。不僅僅是為了我們開(kāi)發(fā)人員自己,也為了用戶,更為了將來(lái)軟件能夠更好的維護(hù)跟升級(jí)。?TheArtofSoftWareTesting?讀書(shū)筆記〔7〕_心理學(xué)視角解析〔下〕接著,來(lái)談?wù)劤绦騿T方面會(huì)產(chǎn)生的錯(cuò)誤認(rèn)識(shí)吧!這個(gè)方面可能在具體實(shí)踐中顯的更重要。由于作者在開(kāi)篇就先把三個(gè)錯(cuò)誤認(rèn)識(shí)給擺到讀者的眼前;然后就立馬說(shuō)明了其正確的定義,并給予了分析和對(duì)錯(cuò)誤認(rèn)識(shí)的駁斥。洋灑灑的寫(xiě)了許多,條理上未免會(huì)有些混亂。因此,我就按照自己理解的來(lái)小結(jié)一下吧!首先,測(cè)試的正確定義是:測(cè)試是為發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程。該定義暗示了兩層含義:軟件測(cè)試是一個(gè)破壞性的過(guò)程,甚至是一個(gè)“施虐〞的過(guò)程?!簿妥约旱挠H身經(jīng)歷而言,大局部的開(kāi)發(fā)人員在測(cè)試期間,對(duì)測(cè)試人員或多或少都會(huì)暫時(shí)產(chǎn)生一點(diǎn)厭煩或恐懼的心態(tài)。主要是會(huì)讓開(kāi)發(fā)人員的代碼改的面目全非的,且這個(gè)過(guò)程是反反復(fù)復(fù)的?!硨?duì)于一個(gè)特定的程序,應(yīng)該如何設(shè)計(jì)測(cè)試用例〔測(cè)試數(shù)據(jù)〕、哪些人應(yīng)該而哪些人又不應(yīng)該執(zhí)行測(cè)試?!策@是有關(guān)測(cè)試人員構(gòu)成的問(wèn)題。就自己的親身經(jīng)歷而言,這一點(diǎn)很重要,因?yàn)闇y(cè)試人員的態(tài)度要比測(cè)試的過(guò)程更為重要?!橙缓?,明確測(cè)試的正確含義后,探究了一下現(xiàn)今面臨的三個(gè)錯(cuò)誤認(rèn)識(shí)并逐一給予了充分的駁斥?!败浖y(cè)試就是證明軟件不存在錯(cuò)誤的過(guò)程〞。假設(shè)目的僅是為了證明程序中不存在錯(cuò)誤,就會(huì)在潛意識(shí)中傾向于實(shí)現(xiàn)這個(gè)目標(biāo);即,會(huì)傾向于選擇可能較少導(dǎo)致程序失效的測(cè)試數(shù)據(jù);假設(shè)目標(biāo)在于證明程序中存在錯(cuò)誤,設(shè)計(jì)的測(cè)試數(shù)據(jù)就有可能更多地發(fā)現(xiàn)問(wèn)題。后者肯定比前者會(huì)更多地增加程序的價(jià)值。心理上,對(duì)于證明不存在是一個(gè)不可能完成的任務(wù),無(wú)論該工程多么小;但假設(shè)是一個(gè)尋找錯(cuò)誤的任務(wù),是可以完成的。就心理承受而言,也是更容易接受的。“軟件測(cè)試的目的在于證明軟件能夠正確完成其預(yù)訂的功能。〞心態(tài)上,不要本著只是為了證明程序能夠正確運(yùn)行而去測(cè)試程序,而應(yīng)該一開(kāi)始就假設(shè)程序中隱藏著錯(cuò)誤〔這種假設(shè)對(duì)于幾乎所有的程序都成立〕。這樣測(cè)試程序時(shí),才能夠發(fā)現(xiàn)盡可能多的錯(cuò)誤。要清楚這樣一個(gè)道理:每當(dāng)測(cè)試一個(gè)程序,實(shí)質(zhì)上是想為其增加一些價(jià)值。通過(guò)測(cè)試來(lái)增加程序的價(jià)值,及是指測(cè)試提高了程序的可靠性或質(zhì)量。而提高了程序的可靠性,就是指找出并最終修改了程序的錯(cuò)誤?!败浖y(cè)試就是建立一個(gè)‘軟件做了其應(yīng)該做的’信心的過(guò)程。〞錯(cuò)誤認(rèn)識(shí)的關(guān)鍵在于:程序即使能夠完成預(yù)定的功能,也仍然可能隱藏錯(cuò)誤。即,當(dāng)程序沒(méi)有實(shí)現(xiàn)預(yù)期功能時(shí),錯(cuò)誤是清晰地顯現(xiàn)出來(lái)的。但如果程序做了其不應(yīng)該做的,這同樣也是一個(gè)錯(cuò)誤。而后一方面一般都會(huì)人為的想當(dāng)然,認(rèn)為系統(tǒng)不會(huì)做那些事情的。但不通過(guò)實(shí)踐去證明,一切都是不可預(yù)計(jì)到的??傮w而言,軟件測(cè)試更適宜用來(lái)作為一個(gè)試圖發(fā)現(xiàn)程序中錯(cuò)誤〔假設(shè)其存在〕的破壞性的過(guò)程。一個(gè)成功的測(cè)試用例,通過(guò)誘發(fā)程序發(fā)生錯(cuò)誤,可以在這個(gè)方向上促進(jìn)軟件質(zhì)量的改良。當(dāng)然,最終還要通過(guò)軟件測(cè)試來(lái)建立某種程度的信心;軟件做了其應(yīng)該作的,未做其不應(yīng)該作的。通過(guò)對(duì)錯(cuò)誤的不斷研究是實(shí)現(xiàn)這個(gè)目的的最正確途徑。需要明確的一點(diǎn)是,針對(duì)有人可能會(huì)聲稱“本人的程序完美無(wú)缺〔不存在錯(cuò)誤〕〞的這種情況而言,建立起信心的最好方法就是盡量去反駁他,即努力發(fā)現(xiàn)不完美指出,而不只是確認(rèn)程序在某些輸入情況下能夠正確地工作。文尾,我想到了高爾基先生在?海燕?里邊的一句話:讓暴風(fēng)雨來(lái)的更猛烈些吧!不妨,讓測(cè)試變的更加瘋狂一些吧!?TheArtofSoftWareTesting?讀書(shū)筆記〔8〕_經(jīng)濟(jì)學(xué)視角解析再?gòu)慕?jīng)濟(jì)學(xué)視角來(lái)分析一下吧。需明確:對(duì)一個(gè)復(fù)雜的應(yīng)用程序進(jìn)行完全的測(cè)試,將消耗大量的時(shí)間和人力資源,以致于在經(jīng)濟(jì)上是不可行的。即,從經(jīng)濟(jì)學(xué)的角度來(lái)說(shuō),軟件測(cè)試是不能夠發(fā)現(xiàn)“所有〞的錯(cuò)誤。換言之,要發(fā)現(xiàn)程序中的所有錯(cuò)誤是不切實(shí)際的,也常常是不可能的。這也表達(dá)了測(cè)試人員對(duì)被測(cè)試軟件的期望和對(duì)測(cè)試用例的設(shè)計(jì)方式。由此,有了兩種策略,即:黑盒測(cè)試和白盒測(cè)試〔均從三個(gè)方面進(jìn)行闡述:原理、方法、利弊〕。黑盒測(cè)試〔又稱為數(shù)據(jù)驅(qū)動(dòng)的測(cè)試或輸入/輸出驅(qū)動(dòng)的測(cè)試〕原理:將程序視為一個(gè)黑盒子,測(cè)試目標(biāo)與程序的內(nèi)部機(jī)制和結(jié)構(gòu)完全無(wú)關(guān),而是將重點(diǎn)集中放在發(fā)現(xiàn)程序不按其標(biāo)準(zhǔn)正確運(yùn)行的環(huán)境條件。方法:測(cè)試數(shù)據(jù)完全來(lái)源于軟件標(biāo)準(zhǔn)〔不需要去了解程序的內(nèi)部結(jié)構(gòu)〕。如果想用這種方法來(lái)發(fā)現(xiàn)程序的所有錯(cuò)誤,判定的標(biāo)準(zhǔn)就是“窮舉輸入測(cè)試〞,將所有可能的輸入條件都作為測(cè)試用例。利弊:窮舉輸入測(cè)試是無(wú)法實(shí)現(xiàn)的。原因有二:一是無(wú)法測(cè)試一個(gè)程序以確保它是無(wú)錯(cuò)的;二是軟件測(cè)試中需要考慮的一個(gè)根本問(wèn)題是軟件測(cè)試的經(jīng)濟(jì)學(xué),即,測(cè)試投入的目標(biāo)在于通過(guò)有限的測(cè)試用例,最大限度地提高發(fā)現(xiàn)的問(wèn)題的數(shù)量以取得最好的測(cè)試效果。白盒測(cè)試〔又稱為邏輯驅(qū)動(dòng)的測(cè)試〕原理:允許我們檢查程序的內(nèi)部結(jié)構(gòu)的。這種測(cè)試策略對(duì)程序的邏輯結(jié)構(gòu)進(jìn)行檢查,從中獲取測(cè)試數(shù)據(jù)〔但常忽略了程序的標(biāo)準(zhǔn)〕。方法:窮舉路徑測(cè)試。即,如果使用測(cè)試用例執(zhí)行了程序中所有可能的控制流路徑,那么程序有可能得到了完全的測(cè)試。利弊:程序中不同邏輯路徑的數(shù)量可能會(huì)到達(dá)天文數(shù)字,那么窮舉路徑測(cè)試就同窮舉輸入測(cè)試一樣,非但不可能也是不切合實(shí)際的。文尾,值得提一下一個(gè)錯(cuò)誤認(rèn)知:“窮舉路徑測(cè)試即完全的測(cè)試〞。因?yàn)?,即使可以測(cè)試到程序中的所有路徑,但是程序可能仍然存在著錯(cuò)誤。其原因有三:即使是窮舉路徑測(cè)試也決不能保證程序符合其設(shè)計(jì)標(biāo)準(zhǔn);程序可能會(huì)因?yàn)槿鄙倌承┞窂蕉嬖趩?wèn)題,可窮舉路徑測(cè)試不能發(fā)現(xiàn)到底是缺少了那些必需路徑;窮舉路徑測(cè)試可能不會(huì)暴露數(shù)據(jù)敏感錯(cuò)誤。?TheArtofSoftWareTesting?讀書(shū)筆記〔9〕_原那么解析該章最后,作者給予了十大測(cè)試原那么:測(cè)試用例中一個(gè)必需局部是對(duì)預(yù)期輸出或結(jié)果的定義。一個(gè)測(cè)試用例必需包括兩個(gè)局部:對(duì)程序的輸入數(shù)據(jù)的描述和對(duì)程序在上述輸入數(shù)據(jù)下的正確輸出結(jié)果的精確描述。程序員應(yīng)當(dāng)防止測(cè)試自己編寫(xiě)的程序。原因有三:當(dāng)程序員“建設(shè)性〞地設(shè)計(jì)和編寫(xiě)完程序之后,很難讓他突然改變視角以一種“破壞性〞的眼光來(lái)審查程序,即,他們無(wú)法改變思維方式來(lái)盡力暴露自己程序中的錯(cuò)誤;程序員可能會(huì)下意識(shí)地防止找出錯(cuò)誤來(lái),擔(dān)憂受到同事、上司、客戶或正在開(kāi)發(fā)的程序或系統(tǒng)的主管的懲罰;由于程序員錯(cuò)誤地理解了疑難定義或標(biāo)準(zhǔn),導(dǎo)致程序中存在錯(cuò)誤。如果是這種情況,程序員可能會(huì)帶著同樣的誤解來(lái)測(cè)試自己的程序。需要指出的是:“調(diào)試〞還是由程序的編寫(xiě)人員來(lái)完成會(huì)更加有效的。

編寫(xiě)軟件的組織不應(yīng)當(dāng)測(cè)試自己編寫(xiě)的軟件。應(yīng)該是由客觀、獨(dú)立的第三方來(lái)進(jìn)行測(cè)試。理由雷同于上條規(guī)那么中所涉及到的。

應(yīng)當(dāng)徹底檢查每個(gè)測(cè)試的執(zhí)行結(jié)果。在工程測(cè)試的時(shí)候,總是會(huì)發(fā)現(xiàn)在后續(xù)測(cè)試中發(fā)現(xiàn)的錯(cuò)誤,往往是前面的測(cè)試遺漏掉的。測(cè)試用例的編寫(xiě)不僅應(yīng)當(dāng)根據(jù)有效和預(yù)料到的輸入情況,而且也應(yīng)當(dāng)根據(jù)無(wú)效和未預(yù)料到的輸入情況。其實(shí)在軟件產(chǎn)品中暴露出來(lái)的許多問(wèn)題是當(dāng)程序以某些新的或未預(yù)料到的方式運(yùn)行時(shí)發(fā)現(xiàn)的。所以這條原那么的重要性可能在測(cè)試中的地位還應(yīng)該是更要值得引起注意的才是。檢查程序是否“未做其應(yīng)該做的〞僅是測(cè)試的一半,測(cè)試的另一半是檢查程序是否“做了其不應(yīng)該做的〞。應(yīng)防止測(cè)試用例用后放棄,除非軟件本身就是一個(gè)一次性的軟件。在交互式系統(tǒng)上來(lái)測(cè)試的話,這條原那么可能就會(huì)顯現(xiàn)的更加重要了。這條原那么表達(dá)的會(huì)更加省時(shí)省力。因?yàn)槿绻麑?duì)程序的更改導(dǎo)致了程序某個(gè)先前可以執(zhí)行的局部發(fā)生了故障,這個(gè)故障往往是不會(huì)被發(fā)現(xiàn)的。保存測(cè)試用例,當(dāng)程序其他局部發(fā)生更動(dòng)后重新執(zhí)行,這就是我們所謂的“回歸測(cè)試〞了。方案測(cè)試工作時(shí)不應(yīng)默認(rèn)假定不會(huì)發(fā)現(xiàn)錯(cuò)誤。程序某局部存在更多錯(cuò)誤的可能性,與該局部已發(fā)現(xiàn)錯(cuò)誤的數(shù)量成正比。作者所說(shuō)的而言,錯(cuò)誤總是傾向于聚集存在,而在一個(gè)具體的程序中,某些局部要比其他局部更容易存在錯(cuò)誤。那么為了使測(cè)試獲得更大的成效,最好對(duì)這些容易存在錯(cuò)誤的局部進(jìn)行額外的測(cè)試。測(cè)試是一項(xiàng)極富創(chuàng)造性、極具智力挑戰(zhàn)性的工作?TheArtofSoftWareTesting?讀書(shū)筆記〔10〕_人工測(cè)試技術(shù)本書(shū)第三章作者著重講述了測(cè)試領(lǐng)域里的一個(gè)與機(jī)器測(cè)試相當(dāng)重要,且在機(jī)器測(cè)試之前進(jìn)行,也與之相輔相成的技術(shù),即:人工測(cè)試技術(shù)。該技術(shù)共涉及四種方法:代碼檢查、代碼走查、桌面檢查、同行評(píng)審;其更著重詳細(xì)講述的是第一個(gè)方法。同時(shí),作者在開(kāi)章也提到一種錯(cuò)誤認(rèn)識(shí):人工測(cè)試技術(shù)由于包含了人為因素在內(nèi),導(dǎo)致很多方法的正規(guī)性要差于由計(jì)算機(jī)執(zhí)行的數(shù)學(xué)證明,所以人們可能會(huì)疑心某些如此簡(jiǎn)單和不正規(guī)的東西是否有用。反之亦然。就個(gè)人經(jīng)歷而言,確實(shí)這種認(rèn)知普遍存在,并且對(duì)人工測(cè)試技術(shù)沒(méi)有給予足夠的重視。文尾,有必要記敘一下,人工測(cè)試技術(shù)的重要性。它會(huì)在兩個(gè)方面顯著地提高軟件測(cè)試的成效和可靠性。錯(cuò)誤發(fā)現(xiàn)得越早,改正錯(cuò)誤的本錢(qián)越低,正確改正錯(cuò)誤的可能性也越大;程序員在開(kāi)始基于計(jì)算機(jī)的測(cè)試時(shí)似乎要經(jīng)歷一個(gè)心理上的改變。壓力會(huì)急劇增長(zhǎng),且要“盡可能快地修正這個(gè)缺陷〞。由于這些,所以,程序員在改正某個(gè)基于計(jì)算機(jī)測(cè)試發(fā)現(xiàn)的錯(cuò)誤時(shí)所犯的失誤,可能要比改正早期發(fā)現(xiàn)的問(wèn)題時(shí)所犯的失誤會(huì)更多一些的。?TheArtofSoftWareTesting?讀書(shū)筆記〔11〕_優(yōu)之共通上篇,提到人工測(cè)試技術(shù)的四種方法。其中,代碼檢查和代碼走查稍略勝一籌。于是,作者在本章著重講了這兩個(gè)方法。其實(shí),這兩種方法很類似,那就先看看這兩種方法的優(yōu)之共通點(diǎn)吧!具體可分為一下幾個(gè)點(diǎn):方法:組成一個(gè)小組來(lái)閱讀或直觀檢查特定的程序;并在“頭腦風(fēng)暴會(huì)〞上要形成統(tǒng)一的目標(biāo):找出錯(cuò)誤,但不必找出改正錯(cuò)誤的方法。換句話說(shuō),是測(cè)試,而不是調(diào)試。該組開(kāi)發(fā)人員〔三至四人為最正確〕是對(duì)代碼進(jìn)行審核,其中參加者當(dāng)中只有一人是程序編寫(xiě)者;也可以說(shuō)它是對(duì)過(guò)去桌面檢查過(guò)程的改良。優(yōu)點(diǎn):一旦發(fā)現(xiàn)錯(cuò)誤,就可以在代碼中對(duì)其進(jìn)行精確定位,這就降低了調(diào)試的本錢(qián);還通常可以發(fā)現(xiàn)成批的錯(cuò)誤,這樣就可以一同得到修正,這也優(yōu)于機(jī)器測(cè)試,因?yàn)楹笳咧荒鼙┞冻鲥e(cuò)誤的某個(gè)表癥。效果:通常是能夠有效地查找出30%-70%的邏輯設(shè)計(jì)和編碼錯(cuò)誤,但不能有效地查找出高層次的設(shè)計(jì)錯(cuò)誤。地位:是與計(jì)算機(jī)的測(cè)試互補(bǔ)的,缺少其中任何一種錯(cuò)誤檢查的效率都會(huì)降低。值得提出的是:該處的錯(cuò)誤發(fā)現(xiàn)率,并不是說(shuō)所有錯(cuò)誤中多達(dá)70%可能會(huì)被找出來(lái),而是講這些方法在測(cè)試過(guò)程結(jié)束時(shí),可以有效地查找出多達(dá)70%的錯(cuò)誤。應(yīng)始終記住的是:程序中的錯(cuò)誤總數(shù)始終是未知的。否那么就會(huì)浪費(fèi)大量的精力跟人力,也會(huì)在經(jīng)濟(jì)效益上或多或少有一些損失的。不過(guò),就經(jīng)驗(yàn)而言,修改一個(gè)現(xiàn)存的程序比編寫(xiě)一個(gè)新程序更容易產(chǎn)生錯(cuò)誤,這依據(jù)于以每寫(xiě)一行代碼的錯(cuò)誤數(shù)量來(lái)計(jì)的。?TheArtofSoftWareTesting?讀書(shū)筆記〔12〕_代碼檢查代碼檢查,怎么說(shuō)呢?經(jīng)驗(yàn)而言,我挺喜歡用的。因?yàn)?,跟工程?jīng)理〔或設(shè)計(jì)人員〕讀設(shè)計(jì),能夠非常容易發(fā)現(xiàn)設(shè)計(jì)上的邏輯錯(cuò)誤或遺漏的問(wèn)題等等。因此,有必要好好表達(dá)下。定義上:所謂的代碼檢查,其實(shí)就是以組為單位閱讀代碼,是一系列規(guī)程和錯(cuò)誤檢查技術(shù)的集合。該過(guò)程通常將注意力集中在發(fā)現(xiàn)錯(cuò)誤上,而不是糾正錯(cuò)誤。成員組成:一個(gè)代碼檢查小組通常是由四人組成,其中一人發(fā)揮著協(xié)調(diào)作用、一人是該程序的編碼人員、一人是其他成員通常是程序的設(shè)計(jì)人員、一人是測(cè)試專家。這里,值得一提的是:那個(gè)發(fā)揮著協(xié)調(diào)作用的成員。該協(xié)調(diào)人應(yīng)該是個(gè)稱職的程序員,但不是該程序的編碼人員,不需要對(duì)程序的細(xì)節(jié)了解得很清楚。協(xié)調(diào)人的職責(zé)包括幾點(diǎn):為代碼檢查分發(fā)材料、安排進(jìn)程;在代碼檢查中起主導(dǎo)作用;記錄發(fā)現(xiàn)的所有錯(cuò)誤;確保所有錯(cuò)誤隨后得到改正。有關(guān)代碼檢查的具體流程,個(gè)人歸納為一個(gè)流程表,就不在這里詳述了。不過(guò),這里需要值得注意的是代碼檢查這個(gè)過(guò)程。在代碼檢查的時(shí)間和地點(diǎn)上的選擇上,應(yīng)防止所有的外部干擾;代碼檢查會(huì)議的理想時(shí)間應(yīng)在90-120分鐘之內(nèi);大多數(shù)的代碼檢查都是按每小時(shí)大約閱讀150行代碼的速度進(jìn)行;對(duì)大型軟件的檢查應(yīng)安排多個(gè)代碼檢查會(huì)議同時(shí)進(jìn)行,每個(gè)代碼檢查會(huì)議處理一個(gè)或幾個(gè)模塊或子程序。除此之外,還需要從心理學(xué)角度給予提前的心理籌備。因?yàn)?,要使檢查過(guò)程有成效,還必須樹(shù)立正確的態(tài)度。其心理因素必須要提前分析正確,否那么事倍功半。假設(shè)程序員將代碼檢查視為對(duì)其個(gè)人的攻擊、采取了防范的態(tài)度,那么檢查過(guò)程就不會(huì)有效果。而正確的做法應(yīng)該是:一方面:提出的建議應(yīng)針對(duì)程序本身,而不應(yīng)針對(duì)程序員,即:軟件中存在的錯(cuò)誤不應(yīng)被視為編寫(xiě)程序的人員本身的弱點(diǎn),且這些錯(cuò)誤應(yīng)被看做是伴隨著軟件開(kāi)發(fā)的艱難性所固有的;另一方面:程序員必須懷著非自我本位的態(tài)度來(lái)對(duì)待錯(cuò)誤檢查,對(duì)整個(gè)過(guò)程采取積極和建設(shè)性的態(tài)度:代碼檢查的目標(biāo)是發(fā)現(xiàn)程序中的錯(cuò)誤,從而改良程序的質(zhì)量。正因?yàn)檫@個(gè)原因,大多數(shù)人建議應(yīng)對(duì)代碼檢查的結(jié)果進(jìn)行保密,僅限于參與者范圍內(nèi)部。尤其是如果管理人員想利用代碼檢查的結(jié)果,那么就與檢查過(guò)程的目的背道而馳了。文尾,順便提一下代碼檢查附帶的幾個(gè)有益的作用吧。程序員通常會(huì)得到編程風(fēng)格、算法選擇及編譯技術(shù)等方面的反響信息;其他參與者也可以通過(guò)接觸其他程序員的錯(cuò)誤和編程風(fēng)格而同樣受益匪淺;代碼檢查還是早期發(fā)現(xiàn)程序中最易出錯(cuò)局部的方法之一,有助于在基于計(jì)算機(jī)的測(cè)試過(guò)程中將更多的注意力集中在這些地方。?TheArtofSoftWareTesting?讀書(shū)筆記〔13〕_錯(cuò)誤列表在代碼檢查過(guò)程中,一個(gè)重要的局部是需要對(duì)照一份編程錯(cuò)誤列表,來(lái)分析程序是否存在常見(jiàn)的錯(cuò)誤。于是,作者接下來(lái)就給出了一份錯(cuò)誤列表,該份錯(cuò)誤列表在很大程度上是獨(dú)立于編程語(yǔ)言的,即:大多數(shù)的錯(cuò)誤都可能出現(xiàn)在用任意語(yǔ)言編寫(xiě)的程序中的。并建議讀者可以把自己使用的編程語(yǔ)言中特有的錯(cuò)誤,以及代碼檢查發(fā)現(xiàn)的錯(cuò)誤補(bǔ)充到這份錯(cuò)誤列表中去。作者給出的該列表比擬詳細(xì),因此,不在這里詳述,只是給出該錯(cuò)誤列表的總的構(gòu)架。該列表共分為八個(gè)局部:數(shù)據(jù)引用錯(cuò)誤、數(shù)據(jù)聲明錯(cuò)誤、運(yùn)算錯(cuò)誤、比擬錯(cuò)誤、控制流程錯(cuò)誤、輸入/輸出錯(cuò)誤、接口錯(cuò)誤、其他檢查。?TheArtofSoftWareTesting?讀書(shū)筆記〔14〕_代碼走查說(shuō)完代碼檢查,現(xiàn)在來(lái)談?wù)劥a走查。從定義上來(lái)講,代碼走查是以小組為單元進(jìn)行代碼閱讀的,同樣也是一系列規(guī)程和錯(cuò)誤檢查技術(shù)的集合。且代碼走查也采用了持續(xù)一至兩個(gè)小時(shí)的不間斷會(huì)議的形式。代碼走查的小組成員的構(gòu)成而言,一般是由三至五人組成,其中一人扮演“協(xié)調(diào)人〞;一人擔(dān)任秘書(shū)角色,負(fù)責(zé)記錄所有查處的錯(cuò)誤;還有一人擔(dān)任測(cè)試人員。不過(guò)最正確的組合應(yīng)該是:一位極富經(jīng)驗(yàn)的程序員;一位程序設(shè)計(jì)語(yǔ)言專家;一位程序員新手〔可以給出新穎、不帶偏見(jiàn)的觀點(diǎn)〕;最終將維護(hù)程序的人員;一位來(lái)自其他不同工程的人員;一位來(lái)自該軟件編程小組的程序員。至于測(cè)試的流程跟代碼檢查很類似,類似之處就不多談,只說(shuō)一下不同之處吧。稍有不同的是代碼走查的任務(wù):就是參與者“使用了計(jì)算機(jī)〞。被指定為測(cè)試人員的那個(gè)人會(huì)帶著一些書(shū)面的測(cè)試用例〔程序或模塊具有代表性的輸入集及預(yù)期的輸出集〕來(lái)參加會(huì)議。且在會(huì)議期間,每個(gè)測(cè)試用例都在人們頭腦中進(jìn)行推演,即:把測(cè)試數(shù)據(jù)沿程序的邏輯結(jié)構(gòu)走一遍,并把程序的狀態(tài)〔如變量的值〕記錄在紙張或白板上以供監(jiān)視。這里,需指出:這些書(shū)面的測(cè)試用例必須結(jié)構(gòu)簡(jiǎn)單、數(shù)量較少,因?yàn)槿四X執(zhí)行程序的速度比計(jì)算機(jī)執(zhí)行程序的速度慢上假設(shè)干量級(jí)。之所以提供這些測(cè)試用例,目的不是在于其本身對(duì)測(cè)試了關(guān)鍵的作用,而是其提供了啟動(dòng)代碼走查和質(zhì)疑程序員邏輯思路及其設(shè)想的手段。因?yàn)?,在大多?shù)的代碼走查中,很多問(wèn)題是在向程序員提問(wèn)的過(guò)程中發(fā)現(xiàn)的,而不是由測(cè)試用例本身直接發(fā)現(xiàn)的。文尾,至于代碼走查所需要從心理學(xué)角度給予提前的心理籌備、后續(xù)過(guò)程和附帶的幾個(gè)有益的作用,都與代碼檢查的類似,所以在這里就不提了。?TheArtofSoftWareTesting?讀書(shū)筆記〔15〕_桌面檢查與同行評(píng)分在本章的最后,作者附帶提了一下桌面檢查和同行評(píng)分這兩個(gè)方法。首先,來(lái)談下桌面檢查。桌面檢查可視為由單人進(jìn)行的代碼檢查或代碼走查;并由一個(gè)人閱讀程序,對(duì)照錯(cuò)誤列表檢查程序,對(duì)程序推演測(cè)試數(shù)據(jù)。由此,我覺(jué)得桌面檢查可以說(shuō)是上述兩種方法的一個(gè)內(nèi)核或者說(shuō)是雛形吧。所以也可知其效率是相當(dāng)?shù)偷?。然后,看一下同行評(píng)分。需指明:其該方法與測(cè)試并無(wú)關(guān)系,因?yàn)槠淠繕?biāo)并不是為了發(fā)現(xiàn)錯(cuò)誤的,只是它與代碼閱讀的思想有一定的關(guān)聯(lián)而已。定義上:同行評(píng)分是一種依據(jù)程序整體質(zhì)量、可維護(hù)性、可擴(kuò)展性、易用性和清晰性對(duì)匿名程序進(jìn)行評(píng)價(jià)的技術(shù)。不難看出,該技術(shù)的目的是為程序員提供自我評(píng)價(jià)的手段。其小組成員的構(gòu)成為:一位管理員,負(fù)責(zé)擔(dān)任該評(píng)分過(guò)程的管理工作;6-20名參與者,并要保持匿名性,且要具備相似的背景。評(píng)分的資料:由參與者自己挑出兩個(gè)由自己編寫(xiě)的程序以供評(píng)審,其中一個(gè)應(yīng)是自認(rèn)為能代表其自身能力的最好作品;另一個(gè)是自認(rèn)為質(zhì)量較差的作品。文尾,至于具體流程,就不再詳敘了。?TheArtofSoftWareTesting?讀書(shū)筆記〔16〕_淺談測(cè)試用例本書(shū)第四章主要講述了白盒測(cè)試和黑盒測(cè)試的原理、具體方法,及一些測(cè)試策略的思考。就經(jīng)驗(yàn)而言,個(gè)人覺(jué)得,測(cè)試軟件中最重要的因素還是要:設(shè)計(jì)和生成有效的測(cè)試用例。所以,作者在開(kāi)章之處特別提及測(cè)試用例,我認(rèn)為是很必要的。緣由:因?yàn)闇y(cè)試不可能是完全的,所以最顯然的測(cè)試策略就是努力使測(cè)試盡可能完全。那么,由于考慮到時(shí)間和本錢(qián)的約束,那么一個(gè)最關(guān)鍵的問(wèn)題就是:在所有可能的測(cè)試用例中,哪個(gè)子集最有可能發(fā)現(xiàn)最多的錯(cuò)誤。很顯然,在所有的方法中效率最低的就是隨機(jī)輸入的測(cè)試,那么就需要提出一套思考過(guò)程,讓其有助于更加睿智地選取測(cè)試數(shù)據(jù)。于是,便有了一種比擬合理的測(cè)試策略:先使用黑盒測(cè)試方法來(lái)設(shè)計(jì)測(cè)試用例,然后視情況需要使用白盒測(cè)試方法來(lái)設(shè)計(jì)補(bǔ)充測(cè)試用例。?TheArtofSoftWareTesting?讀書(shū)筆記〔17〕_白盒測(cè)試先談及、概括一下白盒測(cè)試。

白盒測(cè)試,所關(guān)注的是:測(cè)試用例執(zhí)行的程度或覆蓋程序邏輯結(jié)構(gòu)〔源代碼〕的程度。因此,也可以認(rèn)為是邏輯覆蓋測(cè)試。具體方法有五個(gè),按其邏輯覆蓋的從弱到強(qiáng)依次列出:語(yǔ)句覆蓋〔面〕:將程序中的每條語(yǔ)句至少執(zhí)行一次,但實(shí)現(xiàn)不太可能,該準(zhǔn)那么有很大的缺乏,以至于它通常沒(méi)有什么用處判定/分支覆蓋〔線〕:

必須編寫(xiě)足夠的測(cè)試用例,使得每一個(gè)判斷都至少有一個(gè)為真和為假的輸出結(jié)果。即:每條分支路徑都必須至少遍歷一次。換句話說(shuō):所有判斷的每個(gè)可能結(jié)果都至少執(zhí)行一次,以及將程序或子程序的每個(gè)入口點(diǎn)都至少執(zhí)行一次。需要指出的是:該準(zhǔn)那么滿足語(yǔ)言覆蓋準(zhǔn)那么。條件覆蓋〔點(diǎn)〕:編寫(xiě)足夠的測(cè)試用例以確保將一個(gè)判斷中的每個(gè)條件的所有可能的結(jié)果至少執(zhí)行一次。判定/條件覆蓋〔點(diǎn)線結(jié)合〕:設(shè)計(jì)出足夠的測(cè)試用例,將一個(gè)判斷中的每個(gè)條件的所有可能結(jié)果至少執(zhí)行一次,將每個(gè)判斷的所有可能結(jié)果至少執(zhí)行一次,將每個(gè)入口點(diǎn)都至少調(diào)用一次。需明確一點(diǎn),該準(zhǔn)那么有一個(gè)極大的缺點(diǎn):盡管看上去所有條件的所有結(jié)果似乎都執(zhí)行到了,但由于某些特定的條件會(huì)屏蔽掉其他的條件,通常并不能全部都執(zhí)行到。例如:該準(zhǔn)那么并不一定會(huì)發(fā)現(xiàn)邏輯表達(dá)式中的錯(cuò)誤〔與、或〕。

多重條件覆蓋〔點(diǎn)線組合〕:編寫(xiě)足夠多的測(cè)試用例,將每個(gè)判定中的所有可能的條件結(jié)果的組合,以及所有的入口點(diǎn)都至少執(zhí)行一次。需要說(shuō)明的是,滿足多重條件覆蓋準(zhǔn)那么的測(cè)試用例集,同樣滿足判定覆蓋準(zhǔn)那么、條件覆蓋準(zhǔn)那么以及判定/條件覆蓋準(zhǔn)那么。需明確的是:在存在循環(huán)的情況下,多重條件覆蓋準(zhǔn)那么所需要的測(cè)試用例的數(shù)量通常會(huì)遠(yuǎn)遠(yuǎn)小于其路徑的數(shù)量。文尾,作者小結(jié)了一下。包含每個(gè)判斷只存在一種條件的程序,最簡(jiǎn)單的測(cè)試準(zhǔn)那么就是:設(shè)計(jì)出足夠數(shù)量的測(cè)試用例,將每個(gè)判斷的所有結(jié)果都至少執(zhí)行一次;將所有的程序入口都至少調(diào)用一次,以確保全部的語(yǔ)句都至少執(zhí)行一次。包含多重條件判斷的程序,最簡(jiǎn)單的測(cè)試準(zhǔn)那么是:設(shè)計(jì)出足夠數(shù)量的測(cè)試用例,將每個(gè)判斷的所有可能的條件結(jié)果的組合,以及所有的入口點(diǎn)都至少執(zhí)行一次。?TheArtofSoftWareTesting?讀書(shū)筆記〔18〕_黑盒測(cè)試之等價(jià)類劃分再概述一下黑盒測(cè)試。那么首先就是等價(jià)類劃分法。等價(jià)類劃分,是一個(gè)最優(yōu)子集的挑選過(guò)程。該子集必須具備兩個(gè)特性:嚴(yán)格控制測(cè)試用例的增加,減少為到達(dá)“合理測(cè)試〞的某些既定目標(biāo)而必須設(shè)計(jì)的其他測(cè)試用例的數(shù)量;即:每個(gè)測(cè)試用例都必須表達(dá)盡可能多的不同的輸入情況,以使最大限度地減少測(cè)試所需的全部用例的數(shù)量;〔經(jīng)驗(yàn)而言,是用于生成有效測(cè)試用例的約束。〕覆蓋了大局部其他可能的測(cè)試用例:使用或不使用這個(gè)特定的輸入集合,哪些錯(cuò)誤會(huì)被發(fā)現(xiàn),哪些會(huì)被遺漏掉。即:應(yīng)該盡量將程序輸入范圍進(jìn)行劃分,將其劃分為有限數(shù)量的等價(jià)類,這樣就可以合理地假設(shè)測(cè)試每個(gè)等價(jià)類的代表性數(shù)據(jù)等于測(cè)試該類的其他任何數(shù)據(jù)?!步?jīng)驗(yàn)而言,是用于生成無(wú)效測(cè)試用例的約束的?!尘唧w步驟為:確定等價(jià)類:確定等價(jià)類是選取每一個(gè)輸入條件,將其劃分為兩個(gè)或更多的組。這里可以借助表格來(lái)進(jìn)行劃分,并確定了兩類等價(jià)類:有效等價(jià)類、無(wú)效等價(jià)類。生成測(cè)試用例。〔具體三步就不再表達(dá)了〕文尾,順便提一點(diǎn)個(gè)人經(jīng)驗(yàn):依據(jù)規(guī)格說(shuō)明確定輸入條件時(shí),一定要思維緊密和周全,否那么會(huì)出現(xiàn)很大的遺漏性;且用單個(gè)測(cè)試用例覆蓋無(wú)效等價(jià)類,是因?yàn)槟承┨囟ǖ妮斎脲e(cuò)誤可能會(huì)評(píng)比或取代其他輸入錯(cuò)誤檢查。所以應(yīng):少而全、多而專。?TheArtofSoftWareTesting?讀書(shū)筆記〔19〕_黑盒測(cè)試之邊界值分析、錯(cuò)誤猜想邊界值分析法,有較好的測(cè)試回報(bào)率。該法較簡(jiǎn)單,僅是用于考察正處于等價(jià)劃分邊界或在邊界附近的狀態(tài)。因此,只需明確邊界條件這一定義即可。邊界條件,是指輸入和輸出等價(jià)類中那些恰好處于邊界、或超過(guò)邊界、或在邊界以下的狀態(tài)。錯(cuò)誤猜想法,沒(méi)有用到任何特殊的方法,只是利用直覺(jué)和經(jīng)驗(yàn)猜想出錯(cuò)的可能類型,然后編寫(xiě)測(cè)試用例來(lái)暴露這些錯(cuò)誤。根本思想是列舉出可能犯的錯(cuò)誤或錯(cuò)誤易發(fā)情況的清單,然后依據(jù)清單來(lái)編寫(xiě)測(cè)試用例;并且在閱讀規(guī)格說(shuō)明時(shí)聯(lián)系程序員可能做的假設(shè)來(lái)確定測(cè)試用例,也就是說(shuō)規(guī)格說(shuō)明中的一些內(nèi)容會(huì)被忽略,要么是由于偶然因素,要么是程序員認(rèn)為其顯而易見(jiàn)。文尾,需提及注意的是:邊界值分析法,考慮到了結(jié)果空間的邊界〔因?yàn)檩斎敕秶倪吔绮⒉豢偸悄艽磔敵龇秶倪吔缜闆r。〕?TheArtofSoftWareTesting?讀書(shū)筆記〔20〕_黑盒測(cè)試之因果圖分析因果圖分析法,依作者而言,是為了解決邊界值分析和等價(jià)劃分的一個(gè)弱點(diǎn):未對(duì)輸入條件的組合進(jìn)行分析。而因果圖恰恰有助于用一個(gè)系統(tǒng)的方法選擇出此類高效的測(cè)試用例集,并且可以指出規(guī)格說(shuō)明的不完整性和不明確之處。因果圖,是一種形式語(yǔ)言〔有嚴(yán)格語(yǔ)法限制的語(yǔ)言,計(jì)算機(jī)語(yǔ)言都是形式語(yǔ)言〕,是將自然語(yǔ)言描述的規(guī)格說(shuō)明轉(zhuǎn)換為因果圖。實(shí)質(zhì)上,是一種數(shù)字邏輯電路〔一個(gè)組合的邏輯網(wǎng)絡(luò)〕,但沒(méi)有使用標(biāo)準(zhǔn)的電子學(xué)符號(hào),而是使用了稍微簡(jiǎn)單點(diǎn)的符號(hào)。具體有六步〔涉及到的每步具體過(guò)程及圖樣,由于篇幅,都在此略去〕:將規(guī)格說(shuō)明分解為可執(zhí)行的片段;確定規(guī)格說(shuō)明中的因果關(guān)系;分析規(guī)格說(shuō)明的語(yǔ)義內(nèi)容,并將其轉(zhuǎn)換為連接因果關(guān)系的布爾圖,即:因果圖;給圖加上注解符號(hào),說(shuō)明由于語(yǔ)法或環(huán)境的限制而不能聯(lián)系起來(lái)的“因〞和“果〞;過(guò)仔細(xì)地跟蹤圖中的狀態(tài)變化情況,將因果圖轉(zhuǎn)換成一個(gè)有限項(xiàng)的判定表;將判定表中的列轉(zhuǎn)換成測(cè)試用例。?TheArtofSoftWareTesting?讀書(shū)筆記〔21〕_測(cè)試策略本章最后,作者給出了一個(gè)合理的測(cè)試策略:“測(cè)試用例涉及方法可以組合為一個(gè)整體的策略,即:每一種方法都可以提供一組具體的有用的測(cè)試用例,但是都不能單獨(dú)提供一個(gè)完整的測(cè)試用例集,所以一組合理的策略為:如果規(guī)格說(shuō)明中包含輸入條件組合的情況,應(yīng)首先使用因果圖分析方法;在任何情況下都應(yīng)使用邊界值分析方法。應(yīng)注意,是對(duì)輸入和輸出邊界進(jìn)行分析;為輸入和輸出確定有效和無(wú)效等價(jià)類,在必要情況下對(duì)確認(rèn)的測(cè)試用例進(jìn)行補(bǔ)充;使用錯(cuò)誤猜想技術(shù)增加更多的測(cè)試用例;針對(duì)上述測(cè)試用例集檢查程序的邏輯結(jié)構(gòu),即白盒測(cè)試的五種方法??蛇m當(dāng)?shù)脑黾幼銐驍?shù)量的測(cè)試用例,以便覆蓋準(zhǔn)那么得到滿足。〞?TheArtofSoftWareTesting?讀書(shū)筆記〔22〕_模塊〔單元〕測(cè)試單元測(cè)試,是本書(shū)第五章講述的重點(diǎn)。它是構(gòu)建大型程序〔>500linescodes〕測(cè)試的第一個(gè)步驟。可從三個(gè)方面給予了概括:定義上:?jiǎn)卧獪y(cè)試是對(duì)程序中的單個(gè)子程序、子程序或過(guò)程進(jìn)行測(cè)試的過(guò)程,即:一開(kāi)始并不是對(duì)整個(gè)程序進(jìn)行測(cè)試,而是首先將注意力集中在對(duì)構(gòu)成程序的較小模塊的測(cè)試上面;必要性上:它是一種管理組合的測(cè)試元素的方法手段;以減輕調(diào)試〔準(zhǔn)確定位并糾正某個(gè)錯(cuò)誤的過(guò)程〕的難度;并提供同時(shí)測(cè)試多個(gè)模塊的可能,將并行工程引入軟件測(cè)試中。目的上:它是將模塊的功能與定義模塊的功能規(guī)格說(shuō)明或接口規(guī)格說(shuō)明進(jìn)行比擬。文尾,需指明:?jiǎn)卧獪y(cè)試的目標(biāo)不是為了說(shuō)明模塊符合其規(guī)格說(shuō)明,而是為了揭示模塊與其規(guī)格說(shuō)明存在著的矛盾。?TheArtofSoftWareTesting?讀書(shū)筆記〔23〕_單元測(cè)試用例設(shè)計(jì)單元測(cè)試用例的設(shè)計(jì),需先明確兩點(diǎn):?jiǎn)卧獪y(cè)試設(shè)計(jì)測(cè)試用例時(shí),需兩種類型的信息,即:模塊的規(guī)格說(shuō)明、模塊的源代碼。雖單元測(cè)試總體上是采用面向白盒測(cè)試的,但是其設(shè)計(jì)主導(dǎo)思想是:使用一種或多種白盒測(cè)試方法分析模塊的邏輯結(jié)構(gòu),然后使用黑盒測(cè)試方法對(duì)照模塊的規(guī)格說(shuō)明以補(bǔ)充測(cè)試用例。文中,作者給予了實(shí)例講解。從中可得悉:在使用白盒測(cè)試方法前,需要列舉出程序中所有的條件判斷;而在使用白盒測(cè)試方法時(shí),應(yīng)在開(kāi)始就使用多重條件覆蓋的方法;而在使用黑盒測(cè)試方法時(shí),最好要使用邊界值分析的方法,且不要依據(jù)邊界值分析的結(jié)果來(lái)重寫(xiě)白盒測(cè)試的測(cè)試用例,最好黑盒測(cè)試的用例再單獨(dú)寫(xiě)出來(lái)進(jìn)行補(bǔ)充,不改動(dòng)前邊已經(jīng)確認(rèn)過(guò)的白盒測(cè)試的測(cè)試用例。文尾,須明確兩個(gè)觀點(diǎn):其一、多重條件覆蓋準(zhǔn)那么要優(yōu)于其他準(zhǔn)那么;其二、任何邏輯覆蓋準(zhǔn)那么尚缺乏以勝任作為生成模塊測(cè)試用例的惟一手段。同樣,無(wú)論在白盒測(cè)試中判定狀態(tài)或生成測(cè)試用例時(shí)都需要利用這樣一個(gè)輔助手段:列表;即,狀態(tài)判定表。?TheArtofSoftWareTesting?讀書(shū)筆記〔24〕_增量測(cè)試與非增量測(cè)試執(zhí)行單元測(cè)試過(guò)程中,有兩點(diǎn)需考慮:其一、如何設(shè)計(jì)一個(gè)有效的測(cè)試用例集;其二、將模塊組裝成工作程序的方式。前者涉及的內(nèi)容在上篇已表達(dá)過(guò),而后者,涉及模塊測(cè)試用例編寫(xiě)的形式、可能用到的測(cè)試工具類型、模塊編碼和測(cè)試的順序、生成測(cè)試用例的本錢(qián)以及調(diào)試的本錢(qián)等。它有兩種具體實(shí)現(xiàn)方法:增量測(cè)試〔自頂向下和自底向上的開(kāi)發(fā)或測(cè)試過(guò)程〕、非增量測(cè)試。增量測(cè)試:將測(cè)試的模塊組裝到測(cè)試完成的模塊集合中,再進(jìn)行測(cè)試。且必須要為每個(gè)模塊準(zhǔn)備一個(gè)驅(qū)動(dòng)模塊,但不需要樁模塊。非增量測(cè)試:先要獨(dú)立地測(cè)試每個(gè)模塊,再將這些模塊組裝成完整的程序。且測(cè)試單獨(dú)的模塊時(shí),需一個(gè)特殊的驅(qū)動(dòng)模塊和一個(gè)或多個(gè)樁模塊。驅(qū)動(dòng)模塊:人們編寫(xiě)的一個(gè)小模塊,用來(lái)將測(cè)試用例驅(qū)動(dòng)或傳輸?shù)奖粶y(cè)模塊中,也可以用測(cè)試工具替代;還必須向測(cè)試人員顯示該模塊的結(jié)果。樁模塊:被測(cè)模塊可能調(diào)用到了其他的模塊,所以還必須使用一個(gè)額外的組件,即:特殊模塊,用于模擬被調(diào)用模塊的功能。文尾,需提及一個(gè)結(jié)論:增量測(cè)試要更好一些。原因如下:非增量測(cè)試所需的工作量要多一些;〔樁模塊〕增量測(cè)試可以較早發(fā)現(xiàn)模塊中與之不匹配接口、不正確假設(shè)相關(guān)的編程錯(cuò)誤;增量測(cè)試,調(diào)試會(huì)進(jìn)行得比擬容易些;〔調(diào)試〕增量測(cè)試會(huì)將測(cè)試進(jìn)行得更徹底;〔可能會(huì)誘發(fā)先前測(cè)試完的模塊出現(xiàn)新缺陷,且會(huì)經(jīng)受更多的檢驗(yàn)〕非增量測(cè)試所占用的機(jī)器時(shí)間顯得少一些;模塊測(cè)試階段開(kāi)始時(shí),非增量測(cè)試,就會(huì)有更多的時(shí)機(jī)進(jìn)行并行操作,即:所有的模塊可以同時(shí)測(cè)試。?TheArtofSoftWareTesting?讀書(shū)筆記〔25〕_幾個(gè)誤解在開(kāi)始概述兩種增量測(cè)試方法之前,作者對(duì)幾個(gè)誤解給予了澄清:自頂向下的測(cè)試、自頂向下的開(kāi)發(fā)、自頂向下的設(shè)計(jì)被常用作近義詞。自頂向下的測(cè)試和自頂向下的開(kāi)發(fā)確實(shí)是近義詞,表示安排模塊的編碼和測(cè)試順序的策略;而自頂向下的設(shè)計(jì)那么完全不同并且是獨(dú)立的概念,即:按自頂向下模塊設(shè)計(jì)的程序既可使用自頂向下的方式,也可使用自底向上的方式進(jìn)行增量測(cè)試。自底向上的測(cè)試〔或自底向上的開(kāi)發(fā)〕常被錯(cuò)誤得當(dāng)作非增量測(cè)試;原因在于自底向上的測(cè)試的開(kāi)展方式與非增量測(cè)試是相同的,即:對(duì)底層或終端模塊進(jìn)行測(cè)試。?TheArtofSoftWareTesting?讀書(shū)筆記〔26〕_自頂向下測(cè)試、自底向上測(cè)試自頂向下測(cè)試,是從程序的頂部或初始模塊開(kāi)始。測(cè)試開(kāi)始之后,挑選哪一個(gè)后續(xù)模塊進(jìn)行增量測(cè)試沒(méi)有惟一正確的方法;惟一的原那么是:要成為符合條件的下一個(gè)模塊,至少一個(gè)該模塊的附屬模塊〔調(diào)用它的模塊〕事先經(jīng)過(guò)了測(cè)試。該測(cè)試策略里邊最關(guān)鍵的可能就是編寫(xiě)樁模塊了。它涉及到的幾個(gè)關(guān)鍵點(diǎn)概括為:樁模塊的返回信息一定要給予此次調(diào)用所希望的返回值,否那么調(diào)用模塊將會(huì)發(fā)生失效或是產(chǎn)生一個(gè)混亂的結(jié)果;早期,測(cè)試數(shù)據(jù)要通過(guò)其一個(gè)或多個(gè)樁模塊提交給模塊的。需要指出一點(diǎn),就是測(cè)試完一個(gè)模塊后,就用一個(gè)實(shí)際的模塊代替其中的一個(gè)樁模塊,而該模塊需要的樁模塊也被添加起來(lái)。需要注意的是:不存在最正確的模塊序列。但盡量讓包含I/O操作的樁模塊和重要的樁模塊添入。自底向上測(cè)試,是開(kāi)始于程序的終端模塊,此類模塊不再調(diào)用其他任何模塊。測(cè)試完這些模塊之后,同樣沒(méi)有最正確的方法來(lái)挑選要進(jìn)行增量測(cè)試的下一個(gè)模塊;惟一正確的原那么是:要成為符合條件的下一個(gè)模塊,該模塊所有的附屬模塊〔它調(diào)用的模塊〕都已經(jīng)事先經(jīng)過(guò)了測(cè)試。需要指出的是,如果終端模塊是多個(gè)的話,既可以進(jìn)行串行測(cè)試,也可以進(jìn)行并行測(cè)試。且每一個(gè)模塊都需要一個(gè)特殊的驅(qū)動(dòng)模塊,即:包含著有效的測(cè)試輸入、調(diào)用被測(cè)模塊且將輸出顯示出來(lái)〔或?qū)?shí)際輸出與預(yù)期輸出作比擬〕的模塊。對(duì)于測(cè)試序列也同自頂向下測(cè)試的一樣。?TheArtofSoftWareTesting?讀書(shū)筆記〔27〕_幾個(gè)注意點(diǎn)本章,最后作者給予了單元測(cè)試的其他局部的實(shí)際測(cè)試策略。應(yīng)對(duì)測(cè)試用例進(jìn)行測(cè)試。當(dāng)測(cè)試用例造成模塊輸出的實(shí)際結(jié)果與預(yù)期結(jié)果不匹配的情況時(shí),存在兩個(gè)可能的解釋:要么該模塊存在錯(cuò)誤;要么預(yù)期的結(jié)果不正確〔測(cè)試用例不正確〕,所以為了將這種混亂降低到最低程度,應(yīng)在測(cè)試執(zhí)行之前對(duì)測(cè)試用例集進(jìn)行審核或檢查。使用自動(dòng)化測(cè)試工具可以使測(cè)試過(guò)程中的枯燥勞動(dòng)減至最低;在準(zhǔn)備單元測(cè)試時(shí),要重溫以下心理學(xué)和經(jīng)濟(jì)學(xué)原那么,會(huì)有所裨益的;因?yàn)閭€(gè)人試圖測(cè)試自己編寫(xiě)的程序所帶來(lái)的心理學(xué)問(wèn)題,也適用于模塊測(cè)試。?TheArtofSoftWareTesting?讀書(shū)筆記〔28〕_更高級(jí)別的測(cè)試本書(shū)第六章,主要講的是更高級(jí)別的測(cè)試,它最適合用于軟件產(chǎn)品??蓮膬蓚€(gè)層面來(lái)概述。更高級(jí)別的測(cè)試當(dāng)程序無(wú)法實(shí)現(xiàn)其最終用戶要求的合理功能時(shí),就發(fā)生了一個(gè)軟件錯(cuò)誤。因而即使完成了一次非常完美的單元測(cè)試,仍然不能保證已經(jīng)找出了程序中的所有錯(cuò)誤,所以必須有這一測(cè)試環(huán)節(jié)。軟件開(kāi)發(fā)過(guò)程與測(cè)試過(guò)程的對(duì)應(yīng)軟件開(kāi)發(fā)過(guò)程在很大程度上是溝通有關(guān)最終程序的信息、并將信息從一種形式轉(zhuǎn)換到另一種形式,因此,絕大局部軟件錯(cuò)誤都可以歸因?yàn)樾畔贤ê娃D(zhuǎn)換時(shí)發(fā)生的故障。現(xiàn)有三個(gè)補(bǔ)充的方法來(lái)預(yù)防或識(shí)別這些錯(cuò)誤,它們分別是:可以使軟件開(kāi)發(fā)過(guò)程更加精密,以防其中出現(xiàn)很多錯(cuò)誤;在每個(gè)階段結(jié)束時(shí),可以引入一個(gè)獨(dú)立的驗(yàn)證過(guò)程,在進(jìn)入下一個(gè)階段之前盡可能多地發(fā)現(xiàn)問(wèn)題;對(duì)不同的開(kāi)發(fā)階段采用不同的測(cè)試方法。即:將每一個(gè)測(cè)試過(guò)程都重點(diǎn)針對(duì)一個(gè)特定的轉(zhuǎn)換步驟,從而也針對(duì)一類具體的錯(cuò)誤。〔能在開(kāi)發(fā)過(guò)程和測(cè)試過(guò)程之間建立起一對(duì)一的聯(lián)系,能防止沒(méi)有效果的多余測(cè)試,并使我們不會(huì)遺漏掉大量的錯(cuò)誤類型?!澄奈玻枳⒚鞯氖牵簻y(cè)試過(guò)程順序并不一定意味著嚴(yán)格的時(shí)間順序,多種測(cè)試在時(shí)間上是可以發(fā)生局部重疊測(cè)試的。但需要說(shuō)明,集成測(cè)試往往并不作為一個(gè)獨(dú)立的測(cè)試步驟,而且在進(jìn)行增量模塊測(cè)試時(shí),它是模塊測(cè)試的隱含局部?!查_(kāi)發(fā)過(guò)程與測(cè)試過(guò)程的對(duì)應(yīng)關(guān)系圖,由于篇幅的原因,在此就不再表達(dá)?!?TheArtofSoftWareTesting?讀書(shū)筆記〔29〕_功能測(cè)試功能測(cè)試,作者從三個(gè)方面來(lái)概述:定義上:是一個(gè)試圖發(fā)現(xiàn)程序與其外部規(guī)格說(shuō)明之間存在不一致的過(guò)程。方法上:通常是一項(xiàng)黑盒測(cè)試,即:要依賴早期的單元測(cè)試的過(guò)程來(lái)實(shí)現(xiàn)理想的白盒邏輯覆蓋準(zhǔn)那么。過(guò)程上:需要對(duì)規(guī)格說(shuō)明進(jìn)行分析以獲取測(cè)試用例集。?TheArtofSoftWareTesting?讀書(shū)筆記〔30〕_系統(tǒng)測(cè)試、系統(tǒng)測(cè)試的執(zhí)行作者從兩個(gè)方面來(lái)概述一下系統(tǒng)測(cè)試,至于細(xì)節(jié)就不再詳細(xì)表達(dá)了。對(duì)錯(cuò)誤理解方面而言,主要是容易跟功能測(cè)試混淆?!矐?yīng)重點(diǎn)注意那些在設(shè)計(jì)外部規(guī)格說(shuō)明的過(guò)程中所犯的轉(zhuǎn)換錯(cuò)誤?!硨?duì)困難性而言,是由于要將程序與其目標(biāo)進(jìn)行比擬,是系統(tǒng)測(cè)試的核心目的,可是沒(méi)有說(shuō)明使用什么樣的測(cè)試用例設(shè)計(jì)方法。因此,系統(tǒng)測(cè)試采取一種不同的測(cè)試用例設(shè)計(jì)法,共計(jì)15種的系統(tǒng)測(cè)試策略?!簿唧w每個(gè)測(cè)試策略所采用的步驟就不再表達(dá)了?!乘鼈兎謩e是:能力測(cè)試、容量測(cè)試、強(qiáng)度測(cè)試、易用性測(cè)試、平安性測(cè)試、性能測(cè)試、存儲(chǔ)測(cè)試、配置測(cè)試、兼容性/配置/轉(zhuǎn)換測(cè)試、安裝測(cè)試、可靠性測(cè)試、可恢復(fù)性測(cè)試、適用性測(cè)試、文檔測(cè)試、過(guò)程測(cè)試。系統(tǒng)測(cè)試的執(zhí)行,所涉及的關(guān)鍵是:規(guī)定了不能進(jìn)行系統(tǒng)測(cè)試的人員及機(jī)構(gòu):一是程序員;一是負(fù)責(zé)該程序開(kāi)發(fā)的機(jī)構(gòu)。原因如下:執(zhí)行系統(tǒng)測(cè)試的人思考問(wèn)題的方式必須與最終用戶相同;系統(tǒng)測(cè)試是一項(xiàng)“隨心所欲,百無(wú)禁忌〞的活動(dòng),而軟件開(kāi)發(fā)機(jī)構(gòu)會(huì)受到心理束縛,有悖于此項(xiàng)活動(dòng)。大多數(shù)的開(kāi)發(fā)機(jī)構(gòu)最為關(guān)心的是讓系統(tǒng)測(cè)試進(jìn)行得盡可能順利并按時(shí)完成,而不會(huì)盡力證明程序不能滿足其目標(biāo)。系統(tǒng)測(cè)試至少應(yīng)由很少受開(kāi)發(fā)機(jī)構(gòu)左右的獨(dú)立人群來(lái)執(zhí)行。也許最經(jīng)濟(jì)的執(zhí)行系統(tǒng)測(cè)試的方法,是將測(cè)試分包給一個(gè)獨(dú)立的公司來(lái)完成。?TheArtofSoftWareTesting?讀書(shū)筆記〔31〕_驗(yàn)收測(cè)試與安裝測(cè)試、測(cè)試的方案與控制驗(yàn)收測(cè)試,通常是由訂購(gòu)方〔用戶〕來(lái)進(jìn)行驗(yàn)收測(cè)試,并將程序的實(shí)際操作與原始合同進(jìn)行對(duì)照的,其測(cè)試用例是為了盡力證明程序沒(méi)有滿足合同要求。所以,明智的用戶首先會(huì)進(jìn)行一次驗(yàn)收測(cè)試以判斷產(chǎn)品是否滿足其要求的。安裝測(cè)試,不是為了發(fā)現(xiàn)軟件中的錯(cuò)誤,而是為了發(fā)現(xiàn)在安裝過(guò)程中出現(xiàn)的錯(cuò)誤。錯(cuò)誤類型主要為:用戶必須選擇大量的選項(xiàng);必須分配并加載文件和庫(kù);必須進(jìn)行有效的硬件配置;軟件可能要求網(wǎng)絡(luò)聯(lián)通,以便與其他軟件連接。并且,安裝測(cè)試應(yīng)由生產(chǎn)軟件系統(tǒng)的機(jī)構(gòu)來(lái)設(shè)計(jì),作為軟件的一局部來(lái)發(fā)布,在系統(tǒng)安裝完成之后進(jìn)行。此外,測(cè)試用例需要檢查以確認(rèn)已選的選項(xiàng)集合互不沖突,系統(tǒng)的所有部件全部存在,所有的文件已經(jīng)創(chuàng)立并包含必須內(nèi)容,硬件配置妥當(dāng)?shù)取?/p>

文尾,提及一下作者所講述的測(cè)試的管理和方案。一個(gè)良好的測(cè)試方案應(yīng)該包括以下幾點(diǎn):目標(biāo)、結(jié)束準(zhǔn)那么、進(jìn)度、責(zé)任、測(cè)試用例庫(kù)及標(biāo)準(zhǔn)、工具、計(jì)算機(jī)時(shí)間、硬件配置、集成、跟蹤步驟、調(diào)試步驟、回歸測(cè)試。?TheArtofSoftWareTesting?讀書(shū)筆記〔32〕_測(cè)試結(jié)束準(zhǔn)那么、獨(dú)立的測(cè)試機(jī)構(gòu)測(cè)試結(jié)束準(zhǔn)那么,常常用到的且是沒(méi)有任何作用的兩個(gè)準(zhǔn)那么是:用完了安排的測(cè)試時(shí)間后,測(cè)試便結(jié)束;當(dāng)執(zhí)行完所有測(cè)試用例都未發(fā)現(xiàn)錯(cuò)誤,測(cè)試便結(jié)束。即:當(dāng)所有的測(cè)試用例不成功時(shí)便結(jié)束。作者在這里給予了三類較為有用的結(jié)束準(zhǔn)那么,它們分別是:有用但不是最正確的準(zhǔn)那么,根據(jù)的是特定的測(cè)試用例技術(shù);最有價(jià)值的準(zhǔn)那么,是以確切的數(shù)量來(lái)描述結(jié)束測(cè)試的條件;在測(cè)試過(guò)程中記錄每單位時(shí)間內(nèi)發(fā)現(xiàn)的錯(cuò)誤數(shù)量;并通過(guò)檢查統(tǒng)計(jì)曲線的形狀,來(lái)確定是否繼續(xù)或終止該階段的測(cè)試。最正確結(jié)束準(zhǔn)那么可能還是對(duì)上述三種類型的組合使用。單元測(cè)試用第一類,而其他測(cè)試,用后兩類的組合使用。這種策略還是比擬佳的。文尾,作者談及公司的架構(gòu)中,認(rèn)為測(cè)試部門(mén)應(yīng)盡可能遠(yuǎn)離開(kāi)發(fā)部門(mén)。事實(shí)上,最理想的是測(cè)試機(jī)構(gòu)不應(yīng)是同一個(gè)公司的一局部,因?yàn)槿绻皇沁@樣,測(cè)試機(jī)構(gòu)仍然會(huì)受到與開(kāi)發(fā)部門(mén)同樣的管理壓力的影響。所以解決這個(gè)矛盾的一個(gè)方法就是雇傭獨(dú)立的公司進(jìn)行軟件測(cè)試。這樣以來(lái),就可以提升了測(cè)試過(guò)程中的積極性、建立了與開(kāi)發(fā)機(jī)構(gòu)的良性競(jìng)爭(zhēng)、防止了測(cè)試過(guò)程處于開(kāi)發(fā)機(jī)構(gòu)的管理控制之下,以及獨(dú)立的測(cè)試機(jī)構(gòu)帶來(lái)的解決問(wèn)題的專業(yè)知識(shí)。?TheArtofSoftWareTesting?讀書(shū)筆記〔33〕_調(diào)試、暴力法調(diào)試作者在該書(shū)第七章著重講述了調(diào)試的五種方法。不過(guò)有必要先明確一下調(diào)試的定義。調(diào)試,是執(zhí)行一次成功的測(cè)試之后所要進(jìn)行的工作。它有兩個(gè)步驟:從錯(cuò)誤定位〔可解決95%的問(wèn)題〕;再錯(cuò)誤修改。而對(duì)于各種方法的具體步驟及過(guò)程,都不再詳敘。暴力法調(diào)試,不需要過(guò)多的思考,但同時(shí)也是效率低下,即:不是很成功。它至少可被劃分為三種類型:用內(nèi)存信息輸出來(lái)調(diào)試;根據(jù)一般的“在程序中插入打印語(yǔ)句〞建議來(lái)調(diào)試;使用自動(dòng)化的調(diào)試工具進(jìn)行調(diào)試〔可設(shè)置斷點(diǎn)〕。不過(guò),該方法的主要問(wèn)題在于:它忽略了思考的過(guò)程。因此,該方法的使用情況為:其它的方法都失敗了;座位其它方法思考過(guò)程的補(bǔ)充,而不是替代方法。?TheArtofSoftWareTesting?讀書(shū)筆記〔34〕_歸納法、演繹法、回溯法、測(cè)試法調(diào)試及其原那么、錯(cuò)誤分析歸納法調(diào)試,是一個(gè)需要思考的過(guò)程。歸納,是一種特殊的思考過(guò)程,可以從細(xì)節(jié)轉(zhuǎn)到全局,即:從線索除法,尋找線索之間的聯(lián)系。也就意味著:從特殊到一般。歸納調(diào)試的步驟可以概括為以下一個(gè)圖,在此就不再詳敘。演繹法調(diào)試,也是一個(gè)需要思考的過(guò)程。演繹,是從一些普遍的理論或前提除法,使用排除和精煉的過(guò)程,到達(dá)一個(gè)結(jié)論,即:錯(cuò)誤的位置。其步驟也可以通過(guò)一個(gè)圖來(lái)概述,在此就不再詳敘。

回溯法調(diào)試,也是一個(gè)需要思考的過(guò)程。它常用于小型程序中來(lái)定位錯(cuò)誤。它是沿著程序的邏輯結(jié)構(gòu)回溯不正確的結(jié)果,直到找出程序邏輯錯(cuò)誤的位置,即:從程序產(chǎn)生不正確結(jié)果的地方開(kāi)始,從該處觀察到的結(jié)果推斷出程序變量應(yīng)該是些什么值。所以使用這個(gè)過(guò)程,可以確定程序中從狀態(tài)符合預(yù)期的位置點(diǎn),到第一個(gè)狀態(tài)不符合預(yù)期值的位置點(diǎn)之間的范圍。測(cè)試法調(diào)試,也是一個(gè)需要思考的過(guò)程。它是要使用測(cè)試用例來(lái)調(diào)試。而測(cè)試用例可分兩類:供測(cè)試的測(cè)試用例;供調(diào)試的測(cè)試用例。〔注意兩者的不同之處。〕不過(guò),該方法不是一個(gè)完全獨(dú)立的方法。它常常與歸納法一起使用,以獲得進(jìn)行假設(shè)和/或證明假設(shè)所需的信息;它也可以和演繹法一起使用,以排除有嫌疑的原因,提煉剩下的假設(shè),并/或證明假設(shè)。文尾,作者給予了調(diào)試的一些原那么〔首先是定位錯(cuò)誤的原那么;其次是修改錯(cuò)誤的技術(shù)〕,及詳細(xì)的錯(cuò)誤分析。?TheArtofSoftWareTesting?讀書(shū)筆記〔35〕_XP作者在第八章著重講述了XP與XT。它設(shè)計(jì)于20世紀(jì)90年代且于1996年進(jìn)行了首次測(cè)試。目前,它依然是最流行的敏捷軟件開(kāi)發(fā)過(guò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論