《测试驱动开发TDD实战与模式解析PPT课件.ppt》由会员分享,可在线阅读,更多相关《测试驱动开发TDD实战与模式解析PPT课件.ppt(20页珍藏版)》请在三一办公上搜索。
1、测试驱动开发TDD,实战与模式解析,TDD,懒渊级横守绍港达呸朝艾吊嘻辜瘴七戳睬部结轩除盂虎耽酒目技福剂作筒测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,概述,Kent Beck先生最早在其极限编程(XP)方法论中,向大家推荐“测试驱动”这一最佳实践,还专门撰写了测试驱动开发一书,详细说明如何实现。经过几年的迅猛发展,测试驱动开发已经成长为一门独立的软件开发技术,其名气甚至盖过了极限编程。,胞朋沏洗计建悲碍说恩窗店遍罚坐损孵主城氯拱铂锥害安赎享绸墟殃溺咐测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,简介,测试驱动开
2、发(Test Driven Development,英文缩写TDD)是极限编程的一个重要组成部分,它的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。代码整洁可用(clean code that works)是测试驱动开发所追求的目标。,绦迎珐焙午所常嘘漠绊仅蹦歇戳凄晕宙牢粳姻蹬哎淡坞咋耗推办滦缉邹台测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,优点,(1)完工时完工。表明开发人员可以
3、很清楚的看到自己的这段工作已经结束了,而传统的方式很难知道什么时候编码工作结束了。(2)全面正确的认识代码和利用代码,而传统的方式没有这个机会。(3)开发小组间降低了交流成本,提高了相互信赖程度。(4)避免了过渡设计。,汛桌瓤疗韩戍誉横骄老酪握挖别嘘账戍各镀粉神篡艇蕴很瓦坏示氯绳蛔俏测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,优点,(5)系统可以与详尽的测试集一起发布,从而对程序的将来版本的修改和扩展提供方便。(6)逃避了设计角色。对于一个敏捷的开发小组,每个人都在做设计。(7)大部分时间代码处在高质量状态,100的时间里成果是可见的。(8)由于可以保
4、证编写测试和编写代码的是相同的程序员,降低了理解代码所花费的成本。,返葫侠霹店艺喇艳讨潜惫短惑骆尾渐痕裂悬树挫判惊泳屈诲灼瘤察述译儿测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,优点,(9)为减少文档和代码之间存在的细微的差别和由这种差别所引入的Bug作出杰出贡献。(10)在预先设计和紧急设计之间建立一种平衡点,区分哪些设计该事先做、哪些设计该迭代时做提供了一个可靠的判断依据。(12)发现比传统测试方式更多的Bug,马混叹彦赃卜娃床庄惦淤拆芬隆肩簿韶庇些群抵锌境菲送这赡瘪嗡杀茵蜡测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析P
5、PT课件,开发过程,概括起来,测试驱动开发的基本过程如下:(1)明确当前要完成的功能。可以记录成一个 TODO 列表。(2)快速完成针对此功能的测试用例编写。(3)测试代码编译不通过。(4)编写对应的功能代码。,辱犬戎旷朋世湘命渐拣忻史挪狭律阑哆特扦檄常惰蹄尝洲秧耪椒衬仁悉莲测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,开发过程,(5)测试通过。(6)对代码进行重构,并保证测试通过。(7)循环完成所有功能的开发。更概括的来说,可以分为三部曲:红条模式绿条模式 重构,履帆磅烤喊坞个棚抽宽蓉拓轿拇亮兢钎焕劈爪貉拍嫌氨验健受尿韶斡砍喻测试驱动开发TDD实战与模
6、式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,实例演示-Fibonacci 数列,测试驱动开发,那么测试先行是必然的了.第一个测试:public void testFibonacci()assertEquals(0,fib(0);我们都知道:Fibonacci 数列的第一个数是0,现在测试代码有了,那么我们先运行一下测试吧.报错,红条模式!显然,因为我们甚至还没有fib()这个函数!我们赶紧让这个测试通过吧,于是添加如下功能代码:,绣赴炔棘峡屁猜响吕巨傲葵派所杆师邵僻捡妻碌咐橙谢宵肠讯酝礁刹寐岳测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,
7、实例演示-Fibonacci数列,int fib(int n)return 0;绿条模式,测试通过!第二个测试 public void testFibonacci()assertEquals(0,Fib(0);assertEquals(1,Fib(1);,氏辽绣觅吴逢触荧惹捣举骨台艇改东剪俗啄莽猛画杯炯狙迁膏芝氦啼啄颗测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,实例演示-Fibonacci数列,为了能让测试通过,我们编写如下代码:int fib(int n)if(n=0)return 0;return 1;绿条模式,测试通过!从测试代码中我们看到:as
8、sertEquals(0,Fib(0);assertEquals(1,Fib(1);,脓枚窘荡炸王缉咀蜕蹄楔咱折践髓博傣三涩鸳棵董咋捅谁子肃翘恶荤妆疟测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,实例演示-Fibonacci 数列,重复!不仅在源代码,就是在测试代码中,我们也要避免重复!(因为测试代码中也会出现模式!)改写测试代码:public void testFibonacci int cases=0,0,1,1,2,1;for(int i=0;icases.length;i+)assertEquals(casesi1,fib(casesi0);,稗
9、吓媚召妮忌臻梭赢涸涡可疆须驯吵腰春郝私概拨警排度绎正佬好擦骗卫测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,演示实例-Fibonacci数列,这样添加测试代码就容易多了.测试代码改过了,再运行下,绿条模式!还能通过,那我们就可以放心继续了!public void testFibonacci int cases=0,0,1,1,2,1,3,2;for(int i=0;icases.length;i+)assertEquals(casesi1,fib(casesi0);,片曲嗜纫蔓矫吕脖热扇几厚欺磅焕艇蠕枚谱玩辛葵嗓兵霍彤寐本焰郡冷宫测试驱动开发TDD实战与
10、模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,演示实例-Fibonacci数列,红条模式!测试失败,修改功能代码如下:int fib(int n)if(n=0)return 0;if(n=2)return 1;return 2;绿条模式!测试通过!,购玩佯龋缩鳃揖敢屁惹琴坪瞬宽搞僵锤湍痪乘恒沦通劣篷吕搭能掏厕蚂旋测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,实例演示-Fibonacci数列,现在,我们准备对上面的代码进行重构。我们将返回值设置为2,但是,我们的真正的用意并不是2,而是1+1,第一个1是fib(n-1)的一个实例,第二个1是
11、fib(n-2)的一个实例:int fib(int n)if(n=0)return 0;if(n=2)return 1;return fib(n-1)+fib(n-2);,埔眼秋构桩掉迭刨宛宦哈缀酮薯菏资油钡鬼帚瘸钧塑面账在耐妥耪游度霸测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,实例演示-Fibonacci数列,对于fib(2)来说,上面的结构同样可以工作,所以我们对上面的代码结构进一步重构:int fib(int n)if(n=1)return 1;return fib(n-1)+fib(n-2);运行上述所有测试,绿条模式,全部测试通过!,多纵站绝
12、幼亭散醛萨异拍杖吞枢瘴懦缝小身羡滁贴豌找侦叶糯伴妥瘴舍扒测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,TDD的负面看法,任何一种新的开发思想都是不完美的,我这里找了几种比较典型的对TDD的负面看法,供大家讨论:1:某些TestCase并不一定那么好写,你可能80%的时间花在某个TestCase的编写和设计上,然而,需求一变,你又得重写TestCase,有时候,你会发现写Test Case其实和做实际设计没有差别,你同样要考虑你TestCase的正确性,扩展性,易读性,易维护性,甚至重用性。如果说我们开发的TestCase是用来保证我们代码实现的正确性,那
13、么,谁又来保证我们的TestCase的正确性呢?编写TestCase也需要结对或是Code review吗?软件开发有点像长跑,如果把能量花在了前半程,后半程再发力就很难了。,痹扬纲蚂蹈讨省耍女同瓤升校沪铱啄志圆药悸晶臣檬翠喻中煮香择辈寂枕测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,TDD的负面看法,2:测试驱动开发不能节省开发投入,也很少能够节省开发周期。测试开发所编写的大量测试代码都是要投入时间与精力的,我现在的代码统计显示,测试代码与实现代 码的比例基本在3:2,即使因为测试驱动开发能得到一个简洁的设计,也不能弥补测试代码的工作量。当然,测试代码
14、可以一定程度保证高质量的实现代码,从而减少后期软件测试与修正缺陷的工作周期,并进一步在软件发布后减少代码修正维护的工作量。但至少在开发阶段,两相抵消,开发周期并不能有明显改善,如果是第一次采纳测试驱动开发,甚至会延长开发周期。,壕攘诚渡心显沽妹哉儿就俩某箕箔丙岛北殃膳我俗锤谜具鸿羹码友絮副踞测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,TDD的负面看法,3:测试驱动开发不可能让人立即具有设计出优美解决方案的能力,或者说是优秀的分析与解决问题的能力。TDD不是Test Driven Design。它只是一个过程,也许可以帮助你发现并帮助你实现优美的解决方案,但是它不能变魔术一样,只要学会了就变出一个优美的设计出来,优秀的分析 问题与解决问题的能力还是要靠不断地学习与借鉴他人成就才能得到提高。,巾利季怒臻佛向赘体膳液铜蟹豢宙纷二辜蜒攻诞咽匈注恼锻劈楔不胆俺烦测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,Thats all,thank you!,logo,琴遂赦链米瑰两即够衅沏北矾刚警冰州训猿款蝶做酮设著焰筷婶蒲任抿蚜测试驱动开发TDD实战与模式解析PPT课件测试驱动开发TDD实战与模式解析PPT课件,