首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TDD中测试单元的效率

TDD中测试单元的效率
EN

Stack Overflow用户
提问于 2019-04-04 11:36:17
回答 2查看 54关注 0票数 0

假设我们需要一个排序函数,并希望确保它是用O(nlogn)而不是O(n^2)实现的。

使用测试驱动开发,是否有一种系统的方法来测试该功能的实现效率?

根据维基百科,测试实现细节被认为是测试驱动开发中的一种反模式,这是否阻止了TDD检查满足需求的代码的效率?还是有系统的方法来做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-04 14:10:20

这并不是TDD的亮点--请记住,TDD的动机不是测试(尽管这是一个很好的副作用),而是设计,也就是说,使代码易于更改。

TDD仪式的一部分是在开发周期中频繁地运行测试;偏离开发流程的测试(例如,需要很长时间运行)是越界的。这并不是说您不能进行这些测试;支持TDD的一个论点是,它确保您有可测试的代码。但你通常不会期望在红色/绿色/循环仪式上运行需要大量挂钟时间的测试。

此外,当实现不稳定时,与实现紧密耦合的测试是真正的阻力。当测试干扰更改代码中封装的设计时,您就失去了可信度。

有时,您可以引入一个可观察性要求,这样您就可以从系统外部获得一个关键部分被调用的频率。只要该关键部分被系统使用,那么也许您就可以使用计数作为证据,并估计实现是否按照您预期的方式扩展。

在排序的情况下,这可能意味着比较函数是一个可配置的依赖项的设计,而在测试中,我们提供了一个计算调用频率的实现。

但这确实引入了一些耦合--在这一点上,你要衡量的是你的方法是否被调用,而不是测试对象是否产生正确的答案。在某些情况下,这很好。在其他情况下,这是过度耦合。我不知道有任何简单的启发,你可以用它来区分这两种情况,而不用尝试实验,当过度耦合发生时会被烧焦。

票数 1
EN

Stack Overflow用户

发布于 2019-05-03 01:36:26

与TDD不同,您可以使用test-after:

  • 注入一个计数器,以测量操作数。
  • 运行给定输入的算法
  • 确认计数小于阈值。

这将防止操作次数的倒退。(请记住,这并不能保证现实世界的表现。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55515027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档