積読になってたやつです。
BDD = Behaviour Driven Development
この本は、JavaをベースにしたGherkin形式の書式を元に、BDDの具体的な説明を行っているものでした。Gherkin形式で書くことがBDDのGOALではないのですが、いくつか区分を分けた中で一番人に近いところの表現を使うからこれを選んでいるのだと思います。
Gherkin形式は、Given/When/Thenという形式で書かれる、外側から観測される内容を自然言語で記述して実施されるテストコードの形式です。コードと表現を分けた形式で残すやり方ですね。
以下、雑な感じですがメモ。多くが知ってたり経験している内容で、それらを読みながら照らし合わせていった感じ。
Visionから、実装コードへ
だいぶ前に アジャイルソフトウェア要求を5章まで読んで というポストを書いているのですが、この書籍ではそこら辺でよく使われている用語を使っています。
Vision => Goals => Capability => Features => Stories => Acceptance criteria => Example => Code
このような流れで、構想(Vision)から実コード(Code)に具体化され、動くものが創られます。BDDで観測するのは、主にFeature/Stories/Acceptance criteria/Exampleの箇所。つまり、どの粒度からみた振る舞いでテストコードを記述し、実装を確認するか、ということ。この落とし込みには、impact mapなんかを参考にしたりもします。
impact mapは、 Why(なんのために) => Who(誰を対象に) => What(何を) => How(どんな方法で) とだんだんと Business Goals => Stakeholders => Capability => Features と具体化していく流れを図示したものです。これにより、最終的なゴールと、実装が繋がってシステムを把握しやすくなったりします。
ここからさらに、
Capability => Feature => User stories => Examples
というように落としこまれていきます。それぞれは、ざっくりと以下のよう。
- Capability、ユーザが何ができるようになるか?を示す。例えば、ユーザがxxxのサービスを享受できること、とか。
- Featureはソフトウェアの機能として、Capabilityを実現するために提供する機能を示す。例えば、xxxのサービスを享受するためには特殊な権限になる必要がるので、”ログイン機能”とか。
- User Storyは、組織としてFeatureを達成するために何が必要なのか?をユーザの行動として記すもの。例えば、メールアドレスとパスワードでログインできるとか。
- Exampleは、より具体的な、実装にそくする例。例えば、ユーザは “メールアドレスをxxxに入力し、パスワードをyyyに入力して、ログインボタンを押すとzzzになる。” とか。そこで、メールアドレスが正しい場合と不正な場合を列挙したりとか。そういうより具体的な例。いわゆる、実装の条件分岐レベルまでを表現した内容。Specification by Exampleとか言われるのはこの粒度ですかね。
この中で、例えば入力文字制限などの、機能的な制限もストーリーに加わっていきます。Agileの書籍とかでも見ますが、この中で非機能要件もストーリーに加わってきます。ということは、この表現は機能的要件に限らない、ということですね。
Gherkin形式では、これらを例えば
Given When Then
といった表現で表現していきます。それらに書かれたテストを受け入れとして、TDDのような開発サイクルを回していくことがBDDに繋がってきます。
BDDにも粒度があり、Low Level Specificatonと呼ばれる、unit testとして言われるような領域における領域もあります。Executable specificationsと呼ばれる、UIやIntegration Levelで実施される領域もあります。そのレベルのテストコードとその結果は、そのままExampleに一番近いLive Documentとなるconcrete scenariosとして扱われたりします。後者はよくGherkin形式で残ります。前者は、xUnitやSpec形式が多いでしょうか。
これらの説明以外は、実例が詳しく書かれてたので気になる方は読んでみると良いと思います。Java開発者であれば、全般的に読んでも十分元が取れるとお思います。他の言語の人でも、Gherkin形式を学ぶことができるので、価値はあると思います。
本書では、具体例や図も使いわかりやすく書かれているので、文字だけのメモよりも断然オススメです
そういえば、Elixirでもwhite-breadと呼ばれるライブラリがありますね。マクロで色々書かれてて、参考になります 🙂
s/vison/vision/g でしょうか?
はい。ありがとうございます。修正しました。