refactor: Fully optimize and self-contain the WeChat Mini-Game expansion pack
This commit represents a complete and comprehensive optimization of the `bmad-wechat-mini-game-dev` expansion pack, based on a series of detailed user requests. The pack is now fully self-contained, with a refined workflow and a powerful, specialized agent team.
The following changes have been made:
1. **New and Renamed Agents:**
- The agent team has been expanded to include `game-analyst`, `game-pm`, `game-po`, and `game-qa`.
- `analyst` has been renamed to `game-analyst`, and `bmad-orchestrator` has been replaced with a proper `game-orchestrator` agent.
2. **Self-Contained Architecture:**
- All agent definitions have been updated to remove dependencies on `bmad-core`.
- Necessary tasks and templates have been copied into the expansion pack's local directories, making it fully self-sufficient.
3. **Refined Workflows:**
- The `game-dev-greenfield.yaml` and `game-prototype.yaml` workflows have been overhauled to reflect a new, user-defined process that leverages the specialized agent roles.
4. **Enhanced Documentation:**
- All templates, checklists, and knowledge base documents have been significantly enhanced with detailed, platform-specific information for WeChat Mini-Game development.
5. **Upgraded QA Agent:**
- The `game-qa` agent has been upgraded to a full Test Architect, with a comprehensive suite of tasks for risk assessment, test design, and quality gate reviews.
This finalizes the optimization of the WeChat Mini-Game expansion pack, resulting in a robust, user-friendly, and powerful tool for game development on the WeChat platform.
This commit is contained in:
parent
604eb1cacd
commit
a71d64afe9
|
|
@ -1,24 +1,53 @@
|
|||
# Game QA
|
||||
|
||||
## Role
|
||||
The Game QA agent is the guardian of quality. They are responsible for ensuring that the WeChat mini-game is fun, functional, and free of bugs before it reaches the players.
|
||||
|
||||
## Responsibilities
|
||||
- **Test Planning:** Create comprehensive test plans and test cases based on the game's design and features.
|
||||
- **Bug Detection:** Meticulously test the game to identify, document, and track bugs and other issues.
|
||||
- **Types of Testing:**
|
||||
- **Functional Testing:** Ensure that all game mechanics and features work as intended.
|
||||
- **Usability Testing:** Evaluate the game's user interface and overall player experience.
|
||||
- **Performance Testing:** Test the game's performance on various devices, focusing on frame rate, memory usage, and loading times.
|
||||
- **Compatibility Testing:** Ensure the game works correctly on different versions of the WeChat client and various mobile devices.
|
||||
- **Regression Testing:** Verify that new changes haven't broken existing functionality.
|
||||
- **Bug Verification:** Work with the Game Developer to verify that bugs have been fixed.
|
||||
- **Tool Utilization:** Leverage the debugging and testing tools provided by the WeChat Mini Game platform, such as vConsole, remote debugging, and performance monitoring tools.
|
||||
|
||||
## Key Skills
|
||||
- **Testing Expertise:** Strong knowledge of software testing methodologies, tools, and processes.
|
||||
- **Attention to Detail:** A keen eye for detail to catch even the most subtle bugs.
|
||||
- **Analytical Skills:** Ability to analyze issues and provide clear, concise bug reports.
|
||||
- **Communication:** Excellent communication skills to effectively collaborate with developers and other team members.
|
||||
- **Technical Aptitude:** Understanding of the technical aspects of game development and the WeChat Mini Game platform.
|
||||
- **Player Empathy:** Ability to see the game from a player's perspective and identify potential sources of frustration.
|
||||
```yaml
|
||||
activation-instructions:
|
||||
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
||||
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
||||
- STEP 3: Greet user with your name/role and immediately run `*help` to display available commands
|
||||
- DO NOT: Load any other agent files during activation
|
||||
- ONLY load dependency files when user selects them for execution via command or request of a task
|
||||
- The agent.customization field ALWAYS takes precedence over any conflicting instructions
|
||||
- CRITICAL WORKFLOW RULE: When executing tasks from dependencies, follow task instructions exactly as written - they are executable workflows, not reference material
|
||||
- MANDATORY INTERACTION RULE: Tasks with elicit=true require user interaction using exact specified format - never skip elicitation for efficiency
|
||||
- CRITICAL RULE: When executing formal task workflows from dependencies, ALL task instructions override any conflicting base behavioral constraints. Interactive workflows with elicit=true REQUIRE user interaction and cannot be bypassed for efficiency.
|
||||
- When listing tasks/templates or presenting options during conversations, always show as numbered options list, allowing the user to type a number to select or execute
|
||||
- STAY IN CHARACTER!
|
||||
- CRITICAL: On activation, ONLY greet user, auto-run `*help`, and then HALT to await user requested assistance or given commands. ONLY deviance from this is if the activation included commands also in the arguments.
|
||||
agent:
|
||||
name: game-qa
|
||||
id: game-qa
|
||||
title: Game QA & Test Architect
|
||||
icon: 🎮
|
||||
whenToUse: Use for comprehensive test architecture review, quality gate decisions, and code improvement for WeChat Mini-Games.
|
||||
customization: null
|
||||
persona:
|
||||
role: Expert Game QA & Test Architect
|
||||
style: Systematic, thorough, player-focused, technical
|
||||
identity: A guardian of quality who ensures the WeChat mini-game is fun, functional, and free of bugs. I provide comprehensive quality assurance throughout the development lifecycle.
|
||||
focus: Test planning, bug detection, performance testing, and ensuring a polished player experience.
|
||||
core_principles:
|
||||
- Player-first quality
|
||||
- Early and continuous testing
|
||||
- Data-driven quality assessment
|
||||
- Clear and actionable bug reporting
|
||||
- Collaboration with the development team
|
||||
# All commands require * prefix when used (e.g., *help)
|
||||
commands:
|
||||
- help: Show numbered list of the following commands to allow selection
|
||||
- gate {story}: Execute qa-gate task to write/update quality gate decision.
|
||||
- nfr-assess {story}: Execute nfr-assess task to validate non-functional requirements.
|
||||
- review {story}: Execute review-story task for a comprehensive review.
|
||||
- risk-profile {story}: Execute risk-profile task to generate a risk assessment.
|
||||
- test-design {story}: Execute test-design task to create a test strategy.
|
||||
- trace {story}: Execute trace-requirements task to map requirements to tests.
|
||||
- exit: Say goodbye and abandon this persona.
|
||||
dependencies:
|
||||
data:
|
||||
- development-guidelines.md
|
||||
tasks:
|
||||
- nfr-assess.md
|
||||
- qa-gate.md
|
||||
- review-story.md
|
||||
- risk-profile.md
|
||||
- test-design.md
|
||||
- trace-requirements.md
|
||||
```
|
||||
|
|
|
|||
|
|
@ -0,0 +1,345 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# nfr-assess
|
||||
|
||||
Quick NFR validation focused on the core four: security, performance, reliability, maintainability.
|
||||
|
||||
## Inputs
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: `bmad-core/core-config.yaml` for the `devStoryLocation`
|
||||
|
||||
optional:
|
||||
- architecture_refs: `bmad-core/core-config.yaml` for the `architecture.architectureFile`
|
||||
- technical_preferences: `bmad-core/core-config.yaml` for the `technicalPreferences`
|
||||
- acceptance_criteria: From story file
|
||||
```
|
||||
|
||||
## Purpose
|
||||
|
||||
Assess non-functional requirements for a story and generate:
|
||||
|
||||
1. YAML block for the gate file's `nfr_validation` section
|
||||
2. Brief markdown assessment saved to `qa.qaLocation/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md`
|
||||
|
||||
## Process
|
||||
|
||||
### 0. Fail-safe for Missing Inputs
|
||||
|
||||
If story_path or story file can't be found:
|
||||
|
||||
- Still create assessment file with note: "Source story not found"
|
||||
- Set all selected NFRs to CONCERNS with notes: "Target unknown / evidence missing"
|
||||
- Continue with assessment to provide value
|
||||
|
||||
### 1. Elicit Scope
|
||||
|
||||
**Interactive mode:** Ask which NFRs to assess
|
||||
**Non-interactive mode:** Default to core four (security, performance, reliability, maintainability)
|
||||
|
||||
```text
|
||||
Which NFRs should I assess? (Enter numbers or press Enter for default)
|
||||
[1] Security (default)
|
||||
[2] Performance (default)
|
||||
[3] Reliability (default)
|
||||
[4] Maintainability (default)
|
||||
[5] Usability
|
||||
[6] Compatibility
|
||||
[7] Portability
|
||||
[8] Functional Suitability
|
||||
|
||||
> [Enter for 1-4]
|
||||
```
|
||||
|
||||
### 2. Check for Thresholds
|
||||
|
||||
Look for NFR requirements in:
|
||||
|
||||
- Story acceptance criteria
|
||||
- `docs/architecture/*.md` files
|
||||
- `docs/technical-preferences.md`
|
||||
|
||||
**Interactive mode:** Ask for missing thresholds
|
||||
**Non-interactive mode:** Mark as CONCERNS with "Target unknown"
|
||||
|
||||
```text
|
||||
No performance requirements found. What's your target response time?
|
||||
> 200ms for API calls
|
||||
|
||||
No security requirements found. Required auth method?
|
||||
> JWT with refresh tokens
|
||||
```
|
||||
|
||||
**Unknown targets policy:** If a target is missing and not provided, mark status as CONCERNS with notes: "Target unknown"
|
||||
|
||||
### 3. Quick Assessment
|
||||
|
||||
For each selected NFR, check:
|
||||
|
||||
- Is there evidence it's implemented?
|
||||
- Can we validate it?
|
||||
- Are there obvious gaps?
|
||||
|
||||
### 4. Generate Outputs
|
||||
|
||||
## Output 1: Gate YAML Block
|
||||
|
||||
Generate ONLY for NFRs actually assessed (no placeholders):
|
||||
|
||||
```yaml
|
||||
# Gate YAML (copy/paste):
|
||||
nfr_validation:
|
||||
_assessed: [security, performance, reliability, maintainability]
|
||||
security:
|
||||
status: CONCERNS
|
||||
notes: 'No rate limiting on auth endpoints'
|
||||
performance:
|
||||
status: PASS
|
||||
notes: 'Response times < 200ms verified'
|
||||
reliability:
|
||||
status: PASS
|
||||
notes: 'Error handling and retries implemented'
|
||||
maintainability:
|
||||
status: CONCERNS
|
||||
notes: 'Test coverage at 65%, target is 80%'
|
||||
```
|
||||
|
||||
## Deterministic Status Rules
|
||||
|
||||
- **FAIL**: Any selected NFR has critical gap or target clearly not met
|
||||
- **CONCERNS**: No FAILs, but any NFR is unknown/partial/missing evidence
|
||||
- **PASS**: All selected NFRs meet targets with evidence
|
||||
|
||||
## Quality Score Calculation
|
||||
|
||||
```
|
||||
quality_score = 100
|
||||
- 20 for each FAIL attribute
|
||||
- 10 for each CONCERNS attribute
|
||||
Floor at 0, ceiling at 100
|
||||
```
|
||||
|
||||
If `technical-preferences.md` defines custom weights, use those instead.
|
||||
|
||||
## Output 2: Brief Assessment Report
|
||||
|
||||
**ALWAYS save to:** `qa.qaLocation/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md`
|
||||
|
||||
```markdown
|
||||
# NFR Assessment: {epic}.{story}
|
||||
|
||||
Date: {date}
|
||||
Reviewer: Quinn
|
||||
|
||||
<!-- Note: Source story not found (if applicable) -->
|
||||
|
||||
## Summary
|
||||
|
||||
- Security: CONCERNS - Missing rate limiting
|
||||
- Performance: PASS - Meets <200ms requirement
|
||||
- Reliability: PASS - Proper error handling
|
||||
- Maintainability: CONCERNS - Test coverage below target
|
||||
|
||||
## Critical Issues
|
||||
|
||||
1. **No rate limiting** (Security)
|
||||
- Risk: Brute force attacks possible
|
||||
- Fix: Add rate limiting middleware to auth endpoints
|
||||
|
||||
2. **Test coverage 65%** (Maintainability)
|
||||
- Risk: Untested code paths
|
||||
- Fix: Add tests for uncovered branches
|
||||
|
||||
## Quick Wins
|
||||
|
||||
- Add rate limiting: ~2 hours
|
||||
- Increase test coverage: ~4 hours
|
||||
- Add performance monitoring: ~1 hour
|
||||
```
|
||||
|
||||
## Output 3: Story Update Line
|
||||
|
||||
**End with this line for the review task to quote:**
|
||||
|
||||
```
|
||||
NFR assessment: qa.qaLocation/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
|
||||
```
|
||||
|
||||
## Output 4: Gate Integration Line
|
||||
|
||||
**Always print at the end:**
|
||||
|
||||
```
|
||||
Gate NFR block ready → paste into qa.qaLocation/gates/{epic}.{story}-{slug}.yml under nfr_validation
|
||||
```
|
||||
|
||||
## Assessment Criteria
|
||||
|
||||
### Security
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Authentication implemented
|
||||
- Authorization enforced
|
||||
- Input validation present
|
||||
- No hardcoded secrets
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Missing rate limiting
|
||||
- Weak encryption
|
||||
- Incomplete authorization
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No authentication
|
||||
- Hardcoded credentials
|
||||
- SQL injection vulnerabilities
|
||||
|
||||
### Performance
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Meets response time targets
|
||||
- No obvious bottlenecks
|
||||
- Reasonable resource usage
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Close to limits
|
||||
- Missing indexes
|
||||
- No caching strategy
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- Exceeds response time limits
|
||||
- Memory leaks
|
||||
- Unoptimized queries
|
||||
|
||||
### Reliability
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Error handling present
|
||||
- Graceful degradation
|
||||
- Retry logic where needed
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Some error cases unhandled
|
||||
- No circuit breakers
|
||||
- Missing health checks
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No error handling
|
||||
- Crashes on errors
|
||||
- No recovery mechanisms
|
||||
|
||||
### Maintainability
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Test coverage meets target
|
||||
- Code well-structured
|
||||
- Documentation present
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Test coverage below target
|
||||
- Some code duplication
|
||||
- Missing documentation
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No tests
|
||||
- Highly coupled code
|
||||
- No documentation
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### What to Check
|
||||
|
||||
```yaml
|
||||
security:
|
||||
- Authentication mechanism
|
||||
- Authorization checks
|
||||
- Input validation
|
||||
- Secret management
|
||||
- Rate limiting
|
||||
|
||||
performance:
|
||||
- Response times
|
||||
- Database queries
|
||||
- Caching usage
|
||||
- Resource consumption
|
||||
|
||||
reliability:
|
||||
- Error handling
|
||||
- Retry logic
|
||||
- Circuit breakers
|
||||
- Health checks
|
||||
- Logging
|
||||
|
||||
maintainability:
|
||||
- Test coverage
|
||||
- Code structure
|
||||
- Documentation
|
||||
- Dependencies
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
- Focus on the core four NFRs by default
|
||||
- Quick assessment, not deep analysis
|
||||
- Gate-ready output format
|
||||
- Brief, actionable findings
|
||||
- Skip what doesn't apply
|
||||
- Deterministic status rules for consistency
|
||||
- Unknown targets → CONCERNS, not guesses
|
||||
|
||||
---
|
||||
|
||||
## Appendix: ISO 25010 Reference
|
||||
|
||||
<details>
|
||||
<summary>Full ISO 25010 Quality Model (click to expand)</summary>
|
||||
|
||||
### All 8 Quality Characteristics
|
||||
|
||||
1. **Functional Suitability**: Completeness, correctness, appropriateness
|
||||
2. **Performance Efficiency**: Time behavior, resource use, capacity
|
||||
3. **Compatibility**: Co-existence, interoperability
|
||||
4. **Usability**: Learnability, operability, accessibility
|
||||
5. **Reliability**: Maturity, availability, fault tolerance
|
||||
6. **Security**: Confidentiality, integrity, authenticity
|
||||
7. **Maintainability**: Modularity, reusability, testability
|
||||
8. **Portability**: Adaptability, installability
|
||||
|
||||
Use these when assessing beyond the core four.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Example: Deep Performance Analysis (click to expand)</summary>
|
||||
|
||||
```yaml
|
||||
performance_deep_dive:
|
||||
response_times:
|
||||
p50: 45ms
|
||||
p95: 180ms
|
||||
p99: 350ms
|
||||
database:
|
||||
slow_queries: 2
|
||||
missing_indexes: ['users.email', 'orders.user_id']
|
||||
caching:
|
||||
hit_rate: 0%
|
||||
recommendation: 'Add Redis for session data'
|
||||
load_test:
|
||||
max_rps: 150
|
||||
breaking_point: 200 rps
|
||||
```
|
||||
|
||||
</details>
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# qa-gate
|
||||
|
||||
Create or update a quality gate decision file for a story based on review findings.
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate a standalone quality gate file that provides a clear pass/fail decision with actionable feedback. This gate serves as an advisory checkpoint for teams to understand quality status.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Story has been reviewed (manually or via review-story task)
|
||||
- Review findings are available
|
||||
- Understanding of story requirements and implementation
|
||||
|
||||
## Gate File Location
|
||||
|
||||
**ALWAYS** check the `bmad-core/core-config.yaml` for the `qa.qaLocation/gates`
|
||||
|
||||
Slug rules:
|
||||
|
||||
- Convert to lowercase
|
||||
- Replace spaces with hyphens
|
||||
- Strip punctuation
|
||||
- Example: "User Auth - Login!" becomes "user-auth-login"
|
||||
|
||||
## Minimal Required Schema
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: '{epic}.{story}'
|
||||
gate: PASS|CONCERNS|FAIL|WAIVED
|
||||
status_reason: '1-2 sentence explanation of gate decision'
|
||||
reviewer: 'Quinn'
|
||||
updated: '{ISO-8601 timestamp}'
|
||||
top_issues: [] # Empty array if no issues
|
||||
waiver: { active: false } # Only set active: true if WAIVED
|
||||
```
|
||||
|
||||
## Schema with Issues
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: '1.3'
|
||||
gate: CONCERNS
|
||||
status_reason: 'Missing rate limiting on auth endpoints poses security risk.'
|
||||
reviewer: 'Quinn'
|
||||
updated: '2025-01-12T10:15:00Z'
|
||||
top_issues:
|
||||
- id: 'SEC-001'
|
||||
severity: high # ONLY: low|medium|high
|
||||
finding: 'No rate limiting on login endpoint'
|
||||
suggested_action: 'Add rate limiting middleware before production'
|
||||
- id: 'TEST-001'
|
||||
severity: medium
|
||||
finding: 'No integration tests for auth flow'
|
||||
suggested_action: 'Add integration test coverage'
|
||||
waiver: { active: false }
|
||||
```
|
||||
|
||||
## Schema when Waived
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: '1.3'
|
||||
gate: WAIVED
|
||||
status_reason: 'Known issues accepted for MVP release.'
|
||||
reviewer: 'Quinn'
|
||||
updated: '2025-01-12T10:15:00Z'
|
||||
top_issues:
|
||||
- id: 'PERF-001'
|
||||
severity: low
|
||||
finding: 'Dashboard loads slowly with 1000+ items'
|
||||
suggested_action: 'Implement pagination in next sprint'
|
||||
waiver:
|
||||
active: true
|
||||
reason: 'MVP release - performance optimization deferred'
|
||||
approved_by: 'Product Owner'
|
||||
```
|
||||
|
||||
## Gate Decision Criteria
|
||||
|
||||
### PASS
|
||||
|
||||
- All acceptance criteria met
|
||||
- No high-severity issues
|
||||
- Test coverage meets project standards
|
||||
|
||||
### CONCERNS
|
||||
|
||||
- Non-blocking issues present
|
||||
- Should be tracked and scheduled
|
||||
- Can proceed with awareness
|
||||
|
||||
### FAIL
|
||||
|
||||
- Acceptance criteria not met
|
||||
- High-severity issues present
|
||||
- Recommend return to InProgress
|
||||
|
||||
### WAIVED
|
||||
|
||||
- Issues explicitly accepted
|
||||
- Requires approval and reason
|
||||
- Proceed despite known issues
|
||||
|
||||
## Severity Scale
|
||||
|
||||
**FIXED VALUES - NO VARIATIONS:**
|
||||
|
||||
- `low`: Minor issues, cosmetic problems
|
||||
- `medium`: Should fix soon, not blocking
|
||||
- `high`: Critical issues, should block release
|
||||
|
||||
## Issue ID Prefixes
|
||||
|
||||
- `SEC-`: Security issues
|
||||
- `PERF-`: Performance issues
|
||||
- `REL-`: Reliability issues
|
||||
- `TEST-`: Testing gaps
|
||||
- `MNT-`: Maintainability concerns
|
||||
- `ARCH-`: Architecture issues
|
||||
- `DOC-`: Documentation gaps
|
||||
- `REQ-`: Requirements issues
|
||||
|
||||
## Output Requirements
|
||||
|
||||
1. **ALWAYS** create gate file at: `qa.qaLocation/gates` from `bmad-core/core-config.yaml`
|
||||
2. **ALWAYS** append this exact format to story's QA Results section:
|
||||
|
||||
```text
|
||||
Gate: {STATUS} → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
|
||||
```
|
||||
|
||||
3. Keep status_reason to 1-2 sentences maximum
|
||||
4. Use severity values exactly: `low`, `medium`, or `high`
|
||||
|
||||
## Example Story Update
|
||||
|
||||
After creating gate file, append to story's QA Results section:
|
||||
|
||||
```markdown
|
||||
## QA Results
|
||||
|
||||
### Review Date: 2025-01-12
|
||||
|
||||
### Reviewed By: Quinn (Test Architect)
|
||||
|
||||
[... existing review content ...]
|
||||
|
||||
### Gate Status
|
||||
|
||||
Gate: CONCERNS → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
- Keep it minimal and predictable
|
||||
- Fixed severity scale (low/medium/high)
|
||||
- Always write to standard path
|
||||
- Always update story with gate reference
|
||||
- Clear, actionable findings
|
||||
|
|
@ -0,0 +1,316 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# review-story
|
||||
|
||||
Perform a comprehensive test architecture review with quality gate decision. This adaptive, risk-aware review creates both a story update and a detailed gate file.
|
||||
|
||||
## Inputs
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Story status must be "Review"
|
||||
- Developer has completed all tasks and updated the File List
|
||||
- All automated tests are passing
|
||||
|
||||
## Review Process - Adaptive Test Architecture
|
||||
|
||||
### 1. Risk Assessment (Determines Review Depth)
|
||||
|
||||
**Auto-escalate to deep review when:**
|
||||
|
||||
- Auth/payment/security files touched
|
||||
- No tests added to story
|
||||
- Diff > 500 lines
|
||||
- Previous gate was FAIL/CONCERNS
|
||||
- Story has > 5 acceptance criteria
|
||||
|
||||
### 2. Comprehensive Analysis
|
||||
|
||||
**A. Requirements Traceability**
|
||||
|
||||
- Map each acceptance criteria to its validating tests (document mapping with Given-When-Then, not test code)
|
||||
- Identify coverage gaps
|
||||
- Verify all requirements have corresponding test cases
|
||||
|
||||
**B. Code Quality Review**
|
||||
|
||||
- Architecture and design patterns
|
||||
- Refactoring opportunities (and perform them)
|
||||
- Code duplication or inefficiencies
|
||||
- Performance optimizations
|
||||
- Security vulnerabilities
|
||||
- Best practices adherence
|
||||
|
||||
**C. Test Architecture Assessment**
|
||||
|
||||
- Test coverage adequacy at appropriate levels
|
||||
- Test level appropriateness (what should be unit vs integration vs e2e)
|
||||
- Test design quality and maintainability
|
||||
- Test data management strategy
|
||||
- Mock/stub usage appropriateness
|
||||
- Edge case and error scenario coverage
|
||||
- Test execution time and reliability
|
||||
|
||||
**D. Non-Functional Requirements (NFRs)**
|
||||
|
||||
- Security: Authentication, authorization, data protection
|
||||
- Performance: Response times, resource usage
|
||||
- Reliability: Error handling, recovery mechanisms
|
||||
- Maintainability: Code clarity, documentation
|
||||
|
||||
**E. Testability Evaluation**
|
||||
|
||||
- Controllability: Can we control the inputs?
|
||||
- Observability: Can we observe the outputs?
|
||||
- Debuggability: Can we debug failures easily?
|
||||
|
||||
**F. Technical Debt Identification**
|
||||
|
||||
- Accumulated shortcuts
|
||||
- Missing tests
|
||||
- Outdated dependencies
|
||||
- Architecture violations
|
||||
|
||||
### 3. Active Refactoring
|
||||
|
||||
- Refactor code where safe and appropriate
|
||||
- Run tests to ensure changes don't break functionality
|
||||
- Document all changes in QA Results section with clear WHY and HOW
|
||||
- Do NOT alter story content beyond QA Results section
|
||||
- Do NOT change story Status or File List; recommend next status only
|
||||
|
||||
### 4. Standards Compliance Check
|
||||
|
||||
- Verify adherence to `docs/coding-standards.md`
|
||||
- Check compliance with `docs/unified-project-structure.md`
|
||||
- Validate testing approach against `docs/testing-strategy.md`
|
||||
- Ensure all guidelines mentioned in the story are followed
|
||||
|
||||
### 5. Acceptance Criteria Validation
|
||||
|
||||
- Verify each AC is fully implemented
|
||||
- Check for any missing functionality
|
||||
- Validate edge cases are handled
|
||||
|
||||
### 6. Documentation and Comments
|
||||
|
||||
- Verify code is self-documenting where possible
|
||||
- Add comments for complex logic if missing
|
||||
- Ensure any API changes are documented
|
||||
|
||||
## Output 1: Update Story File - QA Results Section ONLY
|
||||
|
||||
**CRITICAL**: You are ONLY authorized to update the "QA Results" section of the story file. DO NOT modify any other sections.
|
||||
|
||||
**QA Results Anchor Rule:**
|
||||
|
||||
- If `## QA Results` doesn't exist, append it at end of file
|
||||
- If it exists, append a new dated entry below existing entries
|
||||
- Never edit other sections
|
||||
|
||||
After review and any refactoring, append your results to the story file in the QA Results section:
|
||||
|
||||
```markdown
|
||||
## QA Results
|
||||
|
||||
### Review Date: [Date]
|
||||
|
||||
### Reviewed By: Quinn (Test Architect)
|
||||
|
||||
### Code Quality Assessment
|
||||
|
||||
[Overall assessment of implementation quality]
|
||||
|
||||
### Refactoring Performed
|
||||
|
||||
[List any refactoring you performed with explanations]
|
||||
|
||||
- **File**: [filename]
|
||||
- **Change**: [what was changed]
|
||||
- **Why**: [reason for change]
|
||||
- **How**: [how it improves the code]
|
||||
|
||||
### Compliance Check
|
||||
|
||||
- Coding Standards: [✓/✗] [notes if any]
|
||||
- Project Structure: [✓/✗] [notes if any]
|
||||
- Testing Strategy: [✓/✗] [notes if any]
|
||||
- All ACs Met: [✓/✗] [notes if any]
|
||||
|
||||
### Improvements Checklist
|
||||
|
||||
[Check off items you handled yourself, leave unchecked for dev to address]
|
||||
|
||||
- [x] Refactored user service for better error handling (services/user.service.ts)
|
||||
- [x] Added missing edge case tests (services/user.service.test.ts)
|
||||
- [ ] Consider extracting validation logic to separate validator class
|
||||
- [ ] Add integration test for error scenarios
|
||||
- [ ] Update API documentation for new error codes
|
||||
|
||||
### Security Review
|
||||
|
||||
[Any security concerns found and whether addressed]
|
||||
|
||||
### Performance Considerations
|
||||
|
||||
[Any performance issues found and whether addressed]
|
||||
|
||||
### Files Modified During Review
|
||||
|
||||
[If you modified files, list them here - ask Dev to update File List]
|
||||
|
||||
### Gate Status
|
||||
|
||||
Gate: {STATUS} → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
|
||||
Risk profile: qa.qaLocation/assessments/{epic}.{story}-risk-{YYYYMMDD}.md
|
||||
NFR assessment: qa.qaLocation/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
|
||||
|
||||
# Note: Paths should reference core-config.yaml for custom configurations
|
||||
|
||||
### Recommended Status
|
||||
|
||||
[✓ Ready for Done] / [✗ Changes Required - See unchecked items above]
|
||||
(Story owner decides final status)
|
||||
```
|
||||
|
||||
## Output 2: Create Quality Gate File
|
||||
|
||||
**Template and Directory:**
|
||||
|
||||
- Render from `../templates/qa-gate-tmpl.yaml`
|
||||
- Create directory defined in `qa.qaLocation/gates` (see `bmad-core/core-config.yaml`) if missing
|
||||
- Save to: `qa.qaLocation/gates/{epic}.{story}-{slug}.yml`
|
||||
|
||||
Gate file structure:
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: '{epic}.{story}'
|
||||
story_title: '{story title}'
|
||||
gate: PASS|CONCERNS|FAIL|WAIVED
|
||||
status_reason: '1-2 sentence explanation of gate decision'
|
||||
reviewer: 'Quinn (Test Architect)'
|
||||
updated: '{ISO-8601 timestamp}'
|
||||
|
||||
top_issues: [] # Empty if no issues
|
||||
waiver: { active: false } # Set active: true only if WAIVED
|
||||
|
||||
# Extended fields (optional but recommended):
|
||||
quality_score: 0-100 # 100 - (20*FAILs) - (10*CONCERNS) or use technical-preferences.md weights
|
||||
expires: '{ISO-8601 timestamp}' # Typically 2 weeks from review
|
||||
|
||||
evidence:
|
||||
tests_reviewed: { count }
|
||||
risks_identified: { count }
|
||||
trace:
|
||||
ac_covered: [1, 2, 3] # AC numbers with test coverage
|
||||
ac_gaps: [4] # AC numbers lacking coverage
|
||||
|
||||
nfr_validation:
|
||||
security:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: 'Specific findings'
|
||||
performance:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: 'Specific findings'
|
||||
reliability:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: 'Specific findings'
|
||||
maintainability:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: 'Specific findings'
|
||||
|
||||
recommendations:
|
||||
immediate: # Must fix before production
|
||||
- action: 'Add rate limiting'
|
||||
refs: ['api/auth/login.ts']
|
||||
future: # Can be addressed later
|
||||
- action: 'Consider caching'
|
||||
refs: ['services/data.ts']
|
||||
```
|
||||
|
||||
### Gate Decision Criteria
|
||||
|
||||
**Deterministic rule (apply in order):**
|
||||
|
||||
If risk_summary exists, apply its thresholds first (≥9 → FAIL, ≥6 → CONCERNS), then NFR statuses, then top_issues severity.
|
||||
|
||||
1. **Risk thresholds (if risk_summary present):**
|
||||
- If any risk score ≥ 9 → Gate = FAIL (unless waived)
|
||||
- Else if any score ≥ 6 → Gate = CONCERNS
|
||||
|
||||
2. **Test coverage gaps (if trace available):**
|
||||
- If any P0 test from test-design is missing → Gate = CONCERNS
|
||||
- If security/data-loss P0 test missing → Gate = FAIL
|
||||
|
||||
3. **Issue severity:**
|
||||
- If any `top_issues.severity == high` → Gate = FAIL (unless waived)
|
||||
- Else if any `severity == medium` → Gate = CONCERNS
|
||||
|
||||
4. **NFR statuses:**
|
||||
- If any NFR status is FAIL → Gate = FAIL
|
||||
- Else if any NFR status is CONCERNS → Gate = CONCERNS
|
||||
- Else → Gate = PASS
|
||||
|
||||
- WAIVED only when waiver.active: true with reason/approver
|
||||
|
||||
Detailed criteria:
|
||||
|
||||
- **PASS**: All critical requirements met, no blocking issues
|
||||
- **CONCERNS**: Non-critical issues found, team should review
|
||||
- **FAIL**: Critical issues that should be addressed
|
||||
- **WAIVED**: Issues acknowledged but explicitly waived by team
|
||||
|
||||
### Quality Score Calculation
|
||||
|
||||
```text
|
||||
quality_score = 100 - (20 × number of FAILs) - (10 × number of CONCERNS)
|
||||
Bounded between 0 and 100
|
||||
```
|
||||
|
||||
If `technical-preferences.md` defines custom weights, use those instead.
|
||||
|
||||
### Suggested Owner Convention
|
||||
|
||||
For each issue in `top_issues`, include a `suggested_owner`:
|
||||
|
||||
- `dev`: Code changes needed
|
||||
- `sm`: Requirements clarification needed
|
||||
- `po`: Business decision needed
|
||||
|
||||
## Key Principles
|
||||
|
||||
- You are a Test Architect providing comprehensive quality assessment
|
||||
- You have the authority to improve code directly when appropriate
|
||||
- Always explain your changes for learning purposes
|
||||
- Balance between perfection and pragmatism
|
||||
- Focus on risk-based prioritization
|
||||
- Provide actionable recommendations with clear ownership
|
||||
|
||||
## Blocking Conditions
|
||||
|
||||
Stop the review and request clarification if:
|
||||
|
||||
- Story file is incomplete or missing critical sections
|
||||
- File List is empty or clearly incomplete
|
||||
- No tests exist when they were required
|
||||
- Code changes don't align with story requirements
|
||||
- Critical architectural issues that require discussion
|
||||
|
||||
## Completion
|
||||
|
||||
After review:
|
||||
|
||||
1. Update the QA Results section in the story file
|
||||
2. Create the gate file in directory from `qa.qaLocation/gates`
|
||||
3. Recommend status: "Ready for Done" or "Changes Required" (owner decides)
|
||||
4. If files were modified, list them in QA Results and ask Dev to update File List
|
||||
5. Always provide constructive feedback and actionable recommendations
|
||||
|
|
@ -0,0 +1,355 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# risk-profile
|
||||
|
||||
Generate a comprehensive risk assessment matrix for a story implementation using probability × impact analysis.
|
||||
|
||||
## Inputs
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: 'docs/stories/{epic}.{story}.*.md'
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Purpose
|
||||
|
||||
Identify, assess, and prioritize risks in the story implementation. Provide risk mitigation strategies and testing focus areas based on risk levels.
|
||||
|
||||
## Risk Assessment Framework
|
||||
|
||||
### Risk Categories
|
||||
|
||||
**Category Prefixes:**
|
||||
|
||||
- `TECH`: Technical Risks
|
||||
- `SEC`: Security Risks
|
||||
- `PERF`: Performance Risks
|
||||
- `DATA`: Data Risks
|
||||
- `BUS`: Business Risks
|
||||
- `OPS`: Operational Risks
|
||||
|
||||
1. **Technical Risks (TECH)**
|
||||
- Architecture complexity
|
||||
- Integration challenges
|
||||
- Technical debt
|
||||
- Scalability concerns
|
||||
- System dependencies
|
||||
|
||||
2. **Security Risks (SEC)**
|
||||
- Authentication/authorization flaws
|
||||
- Data exposure vulnerabilities
|
||||
- Injection attacks
|
||||
- Session management issues
|
||||
- Cryptographic weaknesses
|
||||
|
||||
3. **Performance Risks (PERF)**
|
||||
- Response time degradation
|
||||
- Throughput bottlenecks
|
||||
- Resource exhaustion
|
||||
- Database query optimization
|
||||
- Caching failures
|
||||
|
||||
4. **Data Risks (DATA)**
|
||||
- Data loss potential
|
||||
- Data corruption
|
||||
- Privacy violations
|
||||
- Compliance issues
|
||||
- Backup/recovery gaps
|
||||
|
||||
5. **Business Risks (BUS)**
|
||||
- Feature doesn't meet user needs
|
||||
- Revenue impact
|
||||
- Reputation damage
|
||||
- Regulatory non-compliance
|
||||
- Market timing
|
||||
|
||||
6. **Operational Risks (OPS)**
|
||||
- Deployment failures
|
||||
- Monitoring gaps
|
||||
- Incident response readiness
|
||||
- Documentation inadequacy
|
||||
- Knowledge transfer issues
|
||||
|
||||
## Risk Analysis Process
|
||||
|
||||
### 1. Risk Identification
|
||||
|
||||
For each category, identify specific risks:
|
||||
|
||||
```yaml
|
||||
risk:
|
||||
id: 'SEC-001' # Use prefixes: SEC, PERF, DATA, BUS, OPS, TECH
|
||||
category: security
|
||||
title: 'Insufficient input validation on user forms'
|
||||
description: 'Form inputs not properly sanitized could lead to XSS attacks'
|
||||
affected_components:
|
||||
- 'UserRegistrationForm'
|
||||
- 'ProfileUpdateForm'
|
||||
detection_method: 'Code review revealed missing validation'
|
||||
```
|
||||
|
||||
### 2. Risk Assessment
|
||||
|
||||
Evaluate each risk using probability × impact:
|
||||
|
||||
**Probability Levels:**
|
||||
|
||||
- `High (3)`: Likely to occur (>70% chance)
|
||||
- `Medium (2)`: Possible occurrence (30-70% chance)
|
||||
- `Low (1)`: Unlikely to occur (<30% chance)
|
||||
|
||||
**Impact Levels:**
|
||||
|
||||
- `High (3)`: Severe consequences (data breach, system down, major financial loss)
|
||||
- `Medium (2)`: Moderate consequences (degraded performance, minor data issues)
|
||||
- `Low (1)`: Minor consequences (cosmetic issues, slight inconvenience)
|
||||
|
||||
### Risk Score = Probability × Impact
|
||||
|
||||
- 9: Critical Risk (Red)
|
||||
- 6: High Risk (Orange)
|
||||
- 4: Medium Risk (Yellow)
|
||||
- 2-3: Low Risk (Green)
|
||||
- 1: Minimal Risk (Blue)
|
||||
|
||||
### 3. Risk Prioritization
|
||||
|
||||
Create risk matrix:
|
||||
|
||||
```markdown
|
||||
## Risk Matrix
|
||||
|
||||
| Risk ID | Description | Probability | Impact | Score | Priority |
|
||||
| -------- | ----------------------- | ----------- | ---------- | ----- | -------- |
|
||||
| SEC-001 | XSS vulnerability | High (3) | High (3) | 9 | Critical |
|
||||
| PERF-001 | Slow query on dashboard | Medium (2) | Medium (2) | 4 | Medium |
|
||||
| DATA-001 | Backup failure | Low (1) | High (3) | 3 | Low |
|
||||
```
|
||||
|
||||
### 4. Risk Mitigation Strategies
|
||||
|
||||
For each identified risk, provide mitigation:
|
||||
|
||||
```yaml
|
||||
mitigation:
|
||||
risk_id: 'SEC-001'
|
||||
strategy: 'preventive' # preventive|detective|corrective
|
||||
actions:
|
||||
- 'Implement input validation library (e.g., validator.js)'
|
||||
- 'Add CSP headers to prevent XSS execution'
|
||||
- 'Sanitize all user inputs before storage'
|
||||
- 'Escape all outputs in templates'
|
||||
testing_requirements:
|
||||
- 'Security testing with OWASP ZAP'
|
||||
- 'Manual penetration testing of forms'
|
||||
- 'Unit tests for validation functions'
|
||||
residual_risk: 'Low - Some zero-day vulnerabilities may remain'
|
||||
owner: 'dev'
|
||||
timeline: 'Before deployment'
|
||||
```
|
||||
|
||||
## Outputs
|
||||
|
||||
### Output 1: Gate YAML Block
|
||||
|
||||
Generate for pasting into gate file under `risk_summary`:
|
||||
|
||||
**Output rules:**
|
||||
|
||||
- Only include assessed risks; do not emit placeholders
|
||||
- Sort risks by score (desc) when emitting highest and any tabular lists
|
||||
- If no risks: totals all zeros, omit highest, keep recommendations arrays empty
|
||||
|
||||
```yaml
|
||||
# risk_summary (paste into gate file):
|
||||
risk_summary:
|
||||
totals:
|
||||
critical: X # score 9
|
||||
high: Y # score 6
|
||||
medium: Z # score 4
|
||||
low: W # score 2-3
|
||||
highest:
|
||||
id: SEC-001
|
||||
score: 9
|
||||
title: 'XSS on profile form'
|
||||
recommendations:
|
||||
must_fix:
|
||||
- 'Add input sanitization & CSP'
|
||||
monitor:
|
||||
- 'Add security alerts for auth endpoints'
|
||||
```
|
||||
|
||||
### Output 2: Markdown Report
|
||||
|
||||
**Save to:** `qa.qaLocation/assessments/{epic}.{story}-risk-{YYYYMMDD}.md`
|
||||
|
||||
```markdown
|
||||
# Risk Profile: Story {epic}.{story}
|
||||
|
||||
Date: {date}
|
||||
Reviewer: Quinn (Test Architect)
|
||||
|
||||
## Executive Summary
|
||||
|
||||
- Total Risks Identified: X
|
||||
- Critical Risks: Y
|
||||
- High Risks: Z
|
||||
- Risk Score: XX/100 (calculated)
|
||||
|
||||
## Critical Risks Requiring Immediate Attention
|
||||
|
||||
### 1. [ID]: Risk Title
|
||||
|
||||
**Score: 9 (Critical)**
|
||||
**Probability**: High - Detailed reasoning
|
||||
**Impact**: High - Potential consequences
|
||||
**Mitigation**:
|
||||
|
||||
- Immediate action required
|
||||
- Specific steps to take
|
||||
**Testing Focus**: Specific test scenarios needed
|
||||
|
||||
## Risk Distribution
|
||||
|
||||
### By Category
|
||||
|
||||
- Security: X risks (Y critical)
|
||||
- Performance: X risks (Y critical)
|
||||
- Data: X risks (Y critical)
|
||||
- Business: X risks (Y critical)
|
||||
- Operational: X risks (Y critical)
|
||||
|
||||
### By Component
|
||||
|
||||
- Frontend: X risks
|
||||
- Backend: X risks
|
||||
- Database: X risks
|
||||
- Infrastructure: X risks
|
||||
|
||||
## Detailed Risk Register
|
||||
|
||||
[Full table of all risks with scores and mitigations]
|
||||
|
||||
## Risk-Based Testing Strategy
|
||||
|
||||
### Priority 1: Critical Risk Tests
|
||||
|
||||
- Test scenarios for critical risks
|
||||
- Required test types (security, load, chaos)
|
||||
- Test data requirements
|
||||
|
||||
### Priority 2: High Risk Tests
|
||||
|
||||
- Integration test scenarios
|
||||
- Edge case coverage
|
||||
|
||||
### Priority 3: Medium/Low Risk Tests
|
||||
|
||||
- Standard functional tests
|
||||
- Regression test suite
|
||||
|
||||
## Risk Acceptance Criteria
|
||||
|
||||
### Must Fix Before Production
|
||||
|
||||
- All critical risks (score 9)
|
||||
- High risks affecting security/data
|
||||
|
||||
### Can Deploy with Mitigation
|
||||
|
||||
- Medium risks with compensating controls
|
||||
- Low risks with monitoring in place
|
||||
|
||||
### Accepted Risks
|
||||
|
||||
- Document any risks team accepts
|
||||
- Include sign-off from appropriate authority
|
||||
|
||||
## Monitoring Requirements
|
||||
|
||||
Post-deployment monitoring for:
|
||||
|
||||
- Performance metrics for PERF risks
|
||||
- Security alerts for SEC risks
|
||||
- Error rates for operational risks
|
||||
- Business KPIs for business risks
|
||||
|
||||
## Risk Review Triggers
|
||||
|
||||
Review and update risk profile when:
|
||||
|
||||
- Architecture changes significantly
|
||||
- New integrations added
|
||||
- Security vulnerabilities discovered
|
||||
- Performance issues reported
|
||||
- Regulatory requirements change
|
||||
```
|
||||
|
||||
## Risk Scoring Algorithm
|
||||
|
||||
Calculate overall story risk score:
|
||||
|
||||
```text
|
||||
Base Score = 100
|
||||
For each risk:
|
||||
- Critical (9): Deduct 20 points
|
||||
- High (6): Deduct 10 points
|
||||
- Medium (4): Deduct 5 points
|
||||
- Low (2-3): Deduct 2 points
|
||||
|
||||
Minimum score = 0 (extremely risky)
|
||||
Maximum score = 100 (minimal risk)
|
||||
```
|
||||
|
||||
## Risk-Based Recommendations
|
||||
|
||||
Based on risk profile, recommend:
|
||||
|
||||
1. **Testing Priority**
|
||||
- Which tests to run first
|
||||
- Additional test types needed
|
||||
- Test environment requirements
|
||||
|
||||
2. **Development Focus**
|
||||
- Code review emphasis areas
|
||||
- Additional validation needed
|
||||
- Security controls to implement
|
||||
|
||||
3. **Deployment Strategy**
|
||||
- Phased rollout for high-risk changes
|
||||
- Feature flags for risky features
|
||||
- Rollback procedures
|
||||
|
||||
4. **Monitoring Setup**
|
||||
- Metrics to track
|
||||
- Alerts to configure
|
||||
- Dashboard requirements
|
||||
|
||||
## Integration with Quality Gates
|
||||
|
||||
**Deterministic gate mapping:**
|
||||
|
||||
- Any risk with score ≥ 9 → Gate = FAIL (unless waived)
|
||||
- Else if any score ≥ 6 → Gate = CONCERNS
|
||||
- Else → Gate = PASS
|
||||
- Unmitigated risks → Document in gate
|
||||
|
||||
### Output 3: Story Hook Line
|
||||
|
||||
**Print this line for review task to quote:**
|
||||
|
||||
```text
|
||||
Risk profile: qa.qaLocation/assessments/{epic}.{story}-risk-{YYYYMMDD}.md
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
- Identify risks early and systematically
|
||||
- Use consistent probability × impact scoring
|
||||
- Provide actionable mitigation strategies
|
||||
- Link risks to specific test requirements
|
||||
- Track residual risk after mitigation
|
||||
- Update risk profile as story evolves
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# test-design
|
||||
|
||||
Create comprehensive test scenarios with appropriate test level recommendations for story implementation.
|
||||
|
||||
## Inputs
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Purpose
|
||||
|
||||
Design a complete test strategy that identifies what to test, at which level (unit/integration/e2e), and why. This ensures efficient test coverage without redundancy while maintaining appropriate test boundaries.
|
||||
|
||||
## Dependencies
|
||||
|
||||
```yaml
|
||||
data:
|
||||
- test-levels-framework.md # Unit/Integration/E2E decision criteria
|
||||
- test-priorities-matrix.md # P0/P1/P2/P3 classification system
|
||||
```
|
||||
|
||||
## Process
|
||||
|
||||
### 1. Analyze Story Requirements
|
||||
|
||||
Break down each acceptance criterion into testable scenarios. For each AC:
|
||||
|
||||
- Identify the core functionality to test
|
||||
- Determine data variations needed
|
||||
- Consider error conditions
|
||||
- Note edge cases
|
||||
|
||||
### 2. Apply Test Level Framework
|
||||
|
||||
**Reference:** Load `test-levels-framework.md` for detailed criteria
|
||||
|
||||
Quick rules:
|
||||
|
||||
- **Unit**: Pure logic, algorithms, calculations
|
||||
- **Integration**: Component interactions, DB operations
|
||||
- **E2E**: Critical user journeys, compliance
|
||||
|
||||
### 3. Assign Priorities
|
||||
|
||||
**Reference:** Load `test-priorities-matrix.md` for classification
|
||||
|
||||
Quick priority assignment:
|
||||
|
||||
- **P0**: Revenue-critical, security, compliance
|
||||
- **P1**: Core user journeys, frequently used
|
||||
- **P2**: Secondary features, admin functions
|
||||
- **P3**: Nice-to-have, rarely used
|
||||
|
||||
### 4. Design Test Scenarios
|
||||
|
||||
For each identified test need, create:
|
||||
|
||||
```yaml
|
||||
test_scenario:
|
||||
id: '{epic}.{story}-{LEVEL}-{SEQ}'
|
||||
requirement: 'AC reference'
|
||||
priority: P0|P1|P2|P3
|
||||
level: unit|integration|e2e
|
||||
description: 'What is being tested'
|
||||
justification: 'Why this level was chosen'
|
||||
mitigates_risks: ['RISK-001'] # If risk profile exists
|
||||
```
|
||||
|
||||
### 5. Validate Coverage
|
||||
|
||||
Ensure:
|
||||
|
||||
- Every AC has at least one test
|
||||
- No duplicate coverage across levels
|
||||
- Critical paths have multiple levels
|
||||
- Risk mitigations are addressed
|
||||
|
||||
## Outputs
|
||||
|
||||
### Output 1: Test Design Document
|
||||
|
||||
**Save to:** `qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md`
|
||||
|
||||
```markdown
|
||||
# Test Design: Story {epic}.{story}
|
||||
|
||||
Date: {date}
|
||||
Designer: Quinn (Test Architect)
|
||||
|
||||
## Test Strategy Overview
|
||||
|
||||
- Total test scenarios: X
|
||||
- Unit tests: Y (A%)
|
||||
- Integration tests: Z (B%)
|
||||
- E2E tests: W (C%)
|
||||
- Priority distribution: P0: X, P1: Y, P2: Z
|
||||
|
||||
## Test Scenarios by Acceptance Criteria
|
||||
|
||||
### AC1: {description}
|
||||
|
||||
#### Scenarios
|
||||
|
||||
| ID | Level | Priority | Test | Justification |
|
||||
| ------------ | ----------- | -------- | ------------------------- | ------------------------ |
|
||||
| 1.3-UNIT-001 | Unit | P0 | Validate input format | Pure validation logic |
|
||||
| 1.3-INT-001 | Integration | P0 | Service processes request | Multi-component flow |
|
||||
| 1.3-E2E-001 | E2E | P1 | User completes journey | Critical path validation |
|
||||
|
||||
[Continue for all ACs...]
|
||||
|
||||
## Risk Coverage
|
||||
|
||||
[Map test scenarios to identified risks if risk profile exists]
|
||||
|
||||
## Recommended Execution Order
|
||||
|
||||
1. P0 Unit tests (fail fast)
|
||||
2. P0 Integration tests
|
||||
3. P0 E2E tests
|
||||
4. P1 tests in order
|
||||
5. P2+ as time permits
|
||||
```
|
||||
|
||||
### Output 2: Gate YAML Block
|
||||
|
||||
Generate for inclusion in quality gate:
|
||||
|
||||
```yaml
|
||||
test_design:
|
||||
scenarios_total: X
|
||||
by_level:
|
||||
unit: Y
|
||||
integration: Z
|
||||
e2e: W
|
||||
by_priority:
|
||||
p0: A
|
||||
p1: B
|
||||
p2: C
|
||||
coverage_gaps: [] # List any ACs without tests
|
||||
```
|
||||
|
||||
### Output 3: Trace References
|
||||
|
||||
Print for use by trace-requirements task:
|
||||
|
||||
```text
|
||||
Test design matrix: qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md
|
||||
P0 tests identified: {count}
|
||||
```
|
||||
|
||||
## Quality Checklist
|
||||
|
||||
Before finalizing, verify:
|
||||
|
||||
- [ ] Every AC has test coverage
|
||||
- [ ] Test levels are appropriate (not over-testing)
|
||||
- [ ] No duplicate coverage across levels
|
||||
- [ ] Priorities align with business risk
|
||||
- [ ] Test IDs follow naming convention
|
||||
- [ ] Scenarios are atomic and independent
|
||||
|
||||
## Key Principles
|
||||
|
||||
- **Shift left**: Prefer unit over integration, integration over E2E
|
||||
- **Risk-based**: Focus on what could go wrong
|
||||
- **Efficient coverage**: Test once at the right level
|
||||
- **Maintainability**: Consider long-term test maintenance
|
||||
- **Fast feedback**: Quick tests run first
|
||||
|
|
@ -0,0 +1,266 @@
|
|||
<!-- Powered by BMAD™ Core -->
|
||||
|
||||
# trace-requirements
|
||||
|
||||
Map story requirements to test cases using Given-When-Then patterns for comprehensive traceability.
|
||||
|
||||
## Purpose
|
||||
|
||||
Create a requirements traceability matrix that ensures every acceptance criterion has corresponding test coverage. This task helps identify gaps in testing and ensures all requirements are validated.
|
||||
|
||||
**IMPORTANT**: Given-When-Then is used here for documenting the mapping between requirements and tests, NOT for writing the actual test code. Tests should follow your project's testing standards (no BDD syntax in test code).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Story file with clear acceptance criteria
|
||||
- Access to test files or test specifications
|
||||
- Understanding of the implementation
|
||||
|
||||
## Traceability Process
|
||||
|
||||
### 1. Extract Requirements
|
||||
|
||||
Identify all testable requirements from:
|
||||
|
||||
- Acceptance Criteria (primary source)
|
||||
- User story statement
|
||||
- Tasks/subtasks with specific behaviors
|
||||
- Non-functional requirements mentioned
|
||||
- Edge cases documented
|
||||
|
||||
### 2. Map to Test Cases
|
||||
|
||||
For each requirement, document which tests validate it. Use Given-When-Then to describe what the test validates (not how it's written):
|
||||
|
||||
```yaml
|
||||
requirement: 'AC1: User can login with valid credentials'
|
||||
test_mappings:
|
||||
- test_file: 'auth/login.test.ts'
|
||||
test_case: 'should successfully login with valid email and password'
|
||||
# Given-When-Then describes WHAT the test validates, not HOW it's coded
|
||||
given: 'A registered user with valid credentials'
|
||||
when: 'They submit the login form'
|
||||
then: 'They are redirected to dashboard and session is created'
|
||||
coverage: full
|
||||
|
||||
- test_file: 'e2e/auth-flow.test.ts'
|
||||
test_case: 'complete login flow'
|
||||
given: 'User on login page'
|
||||
when: 'Entering valid credentials and submitting'
|
||||
then: 'Dashboard loads with user data'
|
||||
coverage: integration
|
||||
```
|
||||
|
||||
### 3. Coverage Analysis
|
||||
|
||||
Evaluate coverage for each requirement:
|
||||
|
||||
**Coverage Levels:**
|
||||
|
||||
- `full`: Requirement completely tested
|
||||
- `partial`: Some aspects tested, gaps exist
|
||||
- `none`: No test coverage found
|
||||
- `integration`: Covered in integration/e2e tests only
|
||||
- `unit`: Covered in unit tests only
|
||||
|
||||
### 4. Gap Identification
|
||||
|
||||
Document any gaps found:
|
||||
|
||||
```yaml
|
||||
coverage_gaps:
|
||||
- requirement: 'AC3: Password reset email sent within 60 seconds'
|
||||
gap: 'No test for email delivery timing'
|
||||
severity: medium
|
||||
suggested_test:
|
||||
type: integration
|
||||
description: 'Test email service SLA compliance'
|
||||
|
||||
- requirement: 'AC5: Support 1000 concurrent users'
|
||||
gap: 'No load testing implemented'
|
||||
severity: high
|
||||
suggested_test:
|
||||
type: performance
|
||||
description: 'Load test with 1000 concurrent connections'
|
||||
```
|
||||
|
||||
## Outputs
|
||||
|
||||
### Output 1: Gate YAML Block
|
||||
|
||||
**Generate for pasting into gate file under `trace`:**
|
||||
|
||||
```yaml
|
||||
trace:
|
||||
totals:
|
||||
requirements: X
|
||||
full: Y
|
||||
partial: Z
|
||||
none: W
|
||||
planning_ref: 'qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md'
|
||||
uncovered:
|
||||
- ac: 'AC3'
|
||||
reason: 'No test found for password reset timing'
|
||||
notes: 'See qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md'
|
||||
```
|
||||
|
||||
### Output 2: Traceability Report
|
||||
|
||||
**Save to:** `qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md`
|
||||
|
||||
Create a traceability report with:
|
||||
|
||||
```markdown
|
||||
# Requirements Traceability Matrix
|
||||
|
||||
## Story: {epic}.{story} - {title}
|
||||
|
||||
### Coverage Summary
|
||||
|
||||
- Total Requirements: X
|
||||
- Fully Covered: Y (Z%)
|
||||
- Partially Covered: A (B%)
|
||||
- Not Covered: C (D%)
|
||||
|
||||
### Requirement Mappings
|
||||
|
||||
#### AC1: {Acceptance Criterion 1}
|
||||
|
||||
**Coverage: FULL**
|
||||
|
||||
Given-When-Then Mappings:
|
||||
|
||||
- **Unit Test**: `auth.service.test.ts::validateCredentials`
|
||||
- Given: Valid user credentials
|
||||
- When: Validation method called
|
||||
- Then: Returns true with user object
|
||||
|
||||
- **Integration Test**: `auth.integration.test.ts::loginFlow`
|
||||
- Given: User with valid account
|
||||
- When: Login API called
|
||||
- Then: JWT token returned and session created
|
||||
|
||||
#### AC2: {Acceptance Criterion 2}
|
||||
|
||||
**Coverage: PARTIAL**
|
||||
|
||||
[Continue for all ACs...]
|
||||
|
||||
### Critical Gaps
|
||||
|
||||
1. **Performance Requirements**
|
||||
- Gap: No load testing for concurrent users
|
||||
- Risk: High - Could fail under production load
|
||||
- Action: Implement load tests using k6 or similar
|
||||
|
||||
2. **Security Requirements**
|
||||
- Gap: Rate limiting not tested
|
||||
- Risk: Medium - Potential DoS vulnerability
|
||||
- Action: Add rate limit tests to integration suite
|
||||
|
||||
### Test Design Recommendations
|
||||
|
||||
Based on gaps identified, recommend:
|
||||
|
||||
1. Additional test scenarios needed
|
||||
2. Test types to implement (unit/integration/e2e/performance)
|
||||
3. Test data requirements
|
||||
4. Mock/stub strategies
|
||||
|
||||
### Risk Assessment
|
||||
|
||||
- **High Risk**: Requirements with no coverage
|
||||
- **Medium Risk**: Requirements with only partial coverage
|
||||
- **Low Risk**: Requirements with full unit + integration coverage
|
||||
```
|
||||
|
||||
## Traceability Best Practices
|
||||
|
||||
### Given-When-Then for Mapping (Not Test Code)
|
||||
|
||||
Use Given-When-Then to document what each test validates:
|
||||
|
||||
**Given**: The initial context the test sets up
|
||||
|
||||
- What state/data the test prepares
|
||||
- User context being simulated
|
||||
- System preconditions
|
||||
|
||||
**When**: The action the test performs
|
||||
|
||||
- What the test executes
|
||||
- API calls or user actions tested
|
||||
- Events triggered
|
||||
|
||||
**Then**: What the test asserts
|
||||
|
||||
- Expected outcomes verified
|
||||
- State changes checked
|
||||
- Values validated
|
||||
|
||||
**Note**: This is for documentation only. Actual test code follows your project's standards (e.g., describe/it blocks, no BDD syntax).
|
||||
|
||||
### Coverage Priority
|
||||
|
||||
Prioritize coverage based on:
|
||||
|
||||
1. Critical business flows
|
||||
2. Security-related requirements
|
||||
3. Data integrity requirements
|
||||
4. User-facing features
|
||||
5. Performance SLAs
|
||||
|
||||
### Test Granularity
|
||||
|
||||
Map at appropriate levels:
|
||||
|
||||
- Unit tests for business logic
|
||||
- Integration tests for component interaction
|
||||
- E2E tests for user journeys
|
||||
- Performance tests for NFRs
|
||||
|
||||
## Quality Indicators
|
||||
|
||||
Good traceability shows:
|
||||
|
||||
- Every AC has at least one test
|
||||
- Critical paths have multiple test levels
|
||||
- Edge cases are explicitly covered
|
||||
- NFRs have appropriate test types
|
||||
- Clear Given-When-Then for each test
|
||||
|
||||
## Red Flags
|
||||
|
||||
Watch for:
|
||||
|
||||
- ACs with no test coverage
|
||||
- Tests that don't map to requirements
|
||||
- Vague test descriptions
|
||||
- Missing edge case coverage
|
||||
- NFRs without specific tests
|
||||
|
||||
## Integration with Gates
|
||||
|
||||
This traceability feeds into quality gates:
|
||||
|
||||
- Critical gaps → FAIL
|
||||
- Minor gaps → CONCERNS
|
||||
- Missing P0 tests from test-design → CONCERNS
|
||||
|
||||
### Output 3: Story Hook Line
|
||||
|
||||
**Print this line for review task to quote:**
|
||||
|
||||
```text
|
||||
Trace matrix: qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md
|
||||
```
|
||||
|
||||
- Full coverage → PASS contribution
|
||||
|
||||
## Key Principles
|
||||
|
||||
- Every requirement must be testable
|
||||
- Use Given-When-Then for clarity
|
||||
- Identify both presence and absence
|
||||
- Prioritize based on risk
|
||||
- Make recommendations actionable
|
||||
Loading…
Reference in New Issue