什么是TDD?
TDD,也就是测试驱动开发,是利用测试获利的方法论(或者实践标准)。 简单地说,TDD就是“测试驱动开发”,因为它在编写代码之前编写测试,并严格遵循red=green=refactor (错误=正确=重构)的流程。 其中,“驱动”一词才是TDD的核心思想。
传统编码VS TDD编码方法:
传统编码方法
在需求分析阶段没有仔细推敲就着手编码
在不清楚需求细节的情况下,与业务负责人沟通
经过多次确认终于写完了所有的逻辑
运行测试-程序不执行功能-调试
经过长时间的调制,程序终于执行预期的功能
测试QA测试错误-调试-打补丁
程序终于成功了
代码太乱了,不能改改了还得手工测试QA测试,让你加班.
TDD编码方法
首先分解任务,分离关注点
列Example,使用实例化需求明确需求细节
写测试,只关注需求、程序输入输出,不关心中间过程
要实现,不考虑其他需求,用最简单的方法满足现在这个小需求就可以了
重构,用手法消除代码的不良味道
写完后,请手动测试一下。 几乎没有问题。 如果有问题,添加用例并修复
测试、小问题、添加和修复用例
代码清晰,用例齐全,自信提交
TDD的优点是什么?
减轻开发者的负担
通过明确的过程,一次只关注一个点吧。 思考的负担会变得更小。
事先明确需求
首先写测试有助于我们提前明确需求的细节,而不是思考需求,把代码写一半再发现未知的需求。
得到迅速的反馈
很多人说TDD的时候,我的代码量增加了,所以开发效率下降了。 但是,如果没有单元测试,就必须手工测试。 准备数据、启动APP应用程序、跳转界面等需要很多时间,反馈速度会变慢。 准确地说,快速反馈是单元测试的好处。
TDD的难点在哪里?
并非所有类型的代码都适合TDD。 特别是在图形UI和数据库设计等无法通过机器轻易判断是非的情况下。
TDD需要管理层认识到TDD的价值,为TDD留出额外的开发时间,并强制每个开发人员按照TDD的流程编写代码,需要自顶向下的管理和开发流程的支持。
测试人员不写有效的单元测试。 有很多写测试的人。 连在测量什么都不知道。 我可能连断言都没有。 从控制台输出,用肉眼比较验证。
单元测试任务太重了吗? 效率低吗?
工业嵌入式系统单元测试工具
上海控安自主开发的SmartRocket Unit作为单元测试工具,能够自动生成满足语句、分支、MC/DC准则的测试用例,并自动执行测试驱动。 通过SmartRocket Unit,用户可以快速对涉及安全的代码进行单元级白盒测试和回归测试,进一步提高单元测试的效率。
SmartRocket Unit通过智能仿真测试仪进行覆盖率测试时的思路,实现了其核心功能:
l自动生成测试用例
动态符号执行求解引擎可以利用自动推理和符号执行技术自动分析程序的路径,生成满足特定覆盖率标准的测试用例。
l程序打桩技术
自动对被测试模块中的函数调用进行打桩,自动生成测试驱动。
l测试用例的运行与分析
测试驱动以测试用例为输入,自动运行测试用例,记录并分析运行结果,最终生成测试报告,包括覆盖率分析结果和测试用例数据等。