1. 测试驱动开发

测试驱动开发(TDD)是一种增量式软件开发技术。简单地说,就是在没有失败的的单元测试的前提下不可以写产品代码 TDD的实践者会先用测试来表达他们希望产品代码会有什么行为。然后这个测试显示会失败。只有在这时,他们才开始写产品代码,以便让测试通过

1.1 TDD的特点

  • 测试自动化是TDD的关键。在TDD的进程中,首先是生成的是自动化测试代码,然后是满足这些测试 的产品代码,一套单元测试伴随着产品代码同时不断地增长,它也是像产品代码一样具有一定的资产,测试代码会描述代码的行为和使用方式,同样会是一个不错的关于软件的阅读文档。

  • TDD并不是一种具体的测试技术,具体的测试技术会在后面讲述C/C++的自动化单元测试框架。

  • TDD还是有趣的!这就像一个游戏,测试代码定义了产品代码的预期方向,就像是游戏中的预期目标。伴随着每一测试通过都会有新的成就感;在测试代码作为产品代码的行为的保证的同时,你大可放心重构优化代码,产生更优的解决的方案也会有新的成就感。专心面对下一个挑战吧,少年。

1.2 TDD的好处

  • 产生的bug更少

无论小的还是大的到可以在现场产生灾难性结果的逻辑错误,TDD都能在开发时快速发现。缺陷就这样避免了。还有能在做集成测试之前发现更多的错误,很多时候,代码中出现的是错误而不是bug,不要让错误打扰的bug的浮现。

  • 调试时间更短

更少的bug自然意味着更短的调试时间,就是这么简单。

  • 边际效应所带来的bug更少

测试会绑定假定、约束并给出使用范例,当新代码违反了这些假定或约束,测试给出警告。

  • 单元测试是“不会说谎的文档”

精心构建的测试可以成为可执行且无歧义的文档。千言万语也没有一个可以工作的实例能说明问题。

  • 内心的平静 彻底、全面的回归测试给予我们信心。

  • 改善设计

好的设计一定是可测试的设计。长函数,高耦合以及复杂的条件判断,这些都会导致复杂且难测试的代码。如果开发者发现对计划中的代码改动很难编写测试,那就说明设计有问题,TDD会在早期给出提示。TDD是监视代码变坏的雷达。

  • 对进度的监控

测试跟踪记录到底现在在哪些部分已经是可以工作了,以及已经完成了多少工作。它对于“完成”给出了新的估计方法和定义。

  • 有趣且回报丰厚

TDD不断地给开发者以成就感,你每写一点代码都会完成一些工作,同时你能很清楚它们是正确的。

1.3 TDD对嵌入式开发的好处

  • 在硬件可用之前或者硬件很贵或者很稀少时,通过独立于硬件的方式校验产品代码,从而降低风险。

  • 在开发环境中执行并移除bug,从而减少长时间的编译、链接和上传这样的循环次数。

  • 对于在目标硬件中既难发现又难修改的问题,可以减少调试的时间。

  • 通过在测试中模型化硬件交互,使硬件/软件的交互彼此独立。

  • 通过解开模块之间以及模块 与硬件之间的耦合来改进软件设计。可测试的代码首先必须模块化的。

results matching ""

    No results matching ""