《测试驱动的嵌入式C语言开发》——1.3节TDD的机理

简介: 本节书摘来自华章社区《测试驱动的嵌入式C语言开发》一书中的第1章,第1.3节TDD的机理,作者:(美)James W. Grenning,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.3 TDD的机理
为了看看TDD能带来什么不同,我们把它和传统的编程方式进行比较。我把传统的方式称为“后期调试式编程”(Debug-Later Programming,DLP)。在后期调试式编程(DLP)中,代码先设计并写出,即代码“写完”之后才进行测试。有趣的是,这个对于“写完”的定义忽略了一半左右的开发工作量。
人都会犯错误,在设计和编码中犯错也很正常。这时我们就发现了后期调试式编程的问题:它可能要在几天、几周或者几个月后才能反馈给开发者。反馈如此之晚,你已不可能从错误中吸取经验了。下次你还是会犯同样的错误。
在慢速反馈的情况下,出错代码之上可能还堆积了不少其他改动,因此问题的根源往往很难确定。有些代码可能已经依赖于错误的行为了。没有明确的原因和结果,唯一可以做的就是确定bug。这种天生很难预知的事情可以毁掉任何精心设计的计划。当然,你也可以为改错计划一些时间。但你计划的那点时间够吗?我们没办法进行可靠的估计。
从图1-1中可以看出,当发现一个bug的时间(Td)增加时,找到这个bug根本原因的时间(Tfind)也会增加,而且往往增加很多。修正有些bug的时间(Tfix)通常和Td无关。但如果这是由建立在错误假设之上的代码造成的组合错误,Tfix也可能大幅度增长。有些bug在数年之后才被发现。


0704684dec00670fa645b461fcc46ad5a1bcbce0

现在来看一下图1-2。当发现bug的时间(Td)趋近于零,定位问题的时间(Tfind)也会趋近于零。刚刚引入到代码中的问题往往是很明显的。就算不那么明显,开发者也可以简单地通过回退来恢复到以前工作的状态。时间只会模糊程序员的记忆并让更多的代码建立在早期错误之上,而TDD则会让Tfind+Tfix最小化。


c93c1d06b4f88d3fa6e406188e8ea31b06266ac1

相比之下,TDD则会给出立即的反馈!对失误的立刻通知将帮助我们避免bug。如果一个bug只能存在几分钟,那它还是bug吗?不,它只是个被避免了的bug。TDD预防bug。后期调试式编程(DLP)则是把浪费制度化。

相关文章
|
3月前
|
缓存 运维 数据库
【测试人员兼职指南】利用专业技能:如何从测试转向开发赚钱
本文分享了作者作为测试人员如何利用专业技能转向开发来兼职赚钱的经验,包括分析和解决登录页面跳转、避免重复账号注册、用户登录后首页显示用户名以及添加退出功能等问题,并提供了Django项目中使用sqlite3数据库和后台管理的扩展技巧。
125 1
【测试人员兼职指南】利用专业技能:如何从测试转向开发赚钱
|
3月前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
48 1
|
14天前
|
机器学习/深度学习 数据采集 人工智能
探索AI驱动的自动化测试新纪元###
本文旨在探讨人工智能如何革新软件测试领域,通过AI技术提升测试效率、精准度和覆盖范围。在智能算法的支持下,自动化测试不再局限于简单的脚本回放,而是能够模拟复杂场景、预测潜在缺陷,并实现自我学习与优化。我们正步入一个测试更加主动、灵活且高效的新时代,本文将深入剖析这一变革的核心驱动力及其对未来软件开发的影响。 ###
|
15天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
31 1
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
141 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
21天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
37 2
|
23天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
1月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
53 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
70 1
|
2月前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
下一篇
无影云桌面