程序開發人員測試指南 構建高質量的軟件 程序开发人员测试指南 构建高质量的软件

[瑞典]亞歷山大.塔林德

買這商品的人也買了...

商品描述

本書分為19章,主要內容為開發人員測試,測試目標、方式和角色,測試術語,開發人員眼中的可測試性,契約式編程,可測試性的驅動者,單元測試,基於規格說明的測試,依賴關系,數據驅動和組合測試,準單元測試,測試替身,模擬框架,測試驅動開發——經典風格,測試驅動開發——Mockist風格,使用測試代碼,超越單元測試,測試思路等開發人員和測試人員必知必會的知識。
如果你是一個希望所寫的代碼質量更高、缺陷更少的開發人員,那麽這本書很適合你。本書介紹瞭如何用可測試性提升軟件質量,在各種開發模式中,可測試性都是軟件的主要質量屬性之一。閱讀本書,你可以成為更好的開發人員,學習到更多的軟件測試知識,不必再苦於沒有時間做測試、也無法從同事或團隊那裡獲得相關的支持。

作者簡介

作者:[瑞典]亞歷山大.塔林德( Alexander Tarlinder)譯者:朱少民楊曉慧歐陽辰曾樂天
朱少民,國內軟件測試界的領軍人物和知名專家,三十多年來一直從事軟件測試、質量管理和過程改進等工作,過去五年幫助了近百家企業提升其質量保證與測試能力,先後獲得安徽省、原機械工業部、青島市、合肥市等多項科技進步獎,出版了十多部著作,包括測試方面的暢銷書《全程軟件測試》、《軟件測試方法和技術》、《完美測試》和譯作《自動化測試最佳實踐》等,經常在國內外會議上發表演講,並在國內開設軟件測試MOOC課程。之前曾任思科-網迅(中國)軟件有限公司QA總監,目前是同濟大學軟件學院教授、中國科技大學軟件學院教指委委員。

楊曉慧,前華為技術有限公司-軟件公司測試專家,1999年進入華為公司,先後參與和主持過多項產品測試、測試流程改造、測試工程師職責定義等工作。工作覆蓋測試策略、測試設計、測試評估和過程管理等軟件測試工程的各個方面,在自動化、可靠性驗證、可服務性驗證、可測試性設計等領域上都有豐富的經驗。2007年以後主管軟件公司的測試技術架構設計、實現、應用,通過幫助產品持續積累和提升測試技術能力,實現研發的效率和質量提升。

歐陽辰,品友互動CTO。推動品友大數據智能戰略,成為程序化廣告的知名公司。加入品友之前,曾在微軟、小米和甲骨文工作:曾任小米研發總監,負責廣告和大數據平台,曾在微軟工作十年,負責搜索和廣告平台的核心大數據項目,持有數項國內外專利,著有《Druid實時大數據分析》。

曾樂天,博士,畢業於西安電子科技大學,現在工業和信息化部電子第五研究所(中國賽寶實驗室)從事軟件測評方面的研究工作。

目錄大綱

第1章開發者測試1 
1.1開發者測試1 
1.2開發人員測試活動2 
1.2.1單元測試2 
1.2.2集成測試2 
1.2.3維護2 
1.2.4持續集成3 
1.2.5自動化測試3 
1.3開發人員通常不做什麼4 
1.4定義“開發者測試” 5 
1.5開發人員測試和開發過程5 
1.6小結6 

第2章測試目標、方式和角色7 
2.1測試和檢查7 
2.2測試目標7 
2.2.1批判式測試8 
2.2.2支持式測試8 
2.3測試方式8 
2.3.1傳統測試9 
2.3.2敏捷測試10 
2.3.3 BDD、ATDD和實例化需求11 
2.4質量保證和開發者測試13 
2.5小結14 

