锘??xml version="1.0" encoding="utf-8" standalone="yes"?>成人国产精品入口免费视频,中文精品久久,视频在线99http://www.aygfsteel.com/outuo2/zh-cnFri, 06 Jun 2025 12:16:34 GMTFri, 06 Jun 2025 12:16:34 GMT60瀵瑰嚭宸殑欏圭洰緇忕悊鐨勭湅娉?/title><link>http://www.aygfsteel.com/outuo2/archive/2006/06/15/53053.html</link><dc:creator>嬈ф嫇</dc:creator><author>嬈ф嫇</author><pubDate>Thu, 15 Jun 2006 10:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/outuo2/archive/2006/06/15/53053.html</guid><wfw:comment>http://www.aygfsteel.com/outuo2/comments/53053.html</wfw:comment><comments>http://www.aygfsteel.com/outuo2/archive/2006/06/15/53053.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/outuo2/comments/commentRss/53053.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/outuo2/services/trackbacks/53053.html</trackback:ping><description><![CDATA[聽聽聽聽聽聽聽 1銆傞」鐩粡鐞嗚嚦灝戝簲璇ョ啛鎮夋暣涓」鐩殑涓氬姟錛岃繖鏍峰宸ヤ綔鐨勫畨鎺掑績涓湁鏁幫紝鑰屼笉鏄窡鐫€瀹㈡埛鐨勫眮鑲″鑷繁鐨勭▼搴忓憳璇達紝瀹㈡埛鍦ㄦ煇涓椂闂寸偣鏄鍝釜鍔熻兘錛岃繖鏍峰甫鏉ョ殑緇撴灉灝嗘槸紼嬪簭鍛樺欏圭洰緇忕悊鐨勪笉婊★紝鍙兘鎵撳嚮鍒扮Н鏋佹€с€?br />聽聽聽聽聽聽聽 2銆傝壇濂界殑鑷垜鎺у埗鑳藉姏錛屽綋鍦ㄥ鍑洪敊鐨勶紝欏圭洰緇忕悊鐨勮涓烘槸鍏朵粬浜虹殑琛ㄧ巼錛涘伓灝旂殑濞變箰鐨勫簲璇ュ緢濂界殑鎺у埗鏃墮棿孌碉紝緇濆涓嶈兘鐜╃墿涓у織銆?br />聽聽聽聽聽聽聽 3銆傝璇濆仛浜嬭緇煎悎鍏徃鐨勫埄鐩婂拰鍛樺伐鐨勫埄鐩婏紝瀵繪壘騫寵 鐐?img src ="http://www.aygfsteel.com/outuo2/aggbug/53053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/outuo2/" target="_blank">嬈ф嫇</a> 2006-06-15 18:08 <a href="http://www.aygfsteel.com/outuo2/archive/2006/06/15/53053.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>嫻嬭瘯椹卞姩寮€鍙戝叏鍔熺暐http://www.aygfsteel.com/outuo2/archive/2006/06/12/52247.html嬈ф嫇嬈ф嫇Mon, 12 Jun 2006 09:05:00 GMThttp://www.aygfsteel.com/outuo2/archive/2006/06/12/52247.htmlhttp://www.aygfsteel.com/outuo2/comments/52247.htmlhttp://www.aygfsteel.com/outuo2/archive/2006/06/12/52247.html#Feedback0http://www.aygfsteel.com/outuo2/comments/commentRss/52247.htmlhttp://www.aygfsteel.com/outuo2/services/trackbacks/52247.html {鍏抽敭瀛梷

嫻嬭瘯椹卞姩寮€鍙?Test Driven Development/TDD
嫻嬭瘯鐢ㄤ緥/TestCase/TC
璁捐/Design
閲嶆瀯/Refactoring

