XP中的TDD是什么?測(cè)試驅(qū)動(dòng)開(kāi)發(fā)?測(cè)試驅(qū)動(dòng)設(shè)計(jì)?
?
?
Test-Driven Development
http://www.xprogramming.com/xpmag/whatisxp.htm#test
Extreme Programming is obsessed with feedback, and in software development, good feedback requires good testing. Top XP teams practice "test-driven development", working in very short cycles of adding a test, then making it work. Almost effortlessly, teams produce code with nearly 100 percent test coverage, which is a great step forward in most shops. (If your programmers are already doing even more sophisticated testing, more power to you. Keep it up, it can only help!)
It isn't enough to write tests: you have to run them. Here, too, Extreme Programming is extreme. These "programmer tests", or "unit tests" are all collected together, and every time any programmer releases any code to the repository (and pairs typically release twice a day or more), every single one of the programmer tests must run correctly. One hundred percent, all the time! This means that programmers get immediate feedback on how they're doing. Additionally, these tests provide invaluable support as the software design is improved.
在上面的圖中,列出的的是XP的12個(gè)團(tuán)隊(duì)實(shí)踐。Test-Driven Development是其中之一。
Kent Beck 的著作TDD(Test Driven Development) 中詳細(xì)講述了測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。
在XP中測(cè)試是一種設(shè)計(jì),不是簡(jiǎn)單的為了測(cè)試你的功能是否實(shí)現(xiàn)。測(cè)試先行一個(gè)目的
是可以在代碼編寫(xiě)之前,保證測(cè)試已經(jīng)寫(xiě)好;其實(shí)這些測(cè)試的另一個(gè)目的就是設(shè)計(jì)接口,
保證接口在以后的修改過(guò)程中能夠滿足測(cè)試(設(shè)計(jì))。當(dāng)你有意或無(wú)意修改接口的時(shí)候,你必須同時(shí)
修改測(cè)試
要改動(dòng)接口的時(shí)候,也應(yīng)該是先修改測(cè)試,再修改代碼。而不是修改代碼等著報(bào)錯(cuò)再修改
測(cè)試(設(shè)計(jì))
。(測(cè)試必須100%通過(guò)才能進(jìn)行下一個(gè)功能),這樣測(cè)試也是在提醒你,接口已經(jīng)改變。
實(shí)際上,設(shè)計(jì)已經(jīng)改變。當(dāng)你修改單元測(cè)試的時(shí)候,可能就會(huì)遭到抱怨。為什么?你修改了設(shè)計(jì)
,別人的代碼是依賴你修改前的測(cè)試(設(shè)計(jì)),那么新的測(cè)試(設(shè)計(jì))中的變動(dòng)可能要影響到
別人已有的代碼。
?
當(dāng)你使用TDD的時(shí)候一定要說(shuō)明是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)還是測(cè)試驅(qū)動(dòng)設(shè)計(jì)。這兩者是有區(qū)別的。測(cè)試驅(qū)動(dòng)
開(kāi)發(fā),是通過(guò)測(cè)試定義所要開(kāi)發(fā)的功能的接口,然后實(shí)現(xiàn)功能的開(kāi)發(fā)過(guò)程。對(duì)于測(cè)試驅(qū)動(dòng)設(shè)計(jì),在XP中似乎
已經(jīng)消失了,而是被測(cè)試驅(qū)動(dòng)開(kāi)發(fā)所取代。另外在XP中有用于描述設(shè)計(jì)的,SimpleDesign ,Design Improvement.
在XP中測(cè)試是一種設(shè)計(jì),設(shè)計(jì)之后才有開(kāi)發(fā),這也就是為什么要測(cè)試先行了。
在XP中測(cè)試是一種文檔,用于描述設(shè)計(jì)。