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ツール)は、ビジネスで読み取り可能なシナリオを生成することから始まりました。Cucumberまで英語を解析しませんでした。JBehave 1は実際に人々に最初に彼らについて話さなければならなかったことを思い出させるのに役立つと思います
...-Lunivore

回答:


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

8
@maple_shaft:過去20年?過去60年を試してください。COBOLに関する初期の誇大宣伝のいくつかは、ビジネスマンがそれを書くことができ、プログラマーの必要性を排除できることでした。それが実現しなかったとき、人々は同じことをするはずの第四世代言語と呼ばれるものの束を思いついた。
デビッドソーンリー

11

顧客が仕様書を書くという点で困難なことの一部は、顧客が実際に顧客が必要とするものを説明する言語に翻訳する方法を顧客が知らないことです。顧客はシステムに特定の動作が存在することを望んでいると言うかもしれませんが、一般的に、顧客が彼らと完全に一致しないと感じる方法で動作するソフトウェアを見て使用し、経験するまで、特徴にあまり関心がありませんニーズ。

顧客がビジネスプロセスを説明するとき、多くの場合、多くの関連情報が省略されます。多くの場合、この情報は、顧客の特定のドメイン内で一般的に理解されているプロセスに関するものに関連しているため、当然のことと見なされ、プログラマーに伝えられないことがよくあります。それ以外の場合、顧客はシステム内のすべての境界条件に対処する方法を実際に知らず、ガイダンスをプログラマに求めています。場合によっては、使いやすさの単純なケースであり、顧客は何かを何らかの方法で機能させたいと考えていますが、後で物事が異なるように動作することが明らかになると気が変わります。

わかりました、「プログラマーのための顧客関係101」の十分。問題は、顧客がビジネスで読み取り可能なDSLを使用して仕様の定義方法を定義することに価値があるかどうかです。ガイダンスでは、答えは暫定的な「はい」であり、次の質問が思い浮かぶので、プログラマーにもっと簡単に定義させることができるのに、なぜ顧客に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の記事のポイントだと思いました。そのため、ソフトウェア自体は顧客によって書き込み可能ではありませんが、ソフトウェアの説明は顧客によって書かれることができます-そして私見すべきです-。それが価値があることについては、私は顧客がすべきではないと言っているとしてファウラーの記事を読みませんでした

プログラマーは、ビジネスやビジネスプロセスの理解という点で、一般的に顧客が一般的に非常に賢いことを忘れてしまうことがあると感じています。ソフトウェアシステムの構築方法を教えてくれるプログラマーがいない場合、顧客は一般に、特定のビジネス管理の問題を解決するために、他の(おそらく効率の低い)手段に頼ります。これは、単純なデータベース(Accessを考える)またはスプレッドシート、あるいは手書きの台帳でさえも、それらのプロセスを管理するための明確に定義されたルールと手順を意味します。多くの顧客に欠けているのは、システムがどのように機能する必要があるを決定する手段ではなく、むしろそれをどのように構築すべきを決定する手段であり、さらに重要なことに、システムの行動ルールをどのように効率的に記述するか実際にシステムを構築するためのスキルを持っています。

書き込み可能性の欠如について実際にコンセンサスがある場合、ツールで問題が発生し、シナリオを開始してそれらを計測する代わりに、実際のテストからビジネスで読み取り可能なシナリオを生成しますか?

これは問題を間違った方向で見ていると思います。その文書が何らかの形で仕様を表すことを意図している場合、テストから文書を生成するツールに大きな問題が発生するでしょう。シナリオをテストするには、シナリオを理解する必要があります。したがって、両方のシナリオでテストを定義するには、シナリオがすでに存在している必要があります。BDD構文でシナリオを説明する場合、すでに指定しているため、事後のシナリオのみをインスツルメントできます。一方、顧客がシステムをプログラミングに適したDSLで記述できるツールがあり、そのツールを使用してテストスイートとして使用されるコードテンプレートを生成できる場合、私はdそのようなツールには大きな価値があると言う。顧客がプログラマーを方程式から外すのを見ることはなく、顧客の希望を取り、テストでエンコードされた要件をBDD形式で生成するために必要な労力を削減するのに役立ち、おそらく顧客の希望をより簡単に理解できるようになります。ただし、顧客が顧客のニーズと顧客のニーズを区別できるように、経験豊富なソフトウェア開発者を手に入れるのに代わるものではありません。


