LogoSkills

feature-qa

Feature-level QA Health Score evaluation and baseline regression tracking

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/feature-qa
Aliases/qa, /quality-check
Categorykobic-development
Complexitymoderate

/feature-qa โ€” ๊ธฐ๋Šฅ ํ’ˆ์งˆ ๊ฑด๊ฐ•๊ฒ€์ง„#

ํ•œ๋งˆ๋””๋กœ#

์™„์„ฑํ•œ ๊ธฐ๋Šฅ์„ ๊ฑด๊ฐ•๊ฒ€์ง„ํ•˜๋“ฏ 5๊ฐœ ํ•ญ๋ชฉ์œผ๋กœ ์ ์ˆ˜ ๋งค๊ธฐ๊ณ  A~F ๋“ฑ๊ธ‰์„ ๋งค๊ธฐ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ๋ฒˆ ์ ์ˆ˜์™€ ๋น„๊ตํ•ด์„œ "์˜ˆ์ „๋ณด๋‹ค ๋‚˜๋น ์ง„ ๊ณณ"์ด ์žˆ๋Š”์ง€๋„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Šฅ์„ ๋‹ค ๋งŒ๋“  ์งํ›„ ํ’ˆ์งˆ์ด ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • PR(์ฝ”๋“œ ์ œ์ถœ)์„ ์˜ฌ๋ฆฌ๊ธฐ ์ „ ๋งˆ์ง€๋ง‰ ์ ๊ฒ€(ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ)์œผ๋กœ
  • ์ด๋ฏธ ์žˆ๋˜ ๊ธฐ๋Šฅ์ด ์˜ˆ์ „๋ณด๋‹ค ๋‚˜๋น ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

  • ๊ธฐ๋Šฅ์„ 5๊ฐ€์ง€ ๊ด€์ ์œผ๋กœ ์ฑ„์ ํ•ด 100์  ๋งŒ์  ์ ์ˆ˜์™€ A~F ๋“ฑ๊ธ‰์„ ์ค๋‹ˆ๋‹ค.
    • ๊ธฐ๋Šฅ ์™„์„ฑ๋„(30%), ํ™”๋ฉด/UX(20%), ์ ‘๊ทผ์„ฑ(20%), ์„ฑ๋Šฅ(15%), ๋‹ค๊ตญ์–ด(15%)
  • ๊ฒฐ๊ณผ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด์ด๋Š” ์ ์ˆ˜ํŒ(๋ง‰๋Œ€๊ทธ๋ž˜ํ”„) ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , ๋ฐœ๊ฒฌ๋œ ๋ฌธ์ œ๋ฅผ ํ‘œ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ฑ„์  ๊ฒฐ๊ณผ๋ฅผ .qa-baseline/{๊ธฐ๋Šฅ์ด๋ฆ„}.json ํŒŒ์ผ์— ์ž๋™ ์ €์žฅํ•ด ๊ธฐ์ค€์ (baseline) ์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ๋ฒˆ ๊ฒ€์‚ฌ ๋•Œ ์ด ๊ธฐ์ค€์ ๊ณผ ๋น„๊ตํ•ด ์ข‹์•„์กŒ๋Š”์ง€ยท๋‚˜๋น ์กŒ๋Š”์ง€(ํšŒ๊ท€) ๋ฆฌํฌํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# ๊ธฐ๋ณธ: ๊ธฐ๋Šฅ ํด๋” ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด ๊ฒ€์‚ฌ
/feature-qa feature/auth/

# ์ง€๋‚œ๋ฒˆ ๊ธฐ์ค€์ ๊ณผ ๋น„๊ต (์ข‹์•„์กŒ๋‚˜ ๋‚˜๋น ์กŒ๋‚˜)
/feature-qa feature/auth/ --regression

# ๋น ๋ฅธ ์ ๊ฒ€ (๊ธฐ๋Šฅ ์™„์„ฑ๋„๋งŒ)
/feature-qa feature/auth/ --quick

# ํŠน์ • ํ•ญ๋ชฉ๋งŒ ์ง‘์ค‘ ๊ฒ€์‚ฌ
/feature-qa feature/auth/ --focus ui,a11y

