版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、測試驅(qū)動開發(fā)1主題測試驅(qū)動開發(fā)的基本概念測試驅(qū)動的基本流程測試驅(qū)動的所采用的技術(shù)及工具DEMO2測試驅(qū)動開發(fā)的基本概念為什么會出現(xiàn)測試驅(qū)動開發(fā)什么是測試驅(qū)動測試驅(qū)動所要達(dá)到的目標(biāo)3測試驅(qū)動蘊(yùn)含的哲學(xué)原理將復(fù)雜事情簡單化讓注意力關(guān)注在單一的事物上分解Hardcode重構(gòu)4為什么會出現(xiàn)TDD程序員當(dāng)有一個新的開發(fā)任務(wù)時,往往第一個念頭就是如何去實(shí)現(xiàn)它呢?“應(yīng)該是這么做的吧,嗯,差不多就是這樣的” 。抓起任務(wù)就開始編碼,一邊寫,一邊修改和設(shè)計(jì)。時間這么緊!我還是先實(shí)現(xiàn)任務(wù)吧,然后再好好測試。還是不工作,時間不多了。不管了,還是先做個實(shí)現(xiàn),以后再來整理代碼吧。我已經(jīng)單步調(diào)試了好幾次了,遍歷了所有可能的
2、分支,應(yīng)該不會有問題了,提交,今天可以好好休息一下了要不要寫單元測試把我剛才單步調(diào)試的步驟寫下來???那樣是很好,但工作量很大哦這樣的情況要作自動測試太復(fù)雜了。還是手工測試一下吧。程序員應(yīng)該做些有創(chuàng)意的東西,這樣才有趣啊測試是QA的事,我為什么要做啊,我做了他們干什么啊5為什么會出現(xiàn)TDD程序員奇怪了,怎么代碼跟開發(fā)文檔上有這么大的差別???這段代碼究竟想表達(dá)什么意思?代碼現(xiàn)在越來越亂了,我都不敢修改代碼了,修改了這個地方,天曉得會引起多少別的地方出錯啊!這個地方的代碼怎么好象在那個地方看到過???這個程序里怎么會有這么多的重復(fù)代碼呢?6為什么會出現(xiàn)TDDQA開發(fā)部在干什么啊,BUG怎么這么多,他們
3、有沒有自己先測試一下啊這下好了,讓他們修改了一個BUG,現(xiàn)在一下子來了這么多的BUG他們到底在搞什么啊,有沒有從用戶的角度考慮啊,我新增一個采購訂單,訂單項(xiàng)竟然可以輸入負(fù)數(shù)。7有辦法可以解決上面的矛盾嗎?8XP中的測試Unit Test(基本不提倡,只對特別功能)Functional Test( Acceptance Test )Regression TestNightly TestIntegration TestStress Test所有的測試都應(yīng)該獨(dú)立地自動的運(yùn)行9什么是Function Test10什么是Regression Test“Regression testing is the
4、process of validating modified parts of the software and ensuring that no new errors are introduced into previously tested code.”一句話,Regresstion Test就是要重新測試所有的代碼和功能。Regression Test和Development Test的不同在于Regression Test需要重用已經(jīng)建立的所有的測試單元(Unit Test )和功能測試套件(Functional Test)。Regression Test的基礎(chǔ)是完整的自動單元測試和功
5、能測試。11什么是Nightly TestNightly Test就是每晚自動運(yùn)行所有的Unit Test和Acceptance Test。Nightly Test是XP中的Continuous Test的一個練習(xí)(Practice)。Nightly Test可以準(zhǔn)確的反映項(xiàng)目開發(fā)的進(jìn)度和質(zhì)量。12Nightly TestNightly Test是軟件開發(fā)中一個保證開發(fā)之質(zhì)量的最有效的方法,也是衡量軟件之質(zhì)量和開發(fā)效率的最好的指標(biāo)。Nightly Test就是每天工作結(jié)束,所有的代碼都Check in到Source Control后,自動運(yùn)行所有的Unit Test和Function Test
6、。測試的結(jié)果應(yīng)該自動分發(fā)給開發(fā)人員和管理層。兩個指標(biāo)數(shù)值:測試?yán)拥耐ㄟ^率 單元測試必須是100%通過。Functional Test 應(yīng)該按計(jì)劃的通過。單元測試的覆蓋率 表明有多少Class被測試過和測試的完善程度。13測試優(yōu)先的編程在寫任何代碼之前,先寫它的Function Test?!癗ever write a line of functional code without a broken test case” Kent BeckTest-First Programming是一種測試技術(shù)嗎?Test-First Programming首先是一種分析方法。它迫使程序員仔細(xì)思考要做什么和不
7、要做什么(而不是如何具體的實(shí)現(xiàn))。特別是各種例外的情況,并用程序語言正式的寫下來。這就好像在程序員的任務(wù)和程序員之間簽訂了一個清晰的正式合同。Test-First Programming是一種設(shè)計(jì)方法。Function Test測試的是程序,而不是一個想法。程序員必須清晰的定義程序的驗(yàn)收條件才能寫出它的Function Test。而這時程序員是不知道(也不需要知道)里面的具體邏輯是如何實(shí)現(xiàn)的。程序員只需要考慮Class的界面和功能(Responsibility)。啊,你在做OO設(shè)計(jì)了。Test-First Programming是一種質(zhì)量控制方法( Quality Control )。如何控制
8、質(zhì)量呢?如何知道我的程序是否運(yùn)行呢?我會不會漏了什么?運(yùn)行一下Function Test。Test-First Programming是一種重構(gòu)和優(yōu)化的方法。我們總希望自己的代碼可以漂亮,運(yùn)行的效率高,所以我們會不斷地去改進(jìn)??墒侨绾伪WC改進(jìn)和優(yōu)化后的質(zhì)量呢?會不會越改越糟?答案還是Function Test。Test-First Programming不是通常意義上的測試技術(shù),它的目的也不是僅僅用來測試你的代碼。Test-First Programming是一種面向?qū)ο蟮拈_發(fā)方法。14什么是Test-Driven Design (TDD)Test-Driven Design是一種開發(fā)風(fēng)格,它
9、要求程序員做到:在寫產(chǎn)品代碼之前,先寫它的功能測試(Function Tests )沒有功能測試的Class不允許作為產(chǎn)品代碼功能測試?yán)記Q定了如何寫產(chǎn)品代碼不斷地成功運(yùn)行所有的功能測試?yán)硬粩嗟耐晟乒δ軠y試?yán)覶est-Driven Design是把需求分析,設(shè)計(jì),質(zhì)量控制量化的過程!15什么是測試驅(qū)動測試驅(qū)動是一種開發(fā)形式:1.首先要編寫測試代碼2.除非存在相關(guān)測試,否則不編寫任何的產(chǎn)品代碼3.由測試來決定需要編寫什么樣的代碼4.利用IDE,根據(jù)測試代碼驅(qū)動功能代碼編譯成功,再運(yùn)行成功5.要求維護(hù)一套詳盡的測試集16測試驅(qū)動所要達(dá)到的目標(biāo)clean code that work 測試驅(qū)動所
10、追求的目標(biāo)就是代碼整潔可用,其實(shí)現(xiàn)的規(guī)則就是:1.只有測試失敗時,我們才寫代碼2.消除重復(fù)設(shè)計(jì),優(yōu)化設(shè)計(jì)結(jié)構(gòu) 3. 測試代碼的業(yè)務(wù)含義明確(DSL)17測試驅(qū)動開發(fā)的基本流程定義應(yīng)用程序的要求熟悉應(yīng)用程序的功能區(qū)域,確定要使用的單項(xiàng)功能項(xiàng)或功能要求創(chuàng)建驗(yàn)證要求的測試列表為功能或要求定義接口和類編寫測試代碼運(yùn)行測試根據(jù)測試生成產(chǎn)品代碼重新運(yùn)行測試,根據(jù)測試修改產(chǎn)品代碼,直到所有測試都通過整理代碼重復(fù)上面的步驟18測試驅(qū)動開發(fā)的基本流程19測試驅(qū)動編碼時的典型場景根據(jù)需求的驗(yàn)收條件編碼測試用例根據(jù)編譯結(jié)果(編譯不通過),將編譯不通過的地方,驅(qū)動功能代碼的編碼,視編譯通過在編譯全部通過后,運(yùn)行測試用
11、例,修改測試不通過部分的功能代碼(hardcode),使測試代碼運(yùn)行成功將hardcode部分逐個修改為真實(shí)的業(yè)務(wù)邏輯,并運(yùn)行測試代碼通過重構(gòu)20測試驅(qū)動的工具與技術(shù)功能測試重構(gòu)的基本概念,及在測試驅(qū)動中的地位重構(gòu)的時機(jī)每日構(gòu)建代碼質(zhì)量API(Findbug、checkstyle、Jester、代碼統(tǒng)計(jì)、測試數(shù)據(jù)統(tǒng)計(jì))模擬對象 (建議只在單元測試中使用)21功能測試什么是功能測試?_ 是黑盒測試,單元測試是白盒測試功能測試是開發(fā)者編寫的一小段代碼,用來驗(yàn)證被檢測代碼的一個很小的,很明確的功能是否正確功能測試的優(yōu)點(diǎn)可以明確地驗(yàn)證功能的正確性 ,提高開發(fā)速度和質(zhì)量,加速了代碼重構(gòu)的過程是一種設(shè)計(jì)行
12、為功能測試可以表現(xiàn)為文檔化具有回歸性,可以隨時隨地的快速的運(yùn)行測試來驗(yàn)證代碼的準(zhǔn)確性22重構(gòu)的基本概念什么是重構(gòu)?重構(gòu)是一個過程:在不改變軟件的外在行為的前提下,對代碼做出修改,以改進(jìn)程序的內(nèi)部結(jié)構(gòu)。提高其可理解性,降低其修改成本。23重構(gòu)的好處重構(gòu)可以改進(jìn)軟件設(shè)計(jì)重構(gòu)使軟件更加容易理解重構(gòu)可以幫助找出BUG重構(gòu)可以提高編程速度24重構(gòu)的時機(jī)存在重復(fù)的時候當(dāng)我們覺察到代碼或代碼所表達(dá)的意圖不明確的時候代碼有味道的時候(我們的代碼可能存在問題的時候)25DEMO: 貨幣算法26ToDOList當(dāng)法郎與美元的兌換率為2:1的時候,5美元+10法郎=10美元5美元*2= 10美元27總結(jié)(1)TDD
13、的通用過程快速新增一個測試運(yùn)行所有的測試針對測試不通過的地方進(jìn)行修改運(yùn)行所有的測試,并且全部通過重構(gòu)運(yùn)行所有的測試,并且全部通過28總結(jié)(2)積累代碼質(zhì)量API建立測試與需求的對應(yīng)關(guān)系,需求測試度測試完成時,編譯運(yùn)行的次數(shù)、變動代碼行數(shù)測試運(yùn)行的時間曲線(間隔)重構(gòu)的次數(shù),每次重構(gòu)的代碼行數(shù)質(zhì)量控制工具的運(yùn)行次數(shù)、相關(guān)參數(shù)29TDD防止Over-Engineering在開發(fā)中采用TDD,可以有效的避免過度設(shè)計(jì)和開發(fā)。如果程序員不愿為一個Method寫測試?yán)踊蛘哒J(rèn)為現(xiàn)在沒有必要測試改Method,那這個Method多半是現(xiàn)在不需要的。30TDD,程序員和管理層對程序員來說,通過運(yùn)行Unit Test和Functional Test,每天下班的時候都可以清楚的知道自己的代碼是work的。對管理層來說,通過Nightly Test的結(jié)果,每天一早都清楚的知道項(xiàng)目的質(zhì)量和開發(fā)進(jìn)度。31XP中誰來寫TestsDeveloper:Unit TestAcceptance Test( Functional Test )Customer:Acceptance Test用戶為每一個User Story寫Functional Test。但通常用戶并不具備設(shè)計(jì)和開發(fā)Functional Test的能力,需要程序員的幫助。可以開
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粉末材料采購合同范例
- 煤廠出售煤炭合同范例
- 二壩拆遷合同范例
- 借款委托服務(wù)合同范例
- 飼料賒銷合同范例
- 冠名贊助會議合同范例
- 防腐安全協(xié)議合同范例
- 熔煉工廠轉(zhuǎn)讓合同范例
- 診所增項(xiàng)合同范例
- 煤廠廢鐵出售合同范例
- 氨水濃度密度對照表
- 白雪歌送武判官歸京公開課一等獎?wù)n件省課獲獎?wù)n件
- 園林植物栽培與環(huán)境
- 小型雙級液壓舉升器設(shè)計(jì)
- 9月支部委員會會議記錄
- 寺廟消防安全規(guī)定
- 學(xué)會正當(dāng)防衛(wèi)課件
- 木質(zhì)吸音板施工工藝
- 天津市年中考數(shù)學(xué)題型專項(xiàng)訓(xùn)練:旋轉(zhuǎn)問題含答案名師(完整版)資料
- 三年級【科學(xué)(教科版)6】加快溶解學(xué)習(xí)任務(wù)單
- 文華財(cái)經(jīng)-半自動程序化交易使用指南101212
評論
0/150
提交評論