软件测试的艺术读书笔记
軟件測試心理學(xué)和經(jīng)濟(jì)學(xué)(一)
1、軟件測試的心理學(xué)
在某些情況下,測試人員的態(tài)度可能比實(shí)際的測試過程本身還要重要。
(1)對于“測試”的誤解
軟件測試就是證明軟件不存在錯(cuò)誤的過程。
軟件測試的目的在于證明軟件能夠正確完成其預(yù)定的功能。
軟件測試就是建立一個(gè)“軟件做了其應(yīng)該做的”信心的過程。
(2)正確的理解
每當(dāng)測試一個(gè)程序時(shí),應(yīng)當(dāng)想到要為程序增加一些價(jià)值。如:提高程序的可靠性或質(zhì)量。
測試是為發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。
軟件測試是一個(gè)破壞性的過程,甚至是一個(gè)“施虐”的過程。
軟件的錯(cuò)誤包含兩種:(1)程序沒有實(shí)現(xiàn)預(yù)期功能。(2)程序做了其不應(yīng)該做的。
2、軟件測試的經(jīng)濟(jì)學(xué)
一般來說,要發(fā)現(xiàn)程序中的所有錯(cuò)誤也是不切實(shí)際的,常常也是不可能的。
2.1 黑盒測試
黑盒測試是一種重要的測試策略,又稱為數(shù)據(jù)驅(qū)動(dòng)的測試或輸入/輸出驅(qū)動(dòng)的測試。使用這種測試方法時(shí),將程序視為一個(gè)黑盒子。測試目標(biāo)與程序的內(nèi)部機(jī)制和結(jié)構(gòu)完全無關(guān),而是將重點(diǎn)集中放在發(fā)現(xiàn)程序不按其規(guī)范正確運(yùn)行的環(huán)境條件。在這種方法中,測試數(shù)據(jù)完全來源于軟件規(guī)范(不需要去了解程序的內(nèi)部結(jié)構(gòu))。
如果想要用這種方法來發(fā)現(xiàn)程序的所有錯(cuò)誤,判定的標(biāo)準(zhǔn)就是“窮舉輸入測試”,將所有可能的輸入條件都作為測試用例。
窮舉輸入測試是無法實(shí)現(xiàn)的。兩個(gè)含義:一、我們無法測試一個(gè)程序以確保它是無錯(cuò)的。二、軟件測試中需要考慮的一個(gè)基本問題是軟件測試的經(jīng)濟(jì)學(xué)。也就是說由于窮舉測試是不可能的,測試投入的目標(biāo)在于通過有限的測試用例,最大限度地提高發(fā)現(xiàn)的問題的數(shù)量,以取得最好的測試效果。
2.2 白盒測試
白盒測試,又稱邏輯驅(qū)動(dòng)測試,允許我們檢查程序的內(nèi)部結(jié)構(gòu)。這種測試策略對程序的邏輯結(jié)構(gòu)進(jìn)行檢查,從中獲取測試數(shù)據(jù)。(常常忽略了程序規(guī)范)。
使用測試用例執(zhí)行了程序中所有可能的控制流路徑,那么程序有可能得到了完全測試。此方法稱為窮舉路徑測試。
窮舉路徑測試存在兩個(gè)問題:一、程序中不同邏輯路徑的數(shù)量可能達(dá)到天文數(shù)字,實(shí)際執(zhí)行是不可能且不實(shí)際的。
二、雖然我們可以測試到程序中的所有路徑,但是程序可能仍然存在著錯(cuò)誤。
原因:
1.即使是窮舉路徑測試也決不能保證程序符合其設(shè)計(jì)規(guī)范。
如:要編寫一個(gè)升序排序程序,但錯(cuò)誤的編寫成一個(gè)降序排序的程序。這樣即使進(jìn)行窮舉路徑測試也沒多大價(jià)值,程序本身就是一個(gè)錯(cuò)誤程序,不符合設(shè)計(jì)規(guī)范。
2.程序可能會因?yàn)槿鄙倌承┞窂蕉嬖趩栴}。
窮舉路徑測試不能發(fā)現(xiàn)缺少了哪些必需路徑。
3.窮舉路徑測試可能不會暴露數(shù)據(jù)敏感錯(cuò)誤。
如:程序要比較兩個(gè)數(shù)值是否收斂,也就是檢查兩個(gè)數(shù)值之間的差是否小于某個(gè)既定的值,而僅僅執(zhí)行程序中的每條路徑并不一定能找出錯(cuò)誤。
if(a - b < c)System.out.println("a - b < c");程序的原意是將a - b的絕對值和c比較,要找出這樣的錯(cuò)誤,取決于a,b的取值,而僅僅執(zhí)行程序中的每一條路徑并不一定能找出錯(cuò)誤來。軟件測試的原則
原則1:測試用例中一個(gè)必需部分是對預(yù)期輸出或結(jié)果的定義。
事先精確定義程序的預(yù)期輸出,鼓勵(lì)人們對所有輸出進(jìn)行仔細(xì)檢查。因此,一個(gè)測試用例必須包括兩個(gè)部分: 1.對程序的輸入數(shù)據(jù)描述。 2.對程序在上述輸入數(shù)據(jù)下的正確輸出結(jié)果的精確描述。原則2:程序員應(yīng)當(dāng)避免測試自己編寫的程序。
當(dāng)程序員“建設(shè)性”地設(shè)計(jì)和編寫完程序之后,很難讓他突然改變視角以一種“破壞性”的眼光來審查程序。 原因有兩個(gè): 1.大多數(shù)程序員都不能有效地測試自己編寫的程序,因?yàn)樗麄儫o法改變思維方式來盡力暴露自己程序中的錯(cuò)誤。另外,程序員可能會下意識地避免找出錯(cuò)誤來,擔(dān)心受到同事、上司、客戶或正在開發(fā)的程序或系統(tǒng)的主管的懲罰。 2.另一個(gè)原因,由于程序員錯(cuò)誤地理解了疑難定義或規(guī)范,導(dǎo)致程序中存在錯(cuò)誤。如果情況是這樣,程序員可能會帶著同樣的誤解來測試自己的程序。以上論據(jù)不適合于“調(diào)試”,“調(diào)試”由程序的編寫人員來完成會有效的多。原則3:編寫軟件的組織不應(yīng)當(dāng)測試自己編寫的軟件。
由于一個(gè)軟件項(xiàng)目或編程組織是一個(gè)有機(jī)的機(jī)構(gòu),具有與個(gè)體程序員相似的心理問題。原則4:應(yīng)當(dāng)徹底檢查每個(gè)測試的執(zhí)行結(jié)果。
原則5:測試用例的編寫不僅應(yīng)當(dāng)根據(jù)有效和預(yù)期的輸入情況,而且也應(yīng)當(dāng)根據(jù)無效和未預(yù)料到的輸入情況。
在軟件產(chǎn)品中突然暴露出來的許多問題是當(dāng)程序以某些新的或未預(yù)料到的方式運(yùn)行時(shí)發(fā)現(xiàn)的。因此,針對未預(yù)料到的和無效輸入情況的測試用例,似乎比針對有效輸入情況的那些用例更能發(fā)現(xiàn)問題。原則6:檢查程序是否“未做其應(yīng)該做的”僅是測試的一半,測試的另一半是檢查程序是否“做了其不應(yīng)該做的”。
這條原則是上一條原則的必然結(jié)果,必須檢查程序是否有我們不希望的負(fù)作用。原則7:應(yīng)避免測試用例用后即棄,除非軟件本身就是一個(gè)一次性的軟件。
由于測試用例用后即棄,一旦軟件需要重新測試(如:當(dāng)改正了某個(gè)錯(cuò)誤或作了某種改進(jìn)后),又必須重新設(shè)計(jì)這些測試用例。情況往往是這樣的,由于重新設(shè)計(jì)測試用例需要投入大量的工作,人們總是避免這樣做。因此,對該程序的重新測試極少會同上一次一樣嚴(yán)格。這就意味著,如果對程序的更改導(dǎo)致了程序某個(gè)先前可以執(zhí)行的部分發(fā)生了故障,這個(gè)故障往往是不會被發(fā)現(xiàn)的。保留測試用例,當(dāng)程序其他部件發(fā)生更動(dòng)后重新執(zhí)行,這就是我們所謂的“回歸測試”。原則8:計(jì)劃測試工作時(shí)不應(yīng)默許假定不會發(fā)現(xiàn)錯(cuò)誤。
測試,是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程,不是證明程序正確運(yùn)行的過程。原則9:程序某部分存在更多錯(cuò)誤的可能性,與該部分已發(fā)現(xiàn)錯(cuò)誤的數(shù)量成正比。
錯(cuò)誤總是傾向于聚集存在,而在一個(gè)具體的程序中,某些部分要比其他部分更容易存在錯(cuò)誤,盡管沒有人能夠?qū)@種現(xiàn)象給出很好的解釋。原則10:軟件測試是一項(xiàng)極富創(chuàng)造性、極具智力挑戰(zhàn)性的工作。
幾個(gè)重要的測試原則(總結(jié))
(1)軟件測試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行的過程。 (2)盡量避免編碼人員測試自己的程序。 (3)好的測試用例能夠?qū)ξ窗l(fā)現(xiàn)的錯(cuò)誤高度敏感。 (4)成功的測試用例能夠發(fā)現(xiàn)未知的錯(cuò)誤。 (5)成功的測試用例需要仔細(xì)定義輸入輸出的期望值。 (6)成功的測試需要仔細(xì)研究分析測試結(jié)果。總結(jié)
以上是生活随笔為你收集整理的软件测试的艺术读书笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PDA开发系列:GPS模块的调用
- 下一篇: 保持一颗好学之心