{TDD鐨勭洰鏍噠

Clean Code That Works

榪欏彞璇濈殑鍚箟鏄紝浜嬪疄涓婃垜浠彧鍋氫袱浠朵簨鎯咃細璁╀唬鐮佸鏁堬紙Work錛夊拰璁╀唬鐮佹磥鍑€錛圕lean錛夛紝鍓嶈€呮槸鎶婁簨鎯呭仛瀵癸紝鍚庤€呮槸鎶婁簨鎯呭仛濂姐€傛兂鎯崇湅錛屽叾瀹炴垜浠鉤鏃舵墍鍋氱殑鎵€鏈夊伐浣滐紝闄ゅ幓鏃犵敤鐨勫伐浣滃拰閿欒鐨勫伐浣滀互澶栵紝鐪熸姝g‘鐨勫伐浣滐紝騫朵笖鏄湡姝f湁鎰忎箟鐨勫伐浣滐紝鍏跺疄涔熷氨鍙湁涓ゅぇ綾伙細澧炲姞鍔熻兘鍜屾彁鍗囪璁★紝鑰孴DD姝f槸鍦ㄨ繖涓師鍒欎笂浜х敓鐨勩€傚鏋滄偍鐨勫伐浣滃茍闈炴垜浠兂璞$殑榪欐牱錛岋紙榪欐剰鍛崇潃鎮ㄨ繕瀛樺湪絎笁綾繪紜湁鎰忎箟鐨勫伐浣滐紝鎴栬€呮偍鎵€瑕佸仛鐨勬牴鏈拰鎴戜滑鍦ㄨ鐨勬槸涓ゅ洖浜嬶級錛岄偅涔堣繖鍛婅瘔鎴戜滑鎮ㄥ茍涓嶉渶瑕乀DD錛屾垨鑰呬笉閫傜敤TDD銆傝€屽鏋滄垜浠伓鐒剁寽瀵癸紙榪欏浜庢垜鏉ヨ鏄伓鐒訛紝鑰屽浜嶬ent Beck鍜孧artin Fowler榪欐牱鐨勫ぇ甯堟潵璇村垯鏄緵鍕ゅ伐浣滅殑鎴愭灉錛夛紝閭d箞鎭枩鎮紝TDD鏈夊彲鑳芥垚涓烘偍鏄捐憲鎻愬崌宸ヤ綔鏁堢巼鐨勪竴浠舵硶瀹濄€傝涓嶈灝嗕俊灝嗙枒錛岃嫢鍗寵嫢紱伙紝鍥犱負浠諱綍涓€欏規柊鐨勬妧鏈€斺€斿彧瑕佹槸浠庢牴鏈笂鏀瑰彉浜虹殑琛屼負鏂瑰紡鐨勬妧鏈€斺€斿氨蹇呯劧浣垮緱鐩鎬俊瀹冪殑浜鴻秺鏉ヨ秺鐩鎬俊錛屼笉淇$殑浜鴻秺鏉ヨ秺涓嶄俊銆傝繖灝卞ソ姣斿娓告吵錛屽敮涓€鑳藉浼氭父娉崇殑閫斿緞灝辨槸浜茶嚜涓嬪幓娓革紝闄ゆ涔嬪鍒棤浠栨硶銆傝繖涔熷ソ姣旀垚鍔熷錛屽嵆浣挎妸鍗¤€愬熀鎴栧笇灝斿崥澹殑涔﹀€掕儗濡傛祦涔熶笉鑳芥嫢鏈夌Н鏋佺殑蹇冩€侊紝鍙綋浣犱互縐瀬鐨勫績鎬佸幓鎴愬氨浜嗕竴鐣簨涓氫箣鍚庯紝浣犲氨鍐嶄篃紱諱笉寮€瀹冧簡銆傜浉淇℃垜錛孴DD涔熸槸榪欐牱錛佹兂璇曠敤TDD鐨勪漢浠紝璇烽伒寰笅闈㈢殑姝ラ錛?/p>

緙栧啓TestCase --> 瀹炵幇TestCase --> 閲嶆瀯
錛堢‘瀹氳寖鍥村拰鐩爣錛?/td> 錛堝鍔犲姛鑳斤級 錛堟彁鍗囪璁★級

[鍙嬫儏鎻愮ず錛氭晱鎹峰緩妯′腑鐨勪竴涓浉褰撻噸瑕佺殑瀹炶返琚О涓猴細Prove it With Code錛岃繖縐嶆兂娉曞拰TDD涓嶈皨鑰屽悎銆俔

{TDD鐨勪紭鐐箎

    銆庡厖婊″惛寮曞姏鐨勪紭鐐廣€?/b>

  1. 瀹屽伐鏃跺畬宸ャ€傝〃鏄庢垜鍙互寰堟竻妤氱殑鐪嬪埌鑷繁鐨勮繖孌靛伐浣滃凡緇忕粨鏉熶簡錛岃€屼紶緇熺殑鏂瑰紡寰堥毦鐭ラ亾浠€涔堟椂鍊欑紪鐮佸伐浣滅粨鏉熶簡銆?
  2. 鍏ㄩ潰姝g‘鐨勮璇嗕唬鐮佸拰鍒╃敤浠g爜錛岃€屼紶緇熺殑鏂瑰紡娌℃湁榪欎釜鏈轟細銆?
  3. 涓哄埄鐢ㄤ綘鎴愭灉鐨勪漢鎻愪緵Sample錛屾棤璁哄畠鏄鍒╃敤浣犵殑婧愪唬鐮侊紝榪樻槸鐩存帴閲嶇敤浣犳彁渚涚殑緇勪歡銆?
  4. 寮€鍙戝皬緇勯棿闄嶄綆浜嗕氦嫻佹垚鏈紝鎻愰珮浜嗙浉浜掍俊璧栫▼搴︺€?
  5. 閬垮厤浜嗚繃娓¤璁°€?
  6. 緋葷粺鍙互涓庤灝界殑嫻嬭瘯闆嗕竴璧峰彂甯冿紝浠庤€屽紼嬪簭鐨勫皢鏉ョ増鏈殑淇敼鍜屾墿灞曟彁渚涙柟渚褲€?
  7. TDD緇欎簡鎴戜滑鑷俊錛岃鎴戜滑浠婂ぉ鐨勯棶棰樹粖澶╄В鍐籌紝鏄庡ぉ鐨勯棶棰樻槑澶╄В鍐籌紝浠婂ぉ涓嶈兘瑙e喅鏄庡ぉ鐨勯棶棰橈紝鍥犱負鏄庡ぉ鐨勯棶棰樿繕娌℃湁鍑虹幇(娌℃湁TestCase)錛岄櫎闈炴湁TestCase鍚﹀垯鎴戝喅涓嶅啓浠諱綍浠g爜錛涙槑澶╀篃涓嶅繀鎷呭績浠婂ぉ鐨勯棶棰橈紝鍙鎴戜寒浜嗙豢鐏€?

    銆庝笉鏄捐€屾槗瑙佺殑浼樼偣銆?/b>

  8. 閫冮伩浜嗚璁¤鑹層€傚浜庝竴涓晱鎹風殑寮€鍙戝皬緇勶紝姣忎釜浜洪兘鍦ㄥ仛璁捐銆?
  9. 澶ч儴鍒嗘椂闂翠唬鐮佸鍦ㄩ珮璐ㄩ噺鐘舵€侊紝100錛呯殑鏃墮棿閲屾垚鏋滄槸鍙鐨勩€?
  10. 鐢變簬鍙互淇濊瘉緙栧啓嫻嬭瘯鍜岀紪鍐欎唬鐮佺殑鏄浉鍚岀殑紼嬪簭鍛橈紝闄嶄綆浜嗙悊瑙d唬鐮佹墍鑺辮垂鐨勬垚鏈€?
  11. 涓哄噺灝戞枃妗e拰浠g爜涔嬮棿瀛樺湪鐨勭粏寰殑宸埆鍜岀敱榪欑宸埆鎵€寮曞叆鐨凚ug浣滃嚭鏉板嚭璐$尞銆?
  12. 鍦ㄩ鍏堣璁″拰绱ф€ヨ璁′箣闂村緩绔嬩竴縐嶅鉤琛$偣錛屼負浣犲尯鍒嗗摢浜涜璁¤浜嬪厛鍋氥€佸摢浜涜璁¤榪唬鏃跺仛鎻愪緵浜嗕竴涓彲闈犵殑鍒ゆ柇渚濇嵁銆?

    銆庢湁浜夎鐨勪紭鐐廣€?/b>

  13. 浜嬪疄涓婃彁楂樹簡寮€鍙戞晥鐜囥€傛瘡涓€涓鍦ㄤ嬌鐢═DD騫剁浉淇DD鐨勪漢閮戒細鐩鎬俊榪欎竴鐐癸紝浣嗚鏈涜€呭垯涓嶅悓錛屼笉鐩鎬俊TDD鐨勪漢鐢氳嚦鍧氬喅鍙嶅榪欎竴鐐癸紝榪欏緢姝e父錛屼笘鐣屾€繪槸榪欐牱銆?
  14. 鍙戠幇姣斾紶緇熸祴璇曟柟寮忔洿澶氱殑Bug銆?
  15. 浣縄DE鐨勮皟璇曞姛鑳藉け鍘繪剰涔夛紝鎴栬€呭簲璇ヨ錛岄伩鍏嶄簡浠や漢澶寸棝鐨勮皟璇曞拰鑺傜害浜嗚皟璇曠殑鏃墮棿銆?
  16. 鎬繪槸澶勫湪瑕佷箞緙栫▼瑕佷箞閲嶆瀯鐨勭姸鎬佷笅錛屼笉浼氫嬌浜烘姄鐙傘€傦紙涓ら《甯藉瓙錛?
  17. 鍗曞厓嫻嬭瘯闈炲父鏈夎叮銆?/li>

{TDD鐨勬楠
緙栧啓TestCase --> 瀹炵幇TestCase --> 閲嶆瀯
錛堜笉鍙繍琛岋級 錛堝彲榪愯錛?/td> 錛堥噸鏋勶級
姝ラ 鍒跺搧
錛?錛夊揩閫熸柊澧炰竴涓祴璇曠敤渚?/td> 鏂扮殑TestCase
錛?錛夌紪璇戞墍鏈変唬鐮侊紝鍒氬垰鍐欑殑閭d釜嫻嬭瘯寰堝彲鑳界紪璇戜笉閫氳繃 鍘熷鐨凾ODO List
錛?錛夊仛灝藉彲鑳藉皯鐨勬敼鍔紝璁╃紪璇戦€氳繃 Interface
錛?錛夎繍琛屾墍鏈夌殑嫻嬭瘯錛屽彂鐜版渶鏂扮殑嫻嬭瘯涓嶈兘緙栬瘧閫氳繃 錛?Red Bar)
錛?錛夊仛灝藉彲鑳藉皯鐨勬敼鍔紝璁╂祴璇曢€氳繃 Implementation
錛?錛夎繍琛屾墍鏈夌殑嫻嬭瘯錛屼繚璇佹瘡涓兘鑳介€氳繃 錛?Green Bar)
錛?錛夐噸鏋勪唬鐮侊紝浠ユ秷闄ら噸澶嶈璁?/td> Clean Code That Works

{FAQ}

[浠€涔堟椂鍊欓噸鏋勶紵]
濡傛灉鎮ㄥ湪杞歡鍏徃宸ヤ綔錛屽氨鎰忓懗鐫€鎮ㄦ垚澶╅兘浼氬拰鎯抽€氳繃閲嶆瀯鏀瑰杽浠g爜璐ㄩ噺鐨勬兂娉曟墦浜ら亾錛屼笉浠呮偍濡傛錛屾偍鐨勫ぇ閮ㄥ垎鍚屼簨涔熼兘濡傛銆傚彲鏄紝絀剁珶浠€涔堟椂鍊欒閲嶆瀯錛屼粈涔堟儏鍐典笅搴旇閲嶆瀯鍛紵鎴戠浉淇℃偍鍜屾偍鐨勫悓浜嬪彲鑳芥湁寰堝涓嶅悓鐨勭湅娉曪紝鏈€甯歌鐨勭瓟妗堟槸鈥滆閲嶆瀯鏃墮噸鏋勨€濓紝鈥滃啓涓嶄笅鍘葷殑鏃跺€欓噸鏋勨€濓紝鍜屸€滀笅涓€嬈¤凱浠e紑濮嬩箣鍓嶉噸鏋勨€濓紝鎴栬€呭共鑴嗗氨鏄€滄渶榪戞病鏃墮棿錛屽氨涓嶉噸鏋勪簡錛屼笅嬈℃湁鏃墮棿鐨勬椂鍊欓噸鏋勫惂鈥濄€傛濡傛偍宸茬粡棰勮鍒版垜鎯寵鐨勨€斺€旇繖浜涙兂娉曢兘鏄閲嶆瀯鐨勮瑙c€傞噸鏋勪笉鏄竴縐嶆瀯寤鴻蔣浠剁殑宸ュ叿錛屼笉鏄竴縐嶈璁¤蔣浠剁殑妯″紡錛屼篃涓嶆槸涓€涓蔣浠跺紑鍙戣繃紼嬩腑鐨勭幆鑺傦紝姝g‘鐞嗚В閲嶆瀯鐨勪漢搴旇鎶婇噸鏋勭湅鎴愪竴縐嶄功鍐欎唬鐮佺殑鏂瑰紡錛屾垨涔犳儻錛岄噸鏋勬椂鏃跺埢鍒繪湁鍙兘鍙戠敓銆傚湪TDD涓紝闄ゅ幓緙栧啓嫻嬭瘯鐢ㄤ緥鍜屽疄鐜版祴璇曠敤渚嬩箣澶栫殑鎵€鏈夊伐浣滈兘鏄噸鏋勶紝鎵€浠ワ紝娌℃湁閲嶆瀯浠諱綍璁捐閮戒笉鑳藉疄鐜般€傝嚦浜庝粈涔堟椂鍊欓噸鏋勫槢錛岃繕瑕佸垎寮€鐪嬶紝鏈変笁鍙ヨ瘽鏄垜鐨勭粡楠岋細瀹炵幇嫻嬭瘯鐢ㄤ緥鏃墮噸鏋勪唬鐮侊紝瀹屾垚鏌愪釜鐗規€ф椂閲嶆瀯璁捐錛屼駭鍝佺殑閲嶆瀯瀹屾垚鍚庤繕瑕佽寰楅噸鏋勪竴涓嬫祴璇曠敤渚嬪摝銆?/p>

[浠€涔堟椂鍊欒璁★紵]
榪欎釜闂姣斿墠闈竴涓闅懼洖絳旂殑澶氾紝瀹炶瘽瀹炶錛屾湰浜哄湪渚濈収TDD寮€鍙戣蔣浠剁殑鏃跺€欎篃甯稿父琚繖涓棶棰樺洶鎵幫紝鎬繪槸瑙夊緱鏈変簺闂搴旇鍦ㄥ啓嫻嬭瘯鐢ㄤ緥涔嬪墠瀹氫笅鏉ワ紝鑰屾湁浜涢棶棰樺簲璇ュ湪鏂板涓€涓竴涓祴璇曠敤渚嬬殑榪囩▼涓嚜鐒跺嚭鐜幫紝姘村埌娓犳垚銆傛墍浠ワ紝鎴戠殑寤鴻鏄紝璁捐鐨勬椂鏈哄簲璇ョ敱寮€鍙戣€呰嚜宸辨妸鎻★紝涓嶈鍙楀埌TDD鏂瑰紡鐨勯檺鍒訛紝浣嗘槸錛屼笉闇€瑕佷簨鍏堢‘瀹氱殑浜嬩竴瀹氫笉鑳戒簨鍏堢‘瀹氾紝鍏嶅緱鎹嗕綇浜嗚嚜宸辯殑鎵嬭剼銆?/p>

[浠€涔堟椂鍊欏鍔犳柊鐨凾estCase錛焆
娌′簨鍋氱殑鏃跺€欍€傞€氬父鎴戜滑璁や負錛屽鏋滀綘瑕佸鍔犱竴涓柊鐨勫姛鑳斤紝閭d箞鍏堝啓涓€涓笉鑳介€氳繃鐨凾estCase錛涘鏋滀綘鍙戠幇浜嗕竴涓猙ug錛岄偅涔堝厛鍐欎竴涓笉鑳介€氳繃鐨凾estCase錛涘鏋滀綘鐜板湪浠€涔堥兘娌℃湁錛屼粠0寮€濮嬶紝璇峰厛鍐欎竴涓笉鑳介€氳繃鐨凾estCase銆傛墍鏈夌殑宸ヤ綔閮芥槸浠庝竴涓猅estCase寮€濮嬨€傛澶栵紝榪樿娉ㄦ剰鐨勬槸錛屼竴浜涘ぇ甯堣姹傛垜浠瘡嬈″彧鍏佽鏈変竴涓猅estCase浜孩鐏紝鍦ㄨ繖涓猅estCase娌℃湁Green涔嬪墠涓嶅彲浠ュ啓鍒殑TestCase錛岃繖縐嶈姹傚彲浠ラ€傚綋鑰冭檻錛屼絾鍗充嬌鏈夊涓猅estCase浜孩鐏篃涓嶈绱э紝騫舵湭榪濆弽TDD鐨勪富瑕佺簿紲炪€?/p>

[TestCase璇ユ€庝箞鍐欙紵]
嫻嬭瘯鐢ㄤ緥鐨勭紪鍐欏疄闄呬笂灝辨槸涓や釜榪囩▼錛氫嬌鐢ㄥ皻涓嶅瓨鍦ㄧ殑浠g爜鍜屽畾涔夎繖浜涗唬鐮佺殑鎵ц緇撴灉銆傛墍浠ヤ竴涓猅estCase涔熷氨搴旇鍖呮嫭涓や釜閮ㄥ垎鈥斺€斿満鏅拰鏂█銆傜涓€嬈″啓TestCase鐨勪漢浼氭湁寰堝ぇ鐨勪笉閫傚簲鐨勬劅瑙夛紝鍥犱負浣犱箣鍓嶆墍鍐欑殑鎵€鏈変笢瑗塊兘鏄湪瑙e喅闂錛岀幇鍦ㄨ浣犳彁鍑洪棶棰樼‘瀹炰笉澶т範鎯紝涓嶈繃涓嶇敤鎷呭績錛屼綘姝e湪鍋氭紜殑浜嬫儏錛岃€岃繖涓笘鐣屼笂鏈€闅劇殑浜嬫儏涔熶笉鍦ㄤ簬濡備綍瑙e喅闂錛岃€屽湪浜巃sk the right question錛?/p>

[TDD鑳藉府鍔╂垜娑堥櫎Bug鍚楋紵]
絳旓細涓嶈兘錛佸崈涓囦笉瑕佹妸鈥滄祴璇曗€濆拰鈥滈櫎铏€濇販涓轟竴璋堬紒鈥滈櫎铏€濇槸鎸囩▼搴忓憳閫氳繃鑷繁鐨勫姫鍔涙潵鍑忓皯bug鐨勬暟閲忥紙娑堥櫎bug榪欐牱鐨勫瓧鐪兼垜浠繕鏄笉瑕佽涓哄ソ^_^錛夛紝鑰屸€滄祴璇曗€濇槸鎸囩▼搴忓憳涔﹀啓浜у搧浠ュ鐨勪竴孌典唬鐮佹潵紜繚浜у搧鑳芥湁鏁堝伐浣溿€傝櫧鐒禩DD鎵€緙栧啓鐨勬祴璇曠敤渚嬪湪涓€瀹氱▼搴︿笂涓哄鎵綽ug鎻愪緵浜嗕緷鎹紝浣嗕簨瀹炰笂錛屾寜鐓DD鐨勬柟寮忚繘琛岀殑杞歡寮€鍙戞槸涓嶅彲鑳介€氳繃TDD鍐嶆壘鍒癰ug鐨勶紙鎯蟲兂鎴戜滑鍓嶉潰璇寸殑鈥滃畬宸ユ椂瀹屽伐鈥濓級錛屼綘鎯沖晩錛屽綋鎴戜滑鐨勪唬鐮佸畬鎴愮殑鏃跺€欙紝鎵€鏈夌殑嫻嬭瘯鐢ㄤ緥閮戒寒浜嗙豢鐏紝榪欐椂闅愯棌鍦ㄤ唬鐮佷腑鐨刡ug涓€涓兘涓嶄細闇插嚭椹剼鏉ャ€?/p>

浣嗘槸錛屽鏋滆闂€滄祴璇曗€濆拰鈥滈櫎铏€濅箣闂存湁浠€涔堣仈緋伙紝鎴戠浉淇¤繕鏄湁寰堝璇濆彲浠ヨ鐨勶紝姣斿TDD浜嬪疄涓婂噺灝戜簡bug鐨勬暟閲忥紝鎶婃煡鎵綽ug鎴樺焦鐨勫叧娉ㄧ偣浠庡叏綰挎垬鍦烘彁鍗囧埌浠g爜鎴樺満浠ヤ笂銆傝繕鏈夛紝bug鐨勬渶鍙€曚箣澶勪笉鍦ㄤ簬闅愯棌涔嬫繁錛岃€屽湪浜庢弧澶╅亶閲庛€傚鏋滀綘鍙戠幇浜嗕竴涓敤鎴峰緢涓嶅鏄撴墠鑳藉彂鐜扮殑bug錛岄偅涔堜笉涓€瀹氬宸ヤ綔鍋氬嚭浜嗕粈涔堟澃鍑鴻礎鐚紝浣嗘槸濡傛灉浣犲彂鐜頒竴孌典唬鐮佷腑錛宐ug鐨勫瘑搴︽垨紱繪暎紼嬪害榪囬珮錛岄偅涔堟伃鍠滀綘錛屼綘搴旇鎶涘純騫墮噸鍐欒繖孌典唬鐮佷簡銆俆DD閬垮厤浜嗚繖縐嶆儏鍐碉紝鎵€浠ュ皢瀵繪壘bug鐨勫伐浣滈檷浣庡埌浜嗕竴涓柊鐨勪綆搴︺€?/p>

[鎴戣涓轟竴涓狥eature緙栧啓TestCase榪樻槸涓轟竴涓被緙栧啓TestCase錛焆
鍒濆鑰呭父闂殑闂銆傝櫧鐒舵垜浠粠TDD鐨勮鏄庝功涓婄湅鍒板簲璇ヤ負涓€涓壒鎬х紪鍐欑浉搴旂殑TestCase錛屼絾涓轟粈涔堣憲鍚嶇殑TDD澶у笀鎵€鍐欑殑TestCase閮芥槸鍜岀被/鏂規硶涓€涓€瀵瑰簲鐨勫憿錛熶負浜嗚В閲婅繖涓棶棰橈紝鎴戝拰鎴戠殑鍚屼簨浠兘鍋氫簡寰堝璇曢獙錛屾渶鍚庢垜浠緱鍒頒簡涓€涓粨璁猴紝铏界劧鎴戜笉鐭ラ亾鏄惁姝g‘錛屼絾鏄鏋滄偍娌℃湁絳旀錛屽彲浠ュ涓旂浉淇℃垜浠€?/p>

鎴戜滑鐨勭爺絀剁粨鏋滆〃鏄庯紝閫氬父鍦ㄤ竴涓壒鎬х殑寮€鍙戝紑濮嬫椂錛屾垜浠拡瀵圭壒鎬х紪鍐欐祴璇曠敤渚嬶紝濡傛灉鎮ㄥ彂鐜拌繖涓壒鎬ф棤娉曠敤TestCase琛ㄨ揪錛岄偅涔堣灝嗚繖涓壒鎬х粏鍒嗭紝鐩磋嚦鎮ㄥ彲浠ヤ負鎵嬩笂鐨勭壒鎬у啓鍑篢estCase涓烘銆備粠榪欓噷寮€濮嬫槸鏈€瀹夊叏鐨勶紝瀹冧笉浼氬鑷翠換浣曡璁′笂閲嶅ぇ鐨勫け璇€備絾鏄紝闅忕潃鎮ㄤ笉鏂殑閲嶆瀯浠g爜錛屼笉鏂殑閲嶆瀯TestCase錛屼笉鏂殑渚濇嵁TDD鐨勬€濇兂鍋氫笅鍘伙紝鏈€鍚庡綋浜у搧浼撮殢嫻嬭瘯鐢ㄤ緥闆嗕竴璧峰彂甯冪殑鏃跺€欙紝鎮ㄥ氨浼氫笉緇忔剰鐨勫彂鐜扮粡榪囬噸鏋勪互鍚庣殑嫻嬭瘯鐢ㄤ緥寰堝彲鑳芥槸鍜屼駭鍝佷腑鐨勭被/鏂規硶涓€涓€瀵瑰簲鐨勩€?/p>

[浠€涔堟椂鍊欏簲璇ュ皢鍏ㄩ儴嫻嬭瘯閮借繍琛屼竴閬嶏紵]
Good Question錛佸ぇ甯堜滑瑕佹眰鎴戜滑姣忔閲嶆瀯涔嬪悗閮借瀹屾暣鐨勮繍琛屼竴閬嶆祴璇曠敤渚嬨€傝繖涓姹傚彲浠ョ悊瑙o紝鍥犱負閲嶆瀯寰堝彲鑳戒細鏀瑰彉鏁翠釜浠g爜鐨勭粨鏋勬垨璁捐錛屼粠鑰屽鑷翠笉鍙瑙佺殑鍚庢灉錛屼絾鏄鏋滄垜姝e湪寮€鍙戠殑鏄竴涓狤RP鎬庝箞鍔烇紵榪愯涓€閬嶅畬鏁寸殑嫻嬭瘯鐢ㄤ緥鍙兘灝嗚姳璐規暟涓皬鏃訛紝鍐典笖鐜板湪寰堝閲嶆瀯閮芥槸鐢卞伐鍏峰仛鍒扮殑錛岃繖涓姹傜殑鍙鎬у拰鍓嶆彁鏉′歡閮芥湁鎵€鍔ㄦ憞銆傛墍浠ユ垜璁や負鍘熷垯涓婁綘鍙互鎸戝嚑涓綘瑙夊緱鍙兘鍙楀埌鏈閲嶆瀯褰卞搷鐨凾estCase鍘籸un錛屼絾鏄鏋滆繍琛屾暣涓祴璇曞寘鍙鑺辮垂鏁扮鐨勬椂闂達紝閭d箞涓嶄粙鎰忎綘鎸夊ぇ甯堢殑瑕佹眰鍘誨仛銆?/p>

[浠€涔堟椂鍊欐敼榪涗竴涓猅estCase錛焆
澧炲姞鐨勬祴璇曠敤渚嬫垨閲嶆瀯浠ュ悗鐨勪唬鐮佸鑷翠簡鍘熸潵鐨凾estCase鐨勫け鍘諱簡鏁堟灉錛屽彉寰楁棤鎰忎箟錛岀敋鑷沖彲鑳藉鑷撮敊璇殑緇撴灉錛岃繖鏃舵槸鏀硅繘TestCase鐨勬渶濂芥椂鏈恒€備絾鏄湁鏃朵綘浼氬彂鐜幫紝榪欐牱鍋氫粎浠呭鑷翠簡鍘熸潵鐨凾estCase鍦ㄨ璁′笂鏄噧鑲跨殑錛屾垨鑰呮槸鍐椾綑鐨勶紝榪欓兘涓嶈绱э紝鍙瀹冩病鏈夊け鏁堬紝浣犱粛鐒朵笉鐢ㄥ幓鏀硅繘瀹冦€傝浣忥紝TestCase涓嶆槸浣犵殑浜у搧錛屽畠涓嶈濂界湅錛屼篃涓嶈鎬庝箞澶瀛︼紝鐢氳嚦娌℃湁鎬ц兘瑕佹眰錛屽畠鍙鑳藉畬鎴愬畠鐨勪嬌鍛藉氨鍙互浜嗏€斺€旇繖涔熻瘉鏄庝簡鎴戜滑鍚庨潰鎵€璇寸殑鈥滅敤Ctrl-C/Ctrl-V緙栧啓嫻嬭瘯鐢ㄤ緥鈥濈殑鍙鎬с€?/p>

浣嗘槸錛岀編鍥戒漢鐨勬兂娉曞叾瀹炶窡鎴戜滑榪樻槸涓嶅お涓€鏍鳳紝鎷挎墭灝煎反璧炵殑MindMap鏉ヨ鍚э紝鍏跺疄鐢籑indMap鍙槸涓轟簡琛ㄧ幇鑷繁鐨勬€濊礬錛屾垨璁板繂鏌愪簺閲嶈鐨勪簨鎯咃紝浣嗘墭灝煎嵈寤鴻澶у鎶奙indMap鐢繪垚涓€浠惰壓鏈搧錛岀敋鑷寵繕鏈夊緢澶氳壓鏈鎶婅嚜宸辯敾鐨勬娊璞℃淳MindMap鎷垮嚭鏉ュ府鍔╂墭灝煎仛瀹d紶銆傚悓鏍鳳紝澶у笀浠篃瑕佹眰鎴戜滑鎶奣estCase鍐欑殑璺熶唬鐮佷竴鏍瘋川閲忕簿鑹紝鍙垜鎯寵鐨勬槸錛岀幇鍦ㄥ浗鍐呮湁鍑犱釜鍏徃鑳芥妸浜у搧鐨勪唬鐮佸啓鐨勭簿鑹紵錛熻繕鏄竴姝ヤ竴姝ユ參鎱㈡潵鍚с€?/p>

[涓轟粈涔堝師鏉ラ€氳繃鐨勬祴璇曠敤渚嬬幇鍦ㄤ笉鑳介€氳繃浜嗭紵]
榪欐槸涓€涓鎶ワ紝Red Alert錛佸畠鍙兘琛ㄨ揪浜嗕袱灞傛剰鎬濃€斺€旈兘涓嶆槸浠€涔堝ソ鎰忔€濃€斺€?錛変綘鍒氬垰榪涜鐨勯噸鏋勫彲鑳藉け璐ヤ簡錛屾垨瀛樺湪涓€浜涢敊璇湭琚彂鐜幫紝鑷沖皯閲嶆瀯鐨勭粨鏋滃拰鍘熸潵鐨勪唬鐮佷笉絳変環浜嗐€?錛変綘鍒氬垰澧炲姞鐨凾estCase鎵€琛ㄨ揪鐨勬剰鎬濊窡鍓嶉潰宸茬粡鏈夌殑TestCase鐩稿啿紿侊紝涔熷氨鏄錛屾柊澧炵殑鍔熻兘榪濊儗浜嗗凡鏈夌殑璁捐錛岃繖縐嶆儏鍐靛ぇ閮ㄥ垎鍙兘鏄箣鍓嶇殑璁捐閿欎簡銆備絾鏃犺鍝敊浜嗭紝鏃犺鏄偅灞傛剰鎬濓紝鎯蟲壘鍒拌繖涓棶棰樼殑鏍規簮閮芥瘮TDD鐨勬甯稿伐浣滆闅俱€?/p>

[鎴戞€庝箞鐭ラ亾閭i噷璇ユ湁涓€涓柟娉曡繕鏄鏈変竴涓被錛焆
榪欎釜闂涔熸槸甯稿父鍑虹幇鍦ㄦ垜鐨勮剳嫻蜂腑錛屾棤璁轟綘鏄涓€嬈℃帴瑙DD鎴栬€呭凡緇忔垚涓篢DD涓撳錛岃繖涓棶棰橀兘浼氱紶緇曠潃浣犱笉鏀俱€備笉榪囬棶棰樼殑絳旀鍙互鍙傝€冨墠闈㈢殑鈥滀粈涔堟椂鍊欒璁♀€濅竴鑺傦紝絳旀涓嶆槸鍞竴鐨勩€傚叾瀹炲鏁版椂鍊欎綘涓嶅繀鑰冭檻鏈潵錛屼粖澶╁彧鍋氫粖澶╃殑浜嬶紝鍙鏈夐噸鏋勫伐鍏鳳紝浠庢柟娉曞埌綾誨拰浠庣被鍒版柟娉曢兘寰堝鏄撱€?/p>

[鎴戣鍐欎竴涓猅estCase錛屽彲鏄笉鐭ラ亾浠庡摢閲屽紑濮嬶紵]
浠庢渶閲嶈鐨勪簨寮€濮嬶紝what matters most錛熶粠鑴氫笅寮€濮嬶紝浠庢墜澶翠笂鐨勫伐浣滃紑濮嬶紝浠庣溂鍓嶇殑浜嬪紑濮嬨€備粠涓€涓病鏈塙I鐨勬牳蹇冪壒鎬у紑濮嬶紝浠庣畻娉曞紑濮嬶紝鎴栬€呬粠鏈€鏈夊彲鑳借€借鏃墮棿鐨勬ā鍧楀紑濮嬶紝浠庝竴涓渶涓ラ噸鐨刡ug寮€濮嬨€傝繖鏄疶DD涓諱箟鑰呭拰榧犵洰瀵稿厜鑰呯殑涓€涓叡鍚岀偣錛屼笉鍚岀偣鏄墠鑰呮棭宸叉垚绔瑰湪鑳搞€?/p>

[涓轟粈涔堟垜鐨勬祴璇曟€繪槸鐪嬭搗鏉ユ湁鐐規剼锠紵]
鍝︼紵鏄悧錛熸潵錛屾彙涓墜錛屾垜鐨勪篃鏄紒涓嶅繀鎷呭績榪欎竴鐐癸紝浜嬪疄涓婏紝澶у笀浠粰鐨勪緥瀛愪篃鐩稿綋鎰氳牏錛屾瘮濡備竴涓瀬绔殑渚嬪瓙鏄鍐欎竴涓袱涓猧nt鍙橀噺鐩稿姞鐨勬柟娉曪紝澶у笀鍏堟柇璦€2+3=5錛屽啀鏂█5+5=10錛岄毦閬撹繖浜涗唬鐮佷笉鏄緢鎰氳牏鍚楋紵鍏跺疄榪欏彧鏄竴涓瀬绔殑渚嬪瓙錛屽綋浣犲垵嬈℃帴瑙DD鏃訛紝鍐欒繖鏍風殑浠g爜娌′粈涔堜笉濂斤紝浠ュ悗褰撲綘鐔熺粌鏃跺氨浼氬彂鐜拌繖鏍峰啓娌″繀瑕佷簡錛岃璁頒綇錛岃唉铏氭槸閫氬線TDD鐨勫繀緇忎箣璺紒浠庣粡鍏稿紑鍙戞柟娉曡漿鍚慣DD灝卞儚浠庨潰鍚戣繃紼嬭漿鍚戦潰鍚戝璞′竴鏍峰洶闅撅紝浣犲彲鑳戒粈涔堥兘鎳傦紝浣嗕綘鍐欏嚭鏉ョ殑綾繪病鏈変竴涓函OO鐨勶紒鎴戠殑鍚屼簨榪樺憡璇夋垜鐪熸鐨勫お鏋佹嫵錛屽叾閫熷害鏄緢蹇殑錛屼笉姣斾換浣曚竴涓揩鎷寵鎱紝浣嗘槸鍒濆鑰咃紙閫氬父鏄寚瀛︿範澶瀬鎷崇殑鍓?0騫達級澶笉瀹規槗鎶婃瘡涓Э鍔塊兘鍋氬錛屾墍浠ュ彧鑳芥參鎱㈡潵銆?/p>

[浠€涔堝満鍚堜笉閫傜敤TDD錛焆
闂殑濂斤紝紜疄鏈夊緢澶氬満鍚堜笉閫傚悎浣跨敤TDD銆傛瘮濡傚杞歡璐ㄩ噺瑕佹眰鏋侀珮鐨勫啗浜嬫垨縐戠爺浜у搧鈥斺€旂宸炲叚鍙鳳紝浜哄懡鍏沖ぉ鐨勮蔣浠垛€斺€斿尰鐤楄澶囷紝絳夌瓑錛屽啀姣斿璁捐寰堥噸瑕佸繀欏繪彁鍓嶅仛濂界殑杞歡錛岃繖浜涢兘涓嶉€傚悎TDD錛屼絾鏄笉閫傚悎TDD涓嶄唬琛ㄤ笉鑳藉啓TestCase錛屽彧鏄綔鐢ㄤ笉鍚岋紝鍦頒綅涓嶅悓緗簡銆?/p>

{Best Practise}

[寰瑧闈㈠緙栬瘧閿欒]
瀛︾敓鏃朵唬鏈€瀹蟲€曠殑灝辨槸緙栬瘧閿欒錛岀紪璇戦敊璇彲鑳戒細琚€佸笀瑙嗕負涓婅涓嶈鐪熷惉璇劇殑璇佹嵁錛屾垨鑰呭悓瀛﹂棿鐩鎬簰鍢茬瑧鐨勭牆鐮併€傜敋鑷崇寮€瀛︽牎寰堝騫寸殑鑰佺▼搴忓憳渚濈劧瀹蟲€曞畠灝卞儚瀹蟲€曡繜鍒頒竴鏍鳳紝娼滄剰璇嗛噷浼間箮緙栬瘧閿欒鏋佹湁鍙兘鍜屽伐璧勬寕閽╋紙鎴栬€呭拰鏅哄晢鎸傞挬錛屽弽姝i兘涓嶆槸浠€涔堝ソ浜嬶級銆傚叾瀹烇紝鍙鎻愪氦鍒扮増鏈鐞嗙殑浠g爜娌℃湁緙栬瘧閿欒灝卞彲浠ヤ簡錛屼笉瑕佹媴蹇冭嚜宸辨墜涓婄殑浠g爜鐨勭紪璇戦敊璇紝閫氬父錛岀紪璇戦敊璇兘闆嗕腑鍦ㄤ笅闈笁涓柟闈細
錛?錛変綘鐨勪唬鐮佸瓨鍦ㄤ綆綰ч敊璇?br />錛?錛夌敱浜庢煇浜汭nterface鐨勫疄鐜板皻涓嶅瓨鍦紝鎵€浠ヨ嫻嬭瘯浠g爜鏃犳硶緙栬瘧
錛?錛夌敱浜庢煇浜涗唬鐮佸皻涓嶅瓨鍦紝鎵€浠ユ祴璇曚唬鐮佹棤娉曠紪璇?br />璇鋒敞鎰忕浜岀偣涓庣涓夌偣瀹屽叏涓嶅悓錛屽墠鑰呰〃鏄庤璁″凡瀛樺湪錛岃€屽疄鐜頒笉瀛樺湪瀵艱嚧鐨勭紪璇戦敊璇紱鍚庤€呭垯鎸囦粎鏈塗estCase鑰屽叾瀹冧粈涔堥兘娌℃湁鐨勬儏鍐碉紝璁捐鍜屽疄鐜伴兘涓嶅瓨鍦紝娌℃湁Interface涔熸病鏈塈mplementation銆?/p>

鍙﹀錛岀紪璇戝櫒榪樻湁涓€涓紭鐐癸紝閭e氨鏄互鏈€鏁忔嵎鐨勮韓鎵嬪憡璇変綘錛屼綘鐨勪唬鐮佷腑鏈夐偅浜涢敊璇€傚綋鐒跺鏋滀綘鎷ユ湁Eclipse榪欐牱鍙互鍙婃椂鎻愮ず緙栬瘧閿欒鐨処DE錛屽氨涓嶉渶瑕佽繖鏍風殑鍔熻兘浜嗐€?/p>

[閲嶈浣犵殑璁″垝娓呭崟]
鍦ㄩ潪TDD鐨勬儏鍐典笅錛屽挨鍏舵槸浼犵粺鐨勭€戝竷妯″瀷鐨勬儏鍐典笅錛岀▼搴忓憳涓嶄細涓嶇煡閬撹鍋氫粈涔堬紝浜嬪疄涓婏紝鎬繪槸鏈夎璁℃垨鑰呭埆鐨勪粈涔堝埗鍝佸湪寮曞紼嬪簭鍛樺紑鍙戙€備絾鏄湪TDD鐨勬儏鍐典笅錛岃繖縐嶄紭鍔挎病鏈変簡錛屾墍浠ヤ竴涓鍒掓竻鍗曞浣犳潵璇村崄鍒嗛噸瑕侊紝鍥犱負浣犲繀欏昏嚜宸卞彂鐜拌鍋氫粈涔堛€備笉鍚屾€ф牸鐨勪漢瀵逛簬榪欎竴鐐逛細鏈変笉鍚岀殑鍙嶅簲錛屾垜鐩鎬俊騫蟲椂鍋氫簨娌′粈涔堣鍒掕渚濋潬鍒漢瀹夋帓鐨勪漢錛堟墍璋撳皢鎵嶏級鍙兘鐣ユ湁涓嶉€傚簲錛屼笉榪囦笉瑕佺揣錛孴asks鍜孋alendar錛堝張縐版晥鐜囨墜鍐岋級鏃╁凡鎴愪負鐜頒唬涓婄彮鏃忕殑蹇呭宸ュ叿浜嗭紱鑰屽鉤鏃跺伐浣滅敓媧誨氨寰堟湁璁″垝鎬х殑浜猴紝姣斿鎴?)錛屽氨浼氭洿鍠滄榪欑鑷繁鍙互鎺屾帶Plan鐨勬柟寮忎簡銆?/p>

[搴熼粶姣忔棩浠g爜璐ㄩ噺媯€鏌
濡傛灉鎴戞病鏈夎閿欑殑璇濓紝PSP瀵逛簬涓漢浠g爜媯€鏌ョ殑瑕佹眰鏄洰涓ユ牸鐨勶紝鑰屽悓鏍鋒槸鍦ㄩ拡瀵逛釜浜虹殑闂涓婏紝TDD鍗村緩璁綘搴熼粶姣忔棩浠g爜璐ㄩ噺媯€鏌ワ紝鍒搗鐤戝績錛屽洜涓轟綘鎬繪槸鍦ㄥ仛TestCase瑕佹眰浣犲仛鐨勪簨鎯咃紝騫朵笖鎬繪槸鏈夊姙娉曪紙鑷姩鐨勶級媯€鏌ヤ唬鐮佹湁娌℃湁鍋氬埌榪欎簺浜嬫儏鈥斺€旂孩鐏仠緇跨伅琛岋紝鎵€浠ユ瘡鏃ヤ唬鐮佹鏌ョ殑鏃墮棿鍙兘琚妭鐪侊紝瀵逛簬涓€涓弗鏍肩殑PSP瀹炶返鑰呮潵璇達紝榪欎釜鎴愭湰榪樻槸寰堝彲瑙傜殑錛?/p>

姝ゅ錛屽浜庢瘡鏃ヤ唬鐮佽川閲忔鏌ョ殑鍙︿竴涓ソ澶勶紝灝辨槸甯姪浣犺璇嗚嚜宸辯殑浠g爜錛屽叏闈㈢殑浠庡畯瑙傘€佸井瑙傘€佸悇涓搴﹀瑙嗚嚜宸辯殑鎴愭灉錛岀幇鍦紝褰撲綘渚濈収TDD鍋氫簨鏃訛紝榪欎釜浼樼偣涔熶笉闇€瑕佷簡錛岃繕璁板緱鍓嶉潰璇寸殑TDD鐨勭浜屼釜浼樼偣鍚楋紝鍥犱負浣犲凡緇忓叏闈㈢殑浣跨敤浜嗕竴閬嶄綘鐨勪唬鐮侊紝榪欏畬鍏ㄥ彲浠ヨ揪鍒扮洰鐨勩€?/p>

浣嗘槸錛岄棶棰樺線寰€涔熷茍涓嶉偅涔堢畝鍗曪紝鐜板湪鏈夋病鏈変漢鑳藉憡璇夋垜錛屾垜濡備綍鍏ㄩ潰瀹¤鎴戞墍鍐欑殑嫻嬭瘯鐢ㄤ緥鍛紵鍒繕浜嗭紝瀹冧滑涔熸槸浠ヤ唬鐮佺殑褰㈠紡瀛樺湪鐨勫摝銆傚懙鍛碉紝浣嗘効榪欎釜闂娌℃湁鎶婁綘鍚撳埌錛屽洜涓烘垜鐩鎬俊鍒扮洰鍓嶄負姝紝瀹冭繕涓嶆槸鐡墮闂錛屽喌涓斿湪緙栧啓浜у搧浠g爜鐨勬椂鍊欎綘榪樻槸浼氳嚜涓葷殑鍙戠幇寰堝嫻嬭瘯浠g爜涓婄殑娌¤€冭檻鍒扮殑鍦版柟錛屽彲浠ュ氨姝や慨鏀逛竴涓嬨€傞亾鐞嗗氨鏄姝わ紝涓栫晫涓婃病鏈変換浣曟柟娉曡兘浠f浛浣犳€濊€冪殑榪囩▼錛屾墍浠ヤ篃娌℃湁浠諱綍鏂規硶鑳介樆姝綘鐘敊璇紝TDD浠呰兘璁╀綘鏇村鏄撳彂鐜拌繖浜涢敊璇€屽凡銆?/p>

[濡傛灉鏃犳硶瀹屾垚涓€涓ぇ鐨勬祴璇曪紝灝變粠鏈€灝忕殑寮€濮媇
濡傛灉鎴戞棤娉曞紑濮嬫€庝箞鍔烇紝鏁欑涔︿笂鏈変釜寰堝ソ鐨勪緥瀛愶細鎴戣鍐欎竴涓數褰卞垪琛ㄧ殑綾伙紝鎴戜笉鐭ラ亾濡備綍涓嬫墜錛屽浣曞啓嫻嬭瘯鐢ㄤ緥錛屼笉瑕佺揣錛岄鍏堟兂璞¢潤鎬佺殑緇撴灉錛屽鏋滄垜鐨勭數褰卞垪琛ㄥ垰鍒氬緩绔嬪憿錛岄偅涔堝畠搴旇鏄┖鐨勶紝OK錛屽氨鍐欒繖涓柇璦€鍚э紝鏂█涓€涓垰鍒氬垵濮嬪寲鐨勭數褰卞垪琛ㄦ槸絀虹殑銆傝繖涓嶆槸鎰氳牏錛岃繖鏄粏鑺傦紝濂ヨ繍浼氫簲欏瑰叏鑳界殑閲戠墝寰椾富鐜涗附鑾猜烽噾鏄繖鏍瘋鐨勶細鈥滄垚鍔熶漢澹殑鍏卞悓鐐瑰湪浜庘€︹€﹀鏋滅洰鏍囦笉澶熸竻鏅幫紝浠栦滑浼氶鍏堝仛閫氬線鎴愬姛閬撹礬涓婄殑姣忎竴涓粏灝忔楠も€︹€︹€濄€?/p>

[灝濊瘯緙栧啓鑷繁鐨剎Unit]
Kent Beck寤鴻澶у姣忓綋鎺ヨЕ涓€涓柊鐨勮璦€鎴栧紑鍙戝鉤鍙扮殑鏃跺€欙紝灝辮嚜宸卞啓榪欎釜璇█鎴栧鉤鍙扮殑xUnit錛屽叾瀹炲嚑涔庢墍鏈夊父鐢ㄧ殑璇█鍜屽鉤鍙伴兘宸茬粡鏈変簡鑷繁鐨剎Unit錛岃€屼笖閮芥槸澶у悓灝忓紓錛屼絾鏄負浠€涔堝ぇ甯堢粰鍑轟簡榪欐牱鐨勫緩璁憿銆傚叾瀹濳ent Beck鐨勬剰鎬濇槸璇撮€氳繃榪欐牱鐨勬柟寮忎綘鍙互寰堝揩鐨勪簡瑙h繖涓璦€鎴栧鉤鍙扮殑鐗規€э紝鑰屼笖xUnit紜疄寰堢畝鍗曪紝鍙鐭ラ亾鍘熺悊寰堝揩灝辮兘鍐欏嚭鏉ャ€傝繖瀵逛簬閭d簺鍠滄鑷繁鍐欏簳灞備唬鐮佺殑浜猴紝鎴栬€呭枩嬈㈡帶鍒跺姏鐨勪漢鑰岃█鏄釜濂芥秷鎭€?/p>

[鍠勪簬浣跨敤Ctrl-C/Ctrl-V鏉ョ紪鍐橳estCase]
涓嶅繀鎷呭績TestCase浼氭湁浠g爜鍐椾綑鐨勯棶棰橈紝璁╁畠鍐椾綑濂戒簡銆?/p>

[姘歌繙閮芥槸鍔熻兘First錛屾敼榪涘彲浠ョ◢鍚庤繘琛宂
涓婇潰榪欎釜鏍囬榪樺彲浠ユ敼鎴愬彟澶栦竴鍙ヨ瘽錛氶伩鍏嶈繃娓¤璁★紒

[娣樻卑闄堟棫鐨勭敤渚媇
鑸嶄笉寰楀瀛愬涓嶇潃鐙箋€備笉瑕佸彲鎯滈檲鏃х殑鐢ㄤ緥錛屽洜涓哄畠浠彲鑳戒粠姒傚康涓婂凡緇忔槸閿欒鐨勪簡錛屾垨浠呬粎浼氬緱鍑洪敊璇殑緇撴灉錛屾垨鑰呭湪鏌愭閲嶆瀯涔嬪悗澶卞幓浜嗘剰涔夈€傚綋鐒朵篃涓嶄竴瀹氶潪瑕佸垹闄ゅ畠浠紝浠嶵estSuite涓櫎鍘伙紙JUnit錛夋垨鍔犱笂Ignored錛圢Unit錛夋爣絳句篃鏄竴涓ソ鍔炴硶銆?/p>

[鐢═estCase鍋氳瘯楠宂
濡傛灉浣犲湪寮€濮嬫煇涓壒鎬ф垨浜у搧鐨勫紑鍙戜箣鍓嶅鏌愪釜棰嗗煙涓嶅お鐔熸倝鎴栦竴鏃犳墍鐭ワ紝鎴栬€呭鑷繁鍦ㄨ棰嗗煙閲岀殑鑳藉姏涓€鏃犳墍鐭ワ紝閭d箞浣犱竴瀹氫細閫夋嫨鍋氳瘯楠岋紝鍦ㄦ湁鍗曞厓嫻嬭瘯浣滃伐鍏風殑鎯呭喌涓嬶紝寤鴻浣犵敤TestCase鍋氳瘯楠岋紝榪欑湅璧鋒潵灝卞儚浣犲湪鍐欎竴涓獙璇佸姛鑳芥槸鍚﹀疄鐜扮殑TestCase涓€鏍鳳紝鑰屼簨瀹炰笂涔熶竴鏍鳳紝鍙笉榪囦綘鎵€楠岃瘉鐨勪笉鏄唬鐮佹湰韜紝鑰屾槸榪欎簺浠g爜鎵€渚濊禆鐨勭幆澧冦€?/p>

[TestCase涔嬮棿搴旇灝介噺鐙珛]
淇濊瘉鍗曠嫭榪愯涓€涓猅estCase鏄湁鎰忎箟鐨勩€?/p>

[涓嶄粎嫻嬭瘯蹇呴』瑕侀€氳繃鐨勪唬鐮侊紝榪樿嫻嬭瘯蹇呴』涓嶈兘閫氳繃鐨勪唬鐮乚
榪欐槸涓€涓皬鎶€宸э紝涔熸槸涓嶅悓浜庤璁℃€濊礬鐨勪笢瑗褲€傚儚瓚婄晫鐨勫€兼垨鑰呬貢鐮侊紝鎴栬€呯被鍨嬩笉絎︾殑鍙橀噺錛岃繖浜涜緭鍏ラ兘鍙兘浼氬鑷存煇涓紓甯哥殑鎶涘嚭錛屾垨鑰呭鑷翠竴涓爣紺衡€渋llegal parameters鈥濈殑榪斿洖鍊鹼紝榪欎袱縐嶆儏鍐典綘閮藉簲璇ユ祴璇曘€傚綋鐒舵垜浠棤娉曟灇涓炬墍鏈夐敊璇殑杈撳叆鎴栧閮ㄧ幆澧冿紝榪欏氨鍍忔垜浠棤娉曟灇涓炬墍鏈夋紜殑杈撳叆鍜屽閮ㄧ幆澧冧竴鏍鳳紝鍙TestCase鑳借鏄庨棶棰樺氨鍙互浜嗐€?/p>

[緙栧啓浠g爜鐨勭涓€姝ワ紝鏄湪TestCase涓敤Ctrl-C]
榪欐槸涓€涓珮綰ф妧宸э紝鍛冿紝鏄殑錛屾垜鏄繖涓剰鎬濓紝鎴戜笉鏄榪欎釜鎶€宸ч毦浠ユ帉鎻★紝鑰屾槸璇磋繖涓妧宸у綋涓斾粎褰撲綘宸茬粡鏄竴涓猅DD楂樻墜鏃訛紝浣犳墠鑳戒綋浼氬埌瀹冪殑欖呭姏銆傚嬈′嬌鐢═DD鐨勪漢閮芥湁榪欐牱鐨勪綋浼氾紝鏃㈢劧鎴戠殑TestCase宸茬粡鍐欑殑寰堝ソ浜嗭紝寰堣兘璇存槑闂錛屼負浠€涔堟垜鐨勪唬鐮佷笉鑳戒粠TestCase鎷瘋礉涓€浜涗笢瑗挎潵鍛€€傚綋鐒訛紝榪欒姹備綘鐨凾estCase宸茬粡鍏鋒湁寰堝ソ鐨勮〃杈捐兘鍔涳紝姣斿鏂█f(5)=125鐨勬柟寮忔樉鐒舵病鏈夋柇璦€f(5)=5^(5-2)琛ㄨ揪鏇村鐨勫唴瀹廣€?/p>

[嫻嬭瘯鐢ㄤ緥鍖呭簲璇ュ敖閲忚璁℃垚鍙互鑷姩榪愯鐨刔
濡傛灉浜у搧鏄渶瑕佷氦浠樻簮浠g爜鐨勶紝閭f垜浠簲璇ュ厑璁哥敤鎴峰浠g爜榪涜淇敼鎴栨墿鍏呭悗鍦ㄨ嚜宸辯殑鐜涓媟un鏁翠釜嫻嬭瘯鐢ㄤ緥鍖呫€傛棦鐒墮€氬父鎯呭喌涓嬬殑浜у搧鏄彲浠ヨ嚜鍔ㄨ繍琛岀殑錛岄偅涓轟粈涔堝悓鏍蜂綔涓轟氦浠樼敤鎴風殑鍒跺搧錛屾祴璇曠敤渚嬪寘灝變笉鏄嚜鍔ㄨ繍琛岀殑鍛紵鍗充嬌浜у搧涓嶉渶瑕佷氦浠樻簮浠g爜錛屾祴璇曠敤渚嬪寘涔熷簲璇ヨ璁℃垚鍙互鑷姩榪愯鐨勶紝榪欎負嫻嬭瘯閮ㄩ棬鎴栦笅涓€鐗堟湰鐨勫紑鍙戜漢鍛樻彁渚涗簡鏋佸ぇ鐨勪究鍒┿€?/p>

[鍙寒涓€鐩忕孩鐏痌
澶у笀鐨勫緩璁紝鍓嶉潰宸茬粡鎻愬埌浜嗭紝浠呬粎鏄緩璁€?/p>

[鐢═estCase鎻忚堪浣犲彂鐜扮殑bug]
濡傛灉浣犲湪鍙︿竴涓儴闂ㄧ殑鍚屼簨浣跨敤浜嗕綘鐨勪唬鐮侊紝騫朵笖錛屼粬鍙戠幇浜嗕竴涓猙ug錛屼綘鐚滀粬浼氭€庝箞鍋氾紵浠栦細绔嬪嵆璧板埌浣犵殑宸ヤ綅杈逛笂錛屽ぇ澹版枼璐h錛氣€滀綘鏈塨ug錛佲€濆悧錛熷鏋滀粬鑳嗘暍榪欐牱瀵逛綘錛屽涓嶈搗錛屼綘涓€瀹氳鍐烽潤涓嬫潵錛屼笉瑕佸綋闈㈠洖楠備粬錛岀浉鍙嶄綘鍙互寰井涓€絎戯紝鐒跺悗蹇冨鉤姘斿拰鐨勫浠栬錛氣€滃摝錛屾槸鍚楋紵閭d箞濂藉惂錛岀粰鎴戜竴涓猅estCase璇佹槑涓€涓嬨€傗€濈幇鍦ㄥ眬鍔垮凡緇忓€掑悜浣犺繖涓€杈逛簡錛屽鏋滀粬榪樻病鏈夊噯澶囧ソ鍥炵瓟浣犺繖鑷村懡鐨勪竴鍑伙紝鎴戠寽浠栦細鎰熷埌闈炲父緹炴劎錛屽茍鍦ㄥ唴蹇冭矗鎬嚜宸卞お鑾芥挒銆備簨瀹炰笂錛屽鏋滀粬鐨凾estCase娌℃湁榪囧鐨勮姹備綘鐨勪唬鐮侊紙鑰屾槸鎸変綘浠簨鍓嶇殑濂戠害錛夛紝騫朵笖浜簡綰㈢伅錛岄偅涔堝氨鍙互紜畾鏄綘鐨刡ug錛屽弽涔嬶紝瀵規柟鍒欐棤鐞嗕簡銆傜敤TestCase鎻忚堪bug鐨勫彟涓€涓ソ澶勬槸錛屼笉浼氬洜涓轟互鍚庣殑淇敼鑰屽啀嬈℃毚闇茶繖涓猙ug錛屽畠宸茬粡鎴愪負浣犲彂甯冩瘡涓€涓増鏈箣鍓嶆墍蹇呴』媯€鏌ョ殑鍐呭浜嗐€?/p>

{鍏充簬鍗曞厓嫻嬭瘯}

鍗曞厓嫻嬭瘯鐨勭洰鏍囨槸

Keep the bar green to keep the code clean

榪欏彞璇濈殑鍚箟鏄紝浜嬪疄涓婃垜浠彧鍋氫袱浠朵簨鎯咃細璁╀唬鐮佸鏁堬紙Keep the bar green錛夊拰璁╀唬鐮佹磥鍑€錛圞eep the code clean錛夛紝鍓嶈€呮槸鎶婁簨鎯呭仛瀵癸紝鍚庤€呮槸鎶婁簨鎯呭仛濂斤紝涓よ€呮棦鏄疶DD涓殑涓ら《甯藉瓙錛屽張鏄痻Unit鏋舵瀯涓殑鍥犳灉鍏崇郴銆?/p>

鍗曞厓嫻嬭瘯浣滀負杞歡嫻嬭瘯鐨勪竴涓被鍒紝騫墮潪鏄痻Unit鏋舵瀯鍒涢€犵殑錛岃€屾槸寰堟棭灝辨湁浜嗐€備絾鏄痻Unit鏋舵瀯浣垮緱鍗曞厓嫻嬭瘯鍙樺緱鐩存帴銆佺畝鍗曘€侀珮鏁堝拰瑙勮寖錛岃繖涔熸槸鍗曞厓嫻嬭瘯鏈€榪戝嚑騫撮閫熷彂灞曟垚涓鴻 閲忎竴涓紑鍙戝伐鍏峰拰鐜鐨勪富瑕佹寚鏍囦箣涓€鐨勫師鍥犮€傛濡侻artin Fowler鎵€璇達細鈥滆蔣浠跺伐紼嬫湁鍙蹭互鏉ヤ粠娌℃湁濡傛浼楀鐨勪漢澶уぇ鏀剁泭浜庡姝ょ畝鍗曠殑浠g爜錛佲€濊€屼笖澶氭暟璇█鍜屽鉤鍙扮殑xUnit鏋舵瀯閮芥槸澶у悓灝忓紓錛屾湁鐨勪粎鏄璦€涓嶅悓錛屽叾涓渶鏈変唬琛ㄦ€х殑鏄疛Unit鍜孨Unit錛屽悗鑰呮槸鍓嶈€呯殑鍒涙柊鍜屾墿灞曘€備竴涓崟鍏冩祴璇曟鏋秞Unit搴旇錛?錛変嬌姣忎釜TestCase鐙珛榪愯錛?錛変嬌姣忎釜TestCase鍙互鐙珛媯€嫻嬪拰鎶ュ憡閿欒錛?錛夋槗浜庡湪姣忔榪愯涔嬪墠閫夋嫨TestCase銆備笅闈㈡槸鎴戞灇涓懼嚭鐨剎Unit妗嗘灦鐨勬蹇碉紝榪欎簺姒傚康鏋勬垚浜嗗綋鍓嶄笟鐣屽崟鍏冩祴璇曠悊璁哄拰宸ュ叿鐨勬牳蹇冿細

[嫻嬭瘯鏂規硶/TestMethod]
嫻嬭瘯鐨勬渶灝忓崟浣嶏紝鐩存帴琛ㄧず涓轟唬鐮併€?/p>

[嫻嬭瘯鐢ㄤ緥/TestCase]
鐢卞涓祴璇曟柟娉曠粍鎴愶紝鏄竴涓畬鏁寸殑瀵硅薄錛屾槸寰堝TestRunner鎵ц鐨勬渶灝忓崟浣嶃€?/p>

[嫻嬭瘯瀹瑰櫒/TestSuite]
鐢卞涓祴璇曠敤渚嬫瀯鎴愶紝鎰忓湪鎶婄浉鍚屽惈涔夌殑嫻嬭瘯鐢ㄤ緥鎵嬪姩瀹夋帓鍦ㄤ竴璧鳳紝TestSuite鍙互鍛堟爲鐘剁粨鏋勫洜鑰屼究浜庣鐞嗐€傚湪瀹炵幇鏃訛紝TestSuite褰㈠紡涓婂線寰€涔熸槸涓€涓猅estCase鎴朤estFixture銆?/p>

[鏂█/Assertion]
鏂█涓€鑸湁涓夌被錛屽垎鍒槸姣旇緝鏂█錛堝assertEquals錛夛紝鏉′歡鏂█錛堝isTrue錛夛紝鍜屾柇璦€宸ュ叿錛堝fail錛夈€?/p>

[嫻嬭瘯璁懼/TestFixture]
涓烘瘡涓祴璇曠敤渚嬪畨鎺掍竴涓猄etUp鏂規硶鍜屼竴涓猅earDown鏂規硶錛屽墠鑰呯敤浜庡湪鎵ц璇ユ祴璇曠敤渚嬫垨璇ョ敤渚嬩腑鐨勬瘡涓祴璇曟柟娉曞墠璋冪敤浠ュ垵濮嬪寲鏌愪簺鍐呭錛屽悗鑰呭湪鎵ц璇ユ祴璇曠敤渚嬫垨璇ョ敤渚嬩腑鐨勬瘡涓柟娉曚箣鍚庤皟鐢紝閫氬父鐢ㄦ潵娑堥櫎嫻嬭瘯瀵圭郴緇熸墍鍋氱殑淇敼銆?/p>

[鏈熸湜寮傚父/Expected Exception]
鏈熸湜璇ユ祴璇曟柟娉曟姏鍑烘煇縐嶆寚瀹氱殑寮傚父錛屼綔涓轟竴涓€滄柇璦€鈥濆唴瀹癸紝鍚屾椂涔熼槻姝㈠洜涓哄悎鎯呭悎鐞嗙殑寮傚父鑰屾剰澶栫殑緇堟浜嗘祴璇曡繃紼嬨€?/p>

[縐嶇被/Category]
涓烘祴璇曠敤渚嬪垎綾伙紝瀹為檯浣跨敤鏃朵竴鑸湁TestSuite灝變笉鍐嶄嬌鐢–ategory錛屾湁Category灝變笉鍐嶄嬌鐢═estSuite銆?/p>

[蹇界暐/Ignored]
璁懼畾璇ユ祴璇曠敤渚嬫垨嫻嬭瘯鏂規硶琚拷鐣ワ紝涔熷氨鏄笉鎵ц鐨勬剰鎬濄€傛湁浜涜鎶涘純鐨凾estCase涓嶆効鍒犻櫎錛屽彲浠ュ畾涓篒gnored銆?/p>

[嫻嬭瘯鎵ц鍣?TestRunner]
鎵ц嫻嬭瘯鐨勫伐鍏鳳紝琛ㄧず浠ヤ綍縐嶆柟寮忔墽琛屾祴璇曪紝鍒浼氾紝榪欏彲涓嶆槸鍦ㄤ唬鐮佷腑瑙勫畾鐨勶紝瀹屽叏鏄笌嫻嬭瘯鍐呭鏃犲叧鐨勮涓恒€傛瘮濡傛枃鏈柟寮忥紝AWT鏂瑰紡錛宻wing鏂瑰紡錛屾垨鑰匛clipse鐨勪竴涓鍥劇瓑絳夈€?/p>

{瀹炰緥錛欶ibonacci鏁板垪}

涓嬮潰鐨凷ample灞曠ずTDDer鏄浣曠紪鍐欎竴涓棬鍦ㄤ駭鐢烣ibonacci鏁板垪鐨勬柟娉曘€?br />錛?錛夐鍏堝啓涓€涓猅C錛屾柇璦€fib(1) = 1;fib(2) = 1;榪欒〃紺鴻鏁板垪鐨勭涓€涓厓绱犲拰絎簩涓厓绱犻兘鏄?銆?/p>

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 1 ));
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 2 ));
}

錛?錛変笂闈㈣繖孌典唬鐮佷笉鑳界紪璇戦€氳繃錛孏reat錛佲€斺€旀槸鐨勶紝鎴戞槸璇碐reat錛佸綋鐒訛紝濡傛灉浣犳鍦ㄧ敤鐨勬槸Eclipse閭d綘涓嶉渶瑕佺紪璇戯紝Eclipse浼氬憡璇変綘涓嶅瓨鍦╢ib鏂規硶錛屽崟鍑籱ark浼氶棶浣犺涓嶈鏂板緩涓€涓猣ib鏂規硶錛孫h錛屽綋鐒訛紒涓轟簡璁╀笂闈㈤偅涓猅C鑳介€氳繃錛屾垜浠繖鏍峰啓錛?/p>

public int 聽fib(聽 int 聽n聽)聽{
聽聽聽聽聽聽聽聽
return 1 ;
}

錛?錛夌幇鍦ㄩ偅涓猅C浜簡緇跨伅錛寃ow錛佸簲璇ュ簡紲濅竴涓嬩簡銆傛帴涓嬫潵瑕佸鍔燭C鐨勯毦搴︿簡錛屾祴絎笁涓厓绱犮€?/p>

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 1 ));
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 2 ));
聽聽聽聽聽聽聽聽assertEquals(
2 ,聽fib( 3 ));
}

涓嶈繃榪欐牱鍐欒繕涓嶅お濂界湅錛屼笉濡傝繖鏍峰啓錛?/p>

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 1 ));
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 2 ));
聽聽聽聽聽聽聽聽assertEquals(fib(
1 ) + fib( 2 ),聽fib( 3 ));
}

