【发布时间】:2018-01-24 01:50:05
【问题描述】:
背景
我正在努力帮助我的团队组织一个新的移动应用项目。我们选择关注BDD(另请参阅BDD definition)以获取简单的英语要求,从而形成利益相关者和开发人员之间针对每个用户故事的合同。
我们使用验收测试来记录每个用户故事的要求。验收测试是在 sprint 计划之前编写的。开发人员在 sprint 计划期间改进和添加测试。
我们将 Acceptance Criteria 定义为规则列表(例如:输入验证、默认值等),将 Acceptance Tests 定义为 Cucumber 场景列表。我们计划使用Calabash 进行移动测试。
我觉得验收标准/测试对更正式的需求文档来说更灵活,因此是更好的解决方案。
我觉得我找到了一个有效的解决方案,但我想了解其他人是如何收集需求和编写验收测试的。
问题
Cucumber 社区中存在imperative 与declarative 测试步骤的争论。我倾向于命令式,因为开发人员必须知道可交付的用户故事是什么样的。
我不觉得 UI 耦合又名脆弱测试是一个问题。有一些方法可以将 UI 与测试分离(例如:page objects)。我也不认为有详细的步骤会让非技术利益相关者难以理解(除非他们不知道如何使用网络浏览器或移动设备,但这是一个单独的问题)。
我可能盗用了“Acceptance Test”这个词。在我的使用中,验收测试与单元测试不在同一范围内。我将验收测试视为高级别的integration test。
示例
- 作为客人
- 我要登录
- 访问应用功能
命令式测试
- 场景:有效登录
- 鉴于我在“登录”屏幕上
- 当我在“电子邮件”中输入“email@domain.com”时
- 我在“密码”中输入“密码1”
- 然后我点击“登录”
- 然后我看到“登录成功”
声明式测试
- 场景:有效登录
- 假设我有一个有效的帐户
- 然后我就可以登录了
这两者可以涵盖相同的功能,而后者更短,但它并没有说明我是否可以使用用户名、电子邮件或 facebook/twitter/google/etc 帐户登录。仅仅编写解决方案是不够的
问题
您如何通过声明性步骤捕获功能的需求?
【问题讨论】:
-
Dan North(BDD 的创建者)对此事有一些很好的想法:dannorth.net/2011/01/31/whose-domain-is-it-anyway。请记住,一个场景应该只针对两个领域:该功能的用户和将要实现该功能的开发人员。该方案应向两个域阐明将如何发生(例如:“用户使用电子邮件和密码登录”,而不是“用户使用用户名和密码登录”等)
-
blog.cyrusinnovation.com/2013/04/… 表示,当利益相关者关心给定场景的用户体验时,命令式是合适的。通过声明性来追求简洁是有意义的,而在需要时用命令式来明确。
-
这个问题似乎是题外话,因为它是关于项目规划的。我认为应该迁移到programmers.stackexchange.com。
-
我不认为这是题外话,因为问题是关于命令式与声明式 BDD 测试,而不是关于项目规划。可能值得重命名问题标题?
标签: cucumber bdd calabash acceptance-testing