yodogawa 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.windsurf/templates/documentation-rules.md +143 -0
- package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
- package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
- package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
- package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
- package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
- package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
- package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
- package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
- package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
- package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
- package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
- package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
- package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
- package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
- package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
- package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
- package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
- package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
- package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
- package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
- package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
- package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
- package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
- package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
- package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
- package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
- package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
- package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
- package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
- package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
- package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
- package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
- package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
- package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
- package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
- package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
- package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
- package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
- package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
- package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
- package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
- package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
- package/.windsurf/workflows/x-CI-Setup.md +641 -0
- package/.windsurf/workflows/x-Code-Refactor.md +71 -0
- package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
- package/.windsurf/workflows/x-Component-Create.md +359 -0
- package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
- package/.windsurf/workflows/x-Database-Seed.md +300 -0
- package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
- package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
- package/.windsurf/workflows/x-Logging-Add.md +682 -0
- package/.windsurf/workflows/x-Migration-Create.md +354 -0
- package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
- package/.windsurf/workflows/x-Repository-Push.md +375 -0
- package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
- package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
- package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
- package/README.md +280 -0
- package/bin/cli.js +74 -0
- package/package.json +28 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# Gherkinシナリオ一覧
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
何を書くか: Gherkin形式で記述した振る舞いシナリオ(BDD)
|
|
5
|
+
|
|
6
|
+
目的:
|
|
7
|
+
- ユーザー視点での具体的な動作例を記述
|
|
8
|
+
- 開発者、QA、ステークホルダーの共通理解を構築
|
|
9
|
+
- 自動テストの基礎として活用(Cucumber、SpecFlow等)
|
|
10
|
+
- ドメインイベントやコマンドの発見(Event Stormingの入力)
|
|
11
|
+
|
|
12
|
+
BDD(Behavior-Driven Development)とは:
|
|
13
|
+
- Example First: 具体例から始める開発手法
|
|
14
|
+
- Given-When-Then形式で振る舞いを記述
|
|
15
|
+
- 実行可能なドキュメント(テストとして自動化可能)
|
|
16
|
+
- 非技術者も理解できる平易な言葉で記述
|
|
17
|
+
|
|
18
|
+
Gherkinとは:
|
|
19
|
+
- BDDのためのドメイン特化言語(DSL)
|
|
20
|
+
- Feature, Scenario, Given, When, Thenなどのキーワードで構成
|
|
21
|
+
- 人間が読みやすく、機械も解析可能
|
|
22
|
+
- Cucumber、SpecFlow、Behatなどのツールで実行可能
|
|
23
|
+
|
|
24
|
+
ドキュメント構成:
|
|
25
|
+
1. シナリオ一覧テーブル: 全シナリオの概要(検索性、トラッキング)
|
|
26
|
+
2. シナリオ詳細: Feature単位でGherkin形式で記述
|
|
27
|
+
|
|
28
|
+
記載のポイント:
|
|
29
|
+
- ユーザーストーリーから具体的なシナリオを抽出
|
|
30
|
+
- 1シナリオ = 1つの具体的な例
|
|
31
|
+
- ハッピーパス(正常系)から開始し、徐々にエッジケースを追加
|
|
32
|
+
- 宣言的スタイル(What)で記述、実装詳細(How)は避ける
|
|
33
|
+
|
|
34
|
+
更新頻度:
|
|
35
|
+
- ユーザーストーリー作成後に作成
|
|
36
|
+
- スプリント計画時に詳細化
|
|
37
|
+
- 実装完了後も Living Documentation として維持
|
|
38
|
+
-->
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## シナリオ一覧
|
|
43
|
+
|
|
44
|
+
<!--
|
|
45
|
+
すべてのシナリオの概要リスト
|
|
46
|
+
|
|
47
|
+
目的:
|
|
48
|
+
- シナリオの全体像を把握
|
|
49
|
+
- 機能別のシナリオ数を確認
|
|
50
|
+
- 優先度の管理
|
|
51
|
+
- 実装状況の追跡(オプション)
|
|
52
|
+
|
|
53
|
+
【シナリオID】
|
|
54
|
+
- 形式: SC-XXX(Scenario)
|
|
55
|
+
- 採番ルール: 連番、一意の識別子
|
|
56
|
+
- 用途: テスト自動化ツールとの紐付け、トレーサビリティ
|
|
57
|
+
- Gherkin内では @SC-XXX タグで参照
|
|
58
|
+
|
|
59
|
+
【機能】
|
|
60
|
+
- Featureに対応する機能名
|
|
61
|
+
- 同じFeature内のシナリオをグループ化
|
|
62
|
+
- 例: 「ユーザー登録」「注文処理」「検索機能」
|
|
63
|
+
|
|
64
|
+
【シナリオ名】
|
|
65
|
+
- シナリオの内容を簡潔に表現(5-10単語程度)
|
|
66
|
+
- ユーザーの視点で記述
|
|
67
|
+
- 例: 「有効なメールアドレスで登録成功」「在庫切れ商品の購入エラー」
|
|
68
|
+
|
|
69
|
+
【優先度】
|
|
70
|
+
- High: 必須シナリオ、リリース前に実装・テスト必須
|
|
71
|
+
- Medium: 重要だが緊急ではない
|
|
72
|
+
- Low: エッジケース、将来的に追加
|
|
73
|
+
|
|
74
|
+
【ステータス】(オプション - 追加する場合)
|
|
75
|
+
- Todo: 未実装
|
|
76
|
+
- In Progress: 実装中
|
|
77
|
+
- Done: 完了(テストパス)
|
|
78
|
+
- カラムを追加することで実装状況を追跡可能
|
|
79
|
+
-->
|
|
80
|
+
|
|
81
|
+
| シナリオID | 機能 | シナリオ名 | 優先度 |
|
|
82
|
+
|-----------|------|-----------|--------|
|
|
83
|
+
| <!-- 例: SC-001 --> | <!-- 例: ユーザー登録 --> | <!-- 例: 有効なメールアドレスでの登録成功 --> | <!-- 例: High --> |
|
|
84
|
+
| <!-- 例: SC-002 --> | <!-- 例: ユーザー登録 --> | <!-- 例: 無効なメールアドレスでの登録エラー --> | <!-- 例: High --> |
|
|
85
|
+
| <!-- 例: SC-003 --> | <!-- 例: ユーザー登録 --> | <!-- 例: 既存メールアドレスでの登録エラー --> | <!-- 例: Medium --> |
|
|
86
|
+
| <!-- 例: SC-004 --> | <!-- 例: 注文処理 --> | <!-- 例: 商品をカートに追加 --> | <!-- 例: High --> |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## シナリオ詳細
|
|
91
|
+
|
|
92
|
+
<!--
|
|
93
|
+
各FeatureをGherkin形式で記述
|
|
94
|
+
|
|
95
|
+
構成:
|
|
96
|
+
- Feature単位でセクション化(### Feature: 機能名)
|
|
97
|
+
- 各Feature内に複数のScenarioを含める
|
|
98
|
+
- @SC-XXXタグでシナリオIDを紐付ける
|
|
99
|
+
|
|
100
|
+
Gherkinの主要キーワード:
|
|
101
|
+
- Feature: 機能の説明
|
|
102
|
+
- Background: すべてのシナリオ共通の前提条件
|
|
103
|
+
- Scenario: 個別のシナリオ
|
|
104
|
+
- Scenario Outline: パラメータ化されたシナリオ(複数の例を実行)
|
|
105
|
+
- Given: 前提条件(システムの初期状態)
|
|
106
|
+
- When: アクション(ユーザーの操作やイベント)
|
|
107
|
+
- Then: 期待される結果(検証可能な結果)
|
|
108
|
+
- And/But: Given、When、Thenの追加ステップ
|
|
109
|
+
- Examples: Scenario Outlineで使用するデータテーブル
|
|
110
|
+
|
|
111
|
+
タグの活用:
|
|
112
|
+
- @SC-XXX: シナリオIDとの紐付け
|
|
113
|
+
- @smoke, @regression: テストカテゴリ
|
|
114
|
+
- @wip: 作業中(Work In Progress)
|
|
115
|
+
- @slow: 実行時間が長いテスト
|
|
116
|
+
- 複数タグを同時に使用可能
|
|
117
|
+
-->
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### Feature: [機能名 1]
|
|
122
|
+
|
|
123
|
+
<!--
|
|
124
|
+
Feature(フィーチャー)の記述
|
|
125
|
+
|
|
126
|
+
【構成】
|
|
127
|
+
Feature: [機能名]
|
|
128
|
+
[機能の説明 - 自由形式のテキスト]
|
|
129
|
+
|
|
130
|
+
As a [役割]
|
|
131
|
+
I want [機能]
|
|
132
|
+
So that [価値]
|
|
133
|
+
|
|
134
|
+
【記載内容】
|
|
135
|
+
- 機能の目的と価値を1-3文で説明
|
|
136
|
+
- ユーザーストーリー形式で記述(As a, I want, So that)
|
|
137
|
+
- 技術的詳細ではなく、ビジネス価値を記述
|
|
138
|
+
|
|
139
|
+
【Background(オプション)】
|
|
140
|
+
- すべてのシナリオで共通する前提条件
|
|
141
|
+
- 通常はGivenステップのみ
|
|
142
|
+
- 重複を排除し、シナリオを簡潔にする(DRY原則)
|
|
143
|
+
|
|
144
|
+
【Scenario】
|
|
145
|
+
- Given-When-Then構造で記述
|
|
146
|
+
- @SC-XXXタグでシナリオIDを紐付ける
|
|
147
|
+
- 1 Feature内に複数のScenarioを含める
|
|
148
|
+
|
|
149
|
+
【ベストプラクティス】
|
|
150
|
+
1. **宣言的スタイル**: UIの操作詳細ではなく、ユーザーの意図を記述
|
|
151
|
+
❌ When "登録"ボタンをクリックし、"OK"ボタンをクリックする
|
|
152
|
+
✅ When 登録を完了する
|
|
153
|
+
|
|
154
|
+
2. **1シナリオ1例**: 複数のケースは別シナリオまたはScenario Outlineで
|
|
155
|
+
|
|
156
|
+
3. **具体的な値**: 抽象的ではなく、具体的なデータを使用
|
|
157
|
+
❌ Then エラーが表示される
|
|
158
|
+
✅ Then "無効なメールアドレスです"というエラーが表示される
|
|
159
|
+
|
|
160
|
+
4. **実装から独立**: UIや技術が変わってもシナリオは変わらない
|
|
161
|
+
|
|
162
|
+
5. **ユーザー視点**: 開発者用語ではなく、ユーザーが理解できる言葉
|
|
163
|
+
|
|
164
|
+
【例】
|
|
165
|
+
Feature: ユーザー登録
|
|
166
|
+
新しいユーザーがアカウントを作成できる機能
|
|
167
|
+
|
|
168
|
+
As a 新規ユーザー
|
|
169
|
+
I want メールアドレスとパスワードでアカウントを登録したい
|
|
170
|
+
So that システムを利用できるようになる
|
|
171
|
+
|
|
172
|
+
Background:
|
|
173
|
+
Given システムが起動している
|
|
174
|
+
|
|
175
|
+
@SC-001 @smoke @happy-path
|
|
176
|
+
Scenario: 有効なメールアドレスでの登録成功
|
|
177
|
+
Given ユーザーが登録ページにいる
|
|
178
|
+
When 有効なメールアドレス "user@example.com" とパスワードで登録する
|
|
179
|
+
Then アカウントが作成される
|
|
180
|
+
And ウェルカムメールが送信される
|
|
181
|
+
And ダッシュボードにリダイレクトされる
|
|
182
|
+
|
|
183
|
+
@SC-002 @validation @error-handling
|
|
184
|
+
Scenario: 無効なメールアドレスでの登録エラー
|
|
185
|
+
Given ユーザーが登録ページにいる
|
|
186
|
+
When 無効なメールアドレス "invalid-email" で登録する
|
|
187
|
+
Then "無効なメールアドレスです"というエラーが表示される
|
|
188
|
+
And アカウントは作成されない
|
|
189
|
+
-->
|
|
190
|
+
|
|
191
|
+
```gherkin
|
|
192
|
+
@smoke @regression
|
|
193
|
+
Feature: [機能名]
|
|
194
|
+
[機能の説明]
|
|
195
|
+
|
|
196
|
+
As a [役割]
|
|
197
|
+
I want [機能]
|
|
198
|
+
So that [価値]
|
|
199
|
+
|
|
200
|
+
Background:
|
|
201
|
+
Given [すべてのシナリオ共通の前提条件]
|
|
202
|
+
And [追加の前提条件]
|
|
203
|
+
|
|
204
|
+
@SC-001 @happy-path
|
|
205
|
+
Scenario: [シナリオ名 1]
|
|
206
|
+
Given [前提条件]
|
|
207
|
+
When [ユーザーのアクション]
|
|
208
|
+
Then [期待される結果]
|
|
209
|
+
And [追加の検証]
|
|
210
|
+
|
|
211
|
+
@SC-002 @error-handling
|
|
212
|
+
Scenario: [シナリオ名 2]
|
|
213
|
+
Given [前提条件]
|
|
214
|
+
When [ユーザーのアクション]
|
|
215
|
+
Then [期待される結果]
|
|
216
|
+
|
|
217
|
+
@SC-003
|
|
218
|
+
Scenario Outline: [パラメータ化されたシナリオ名]
|
|
219
|
+
Given [前提条件 with <parameter>]
|
|
220
|
+
When [アクション with <parameter>]
|
|
221
|
+
Then [期待される結果 with <expected>]
|
|
222
|
+
|
|
223
|
+
Examples:
|
|
224
|
+
| parameter | expected |
|
|
225
|
+
| value1 | result1 |
|
|
226
|
+
| value2 | result2 |
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
### Feature: [機能名 2]
|
|
232
|
+
|
|
233
|
+
<!--
|
|
234
|
+
2つ目のFeature
|
|
235
|
+
|
|
236
|
+
【Scenario Outline(シナリオアウトライン)の使い方】
|
|
237
|
+
|
|
238
|
+
目的:
|
|
239
|
+
- 同じシナリオ構造で異なるデータを複数回実行
|
|
240
|
+
- データ駆動テストの実装
|
|
241
|
+
- 境界値テストやエッジケースの網羅
|
|
242
|
+
|
|
243
|
+
構成:
|
|
244
|
+
Scenario Outline: [シナリオテンプレート]
|
|
245
|
+
Given [前提条件 with <パラメータ>]
|
|
246
|
+
When [アクション with <パラメータ>]
|
|
247
|
+
Then [結果 with <パラメータ>]
|
|
248
|
+
|
|
249
|
+
Examples:
|
|
250
|
+
| パラメータ1 | パラメータ2 | 期待結果 |
|
|
251
|
+
| 値1 | 値2 | 結果1 |
|
|
252
|
+
| 値3 | 値4 | 結果2 |
|
|
253
|
+
|
|
254
|
+
使用タイミング:
|
|
255
|
+
- 入力バリデーションのテスト
|
|
256
|
+
- 複数の類似ケースの検証
|
|
257
|
+
- 正常値と異常値の組み合わせテスト
|
|
258
|
+
|
|
259
|
+
Examplesテーブル:
|
|
260
|
+
- 1行目: ヘッダー(パラメータ名)
|
|
261
|
+
- 2行目以降: 各行が1回の実行
|
|
262
|
+
- シナリオは行数分実行される
|
|
263
|
+
- <パラメータ名>でシナリオ内から参照
|
|
264
|
+
|
|
265
|
+
ベストプラクティス:
|
|
266
|
+
- パラメータ名は明確に(<input>より<email>)
|
|
267
|
+
- テーブルは読みやすく整列
|
|
268
|
+
- 複雑になりすぎる場合は別シナリオに分割
|
|
269
|
+
- 各行の意図をコメントで補足(オプション)
|
|
270
|
+
- 複数のExamplesブロックで意味的にグループ化
|
|
271
|
+
|
|
272
|
+
例:
|
|
273
|
+
@SC-005
|
|
274
|
+
Scenario Outline: メールアドレスのバリデーション
|
|
275
|
+
Given ユーザーが登録ページにいる
|
|
276
|
+
When メールアドレス "<email>" で登録する
|
|
277
|
+
Then "<result>" が表示される
|
|
278
|
+
|
|
279
|
+
Examples: 有効なメールアドレス
|
|
280
|
+
| email | result |
|
|
281
|
+
| user@example.com | 成功 |
|
|
282
|
+
| test+tag@domain.jp | 成功 |
|
|
283
|
+
|
|
284
|
+
Examples: 無効なメールアドレス
|
|
285
|
+
| email | result |
|
|
286
|
+
| invalid | メールアドレスが無効です |
|
|
287
|
+
| @example.com | メールアドレスが無効です |
|
|
288
|
+
| user@ | メールアドレスが無効です |
|
|
289
|
+
-->
|
|
290
|
+
|
|
291
|
+
```gherkin
|
|
292
|
+
Feature: [機能名 2]
|
|
293
|
+
[機能の説明]
|
|
294
|
+
|
|
295
|
+
As a [役割]
|
|
296
|
+
I want [機能]
|
|
297
|
+
So that [価値]
|
|
298
|
+
|
|
299
|
+
@SC-004
|
|
300
|
+
Scenario: [シナリオ名]
|
|
301
|
+
Given [前提条件]
|
|
302
|
+
And [追加の前提条件]
|
|
303
|
+
When [メインアクション]
|
|
304
|
+
Then [期待結果1]
|
|
305
|
+
And [期待結果2]
|
|
306
|
+
And [期待結果3]
|
|
307
|
+
But [対照的な結果]
|
|
308
|
+
|
|
309
|
+
@SC-005 @validation
|
|
310
|
+
Scenario Outline: [パラメータ化されたシナリオ名]
|
|
311
|
+
Given [前提条件 with <param>]
|
|
312
|
+
When [アクション with <param>]
|
|
313
|
+
Then [結果 with <expected>]
|
|
314
|
+
|
|
315
|
+
Examples: [正常系のケース]
|
|
316
|
+
| param | expected |
|
|
317
|
+
| value1 | result1 |
|
|
318
|
+
| value2 | result2 |
|
|
319
|
+
|
|
320
|
+
Examples: [異常系のケース]
|
|
321
|
+
| param | expected |
|
|
322
|
+
| value3 | error1 |
|
|
323
|
+
| value4 | error2 |
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## タグの活用
|
|
329
|
+
|
|
330
|
+
<!--
|
|
331
|
+
タグ(@tag)を使用したシナリオの分類と実行制御
|
|
332
|
+
|
|
333
|
+
【目的】
|
|
334
|
+
- シナリオのグループ化
|
|
335
|
+
- 選択的なテスト実行
|
|
336
|
+
- テストスイートの管理
|
|
337
|
+
- CI/CDでの柔軟な実行制御
|
|
338
|
+
|
|
339
|
+
【よく使われるタグ】
|
|
340
|
+
@smoke: スモークテスト(重要な基本機能、最優先で実行)
|
|
341
|
+
@regression: リグレッションテスト(すべての既存機能)
|
|
342
|
+
@slow: 実行時間が長いテスト(通常のCIでスキップ)
|
|
343
|
+
@wip: 作業中(Work In Progress、開発中のシナリオ)
|
|
344
|
+
@bug-XXX: バグ修正に関連(Issue番号と紐付け)
|
|
345
|
+
@integration: 統合テスト(外部システムと連携)
|
|
346
|
+
@ui: UI関連テスト
|
|
347
|
+
@api: API関連テスト
|
|
348
|
+
@SC-XXX: シナリオIDとの紐付け
|
|
349
|
+
|
|
350
|
+
【記述位置】
|
|
351
|
+
- Feature、Scenario、Scenario Outlineの直前
|
|
352
|
+
- 複数タグを同時に使用可能(スペース区切り)
|
|
353
|
+
- タグは継承される(FeatureのタグはすべてのScenarioに適用)
|
|
354
|
+
|
|
355
|
+
【実行例(Cucumber)】
|
|
356
|
+
cucumber --tags "@smoke" # smokeタグのみ実行
|
|
357
|
+
cucumber --tags "not @slow" # slowタグ以外を実行
|
|
358
|
+
cucumber --tags "@smoke and @api" # 両方のタグを持つもの
|
|
359
|
+
cucumber --tags "@regression and not @wip" # regressionでwip以外
|
|
360
|
+
|
|
361
|
+
【ベストプラクティス】
|
|
362
|
+
- タグの命名規則をチームで統一
|
|
363
|
+
- 過度なタグ付けを避ける(管理が煩雑になる)
|
|
364
|
+
- CI/CDパイプラインに応じたタグ戦略を設計
|
|
365
|
+
- タグの意味をドキュメント化
|
|
366
|
+
-->
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## メモ
|
|
371
|
+
|
|
372
|
+
<!--
|
|
373
|
+
全体に関する補足情報
|
|
374
|
+
|
|
375
|
+
記載すべき内容:
|
|
376
|
+
- テスト自動化ツールの設定(Cucumber、SpecFlow等)
|
|
377
|
+
- ステップ定義の実装ファイルへのリンク
|
|
378
|
+
- テストデータの管理方法
|
|
379
|
+
- テスト環境の準備手順
|
|
380
|
+
- CI/CDでの実行方法とパイプライン設定
|
|
381
|
+
- カバレッジ目標(シナリオ数、実装機能のカバー率)
|
|
382
|
+
- レビュープロセス(誰がシナリオをレビューするか)
|
|
383
|
+
- シナリオの命名規則やスタイルガイド
|
|
384
|
+
|
|
385
|
+
シナリオ作成のワークフロー:
|
|
386
|
+
1. ユーザーストーリーから具体例を抽出
|
|
387
|
+
2. ハッピーパス(正常系)を最初に記述
|
|
388
|
+
3. エラーケースや境界値を追加
|
|
389
|
+
4. ステークホルダーとレビュー
|
|
390
|
+
5. ステップ定義を実装(自動化)
|
|
391
|
+
6. 継続的にメンテナンス
|
|
392
|
+
|
|
393
|
+
ドメインモデリングとの連携:
|
|
394
|
+
- シナリオのGiven-When-Thenから、ドメインイベントを抽出
|
|
395
|
+
- Whenがコマンド、Thenがドメインイベントに対応することが多い
|
|
396
|
+
- シナリオで使われる用語をユビキタス言語に追加
|
|
397
|
+
- Event Stormingの入力として活用
|
|
398
|
+
|
|
399
|
+
ベストプラクティス:
|
|
400
|
+
- シナリオは短く保つ(5-10ステップ程度)
|
|
401
|
+
- 1 Feature = 1ファイルも検討(大規模プロジェクトの場合)
|
|
402
|
+
- 実装詳細(UIの操作手順)は避ける
|
|
403
|
+
- ビジネス用語を使用(技術用語を避ける)
|
|
404
|
+
- 定期的にリファクタリング(重複の排除、Background活用)
|
|
405
|
+
- シナリオ間の依存を避ける(各シナリオは独立して実行可能に)
|
|
406
|
+
-->
|