这个BDD规格有什么问题吗?

时间:2014-12-11 11:26:45

标签: google-app-engine bdd

我是行为驱动设计(BDD)的新手,所以我希望得到关于我是否正确应用它的反馈。

我即将开发的功能从数据存储库中导出一个Twitter句柄列表(“作者”),并将其作为CSV电子邮件附件发送给请求者。数据存储库是Google App Engine的数据存储。

回顾Dan North对行为驱动测试的主要描述:http://dannorth.net/introducing-bdd/,这是我如何指定我的测试:

标题:分析师出口作者

作为分析师

我希望导出作者

所以我可以分析他们在另一个系统中谈论的内容。

场景1:细分包含作者和导出可以发送

鉴于该段包含作者

用户已在其用户个人资料中提供了自己的电子邮件地址

用户点击该细分的导出时

然后确保用户收到作者作为电子邮件的CSV附件。

场景2:细分包含作者但无法发送导出

鉴于该段包含作者

用户尚未在其用户个人资料中提供其电子邮件地址

用户点击该细分的导出时

然后提醒用户先在用户个人资料中设置自己的电子邮件地址。

场景3:细分不包含作者

鉴于该段不包含任何作者

用户点击该细分的导出时

然后阻止用户点击导出按钮

显示该段没有作者要导出的消息。

几个问题:

  1. 我应该考虑哪些其他情况,或者我将这个故事的范围过于狭窄?

  2. 情景3应该是另一个故事的一部分吗? Dan North表示,场景应该共享相同的事件。但是,用户体验可能会导致用户无法单击导出按钮,因为它已被禁用。我是否应该以不同的方式编写事件,以使其适合所有场景,例如,“用户去导出段时”。

  3. 还有什么能让这更好的BDD测试吗?

  4. 有关如何实施此类测试的任何提示取决于其他系统,例如Google App Engine数据存储和电子邮件系统?我应该存根数据存储吗?如何测试是否收到了电子邮件附件?

2 个答案:

答案 0 :(得分:1)

每个故事有一个事件?

我们现在可能会说场景应该具有相同的功能;在这种情况下,通过电子邮件导出作者的能力。其中大多数都会有一个执行导出的事件,但与该功能相关的任何其他内容也都属于它。

我通常会将默认情况设为成功,即:

  

当用户导出细分

在失败时使用尝试

  

当用户尝试导出细分

但是,如果导出按钮被禁用,则可能还会发生其他事情。用户看到该消息没有作者的触发器是什么?它可能是这样的:

  

鉴于某个部门没有作者   当用户查看该段时   然后他们应该被告知该段没有作者。

您如何改善方案?

避免将UI域与您的Twitter应用域混合。谈论“当用户导出该段时”而不是按钮单击。也许有一天它会在触摸屏上拖放,而不是按下按钮。如果您认为这种方式更好,今天就是今天,您可以更改它,您的方案仍然有效。除了按钮点击你的场景真的很好;肯定比平均水平好。

在BDD中,我们尽量避免使用“测试”一词,除非我们真的在谈论测试,而这些只是场景或示例,恰好提供了测试作为一个不错的副产品。称他们为例子或场景,你会发现更容易与商界人士谈论它,并自己想想更多的例子。我还写了a blog post on a couple of patterns I use来发现丢失的情景,这可能对你有所帮助。测试人员非常擅长发现这些,所以如果可以,请将其带入对话。如果你不能,请尝试找另一位分析师或商业专家来安排这个问题。

故事中有多少场景?

故事只是通过功能获得更快反馈的一部分,您可能拥有的场景数量在很大程度上是随意的,并且取决于团队找到这些内容进行编码的容易程度。专注于在冲刺结束时从利益相关者那里获得反馈,并使故事足够小,以便您可以快速获得内部反馈,并且足够大,以便向利益相关者展示一些有趣的内容。我知道编写整个功能的团队(并且很乐意在整个过程中展示),以及使每个场景成为一个单独故事的团队,以及在两者之间做某事的团队(所有成功的导出,然后是所有边缘案例,例如)。所有这些方法都是有效的。

如何包含依赖系统?

您可以模拟这些(通过编写自己的存根系统,或使用模拟框架或使用SOAP,SOAP UI等那些不幸的灵魂),或者您可以使用真实系统。在您的情况下,我很想部署到真实系统的测试版本,并设置一个测试电子邮件域,我可以发送电子邮件(或者如上所述发送的存根)。有很多方法可以通过API访问电子邮件收件箱,或者您可以随时自动将它们导出到文件或数据库等。

做任何事情都可以让你获得对代码的快速反馈,记住任何你不自动测试的系统都必须手动验证,电子邮件网关之类的东西不太可能改变(因此不太可能有bug),无论如何,BDD不能代替手动测试至少一次。

答案 1 :(得分:1)

你给出的场景做了两件事

  1. 探索快乐的道路:作者可以出口
  2. 开始探索悲伤路径:由于各种原因无法导出作者
  3. 总的来说,在处理悲伤的道路之前,我会集中精力让快乐的道路变得干净简单,否则你最终会做很多事情。

    目前,您正在做很多事情,并且您的方案中存在许多异常情况。让我们看看其中几个:

    1. 您已经在场景中讨论过“细分”,但我不知道片段是什么以及为什么它应该有作者。这听起来像是一个实现细节,并不属于。

    2. 您已经明确表示该报告应该是发送到电子邮件地址的csv。你为什么选择这种机制?让分析师下载CSV会不会更容易?

    3. 我建议你检查一条快乐的道路,并用一把细齿梳子试图去除所有这些异常,这样你就可以了解问题的本质。这可能最终会像

      一样简单
      Given there are some authors
      When I ask for an export of authors
      Then I should get a list of authors
      

      然后,您可以添加特定于您的上下文的内容。让我们说只有分析师才能做到这一点。那我们可能会得到

      Given I am an analyst
      And their are some authors
      When ...