# 5๊ฐœ ํ•ญ๋ชฉ ๋™์‹œ ๊ฒ€์‚ฌ (Agent Teams ํ•„์š”, ๋” ๋น ๋ฆ„)
/feature-qa feature/auth/ --parallel
  • ๋งจ ์•ž์˜ ๊ธฐ๋Šฅ ๊ฒฝ๋กœ(feature/auth/ ๋“ฑ)๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • --focus์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ: ui(ํ™”๋ฉด), a11y(์ ‘๊ทผ์„ฑ), perf(์„ฑ๋Šฅ), i18n(๋‹ค๊ตญ์–ด), func(๊ธฐ๋Šฅ).
  • ๊ธฐ์ค€์  ์ €์žฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™์ž…๋‹ˆ๋‹ค. ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด --no-save๋ฅผ ๋ถ™์ด์„ธ์š”.

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

  1. ์ง€์ •ํ•œ ๊ธฐ๋Šฅ์„ 5๊ฐœ ๊ด€์ ์œผ๋กœ ์ฑ„์ ํ•ฉ๋‹ˆ๋‹ค โ€” ๊ธฐ๋Šฅ ์™„์„ฑ๋„, ํ™”๋ฉด/UX, ์ ‘๊ทผ์„ฑ, ์„ฑ๋Šฅ, ๋‹ค๊ตญ์–ด.
  2. ๊ฐ ํ•ญ๋ชฉ ์ ์ˆ˜์— ๋น„์ค‘์„ ๊ณฑํ•ด ๋”ํ•˜๊ณ , ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ 1๊ฑด๋‹น 10์ ์”ฉ ๊นŽ์•„ ์ด์ ๊ณผ ๋“ฑ๊ธ‰(A~F) ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฒฐ๊ณผ๋ฅผ ์ ์ˆ˜ํŒ๊ณผ ๋ฌธ์ œ ๋ชฉ๋ก์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , .qa-baseline/ ํด๋”์— ๊ธฐ์ค€์  ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. --regression์„ ์“ฐ๋ฉด ์ €์žฅ๋ผ ์žˆ๋˜ ์ง€๋‚œ ๊ธฐ์ค€์ ๊ณผ ๋น„๊ตํ•ด ํ•ญ๋ชฉ๋ณ„ ์ฆ๊ฐ ๋ฆฌํฌํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
  5. --parallel์„ ์“ฐ๋ฉด ํ•ญ๋ชฉ๋“ค์„ ์—ฌ๋Ÿฌ ํŒ€์ด ๋™์‹œ์— ๊ฒ€์‚ฌํ•ด ๋” ๋น ๋ฅด๊ฒŒ ๋๋ƒ…๋‹ˆ๋‹ค. (๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ˆœ์ฐจ ๊ฒ€์‚ฌ๋กœ ์ „ํ™˜)

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

Triggers#

  • After feature implementation for quality verification
  • As a quality gate before PR creation
  • To check quality regression of existing features

Usage#

# Basic usage: QA by feature path
/feature-qa feature/auth/

# Regression comparison (against previous baseline)
/feature-qa feature/auth/ --regression

# Quick check (functional completeness only)
/feature-qa feature/auth/ --quick

# Specific axis only
/feature-qa feature/auth/ --focus ui,a11y

# Parallel evaluation (Agent Teams)
/feature-qa feature/auth/ --parallel

Parameters#

ParameterRequiredDescriptionExample
feature_pathโœ…Feature module pathfeature/auth/
--regressionโŒCompare against previous baseline
--quickโŒQuick check (functional completeness only)
--focusโŒFocus on specific axesui, a11y, perf, i18n, func
--parallelโŒ5-axis parallel evaluation (requires Agent Teams)
--save-baselineโŒSave baseline (default: auto-save)
--no-saveโŒDo not save baseline

5-Axis Evaluation System#

Functional Completeness โ€” Weight 30%#

ItemPointsInspection Method
Acceptance Criteria met30Map issue AC to implementation code
Edge case handling25Check null/empty/boundary handling
Error handling25try-catch, ErrorState, user messages
Test coverage20UseCase 100%, BLoC 80%+ target

Inspection Items:

  • Are all ACs mapped to implementation code
  • Is null safety handled properly
  • Is there user feedback on network errors
  • Is empty list state (EmptyState) handled
  • Is loading state displayed