錛?錛夋柊澧炲姞鐨勬柇璦€瀵艱嚧浜嗙孩鐏紝涓轟簡鎵漿榪欎竴灞€鍔挎垜浠繖鏍蜂慨鏀筬ib鏂規硶錛屽叾涓儴鍒嗕唬鐮佹槸浠庝笂闈㈢殑浠g爜涓瑿trl-C/Ctrl-V鏉ョ殑錛?/p>

public int 聽fib(聽 int 聽n聽)聽{
聽聽聽聽聽聽聽聽
if 聽(聽n聽 == 3 聽)聽 return 聽fib( 1 ) + fib( 2 );
聽聽聽聽聽聽聽聽
return 1 ;
}

錛?錛夊ぉ鍝紝榪欑湡鏄釜璐變漢鍐欑殑浠g爜錛佹槸鍟婏紝涓嶆槸鍚楋紵鍥犱負TC灝辨槸浜у搧鐨勮摑鏈紝浜у搧鍙鎭板ソ婊¤凍TC灝眔k銆傛墍浠ヤ簨鎯呭彂灞曞埌榪欎釜鍦版涓嶆槸fib鏂規硶鐨勯敊錛岃€屾槸TC鐨勯敊錛屼簬鏄疶C榪樿榪涗竴姝ヨ姹傦細

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 1 ));
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 2 ));
聽聽聽聽聽聽聽聽assertEquals(fib(
1 ) + fib( 2 ),聽fib( 3 ));
聽聽聽聽聽聽聽聽assertEquals(fib(
2 ) + fib( 3 ),聽fib( 4 ));
}

