BDD实际上是非程序员可写的吗?


24

行为驱动的开发及其标志性的“ Given-When-Then”场景语法最近被大肆宣传,因为它有可能用作软件功能评估的边界对象

我绝对同意,Gherkin或您喜欢的任何功能定义脚本都是商业可读的 DSL,并且已经提供了这样的价值。

但是,我不同意它是非程序员可写的(就像Martin Fowler一样)。

有人对非程序员编写的场景,然后由开发人员提供的场景有说明吗?

如果确实对缺乏可写性达成了共识,那么您是否会看到一种工具的问题,该工具可以从实际测试中生成业务可读的场景,而不是场景开始并对其进行检测。

更新:关于“场景生成器”工具,它当然不会神奇地猜测业务语言;)但是,就像我们当前使用正则表达式匹配器以自顶向下的方法(在抽象维度上)创建测试一样,我们可以使用字符串构建器以自下而上的方式创建方案。

“仅给出想法”示例:

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…

即使在计算机已经能够为计算机编写代码之后,人类仍需要很长时间才能以其他人能够以准确的方式来阅读通用语言。

具有讽刺意味的是,JBehave 1(第一个BDD工具)通过生成业务可读的场景开始。直到黄瓜,我们才解析英语。我认为JBehave 1确实有助于提醒人们他们必须先谈论他们……
Lunivore 2013年

Answers:


20

我已经看过了。结局不好。

由于这个确切的原因,我认为黄瓜是繁琐的(<-lol:D)抽象。非技术人员自己很难写作;对于技术人员来说太冗长。

非技术人员只是没有学会像程序员一样思考。我们有幸了解,分解,重新建立抽象知识,并且仍然能够成功摆脱歧义。那就是我们要付的钱。

如果确实对缺乏可写性达成了共识,那么您是否会看到一种工具的问题,该工具可以从实际测试中生成业务可读的场景,而不是从场景开始并对其进行检测。

工具本身将无法生成它们。计算机对业务领域一无所知。最后,程序员将负责绘制无论如何都需要生成的内容,即使那样,对于最终用户来说,这些方案可能也太冗长/晦涩难懂。


20
Non technical people just haven't learned to think like programmers. 真相。在过去的20年中,对同一概念进行了大肆宣传和重新发明,并且几乎总是以不良的结果告终。企业喜欢获得软件的概念而不必付那些贪婪的抽水软件开发者的钱,但是他们忘记了软件开发中最困难的部分通常是比业务人员本身更深刻,更复杂地了解业务规则。
maple_shaft

2
“没有技术人员没有学会像程序员那样思考。”是的,能够分解问题并以指定的原子逻辑术语表达问题的能力可能使一个程序员/分析师成为可能。看起来像英语的小黄瓜让任何人都可以使用的想法在我看来真是天真。感谢您确认:) Computer knows nothing about business domain.当然。我没有说清楚我的想法,对此表示遗憾。我将信息添加到问题中。
MattiSG 2012年

8
@maple_shaft:过去20年?尝试过去60年。围绕COBOL的早期炒作是,商人可以编写它,而无需程序员。当这种情况没有发生时,人们想到了很多他们所谓的第四代语言,它们应该做同样的事情。
David Thornley 2012年

11

在客户编写规格文档方面的部分困难在于,客户通常不知道如何将客户想要的东西翻译成实际描述客户需求的语言。尽管客户可能会说他们希望某种行为存在于系统中,但他们通常并不关心细节,直到他们看到并使用并体验了软件后,客户感觉与他们的行为并不完全匹配。需要。

当客户描述业务流程时,他们通常会遗漏许多相关信息。通常,此信息与有关过程的事情有关,这些过程通常在客户的特定领域内被理解,因此被认为是理所当然的,并且通常不会传递给程序员。在其他时候,客户实际上并不知道如何处理系统中的所有边界条件,因此正在寻求程序员的指导。有时,这只是可用性的一个简单案例,客户认为他们希望某件事以一种方式起作用,但是后来当事情变得更加清晰时,他们改变了主意。

好的,足够“程序员的客户关系101”。问题是让客户使用商业可读的DSL来定义如何定义规范是否仍然有价值。我相信,在指导下,答案是一个暂定的“是”,我说暂定的,因为想到的下一个问题是,当您可以让程序员更轻松地定义一个将要为客户提供一种简单而丰富的语言来定义系统如何​​工作?

当您为客户提供一种描述他们希望系统如何工作的语言时,您将最终得到如下语句:

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

这种类型的陈述最终以非常清晰的方式描述了需求,提供了客户基本上希望系统承担的总体形状,或者另一种查看方式是客户在描述系统是什么。如果您希望让客户进一步考虑问题,则可以要求他们使用一些类似于以下内容的语句来描述功能必须遵守的规则:

"Given 'some system state', When 'some action occurs', Then expect 'some result'

同样很清楚的说明,这段时间关于如何系统应该表现良好。事实是,这并不能代替软件开发人员来填补所有空白,并挑逗客户可能只是外围了解的更多细节。尽管可以通过程序员“培训”客户以一种友好的,友好的格式描述功能和行为,但是客户实际上并不会掌握生成有意义的测试用例或提供实现的技能或知识。码。我认为这是OP提到的Martin Fowler文章的重点。因此,是的,软件本身不能由客户编写,但是软件的说明肯定可以(并且IMHO应该)由客户编写。对于它的价值,我没有读过Fowler的文章说客户不应

