测试驱动开发培训讲义.ppt

上传人:牧羊曲112 文档编号:6308348 上传时间:2023-10-15 格式:PPT 页数:35 大小:209.49KB
返回 下载 相关 举报
测试驱动开发培训讲义.ppt_第1页
第1页 / 共35页
测试驱动开发培训讲义.ppt_第2页
第2页 / 共35页
测试驱动开发培训讲义.ppt_第3页
第3页 / 共35页
测试驱动开发培训讲义.ppt_第4页
第4页 / 共35页
测试驱动开发培训讲义.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《测试驱动开发培训讲义.ppt》由会员分享,可在线阅读,更多相关《测试驱动开发培训讲义.ppt(35页珍藏版)》请在三一办公上搜索。

1、1,测试驱动开发,2,主题,测试驱动开发的基本概念测试驱动的基本流程测试驱动的所采用的技术及工具DEMO,3,测试驱动开发的基本概念,为什么会出现测试驱动开发什么是测试驱动测试驱动所要达到的目标,4,测试驱动蕴含的哲学原理,将复杂事情简单化让注意力关注在单一的事物上分解Hardcode重构,5,为什么会出现TDD程序员,当有一个新的开发任务时,往往第一个念头就是如何去实现它呢?“应该是这么做的吧,嗯,差不多就是这样的”。抓起任务就开始编码,一边写,一边修改和设计。时间这么紧!我还是先实现任务吧,然后再好好测试。还是不工作,时间不多了。不管了,还是先做个实现,以后再来整理代码吧。我已经单步调试了

2、好几次了,遍历了所有可能的分支,应该不会有问题了,提交,今天可以好好休息一下了要不要写单元测试把我刚才单步调试的步骤写下来啊?那样是很好,但工作量很大哦这样的情况要作自动测试太复杂了。还是手工测试一下吧。程序员应该做些有创意的东西,这样才有趣啊测试是QA的事,我为什么要做啊,我做了他们干什么啊,6,为什么会出现TDD程序员,奇怪了,怎么代码跟开发文档上有这么大的差别啊?这段代码究竟想表达什么意思?代码现在越来越乱了,我都不敢修改代码了,修改了这个地方,天晓得会引起多少别的地方出错啊!这个地方的代码怎么好象在那个地方看到过啊?这个程序里怎么会有这么多的重复代码呢?,7,为什么会出现TDDQA,开

3、发部在干什么啊,BUG怎么这么多,他们有没有自己先测试一下啊这下好了,让他们修改了一个BUG,现在一下子来了这么多的BUG他们到底在搞什么啊,有没有从用户的角度考虑啊,我新增一个采购订单,订单项竟然可以输入负数。,8,有办法可以解决上面的矛盾吗?,9,XP中的测试,Unit Test(基本不提倡,只对特别功能)Functional Test(Acceptance Test)Regression TestNightly TestIntegration TestStress Test所有的测试都应该独立地自动的运行,10,什么是Function Test,11,什么是Regression Test

4、,“Regression testing is the 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需要重用已经建立的所有的测试单元(Unit Test)和功能测试套件(Functional Test)。Reg

5、ression Test的基础是完整的自动单元测试和功能测试。,12,什么是Nightly Test,Nightly Test就是每晚自动运行所有的Unit Test和Acceptance Test。Nightly Test是XP中的Continuous Test的一个练习(Practice)。Nightly Test可以准确的反映项目开发的进度和质量。,13,Nightly Test,Nightly Test是软件开发中一个保证开发之质量的最有效的方法,也是衡量软件之质量和开发效率的最好的指标。Nightly Test就是每天工作结束,所有的代码都Check in到Source Contro

6、l后,自动运行所有的Unit Test和Function Test。测试的结果应该自动分发给开发人员和管理层。两个指标数值:测试例子的通过率 单元测试必须是100%通过。Functional Test 应该按计划的通过。单元测试的覆盖率 表明有多少Class被测试过和测试的完善程度。,14,测试优先的编程,在写任何代码之前,先写它的Function Test。“Never write a line of functional code without a broken test case”Kent BeckTest-First Programming是一种测试技术吗?Test-First Pr

7、ogramming首先是一种分析方法。它迫使程序员仔细思考要做什么和不要做什么(而不是如何具体的实现)。特别是各种例外的情况,并用程序语言正式的写下来。这就好像在程序员的任务和程序员之间签订了一个清晰的正式合同。Test-First Programming是一种设计方法。Function Test测试的是程序,而不是一个想法。程序员必须清晰的定义程序的验收条件才能写出它的Function Test。而这时程序员是不知道(也不需要知道)里面的具体逻辑是如何实现的。程序员只需要考虑Class的界面和功能(Responsibility)。啊,你在做OO设计了。Test-First Programmi

