agentic-team-templates 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +1 -1
- package/templates/product-manager/.cursorrules/communication.md +353 -0
- package/templates/product-manager/.cursorrules/discovery.md +258 -0
- package/templates/product-manager/.cursorrules/metrics.md +319 -0
- package/templates/product-manager/.cursorrules/overview.md +95 -0
- package/templates/product-manager/.cursorrules/prioritization.md +240 -0
- package/templates/product-manager/.cursorrules/requirements.md +371 -0
- package/templates/product-manager/CLAUDE.md +593 -0
- package/templates/qa-engineering/.cursorrules/automation.md +460 -0
- package/templates/qa-engineering/.cursorrules/metrics.md +292 -0
- package/templates/qa-engineering/.cursorrules/overview.md +125 -0
- package/templates/qa-engineering/.cursorrules/quality-gates.md +372 -0
- package/templates/qa-engineering/.cursorrules/test-design.md +301 -0
- package/templates/qa-engineering/.cursorrules/test-strategy.md +218 -0
- package/templates/qa-engineering/CLAUDE.md +726 -0
|
@@ -0,0 +1,726 @@
|
|
|
1
|
+
# QA Engineering Development Guide
|
|
2
|
+
|
|
3
|
+
Principal-level guidelines for building world-class quality assurance programs that enable rapid, confident software delivery.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
This guide applies to:
|
|
10
|
+
|
|
11
|
+
- Test strategy and planning
|
|
12
|
+
- Test case design and execution
|
|
13
|
+
- Test automation architecture
|
|
14
|
+
- Quality metrics and reporting
|
|
15
|
+
- Release quality gates
|
|
16
|
+
- QA process governance
|
|
17
|
+
- Cross-functional quality collaboration
|
|
18
|
+
|
|
19
|
+
### Key Principles
|
|
20
|
+
|
|
21
|
+
1. **Quality is Everyone's Responsibility** - QA enables quality; the whole team owns it
|
|
22
|
+
2. **Shift Left** - Find defects early when they're cheapest to fix
|
|
23
|
+
3. **Risk-Based Testing** - Focus effort where failures cost the most
|
|
24
|
+
4. **Automation as Accelerator** - Automate the repeatable; humans do the creative
|
|
25
|
+
5. **Continuous Improvement** - Measure, learn, adapt
|
|
26
|
+
|
|
27
|
+
### Testing Pyramid
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
┌─────────────┐
|
|
31
|
+
│ E2E │ ~10% - Critical user journeys
|
|
32
|
+
│ (Manual │ Slow, expensive, high confidence
|
|
33
|
+
│ + Automated)│
|
|
34
|
+
├─────────────┤
|
|
35
|
+
│ │
|
|
36
|
+
│ Integration │ ~30% - Component interactions
|
|
37
|
+
│ │ Medium speed, good confidence
|
|
38
|
+
├─────────────┤
|
|
39
|
+
│ │
|
|
40
|
+
│ Unit │ ~60% - Individual functions
|
|
41
|
+
│ │ Fast, cheap, immediate feedback
|
|
42
|
+
└─────────────┘
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Technology Stack
|
|
46
|
+
|
|
47
|
+
| Layer | Tools |
|
|
48
|
+
|-------|-------|
|
|
49
|
+
| Unit Testing | Jest, Vitest, pytest, JUnit, Go test |
|
|
50
|
+
| Integration Testing | Supertest, pytest, TestContainers |
|
|
51
|
+
| E2E Testing | Playwright, Cypress, Selenium |
|
|
52
|
+
| API Testing | Postman, REST Assured, k6 |
|
|
53
|
+
| Performance Testing | k6, Gatling, JMeter, Locust |
|
|
54
|
+
| Security Testing | OWASP ZAP, Burp Suite, Snyk |
|
|
55
|
+
| Visual Testing | Percy, Chromatic, Applitools |
|
|
56
|
+
| Test Management | TestRail, Zephyr, qTest |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Test Strategy
|
|
61
|
+
|
|
62
|
+
### Strategy Document Template
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
# Test Strategy: [Project/Product Name]
|
|
66
|
+
|
|
67
|
+
## Scope
|
|
68
|
+
|
|
69
|
+
### In Scope
|
|
70
|
+
- [Feature/Component 1]
|
|
71
|
+
- [Feature/Component 2]
|
|
72
|
+
|
|
73
|
+
### Out of Scope
|
|
74
|
+
- [Explicitly excluded items]
|
|
75
|
+
|
|
76
|
+
## Risk Assessment
|
|
77
|
+
|
|
78
|
+
| Risk Area | Impact | Likelihood | Priority | Testing Focus |
|
|
79
|
+
|-----------|--------|------------|----------|---------------|
|
|
80
|
+
| Payment processing | Critical | Medium | P0 | Extensive |
|
|
81
|
+
| User authentication | Critical | Low | P1 | Comprehensive |
|
|
82
|
+
| Reporting | Medium | Medium | P2 | Standard |
|
|
83
|
+
| Admin settings | Low | Low | P3 | Basic |
|
|
84
|
+
|
|
85
|
+
## Test Levels
|
|
86
|
+
|
|
87
|
+
| Level | Coverage | Automation | Responsibility |
|
|
88
|
+
|-------|----------|------------|----------------|
|
|
89
|
+
| Unit | 80%+ | 100% | Developers |
|
|
90
|
+
| Integration | Core flows | 90%+ | Dev + QA |
|
|
91
|
+
| E2E | Critical paths | 70%+ | QA |
|
|
92
|
+
| Exploratory | Risk areas | 0% | QA |
|
|
93
|
+
|
|
94
|
+
## Environment Strategy
|
|
95
|
+
|
|
96
|
+
| Environment | Purpose | Data | Refresh |
|
|
97
|
+
|-------------|---------|------|---------|
|
|
98
|
+
| Local | Development | Mocked | On demand |
|
|
99
|
+
| Dev | Integration | Synthetic | Daily |
|
|
100
|
+
| Staging | Pre-prod validation | Sanitized prod | Weekly |
|
|
101
|
+
| Production | Smoke tests only | Live | N/A |
|
|
102
|
+
|
|
103
|
+
## Entry/Exit Criteria
|
|
104
|
+
|
|
105
|
+
### Entry Criteria (Ready for QA)
|
|
106
|
+
- [ ] Code complete and merged
|
|
107
|
+
- [ ] Unit tests passing (80%+ coverage)
|
|
108
|
+
- [ ] Code review approved
|
|
109
|
+
- [ ] Deployment to test environment successful
|
|
110
|
+
- [ ] Test data available
|
|
111
|
+
|
|
112
|
+
### Exit Criteria (Ready for Release)
|
|
113
|
+
- [ ] All P0/P1 test cases passed
|
|
114
|
+
- [ ] No open P0/P1 defects
|
|
115
|
+
- [ ] Regression suite passing
|
|
116
|
+
- [ ] Performance benchmarks met
|
|
117
|
+
- [ ] Security scan clean
|
|
118
|
+
- [ ] Stakeholder sign-off
|
|
119
|
+
|
|
120
|
+
## Defect Management
|
|
121
|
+
|
|
122
|
+
| Severity | Definition | Response Time | Resolution |
|
|
123
|
+
|----------|------------|---------------|------------|
|
|
124
|
+
| P0 | System down, data loss | Immediate | Same day |
|
|
125
|
+
| P1 | Major feature broken | < 4 hours | 24-48 hours |
|
|
126
|
+
| P2 | Feature impaired | < 24 hours | Current sprint |
|
|
127
|
+
| P3 | Minor issue | < 48 hours | Next sprint |
|
|
128
|
+
| P4 | Cosmetic | Best effort | Backlog |
|
|
129
|
+
|
|
130
|
+
## Reporting
|
|
131
|
+
|
|
132
|
+
| Report | Audience | Frequency |
|
|
133
|
+
|--------|----------|-----------|
|
|
134
|
+
| Test Execution | Team | Daily |
|
|
135
|
+
| Quality Dashboard | Leadership | Weekly |
|
|
136
|
+
| Release Readiness | Stakeholders | Per release |
|
|
137
|
+
| Defect Trends | Team | Sprint retrospective |
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Test Design
|
|
143
|
+
|
|
144
|
+
### Test Case Structure
|
|
145
|
+
|
|
146
|
+
```markdown
|
|
147
|
+
## Test Case: [TC-XXX]
|
|
148
|
+
|
|
149
|
+
**Title**: [Clear, concise description]
|
|
150
|
+
|
|
151
|
+
**Priority**: P0 | P1 | P2 | P3
|
|
152
|
+
|
|
153
|
+
**Type**: Functional | Regression | Smoke | Integration | E2E
|
|
154
|
+
|
|
155
|
+
**Preconditions**:
|
|
156
|
+
- [Required state before test]
|
|
157
|
+
- [Required data setup]
|
|
158
|
+
|
|
159
|
+
**Test Steps**:
|
|
160
|
+
| Step | Action | Expected Result |
|
|
161
|
+
|------|--------|-----------------|
|
|
162
|
+
| 1 | [Action] | [Expected outcome] |
|
|
163
|
+
| 2 | [Action] | [Expected outcome] |
|
|
164
|
+
| 3 | [Action] | [Expected outcome] |
|
|
165
|
+
|
|
166
|
+
**Postconditions**:
|
|
167
|
+
- [State after test]
|
|
168
|
+
- [Cleanup required]
|
|
169
|
+
|
|
170
|
+
**Test Data**:
|
|
171
|
+
| Variable | Value |
|
|
172
|
+
|----------|-------|
|
|
173
|
+
| [Input 1] | [Value] |
|
|
174
|
+
| [Input 2] | [Value] |
|
|
175
|
+
|
|
176
|
+
**Traceability**: [Requirement ID / User Story]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Equivalence Partitioning
|
|
180
|
+
|
|
181
|
+
Divide inputs into groups that should behave the same:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
Input: Age (valid range 18-120)
|
|
185
|
+
|
|
186
|
+
Partitions:
|
|
187
|
+
├── Invalid: < 0 (negative)
|
|
188
|
+
├── Invalid: 0-17 (underage)
|
|
189
|
+
├── Valid: 18-120 (acceptable)
|
|
190
|
+
└── Invalid: > 120 (unrealistic)
|
|
191
|
+
|
|
192
|
+
Test Cases:
|
|
193
|
+
- Age = -1 → Error: Invalid age
|
|
194
|
+
- Age = 15 → Error: Must be 18+
|
|
195
|
+
- Age = 25 → Success
|
|
196
|
+
- Age = 150 → Error: Invalid age
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Boundary Value Analysis
|
|
200
|
+
|
|
201
|
+
Test at the edges of valid ranges:
|
|
202
|
+
|
|
203
|
+
```text
|
|
204
|
+
Input: Quantity (valid range 1-100)
|
|
205
|
+
|
|
206
|
+
Boundaries:
|
|
207
|
+
├── 0 → Invalid (just below minimum)
|
|
208
|
+
├── 1 → Valid (minimum)
|
|
209
|
+
├── 2 → Valid (just above minimum)
|
|
210
|
+
├── 99 → Valid (just below maximum)
|
|
211
|
+
├── 100 → Valid (maximum)
|
|
212
|
+
└── 101 → Invalid (just above maximum)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### State Transition Testing
|
|
216
|
+
|
|
217
|
+
```text
|
|
218
|
+
Order State Machine:
|
|
219
|
+
|
|
220
|
+
[Created] ──submit──> [Pending] ──approve──> [Approved] ──ship──> [Shipped]
|
|
221
|
+
│ │ │
|
|
222
|
+
│ │──reject──> [Rejected] │
|
|
223
|
+
│ │ │
|
|
224
|
+
└──cancel──> [Cancelled] <──cancel────────────┘
|
|
225
|
+
|
|
226
|
+
Test Cases:
|
|
227
|
+
1. Created → Pending (valid)
|
|
228
|
+
2. Pending → Approved (valid)
|
|
229
|
+
3. Pending → Rejected (valid)
|
|
230
|
+
4. Created → Approved (invalid - must go through Pending)
|
|
231
|
+
5. Shipped → Cancelled (invalid - too late to cancel)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Decision Table Testing
|
|
235
|
+
|
|
236
|
+
```text
|
|
237
|
+
Shipping Cost Rules:
|
|
238
|
+
|
|
239
|
+
| Condition | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|
|
240
|
+
|----------------------|--------|--------|--------|--------|
|
|
241
|
+
| Order > $50 | Y | Y | N | N |
|
|
242
|
+
| Prime Member | Y | N | Y | N |
|
|
243
|
+
| Shipping Cost | Free | Free | $5 | $10 |
|
|
244
|
+
|
|
245
|
+
Test Cases:
|
|
246
|
+
1. Order $60, Prime → Free shipping
|
|
247
|
+
2. Order $60, Not Prime → Free shipping
|
|
248
|
+
3. Order $40, Prime → $5 shipping
|
|
249
|
+
4. Order $40, Not Prime → $10 shipping
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Test Automation
|
|
255
|
+
|
|
256
|
+
### Automation Strategy
|
|
257
|
+
|
|
258
|
+
```text
|
|
259
|
+
Automate:
|
|
260
|
+
├── Regression tests (high frequency, stable)
|
|
261
|
+
├── Smoke tests (critical path validation)
|
|
262
|
+
├── Data-driven tests (many inputs, same flow)
|
|
263
|
+
├── API tests (fast, reliable)
|
|
264
|
+
└── Performance baselines (measurable thresholds)
|
|
265
|
+
|
|
266
|
+
Keep Manual:
|
|
267
|
+
├── Exploratory testing (creative, adaptive)
|
|
268
|
+
├── Usability testing (human judgment)
|
|
269
|
+
├── Edge cases (rare, complex scenarios)
|
|
270
|
+
├── New features (still changing)
|
|
271
|
+
└── Visual/UX validation (subjective)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Test Automation Pyramid
|
|
275
|
+
|
|
276
|
+
```javascript
|
|
277
|
+
// Unit Test Example (Base - Most Tests)
|
|
278
|
+
describe('calculateDiscount', () => {
|
|
279
|
+
it('applies 10% discount for orders over $100', () => {
|
|
280
|
+
expect(calculateDiscount(150)).toBe(15);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it('returns 0 for orders under $100', () => {
|
|
284
|
+
expect(calculateDiscount(50)).toBe(0);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('handles edge case at exactly $100', () => {
|
|
288
|
+
expect(calculateDiscount(100)).toBe(10);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
```javascript
|
|
294
|
+
// Integration Test Example (Middle Layer)
|
|
295
|
+
describe('Order API', () => {
|
|
296
|
+
it('creates order and applies discount', async () => {
|
|
297
|
+
const response = await request(app)
|
|
298
|
+
.post('/api/orders')
|
|
299
|
+
.send({ items: [{ id: 1, quantity: 2, price: 75 }] })
|
|
300
|
+
.expect(201);
|
|
301
|
+
|
|
302
|
+
expect(response.body.subtotal).toBe(150);
|
|
303
|
+
expect(response.body.discount).toBe(15);
|
|
304
|
+
expect(response.body.total).toBe(135);
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
```javascript
|
|
310
|
+
// E2E Test Example (Top - Fewest Tests)
|
|
311
|
+
test('user completes checkout flow', async ({ page }) => {
|
|
312
|
+
await page.goto('/products');
|
|
313
|
+
await page.click('[data-testid="product-1"]');
|
|
314
|
+
await page.click('[data-testid="add-to-cart"]');
|
|
315
|
+
await page.click('[data-testid="checkout"]');
|
|
316
|
+
|
|
317
|
+
await page.fill('[data-testid="email"]', 'test@example.com');
|
|
318
|
+
await page.fill('[data-testid="card-number"]', '4111111111111111');
|
|
319
|
+
await page.click('[data-testid="place-order"]');
|
|
320
|
+
|
|
321
|
+
await expect(page.locator('[data-testid="confirmation"]')).toBeVisible();
|
|
322
|
+
});
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Page Object Pattern
|
|
326
|
+
|
|
327
|
+
```javascript
|
|
328
|
+
// pages/LoginPage.js
|
|
329
|
+
class LoginPage {
|
|
330
|
+
constructor(page) {
|
|
331
|
+
this.page = page;
|
|
332
|
+
this.emailInput = page.locator('[data-testid="email"]');
|
|
333
|
+
this.passwordInput = page.locator('[data-testid="password"]');
|
|
334
|
+
this.loginButton = page.locator('[data-testid="login-button"]');
|
|
335
|
+
this.errorMessage = page.locator('[data-testid="error-message"]');
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
async goto() {
|
|
339
|
+
await this.page.goto('/login');
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
async login(email, password) {
|
|
343
|
+
await this.emailInput.fill(email);
|
|
344
|
+
await this.passwordInput.fill(password);
|
|
345
|
+
await this.loginButton.click();
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
async getErrorMessage() {
|
|
349
|
+
return this.errorMessage.textContent();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// tests/login.spec.js
|
|
354
|
+
test('shows error for invalid credentials', async ({ page }) => {
|
|
355
|
+
const loginPage = new LoginPage(page);
|
|
356
|
+
await loginPage.goto();
|
|
357
|
+
await loginPage.login('invalid@example.com', 'wrongpassword');
|
|
358
|
+
|
|
359
|
+
const error = await loginPage.getErrorMessage();
|
|
360
|
+
expect(error).toContain('Invalid credentials');
|
|
361
|
+
});
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Test Data Management
|
|
365
|
+
|
|
366
|
+
```javascript
|
|
367
|
+
// fixtures/users.js
|
|
368
|
+
export const testUsers = {
|
|
369
|
+
admin: {
|
|
370
|
+
email: 'admin@test.com',
|
|
371
|
+
password: 'AdminPass123!',
|
|
372
|
+
role: 'admin'
|
|
373
|
+
},
|
|
374
|
+
standard: {
|
|
375
|
+
email: 'user@test.com',
|
|
376
|
+
password: 'UserPass123!',
|
|
377
|
+
role: 'user'
|
|
378
|
+
},
|
|
379
|
+
premium: {
|
|
380
|
+
email: 'premium@test.com',
|
|
381
|
+
password: 'PremiumPass123!',
|
|
382
|
+
role: 'premium'
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
// Factory pattern for dynamic data
|
|
387
|
+
export const createTestUser = (overrides = {}) => ({
|
|
388
|
+
email: `test-${Date.now()}@example.com`,
|
|
389
|
+
password: 'TestPass123!',
|
|
390
|
+
firstName: 'Test',
|
|
391
|
+
lastName: 'User',
|
|
392
|
+
...overrides
|
|
393
|
+
});
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### CI/CD Integration
|
|
397
|
+
|
|
398
|
+
```yaml
|
|
399
|
+
# .github/workflows/test.yml
|
|
400
|
+
name: Test Suite
|
|
401
|
+
|
|
402
|
+
on: [push, pull_request]
|
|
403
|
+
|
|
404
|
+
jobs:
|
|
405
|
+
unit-tests:
|
|
406
|
+
runs-on: ubuntu-latest
|
|
407
|
+
steps:
|
|
408
|
+
- uses: actions/checkout@v4
|
|
409
|
+
- uses: actions/setup-node@v4
|
|
410
|
+
- run: npm ci
|
|
411
|
+
- run: npm run test:unit -- --coverage
|
|
412
|
+
- uses: codecov/codecov-action@v3
|
|
413
|
+
|
|
414
|
+
integration-tests:
|
|
415
|
+
runs-on: ubuntu-latest
|
|
416
|
+
services:
|
|
417
|
+
postgres:
|
|
418
|
+
image: postgres:15
|
|
419
|
+
env:
|
|
420
|
+
POSTGRES_PASSWORD: test
|
|
421
|
+
steps:
|
|
422
|
+
- uses: actions/checkout@v4
|
|
423
|
+
- run: npm ci
|
|
424
|
+
- run: npm run test:integration
|
|
425
|
+
|
|
426
|
+
e2e-tests:
|
|
427
|
+
runs-on: ubuntu-latest
|
|
428
|
+
steps:
|
|
429
|
+
- uses: actions/checkout@v4
|
|
430
|
+
- run: npm ci
|
|
431
|
+
- run: npx playwright install --with-deps
|
|
432
|
+
- run: npm run test:e2e
|
|
433
|
+
- uses: actions/upload-artifact@v3
|
|
434
|
+
if: failure()
|
|
435
|
+
with:
|
|
436
|
+
name: playwright-report
|
|
437
|
+
path: playwright-report/
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Quality Metrics
|
|
443
|
+
|
|
444
|
+
### Key QA Metrics
|
|
445
|
+
|
|
446
|
+
| Metric | Formula | Target | Purpose |
|
|
447
|
+
|--------|---------|--------|---------|
|
|
448
|
+
| Defect Density | Defects / KLOC | < 1.0 | Code quality indicator |
|
|
449
|
+
| Defect Escape Rate | Prod Defects / Total Defects | < 5% | Testing effectiveness |
|
|
450
|
+
| Test Coverage | Lines Covered / Total Lines | > 80% | Code coverage |
|
|
451
|
+
| Test Pass Rate | Passed / Total Executed | > 95% | Test health |
|
|
452
|
+
| MTTR | Time to fix defects | < 24h for P1 | Response efficiency |
|
|
453
|
+
| Automation Rate | Automated / Total Tests | > 70% | Automation maturity |
|
|
454
|
+
|
|
455
|
+
### Defect Metrics
|
|
456
|
+
|
|
457
|
+
```markdown
|
|
458
|
+
## Defect Analysis Dashboard
|
|
459
|
+
|
|
460
|
+
### Defect Density Trend
|
|
461
|
+
| Sprint | New Code (KLOC) | Defects Found | Density |
|
|
462
|
+
|--------|-----------------|---------------|---------|
|
|
463
|
+
| S1 | 5.2 | 3 | 0.58 |
|
|
464
|
+
| S2 | 4.8 | 2 | 0.42 |
|
|
465
|
+
| S3 | 6.1 | 5 | 0.82 |
|
|
466
|
+
|
|
467
|
+
### Defect Distribution
|
|
468
|
+
| Severity | Open | In Progress | Resolved | Total |
|
|
469
|
+
|----------|------|-------------|----------|-------|
|
|
470
|
+
| P0 | 0 | 0 | 2 | 2 |
|
|
471
|
+
| P1 | 1 | 2 | 8 | 11 |
|
|
472
|
+
| P2 | 5 | 3 | 25 | 33 |
|
|
473
|
+
| P3 | 12 | 1 | 45 | 58 |
|
|
474
|
+
|
|
475
|
+
### Root Cause Analysis
|
|
476
|
+
| Category | Count | Percentage |
|
|
477
|
+
|-----------------|-------|------------|
|
|
478
|
+
| Requirements | 15 | 25% |
|
|
479
|
+
| Design | 12 | 20% |
|
|
480
|
+
| Coding | 24 | 40% |
|
|
481
|
+
| Environment | 9 | 15% |
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Defect Removal Efficiency (DRE)
|
|
485
|
+
|
|
486
|
+
```text
|
|
487
|
+
DRE = (Defects found before release) / (Total defects found) × 100
|
|
488
|
+
|
|
489
|
+
Example:
|
|
490
|
+
- Found in development: 80
|
|
491
|
+
- Found in QA: 40
|
|
492
|
+
- Found in production: 5
|
|
493
|
+
- Total: 125
|
|
494
|
+
|
|
495
|
+
DRE = (80 + 40) / 125 × 100 = 96%
|
|
496
|
+
|
|
497
|
+
Target: > 95%
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Test Execution Metrics
|
|
501
|
+
|
|
502
|
+
```markdown
|
|
503
|
+
## Test Execution Report
|
|
504
|
+
|
|
505
|
+
### Summary
|
|
506
|
+
| Metric | Value |
|
|
507
|
+
|--------|-------|
|
|
508
|
+
| Total Test Cases | 450 |
|
|
509
|
+
| Executed | 442 |
|
|
510
|
+
| Passed | 425 |
|
|
511
|
+
| Failed | 12 |
|
|
512
|
+
| Blocked | 5 |
|
|
513
|
+
| Pass Rate | 96.2% |
|
|
514
|
+
|
|
515
|
+
### By Test Type
|
|
516
|
+
| Type | Total | Passed | Failed | Pass Rate |
|
|
517
|
+
|------|-------|--------|--------|-----------|
|
|
518
|
+
| Smoke | 25 | 25 | 0 | 100% |
|
|
519
|
+
| Regression | 300 | 290 | 10 | 96.7% |
|
|
520
|
+
| New Features | 125 | 110 | 15 | 88% |
|
|
521
|
+
|
|
522
|
+
### Automation Coverage
|
|
523
|
+
| Area | Manual | Automated | Auto Rate |
|
|
524
|
+
|------|--------|-----------|-----------|
|
|
525
|
+
| API | 20 | 180 | 90% |
|
|
526
|
+
| UI | 100 | 100 | 50% |
|
|
527
|
+
| Integration | 30 | 20 | 40% |
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Quality Gates
|
|
533
|
+
|
|
534
|
+
### Release Readiness Criteria
|
|
535
|
+
|
|
536
|
+
```markdown
|
|
537
|
+
## Release Quality Gate: [Version]
|
|
538
|
+
|
|
539
|
+
### Mandatory (Must Pass)
|
|
540
|
+
- [ ] All P0 test cases passed
|
|
541
|
+
- [ ] No open P0 defects
|
|
542
|
+
- [ ] No open P1 defects (or approved exceptions)
|
|
543
|
+
- [ ] Regression suite > 95% pass rate
|
|
544
|
+
- [ ] Security scan: 0 critical, 0 high
|
|
545
|
+
- [ ] Performance: Response time < 500ms (p95)
|
|
546
|
+
- [ ] Code coverage > 80%
|
|
547
|
+
|
|
548
|
+
### Conditional (Approve Exceptions)
|
|
549
|
+
- [ ] P2 defects: < 5 open (currently: X)
|
|
550
|
+
- [ ] Known issues documented
|
|
551
|
+
- [ ] Rollback plan tested
|
|
552
|
+
|
|
553
|
+
### Sign-off
|
|
554
|
+
| Role | Name | Date | Approved |
|
|
555
|
+
|------|------|------|----------|
|
|
556
|
+
| QA Lead | | | ☐ |
|
|
557
|
+
| Dev Lead | | | ☐ |
|
|
558
|
+
| Product | | | ☐ |
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
### CI Quality Gates
|
|
562
|
+
|
|
563
|
+
```yaml
|
|
564
|
+
# Example: SonarQube Quality Gate
|
|
565
|
+
sonar.qualitygate.conditions:
|
|
566
|
+
- metric: new_coverage
|
|
567
|
+
op: LT
|
|
568
|
+
error: 80
|
|
569
|
+
- metric: new_duplicated_lines_density
|
|
570
|
+
op: GT
|
|
571
|
+
error: 3
|
|
572
|
+
- metric: new_bugs
|
|
573
|
+
op: GT
|
|
574
|
+
error: 0
|
|
575
|
+
- metric: new_vulnerabilities
|
|
576
|
+
op: GT
|
|
577
|
+
error: 0
|
|
578
|
+
- metric: new_code_smells
|
|
579
|
+
op: GT
|
|
580
|
+
error: 10
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
### Performance Thresholds
|
|
584
|
+
|
|
585
|
+
| Metric | Warning | Critical | Action |
|
|
586
|
+
|--------|---------|----------|--------|
|
|
587
|
+
| Response Time (p50) | > 200ms | > 500ms | Investigate |
|
|
588
|
+
| Response Time (p95) | > 500ms | > 1000ms | Block release |
|
|
589
|
+
| Error Rate | > 0.1% | > 1% | Block release |
|
|
590
|
+
| CPU Usage | > 70% | > 90% | Scale/optimize |
|
|
591
|
+
| Memory Usage | > 80% | > 95% | Investigate leaks |
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## Exploratory Testing
|
|
596
|
+
|
|
597
|
+
### Session-Based Testing
|
|
598
|
+
|
|
599
|
+
```markdown
|
|
600
|
+
## Exploratory Test Session
|
|
601
|
+
|
|
602
|
+
**Charter**: Explore [feature] with focus on [risk area]
|
|
603
|
+
|
|
604
|
+
**Time Box**: 60 minutes
|
|
605
|
+
|
|
606
|
+
**Tester**: [Name]
|
|
607
|
+
|
|
608
|
+
**Environment**: [Staging/Dev/etc.]
|
|
609
|
+
|
|
610
|
+
### Session Notes
|
|
611
|
+
|
|
612
|
+
**Setup** (5 min):
|
|
613
|
+
- [Configuration details]
|
|
614
|
+
|
|
615
|
+
**Exploration** (45 min):
|
|
616
|
+
| Time | Action | Observation | Bug? |
|
|
617
|
+
|------|--------|-------------|------|
|
|
618
|
+
| 0:05 | [Action] | [What happened] | No |
|
|
619
|
+
| 0:12 | [Action] | [Unexpected behavior] | Yes - logged |
|
|
620
|
+
| ... | ... | ... | ... |
|
|
621
|
+
|
|
622
|
+
**Debrief** (10 min):
|
|
623
|
+
- Bugs found: [Count]
|
|
624
|
+
- Areas needing more testing: [List]
|
|
625
|
+
- Questions raised: [List]
|
|
626
|
+
|
|
627
|
+
### Metrics
|
|
628
|
+
- Session duration: 60 min
|
|
629
|
+
- Test design time: 10 min
|
|
630
|
+
- Test execution time: 45 min
|
|
631
|
+
- Bug investigation time: 5 min
|
|
632
|
+
- Bugs found: 3
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### Exploratory Testing Heuristics
|
|
636
|
+
|
|
637
|
+
| Heuristic | Description | Examples |
|
|
638
|
+
|-----------|-------------|----------|
|
|
639
|
+
| CRUD | Create, Read, Update, Delete | Can I create? Edit? Delete? View? |
|
|
640
|
+
| Boundaries | Test at limits | Max length, empty, negative |
|
|
641
|
+
| Goldilocks | Too big, too small, just right | Various valid inputs |
|
|
642
|
+
| Interruptions | Cancel mid-operation | Close browser, lose connection |
|
|
643
|
+
| Time | Date-related edge cases | Leap year, timezone, DST |
|
|
644
|
+
| Stress | Push to limits | Many users, large files |
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
## Definition of Done
|
|
649
|
+
|
|
650
|
+
### Test Case Done
|
|
651
|
+
|
|
652
|
+
- [ ] Clear title and description
|
|
653
|
+
- [ ] Preconditions documented
|
|
654
|
+
- [ ] Steps are reproducible
|
|
655
|
+
- [ ] Expected results are verifiable
|
|
656
|
+
- [ ] Traceability to requirement
|
|
657
|
+
- [ ] Peer reviewed
|
|
658
|
+
|
|
659
|
+
### Test Automation Done
|
|
660
|
+
|
|
661
|
+
- [ ] Test passes consistently (no flakiness)
|
|
662
|
+
- [ ] Page objects used appropriately
|
|
663
|
+
- [ ] Test data externalized
|
|
664
|
+
- [ ] Proper assertions and error messages
|
|
665
|
+
- [ ] Runs in CI pipeline
|
|
666
|
+
- [ ] Documentation updated
|
|
667
|
+
|
|
668
|
+
### Release Testing Done
|
|
669
|
+
|
|
670
|
+
- [ ] Test plan executed
|
|
671
|
+
- [ ] Defects logged and triaged
|
|
672
|
+
- [ ] Regression suite passed
|
|
673
|
+
- [ ] Exploratory testing completed
|
|
674
|
+
- [ ] Quality gate criteria met
|
|
675
|
+
- [ ] Sign-off obtained
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## Common Pitfalls
|
|
680
|
+
|
|
681
|
+
### 1. Testing Everything Equally
|
|
682
|
+
|
|
683
|
+
❌ **Wrong**: Same test depth for all features
|
|
684
|
+
|
|
685
|
+
✅ **Right**: Risk-based testing - more effort on high-risk areas (payments, auth, data integrity)
|
|
686
|
+
|
|
687
|
+
### 2. Automating Everything
|
|
688
|
+
|
|
689
|
+
❌ **Wrong**: 100% automation target for all tests
|
|
690
|
+
|
|
691
|
+
✅ **Right**: Automate stable, repetitive tests; keep humans on exploratory and edge cases
|
|
692
|
+
|
|
693
|
+
### 3. Flaky Tests
|
|
694
|
+
|
|
695
|
+
❌ **Wrong**: Ignoring intermittent failures
|
|
696
|
+
|
|
697
|
+
✅ **Right**: Fix or quarantine immediately; flaky tests erode confidence
|
|
698
|
+
|
|
699
|
+
### 4. Testing in Isolation
|
|
700
|
+
|
|
701
|
+
❌ **Wrong**: QA only tests after development "throws over the wall"
|
|
702
|
+
|
|
703
|
+
✅ **Right**: QA involved from requirements through deployment
|
|
704
|
+
|
|
705
|
+
### 5. Measuring Activity, Not Quality
|
|
706
|
+
|
|
707
|
+
❌ **Wrong**: "We executed 10,000 tests!"
|
|
708
|
+
|
|
709
|
+
✅ **Right**: "Defect escape rate dropped from 8% to 3%"
|
|
710
|
+
|
|
711
|
+
### 6. Neglecting Test Maintenance
|
|
712
|
+
|
|
713
|
+
❌ **Wrong**: Writing tests and forgetting them
|
|
714
|
+
|
|
715
|
+
✅ **Right**: Regular test suite reviews, removing obsolete tests, updating for product changes
|
|
716
|
+
|
|
717
|
+
---
|
|
718
|
+
|
|
719
|
+
## Resources
|
|
720
|
+
|
|
721
|
+
- [Google Testing Blog](https://testing.googleblog.com/)
|
|
722
|
+
- [Ministry of Testing](https://www.ministryoftesting.com/)
|
|
723
|
+
- [Test Automation University](https://testautomationu.applitools.com/)
|
|
724
|
+
- [Agile Testing by Lisa Crispin & Janet Gregory](https://agiletester.ca/)
|
|
725
|
+
- [The Art of Software Testing by Glenford Myers](https://www.wiley.com/en-us/The+Art+of+Software+Testing)
|
|
726
|
+
- [ISTQB Syllabus](https://www.istqb.org/)
|