錛?錛変笂鏈夋斂絳栦笅鏈夊絳栥€?/p>

public int 聽fib(聽 int 聽n聽)聽{
聽聽聽聽聽聽聽聽
if 聽(聽n聽 == 3 聽)聽 return 聽fib( 1 ) + fib( 2 );
聽聽聽聽聽聽聽聽
if 聽(聽n聽 == 4 聽)聽 return 聽fib( 2 ) + fib( 3 );
聽聽聽聽聽聽聽聽
return 1 ;
}

錛?錛夊ソ浜嗭紝涓嶇帺浜嗐€傜幇鍦ㄥ凡緇忎笉鏄幢涓嶈幢鐨勯棶棰樹簡錛岀幇鍦ㄧ殑闂鏄唬鐮佸嚭鐜頒簡鍐椾綑錛屾墍浠ユ垜浠鍋氱殑鏄€斺€旈噸鏋勶細

public int 聽fib(聽 int 聽n聽)聽{
聽聽聽聽聽聽聽聽
if 聽(聽n聽 == 1 || 聽n聽 == 2 聽錛壜?/span> return 1 ;
聽聽聽聽聽聽聽聽
else return 聽fib(聽n聽 - 1 聽)聽 + 聽fib(聽n聽 - 2 聽);
}

錛?錛夊ソ錛岀幇鍦ㄤ綘宸茬粡fib鏂規硶宸茬粡鍐欏畬浜嗗悧錛熼敊浜嗭紝涓€涓嵄闄╃殑閿欒錛屼綘蹇樹簡閿欒鐨勮緭鍏ヤ簡銆傛垜浠護0琛ㄧずFibonacci涓病鏈夎繖涓€欏廣€?/p>

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 1 ));
聽聽聽聽聽聽聽聽assertEquals(
1 ,聽fib( 2 ));
聽聽聽聽聽聽聽聽assertEquals(fib(
1 ) + fib( 2 ),聽fib( 3 ));
聽聽聽聽聽聽聽聽assertEquals(fib(
2 ) + fib( 3 ),聽fib( 4 ));
聽聽聽聽聽聽聽聽assertEquals(
0 ,聽fib( 0 ));
聽聽聽聽聽聽聽聽assertEquals(
0 ,聽fib( - 1 ));
}