UI/UX (Visual) โ€” Weight 20%#

ItemPointsInspection Method
Correct CoUI component usage30Verify component API compliance
Layout consistency25Gap/Insets constants used, alignment
Color system compliance25appColors/colorScheme used
Typography compliance20context.textStyles used

Inspection Items:

  • Are CoUI component APIs used correctly (features parameter, etc.)
  • Are Gap/Insets constants used (no hardcoded values)
  • Are colors accessed via context.appColors / context.colorScheme
  • Are text styles accessed via context.textStyles
  • Are non-existent APIs like ButtonSize.medium not used

Accessibility โ€” Weight 20%#

ItemPointsInspection Method
Semantic Labels35Labels present on images, icons, buttons
Touch target size30Minimum 48x48 verified
Color contrast20WCAG AA criteria
Screen reader order15Logical tab order

Inspection Items:

  • Do Image/Icon have semanticLabel
  • Are touchable elements at least 48x48
  • Is text-background color contrast 4.5:1 or above
  • Are widgets arranged in a meaningful order

Performance โ€” Weight 15%#

ItemPointsInspection Method
const widget usage30Check const-eligible widgets
BlocBuilder optimization25buildWhen/listenWhen usage
Image optimization25cacheWidth/cacheHeight applied
Resource cleanup20dispose/cancel verified

Inspection Items:

  • Are const-eligible widgets declared as const
  • Is buildWhen applied to BlocBuilder
  • Do network images have cacheWidth/cacheHeight
  • Are Stream subscriptions cancelled in dispose
  • Is BLoC isClosed checked in async handlers

Internationalization (i18n) โ€” Weight 15%#

ItemPointsInspection Method
Translation key usage40context.t.* pattern used
No hardcoded strings30UI text hardcoding detection
Pluralization handling15plural/ordinal applied
Dynamic value parameterization15Parameters instead of string interpolation

Inspection Items:

  • Do all UI texts use context.t.*
  • Are there no hardcoded Korean/English strings
  • Is pluralization handled for texts containing numbers
  • Are dynamic values passed as parameters

Health Score Calculation#

Score Computation#

Total = Sum(each axis score x weight) - (Critical issue count x 10)

Each axis score = Sum(item scores) / 100 x 100

Grade Criteria#

GradeScore RangeMeaning
A90-100Excellent โ€” production ready
B80-89Good โ€” minor improvements needed
C70-79Average โ€” improvements recommended
D60-69Insufficient โ€” improvements required
F0-59Poor โ€” must fix before PR creation

Baseline Storage and Regression Comparison#

Baseline Storage#

Automatically saved to .qa-baseline/{feature-name}.json on QA execution:

{
   " feature " :  " auth " ,
   " date " :  " 2026-03-13T10:30:00Z " ,
   " grade " :  " B " ,
   " totalScore " : 85,
   " scores " : {
     " functional " : {  " score " : 90,  " weight " : 0.30,  " weighted " : 27.0 },
     " visual " : {  " score " : 80,  " weight " : 0.20,  " weighted " : 16.0 },
     " accessibility " : {  " score " : 75,  " weight " : 0.20,  " weighted " : 15.0 },
     " performance " : {  " score " : 85,  " weight " : 0.15,  " weighted " : 12.75 },
     " i18n " : {  " score " : 90,  " weight " : 0.15,  " weighted " : 13.5 }
  },
   " criticalIssues " : 0,
   " penalty " : 0,
   " issues " : [
    {
       " axis " :  " accessibility " ,
       " severity " :  " warning " ,
       " message " :  " semantic label missing " ,
       " file " :  " lib/src/presentation/widget/author_card.dart " ,
       " line " : 42
    }
  ]
}

Regression Comparison#

When using the --regression option, compares against the previous baseline:

## Regression Report: auth

| Axis | Previous | Current | Change |
|------|----------|---------|--------|
| Functional Completeness | 90 | 92 | โœ… +2 |
| UI/UX | 80 | 80 | โžก๏ธ 0 |
| Accessibility | 75 | 70 | โš ๏ธ -5 |
| Performance | 85 | 88 | โœ… +3 |
| i18n | 90 | 90 | โžก๏ธ 0 |
| **Total** | **85 (B)** | **84 (B)** | โš ๏ธ -1 |

