本書涵蓋了軟件測試的方方面面:軟件測試如何適應軟件開發(fā)過程,基本的和高級的軟件測試技術,在常見的測試任務中運用測試技能,使用自動化提高測試的效率,測
試工作的計劃和文檔化,有效地報告發(fā)現(xiàn)的問題,衡量測試工作的成效和產(chǎn)品的改進,
測試和質(zhì)量保證的區(qū)別,尋求軟件測試員的工作。
本書適合軟件測試人員及希望未來從事軟件測試的其他專業(yè)人員閱讀,也適合高等
院校相關專業(yè)的學生及教師參考。
提供軟件測試、質(zhì)量保證領域的實用見解及如何在程序中發(fā)現(xiàn)問題、規(guī)劃有效的測試方法和預測發(fā)布。
當今社會似乎每天都有關于計算機軟件問題或安全缺陷暴露的新聞報道:銀行給出不正確的賬目收支報表、火星探測器在太空失蹤、食品店收銀機掃描器多算了香蕉的錢,或者某位黑客獲得了數(shù)百萬張信用卡號的訪問權。
為什么會出現(xiàn)這些問題呢?難道程序員不能想出辦法讓軟件僅僅做簡單的工作嗎?答案是否定的。隨著軟件變得越來越復雜,軟件的功能越來越多,軟件的互聯(lián)性越來越強,使得編寫一個無故障的程序越來越難,事實上已經(jīng)不可能。不論程序員多有能力,也不論他有多細心,他的程序中都難免會出現(xiàn)問題。
這就是引入軟件測試的原因。我們都看到在新衣服的口袋里有“檢驗員12號”的小標記,軟件也一樣有檢驗標記。許多大的軟件公司里一個程序員配一個或多個測試員,以保證軟件質(zhì)量。從游戲軟件,到工廠自動化生產(chǎn)軟件,再到商業(yè)應用軟件,都是如此。
本書將向你介紹軟件測試的基礎知識,不僅講述基本的技能,還講述成為一個成功的軟件測試員必需的技能。你將會學到,如何迅速在任一計算機程序中發(fā)現(xiàn)問題,如何計劃一個有效的測試步驟,如何清楚地報告發(fā)現(xiàn)的問題,以及如何告知軟件在何時發(fā)布。
關于本書第2版
在我寫《軟件測試》第1版的時候,軟件安全性問題還只是剛開始在新聞標題中出現(xiàn)。雖然黑客和安全問題一直都是一個難題,但是隨著互聯(lián)網(wǎng)的爆炸性發(fā)展,業(yè)界幾乎無人能預計安全漏洞對軟件開發(fā)者和使用者的影響有多大。
在第2版中,我又重新審閱了各章,著重強調(diào)了軟件安全問題,并指出了如何使用貫穿全書的基本測試技術來預防、查找、修正安全問題。我還增加了一章,專門講述如何測試軟件安全漏洞。
如果你是第1版的讀者,你會知道一個道理:不管你做多大的努力,你的軟件都會帶著缺陷發(fā)布。在第2版中,這也是一個真理—甚至帶著安全問題發(fā)布。然而,通過對本書所講述內(nèi)容的長期應用,能達到確保測試中絕大多數(shù)重要的缺陷都不會漏掉的目標,并且使你的團隊開發(fā)出高質(zhì)量、高安全性的軟件成為可能。
本書的讀者對象
本書適用于三類不同的讀者:
有興趣將軟件測試作為全職工作、實習或合作工作的學生或電腦愛好者。在面試前或第一天工作前閱讀這本書以求在新上司眼里留下好印象。
改變職業(yè),希望從原來的專業(yè)領域轉(zhuǎn)入軟件產(chǎn)業(yè)領域的人。本書給非軟件專業(yè)的人員很多將其原專業(yè)知識應用到軟件測試中的機會。例如,飛行教導員可以測試飛行模擬游戲,會計可以測試稅務申報軟件,教師可以測試新的兒童教育程序。
想對軟件測試方面的知識增強了解的程序員、軟件項目經(jīng)理、軟件開發(fā)團隊的其他人員。
本書可以為你帶來什么
從本書中可以學到關于軟件測試的幾乎所有方面的內(nèi)容:
軟件測試如何適應軟件開發(fā)過程
基本的和高級的軟件測試技術
在常見的測試任務中運用測試技能
引入自動化提高測試的效率
測試工作的計劃和文檔化
有效地報告發(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ì)。
本書中針對不同的應用程序、軟件缺陷、軟件測試工具所舉的例子絕不是有意在對這些軟件進行肯定或否定,這些例子僅僅用來演示軟件測試的概念。
本書的組織方式
編寫本書的目的是引導讀者通過基礎知識和必要技能的學習而成為一個優(yōu)秀的軟件測試員。軟件測試并不是不停地敲擊鍵盤,希望能最終使計算機崩潰這樣一回事,在它后面包含了大量的科學和工程、規(guī)則和計劃,也有很多的樂趣—你很快就會看到。
第一部分 軟件測試綜述
第一部分是本書的基礎,該部分講述了軟件產(chǎn)品是如何開發(fā)出來的,軟件測試如何應用到整個開發(fā)過程中。你將會懂得軟件測試的重要性,并對軟件測試工作量的巨大產(chǎn)生正確的認識。
第1章,“軟件測試的背景”,幫助你理解什么是軟件缺陷,軟件缺陷到底有多嚴重,為什么軟件缺陷會發(fā)生。你會了解到作為一個軟件測試員最終的目標是什么,以及成為一個優(yōu)秀的軟件測試員應該具有哪些特點。
第2章,“軟件開發(fā)的過程”,介紹團體進行軟件產(chǎn)品生產(chǎn)的總體過程。你會了解到軟件生產(chǎn)中有哪些典型的過程,哪些人員對此做出了貢獻,以及可以應用的不同的過程模型。
第3章,“軟件測試的實質(zhì)”,對軟件開發(fā)的事實進行分析。你會了解到為什么無論你做多大的努力,軟件永遠都不會完美,還會了解到本書中用到的一些基本的術語和概念。
第二部分 測試基礎
第二部分講述軟件測試的基本方法,軟件測試工作分為四個方面,每個方面的技術都用一章來描述。
第4章,“檢查產(chǎn)品說明書”,講述如何通過詳細檢查軟件文檔來發(fā)現(xiàn)缺陷。
第5章,“帶上眼罩測試軟件”,講述在沒有代碼甚至不懂得編程的情況下的軟件測試技術,這是最常用的測試類型。
第6章,“檢查代碼”,講述如何通過詳細的程序代碼分析來發(fā)現(xiàn)缺陷。你會了解到并非高級程序員才能運用此方法。
第7章,“帶上X光眼鏡測試軟件”,講述如何通過代碼評審或觀察動態(tài)運行測試獲得的信息來改進測試。
第三部分 運用測試技術
第三部分把第二部分學到的技術應用到軟件測試員今后會遇到的實戰(zhàn)環(huán)境中。
第8章,“配置測試”,講述如何針對不同的硬件配置和平臺來組織和執(zhí)行軟件測試。
第9章,“兼容性測試”,講述如何針對不同的軟件應用程序和操作系統(tǒng)交互的問題進行測試。
第10章,“外國語言測試”,有很多軟件,當其被翻譯成其他語言時會引起一些特殊問題,這時測試顯得很重要。
第11章,“易用性測試”,講述在檢查軟件程序的用戶界面時,如何應用測試技術,如何確保軟件對于殘障人士也能適用。
第12章,“文檔測試”,講述如何檢查軟件的文檔的缺陷,例如幫助文檔、用戶手冊,甚至是市場宣傳資料。
第13章,“軟件安全性測試”,講述如何針對想象中安全的計算機系統(tǒng)和數(shù)據(jù),發(fā)現(xiàn)被黑客突破的安全缺陷。
第14章,“網(wǎng)站測試”,將目前學到的所有技術應用到實際測試中,你會發(fā)現(xiàn)即使簡單到一個網(wǎng)站的測試,也涉及了軟件測試的各個方面。
第四部分 測試的補充
第四部分講述如何通過技術和人員的合理調(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)品的軟件測試,從關鍵任務到兒童繪圖程序。曾先后就職于德州儀器公司、西門子公司和微軟公司,擔任過質(zhì)量保證工程師、軟件測試經(jīng)理等職務。他現(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 軟件失敗的術語 ┊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 軟件測試是一個講究條理的技術職業(yè) ┊29
3.2 軟件測試的術語和定義 ┊29
3.2.1 精確和準確 ┊29
3.2.2 確認和驗證 ┊30
3.2.3 質(zhì)量和可靠性 ┊31
3.2.4 測試和質(zhì)量保證 ┊31
第二部分 測試基礎
第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 假設自己是客戶 ┊37
4.2.2 研究現(xiàn)有的標準和規(guī)范 ┊37
4.2.3 審查和測試類似軟件 ┊38
4.3 產(chǎn)品說明書的低層次測試技術 ┊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 其他黑盒測試技術 ┊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)白盒測試:檢查設計和代碼 ┊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
第三部分 運用測試技術
第8章 配置測試 ┊86
8.1 配置測試綜述 ┊86
8.1.1 分離配置缺陷 ┊89
8.1.2 計算工作量 ┊90
8.2 執(zhí)行任務 ┊91
8.2.1 確定所需的硬件類型 ┊91
8.2.2 確定有哪些廠商的硬件、型號和驅(qū)動程序可用 ┊92
8.2.3 確定可能的硬件特性、模式和選項 ┊92
8.2.4 將確定后的硬件配置縮減為可控制的范圍 ┊92
8.2.5 明確與硬件配置有關的軟件唯一特性 ┊93
8.2.6 設計在每種配置中執(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 低級標準