「シナリオをテストするには、シナリオを理解する必要があります。したがって、シナリオをテスト用に定義するには、シナリオが既に存在している必要があります。」私は同意します。私が疑問視しているのは、言語の制約を強制することは何の価値があるかということです。テストだけを書くべきだとは言いません。しかし、ビジネスの説明は常に単純な自由形式の説明であるという事実を受け入れるべきではないのではないかと思います。したがって、純粋なビジネスディスクを作成し、読み取り可能なシナリオを生成して、人間が一致するかどうかを判断できるようにしました。ふりをするのではなく、実際の説明を使用してテストします。
MattiSG

@MattiSG ...whether enforcing language constraints is worth anything。これはいい質問です。自由形式の記述は、作家にとってより表現力豊かで自然ですが、有用な仕様を導き出すために解剖を必要とするとりとめのない解説になります。要件と仕様を記述するための正式な「ルール」(別名DSL)を定義することにより、顧客とプログラマーの両方が理解できる共通言語が得られ、誤解が制限されます。説明が正しい場合は、テストのテンプレートとしてそのまま使用できます。したがって、何かを「生成」するための複雑なツールは必要ありません。
S.Robins

DSLとBDDを使用する@MattiSG FWIWは、私自身が使用するシステムです。要件はEntity-Feature-Benefitステートメントとして定義され、AAA(つまり:Given-When-Then)ステートメントを使用して初期要件ステートメントを拡張する仕様が続きます。基本的にはシナリオステートメントです。フリーテキストをデコードしようとすると、DSLがないと、意味のある収集シナリオを生成できるアルゴリズムを定義する簡単な手段がないという難点があります。私のポイントは、シナリオを生成するための出発点としてテストを使用することは一種の逆行であるということでした。
S.Robins

5

開発者がシナリオを書くのを見てきました。テスターはシナリオを作成し、製品所有者もシナリオを作成します。また、シナリオを明らかにするために明示的に設計された会話もありました-「<この他のコンテキスト>が与えられたとき、何が起こるべきか?」-ビジネスが使用する言葉を書き留めます。

私がこれまで得た最高の結果は、彼がオフィスにいる間にプロダクトオーナーと会話をし、ウィキでそれらをキャプチャし、彼に訂正して追加できるように送信したことです。彼は私たちの会話で見逃していたカップルを見つけました。それは揺れました。

私が見た最悪のシナリオは、開発者がビジネスと会話することなく自分で書いたシナリオです。「検索を実行するとき」や「今日+ 3日の日付でフォームを送信するとき」などの用語を使用しているためわかります。通常、あまり興味深いシナリオではなく、あまりにも多くのシナリオがあり、詳細レベルが低すぎるため、完全に維持できません。ビジネスもこれらを読みません。

会話IMOに焦点を当てる方がずっと良い。自動化に関係なく、品質を大幅に改善して、数か月間これを行うチームがいくつかあります。あるチームは、数週間後に非常に困難な環境で自動化を機能させることに成功しました。これは、テスターの喜びです。しかし、実際には、チームが会話を交わし、シナリオを使用して他のシナリオを引き出している限り、誰がそれらを書き留めるのかは重要ではないと思います。


+1コミュニケーションは本当に重要であり、シナリオは本当にビジネスマンが私たちに任せるという意味である必要があります。プログラマーが顧客が言っているべきだと思うものではなく、顧客が言っていることに対して。
-S.ロビンズ

0

私の経験では、GWT(Given-When-Then)を書くのはBA(ビジネスアナリスト)に任せるのが最善です(SpecFlowを使用した経験)。BAは顧客の要件をGWTに変換し、企業はそれを読むことができます。顧客はシステムを理解していますが、技術者が私たちが使用できる方法で要件を書くことを考えていません。

理想的には、BAがGWTを作成し、いくつかの修正を行い、BAとビジネスがカバレッジに自信を持つまでBAがレビュー/修正を繰り返します。実際、学士号は私に大まかなドラフトを提供してくれます。ビジネスは、なぜそれが誰も考えもしなかったいくつかの領域をカバーしなかったのか疑問に思うと肩をすくめます。


GWTの意味を明示してください :)
MattiSG

@MattiSG:それはGiven-When-Thenのものだと思います(OPを参照)。
sleske

@MattiSG-投稿の良いキャッチを更新しました。
SoylentGray
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.