Behavior-driven-development-bdd-specifications-by-example
BDD-例による仕様
「例による仕様」の著者であるGojko Adzicによると、例による仕様は、適切な製品が効率的に提供されるようにソフトウェア製品の変更を促進する一連のプロセスパターンです。
Example by Specificationは、抽象的なステートメントの代わりに現実的な例を使用して要件をキャプチャして説明することに基づいて、ソフトウェア製品の要件とビジネス指向の機能テストを定義するための共同アプローチです。
例による仕様-概要
Example by Specificationの目的は、優先順位付けされた検証可能なビジネス要件の開発と提供に焦点を当てることです。 Example by Specificationの概念自体は比較的新しいものですが、それは単に既存のプラクティスを言い換えたものです。
それは、ユビキタス言語として知られている非常に具体的で簡潔な語彙をサポートしています-
- 実行可能要件を有効にします。
- チームの全員が使用します。
- 機能横断型チームによって作成されます。
- 全員の理解を獲得します。
Example by Specificationは、ビジネスドメインを反映する自動テストを構築するための直接入力として使用できます。 したがって、例による仕様の焦点は、適切な製品を構築し、製品を適切に構築することにあります。
例による仕様の目的
Example by Specificationの主な目的は、適切な製品を構築することです。 それは共有された理解に焦点を合わせており、したがって、真実の単一のソースを確立しています。 受入基準の自動化が可能になるため、欠陥検出ではなく欠陥防止に重点が置かれます。 また、欠陥を早期に発見するために、テストを早期に促進します。
SbEの使用
例による仕様は、ビジネス価値を説明する予想されるシステムの動作を示すために使用されます。 イラストは、具体的かつ実際の例を使用しています。 これらの例は、実行可能な要件を作成するために使用されます-
- 翻訳なしでテスト可能。
- ライブドキュメントでキャプチャされます。
以下は、特定の仕様を説明するために例を使用する理由です-
- 彼らは理解しやすいです。
- 彼らは誤解しにくいです。
SbEの利点
Example by Specificationを使用する利点は次のとおりです-
- 品質の向上
- 無駄の削減
- 生産欠陥のリスクを低減
- 集中した努力
- 変更をより安全に行うことができます
- ビジネスへの関与の改善
SbEのアプリケーション
例による指定は、アプリケーションを見つけます-
- 複雑なビジネスまたは複雑な組織。
- 純粋に技術的な問題ではうまく機能しません。
- UIに焦点を当てたソフトウェア製品ではうまく機能しません。
- レガシーシステムにも適用できます。
SbEおよび受け入れテスト
受け入れテストの観点から例による仕様の利点は-
- 単一の図が、詳細な要件とテストの両方に使用されます
- プロジェクトの進捗状況は、受け入れテストの観点からです-
- 各テストでは、動作をテストします。
- テストは、動作のために合格するか、そうでないかのいずれかです。
- テストに合格すると、特定の動作が完了したことを表します。
- 100の動作を完了する必要があるプロジェクトの60の動作が完了している場合、60%が完了しています。
- テスターは欠陥修正から欠陥防止に切り替え、ソリューションの設計に貢献します。
- 自動化により、ソリューションに対する要件変更の影響を即座に理解できます。
例による仕様-さまざまな役割にとっての意味
Example by Specificationの目的は、ビジネス価値を提供するためにプロジェクト全体の顧客を含むチームの全員のコラボレーションを促進することです。 わかりやすくするために誰もが同じ語彙を使用しています。
Role | Use of SbE |
---|---|
Business Analyst |
|
Developer |
|
Tester |
|
Everyone |
|
SbE –プロセスパターンのセット
この章の冒頭で見たように、仕様例は、ソフトウェア製品の変更を促進して適切な製品が効率的に提供されるようにする一連のプロセスパターンとして定義されます。
プロセスパターンは次のとおりです-
- 共同仕様
- 例を使用して仕様を説明する
- 仕様の改良
- サンプルの自動化
- 頻繁に検証する
- リビングドキュメンテーション
共同仕様
共同仕様の目的は次のとおりです-
- チームでさまざまな役割を果たして、共通の理解と語彙を共有します。
- 誰もがプロジェクトに参加して、機能に関するさまざまな視点を提供できるようにします。
- 共有されたコミュニケーションと機能の所有権を確保します。
これらの目標は、Three Amigosミーティングとしても知られる仕様ワークショップで満たされます。 Three AmigosはBA、QA、開発者です。 プロジェクトには他の役割もありますが、これら3つの役割は、定義から機能の提供まで責任と説明責任を果たします。
会議中-
- ビジネスアナリスト(BA)は、新機能の要件とテストを提示します。
- 3つのAmigo(BA、開発者、およびQA)が新機能について説明し、仕様を確認します。
- QAと開発者は、不足している要件も特定します。
- 三アミーゴ
- ユビキタス言語を使用して共有モデルを利用します。
- ドメインボキャブラリーを使用します(必要に応じて用語集が保持されます)。
- 違いと矛盾を探します。
- この時点で実装の詳細にジャンプしないでください。
- 機能が十分に指定されているかどうかについて合意に達します。
- 要件とテストの所有権を共有することで、品質仕様が促進されます
- 要件はシナリオとして提示され、明示的で明確な要件を提供します。 シナリオは、ユーザーの観点から見たシステムの動作の例です。
サンプルを使用した仕様の説明
シナリオは、テスト可能な仕様を作成するためのGiven-When-Then構造を使用して指定されます-
指定 <何らかの前提条件>
および *<追加の前提条件> オプション*
いつ <アクション/トリガーが発生>
その後 <何らかの投稿条件>
および *<追加の投稿条件> オプション*
この仕様は、システムの動作の一例です。 また、システムの受け入れ基準も表します。
チームが例について話し合い、例が機能の予想される動作をカバーするという合意が得られるまで、フィードバックが組み込まれます。 これにより、テストのカバレッジが良好になります。
仕様の改良
仕様を改良するには、
- 例を正確に記述してください。 例が複雑になる場合は、より単純な例に分割します。
- ビジネスの観点に焦点を当て、技術的な詳細を避けます。
- 正と負の両方の条件を考慮してください。
- ドメイン固有の語彙を順守します。
- 例について顧客と話し合う。
- これを達成するために会話を選択してください。
- 顧客が興味を持っている例のみを検討してください。 これにより、必要なコードの生成のみが可能になり、必要でない可能性のあるすべての組み合わせをカバーしなくなります
- シナリオを確実にパスするには、そのシナリオのすべてのテストケースがパスする必要があります。 したがって、仕様を拡張してテスト可能にします。 テストケースには、さまざまな範囲とデータ値(境界およびコーナーケース)、およびデータの変更をもたらすさまざまなビジネスルールを含めることができます。
- 複雑な計算、データ操作/変換などの追加のビジネスルールを指定します。
- 機能しないシナリオを含める(例: 例、仕様としてのパフォーマンス、負荷、使いやすさなど)
自動化の例
自動化層は非常にシンプルに保つ必要があります。テスト対象のシステムに仕様を配線するだけです。 同じためのツールを使用できます。
ドメイン固有言語(DSL)を使用してテストの自動化を実行し、入力と出力の間の明確な接続を示します。 スクリプトではなく仕様に焦点を当てます。 テストが正確で、理解しやすく、テスト可能であることを確認してください。
頻繁に検証する
すべての変更(追加/変更)で開発パイプラインに検証例を含める。 製品の品質を確保するために採用できる(および採用すべき)多くの手法とツールがあります。 それらは、 Test Early、Test Well 、および Test Often の3つの主要な原則を中心に展開します。
テストを頻繁に実行して、脆弱なリンクを特定できるようにします。 動作を表す例は進行状況を追跡するのに役立ち、動作は対応するテストに合格した後にのみ完了すると言われています。
リビングドキュメンテーション
仕様はできるだけシンプルで短くしてください。 仕様を整理し、作業の進行に合わせて進化させます。 チーム全員がドキュメントにアクセスできるようにします。
サンプルプロセスステップによる仕様
この図は、例による仕様のプロセスステップを示しています。
アンチパターン
アンチパターンは、ソフトウェア開発における特定のパターンであり、不適切なプログラミング手法と見なされます。 一般的な問題に対する一般的なアプローチであり、形式化され、一般的に優れた開発プラクティスと見なされている設計パターンとは対照的に、アンチパターンは反対であり、望ましくありません
アンチパターンはさまざまな問題を引き起こします。
Anti-pattern | Problems |
---|---|
No collaboration |
|
Unaware when code is finished |
|
Too detailed or too UI centric examples |
|
Underestimating effort required |
|
問題の解決-品質
アンチパターンを監視することで品質を確保できます。 アンチパターンによって作成される問題を最小限に抑えるために、次のことを行う必要があります-
- 例を使用して指定してください。
- サンプルをクリーンアップして改善します。
- 例を満たすコードを書く
- サンプルを自動化してデプロイします。
- すべてのユーザーストーリーに対してこのアプローチを繰り返します。
アンチパターンに起因する問題を解決するには、遵守することを意味します-
- コラボレーション。
- 何に焦点を当てます。
- ビジネスに焦点を当てています。
- 準備して。
上記のそれぞれの意味を理解しましょう。
コラボレーション
コラボレーションで-
- ビジネスマン、開発者、テスターはそれぞれの観点から意見を出します。
- 自動化された例は、チームが正しいものを構築したことを証明しています。
- このプロセスは、テスト自体よりも価値があります。
何に焦点を当てる
「何」という質問に集中する必要があります。「何」に焦点を合わせながら、
- 考えられるすべてのケースをカバーしようとしないでください。
- 異なる種類のテストを使用することを忘れないでください。
- 例をできるだけシンプルにしてください。
- 例は、システムのユーザーが簡単に理解できるものでなければなりません。
- ワークショップでツールが重要な役割を果たすべきではありません。
ビジネスに焦点を当てる
ビジネスに集中するには-
- 仕様をビジネス目的で維持します。
- 仕様の作成とレビューにビジネスを含めます。
- オートメーションレイヤーのすべての詳細を非表示にします。
準備して
次の準備をしてください-
- チームのプラクティスが変更されても、メリットはすぐには明らかになりません。
- SbEの導入は困難です。
- 時間と投資が必要です。
- 自動テストは無料ではありません。
道具
例による指定にはツールの使用は必須ではありませんが、実際にはいくつかのツールが利用可能です。 ツールを使用しなくても、例による仕様に従って成功する場合があります。
次のツールは、例による仕様をサポートしています-
- きゅうり
- SpecFlow
- Fitnesse
- Jbehave
- 一致
- ビハット
- ジャスミン
- 楽しむ
- Speclog