第3章測試術語15 
3.1錯誤、缺陷、失效15 
3.2白盒測試與黑盒測試16 
3.3測試技術分類16 
3.3.1測試級別17 
3.3.2測試類型19 
3.3.3讓測試級別和測試類型
發揮作用21
3.4敏捷測試四象限22 
3.5其他類型的測試23 
3.5.1冒煙測試23 
3.5.2端到端測試24 
3.5.3特性測試24 
3.5.4正面測試和負面測試24 
3.5.5小型、中型和大型測試24 
3.6小結25 

第4章開發者眼中的可測試性26 
4.1可測試的軟件26 
4.2可測試性的好處27 
4.2.1功能可被驗證27 
4.2.2減少意外28 
4.2.3它可以改變28 
4.2.4為什麼要注重可測試性29 
4.3可測試性的定義30 
4.3.1可觀察性31 
4.3.2可控制性33 
4.3.3可部署性34 
4.3.4可隔離性35 
4.3.5小規模(smallness) 36 
4.3.6單一性36 
4.3.7抽象級別37 
4.3.8效率(efficiency) 38 
4.3.9復用38 
4.3.10可測試性的提示38 
4.4小結39 

第5章契約式編程40 
5.1契約形式化約束41 
5.2實現契約式編程42 
5.3強制契約43
5.3.1斷言43 
5.3.2支持契約的類庫44 
5.3.3單元測試45 
5.3.4靜態分析45 
5.4小結45 

第6章可測試性的驅動者47 
6.1直接輸入和輸出47 
6.2間接輸入和輸出48 
6.3狀態49 
6.4時序耦合50 
6.5數據類型和可測試性50 
6.6域值比54 
6.7小結55 

第7章單元測試56 
7.1為什麼做單元測試?56 
7.2什麼是單元測試57 
7.3單元測試框架的生命週期58 
7.3.1測試方法59 
7.3.2測試初始化器和清除59 
7.3.3構造函數和析構函數60 
7.4測試命名60 
7.4.1測試框架的強制規定60 
7.4.2行為驅動的開發方式61 
7.4.3工作單元、測試狀態、
所期望的行為61 
7.4.4選擇一個命名標準61 
7.5測試結構化62 
7.6斷言方法63 
7.6.1斷言類型63 
7.6 .2每個測試有多少斷言64 
7.6.3斷言冗長65 
7.6.4斷言等式66
7.6.5限制和匹配器67 
7.7測試異常70 
7.8行為驅動開發方式的框架72 
7.8.1測試結構72 
7.8.2命名測試73 
7.8.3匹配器74 
7.9小結75 

第8章基於規格說明的測試76 
8.1等價類劃分76 
8.2邊界值分析78 
8.3典型數據類型的邊緣用例和其他
測試用例79 
8.3.1數字79 
8.3.2字符串79 
8.3.3日期和時間80 
8.3.4集合80 
8.4狀態轉移測試81 
8.5決策表82 
8.6小結83 

第9章依賴關係84 
9.1對象間依賴關係84 
9.1.1傳入協作者85 
9.1.2使用工廠方法86 
9.1.3提供一個外部工廠或者
生成器87 
9.2系統資源依賴關係89 
9.2.1文件89 
9.2.2提供你自己的抽象89 
9.2.3測試由I/O操作處理過的
數據90 
9.2.4系統時鐘91 
9.2.5其他系統資源依賴關係92 
9.3層間依賴關係92
9.4跨層級依賴關係94 
9.5小結95 

第10章數據驅動和組合測試96 
10.1參數化測試98 
10.2 Theories 99 
10.3生成式測試101 
10.3.1驗證結果102 
10.4組合測試103 
10.4.1單模式故障104 
10.4. 2雙模式故障105 
10.4.3雙模式故障和所有成對變量
之外106 
10.5小結106 

第11章准單元測試107 
11.1實例107 
11.1.1使用內存數據庫的測試108 
11.1.2測試專用的郵件服務器108 
11.1.3使用輕量級容器的測試109 
11.1.4 Web服務測試110 
11.2影響111 
11.3小結112 

