| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /e2e:kick-off |
| Aliases | /e2e:ko, /e2e:bundle |
| Category | e2e-authoring |
| Complexity | high |
| MCP Servers | flutter-skill, patrol |
/e2e:kick-off โ ํ ์คํธ ํ ๋ฒ์ ๊น์์ฃผ๋ ๋์ฐ๋ฏธ#
ํ๋ง๋๋ก#
์ ๊ธฐ๋ฅ์ ๋ค ๋ง๋ค๊ณ ๋๋ฉด, ๊ทธ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ ํ ์คํธ 3์ข ์ธํธ๋ฅผ ํ ๋ฐฉ์ ๊น์์ฃผ๋ ๋ช ๋ น์ ๋๋ค. ์ด์ฌ ๋ค์ด์จ ์ ์ง์ ํ์ฌ๊ฒฝ๋ณด๊ธฐ, ๊ฐ์ค๊ฒฝ๋ณด๊ธฐ, ๋๋๊ฒฝ๋ณด๊ธฐ๋ฅผ ํ ๋ฒ์ ์ค์นํด ์ฃผ๋ ๊ฒ๊ณผ ๋น์ทํด์.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ง ๋๋ธ ๊ฐ๋ฐ์๊ฐ, ๊ทธ ๊ธฐ๋ฅ์ ํ ์คํธ๋ฅผ ํ๊บผ๋ฒ์ ์ค๋นํ๊ณ ์ถ์ ๋
- PR(์ฝ๋ ์ ์ถ)์ ์ฌ๋ฆฌ๊ธฐ ์ ์ "ํ ์คํธ 3์ข ์ด ๋ชจ๋ ๊ฑธ๋ ค ์๋์ง" ํ์ธํ๊ณ ์ถ์ ๋
cc-bricks-feature๋feature:*๋ช ๋ น์ผ๋ก ๊ธฐ๋ฅ ๋ผ๋๋ฅผ ๋ง๋ ์งํ, ํ ์คํธ ์ธํ ์ ์๋์ผ๋ก ๋๋ด๊ณ ์ถ์ ๋
๋ฌด์์ ํด์ฃผ๋์#
๊ธฐ๋ฅ ์ด๋ฆ ํ๋๋ง ์ฃผ๋ฉด, ๊ฒ์ฆ์ฉ ํ ์คํธ ํ์ผ๋ค์ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
- Unit ํ ์คํธ โ ์์ ๋ถํ ํ๋ํ๋๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ์ผ (UseCase / BLoC / Repository)
-
BDD ํ
์คํธ โ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์๋๋ฆฌ์ค(
.feature)์, ํ๋ฉด ๋จ์(widget) + ์ค์ ๊ธฐ๊ธฐ(Patrol) ์๋ ๊ฒ์ฆ ํ์ผ - E2E ํ ์คํธ (์ ํ) โ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ก์ง๋ฅด๋ "์ฌ์ฉ์ ์ฌ์ " ์๋๋ฆฌ์ค ํ์ผ
- ๋ง์ง๋ง์ ์์ฝ ๋ฆฌํฌํธ โ ๋ง๋ค์ด์ง ํ์ผ ๊ฐ์, ์์ง ์ฑ์์ผ ํ ์์ (TODO) ๋ชฉ๋ก, ๊ฒ์ฆ ํต๊ณผ ์ฌ๋ถ, ๋ค์์ ํ ์ผ ์๋ด
.feature ์๋๋ฆฌ์ค๊ฐ ์์ง ์์ผ๋ฉด, ์ฑ์ ์ง์ ๋๋ฌ๋ณด๋ฉฐ ์๋๋ฆฌ์ค ์ด์๊น์ง ๋์ ๋ง๋ค์ด ์ค ์๋ ์์ต๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ๊ธฐ๋ณธ โ ๊ธฐ๋ฅ ํด๋์์ ์์์ ๊ฐ์ง
/e2e:kick-off sign_in
# ์๋๋ฆฌ์ค(.feature)๊ฐ ์์ ๋ ๋ง๋๋ ๋ฐฉ์ ์ง์
/e2e:kick-off sign_in --with-exploration # ์ฑ์ ๋๋ฌ๋ณด๋ฉฐ ์๋๋ฆฌ์ค ์ด์๋ถํฐ ๋ง๋ค๊ธฐ
/e2e:kick-off sign_in --skeleton-only # ์ต์ ๋ผ๋ ์๋๋ฆฌ์ค๋ง ๋ง๋ค๊ธฐ
# ์ํ๋ ํ
์คํธ ์ข
๋ฅ๋ง ์ ํ
/e2e:kick-off sign_in --layers=unit,bdd # Unit + BDD ๋ง
/e2e:kick-off sign_in --layers=bdd # BDD ๋ง
# ์ค์ ๋ก ๋ง๋ค์ง ์๊ณ ๊ณํ๋ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ
/e2e:kick-off sign_in --dry-run
sign_in์๋ฆฌ์๋ ํ ์คํธ๋ฅผ ๊น ๊ธฐ๋ฅ ์ด๋ฆ์ ์ ์ต๋๋ค (์๋ฌธ์_์ธ๋๋ฐ ํ์).- ์ต์ ์ ์ ๋ถ์ด๋ฉด ๊ธฐ๋ณธ์ผ๋ก Unit + BDD ํ ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
- ๋ฌด์์ด ๋ง๋ค์ด์ง์ง ๋จผ์ ํ์ธํ๊ณ ์ถ์ผ๋ฉด
--dry-run์ผ๋ก ๊ณํ๋ง ๋ณผ ์ ์์ด์.
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
๋๋ต ๋ค์ ์์๋ก ์งํ๋ฉ๋๋ค.
- ์ฌ์ ์กฐ์ฌ โ ๊ธฐ๋ฅ์ด ์ค์ ๋ก ์๋์ง, ์ด๋ฏธ ๋ง๋ค์ด์ง ํ ์คํธ๋ ์๋์ง, ์๋๋ฉด ์ ๋๋(lock) ์๋๋ฆฌ์ค๋ ์๋์ง ํ์ธํฉ๋๋ค.
- Unit ํ ์คํธ ๊น๊ธฐ โ ์์ ๋ถํ๋ณ ํ ์คํธ ํ์ผ(UseCase / BLoC / Repository)์ ํ๊บผ๋ฒ์ ๋ง๋ญ๋๋ค.
- ์๋๋ฆฌ์ค(.feature) ํ๋ณด โ ์ด๋ฏธ ์์ผ๋ฉด ๊ทธ๋๋ก ์ฐ๊ณ , ์์ผ๋ฉด ์ต์ ์ ๋ฐ๋ผ ์ฑ์ ๋๋ฌ๋ณด๋ฉฐ ๋ง๋ค๊ฑฐ๋ ์ต์ ๋ผ๋๋ง ๋ง๋ญ๋๋ค.
- BDD ํ ์คํธ ๊น๊ธฐ โ ์๋๋ฆฌ์ค์ ๋ง๋ ๋จ๊ณ๋ณ ํ ํ๋ฆฟ์ ๋ง๋ค๊ณ , ํ๋ฉด ๋จ์ + ์ค์ ๊ธฐ๊ธฐ ๊ฒ์ฆ ํ์ผ์ ์๋ ์์ฑํฉ๋๋ค.
- E2E ํ ์คํธ ํ๋จ (์ ํ) โ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ก์ง๋ฅด๋ "์ฌ์ " ์๋๋ฆฌ์ค๊ฐ ์์ผ๋ฉด ํตํฉ ํ ์คํธ ์ชฝ์ผ๋ก ์ฎ๊ฒจ ์ ๋ฆฌํฉ๋๋ค.
-
๊ฒ์ฆ โ
/pr:preflight๋ฅผ ์๋์ผ๋ก ๋๋ ค ๋ฐฉ๊ธ ๋ง๋ ํ ์คํธ๊ฐ ์ค์ ๋ก ํต๊ณผํ๋์ง ํ์ธํ๊ณ , ์คํจํ๋ฉด ์์ธ์ ์ ๋ฆฌํด PR ์์ฑ์ ๋ง์ ์ค๋๋ค. - ๋ฆฌํฌํธ โ ๋ง๋ ํ์ผ ์, ๋จ์ ์์ , ๊ฒ์ฆ ๊ฒฐ๊ณผ, ๋ค์ ๋จ๊ณ๋ฅผ ํ๋์ ์ ๋ฆฌํด ๋ณด์ฌ์ค๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Triggers#
- ์ feature ๊ตฌํ ์งํ ํ ์คํธ ๋ฒ๋ค์ ์ค๋นํ ๋
- PR ์ฌ๋ฆฌ๊ธฐ ์ ์ "ํ ์คํธ 3 ๋ ์ด์ด๊ฐ ๋ชจ๋ ๊ฑธ๋ ค ์๋์ง" ๊ฒ์ฆํ ๋
cc-bricks-feature/cc-flutter-dev:feature:*๋ก feature ๋ง๋ ๋ค ํ ์คํธ ์๋ ์ธํ
์ฌ์ฉ๋ฒ#
# ๊ธฐ๋ณธ โ feature ๋๋ ํ ๋ฆฌ์์ ์๋ ๊ฐ์ง
/e2e:kick-off sign_in
# .feature ์์ฑ ๋ฐฉ๋ฒ ๋ช
์
/e2e:kick-off sign_in --with-exploration # flutter-skill ํ์๋ถํฐ
/e2e:kick-off sign_in --skeleton-only # skeleton .feature ๋ง ์์ฑ
# ํน์ ๋ ์ด์ด๋ง
/e2e:kick-off sign_in --layers=unit,bdd # unit + BDD ๋ง
/e2e:kick-off sign_in --layers=bdd # BDD ๋ง
# Dry run
/e2e:kick-off sign_in --dry-run # ์์ฑ ๊ณํ๋ง ์ถ๋ ฅํ๋ผ๋ฏธํฐ#
| ํ๋ผ๋ฏธํฐ | ํ์ | ์ค๋ช | ๊ธฐ๋ณธ |
|---|---|---|---|
feature | โ | feature ๋ชจ๋ ์ด๋ฆ (snake_case) | โ |
--with-exploration | โ | .feature ์์ผ๋ฉด /e2e:explore ๋จผ์ ํธ์ถ | false |
--skeleton-only | โ | .feature ์์ผ๋ฉด ์ต์ skeleton ์์ฑ (ํ์ ์๋ต) | false |
--layers | โ | ์์ฑ ๋ ์ด์ด ์ ํ (unit,bdd,e2e) | unit,bdd |
--dry-run | โ | ์์ฑ ๊ณํ๋ง ์ถ๋ ฅ | false |
--device | โ | Patrol ๊ฒ์ฆ์ฉ ๋๋ฐ์ด์ค | ์๋ ๊ฐ์ง |
์คํ ๋จ๊ณ#
- ์ฌ์ ์กฐ์ฌ โ feature ๋ชจ๋ ์กด์ฌ ํ์ธ, ๊ธฐ์กด ํ ์คํธ ํ์ผ ํ์ , lock ๋ ์ฝ๋ ํ์ธ
- Unit ๋ ์ด์ด ์ค์บํด๋ (์์:
cc-uiux:unit-testing)- UseCase ํ ์คํธ ํ์ผ ์ผ๊ด ์์ฑ
- BLoC ํ
์คํธ ํ์ผ ์์ฑ (
blocTest) - Repository ํ ์คํธ ํ์ผ ์์ฑ
.featureํ๋ณด- ์กด์ฌ โ ๊ทธ๋๋ก ์ฌ์ฉ
- ์๊ณ
--with-explorationโ/e2e:explore+/e2e:draft - ์๊ณ
--skeleton-onlyโ ์ต์ skeleton ์์ฑ
- BDD ๋ ์ด์ด ์ค์บํด๋
- TestDriver step ํ์ผ ํ ํ๋ฆฟ (TODO ์ฃผ์)
build.yamlํ์ธbuild_runner์คํ โ widget + patrol ์๋ ์์ฑ
- E2E ๋ ์ด์ด ํ๋จ (์ ํ)
- cross-feature /
@journey์๋๋ฆฌ์ค โintegration_test/features/์ด๊ด test_bundle.dart+run_all_scenarios.sh๊ฐฑ์
- cross-feature /
- ๊ฒ์ฆ โ
/pr:preflight --scope={feature-packages}์๋ ํธ์ถ- Unit + Widget (๋ณ๊ฒฝ๋ feature ํจํค์ง ๋ฒ์)
- Integration @smoke (์กฐ๊ฑด๋ถ)
- ์คํจ ์ ์์ธ ๊ทธ๋ฃนํ + PR ์์ฑ ์ฐจ๋จ
- ๋ฆฌํฌํธ โ ์์ฑ ํ์ผ ์, TODO ๋จ์ step, preflight ๊ฒฐ๊ณผ, ๋ค์ ๋จ๊ณ ์ ์
์คํ ํ๋ฆ ๋ค์ด์ด๊ทธ๋จ#
/e2e:kick-off sign_in
โ
[์ฌ์ ์กฐ์ฌ]
โโ feature/common/auth/ ์กด์ฌ? โ
โโ ๊ธฐ์กด ํ
์คํธ? ์ผ๋ถ ์์
โโ lock ๋ ์ฝ๋? ์์
โ
[Unit ๋ ์ด์ด]
โโ UseCase: SignInUseCase โ test/src/domain/usecase/sign_in_usecase_test.dart
โโ BLoC: SignInBloc โ test/src/presentation/bloc/sign_in_bloc_test.dart
โโ Repository: AuthRepository โ test/src/data/repository/auth_repository_test.dart
โ
[.feature ํ๋ณด]
โโ ์์ + --with-exploration
โ /e2e:explore sign_in โ /e2e:draft sign_in
โ
[BDD ๋ ์ด์ด]
โโ step/ ํ
ํ๋ฆฟ ์์ฑ (i_tap_the_sign_in_button.dart ๋ฑ)
โโ build.yaml ํ์ธ
โโ build_runner โ sign_in.widget_test.dart + sign_in.patrol_test.dart
โ
[E2E ๋ ์ด์ด] (์ ํ)
โโ @journey ์๋๋ฆฌ์ค ์์ โ skip
โ
[๊ฒ์ฆ] /pr:preflight --scope=feature_common_auth
โโ Unit โ PASS (42/0)
โโ Widget โ PASS (12/0, BDD widget_test ํฌํจ)
โโ Integration @smoke โ SKIP (๋๋ฐ์ด์ค ์์ or ์๋๋ฆฌ์ค ๋ฏธ์กด์ฌ)
โ
[๋ฆฌํฌํธ]
โโ ์์ฑ ํ์ผ 9๊ฐ
โโ TODO step 3๊ฐ (๋ชฉ๋ก)
โโ Preflight: PASS (Unit+Widget)
โโ ๋ค์ ๋จ๊ณ: step-implement ๋ก TODO ์ฑ์ฐ๊ธฐ โ /e2e:lock โ /pr:preflight --with-integration์ถ๋ ฅ#
- Unit ํ ์คํธ ํ์ผ๋ค
- BDD
.feature+ step/ ํ ํ๋ฆฟ + ์๋ ์์ฑ widget/patrol ํ ์คํธ - (์ ํ) E2E ์๋๋ฆฌ์ค ํ์ผ๋ค + test_bundle.dart ์ ๋ฐ์ดํธ
- ์์ฑ ์์ฝ ๋ฆฌํฌํธ + TODO ๋ชฉ๋ก
์คํจ ์ผ์ด์ค#
| ์์ธ | ๋์ |
|---|---|
| feature ๋ชจ๋ ์์ | cc-bricks-feature ๋๋ cc-flutter-dev:feature:* ์๋ด |
bdd_test_gen ๋ฏธ์ค์ | ํ์ค build.yaml ๋ธ๋ก ์ถ๊ฐ ์ ์ |
--with-exploration ์์ฒญ์ธ๋ฐ ์ฑ ๋ฏธ๊ธฐ๋ | flutter run --dart-define=ENABLE_FLUTTER_SKILL=true ๋ช
๋ น ์๋ด |
| lock ๋ ์๋๋ฆฌ์ค ๋ฎ์ด์ฐ๊ธฐ ์๋ | /e2e:unlock ํ์ ์๋ด |
| Patrol ๊ฒ์ฆ ์คํจ | step-implement ๋ก TODO ์ฑ์ฐ๊ธฐ ๊ถ์ |
๊ด๋ จ#
- skills/feature-test-bundle/SKILL.md โ ์ค์ ์ค์ผ์คํธ๋ ์ด์ ๋ณธ์ฒด
- commands/e2e/explore.md โ
.feature๊ฐ ์์ ๋ โ EXPLORE ์ง์ - commands/e2e/draft.md โ ์ ๋ โ
.feature์ด์ - commands/e2e/lock.md โ ๋ฒ๋ค ์์ฑ ํ ๋ฐ์
cc-dev-cycle:pr:preflightโ PR ์ฌ๋ฆฌ๊ธฐ ์ ์๋ ๊ฒ์ดํธ (๋ณธ ์ปค๋งจ๋๊ฐ ๋ง์ง๋ง ๋จ๊ณ๋ก ํธ์ถ)- ์์:
cc-uiux:unit-testing,cc-uiux:bdd-testing,cc-uiux:integration-testing - ์กฐ์ง ํ์ค:
cc-flutter-dev/rules/bdd-test-patterns.md - PR ์ ์ฑ
:
cc-dev-cycle/rules/pr-preflight-policy.md