Skip to content
cccskills
FreePublished on GitHub

role-qa-engineer

QA Engineer role in AID methodology. Use for test strategy, BDD scenarios, bug reporting, acceptance testing, flaky test prevention.

The English summary is being prepared. Showing the original description.

See how to install

Files included (10)

  • SKILL.md5.7 KB
  • references/bdd-gherkin-guide.md13.9 KB
  • references/bug-investigation-checklist.md5.3 KB
  • references/code-organization-standards.md8.2 KB
  • references/condition-based-waiting.ts7.9 KB
  • references/security-in-tests.md6.2 KB
  • references/test-data-examples.md8.7 KB
  • references/test-verification-checklist.md7.2 KB
  • scripts/find-polluter.sh3.9 KB
  • SKILL.extended.md14.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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(); });

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

Realistic Test Data

CategoryExamples
UnicodeJose, Japanese, emojis
BoundariesEmpty, 1 char, max
SpecialO'Brien, <script>, "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
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.

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
// ❌ 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

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

AID Phase 4 - Development phase. Use for implementing features, TDD practices, code reviews, transitioning from planning to QA.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

AID Phase 0 - Research & discovery. Use for validating problem spaces, identifying stakeholders, defining success metrics, deciding whether to proceed.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

AID Phase 3 - Implementation Planning with consolidation-first approach. Resolves contradictions between PRD and Tech Spec, creates consolidated master document, then breaks down into actionable tasks and populates Jira. Includes sprint planning and risk assessment.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

AID Phase 1 - PRD creation. Use for user stories, acceptance criteria, scoping features, transitioning from discovery to tech spec.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

AID Phase 5 - QA and Release. Use for validating implementations, acceptance tests, preparing releases, deployment, operational readiness.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

AID Phase 2 - Technical Specification. Use for system architecture, API contracts, data models, security architecture, transitioning from PRD to implementation.

The English summary is being prepared. Showing the original description.

ilandahan/AID10Updated Sep 23, 2026

See all skills by ilandahan

Report a problem with this skill