第12章測試替身113 
12.1樁對象113 
12.1.1樁對象的靈活性114 
12.1.2用樁對象來避免副作用115 
12.2偽對象116 
12.3模擬對象117 
12.3.1驗證間接輸出117 
12.3.2驗證間接輸入轉換121 
12.4探針122
12.5啞對象123 
12.6驗證狀態還是行為124 
12.6.1狀態驗證124 
12.6.2行為驗證125 
12.6.3參數125 
12.7小結126 

第13章模擬框架127 
13.1創建測試替身127 
13.2設置預期128 
13.3驗證交互行為131 
13.4誤用、濫用和其他陷阱133 
13.4.1過度驗證133 
13.4.2模擬具體類134 
13.4.3模擬有價值的類135 
13.4.4 Mock返回Mock 135 
13.5小結135 

第14章測試驅動開發——經典風格137 
14.1測試驅動一個簡單的搜索引擎137 
14.1.1測試1:發現API 138 
14.1.2測試2:主邏輯路徑
 (Happy Path) 139 
14.1.3測試3:多文件索引140 
14.1.4測試4:更複雜的文件141 
14.1.5測試5:在多文件中找到
 單詞141 
14.1.6測試6:消除重複的
 匹配(Matches) 142 
14.1.7測試7:引入排序143 
14.1.8測試8:忽略大小寫145
14.1.9測試9:處理標點符號146 
14.2測試的順序147 
14.3紅色到綠色狀態條的策略147 
14.4挑戰148 
14.4.1我們的代碼無法被測試149 
14.4.2我們的代碼很特殊150 
14.4.3測試驅動開發不是完整的
 測試150 
14.4.4從零開始150 
14.5測試最先還是最後151 
14.6小結151 

第15章測試驅動開發——Mockist風格153 
15.1一種不同的方法153 
15.1.1測試驅動用戶註冊154 
15.1.2增加更多測試158 
15.2雙環TDD 159 
15.2.1另一個反饋環159 
15.2.2關閉週期160 
15.3小結160 

第16章複製161 
16.1複製的壞處161 
16.2利用複制的好處162 
16.3機械複製163 
16.3 .1拷貝、粘貼163 
16.3.2塊拷貝、粘貼163 
16.3.3構造函數拷貝、粘貼164 
16.3.4方法複製165 
16.4知識複製166 
16.4.1不同方法中的類似功能167
16.4.2功能相似的類167 
16.4.3競爭性實現168 
16.4.4競爭性領域模型168 
16.5小結169 

第17章使用測試代碼170 
17.1測試代碼中的註釋170 
17.2刪除測試用例173 
17.2.1需要被刪除的主要候選者173 
17.2.2需要被刪除的可能候選者174 
17.2.3刪除測試用例的重要性174 
17.3小結175 

第18章超越單元測試176 
18.1單元測試以外的測試176 
18.1.1封裝在事務內的測試176 
18.1.2需要使用服務或組件的
 測試178 
18.1.3需要與其他系統交互的
 測試179 
18.1.4通過UI運行的測試181 
18.1.5需要調用一個系統的測試183 
18.1.6更多內容184 
18.2單元測試不具備的特徵185 
18.2.1複雜性186 
18.2.2穩定性186 
18.2.3缺陷定位187 
18.2.4性能187 
18.2.5環境依賴性188 
18.2.6目標受眾188 
18.3實踐指南189
18.3.1測試的獨立性189 
18.3.2配置189 
18.3.3驗證191 
18.3.4利用測試替身191 
18.3.5決定開發者測試策略192 
18.4小結193 

第19章測試思路與啟發式194 
19.1高層注意事項194 
19.1.1測試有效性194 
19.1.2測試配方194 
19.1.3抽象級別及其細節195 
19.1.4原型195 
19.1.5可信來源(結果判斷
 依據) 196 
19.2低層注意事項196 
19.2.1 0- 1-n 196 
19.2.2空值(null) 196 
19.2.3範圍196 
19.2.4集合196 
19.2.5異常和錯誤197 
19.2.6數字197 
19.2.7字符串197 
19.2.8日期197 
19.3小結198 
附錄A工具和庫199 
附錄B源代碼201 
詞彙表209 
後記:忘卻測試是為了更好的開發216