背景
我正在尝试帮助我的团队组织一个新的移动应用程序项目。我们选择遵循BDD(另请参见BDD 定义)以获取简单的英语需求,这些需求形成利益相关者和开发人员之间针对每个单独用户故事的合同。
我们使用验收测试来记录每个用户故事的需求。验收测试是在 sprint 计划之前编写的。开发人员在 sprint 计划期间改进和添加测试。
我们将Acceptance Criteria定义为规则列表(例如:输入验证、默认值等),将Acceptance Tests定义为 Cucumber 场景列表。我们计划使用Calabash进行移动测试。
我觉得验收标准/测试是更灵活的,因此是更正式的需求文档的更好解决方案。
我觉得我找到了一个有效的解决方案,但我想了解其他人如何收集需求和编写验收测试。
问题
Cucumber 社区中存在关于命令式与声明式测试步骤的争论。我倾向于命令式,因为开发人员必须知道可交付的用户故事是什么样的。
我不觉得 UI 耦合又名脆弱测试是一个问题。有一些方法可以将 UI 与测试分离(例如:页面对象)。我也不觉得有详细的步骤会让非技术利益相关者难以理解(除非他们不知道如何使用网络浏览器或移动设备,但这是一个单独的问题)。
我可能盗用了“验收测试”这个词。在我的使用中,验收测试与单元测试不在同一范围内。我将验收测试视为高级集成测试。
这个例子
- 作为客人
- 我要登录
- 访问应用程序功能
命令式测试
- 场景:有效登录
- 鉴于我在“登录”屏幕上
- 当我在“电子邮件”中输入“email@domain.com”时
- 我在“密码”中输入“密码1”
- 然后我点击“登录”
- 然后我看到“登录成功”
声明式测试
- 场景:有效登录
- 鉴于我有一个有效的帐户
- 然后我可以登录
这两者都可以涵盖相同的功能,而后者更短,但它并没有说明我是否可以使用用户名、电子邮件或 facebook/twitter/google/etc 帐户登录。仅仅编写解决方案是不够的
问题
您如何通过声明性步骤捕获功能的需求?