我觉得我们的程序员有时可能会忘记,我们的客户在理解业务和业务流程方面通常非常聪明,当然比我们做得更好。当他们没有程序员告诉他们如何构建软件系统时,客户通常会采用其他(可能效率较低)的方法来解决其特定的业务管理问题。我的意思是指简单的数据库(认为Access)或电子表格,甚至是手写的分类帐,并具有定义良好的规则和程序来管理这些过程。许多客户所缺乏的并不是确定系统如何工作的方法,而是确定系统的构建方式,更重要的是,如何有效地向操作人员描述系统的行为规则。有技巧实际构建的系统。

如果确实对缺乏可写性达成了共识,那么您是否会看到一种工具的问题,该工具可以从实际测试中生成业务可读的场景,而不是从场景开始并对其进行检测。

我认为这是错误地解决问题的方法。如果该文档旨在以任何方式表示规范,我会看到一个从测试生成文档的工具存在很大问题。为了测试场景,您需要了解它,因此该场景必须已经存在,以便您都可以为它定义测试。如果您以BDD语法描述方案,那么您已经指定了方案,因此只能在事后对方案进行检测。另一方面,如果您有一个工具可以让客户以良好的编程友好型DSL描述系统,并且该工具可以用来生成用作测试套件的代码模板,那么我d表示这种工具将具有巨大的价值。它不会看到客户将程序员排除在方程式之外,并且它将帮助减少实现客户需求并以BDD方式生成测试编码的需求所需的工作量,并且可能使客户的需求更容易理解。但是,这不能代替拥有经验丰富的软件开发人员来帮助客户将客户的需求与客户的需求区分开。


“为了测试一个场景,您需要了解它,因此该场景必须已经存在,以便您都可以定义一个测试。”我同意。我要问的是,强制执行语言约束是否值得。我并不是说我们应该只编写测试;但我想知道我们是否不应该接受这样的事实,即业务描述将(而且可能应该)始终是简单,自由的形式描述。因此,我们将拥有纯粹的业务描述,并生成可读的方案,让人们来决定它们是否匹配;而不是假装我们使用实际的descs进行测试。
MattiSG 2012年

@MattiSG ...whether enforcing language constraints is worth anything。这是一个很好的问题。自由形式的描述对作者来说更具表达性和自然性,但是导致评论繁琐,需要剖析才能得出有用的说明。通过定义用于编写需求和规范的正式“规则”(又称DSL),您将拥有客户和程序员都能理解的通用语言,从而减少了误解。如果您对说明的理解正确,则可以将其逐字用作测试模板。因此,不需要复杂的工具来“生成”任何东西。
S.Robins 2012年

@MattiSG FWIW,使用DSL和BDD是我自己使用的系统。需求被定义为Entity-Feature-Benefit语句,然后是一个规范,该规范使用AAA(即,给定的时间-然后-时间)语句扩展了初始的需求语句...本质上是方案语句。尝试对自由文本进行解码的困难在于,没有DSL,您没有一种简单的方法来定义可以生成有意义的收集方案的算法。我的观点是,以测试为起点来生成场景是一种倒退。
S.Robins 2012年

5

我见过开发人员编写方案。测试人员编写方案,甚至产品所有者编写方案。我还进行了专门设计来提出方案的对话-“给出<其他上下文>,那么什么时候会发生?” -并写下企业使用的字眼。

我获得的最好结果是,与产品负责人在办公室时进行了交谈,将其捕获到Wiki上,然后将其发送给他,以便他可以更正并添加更多内容。他找到了我们谈话中错过的一对。真是震撼。

我所见过的最糟糕的情况是,开发人员自己写的却没有与企业进行任何对话。我可以告诉他们,因为他们使用了“当我执行搜索时”或“当我提交日期为今天+ 3的表单时”之类的术语。它们通常不是很有趣的场景,它们太多了,细节水平太低了,因此完全无法维护。商家也不会阅读这些内容。

更好地专注于IMO的对话。我已经看到有几个团队现在已经这样做了几个月,无论自动化程度如何,其质量都有了很大的提高。几周后,一个团队设法使自动化在非常困难的环境中工作,这让测试人员感到非常高兴!但是,实际上,只要团队进行对话并使用场景来绘制其他场景,那么写下这些场景并不重要。


+1通讯确实是关键,方案的确确实需要以我们业务人员的术语为依据,因此与OP的问题一致,如果我们创建DSL,则确实需要能够更紧密地匹配客户要说的话,而不是程序员认为客户应该说的话。
S.Robins 2012年

0

我的经验是,最好让BA(业务分析师)编写GWT(Given-When-Then)(使用SpecFlow的经验)。BA可以将客户需求转换为GWT,企业可以阅读。客户了解系统,但他们没有技术思维以我们可以使用的方式编写需求。

理想情况下,广管局会写一些GWT,我会做一些修改,广管局会审查/修改重复,直到广管局和企业对覆盖范围充满信心。实际上,广管局会给我一份草稿,我会整理并进行工作。该公司耸耸肩说,肯定会怀疑为什么它没有覆盖没人想到的某些领域。


您能否说明GWT对您意味着什么?:)
MattiSG'6

@MattiSG:猜猜它是给定的,然后(请参阅OP)。
sleske 2012年

@MattiSG-更新了帖子的好捕获。
SoylentGray 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.