如何为给定的应用程序设计 BDD 方案

本文关键字:应用 程序设计 BDD 方案 | 更新日期: 2023-09-27 17:56:44

嗨,我正在开发一个相当简单的C#应用程序,并希望利用这种可能性来深入研究BDD。我想我理解了基本原理,但我在将它们应用于我的应用程序中时遇到了麻烦。

更具体地说,我不知道如何将我的需求"转换"为功能/规格和场景。

应用程序的目的是按照任务之间的特定顺序执行不同的任务,即任务 A 在任务 B 成功完成之前无法启动。

应用程序

有两个部分,一个是配置向导,用于配置任务及其依赖项以及某种"播放列表",另一个是运行这些播放列表的实际应用程序。

因此,用户首先配置任务及其依赖项,然后通过定义他最终想要执行的任务来创建播放列表 - 然后应用程序负责在必要时添加其他任务由于依赖项,并将它们按正确的顺序排列以满足依赖项。

我可以想象如何为配置向导构建我的场景,例如:(请随时对此发表评论;))

Given An empty Playlist
And Task A depends on Task B
When The user adds Task A to the list
Then Task B should be added to the list first
And Task A should be added to the list second

但是对于运行这些播放列表的部分,我对如何在明确的情况下拆分需求感到有些迷茫。我可以想到这样的事情(快乐的道路):

Given A playlist
When The user executes the list
Then The Tasks should be executed in the correct order

但这对我来说有点太不具体了。播放列表中有哪些任务?如何定义它们的依赖关系?等等...谁能给我一些建议?

如何为给定的应用程序设计 BDD 方案

你所拥有的看起来是一个很好的起点。

写的场景是声明性的,即你声明你想要发生的事情,而没有具体说明它应该如何发生:

Given A valid playlist
When The user executes the list
Then The Tasks should be executed in the correct order

采用这种方法意味着有关如何执行这些步骤的细节在步骤定义中定义。声明性测试的一个优点是

  • 它们更容易被产品所有者或业务分析师读写(无论如何,BA 都应该写这些!
  • 它们
  • 不那么脆弱,即它们不太可能受到 UI 更改的影响(例如)

关于:

播放列表中有哪些任务?如何定义它们的依赖关系? 等等...

如果你问企业主他们希望应用程序如何运行,他们更有可能以声明性的方式描述他们想要什么(例如,在您给出的示例中)。

对于一个不愉快的路径示例,产品负责人可能会说:

Given an invalid playlist
When a user executes the list
Then the application should inform them of the error that occurred

同样,它是声明性的,实际细节(例如,播放列表中有哪些任务,它们的依赖关系)将在步骤定义中实现。

可以在此处和此处找到有关声明性测试的几篇好文章。另请参阅此答案。

这是一个非常好的问题,IMO 这真的取决于你想要什么。有时指定一个场景就足够了,例如

Given A valid playlist
When the user executes the list
Then the tasks should be executed in the correct order

这对于企业主来说可能已经足够了,但是,对我来说,这实际上被低估了。因为这种情况会立即出现两个问题:什么是有效的播放列表以及正确的顺序是什么。有一个这样的一般场景可能没问题,但我宁愿尝试给出一个更具体甚至多个的例子。例如:

Given a playlist with tasks A,B,C
  And task A depends on B
 When the user executes the list
 Then the tasks should be played in the order B,A,C