TDD 中的测试台(测试驱动开发)

Posted

技术标签:

【中文标题】TDD 中的测试台(测试驱动开发)【英文标题】:Test rig in TDD (test driven development) 【发布时间】:2013-09-09 17:26:55 【问题描述】:

我的公司想在我们的项目中应用 TDD,我们在 5 个月前开始研究 TDD。我们从编写单元开始到接受测试(您可以在http://uet.vnu.edu.vn/~chauttm/TDD/ 中看到)。然后我们按照这本书《growth_object-oriented_software_guided_by_tests》做一个试点项目。 但是我们的测试台有问题(测试端到端系统的架构) https://docs.google.com/file/d/0B23s8xkJtB5ZNHBJbEZ3YTdMTWc/edit。 我们有 3 个团队,一个团队开发服务端,一个团队开发 android 客户端,一个团队开发 ios 客户端。在上述测试台之后,客户团队将编写验收测试并将数据直接插入数据库。服务团队将创建一个 sql 文件,然后客户端团队将使用此文件插入数据库。客户团队并不了解所有数据库(我们的系统有 200 多个表),有时他们不得不花费大量时间进行调试,因为他们不知道服务错误。 您能否再给我一个测试台或建议我如何让我们的项目(在 TDD 中)更有效?

【问题讨论】:

这听起来是个有趣的问题。您能否更详细地解释实际问题出在哪里?我不太明白你是在写客户端数据库还是服务器端数据库。 我公司为美国的一家公司外包。他们的系统是 20 年前开发的。这是一个大系统。现在他们想应用TDD来开发其他功能。 【参考方案1】:

客户团队应该有一个模拟服务层,他们可以根据该模拟服务层编写自动化测试。这些将具有快速运行且不需要与服务团队协调的优势。大多数客户端应用程序的验收测试都应该以这种方式编写。如果您正在编写使用 Google 日历 API 的应用程序,您不会尝试重新创建整个日历 API,您只需按照您期望的方式模拟日历 API。

对于团队之间的集成测试,您可以在单独的服务器上拥有一个生产服务版本,其中包含生产数据库的副本,其中包含一些测试数据。对于测试,请将客户端配置为使用测试端点而不是生产端点。

【讨论】:

请查看我们的测试台docs.google.com/file/d/0B23s8xkJtB5ZNHBJbEZ3YTdMTWc/edit。如您所见,客户团队将编写验收测试,他们必须将 sql 文件直接插入数据库。所以不能使用模拟服务 为什么一定要直接插入SQL?我会将箭头指向服务层,而不是数据库层。 因为我们必须将数据插入服务进行测试。 如果你模拟/伪造服务层,你不需要插入任何数据,这将使你的团队更容易编写测试。最大限度地提高测试的投资回报率非常重要(用尽可能少的工作编写有用的测试)。

以上是关于TDD 中的测试台(测试驱动开发)的主要内容,如果未能解决你的问题,请参考以下文章

软件界旷世之架:测试驱动开发(TDD)之争

Rebol Saphirion GUI 测试驱动开发 (TDD)

TDD测试驱动开发

浅谈测试驱动开发(TDD)

PHP 中的测试驱动开发

BDD与TDD开发模式的区别