第1部分 基礎
第1章 軟件質量
1.1 外部質量
1.2 內部質量
1.3 技術債務
1.4 結構性質量保證
1.5 整潔代碼
1.5.1 顯式、最小的依賴
1.5.2 責任明確
1.5.3 不可復制
1.5.4 盡可能少的執(zhí)行分支、盡可能簡短的方法
1.6 軟件度量
1.6.1 圈復雜度與npath復雜度
1.6.2 CRAP
1.6.3 non-mockable total recursive cyclomatic complexity
1.6.4 全局可變狀態(tài)
1.6.5 聚合與耦合
1.7 工具
1.7.1 PHP Unit
1.7.2 phplOC
1.7.3 PHP Copy-Paste-Detector
1.7.4 PHP Dead Code Detector
1.7.5 PHP Depend
1.7.6 PHP Mess Detector
1.7.7 PHP Code Sniffer
1.7.8 bytekit-cli
1.7.9 PHP-Code Browser
1.7.10 Cruise Control與PHP Under Control
1.7.11 HUd SOn
1.7.12 Arbic
1.8 本章小結
第2章 軟件測試
2.1 黑盒測試與白盒測試
2.2 需要多少次測試
2.3 系統(tǒng)測試
2.3.1 瀏覽器測試
2.3.2 自動測試
2.3.3 孤立測試
2.3.4 驗收測試
2.3.5 系統(tǒng)測試的局限
2.4 單元測試
2.4.1 返回值
2.4.2 依賴性
2.4.3 副作用
2.5 案例探究
2.5.1 分析待測試代碼
2.5.2 創(chuàng)建測試環(huán)境
2.5.3 避免全局依賴性
2.5.4 獨立于數(shù)據源的測試
2.5.5 異步事件測試
2.5.6 數(shù)據庫變化的存儲
2.5.7 意外的結果
2.5.8 封裝輸入數(shù)據
2.5.9 問題的進一步研究
2.6 本章小結
第II部分 最佳實踐
第3章 TYP03:呆板項目之敏捷未來
3.1 簡介
3.1.1 TYP03的歷史:13個春秋
3.1.2 敢于重新開始
3.1.3 我們的測試經驗
3.2 方法和技術
3.2.1 苦甜參半的“大塊頭”
3.2.2 測試驅動開發(fā)
3.2.3 文檔式測試
3.2.4 持續(xù)集成
3.2.5 整潔代碼
3.2.6 代碼重構
3.2.7 編程向導
3.2.8 領域驅動設計
3.3 開發(fā)過程中的行動方向
3.3.1 開發(fā)新代碼
3.3.2 擴展和調試代碼
3.3.3 優(yōu)化代碼
3.3.4 尋找并修復漏洞
3.3.5 處理舊代碼
3.4 測試處方
3.4.1 無意的功能性單元測試
3.4.2 文件系統(tǒng)入口
3.4.3 接口處的構造函數(shù)
3.4.4 測試抽象類
3.4.5 測試受保護方法
3.4.6 回調函數(shù)的使用
3.5 邁向未來
第4章 單元測試的糟糕實踐
4.1 為什么測試質量很重要
4.2 糟糕實踐和測試味道
4.2.1 測試代碼重復
4.2.2 斷言復雜和測試試圖
4.2.3 脆弱測試
4.2.4 模糊測試
4.2.5 謊言測試
4.2.6 慢測試
4.2.7 測試中的條件邏輯
4.2.8 自行驗證測試
4.2.9 Web沖浪測試
4.2.10 模擬過度殺傷
4.2.11 跳過蔓延
4.3 本章小結
第5章 Digg公司的質量保證
5.1 面臨的問題
5.1.1 遺留基本代碼
5.1.2 如何解決這些問題
5.1.3 選擇測試框架
5.1.4 引進專家
5.1.5 會議室內的一周
5.2 訓練團隊
5.3 編寫可測試代碼
5.3.1 規(guī)避靜態(tài)方法
5.3.2 依賴注入
5.4 模擬對象
5.4.1 綜述
5.4.2 數(shù)據庫
5.4.3 松散耦合依賴
5.4.4 測試類內部構件的試驗對象觀察者
5.4.5 分布式緩存
5.4.6 模擬服務型架構
5.5 Digg的質量保證過程
5.5.1 測試
5.5.2 益處
5.6 本章小結
第III部分 服務器與服務
第6章 服務型API測試
6.1 問題
6.2 解決方案
6.2.1 API證書
6.2.2 API限制
6.2.3 服務協(xié)議的脫機測試
6.2.4 具體服務的脫機測試
6.3 本章小結
第7章 測試Web DAV服務器
7.1 關于eZ Web DAV組件
7.1.1 Web DAV
7.1.2 體系結構
7.2 開發(fā)過程中的挑戰(zhàn)
7.2.1 需求分析
7.2.2 RFC之后的TDD
……