《测试驱动的嵌入式C语言开发》——1.4节TDD的微循环

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

1.4 TDD的微循环
我将从什么不是TDD说起。它不是花一个小时、一天或者一个星期来写一大堆的测试代码,然后再来实现产品代码的开发方式。
TDD是写一个小小的测试,然后写仅够让这一个测试通过的产品代码,同时不能破坏已有的测试。
TDD要求你在构建一个东西之前先决定你到底要什么。它将反馈给你所有的东西是否都和你当前的预期一样。
TDD的核心是由小步骤来不断重复的循环组成,称为TDD微循环。新的和老的代码是否还保持我们期望的行为?每次循环都会给出这个问题的答案。能得到这种反馈的感觉很棒。进度也很实在,而且这种进度也是更容易度量的。错误变得很明显。
以下的TDD循环步骤基于Kent Beck在其所著的《Test-Driven Development》[Bec02]一书中的描述:
1)增加一个小的测试。
2)运行所有的测试并期待新测试失败,也可能根本连编译都通不过。
3)为了让测试通过来做一些小改动。
4)运行所有的测试并期待新的测试通过。
5)重构,以移除重复并改进代码的表达方式。
TDD循环中的每一步都只需要几秒到几分钟的时间。新的代码和测试以增量的方式加入进来,并且立刻得到关于我们新写的代码是否和我们预期一致的反馈。你把脑海中预见到的愿景“生长”成代码,从简单到复杂。
在这个过程中,你不仅了解到了解决方案,同时也对所解决的问题有了进一步了解。测试变成了对需求细节的翔实描述。当工作不断地累加后,测试同产品代码一起绑定了对问题的定义和解决方案。这些知识以稳定的形式被捕捉下来。
不论进行何种改动,都要运行一下测试。如果测试通过,那么它会告诉你一切正常;如果产生了意料之外的结果,它会给你警告。形象一点来讲,这意味着如果你把代码搞坏,那么它会尖叫!
如果测试已经通过,这感觉当然不错。因为这是一个坚实的进步。但是软件工作该做的事情还不止于此。
保持代码整洁和富有表现力
通过测试表明了正确的行为。代码还必须可以运行。但是软件还有更多的错误行为。代码应该保持整洁和良好的结构,以体现我们专业的素养并为将来能轻松地改动投资。整理代码有个专用的名字,它就是这个不断重复循环中每次的最后一步——重构。Martin Fowler在他所著的《Refactoring:Improving the Design of Existing Code》[FBB+99]一书中是这样描述的:重构就是在不改变当前外部行为的条件下对现有代码结构进行修改的过程。其目的是通过写易于理解、易于演化并且易于我们自己和他人维护的代码来让工作变简单。
小的乱代码很容易写出来。遗憾的是,它们也容易被忽略。这些乱代码越到开发的后期越难清理—是你创造了它。在这些乱代码还新鲜的时候就要清理。“测试全过”给了我们做重构的一个好机会。贯穿本书都会讨论和演示重构,尤其是在第12章中。
TDD首先会帮助代码工作起来,但更大的好处还在后面,在后来的开发者理解和维护这些代码的时候。那时就可以(几乎)毫无畏惧地修改这些代码了。
测试代码和TDD首先支持代码的作者,以便让代码正常工作。当我们面向未来时,它更加是和代码的读者相关的,因为测试把我们正在创造的是什么东西描述给读者。


f5d8572e99d04d7594399bf492f63b856bf23bd8

你可能听做过TDD的人称这种节奏为“红灯-绿灯-重构”微循环。

相关文章
|
5月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
8月前
|
数据采集 人工智能 监控
人工智能驱动的软件工程:测试左移的崛起价值
本文探讨了人工智能驱动下测试左移理念在软件工程中的重要性,分析测试工程师在需求评估、AI代码生成及遗留系统优化中的关键作用,揭示AI带来的挑战与机遇,并指出测试工程师需提升技能、关注合规与可维护性,以在AI时代保障软件质量。
444 89
|
6月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
559 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
333 7
|
11月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
6月前
|
存储 测试技术 API
数据驱动开发软件测试脚本
今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
235 0
|
9月前
|
传感器 人工智能 JavaScript
鸿蒙开发:DevEcoTesting中的稳定性测试
DevEcoTesting主要的目的也是用于软件的测试,可以让开发者无需复杂的配置,即可一键执行测试任务,同时提供了测试报告和分析,无论是对于开发者还是测试同学来说,都是一个非常方便的工具。
303 3
鸿蒙开发:DevEcoTesting中的稳定性测试
|
8月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
8月前
|
运维 jenkins 测试技术
"还在苦等开发部署环境?3步教你用Jenkins拿回测试主动权"
测试工程师最头疼的问题是什么?依赖开发部署环境! 开发延期→测试时间被压缩→紧急上线后BUG频出→测试背锅。传统流程中,测试被动等待部署,效率低下。而Jenkins自动化部署让测试人员自主搭建环境,实现: ✅ 随时触发测试,不再苦等开发 ✅ 部署效率提升10倍,抢回测试时间 ✅ 改善团队协作,减少互相甩锅 学习Jenkins部署能力,成为高效测试工程师,告别被动等待!
|
11月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1588 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!