Back to list
ilandahan

role-qa-engineer

by ilandahan

AID - AI Development process - Complete methodology for AI-assisted full-stack software development. E2E process from raw ideas to deploy.

7🍴 1📅 Jan 22, 2026

SKILL.md


name: role-qa-engineer description: QA Engineer role in AID methodology. Use for test strategy, BDD scenarios, bug reporting, acceptance testing, flaky test prevention.

QA Engineer Role

Core Responsibilities

  • Design test strategies (TDD + BDD)
  • Write BDD scenarios in Gherkin
  • Identify edge cases and failures
  • Validate acceptance criteria
  • Ensure realistic test data
  • Prevent flaky tests
  • Investigate bugs systematically

Phase Focus

PhaseFocusOutput
DiscoveryTestabilityQuality risks
PRDRequirements reviewTest plan, testable criteria
Tech SpecTest architectureStrategy, environment
DevelopmentTest implementationTest cases, bug reports
QA & ShipFinal validationResults, sign-off

BDD with Gherkin

Feature: User Authentication

  Scenario: Successful login
    Given I am on login page
    When I enter valid credentials
    Then I should see dashboard

Flaky Test Prevention

NO ARBITRARY TIMEOUTS.

// Wrong
await sleep(100);

// Right
await waitFor(() => result !== undefined);

Test Pollution

TypeFix
Shared stateReset in beforeEach
File systemUse temp dirs
DatabaseTransaction rollback
Global mocksRestore in afterEach

Test Independence

Every test must pass alone AND with others in any order.

// Wrong - shared state
let user;
beforeAll(() => { user = createUser(); });

// Right - fresh state
beforeEach(() => { user = createUser(); });

Realistic Test Data

CategoryExamples
UnicodeJose, Japanese, emojis
BoundariesEmpty, 1 char, max
SpecialO'Brien, , "quotes"
Numbers0, -1, MAX_INT

Bug Investigation

1. REPRODUCE - Exact steps, consistent?
2. ISOLATE - Minimal reproduction
3. DOCUMENT - Clear report with evidence

Bug Report Template

**Title**: [Action] + [Problem] + [Context]
**Severity**: Critical/Major/Minor
**Reproducibility**: Always/Sometimes/Once

### Steps to Reproduce
### Expected vs Actual
### Evidence

Anti-Patterns

Anti-PatternFix
Happy path onlyTest failures
Fake test dataRealistic data
Arbitrary timeoutsCondition-based
Order-dependentFresh state
Over-mockingReal dependencies
Technical GherkinBusiness language
Hardcoded credentialsUse env vars/factories
Weak assertionsCheck specific values
Messy organizationFollow directory structure

Test Code Organization

Directory Structure (Required)

tests/
├── unit/           # Fast, isolated tests
│   ├── services/
│   └── utils/
├── integration/    # Real dependencies
│   ├── api/
│   └── db/
├── e2e/            # End-to-end flows
├── fixtures/       # Test data factories
└── setup/          # Global configuration

File Naming Conventions

TypePatternExample
Unit*.test.tsuser-service.test.ts
Integration*.integration.test.tsapi.integration.test.ts
E2E*.e2e.test.tslogin-flow.e2e.test.ts

Test Naming

// Format: should_[behavior]_when_[condition]
test('should_return_error_when_email_invalid', () => {});

Security in Test Code

IRON RULE: NO HARDCODED CREDENTIALS

// ❌ NEVER
const user = { email: 'admin@real.com', password: 'secret123' };

// ✅ ALWAYS
const user = {
  email: process.env.TEST_EMAIL || 'test@example.com',
  password: process.env.TEST_PASSWORD || 'test-only-pwd'
};

Security Checklist

  • No real passwords in code
  • No real API keys in tests
  • No credentials in README
  • Use .env.test (gitignored)
  • Use factories with fake data

See references/security-in-tests.md for patterns.


Test Independence Verification

Before Completion - MUST Verify:

  1. Run in random order:

    jest --runInBand --randomize
    vitest --sequence.shuffle
    pytest --randomly-seed=random
    
  2. Run single test isolated:

    jest --testNamePattern="specific test"
    
  3. No shared state:

    • No let at describe level
    • Setup in beforeEach, not beforeAll
    • Cleanup in afterEach

Run All Tests Requirement

IRON RULE: ALL TESTS MUST PASS

Before marking ANY task complete:

npm test  # Full suite must pass

If Tests Fail:

  1. STOP - do not mark complete
  2. Check if your change caused it
  3. Fix before proceeding

Regression Checklist

  • All tests passed BEFORE changes
  • All tests pass AFTER changes
  • Ran multiple times (flaky check)

Assertion Quality

Test Your Tests

// 1. Comment out code being tested
// 2. Run test - MUST FAIL
// 3. Uncomment - MUST PASS

Strong vs Weak Assertions

// ❌ Weak - always passes
expect(result).toBeDefined();
expect(response).toBeTruthy();

// ✅ Strong - can fail
expect(result).toEqual({ id: 1, name: 'User' });
expect(response.status).toBe(200);
expect(items).toHaveLength(3);

Assertion Checklist

  • Tests call the function being tested
  • Assert specific values, not just existence
  • Error paths have assertions
  • At least one assertion per test

Handoff Checklist

Test Coverage

  • All acceptance criteria have tests
  • BDD scenarios for user stories
  • Edge cases tested
  • Realistic test data

Test Quality

  • Tests independent (verified with random order)
  • No arbitrary timeouts
  • No flaky tests
  • Strong assertions (specific values)

Security

  • No hardcoded credentials
  • No real API keys
  • No secrets in README

Organization

  • Tests in correct directories (unit/integration/e2e)
  • File naming follows conventions
  • ALL existing tests still pass

Score

Total Score

70/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon