版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)1主題測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的基本概念測(cè)試驅(qū)動(dòng)的基本流程測(cè)試驅(qū)動(dòng)的所采用的技術(shù)及工具DEMO2測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的基本概念為什么會(huì)出現(xiàn)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)什么是測(cè)試驅(qū)動(dòng)測(cè)試驅(qū)動(dòng)所要達(dá)到的目標(biāo)3測(cè)試驅(qū)動(dòng)蘊(yùn)含的哲學(xué)原理將復(fù)雜事情簡(jiǎn)單化讓注意力關(guān)注在單一的事物上分解Hardcode重構(gòu)4為什么會(huì)出現(xiàn)TDD程序員當(dāng)有一個(gè)新的開(kāi)發(fā)任務(wù)時(shí),往往第一個(gè)念頭就是如何去實(shí)現(xiàn)它呢?“應(yīng)該是這么做的吧,嗯,差不多就是這樣的” 。抓起任務(wù)就開(kāi)始編碼,一邊寫(xiě),一邊修改和設(shè)計(jì)。時(shí)間這么緊!我還是先實(shí)現(xiàn)任務(wù)吧,然后再好好測(cè)試。還是不工作,時(shí)間不多了。不管了,還是先做個(gè)實(shí)現(xiàn),以后再來(lái)整理代碼吧。我已經(jīng)單步調(diào)試了好幾次了,遍歷了所有可能的
2、分支,應(yīng)該不會(huì)有問(wèn)題了,提交,今天可以好好休息一下了要不要寫(xiě)單元測(cè)試把我剛才單步調(diào)試的步驟寫(xiě)下來(lái)???那樣是很好,但工作量很大哦這樣的情況要作自動(dòng)測(cè)試太復(fù)雜了。還是手工測(cè)試一下吧。程序員應(yīng)該做些有創(chuàng)意的東西,這樣才有趣啊測(cè)試是QA的事,我為什么要做啊,我做了他們干什么啊5為什么會(huì)出現(xiàn)TDD程序員奇怪了,怎么代碼跟開(kāi)發(fā)文檔上有這么大的差別???這段代碼究竟想表達(dá)什么意思?代碼現(xiàn)在越來(lái)越亂了,我都不敢修改代碼了,修改了這個(gè)地方,天曉得會(huì)引起多少別的地方出錯(cuò)啊!這個(gè)地方的代碼怎么好象在那個(gè)地方看到過(guò)???這個(gè)程序里怎么會(huì)有這么多的重復(fù)代碼呢?6為什么會(huì)出現(xiàn)TDDQA開(kāi)發(fā)部在干什么啊,BUG怎么這么多,他們
3、有沒(méi)有自己先測(cè)試一下啊這下好了,讓他們修改了一個(gè)BUG,現(xiàn)在一下子來(lái)了這么多的BUG他們到底在搞什么啊,有沒(méi)有從用戶的角度考慮啊,我新增一個(gè)采購(gòu)訂單,訂單項(xiàng)竟然可以輸入負(fù)數(shù)。7有辦法可以解決上面的矛盾嗎?8XP中的測(cè)試Unit Test(基本不提倡,只對(duì)特別功能)Functional Test( Acceptance Test )Regression TestNightly TestIntegration TestStress Test所有的測(cè)試都應(yīng)該獨(dú)立地自動(dòng)的運(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就是要重新測(cè)試所有的代碼和功能。Regression Test和Development Test的不同在于Regression Test需要重用已經(jīng)建立的所有的測(cè)試單元(Unit Test )和功能測(cè)試套件(Functional Test)。Regression Test的基礎(chǔ)是完整的自動(dòng)單元測(cè)試和功
5、能測(cè)試。11什么是Nightly TestNightly Test就是每晚自動(dòng)運(yùn)行所有的Unit Test和Acceptance Test。Nightly Test是XP中的Continuous Test的一個(gè)練習(xí)(Practice)。Nightly Test可以準(zhǔn)確的反映項(xiàng)目開(kāi)發(fā)的進(jìn)度和質(zhì)量。12Nightly TestNightly Test是軟件開(kāi)發(fā)中一個(gè)保證開(kāi)發(fā)之質(zhì)量的最有效的方法,也是衡量軟件之質(zhì)量和開(kāi)發(fā)效率的最好的指標(biāo)。Nightly Test就是每天工作結(jié)束,所有的代碼都Check in到Source Control后,自動(dòng)運(yùn)行所有的Unit Test和Function Test
6、。測(cè)試的結(jié)果應(yīng)該自動(dòng)分發(fā)給開(kāi)發(fā)人員和管理層。兩個(gè)指標(biāo)數(shù)值:測(cè)試?yán)拥耐ㄟ^(guò)率 單元測(cè)試必須是100%通過(guò)。Functional Test 應(yīng)該按計(jì)劃的通過(guò)。單元測(cè)試的覆蓋率 表明有多少Class被測(cè)試過(guò)和測(cè)試的完善程度。13測(cè)試優(yōu)先的編程在寫(xiě)任何代碼之前,先寫(xiě)它的Function Test?!癗ever write a line of functional code without a broken test case” Kent BeckTest-First Programming是一種測(cè)試技術(shù)嗎?Test-First Programming首先是一種分析方法。它迫使程序員仔細(xì)思考要做什么和不
7、要做什么(而不是如何具體的實(shí)現(xiàn))。特別是各種例外的情況,并用程序語(yǔ)言正式的寫(xiě)下來(lái)。這就好像在程序員的任務(wù)和程序員之間簽訂了一個(gè)清晰的正式合同。Test-First Programming是一種設(shè)計(jì)方法。Function Test測(cè)試的是程序,而不是一個(gè)想法。程序員必須清晰的定義程序的驗(yàn)收條件才能寫(xiě)出它的Function Test。而這時(shí)程序員是不知道(也不需要知道)里面的具體邏輯是如何實(shí)現(xiàn)的。程序員只需要考慮Class的界面和功能(Responsibility)。啊,你在做OO設(shè)計(jì)了。Test-First Programming是一種質(zhì)量控制方法( Quality Control )。如何控制
8、質(zhì)量呢?如何知道我的程序是否運(yùn)行呢?我會(huì)不會(huì)漏了什么?運(yùn)行一下Function Test。Test-First Programming是一種重構(gòu)和優(yōu)化的方法。我們總希望自己的代碼可以漂亮,運(yùn)行的效率高,所以我們會(huì)不斷地去改進(jìn)??墒侨绾伪WC改進(jìn)和優(yōu)化后的質(zhì)量呢?會(huì)不會(huì)越改越糟?答案還是Function Test。Test-First Programming不是通常意義上的測(cè)試技術(shù),它的目的也不是僅僅用來(lái)測(cè)試你的代碼。Test-First Programming是一種面向?qū)ο蟮拈_(kāi)發(fā)方法。14什么是Test-Driven Design (TDD)Test-Driven Design是一種開(kāi)發(fā)風(fēng)格,它
9、要求程序員做到:在寫(xiě)產(chǎn)品代碼之前,先寫(xiě)它的功能測(cè)試(Function Tests )沒(méi)有功能測(cè)試的Class不允許作為產(chǎn)品代碼功能測(cè)試?yán)記Q定了如何寫(xiě)產(chǎn)品代碼不斷地成功運(yùn)行所有的功能測(cè)試?yán)硬粩嗟耐晟乒δ軠y(cè)試?yán)覶est-Driven Design是把需求分析,設(shè)計(jì),質(zhì)量控制量化的過(guò)程!15什么是測(cè)試驅(qū)動(dòng)測(cè)試驅(qū)動(dòng)是一種開(kāi)發(fā)形式:1.首先要編寫(xiě)測(cè)試代碼2.除非存在相關(guān)測(cè)試,否則不編寫(xiě)任何的產(chǎn)品代碼3.由測(cè)試來(lái)決定需要編寫(xiě)什么樣的代碼4.利用IDE,根據(jù)測(cè)試代碼驅(qū)動(dòng)功能代碼編譯成功,再運(yùn)行成功5.要求維護(hù)一套詳盡的測(cè)試集16測(cè)試驅(qū)動(dòng)所要達(dá)到的目標(biāo)clean code that work 測(cè)試驅(qū)動(dòng)所
10、追求的目標(biāo)就是代碼整潔可用,其實(shí)現(xiàn)的規(guī)則就是:1.只有測(cè)試失敗時(shí),我們才寫(xiě)代碼2.消除重復(fù)設(shè)計(jì),優(yōu)化設(shè)計(jì)結(jié)構(gòu) 3. 測(cè)試代碼的業(yè)務(wù)含義明確(DSL)17測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的基本流程定義應(yīng)用程序的要求熟悉應(yīng)用程序的功能區(qū)域,確定要使用的單項(xiàng)功能項(xiàng)或功能要求創(chuàng)建驗(yàn)證要求的測(cè)試列表為功能或要求定義接口和類編寫(xiě)測(cè)試代碼運(yùn)行測(cè)試根據(jù)測(cè)試生成產(chǎn)品代碼重新運(yùn)行測(cè)試,根據(jù)測(cè)試修改產(chǎn)品代碼,直到所有測(cè)試都通過(guò)整理代碼重復(fù)上面的步驟18測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的基本流程19測(cè)試驅(qū)動(dòng)編碼時(shí)的典型場(chǎng)景根據(jù)需求的驗(yàn)收條件編碼測(cè)試用例根據(jù)編譯結(jié)果(編譯不通過(guò)),將編譯不通過(guò)的地方,驅(qū)動(dòng)功能代碼的編碼,視編譯通過(guò)在編譯全部通過(guò)后,運(yùn)行測(cè)試用
11、例,修改測(cè)試不通過(guò)部分的功能代碼(hardcode),使測(cè)試代碼運(yùn)行成功將hardcode部分逐個(gè)修改為真實(shí)的業(yè)務(wù)邏輯,并運(yùn)行測(cè)試代碼通過(guò)重構(gòu)20測(cè)試驅(qū)動(dòng)的工具與技術(shù)功能測(cè)試重構(gòu)的基本概念,及在測(cè)試驅(qū)動(dòng)中的地位重構(gòu)的時(shí)機(jī)每日構(gòu)建代碼質(zhì)量API(Findbug、checkstyle、Jester、代碼統(tǒng)計(jì)、測(cè)試數(shù)據(jù)統(tǒng)計(jì))模擬對(duì)象 (建議只在單元測(cè)試中使用)21功能測(cè)試什么是功能測(cè)試?_ 是黑盒測(cè)試,單元測(cè)試是白盒測(cè)試功能測(cè)試是開(kāi)發(fā)者編寫(xiě)的一小段代碼,用來(lái)驗(yàn)證被檢測(cè)代碼的一個(gè)很小的,很明確的功能是否正確功能測(cè)試的優(yōu)點(diǎn)可以明確地驗(yàn)證功能的正確性 ,提高開(kāi)發(fā)速度和質(zhì)量,加速了代碼重構(gòu)的過(guò)程是一種設(shè)計(jì)行
12、為功能測(cè)試可以表現(xiàn)為文檔化具有回歸性,可以隨時(shí)隨地的快速的運(yùn)行測(cè)試來(lái)驗(yàn)證代碼的準(zhǔn)確性22重構(gòu)的基本概念什么是重構(gòu)?重構(gòu)是一個(gè)過(guò)程:在不改變軟件的外在行為的前提下,對(duì)代碼做出修改,以改進(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)的時(shí)機(jī)存在重復(fù)的時(shí)候當(dāng)我們覺(jué)察到代碼或代碼所表達(dá)的意圖不明確的時(shí)候代碼有味道的時(shí)候(我們的代碼可能存在問(wèn)題的時(shí)候)25DEMO: 貨幣算法26ToDOList當(dāng)法郎與美元的兌換率為2:1的時(shí)候,5美元+10法郎=10美元5美元*2= 10美元27總結(jié)(1)TDD
13、的通用過(guò)程快速新增一個(gè)測(cè)試運(yùn)行所有的測(cè)試針對(duì)測(cè)試不通過(guò)的地方進(jìn)行修改運(yùn)行所有的測(cè)試,并且全部通過(guò)重構(gòu)運(yùn)行所有的測(cè)試,并且全部通過(guò)28總結(jié)(2)積累代碼質(zhì)量API建立測(cè)試與需求的對(duì)應(yīng)關(guān)系,需求測(cè)試度測(cè)試完成時(shí),編譯運(yùn)行的次數(shù)、變動(dòng)代碼行數(shù)測(cè)試運(yùn)行的時(shí)間曲線(間隔)重構(gòu)的次數(shù),每次重構(gòu)的代碼行數(shù)質(zhì)量控制工具的運(yùn)行次數(shù)、相關(guān)參數(shù)29TDD防止Over-Engineering在開(kāi)發(fā)中采用TDD,可以有效的避免過(guò)度設(shè)計(jì)和開(kāi)發(fā)。如果程序員不愿為一個(gè)Method寫(xiě)測(cè)試?yán)踊蛘哒J(rèn)為現(xiàn)在沒(méi)有必要測(cè)試改Method,那這個(gè)Method多半是現(xiàn)在不需要的。30TDD,程序員和管理層對(duì)程序員來(lái)說(shuō),通過(guò)運(yùn)行Unit Test和Functional Test,每天下班的時(shí)候都可以清楚的知道自己的代碼是work的。對(duì)管理層來(lái)說(shuō),通過(guò)Nightly Test的結(jié)果,每天一早都清楚的知道項(xiàng)目的質(zhì)量和開(kāi)發(fā)進(jìn)度。31XP中誰(shuí)來(lái)寫(xiě)TestsDeveloper:Unit TestAcceptance Test( Functional Test )Customer:Acceptance Test用戶為每一個(gè)User Story寫(xiě)Functional Test。但通常用戶并不具備設(shè)計(jì)和開(kāi)發(fā)Functional Test的能力,需要程序員的幫助。可以開(kāi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度知識(shí)產(chǎn)權(quán)質(zhì)押貸款協(xié)議4篇
- 2025年度個(gè)人與銀行個(gè)人貸款合作專項(xiàng)協(xié)議4篇
- 二零二五年度農(nóng)業(yè)企業(yè)職業(yè)經(jīng)理人市場(chǎng)拓展合同4篇
- 二零二五年度團(tuán)購(gòu)商品房質(zhì)量監(jiān)督協(xié)議2篇
- 二零二五年度因婚外情離婚的財(cái)產(chǎn)分割與子女監(jiān)護(hù)協(xié)議3篇
- 2025年度個(gè)人信用良好消費(fèi)信貸合同范本3篇
- 二零二五年度仇媛離婚協(xié)議包含財(cái)產(chǎn)分割與子女醫(yī)療責(zé)任合同4篇
- 2025版建筑工程設(shè)計(jì)承發(fā)包合同范本(2025年度)
- 二零二五年度企業(yè)財(cái)務(wù)預(yù)算編制合同3篇
- 二零二五年度賓館客房預(yù)訂系統(tǒng)升級(jí)合同3篇
- 2024版塑料購(gòu)銷合同范本買(mǎi)賣(mài)
- JJF 2184-2025電子計(jì)價(jià)秤型式評(píng)價(jià)大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級(jí)上學(xué)期語(yǔ)文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書(shū)范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語(yǔ)六年級(jí)下冊(cè)全冊(cè)教案
- 汽車(chē)噴漆勞務(wù)外包合同范本
- 2024年重慶南開(kāi)(融僑)中學(xué)中考三模英語(yǔ)試題含答案
- 16J914-1 公用建筑衛(wèi)生間
評(píng)論
0/150
提交評(píng)論