本書涵蓋了軟件測試的方方面面:軟件測試如何適應軟件開發(fā)過程,基本的和高級的軟件測試技術(shù),在常見的測試任務(wù)中運用測試技能,使用自動化提高測試的效率,測
試工作的計劃和文檔化,有效地報告發(fā)現(xiàn)的問題,衡量測試工作的成效和產(chǎn)品的改進,
測試和質(zhì)量保證的區(qū)別,尋求軟件測試員的工作。
本書適合軟件測試人員及希望未來從事軟件測試的其他專業(yè)人員閱讀,也適合高等
院校相關(guān)專業(yè)的學生及教師參考。
提供軟件測試、質(zhì)量保證領(lǐng)域的實用見解及如何在程序中發(fā)現(xiàn)問題、規(guī)劃有效的測試方法和預測發(fā)布。
當今社會似乎每天都有關(guān)于計算機軟件問題或安全缺陷暴露的新聞報道:銀行給出不正確的賬目收支報表、火星探測器在太空失蹤、食品店收銀機掃描器多算了香蕉的錢,或者某位黑客獲得了數(shù)百萬張信用卡號的訪問權(quán)。
為什么會出現(xiàn)這些問題呢?難道程序員不能想出辦法讓軟件僅僅做簡單的工作嗎?答案是否定的。隨著軟件變得越來越復雜,軟件的功能越來越多,軟件的互聯(lián)性越來越強,使得編寫一個無故障的程序越來越難,事實上已經(jīng)不可能。不論程序員多有能力,也不論他有多細心,他的程序中都難免會出現(xiàn)問題。
這就是引入軟件測試的原因。我們都看到在新衣服的口袋里有“檢驗員12號”的小標記,軟件也一樣有檢驗標記。許多大的軟件公司里一個程序員配一個或多個測試員,以保證軟件質(zhì)量。從游戲軟件,到工廠自動化生產(chǎn)軟件,再到商業(yè)應用軟件,都是如此。
本書將向你介紹軟件測試的基礎(chǔ)知識,不僅講述基本的技能,還講述成為一個成功的軟件測試員必需的技能。你將會學到,如何迅速在任一計算機程序中發(fā)現(xiàn)問題,如何計劃一個有效的測試步驟,如何清楚地報告發(fā)現(xiàn)的問題,以及如何告知軟件在何時發(fā)布。
關(guān)于本書第2版
在我寫《軟件測試》第1版的時候,軟件安全性問題還只是剛開始在新聞標題中出現(xiàn)。雖然黑客和安全問題一直都是一個難題,但是隨著互聯(lián)網(wǎng)的爆炸性發(fā)展,業(yè)界幾乎無人能預計安全漏洞對軟件開發(fā)者和使用者的影響有多大。
在第2版中,我又重新審閱了各章,著重強調(diào)了軟件安全問題,并指出了如何使用貫穿全書的基本測試技術(shù)來預防、查找、修正安全問題。我還增加了一章,專門講述如何測試軟件安全漏洞。
如果你是第1版的讀者,你會知道一個道理:不管你做多大的努力,你的軟件都會帶著缺陷發(fā)布。在第2版中,這也是一個真理—甚至帶著安全問題發(fā)布。然而,通過對本書所講述內(nèi)容的長期應用,能達到確保測試中絕大多數(shù)重要的缺陷都不會漏掉的目標,并且使你的團隊開發(fā)出高質(zhì)量、高安全性的軟件成為可能。
本書的讀者對象
本書適用于三類不同的讀者:
有興趣將軟件測試作為全職工作、實習或合作工作的學生或電腦愛好者。在面試前或第一天工作前閱讀這本書以求在新上司眼里留下好印象。
改變職業(yè),希望從原來的專業(yè)領(lǐng)域轉(zhuǎn)入軟件產(chǎn)業(yè)領(lǐng)域的人。本書給非軟件專業(yè)的人員很多將其原專業(yè)知識應用到軟件測試中的機會。例如,飛行教導員可以測試飛行模擬游戲,會計可以測試稅務(wù)申報軟件,教師可以測試新的兒童教育程序。
想對軟件測試方面的知識增強了解的程序員、軟件項目經(jīng)理、軟件開發(fā)團隊的其他人員。
本書可以為你帶來什么
從本書中可以學到關(guān)于軟件測試的幾乎所有方面的內(nèi)容:
軟件測試如何適應軟件開發(fā)過程
基本的和高級的軟件測試技術(shù)
在常見的測試任務(wù)中運用測試技能
引入自動化提高測試的效率
測試工作的計劃和文檔化
有效地報告發(fā)現(xiàn)的問題
衡量測試工作的成效和產(chǎn)品的改進
測試和質(zhì)量保證的區(qū)別
尋求軟件測試員的工作
本書必須用到的軟件
本書講述的方法是通用的,可以用于測試任何類型的計算機軟件。但是,為了使大多數(shù)讀者熟悉并使用例子,這些例子都是基于一些簡單的程序,例如Windows XP和Windows NT/2000所帶的計算器、記事本、寫字板。
即使使用的是運行Linux或其他操作系統(tǒng)的PC或Mac電腦,也可以輕易地在系統(tǒng)中找到和本書中類似的程序。發(fā)揮創(chuàng)造力吧!創(chuàng)造性是優(yōu)秀軟件測試員應具備的素質(zhì)。
本書中針對不同的應用程序、軟件缺陷、軟件測試工具所舉的例子絕不是有意在對這些軟件進行肯定或否定,這些例子僅僅用來演示軟件測試的概念。
本書的組織方式
編寫本書的目的是引導讀者通過基礎(chǔ)知識和必要技能的學習而成為一個優(yōu)秀的軟件測試員。軟件測試并不是不停地敲擊鍵盤,希望能最終使計算機崩潰這樣一回事,在它后面包含了大量的科學和工程、規(guī)則和計劃,也有很多的樂趣—你很快就會看到。
第一部分 軟件測試綜述
第一部分是本書的基礎(chǔ),該部分講述了軟件產(chǎn)品是如何開發(fā)出來的,軟件測試如何應用到整個開發(fā)過程中。你將會懂得軟件測試的重要性,并對軟件測試工作量的巨大產(chǎn)生正確的認識。
第1章,“軟件測試的背景”,幫助你理解什么是軟件缺陷,軟件缺陷到底有多嚴重,為什么軟件缺陷會發(fā)生。你會了解到作為一個軟件測試員最終的目標是什么,以及成為一個優(yōu)秀的軟件測試員應該具有哪些特點。
第2章,“軟件開發(fā)的過程”,介紹團體進行軟件產(chǎn)品生產(chǎn)的總體過程。你會了解到軟件生產(chǎn)中有哪些典型的過程,哪些人員對此做出了貢獻,以及可以應用的不同的過程模型。
第3章,“軟件測試的實質(zhì)”,對軟件開發(fā)的事實進行分析。你會了解到為什么無論你做多大的努力,軟件永遠都不會完美,還會了解到本書中用到的一些基本的術(shù)語和概念。
第二部分 測試基礎(chǔ)
第二部分講述軟件測試的基本方法,軟件測試工作分為四個方面,每個方面的技術(shù)都用一章來描述。
第4章,“檢查產(chǎn)品說明書”,講述如何通過詳細檢查軟件文檔來發(fā)現(xiàn)缺陷。
第5章,“帶上眼罩測試軟件”,講述在沒有代碼甚至不懂得編程的情況下的軟件測試技術(shù),這是最常用的測試類型。
第6章,“檢查代碼”,講述如何通過詳細的程序代碼分析來發(fā)現(xiàn)缺陷。你會了解到并非高級程序員才能運用此方法。
第7章,“帶上X光眼鏡測試軟件”,講述如何通過代碼評審或觀察動態(tài)運行測試獲得的信息來改進測試。
第三部分 運用測試技術(shù)
第三部分把第二部分學到的技術(shù)應用到軟件測試員今后會遇到的實戰(zhàn)環(huán)境中。
第8章,“配置測試”,講述如何針對不同的硬件配置和平臺來組織和執(zhí)行軟件測試。
第9章,“兼容性測試”,講述如何針對不同的軟件應用程序和操作系統(tǒng)交互的問題進行測試。
第10章,“外國語言測試”,有很多軟件,當其被翻譯成其他語言時會引起一些特殊問題,這時測試顯得很重要。
第11章,“易用性測試”,講述在檢查軟件程序的用戶界面時,如何應用測試技術(shù),如何確保軟件對于殘障人士也能適用。
第12章,“文檔測試”,講述如何檢查軟件的文檔的缺陷,例如幫助文檔、用戶手冊,甚至是市場宣傳資料。
第13章,“軟件安全性測試”,講述如何針對想象中安全的計算機系統(tǒng)和數(shù)據(jù),發(fā)現(xiàn)被黑客突破的安全缺陷。
第14章,“網(wǎng)站測試”,將目前學到的所有技術(shù)應用到實際測試中,你會發(fā)現(xiàn)即使簡單到一個網(wǎng)站的測試,也涉及了軟件測試的各個方面。
第四部分 測試的補充
第四部分講述如何通過技術(shù)和人員的合理調(diào)配,提高測試的覆蓋率和深入程度,使測試更有效。
第15章,“自動測試和測試工具”,講述如何使用計算機軟件來測試其他軟件。你會了解到使用工具測試和自動化測試的不同方法,還會了解到使用工具測試并不十分簡單。
第16章,“缺陷轟炸和beta測試”,講述如何利用其他人員從不同角度使用軟件,發(fā)現(xiàn)那些你完全忽略的缺陷。
第五部分 使用測試文檔
第五部分涉及如何使軟件測試文檔化,使軟件測試的計劃、測試缺陷、測試結(jié)果對項目團隊中每個成員都可見,且能理解。
第17章,“計劃測試工作”,講述創(chuàng)建項目測試計劃涉及的工作。作為一個軟件測試的新手,你可能不會馬上就能寫測試計劃,一切都得從零開始,但是了解測試計劃的內(nèi)容以及寫測試計劃的原因是很重要的。
第18章,“編寫和跟蹤測試用例”,講述如何正確規(guī)范地編寫測試用例,使其他測試員也能使用。
第19章,“報告發(fā)現(xiàn)的問題”,講述如何報告缺陷,如何整理出重現(xiàn)缺陷的必要步驟,如何描述缺陷使其他人可以理解并愿意修改。
第20章,“成效評價”,描述不同類型的數(shù)據(jù)、圖表,用來標記測試的過程和進展,以及達到軟件發(fā)布的步驟。
第六部分 軟件測試的未來
第六部分講述軟件測試的未來以及軟件測試的職業(yè)。
第21章,“軟件質(zhì)量保證”,講述軟件測試和軟件質(zhì)量保證之間的巨大區(qū)別,你會了解到不同的軟件產(chǎn)業(yè)標準,諸如ISO 9000和軟件能力成熟度模型,以及達到這些標準的要求。
第22章,“軟件測試員的職業(yè)”,講述成為軟件測試員遇到的障礙。你可以了解到有哪些類型的工作以及到哪里去找這些工作,其中還有許多的提示和信息。
附錄
本書每一章結(jié)尾都有一個小測驗,用于測試所學到的測試概念。附錄A給出了答案。
本書所采用的規(guī)范
注意是每一章材料的附屬材料,用來澄清概念和程序。
技巧提供常見問題的快捷路徑和解決方案。
提示提到在前面章節(jié)討論的內(nèi)容,有助于對已講知識的回憶以及增強對重要概念的認識。
致謝
非常感謝Sams出版社、編輯和其他工作人員,他們?yōu)槲掖藭?版的出版做了大量的工作。感謝資深評論人Danny Faught,他為此書提出了寶貴的意見。
感謝我的父母Walter和Eleanore,在1977年時,他們同意我停修手風琴課并給我買了一臺TRS-80 I型計算機。感謝我的姐姐Saundra,父母都忙于指揮她的比賽,這才使得我能躲在房間里學習編寫程序。感謝我在Mohawk中學的計算機老師Ruth Voland,他帶我參加各種計算機展覽會并給我額外的時間使用學校的ASR 33型打字機。感謝TI的Alan Backus和Galen Freemon,他們讓我能按照自己的思路開發(fā)軟件測試工具。感謝我過去的同事,他們在軟件測試方面教給了我許多自學無法學到的東西。同時,感謝我優(yōu)秀的妻子Valerie,1991年,當我問她是否把簡歷投給遠在西雅圖的名叫微軟的小公司時,她堅定地說:“投過去,看看會發(fā)生什么!蹦銈儺斨械拿恳粋人都為這本書做出了貢獻,謝謝你們!
羅恩·佩騰(Ron Patton)具有約30年軟件測試和軟件質(zhì)量保證的工作經(jīng)驗,從事過各種產(chǎn)品的軟件測試,從關(guān)鍵任務(wù)到兒童繪圖程序。曾先后就職于德州儀器公司、西門子公司和微軟公司,擔任過質(zhì)量保證工程師、軟件測試經(jīng)理等職務(wù)。他現(xiàn)在是一個獨立的軟件項目管理和軟件質(zhì)量保證咨詢師。
出版者的話
譯者序
前言
第一部分 軟件測試綜述
第1章 軟件測試的背景 ┊2
1.1 臭名昭著的軟件錯誤用例研究 ┊2
1.1.1 迪士尼的獅子王(1994~1995年) ┊2
1.1.2 英特爾奔騰浮點除法缺陷(1994年) ┊3
1.1.3 美國航天局火星極地登陸者號探測器(1999年) ┊4
1.1.4 愛國者導彈防御系統(tǒng)(1991年) ┊4
1.1.5 千年蟲問題(大約1974年) ┊4
1.1.6 危險的預見(2004年) ┊5
1.2 軟件缺陷是什么 ┊5
1.2.1 軟件失敗的術(shù)語 ┊5
1.2.2 軟件缺陷的官方定義 ┊6
1.3 為什么會出現(xiàn)軟件缺陷 ┊8
1.4 軟件缺陷的修復費用 ┊8
1.5 軟件測試員究竟做些什么 ┊9
1.6 優(yōu)秀的軟件測試員應具備的素質(zhì) ┊10
第2章 軟件開發(fā)的過程 ┊12
2.1 產(chǎn)品的組成部分 ┊12
2.1.1 軟件產(chǎn)品需要多少投入 ┊12
2.1.2 軟件產(chǎn)品由哪些部分組成 ┊15
2.2 軟件項目成員 ┊16
2.3 軟件開發(fā)生命周期模式 ┊17
2.3.1 大爆炸模式 ┊17
2.3.2 邊寫邊改模式 ┊18
2.3.3 瀑布模式 ┊19
2.3.4 螺旋模式 ┊20
第3章 軟件測試的實質(zhì) ┊23
3.1 測試的原則 ┊23
3.1.1 完全測試程序是不可能的 ┊23
3.1.2 軟件測試是有風險的行為 ┊24
3.1.3 測試無法顯示潛伏的軟件缺陷 ┊25
3.1.4 找到的軟件缺陷越多,就說明軟件缺陷越多 ┊25
3.1.5 殺蟲劑怪事 ┊26
3.1.6 并非所有軟件缺陷都要修復 ┊26
3.1.7 什么時候才叫缺陷難以說清 ┊27
3.1.8 產(chǎn)品說明書從沒有最終版本 ┊28
3.1.9 軟件測試員在產(chǎn)品小組中不受歡迎 ┊28
3.1.10 軟件測試是一個講究條理的技術(shù)職業(yè) ┊29
3.2 軟件測試的術(shù)語和定義 ┊29
3.2.1 精確和準確 ┊29
3.2.2 確認和驗證 ┊30
3.2.3 質(zhì)量和可靠性 ┊31
3.2.4 測試和質(zhì)量保證 ┊31
第二部分 測試基礎(chǔ)
第4章 檢查產(chǎn)品說明書 ┊34
4.1 開始測試 ┊34
4.1.1 黑盒測試和白盒測試 ┊35
4.1.2 靜態(tài)測試和動態(tài)測試 ┊36
4.1.3 靜態(tài)黑盒測試—測試產(chǎn)品說明書 ┊36
4.2 對產(chǎn)品說明書進行高級審查 ┊37
4.2.1 假設(shè)自己是客戶 ┊37
4.2.2 研究現(xiàn)有的標準和規(guī)范 ┊37
4.2.3 審查和測試類似軟件 ┊38
4.3 產(chǎn)品說明書的低層次測試技術(shù) ┊39
4.3.1 產(chǎn)品說明書屬性檢查清單 ┊39
4.3.2 產(chǎn)品說明書用語檢查清單 ┊39
第5章 帶上眼罩測試軟件 ┊41
5.1 動態(tài)黑盒測試:帶上眼罩測試軟件 ┊42
5.2 通過性測試和失效性測試 ┊43
5.3 等價類劃分 ┊44
5.4 數(shù)據(jù)測試 ┊45
5.4.1 邊界條件 ┊46
5.4.2 次邊界條件 ┊49
5.4.3 默認、空白、空值、零值和無 ┊51
5.4.4 非法、錯誤、不正確和垃圾數(shù)據(jù) ┊52
5.5 狀態(tài)測試 ┊52
5.5.1 測試軟件的邏輯流程 ┊53
5.5.2 失敗狀態(tài)測試 ┊56
5.6 其他黑盒測試技術(shù) ┊58
5.6.1 像笨拙的用戶那樣做 ┊58
5.6.2 在已經(jīng)找到軟件缺陷的地方再找找 ┊58
5.6.3 像黑客一樣考慮問題 ┊59
5.6.4 憑借經(jīng)驗、直覺和預感 ┊59
第6章 檢查代碼 ┊61
6.1 靜態(tài)白盒測試:檢查設(shè)計和代碼 ┊61
6.2 正式審查 ┊62
6.2.1 同事審查 ┊63
6.2.2 走查 ┊63
6.2.3 檢驗 ┊64
6.3 編碼標準和規(guī)范 ┊64
6.3.1 編程標準和規(guī)范示例 ┊65
6.3.2 獲取標準 ┊66
6.4 通用代碼審查清單 ┊67
6.4.1 數(shù)據(jù)引用錯誤 ┊67
6.4.2 數(shù)據(jù)聲明錯誤 ┊67
6.4.3 計算錯誤 ┊68
6.4.4 比較錯誤 ┊68
6.4.5 控制流程錯誤 ┊68
6.4.6 子程序參數(shù)錯誤 ┊69
6.4.7 輸入/輸出錯誤 ┊69
6.4.8 其他檢查 ┊69
第7章 帶上X光眼鏡測試軟件 ┊71
7.1 動態(tài)白盒測試 ┊71
7.2 動態(tài)白盒測試和調(diào)試 ┊72
7.3 分段測試 ┊73
7.3.1 單元測試和集成測試 ┊74
7.3.2 單元測試示例 ┊75
7.4 數(shù)據(jù)覆蓋 ┊77
7.4.1 數(shù)據(jù)流 ┊77
7.4.2 次邊界 ┊78
7.4.3 公式和等式 ┊78
7.4.4 錯誤強制 ┊78
7.5 代碼覆蓋 ┊79
7.5.1 程序語句和代碼行覆蓋 ┊80
7.5.2 分支覆蓋 ┊81
7.5.3 條件覆蓋 ┊81
第三部分 運用測試技術(shù)
第8章 配置測試 ┊86
8.1 配置測試綜述 ┊86
8.1.1 分離配置缺陷 ┊89
8.1.2 計算工作量 ┊90
8.2 執(zhí)行任務(wù) ┊91
8.2.1 確定所需的硬件類型 ┊91
8.2.2 確定有哪些廠商的硬件、型號和驅(qū)動程序可用 ┊92
8.2.3 確定可能的硬件特性、模式和選項 ┊92
8.2.4 將確定后的硬件配置縮減為可控制的范圍 ┊92
8.2.5 明確與硬件配置有關(guān)的軟件唯一特性 ┊93
8.2.6 設(shè)計在每種配置中執(zhí)行的測試用例 ┊94
8.2.7 在每種配置中執(zhí)行測試 ┊94
8.2.8 反復測試直到小組對結(jié)果滿意為止 ┊94
8.3 獲得硬件 ┊94
8.4 明確硬件標準 ┊96
8.5 對其他硬件進行配置測試 ┊96
第9章 兼容性測試 ┊98
9.1 兼容性測試綜述 ┊98
9.2 平臺和應用程序版本 ┊99
9.2.1 向后和向前兼容 ┊100
9.2.2 測試多個版本的影響 ┊100
9.3 標準和規(guī)范 ┊102
9.3.1 高級標準和規(guī)范 ┊102
9.3.2 低級標準