then change the method fib to make the bar grean錛?/p>

public int 聽fib(聽 int 聽n聽)聽{
聽聽聽聽聽聽聽聽
if 聽(聽n聽 <= 0 聽)聽 return 0 ;
聽聽聽聽聽聽聽聽
if 聽(聽n聽 == 1 || 聽n聽 == 2 聽錛壜?/span> return 1 ;
聽聽聽聽聽聽聽聽
else return 聽fib(聽n聽 - 1 聽)聽 + 聽fib(聽n聽 - 2 聽);
}

錛?錛変笅鐝墠鏈€鍚庝竴浠朵簨鎯咃紝鎶奣C涔熼噸鏋勪竴涓嬶細

public void 聽testFab()聽{
聽聽聽聽聽聽聽聽
int 聽cases[][]聽 = 聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
0 ,聽 0 },聽{ - 1 ,聽 0 },聽聽 // the聽wrong聽parameters
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{ 1 ,聽 1 },聽{ 2 ,聽 1 }};聽聽 // the聽first聽2聽elements

聽聽聽聽聽聽聽聽
for 聽( int 聽i聽 = 0 ;聽i聽 < 聽cases.length;聽i ++ )
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽assertEquals(聽cases[i][
1 ],聽fib(cases[i][ 0 ])聽);