### Regression Items (score decrease)
- โ™ฟ Accessibility -5 points: semanticLabel missing on newly added ProfileImage

Output Format#

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘  Feature QA Health Score: auth                                โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘                                                                โ•‘
โ•‘  Grade: B (85/100)                                             โ•‘
โ•‘                                                                โ•‘
โ•‘  ๐Ÿงช Functional     โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘  90/100 (ร—0.30 = 27.0) โ•‘
โ•‘  ๐ŸŽจ UI/UX          โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘  80/100 (ร—0.20 = 16.0) โ•‘
โ•‘  โ™ฟ Accessibility   โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘  75/100 (ร—0.20 = 15.0) โ•‘
โ•‘  โšก Performance     โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘โ–‘โ–‘  85/100 (ร—0.15 = 12.8) โ•‘
โ•‘  ๐ŸŒ i18n           โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘  90/100 (ร—0.15 = 13.5) โ•‘
โ•‘                                                                โ•‘
โ•‘  Critical: 0 items | Penalty: 0 points                         โ•‘
โ•‘  Baseline: Saved (.qa-baseline/auth.json)                      โ•‘
โ•‘                                                                โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

### Issues Found (5 items)

| # | Axis | Severity | Issue | File |
|---|------|----------|-------|------|
| 1 | โ™ฟ Accessibility | โš ๏ธ | semantic label missing | author_card.dart:42 |
| 2 | โšก Performance | โš ๏ธ | cacheWidth not specified | author_image.dart:15 |
| 3 | ๐ŸŒ i18n | ๐Ÿ’ก | hardcoded string | author_list_page.dart:28 |
| 4 | ๐ŸŽจ UI/UX | ๐Ÿ’ก | SizedBox used instead of Gap | author_form.dart:55 |
| 5 | ๐Ÿงช Functional | ๐Ÿ’ก | EmptyState not handled | author_list_bloc.dart:30 |

Parallel Evaluation (--parallel, Agent Teams)#

Prerequisites#

  • CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 environment variable set
  • If Agent Teams unavailable, automatically falls back to sequential evaluation

Parallel Execution Flow#

When --parallel option is used:

1. Check Agent Teams availability
   helpers.md#Check-Agent-Teams-Available
   โ†’ Falls back to sequential evaluation if unavailable

2. 3-team parallel evaluation (3 Teammates)

   โ”œโ”€ Teammate 1: Functional Completeness (30%)
   โ”‚   โ”œโ”€ Acceptance Criteria met
   โ”‚   โ”œโ”€ Edge case handling
   โ”‚   โ”œโ”€ Error handling
   โ”‚   โ””โ”€ Test coverage
   โ”‚
   โ”œโ”€ Teammate 2: UI/UX (20%) + Accessibility (20%)
   โ”‚   โ”œโ”€ Correct CoUI component usage
   โ”‚   โ”œโ”€ Layout/color/typography consistency
   โ”‚   โ”œโ”€ Semantic Labels
   โ”‚   โ”œโ”€ Touch target size
   โ”‚   โ””โ”€ Color contrast
   โ”‚
   โ””โ”€ Teammate 3: Performance (15%) + i18n (15%)
       โ”œโ”€ const widgets / BlocBuilder optimization
       โ”œโ”€ Image optimization / resource cleanup
       โ”œโ”€ Translation key usage
       โ””โ”€ Hardcoded string detection

3. Lead merges results
   โ”œโ”€ helpers.md#Collect-Team-Results
   โ”œโ”€ Sum each axis score and apply weights
   โ”œโ”€ Critical issue count x 10 point penalty
   โ””โ”€ Final grade calculation (A~F)

Fallback (Sequential Evaluation)#

If Agent Teams unavailable, runs 5-axis sequential evaluation as before.


Automation#

# Run tests (for coverage verification)
melos run test:with-html-coverage -- --scope= " *auth* " 

 # Static analysis
melos run analyze -- --scope= " *auth* " 

 # Code review (detailed)
/code-review feature/auth/ --gate-mode

  • /code-review - 8-category code review
  • /checklist:feature-complete - Feature complete checklist
  • /dev:run - Full development cycle (can be auto-invoked at Step 8.7)