課程簡(jiǎn)介
軟件開(kāi)發(fā)人員如何編寫(xiě)高質(zhì)量的單元測(cè)試
目標(biāo)收益
你是否有過(guò)這樣的感覺(jué):
? 當(dāng)你在浩如煙海的網(wǎng)頁(yè)中企圖搜索單元測(cè)試的文章時(shí),發(fā)現(xiàn)滿(mǎn)眼看到的卻只是一些測(cè)試模板或空洞的測(cè)試?yán)碚?br />
? 當(dāng)你期望能在大師的指點(diǎn)下找到單元測(cè)試的門(mén)道,然而看完他們的文章,你感到似乎懂了卻又感覺(jué)什么都沒(méi)有學(xué)到
? 當(dāng)你希望能將單元測(cè)試技巧融入實(shí)戰(zhàn)時(shí),卻發(fā)現(xiàn)周?chē)睦佣歼€停留Calculator的原始時(shí)代
? 當(dāng)你希望在快速迭代的研發(fā)潮流之中找到單元測(cè)試如何引入到組織時(shí),看到只是一些陳詞濫調(diào)和老生常談,而看不到實(shí)際的成功案例
今天,大多數(shù)人都已經(jīng)承認(rèn)單元測(cè)試是開(kāi)發(fā)者的職責(zé),而不是QA職責(zé). 比如Google就將單元測(cè)試推到上游的、以及內(nèi)建質(zhì)量的意識(shí),優(yōu)秀的自動(dòng)化測(cè)
培訓(xùn)對(duì)象
各類(lèi)軟件研發(fā)機(jī)構(gòu)的軟件研發(fā)管理者、架構(gòu)師,軟件設(shè)計(jì)師、程序員。對(duì)于懷有設(shè)計(jì)疑問(wèn)和問(wèn)題,需要梳理解答的團(tuán)隊(duì)和個(gè)人,效果最佳。
? 單元測(cè)試的初級(jí)人員:通過(guò)課程的學(xué)習(xí)可以了解測(cè)試的基本概念,測(cè)試框架的使用,基礎(chǔ)的單元測(cè)試用例如何設(shè)計(jì)
? 單元測(cè)試中級(jí)人員:通過(guò)課程可以學(xué)習(xí),對(duì)象依賴(lài)如何通過(guò)stub/mock等解除依賴(lài),mock框架的學(xué)習(xí),什么好的單元測(cè)壞死,如何提高單元測(cè)試的可讀性, 可維護(hù)性,穩(wěn)定可靠性
? 單元測(cè)試高級(jí)人員:通過(guò)課程可以學(xué)習(xí)到如何提高設(shè)計(jì)與代碼的可測(cè)試性, 測(cè)試覆蓋率的設(shè)計(jì),復(fù)雜企業(yè)應(yīng)用系統(tǒng)如何測(cè)試不同的層(UI/controller/Service/DB層),如何使用測(cè)
課程大綱
單元測(cè)試基礎(chǔ) |
內(nèi)容一:理解單元測(cè)試 1. 什么是單元測(cè)試? 2. 為什么要寫(xiě)單元測(cè)試,為什么不寫(xiě)單元測(cè)試 3. 理解單元測(cè)試--第一個(gè)單元測(cè)試案例 4. 好的測(cè)試是什么樣子的,為什么要寫(xiě)"好"的單元測(cè)試 5. 單元測(cè)試的維護(hù)成本 6. 單元測(cè)試與自動(dòng)化測(cè)試 7. 分析真實(shí)項(xiàng)目,如何做單元測(cè)試 8. 通過(guò)案例分析,了解基本的單元測(cè)試 內(nèi)容二:敏捷測(cè)試 -實(shí)際開(kāi)發(fā)中的測(cè)試區(qū)別和實(shí)踐 1.敏捷測(cè)試 2.測(cè)試金字塔 3.單元測(cè)試 4.組件測(cè)試 5.集成測(cè)試 6.軟件開(kāi)發(fā)之中各種測(cè)試的區(qū)別 |
理解單元測(cè)試框架—XUnit工具 |
內(nèi)容一:理解單元測(cè)試XUnit 框架使用—(以Junit為案例介紹,其他簡(jiǎn)單介紹) 1.Junit設(shè)計(jì)目標(biāo) 2.探索JUnit核心 3.參數(shù)化測(cè)試 4.測(cè)試異常 5.超時(shí)測(cè)試 6.引入Hamcrest匹配器 7.JUnit的測(cè)試運(yùn)行器 8.用Suite來(lái)組合測(cè)試 9.Junit與IDE,Ant,Maven集成運(yùn)行 10.JUnit與持續(xù)集成工具結(jié)合 11.通過(guò)案例分析,Junit的最佳實(shí)踐 內(nèi)容二:Junit5新特性 1.Junit5架構(gòu) 2.Junit5新特性 3.JUnit 5 架構(gòu)演進(jìn) 4.JUnit 5 新注解 5.JUnit 5新的斷言 6.超時(shí)操作的測(cè)試:assertTimeoutPreemptively 7.異常測(cè)試:assertThrows 8.JUnit 5 參數(shù)化測(cè)試 9.JUnit 5 中的前置條件(assumptions) 10.JUnit 5 嵌套測(cè)試 11.JUnit 5 動(dòng)態(tài)測(cè)試 12.JUnit 5 依賴(lài)注入 13.Junit5和Junit4 區(qū)別 從Junit4升級(jí)到Junit5 |
單元測(cè)試設(shè)計(jì) |
內(nèi)容一:構(gòu)思單元測(cè)試 1.單元測(cè)試模型的設(shè)計(jì) 2.單元測(cè)試用例設(shè)計(jì) 3.為系統(tǒng)運(yùn)行起來(lái)而設(shè)計(jì) 4.為正向測(cè)試而設(shè)計(jì)用例 5.為逆向測(cè)試而設(shè)計(jì)用例 6.為滿(mǎn)足特殊需求而設(shè)計(jì)用例 7.為代碼覆蓋而設(shè)計(jì)用例 8.通過(guò)案例分析單元測(cè)試編程前的測(cè)試用例的設(shè)計(jì) 內(nèi)容二:?jiǎn)卧獪y(cè)試設(shè)計(jì)與構(gòu)建-基于路徑的白盒測(cè)試 1.單元測(cè)試白盒設(shè)計(jì) 2.標(biāo)識(shí)單元測(cè)試點(diǎn) 3.語(yǔ)句覆蓋 4.判定覆蓋 5.基本路徑測(cè)試法 6.白盒測(cè)試綜合策略 7.測(cè)試覆蓋準(zhǔn)則 8.通過(guò)大量案例分析,如何應(yīng)用各種白盒測(cè)試設(shè)計(jì)技術(shù),進(jìn)行設(shè)計(jì)單元測(cè)試 內(nèi)容三:?jiǎn)卧獪y(cè)試設(shè)計(jì)與構(gòu)建—基于測(cè)試數(shù)據(jù)的黑盒測(cè)試 1.單元測(cè)試黑盒設(shè)計(jì) 2.等價(jià)類(lèi)設(shè)計(jì)法 3.邊界值分析法 4.判定表(決策表)驅(qū)動(dòng)化 5.狀態(tài)轉(zhuǎn)移測(cè)試設(shè)計(jì) 6.用例/場(chǎng)景測(cè)試 7.動(dòng)態(tài)分析法 9.通過(guò)大量案例分析,如何應(yīng)用各種黑盒測(cè)試設(shè)計(jì)技術(shù),進(jìn)行設(shè)計(jì)單元測(cè)試 內(nèi)容四:?jiǎn)卧獪y(cè)試設(shè)計(jì)最佳實(shí)踐 1.單元測(cè)試的私有方法的測(cè)試 2.測(cè)試私有方法是錯(cuò)誤的! 3.私有方法重構(gòu)-將私有方法變成公共方法 4.私有方法重構(gòu)-抽取方法,形成新類(lèi) 5.測(cè)試私有方法的例外情況 6.基于交互的測(cè)試最佳實(shí)踐 7.基于狀態(tài)的測(cè)試最佳實(shí)踐 8.基于狀態(tài)的測(cè)試?yán)脤?duì)象內(nèi)部狀態(tài)驗(yàn)證執(zhí)行結(jié)果的正確性。 9.利用協(xié)作對(duì)象的完成狀態(tài)測(cè)試 內(nèi)容五:?jiǎn)卧獪y(cè)試設(shè)計(jì)SPIFFy原則 1.單元測(cè)試粒度 2.單元測(cè)試依賴(lài) 3.單元測(cè)試原則-SPIFFy: 4.Small: 10 lines or less, ideally 5.Precise: Checks one behavior of one class 6.Isolated: Doesn't affect other tests 7.Fast: Takes milliseconds to run 8.Frequently Run: Every time you make a change |
單元測(cè)試壞味道 |
容一:測(cè)試代碼壞味道 1.模糊測(cè)試(也稱(chēng)為長(zhǎng)測(cè)試、復(fù)雜測(cè)試、冗長(zhǎng)測(cè)試) 2.條件測(cè)試邏輯(也稱(chēng)為縮排的測(cè)試碼) 3.難以測(cè)試的代碼 4.測(cè)試碼復(fù)制 5.產(chǎn)品中的測(cè)試邏輯 6.通過(guò)案例分析測(cè)試代碼的壞味道,癥狀,原因,重構(gòu)等 內(nèi)容二:測(cè)試行為的壞味道 1.斷言滾輪 2.不穩(wěn)定測(cè)試 3.脆弱性測(cè)試 4.手工干預(yù)測(cè)試(指必須手工設(shè)置測(cè)試環(huán)境,調(diào)整測(cè)試代碼) 5.緩慢測(cè)試 6.通過(guò)案例分析以上每種行為壞味道,癥狀,原因,重構(gòu)等 內(nèi)容三:測(cè)試項(xiàng)目的壞味道 1.缺陷測(cè)試壞味道 2.開(kāi)發(fā)人員沒(méi)有寫(xiě)測(cè)試 3.高維護(hù)成本的單元測(cè)試 4.通過(guò)案例分析以上每種行為壞味道,癥狀,原因,重構(gòu)等 |
測(cè)試覆蓋 |
內(nèi)容一:邏輯覆蓋 1.實(shí)施邏輯覆蓋的原因 2.語(yǔ)句覆蓋 3.判定覆蓋 4.條件覆蓋 5.條件覆蓋 6.條件判定組合覆蓋 7.多條件覆蓋 8.修正條件判定覆蓋 9.結(jié)合案例分析,邏輯覆蓋的度量 內(nèi)容二:統(tǒng)計(jì)測(cè)試覆蓋--(以Junit為案例分析) 1.使用clover為junit單元測(cè)試做覆蓋率分析 2.使用Cobertura統(tǒng)計(jì)JUnit測(cè)試覆蓋率 3.結(jié)合案例分析,通過(guò)測(cè)試覆蓋率工具,分析覆蓋率 |
單元測(cè)試模式 |
內(nèi)容一:?jiǎn)卧獪y(cè)試結(jié)果驗(yàn)證模式 1.狀態(tài)驗(yàn)證模式-基于狀態(tài)的測(cè)試 2.行為驗(yàn)證模式-交互測(cè)試 3.自定義斷言—預(yù)約斷言 4.Delta斷言 5.哨兵斷言 6.根據(jù)案例分析結(jié)果的驗(yàn)證模式 內(nèi)容二:?jiǎn)卧獪y(cè)試替身模式 1.Test Stub模式 2.Test Spy模式 3.Mock Object模式 4.Fake Object模式 |
單元測(cè)試之中如何解耦依賴(lài) |
內(nèi)容一:解除依賴(lài)關(guān)系 - Extract and Override 和 Stub方法 1.反測(cè)試設(shè)計(jì)-外部依賴(lài) 2.不確定性1-時(shí)間 3.不確定性2-隨機(jī)性 4.不確定性3-外界第三方依賴(lài) 5.Extract and Override: The Universal Pliers 6. Isolate And Test Around 7.How Much Code To Extract? 8.Why You Should NOT Use Extract And Override 9.Why You SHOULD Use Extract And Override 10.利用Stub解除依賴(lài)關(guān)系 11.使用存根Stub破除依賴(lài) 12.依賴(lài)注入Stub的方式 13.多種Stub的案例 14.分析真實(shí)項(xiàng)目,如何使用Stub 內(nèi)容二:通過(guò)Mock對(duì)象解除依賴(lài) 1.Mock模擬對(duì)象和Stub存根的區(qū)別 2.手工Mock測(cè)試 3.手工Mock模擬對(duì)象的簡(jiǎn)單示例 4.同時(shí)使用Mock模擬對(duì)象和Stub存根 5.每個(gè)測(cè)試方法僅有一個(gè)模擬對(duì)象 6.偽對(duì)象鏈:用存根生成模擬對(duì)象或其他存根 7.手工模擬對(duì)象和存根的問(wèn)題 8.分析真實(shí)項(xiàng)目,如何使用Mock, 以及相關(guān)問(wèn)題 內(nèi)容三:Mock隔離框架 1.Mock與Stub的區(qū)別 2.為什么要使用隔離框架 3.動(dòng)態(tài)生成偽對(duì)象 4.動(dòng)態(tài)生成模擬值 5.現(xiàn)有的隔離框架 6.隔離框架的優(yōu)缺點(diǎn) 7.隔離框架設(shè)計(jì)反模式 8.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,什么時(shí)間使用Mock ,什么時(shí)間使用Stub, 如何權(quán)衡 內(nèi)容三:Mock隔離框架(Mockito) 1.Mockito 介紹 2.Mockito實(shí)現(xiàn)原理與架構(gòu) 3.Mockito資源 4.Mockito驗(yàn)證行為 5.Mockito模擬我們所期望的結(jié)果 6.參數(shù)匹配和自定義參數(shù)匹配 7.連續(xù)調(diào)用和驗(yàn)證確切的調(diào)用次數(shù) 8.驗(yàn)證執(zhí)行順序 9.使用方法預(yù)期回調(diào)接口生成期望值(Answer結(jié)構(gòu)) 10.修改對(duì)未預(yù)設(shè)的調(diào)用返回默認(rèn)期望 11.Mockito如何實(shí)現(xiàn)Mock |
增強(qiáng)設(shè)計(jì)與代碼的可測(cè)試性 |
內(nèi)容一:可測(cè)試性設(shè)計(jì)與可測(cè)試問(wèn)題 1.什么是可測(cè)的設(shè)計(jì) 2.模塊化設(shè)計(jì)與SOLID設(shè)計(jì)原則 3.實(shí)際開(kāi)發(fā)之中的可測(cè)性的問(wèn)題 4.無(wú)法實(shí)例化某個(gè)類(lèi) 5.無(wú)法調(diào)用某個(gè)方法 6.無(wú)法觀(guān)察到輸出 7.無(wú)法替換某個(gè)協(xié)作者 8.無(wú)法覆蓋某個(gè)方法 9.案例分析 內(nèi)容二:可測(cè)試性設(shè)計(jì)最佳實(shí)踐 1.可測(cè)的設(shè)計(jì)的指南 2.抽取接口,容許替換底層實(shí)現(xiàn) 3.在被測(cè)類(lèi)中注入樁對(duì)象 4.避免復(fù)雜的私有方法 5.避免final方法 6.避免static方法 7.使用new時(shí)要當(dāng)心 8.避免在構(gòu)造函數(shù)中包含邏輯 9.避免單例 10.組合優(yōu)于繼承 11.封裝外部庫(kù) 12.避免服務(wù)查找 13.結(jié)合多個(gè)大型案例項(xiàng)目進(jìn)行分析,如何通過(guò)重構(gòu)代碼,實(shí)現(xiàn)可測(cè)試性 |
企業(yè)級(jí)系統(tǒng)的單元測(cè)試 |
內(nèi)容一:企業(yè)級(jí)系統(tǒng)的單元測(cè)試最佳實(shí)踐 1.企業(yè)應(yīng)用系統(tǒng)特點(diǎn) 2.企業(yè)應(yīng)用典型場(chǎng)景 3.系統(tǒng)分層架構(gòu)與分層的單元測(cè)試 4.一個(gè)案例的分析 5.單元測(cè)試特點(diǎn) 6.UI層單元測(cè)試測(cè)試 7.Ctroller層單元測(cè)試 8.Service層單元測(cè)試 9.數(shù)據(jù)庫(kù)層單元測(cè)試 10.容器內(nèi)的測(cè)試 11.通過(guò)企業(yè)應(yīng)用案例項(xiàng)目進(jìn)行分析單元測(cè)試的構(gòu)建最佳實(shí)踐 |
編寫(xiě)好的單元測(cè)試 |
內(nèi)容一:好的單元測(cè)試測(cè)試標(biāo)準(zhǔn)-A-TRIP 1.單元測(cè)試的自動(dòng)化-Automatic 2.單元測(cè)試徹底的-Thorough 3.單元測(cè)試可重復(fù)-Repeatable 4.單元測(cè)試獨(dú)立的-Independent 5.單元測(cè)試專(zhuān)業(yè)的-Professional 6.通過(guò)案例分析,分析好的單元測(cè)試標(biāo)準(zhǔn) 內(nèi)容二:如何編寫(xiě)好的單元測(cè)試測(cè)試 1.單元測(cè)試中的壞味道 2.如何編寫(xiě)容易被看懂的模式 3.如何編寫(xiě)容易維護(hù)的模式 4.如何編寫(xiě)信得過(guò)的模式 5.重構(gòu)單元測(cè)試,改進(jìn)代碼設(shè)計(jì) 6.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,分析什么是好的單元測(cè)試 內(nèi)容三:如何編寫(xiě)好的單元測(cè)試測(cè)試 1.優(yōu)秀單元測(cè)試3條準(zhǔn)則 2.優(yōu)秀單元測(cè)試-可讀性 3.優(yōu)秀單元測(cè)試-可維護(hù)性 4.優(yōu)秀單元測(cè)試-可信賴(lài)性 5.如何編寫(xiě)容易被看懂的模式 6.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,分析什么是好的單元測(cè)試 |
TDD測(cè)試驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ) |
內(nèi)容一:TDD測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 1.TDD的節(jié)奏 2.TDD的兩個(gè)原則和TDD的目標(biāo) 3.TDD與行為驅(qū)動(dòng)開(kāi)發(fā)(Behaviour Driven Development) 4.TDD與驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Acceptance Test Driven Development) 5.識(shí)別代碼中的壞味道 6.重構(gòu)工具及使用 7.常用重構(gòu)技巧 8.重構(gòu)與預(yù)先設(shè)計(jì)的區(qū)別 通過(guò)案例分析,TDD的最佳實(shí)踐技巧,重構(gòu)的技巧,壞味道等 |
歷史遺留系統(tǒng)如何編寫(xiě)單元測(cè)試 |
內(nèi)容一:遺留系統(tǒng)代碼環(huán)境下如何編寫(xiě)單元測(cè)試 1.從哪里開(kāi)始添加單元測(cè)試 2.確定抉擇策略1-容易優(yōu)先測(cè)類(lèi)的優(yōu)缺點(diǎn) 3.確定抉擇策略2-困難優(yōu)先測(cè)類(lèi)的優(yōu)缺點(diǎn) 4.遺留代碼改動(dòng)準(zhǔn)則 5.重構(gòu)前寫(xiě)集成測(cè)試 6.遺留代碼整潔測(cè)試的常用工具 7.為第三方代碼做學(xué)習(xí)測(cè)試 8.復(fù)雜遺留系統(tǒng)之中,如何增加單元測(cè)試以及遇到的問(wèn)題 9.通過(guò)真實(shí)案例分析,在遺留系統(tǒng)的的難度和最佳實(shí)踐 |
單元測(cè)試組織和管理 |
內(nèi)容一:組織和管理測(cè)試 1.通過(guò)自動(dòng)構(gòu)建腳本運(yùn)行測(cè)試 2.將測(cè)試與代碼做同源版本管理 3.根據(jù)速度和類(lèi)型為測(cè)試分類(lèi) 4.創(chuàng)建和維護(hù)項(xiàng)目的測(cè)試輔助設(shè)施 5.結(jié)合我們研發(fā)中心, 如何做單元測(cè)試管理, 已經(jīng)如何組織,以及遇到的問(wèn)題 |
在研發(fā)團(tuán)隊(duì)如何引入單元測(cè)試 |
內(nèi)容一:將測(cè)試引入到你的組織中 1.如何成功在組織中引入單元測(cè)試 2.為什么在組織中引入單元測(cè)試的努力會(huì)失敗 3.如何將測(cè)試集成到開(kāi)發(fā)流程中 - 敏捷測(cè)試流程 4.常見(jiàn)的疑惑和解答? 5.通過(guò)多個(gè)研發(fā)中心咨詢(xún)經(jīng)驗(yàn),分析單元測(cè)試引入的方式和最佳實(shí)踐 |
單元測(cè)試基礎(chǔ) 內(nèi)容一:理解單元測(cè)試 1. 什么是單元測(cè)試? 2. 為什么要寫(xiě)單元測(cè)試,為什么不寫(xiě)單元測(cè)試 3. 理解單元測(cè)試--第一個(gè)單元測(cè)試案例 4. 好的測(cè)試是什么樣子的,為什么要寫(xiě)"好"的單元測(cè)試 5. 單元測(cè)試的維護(hù)成本 6. 單元測(cè)試與自動(dòng)化測(cè)試 7. 分析真實(shí)項(xiàng)目,如何做單元測(cè)試 8. 通過(guò)案例分析,了解基本的單元測(cè)試 內(nèi)容二:敏捷測(cè)試 -實(shí)際開(kāi)發(fā)中的測(cè)試區(qū)別和實(shí)踐 1.敏捷測(cè)試 2.測(cè)試金字塔 3.單元測(cè)試 4.組件測(cè)試 5.集成測(cè)試 6.軟件開(kāi)發(fā)之中各種測(cè)試的區(qū)別 |
理解單元測(cè)試框架—XUnit工具 內(nèi)容一:理解單元測(cè)試XUnit 框架使用—(以Junit為案例介紹,其他簡(jiǎn)單介紹) 1.Junit設(shè)計(jì)目標(biāo) 2.探索JUnit核心 3.參數(shù)化測(cè)試 4.測(cè)試異常 5.超時(shí)測(cè)試 6.引入Hamcrest匹配器 7.JUnit的測(cè)試運(yùn)行器 8.用Suite來(lái)組合測(cè)試 9.Junit與IDE,Ant,Maven集成運(yùn)行 10.JUnit與持續(xù)集成工具結(jié)合 11.通過(guò)案例分析,Junit的最佳實(shí)踐 內(nèi)容二:Junit5新特性 1.Junit5架構(gòu) 2.Junit5新特性 3.JUnit 5 架構(gòu)演進(jìn) 4.JUnit 5 新注解 5.JUnit 5新的斷言 6.超時(shí)操作的測(cè)試:assertTimeoutPreemptively 7.異常測(cè)試:assertThrows 8.JUnit 5 參數(shù)化測(cè)試 9.JUnit 5 中的前置條件(assumptions) 10.JUnit 5 嵌套測(cè)試 11.JUnit 5 動(dòng)態(tài)測(cè)試 12.JUnit 5 依賴(lài)注入 13.Junit5和Junit4 區(qū)別 從Junit4升級(jí)到Junit5 |
單元測(cè)試設(shè)計(jì) 內(nèi)容一:構(gòu)思單元測(cè)試 1.單元測(cè)試模型的設(shè)計(jì) 2.單元測(cè)試用例設(shè)計(jì) 3.為系統(tǒng)運(yùn)行起來(lái)而設(shè)計(jì) 4.為正向測(cè)試而設(shè)計(jì)用例 5.為逆向測(cè)試而設(shè)計(jì)用例 6.為滿(mǎn)足特殊需求而設(shè)計(jì)用例 7.為代碼覆蓋而設(shè)計(jì)用例 8.通過(guò)案例分析單元測(cè)試編程前的測(cè)試用例的設(shè)計(jì) 內(nèi)容二:?jiǎn)卧獪y(cè)試設(shè)計(jì)與構(gòu)建-基于路徑的白盒測(cè)試 1.單元測(cè)試白盒設(shè)計(jì) 2.標(biāo)識(shí)單元測(cè)試點(diǎn) 3.語(yǔ)句覆蓋 4.判定覆蓋 5.基本路徑測(cè)試法 6.白盒測(cè)試綜合策略 7.測(cè)試覆蓋準(zhǔn)則 8.通過(guò)大量案例分析,如何應(yīng)用各種白盒測(cè)試設(shè)計(jì)技術(shù),進(jìn)行設(shè)計(jì)單元測(cè)試 內(nèi)容三:?jiǎn)卧獪y(cè)試設(shè)計(jì)與構(gòu)建—基于測(cè)試數(shù)據(jù)的黑盒測(cè)試 1.單元測(cè)試黑盒設(shè)計(jì) 2.等價(jià)類(lèi)設(shè)計(jì)法 3.邊界值分析法 4.判定表(決策表)驅(qū)動(dòng)化 5.狀態(tài)轉(zhuǎn)移測(cè)試設(shè)計(jì) 6.用例/場(chǎng)景測(cè)試 7.動(dòng)態(tài)分析法 9.通過(guò)大量案例分析,如何應(yīng)用各種黑盒測(cè)試設(shè)計(jì)技術(shù),進(jìn)行設(shè)計(jì)單元測(cè)試 內(nèi)容四:?jiǎn)卧獪y(cè)試設(shè)計(jì)最佳實(shí)踐 1.單元測(cè)試的私有方法的測(cè)試 2.測(cè)試私有方法是錯(cuò)誤的! 3.私有方法重構(gòu)-將私有方法變成公共方法 4.私有方法重構(gòu)-抽取方法,形成新類(lèi) 5.測(cè)試私有方法的例外情況 6.基于交互的測(cè)試最佳實(shí)踐 7.基于狀態(tài)的測(cè)試最佳實(shí)踐 8.基于狀態(tài)的測(cè)試?yán)脤?duì)象內(nèi)部狀態(tài)驗(yàn)證執(zhí)行結(jié)果的正確性。 9.利用協(xié)作對(duì)象的完成狀態(tài)測(cè)試 內(nèi)容五:?jiǎn)卧獪y(cè)試設(shè)計(jì)SPIFFy原則 1.單元測(cè)試粒度 2.單元測(cè)試依賴(lài) 3.單元測(cè)試原則-SPIFFy: 4.Small: 10 lines or less, ideally 5.Precise: Checks one behavior of one class 6.Isolated: Doesn't affect other tests 7.Fast: Takes milliseconds to run 8.Frequently Run: Every time you make a change |
單元測(cè)試壞味道 容一:測(cè)試代碼壞味道 1.模糊測(cè)試(也稱(chēng)為長(zhǎng)測(cè)試、復(fù)雜測(cè)試、冗長(zhǎng)測(cè)試) 2.條件測(cè)試邏輯(也稱(chēng)為縮排的測(cè)試碼) 3.難以測(cè)試的代碼 4.測(cè)試碼復(fù)制 5.產(chǎn)品中的測(cè)試邏輯 6.通過(guò)案例分析測(cè)試代碼的壞味道,癥狀,原因,重構(gòu)等 內(nèi)容二:測(cè)試行為的壞味道 1.斷言滾輪 2.不穩(wěn)定測(cè)試 3.脆弱性測(cè)試 4.手工干預(yù)測(cè)試(指必須手工設(shè)置測(cè)試環(huán)境,調(diào)整測(cè)試代碼) 5.緩慢測(cè)試 6.通過(guò)案例分析以上每種行為壞味道,癥狀,原因,重構(gòu)等 內(nèi)容三:測(cè)試項(xiàng)目的壞味道 1.缺陷測(cè)試壞味道 2.開(kāi)發(fā)人員沒(méi)有寫(xiě)測(cè)試 3.高維護(hù)成本的單元測(cè)試 4.通過(guò)案例分析以上每種行為壞味道,癥狀,原因,重構(gòu)等 |
測(cè)試覆蓋 內(nèi)容一:邏輯覆蓋 1.實(shí)施邏輯覆蓋的原因 2.語(yǔ)句覆蓋 3.判定覆蓋 4.條件覆蓋 5.條件覆蓋 6.條件判定組合覆蓋 7.多條件覆蓋 8.修正條件判定覆蓋 9.結(jié)合案例分析,邏輯覆蓋的度量 內(nèi)容二:統(tǒng)計(jì)測(cè)試覆蓋--(以Junit為案例分析) 1.使用clover為junit單元測(cè)試做覆蓋率分析 2.使用Cobertura統(tǒng)計(jì)JUnit測(cè)試覆蓋率 3.結(jié)合案例分析,通過(guò)測(cè)試覆蓋率工具,分析覆蓋率 |
單元測(cè)試模式 內(nèi)容一:?jiǎn)卧獪y(cè)試結(jié)果驗(yàn)證模式 1.狀態(tài)驗(yàn)證模式-基于狀態(tài)的測(cè)試 2.行為驗(yàn)證模式-交互測(cè)試 3.自定義斷言—預(yù)約斷言 4.Delta斷言 5.哨兵斷言 6.根據(jù)案例分析結(jié)果的驗(yàn)證模式 內(nèi)容二:?jiǎn)卧獪y(cè)試替身模式 1.Test Stub模式 2.Test Spy模式 3.Mock Object模式 4.Fake Object模式 |
單元測(cè)試之中如何解耦依賴(lài) 內(nèi)容一:解除依賴(lài)關(guān)系 - Extract and Override 和 Stub方法 1.反測(cè)試設(shè)計(jì)-外部依賴(lài) 2.不確定性1-時(shí)間 3.不確定性2-隨機(jī)性 4.不確定性3-外界第三方依賴(lài) 5.Extract and Override: The Universal Pliers 6. Isolate And Test Around 7.How Much Code To Extract? 8.Why You Should NOT Use Extract And Override 9.Why You SHOULD Use Extract And Override 10.利用Stub解除依賴(lài)關(guān)系 11.使用存根Stub破除依賴(lài) 12.依賴(lài)注入Stub的方式 13.多種Stub的案例 14.分析真實(shí)項(xiàng)目,如何使用Stub 內(nèi)容二:通過(guò)Mock對(duì)象解除依賴(lài) 1.Mock模擬對(duì)象和Stub存根的區(qū)別 2.手工Mock測(cè)試 3.手工Mock模擬對(duì)象的簡(jiǎn)單示例 4.同時(shí)使用Mock模擬對(duì)象和Stub存根 5.每個(gè)測(cè)試方法僅有一個(gè)模擬對(duì)象 6.偽對(duì)象鏈:用存根生成模擬對(duì)象或其他存根 7.手工模擬對(duì)象和存根的問(wèn)題 8.分析真實(shí)項(xiàng)目,如何使用Mock, 以及相關(guān)問(wèn)題 內(nèi)容三:Mock隔離框架 1.Mock與Stub的區(qū)別 2.為什么要使用隔離框架 3.動(dòng)態(tài)生成偽對(duì)象 4.動(dòng)態(tài)生成模擬值 5.現(xiàn)有的隔離框架 6.隔離框架的優(yōu)缺點(diǎn) 7.隔離框架設(shè)計(jì)反模式 8.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,什么時(shí)間使用Mock ,什么時(shí)間使用Stub, 如何權(quán)衡 內(nèi)容三:Mock隔離框架(Mockito) 1.Mockito 介紹 2.Mockito實(shí)現(xiàn)原理與架構(gòu) 3.Mockito資源 4.Mockito驗(yàn)證行為 5.Mockito模擬我們所期望的結(jié)果 6.參數(shù)匹配和自定義參數(shù)匹配 7.連續(xù)調(diào)用和驗(yàn)證確切的調(diào)用次數(shù) 8.驗(yàn)證執(zhí)行順序 9.使用方法預(yù)期回調(diào)接口生成期望值(Answer結(jié)構(gòu)) 10.修改對(duì)未預(yù)設(shè)的調(diào)用返回默認(rèn)期望 11.Mockito如何實(shí)現(xiàn)Mock |
增強(qiáng)設(shè)計(jì)與代碼的可測(cè)試性 內(nèi)容一:可測(cè)試性設(shè)計(jì)與可測(cè)試問(wèn)題 1.什么是可測(cè)的設(shè)計(jì) 2.模塊化設(shè)計(jì)與SOLID設(shè)計(jì)原則 3.實(shí)際開(kāi)發(fā)之中的可測(cè)性的問(wèn)題 4.無(wú)法實(shí)例化某個(gè)類(lèi) 5.無(wú)法調(diào)用某個(gè)方法 6.無(wú)法觀(guān)察到輸出 7.無(wú)法替換某個(gè)協(xié)作者 8.無(wú)法覆蓋某個(gè)方法 9.案例分析 內(nèi)容二:可測(cè)試性設(shè)計(jì)最佳實(shí)踐 1.可測(cè)的設(shè)計(jì)的指南 2.抽取接口,容許替換底層實(shí)現(xiàn) 3.在被測(cè)類(lèi)中注入樁對(duì)象 4.避免復(fù)雜的私有方法 5.避免final方法 6.避免static方法 7.使用new時(shí)要當(dāng)心 8.避免在構(gòu)造函數(shù)中包含邏輯 9.避免單例 10.組合優(yōu)于繼承 11.封裝外部庫(kù) 12.避免服務(wù)查找 13.結(jié)合多個(gè)大型案例項(xiàng)目進(jìn)行分析,如何通過(guò)重構(gòu)代碼,實(shí)現(xiàn)可測(cè)試性 |
企業(yè)級(jí)系統(tǒng)的單元測(cè)試 內(nèi)容一:企業(yè)級(jí)系統(tǒng)的單元測(cè)試最佳實(shí)踐 1.企業(yè)應(yīng)用系統(tǒng)特點(diǎn) 2.企業(yè)應(yīng)用典型場(chǎng)景 3.系統(tǒng)分層架構(gòu)與分層的單元測(cè)試 4.一個(gè)案例的分析 5.單元測(cè)試特點(diǎn) 6.UI層單元測(cè)試測(cè)試 7.Ctroller層單元測(cè)試 8.Service層單元測(cè)試 9.數(shù)據(jù)庫(kù)層單元測(cè)試 10.容器內(nèi)的測(cè)試 11.通過(guò)企業(yè)應(yīng)用案例項(xiàng)目進(jìn)行分析單元測(cè)試的構(gòu)建最佳實(shí)踐 |
編寫(xiě)好的單元測(cè)試 內(nèi)容一:好的單元測(cè)試測(cè)試標(biāo)準(zhǔn)-A-TRIP 1.單元測(cè)試的自動(dòng)化-Automatic 2.單元測(cè)試徹底的-Thorough 3.單元測(cè)試可重復(fù)-Repeatable 4.單元測(cè)試獨(dú)立的-Independent 5.單元測(cè)試專(zhuān)業(yè)的-Professional 6.通過(guò)案例分析,分析好的單元測(cè)試標(biāo)準(zhǔn) 內(nèi)容二:如何編寫(xiě)好的單元測(cè)試測(cè)試 1.單元測(cè)試中的壞味道 2.如何編寫(xiě)容易被看懂的模式 3.如何編寫(xiě)容易維護(hù)的模式 4.如何編寫(xiě)信得過(guò)的模式 5.重構(gòu)單元測(cè)試,改進(jìn)代碼設(shè)計(jì) 6.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,分析什么是好的單元測(cè)試 內(nèi)容三:如何編寫(xiě)好的單元測(cè)試測(cè)試 1.優(yōu)秀單元測(cè)試3條準(zhǔn)則 2.優(yōu)秀單元測(cè)試-可讀性 3.優(yōu)秀單元測(cè)試-可維護(hù)性 4.優(yōu)秀單元測(cè)試-可信賴(lài)性 5.如何編寫(xiě)容易被看懂的模式 6.結(jié)合多個(gè)案例項(xiàng)目進(jìn)行分析,分析什么是好的單元測(cè)試 |
TDD測(cè)試驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ) 內(nèi)容一:TDD測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 1.TDD的節(jié)奏 2.TDD的兩個(gè)原則和TDD的目標(biāo) 3.TDD與行為驅(qū)動(dòng)開(kāi)發(fā)(Behaviour Driven Development) 4.TDD與驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Acceptance Test Driven Development) 5.識(shí)別代碼中的壞味道 6.重構(gòu)工具及使用 7.常用重構(gòu)技巧 8.重構(gòu)與預(yù)先設(shè)計(jì)的區(qū)別 通過(guò)案例分析,TDD的最佳實(shí)踐技巧,重構(gòu)的技巧,壞味道等 |
歷史遺留系統(tǒng)如何編寫(xiě)單元測(cè)試 內(nèi)容一:遺留系統(tǒng)代碼環(huán)境下如何編寫(xiě)單元測(cè)試 1.從哪里開(kāi)始添加單元測(cè)試 2.確定抉擇策略1-容易優(yōu)先測(cè)類(lèi)的優(yōu)缺點(diǎn) 3.確定抉擇策略2-困難優(yōu)先測(cè)類(lèi)的優(yōu)缺點(diǎn) 4.遺留代碼改動(dòng)準(zhǔn)則 5.重構(gòu)前寫(xiě)集成測(cè)試 6.遺留代碼整潔測(cè)試的常用工具 7.為第三方代碼做學(xué)習(xí)測(cè)試 8.復(fù)雜遺留系統(tǒng)之中,如何增加單元測(cè)試以及遇到的問(wèn)題 9.通過(guò)真實(shí)案例分析,在遺留系統(tǒng)的的難度和最佳實(shí)踐 |
單元測(cè)試組織和管理 內(nèi)容一:組織和管理測(cè)試 1.通過(guò)自動(dòng)構(gòu)建腳本運(yùn)行測(cè)試 2.將測(cè)試與代碼做同源版本管理 3.根據(jù)速度和類(lèi)型為測(cè)試分類(lèi) 4.創(chuàng)建和維護(hù)項(xiàng)目的測(cè)試輔助設(shè)施 5.結(jié)合我們研發(fā)中心, 如何做單元測(cè)試管理, 已經(jīng)如何組織,以及遇到的問(wèn)題 |
在研發(fā)團(tuán)隊(duì)如何引入單元測(cè)試 內(nèi)容一:將測(cè)試引入到你的組織中 1.如何成功在組織中引入單元測(cè)試 2.為什么在組織中引入單元測(cè)試的努力會(huì)失敗 3.如何將測(cè)試集成到開(kāi)發(fā)流程中 - 敏捷測(cè)試流程 4.常見(jiàn)的疑惑和解答? 5.通過(guò)多個(gè)研發(fā)中心咨詢(xún)經(jīng)驗(yàn),分析單元測(cè)試引入的方式和最佳實(shí)踐 |