培训测试驱动开发有感
2012-03-28 14:52
211 查看
由于所在的公司是互联网行业,很少接触到软件工程的概念,所以对于测试驱动这样的开发模式一直不感冒。由于本次项目中需要用到测试驱动开发来进行,就去听了测试驱动开发的培训,感触颇深
测试驱动开发的一般流程是:
快速新增一个测试
运行所有的测试(或者你自己新增的单元测试)
发现新增的单元测试不能通过(因为没有写代码),对代码进行一点点修改,需要尽快让测试代码通过
再次进行运行所有的测试,并且全部通过
重复3,4过程
对完成的代码进行重构,再次运行所有的测试
简单的一点就是 新增测试用例->修改代码->运行测试用例->在修改代码->运行测试用例->测试用例通过->重构
其中几个细节点:
对于未实现的方法,不要返回默认值,抛出异常 例如UnsupportedOperationException
可测性>封装性 ,尤其是内的内部状态或者内部方法需要测试时,要提供一个get方法获取内部状态,要么暴露把变量声明为public,而方法需要声明为public
采用测试驱动开发,一定会增加成本。测试驱动开发对于未来的重构有帮助。当产品的生命周期越长,这种开发模式的优势越明显,价值也越大。对于一个不断持续开发的产品来说,测试驱动开发前期投入会非常大,后期维护成本会逐步降低。如果对于生命周期很短的产品,比如一个营销活动开发的代码,由于后期很少会对其修改,则测试驱动开发的价值就比较低
测试驱动开发对后期的技术重构会有很大的帮助,但是对于业务重构的价值帮助不大。因为整个业务模式有了很大的变化,相当于重新开发了一套产品。测试用例全部都要重新实现
当单元测试覆盖率在60%以下的时候,对于整个项目的质量没有太大的帮助。因为项目主要的流程部分编码占整个项目编码的60%,而这一部分会进行重复性的测试。当单元测试覆盖率达到90%的时候,才能越来越多的发现许多隐藏很深的bug。
分支覆盖率重要性大于代码行覆盖率
先写代码,在补写用例的不是tdd开发模式。
测试驱动开发的一般流程是:
快速新增一个测试
运行所有的测试(或者你自己新增的单元测试)
发现新增的单元测试不能通过(因为没有写代码),对代码进行一点点修改,需要尽快让测试代码通过
再次进行运行所有的测试,并且全部通过
重复3,4过程
对完成的代码进行重构,再次运行所有的测试
简单的一点就是 新增测试用例->修改代码->运行测试用例->在修改代码->运行测试用例->测试用例通过->重构
其中几个细节点:
对于未实现的方法,不要返回默认值,抛出异常 例如UnsupportedOperationException
可测性>封装性 ,尤其是内的内部状态或者内部方法需要测试时,要提供一个get方法获取内部状态,要么暴露把变量声明为public,而方法需要声明为public
采用测试驱动开发,一定会增加成本。测试驱动开发对于未来的重构有帮助。当产品的生命周期越长,这种开发模式的优势越明显,价值也越大。对于一个不断持续开发的产品来说,测试驱动开发前期投入会非常大,后期维护成本会逐步降低。如果对于生命周期很短的产品,比如一个营销活动开发的代码,由于后期很少会对其修改,则测试驱动开发的价值就比较低
测试驱动开发对后期的技术重构会有很大的帮助,但是对于业务重构的价值帮助不大。因为整个业务模式有了很大的变化,相当于重新开发了一套产品。测试用例全部都要重新实现
当单元测试覆盖率在60%以下的时候,对于整个项目的质量没有太大的帮助。因为项目主要的流程部分编码占整个项目编码的60%,而这一部分会进行重复性的测试。当单元测试覆盖率达到90%的时候,才能越来越多的发现许多隐藏很深的bug。
分支覆盖率重要性大于代码行覆盖率
先写代码,在补写用例的不是tdd开发模式。
相关文章推荐
- 培训测试驱动开发有感
- TDD(测试驱动开发)培训录
- 北风网JUnit测试驱动开发VIP培训教程
- 软件开发者面试百问-----解释一下什么是测试驱动开发,举出极限编程中的一些原则
- 测试驱动开发优缺点
- vs格式化快捷键、面向对象封装、类的事件、测试驱动开发
- “测试驱动的软件开发”,与测试无关
- iOS尝试用测试驱动的方法开发一个列表模块【二】
- 测试驱动开发与Android
- 测试驱动开发读后感
- 新Java运动:测试驱动开发3---用户注册2
- 【开发】测试驱动的FLEX开发--使用FLEXUNIT
- 测试驱动开发学习<一>
- 测试驱动JavaScript开发实战
- 敏捷开发 —— TDD(测试驱动开发)
- 敏捷联盟Gordon Pask奖获得者讲“测试驱动开发”(TDD)
- 测试驱动开发入门-CppUnit
- cppunit - 测试驱动开发入门(1)
- 测试驱动开发笔记(二)——xUnit
- VS2010 学习笔记 WF4 (5) 加入单元测试,实现测试驱动开发(TDD)