聽聽聽聽聽聽聽聽
// the聽rest聽elements
聽聽聽聽聽聽聽聽 for 聽( int 聽i聽 = 3 ;聽i聽 < 20 ;聽i ++ )
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽assertEquals(fib(i
- 1 ) + fib(i - 2 ),聽fib(i));
}

錛?0錛夋墦瀹屾敹宸ャ€?/p>

{鍏充簬鏈枃鐨勫啓浣渳

鍦ㄦ湰鏂囩殑鍐欎綔榪囩▼涓紝浣滆€呬篃鐢ㄥ埌浜員DD鐨勬€濈淮錛屼簨瀹炰笂浣滆€呭厛鏋勬€濊鍐欎竴綃囦粈涔堟牱鐨勬枃绔狅紝鐒跺悗鍐欏嚭榪欑瘒鏂囩珷搴旇婊¤凍鐨勫嚑涓姹傦紝鍖呮嫭鍔熻兘鐨勮姹傦紙瑕佸啓浜涗粈涔堬級鍜屾€ц兘鐨勮姹傦紙鍙鎬у浣曪級鍜岃川閲忕殑瑕佹眰錛堟枃瀛楃殑瑕佹眰錛夛紝榪欎簺瑕佹眰璧峰垵鏄竴涓篃杈句笉鍒扮殑錛堝洜涓烘鏂囪繕涓€涓瓧娌℃湁錛夛紝鍦ㄨ繖縐嶆儏鍐典笅浣滆€呯殑鏂囩珷鏃犳硶緙栬瘧閫氳繃錛屼負浜嗚揪鍒拌繖浜涜姹傦紝浣滆€呬笉鍋滅殑鍐欏晩鍐欏晩錛岀粓浜庡湪鑺卞敖浜嗕袱涓湀鐨勫績琛€涔嬪悗瀹屾垚浜嗗綋鍒濇棦瀹氱殑鎵€鏈夎姹傦紙make the bar green錛夛紝闅忓悗浣滆€呮暣鐞嗕簡涓€涓嬫枃绔犵殑緇撴瀯錛堥噸鏋勶級錛屽湪婊℃剰鐨勬彁浜ょ粰浜咮log緋葷粺涔嬪悗錛屼綔鑰呯┛涓婁簡涓€浠剁豢鑹茬殑姹楄~錛岃洞鍦ㄥ湴涓婏紝瀛︿簡涓ゅ0闈掕洐鍙€傘€傘€傘€傘€傘€傘€俕_^

{鍚庤錛歁artin Fowler鍦ㄤ腑鍥絵

浠庢湰鏂囨寮忓畬鎴愬埌鍙戣〃鐨勫嚑涓皬鏃墮噷錛屾垜鍋剁劧璇誨埌浜哅artin Fowler鍏堢敓鍖椾含璁胯皥褰曪紝鍏墮棿鎻愬埌浜嗗緢澶氬嫻嬭瘯椹卞姩寮€鍙戠殑鐪嬫硶錛屾憳鎶勫湪姝わ細

Martin Fowler錛氬綋鐒訛紙鍊煎緱鑺變竴鍗婄殑鏃墮棿鏉ュ啓鍗曞厓嫻嬭瘯錛夛紒鍥犱負鍗曞厓嫻嬭瘯鑳藉浣夸綘鏇村揩鐨勫畬鎴愬伐浣溿€傛棤鏁版鐨勫疄璺靛凡緇忚瘉鏄庤繖涓€鐐廣€備綘鐨勬椂闂磋秺鏄揣寮狅紝灝辮秺瑕佸啓鍗曞厓嫻嬭瘯錛屽畠鐪嬩笂鍘繪參錛屼絾瀹為檯涓婅兘澶熷府鍔╀綘鏇村揩銆佹洿鑸掓湇鍦拌揪鍒扮洰鐨勩€?br />Martin Fowler錛氫粈涔堝彨閲嶈錛熶粈涔堝彨涓嶉噸瑕侊紵榪欐槸闇€瑕侀€愭笎璁よ瘑鐨勶紝涓嶆槸鎯沖綋鐒剁殑銆傛垜涓虹粷澶у鏁扮殑妯″潡鍐欏崟鍏冩祴璇曪紝鏄湁鐐圭儲浜猴紝浣嗘槸褰撲綘鎰忚瘑鍒拌繖宸ヤ綔鐨勪環鍊兼椂錛屼綘浼氭鐒剁殑銆?br />Martin Fowler錛氬鍏ㄤ笘鐣岀殑紼嬪簭鍛樻垜閮芥槸閭d箞鍑犳潯寤鴻錛氣€︹€︾浜岋紝瀛︿範嫻嬭瘯椹卞姩寮€鍙戯紝榪欑鏂扮殑鏂規硶浼氭敼鍙樹綘瀵逛簬杞歡寮€鍙戠殑鐪嬫硶銆傗€︹€?/font>

鈥斺€斻€婄▼搴忓憳銆嬶紝2005騫?鏈堝垔

{楦h阿}

fhawk
Dennis Chen
鑸嫢鑿╂彁
Kent Beck
Martin Fowler
c2.com

錛堣漿杞芥湰鏂囬渶娉ㄦ槑鍑哄錛欱rian Sun @ 鐖爲鐨勬場娉http://www.aygfsteel.com/briansun]錛?/p>

嬈ф嫇 2006-06-12 17:05 鍙戣〃璇勮
]]>
Servlet瑙勮寖綆€浠?/title><link>http://www.aygfsteel.com/outuo2/archive/2006/06/12/52240.html</link><dc:creator>嬈ф嫇</dc:creator><author>嬈ф嫇</author><pubDate>Mon, 12 Jun 2006 08:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/outuo2/archive/2006/06/12/52240.html</guid><description><![CDATA[     鎽樿: 寮曡█ Web 妗嗘灦涓€鑸槸閫氳繃涓€涓? Servlet 鎻愪緵緇熶竴鐨勮姹傚叆鍙o紝灝嗘寚瀹氱殑璧勬簮鏄犲皠鍒拌繖涓? servlet, 鍦ㄨ繖涓? servlet 涓繘琛屾鏋剁殑鍒濆鍖栭厤緗紝璁塊棶 Web 欏甸潰涓殑鏁版嵁錛岃繘琛岄€昏緫澶勭悊鍚庯紝灝嗙粨鏋滄暟鎹笌鐨勮〃鐜板眰鐩歌瀺鍚堝茍灞曠幇緇欑敤鎴楓€? WEB 妗嗘灦鎯寵鍦?..  <a href='http://www.aygfsteel.com/outuo2/archive/2006/06/12/52240.html'>闃呰鍏ㄦ枃</a><img src ="http://www.aygfsteel.com/outuo2/aggbug/52240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/outuo2/" target="_blank">嬈ф嫇</a> 2006-06-12 16:48 <a href="http://www.aygfsteel.com/outuo2/archive/2006/06/12/52240.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>紼嬪簭鍛樼敓媧諱腑鐨勫瀮鍦炬敹闆?/title><link>http://www.aygfsteel.com/outuo2/archive/2006/04/18/41607.html</link><dc:creator>嬈ф嫇</dc:creator><author>嬈ф嫇</author><pubDate>Tue, 18 Apr 2006 03:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/outuo2/archive/2006/04/18/41607.html</guid><wfw:comment>http://www.aygfsteel.com/outuo2/comments/41607.html</wfw:comment><comments>http://www.aygfsteel.com/outuo2/archive/2006/04/18/41607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/outuo2/comments/commentRss/41607.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/outuo2/services/trackbacks/41607.html</trackback:ping><description><![CDATA[1 浣犲繀欏繪剰璇嗗埌浣犲瓨鍦ㄨ繖涓棶棰樸€傚伐浣滀腑鎴戜滑澶勪簬宸ヤ綔鐘舵€侊紝涓嬬彮鍚庢垜浠浜庝笅鐝姸鎬併€? 2 涓€涓熀鏈殑鏂規硶灝辨槸鎰忚瘑鍒拌嚜宸辯殑鍛煎惛銆備緥濡傛暟鍛煎惛嬈℃暟銆傦紙涓浗浼犵粺姘斿姛錛岀憸浼斤紝澶瀬閮藉己璋冮€氳繃娉ㄦ剰鍛煎惛鏉ラ泦涓級 3 閫氳繃鍐ユ兂鏉ヤ嬌鑷繁榪涘叆褰撳墠鐨勭姸鎬侊紝騫朵笖蹇樿涓婁竴涓姸鎬併€傝繖鏍鋒垜浠氨鍙互鍦ㄥ綋鍓嶇姸鎬佷腑鍙戞尌鑷繁鐨勬渶澶ф綔鍔涳紙鍥犱負緇欏ぇ鑴戜繚鐣欎簡瓚沖鐨勫唴瀛橈級銆? 4 榪愬姩錛氫緥濡備婦閲嶏紝璺戞絳夌瓑銆? 5 鍧愬湪灝忔爲鏋楁垨鑰呮渤宀歌竟榪欎簺鑷劧鐜閲岄潰銆傛劅鍙楀ぇ鑷劧鐨勫拰璋愩€?img src ="http://www.aygfsteel.com/outuo2/aggbug/41607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/outuo2/" target="_blank">嬈ф嫇</a> 2006-04-18 11:17 <a href="http://www.aygfsteel.com/outuo2/archive/2006/04/18/41607.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> 主站蜘蛛池模板: <a href="http://" target="_blank">新源县</a>| <a href="http://" target="_blank">理塘县</a>| <a href="http://" target="_blank">普洱</a>| <a href="http://" target="_blank">罗田县</a>| <a href="http://" target="_blank">将乐县</a>| <a href="http://" target="_blank">珲春市</a>| <a href="http://" target="_blank">特克斯县</a>| <a href="http://" target="_blank">宣汉县</a>| <a href="http://" target="_blank">鄂温</a>| <a href="http://" target="_blank">新蔡县</a>| <a href="http://" target="_blank">庄浪县</a>| <a href="http://" target="_blank">固安县</a>| <a href="http://" target="_blank">敦化市</a>| <a href="http://" target="_blank">山东省</a>| <a href="http://" target="_blank">汉源县</a>| <a href="http://" target="_blank">河东区</a>| <a href="http://" target="_blank">偏关县</a>| <a href="http://" target="_blank">福清市</a>| <a href="http://" target="_blank">临清市</a>| <a href="http://" target="_blank">天台县</a>| <a href="http://" target="_blank">讷河市</a>| <a href="http://" target="_blank">文安县</a>| <a href="http://" target="_blank">偏关县</a>| <a href="http://" target="_blank">五寨县</a>| <a href="http://" target="_blank">马龙县</a>| <a href="http://" target="_blank">揭西县</a>| <a href="http://" target="_blank">会昌县</a>| <a href="http://" target="_blank">浮梁县</a>| <a href="http://" target="_blank">南陵县</a>| <a href="http://" target="_blank">青冈县</a>| <a href="http://" target="_blank">曲阳县</a>| <a href="http://" target="_blank">怀宁县</a>| <a href="http://" target="_blank">赤城县</a>| <a href="http://" target="_blank">丹凤县</a>| <a href="http://" target="_blank">宁国市</a>| <a href="http://" target="_blank">西丰县</a>| <a href="http://" target="_blank">镇宁</a>| <a href="http://" target="_blank">象山县</a>| <a href="http://" target="_blank">衡东县</a>| <a href="http://" target="_blank">高碑店市</a>| <a href="http://" target="_blank">垦利县</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>