8、ng是一种质量控制方法(Quality Control)。如何控制质量呢?如何知道我的程序是否运行呢?我会不会漏了什么?运行一下Function Test。Test-First Programming是一种重构和优化的方法。我们总希望自己的代码可以漂亮,运行的效率高,所以我们会不断地去改进。可是如何保证改进和优化后的质量呢?会不会越改越糟?答案还是Function Test。Test-First Programming不是通常意义上的测试技术,它的目的也不是仅仅用来测试你的代码。Test-First Programming是一种面向对象的开发方法。,15,什么是Test-Driven Desi

9、gn(TDD),Test-Driven Design是一种开发风格,它要求程序员做到:在写产品代码之前,先写它的功能测试(Function Tests)没有功能测试的Class不允许作为产品代码功能测试例子决定了如何写产品代码不断地成功运行所有的功能测试例子不断的完善功能测试例子Test-Driven Design是把需求分析,设计,质量控制量化的过程!,16,什么是测试驱动,测试驱动是一种开发形式:1.首先要编写测试代码2.除非存在相关测试,否则不编写任何的产品代码3.由测试来决定需要编写什么样的代码4.利用IDE,根据测试代码驱动功能代码编译成功,再运行成功5.要求维护一套详尽的测试集,1

10、7,测试驱动所要达到的目标,clean code that work 测试驱动所追求的目标就是代码整洁可用,其实现的规则就是:1.只有测试失败时,我们才写代码2.消除重复设计,优化设计结构 3.测试代码的业务含义明确(DSL),18,测试驱动开发的基本流程,定义应用程序的要求熟悉应用程序的功能区域,确定要使用的单项功能项或功能要求创建验证要求的测试列表为功能或要求定义接口和类编写测试代码运行测试根据测试生成产品代码重新运行测试,根据测试修改产品代码,直到所有测试都通过整理代码重复上面的步骤,19,测试驱动开发的基本流程,20,测试驱动编码时的典型场景,根据需求的验收条件编码测试用例根据编译结果

11、(编译不通过),将编译不通过的地方,驱动功能代码的编码,视编译通过在编译全部通过后,运行测试用例,修改测试不通过部分的功能代码(hardcode),使测试代码运行成功将hardcode部分逐个修改为真实的业务逻辑,并运行测试代码通过重构,21,测试驱动的工具与技术,功能测试重构的基本概念,及在测试驱动中的地位重构的时机每日构建代码质量API(Findbug、checkstyle、Jester、代码统计、测试数据统计)模拟对象(建议只在单元测试中使用),22,功能测试,什么是功能测试?_ 是黑盒测试,单元测试是白盒测试功能测试是开发者编写的一小段代码,用来验证被检测代码的一个很小的,很明确的功能

12、是否正确功能测试的优点可以明确地验证功能的正确性,提高开发速度和质量,加速了代码重构的过程是一种设计行为功能测试可以表现为文档化具有回归性,可以随时随地的快速的运行测试来验证代码的准确性,23,重构的基本概念,什么是重构?重构是一个过程:在不改变软件的外在行为的前提下,对代码做出修改,以改进程序的内部结构。提高其可理解性,降低其修改成本。,24,重构的好处,重构可以改进软件设计重构使软件更加容易理解重构可以帮助找出BUG重构可以提高编程速度,25,重构的时机,存在重复的时候当我们觉察到代码或代码所表达的意图不明确的时候代码有味道的时候(我们的代码可能存在问题的时候),26,DEMO:货币算法,

13、27,ToDOList,当法郎与美元的兑换率为2:1的时候,5美元+10法郎=10美元5美元*2=10美元,28,总结(1),TDD的通用过程快速新增一个测试运行所有的测试针对测试不通过的地方进行修改运行所有的测试,并且全部通过重构运行所有的测试,并且全部通过,29,总结(2),积累代码质量API建立测试与需求的对应关系,需求测试度测试完成时,编译运行的次数、变动代码行数测试运行的时间曲线(间隔)重构的次数,每次重构的代码行数质量控制工具的运行次数、相关参数,30,TDD防止Over-Engineering,在开发中采用TDD,可以有效的避免过度设计和开发。如果程序员不愿为一个Method写测

14、试例子或者认为现在没有必要测试改Method,那这个Method多半是现在不需要的。,31,TDD,程序员和管理层,对程序员来说,通过运行Unit Test和Functional Test,每天下班的时候都可以清楚的知道自己的代码是work的。对管理层来说,通过Nightly Test的结果,每天一早都清楚的知道项目的质量和开发进度。,32,XP中谁来写Tests,Developer:Unit TestAcceptance Test(Functional Test)Customer:Acceptance Test用户为每一个User Story写Functional Test。但通常用户并不具备设计和开发Functional Test的能力,需要程序员的帮助。可以开发工具把需求的验收条件翻译为功能测试用例代码,33,什么时候写Tests?,如果你要写一个新的功能,请先写她的测试例子如果你要在没有经过测试的代码上写新的功能,请先写目前代码的测试例子如果你要Fix一个Bug,请先为这个Bug写一个测试例子如果你要Refactor没有测试过的代码,请先写一个测试例子如果你发现一个边缘例外值,请为她写一个测试例子,34,预告:基于web页面的测试驱动,Page Object模式webdriver,35,谢谢大家!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号