Skip to main content
Glama
WORLD_CLASS_TESTER_COMPETENCIES.mdโ€ข14.5 kB
# ๐ŸŒŸ World-Class Tester Competencies **์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์Šคํ„ฐ ์—ญ๋Ÿ‰ ํ‘œ์ค€ ๋ฐ ์„ฑ์žฅ ๋กœ๋“œ๋งต** > World-Class ํ…Œ์Šคํ„ฐ๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  ๊ธฐ์ˆ ์  ์—ญ๋Ÿ‰, ํƒœ๋„, ๋„๊ตฌ ์ˆ™๋ จ๋„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ“‹ ๋ชฉ์ฐจ 1. [ํ•ต์‹ฌ ์—ญ๋Ÿ‰ ๊ฐœ์š”](#ํ•ต์‹ฌ-์—ญ๋Ÿ‰-๊ฐœ์š”) 2. [ํ…Œ์ŠคํŒ… ๋ฐฉ๋ฒ•๋ก  ์ „๋ฌธ์„ฑ](#ํ…Œ์ŠคํŒ…-๋ฐฉ๋ฒ•๋ก -์ „๋ฌธ์„ฑ) 3. [์ž๋™ํ™” ์—ญ๋Ÿ‰](#์ž๋™ํ™”-์—ญ๋Ÿ‰) 4. [๋„๋ฉ”์ธ ์ง€์‹](#๋„๋ฉ”์ธ-์ง€์‹) 5. [์†Œํ”„ํŠธ ์Šคํ‚ฌ](#์†Œํ”„ํŠธ-์Šคํ‚ฌ) 6. [ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ & KPI](#ํ’ˆ์งˆ-๋ฉ”ํŠธ๋ฆญ--kpi) 7. [์„ฑ์žฅ ๋กœ๋“œ๋งต](#์„ฑ์žฅ-๋กœ๋“œ๋งต) --- ## ํ•ต์‹ฌ ์—ญ๋Ÿ‰ ๊ฐœ์š” ### World-Class Tester์˜ 4๊ฐ€์ง€ ๊ธฐ๋‘ฅ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ World-Class Tester Competencies โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ 1. ํ…Œ์ŠคํŒ… ๋ฐฉ๋ฒ•๋ก  Testing Methods โ”‚ โ”‚ 2. ์ž๋™ํ™” ์—ญ๋Ÿ‰ Automation โ”‚ โ”‚ 3. ๋„๋ฉ”์ธ ์ง€์‹ Domain Knowl. โ”‚ โ”‚ 4. ์†Œํ”„ํŠธ ์Šคํ‚ฌ Soft Skills โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ์—ญ๋Ÿ‰ ๋ ˆ๋ฒจ ์ •์˜ | ๋ ˆ๋ฒจ | ์„ค๋ช… | ๊ธฐ๋Œ€ ๊ฒฝ๋ ฅ | |------|------|----------| | **L1 - Junior** | ๊ธฐ๋ณธ ์ˆ˜๋™ ํ…Œ์ŠคํŠธ, ๊ฐ€์ด๋“œ ํ•„์š” | 0-2๋…„ | | **L2 - Mid** | ๋…๋ฆฝ์  ํ…Œ์ŠคํŠธ, ๊ธฐ๋ณธ ์ž๋™ํ™” | 2-4๋…„ | | **L3 - Senior** | ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค, ๊ณ ๊ธ‰ ์ž๋™ํ™” | 4-7๋…„ | | **L4 - Staff** | ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ๋ฉ˜ํ† ๋ง | 7-10๋…„ | | **L5 - Principal** | ์กฐ์ง ์ „๋žต, ์—…๊ณ„ ๋ฆฌ๋” | 10๋…„+ | --- ## ํ…Œ์ŠคํŒ… ๋ฐฉ๋ฒ•๋ก  ์ „๋ฌธ์„ฑ ### 1. Unit Testing (๋‹จ์œ„ ํ…Œ์ŠคํŠธ) #### ํ•ต์‹ฌ ๊ฐœ๋… ```typescript // Good Unit Test ํŠน์ง•: FIRST ์›์น™ // Fast, Independent, Repeatable, Self-validating, Timely describe('Calculator', () => { it('should add two numbers correctly', () => { const result = add(2, 3); expect(result).toBe(5); // โœ… Fast, clear }); it('should handle edge case: large numbers', () => { const result = add(Number.MAX_SAFE_INTEGER, 1); expect(result).toBe(Number.MAX_SAFE_INTEGER + 1); // ๐Ÿ”ฅ Edge case }); }); ``` #### ์—ญ๋Ÿ‰ ๊ธฐ์ค€ | ๋ ˆ๋ฒจ | ์—ญ๋Ÿ‰ | |------|------| | L1 | ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๊ฐ„๋‹จํ•œ assertion ์ž‘์„ฑ | | L2 | ๋…๋ฆฝ์  unit test ์ž‘์„ฑ, mocking ์ดํ•ด | | L3 | TDD ์‹ค์ฒœ, ๋ณต์žกํ•œ mock/spy ํ™œ์šฉ | | L4 | ํ…Œ์ŠคํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ํŒ€ ๊ฐ€์ด๋“œ๋ผ์ธ ์ˆ˜๋ฆฝ | ### 2. Integration Testing (ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ) #### ํ•ต์‹ฌ ๊ฐœ๋… ```typescript // API Integration Test ์˜ˆ์‹œ describe('POST /api/projects', () => { it('should create project with valid data', async () => { const response = await request(app) .post('/api/projects') .send({ name: 'Test Project', startDate: '2024-01-01', }) .expect(201); expect(response.body).toHaveProperty('id'); expect(response.body.name).toBe('Test Project'); // Verify in database const project = await db.projects.findById(response.body.id); expect(project).toBeTruthy(); }); }); ``` #### ์—ญ๋Ÿ‰ ๊ธฐ์ค€ | ๋ ˆ๋ฒจ | ์—ญ๋Ÿ‰ | |------|------| | L2 | API ํ…Œ์ŠคํŠธ ์ž‘์„ฑ, DB ์ƒํ˜ธ์ž‘์šฉ ๊ฒ€์ฆ | | L3 | ๋ณต์žกํ•œ ํ†ตํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ | | L4 | ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์•„ํ‚คํ…์ฒ˜ | ### 3. E2E Testing (์—”๋“œํˆฌ์—”๋“œ ํ…Œ์ŠคํŠธ) #### ํ•ต์‹ฌ ๊ฐœ๋… ```typescript // E2E Test: User Journey test('complete user onboarding flow', async ({ page }) => { // 1. Registration await page.goto('/register'); await page.fill('[name="email"]', 'new@user.com'); await page.fill('[name="password"]', 'secure123'); await page.click('button[type="submit"]'); // 2. Email verification (mock) const verifyLink = await getVerificationLink('new@user.com'); await page.goto(verifyLink); // 3. Profile setup await expect(page).toHaveURL('/profile/setup'); await page.fill('[name="fullName"]', 'John Doe'); await page.click('button:has-text("Complete Setup")'); // 4. Dashboard access await expect(page).toHaveURL('/dashboard'); await expect(page.locator('h1')).toContainText('Welcome, John'); }); ``` #### ์—ญ๋Ÿ‰ ๊ธฐ์ค€ | ๋ ˆ๋ฒจ | ์—ญ๋Ÿ‰ | |------|------| | L2 | ๊ฐ„๋‹จํ•œ E2E ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ | | L3 | ๋ณต์žกํ•œ User Journey, Page Object Model ํ™œ์šฉ | | L4 | E2E ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๊ณ„, CI/CD ํ†ตํ•ฉ | ### 4. Performance Testing (์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ) #### ํ•ต์‹ฌ ๊ฐœ๋… ```javascript // k6 Load Testing ์˜ˆ์‹œ import http from 'k6/http'; import { check } from 'k6'; export let options = { stages: [ { duration: '2m', target: 100 }, // Ramp up to 100 users { duration: '5m', target: 100 }, // Stay at 100 users { duration: '2m', target: 0 }, // Ramp down ], thresholds: { http_req_duration: ['p(95)<500'], // 95% requests < 500ms }, }; export default function () { const res = http.get('https://api.example.com/projects'); check(res, { 'status is 200': (r) => r.status === 200, 'response time < 500ms': (r) => r.timings.duration < 500, }); } ``` #### ์—ญ๋Ÿ‰ ๊ธฐ์ค€ | ๋ ˆ๋ฒจ | ์—ญ๋Ÿ‰ | |------|------| | L2 | Lighthouse ์ ์ˆ˜ ์ธก์ •, ๊ธฐ๋ณธ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ | | L3 | k6/JMeter ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ, ๋ณ‘๋ชฉ ๋ถ„์„ | | L4 | ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต ์ˆ˜๋ฆฝ, ์บ์‹ฑ/CDN ์„ค๊ณ„ | ### 5. Security Testing (๋ณด์•ˆ ํ…Œ์ŠคํŠธ) #### ํ•ต์‹ฌ ๊ฐœ๋… ```bash # OWASP ZAP Automated Scan zap-cli quick-scan --self-contained \ --start-options '-config api.disablekey=true' \ https://app.example.com # SQL Injection Test (Manual) ' OR '1'='1'; -- admin'-- '; DROP TABLE users; -- # XSS Test <script>alert('XSS')</script> <img src=x onerror=alert('XSS')> ``` #### OWASP Top 10 ์ฒดํฌ๋ฆฌ์ŠคํŠธ ```markdown โœ… ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ํ•„์ˆ˜ ํ•ญ๋ชฉ: - [ ] SQL Injection ๋ฐฉ์–ด - [ ] XSS (Cross-Site Scripting) ์ฐจ๋‹จ - [ ] CSRF (Cross-Site Request Forgery) ํ† ํฐ - [ ] Authentication/Authorization ๊ฒ€์ฆ - [ ] Sensitive Data ์•”ํ˜ธํ™” - [ ] Security Misconfiguration ์ ๊ฒ€ - [ ] Insecure Deserialization ๋ฐฉ์ง€ - [ ] Known Vulnerabilities ์Šค์บ” - [ ] Insufficient Logging ๊ฐœ์„  ``` #### ์—ญ๋Ÿ‰ ๊ธฐ์ค€ | ๋ ˆ๋ฒจ | ์—ญ๋Ÿ‰ | |------|------| | L2 | OWASP Top 10 ์ดํ•ด, ๊ธฐ๋ณธ ์ทจ์•ฝ์  ์Šค์บ” | | L3 | ์นจํˆฌ ํ…Œ์ŠคํŠธ, ๋ณด์•ˆ ์ฝ”๋“œ ๋ฆฌ๋ทฐ | | L4 | ๋ณด์•ˆ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, Threat modeling | --- ## ์ž๋™ํ™” ์—ญ๋Ÿ‰ ### 1. ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์•„ํ‚คํ…์ฒ˜ #### Layered Test Automation Architecture ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Business Layer (Test Cases) โ”‚ โ† Domain-specific test logic โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Framework Layer (POM, Utils) โ”‚ โ† Reusable components โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Driver Layer (Playwright/Axios) โ”‚ โ† Tool abstraction โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ System Under Test (SUT) โ”‚ โ† Application โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` #### Page Object Model (POM) ์˜ˆ์‹œ ```typescript // Good POM Structure export class ProjectsPage { private page: Page; // Locators (centralized) private get createButton() { return this.page.locator('[data-testid="create-project-btn"]'); } // Actions (high-level methods) async createProject(data: ProjectData) { await this.createButton.click(); await this.fillForm(data); await this.submit(); } // Assertions (expected behaviors) async expectProjectCreated(name: string) { await expect(this.page.locator(`text=${name}`)).toBeVisible(); } } ``` ### 2. CI/CD ํ†ตํ•ฉ #### GitHub Actions ์˜ˆ์‹œ ```yaml # .github/workflows/test.yml name: Test Suite on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 - name: Install dependencies run: npm ci - name: Run unit tests run: npm run test:unit - name: Run E2E tests run: npm run test:e2e - name: Upload test results uses: actions/upload-artifact@v3 with: name: playwright-report path: playwright-report/ ``` ### 3. Test Data Management ```typescript // Fixture Management export const testUsers = { researcher: { email: 'researcher@test.com', password: 'test123', role: 'RESEARCHER', }, admin: { email: 'admin@test.com', password: 'admin123', role: 'ADMIN', }, }; // Database Seeding export async function seedTestData() { await db.users.createMany(testUsers); await db.projects.createMany(testProjects); } // Cleanup export async function cleanupTestData() { await db.projects.deleteMany(); await db.users.deleteMany(); } ``` --- ## ๋„๋ฉ”์ธ ์ง€์‹ ### 1. ์›น ๊ธฐ์ˆ  ์Šคํƒ ์ดํ•ด #### Frontend ```markdown โœ… ํ•„์ˆ˜ ์ง€์‹: - HTML/CSS/JavaScript ๊ธฐ๋ณธ - React/Vue/Angular ํ”„๋ ˆ์ž„์›Œํฌ - State management (Redux, Zustand) - Routing (React Router) - HTTP/REST API - WebSockets - Browser DevTools ``` #### Backend ```markdown โœ… ํ•„์ˆ˜ ์ง€์‹: - Node.js/Express or Python/Django - RESTful API ์„ค๊ณ„ - Database (SQL/NoSQL) - Authentication (JWT, OAuth) - Middleware & Error handling ``` ### 2. ๋„๋ฉ”์ธ ํŠนํ™” ์ง€์‹ ์˜ˆ์‹œ **Healthcare (์˜๋ฃŒ)** - HIPAA ๊ทœ์ •, PHI ๋ณดํ˜ธ - HL7/FHIR ํ‘œ์ค€ - ์ž„์ƒ ์›Œํฌํ”Œ๋กœ์šฐ **Finance (๊ธˆ์œต)** - PCI DSS ์ค€์ˆ˜ - ๊ฑฐ๋ž˜ ๋ฌด๊ฒฐ์„ฑ - ๊ฐ์‚ฌ ๋กœ๊ทธ **E-commerce (์ „์ž์ƒ๊ฑฐ๋ž˜)** - ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค (PG ์—ฐ๋™) - ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋™์ž‘ - ์žฌ๊ณ  ๊ด€๋ฆฌ --- ## ์†Œํ”„ํŠธ ์Šคํ‚ฌ ### 1. ๋ฌธ์ œ ๋ฐœ๊ฒฌ ํƒœ๋„ > "์˜ค๋Š˜ ๋ฌด์—‡์„ ๋ถ€์ˆ  ์ˆ˜ ์žˆ์„๊นŒ?" - NRC (๋ฏธ๊ตญ ์›์ž๋ ฅ๊ทœ์ œ์œ„์›ํšŒ) #### ํ…Œ์Šคํ„ฐ์˜ ๋งˆ์ธ๋“œ์…‹ ```markdown โœ… World-Class Tester ํƒœ๋„: - ํ˜ธ๊ธฐ์‹ฌ: "๋งŒ์•ฝ ~ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?" - ๋น„ํŒ์  ์‚ฌ๊ณ : "์ •๋ง ์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ๊ฐ€?" - ์ฐฝ์˜์„ฑ: "์–ด๋–ป๊ฒŒ ์ด ๊ธฐ๋Šฅ์„ ๋ง๊ฐ€๋œจ๋ฆด ์ˆ˜ ์žˆ์„๊นŒ?" - ๋ˆ๊ธฐ: "์ด ๋ฒ„๊ทธ์˜ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€" - ๊ณต๊ฐ: "์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ƒ๊ฐํ•˜๊ธฐ" ``` ### 2. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ #### ํšจ๊ณผ์ ์ธ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ``` โŒ Bad: "๋กœ๊ทธ์ธ ์•ˆ ๋จ" โœ… Good: "Chrome 120์—์„œ researcher ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ์— ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ ์‹œ 500 ์—๋Ÿฌ ๋ฐœ์ƒ. ์žฌํ˜„์œจ 100%. [์Šคํฌ๋ฆฐ์ƒท] [Console ๋กœ๊ทธ]" ``` #### ๊ฐœ๋ฐœ์ž์™€์˜ ํ˜‘์—… ```markdown โœ… ํ˜‘์—… Best Practices: - ๊ณต๊ฒฉ์  X โ†’ ๊ฑด์„ค์  ํ”ผ๋“œ๋ฐฑ O - "๋‹น์‹  ์ฝ”๋“œ ๋ฒ„๊ทธ ์žˆ์–ด์š”" X - "์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ด๋Ÿฐ ๋™์ž‘์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์˜๋„ํ•œ ๊ฒƒ์ธ๊ฐ€์š”?" O - ์žฌํ˜„ ๋‹จ๊ณ„ ๋ช…ํ™•ํžˆ ์ œ๊ณต - ์šฐ์„ ์ˆœ์œ„ ํ•ฉ๋ฆฌ์  ์ œ์•ˆ ``` ### 3. ์ง€์†์  ํ•™์Šต ```markdown โœ… ํ•™์Šต ๋ฃจํ‹ด: - ์ฃผ 1ํšŒ: ์ƒˆ ํ…Œ์ŠคํŠธ ๋„๊ตฌ/๊ธฐ๋ฒ• ์—ฐ๊ตฌ - ์›” 1ํšŒ: ํ…Œ์ŠคํŠธ ์ปจํผ๋Ÿฐ์Šค/์›จ๋น„๋‚˜ ์ฐธ์—ฌ - ๋ถ„๊ธฐ 1ํšŒ: ์˜คํ”ˆ์†Œ์Šค ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ๊ธฐ์—ฌ - ์—ฐ 1ํšŒ: ํ…Œ์ŠคํŠธ ์ž๊ฒฉ์ฆ ์ทจ๋“ (ISTQB ๋“ฑ) ``` --- ## ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ & KPI ### 1. ํ…Œ์ŠคํŠธ ๋ฉ”ํŠธ๋ฆญ | ์ง€ํ‘œ | ์„ค๋ช… | ๋ชฉํ‘œ | |------|------|------| | **Test Coverage** | ์ฝ”๋“œ ๋ผ์ธ ์ปค๋ฒ„๋ฆฌ์ง€ | >80% | | **Defect Detection Rate** | ๋ฐœ๊ฒฌํ•œ ๊ฒฐํ•จ ๋น„์œจ | >90% | | **Test Execution Time** | ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„ | <30๋ถ„ (E2E) | | **Flaky Test Rate** | ๋ถˆ์•ˆ์ •ํ•œ ํ…Œ์ŠคํŠธ ๋น„์œจ | <5% | | **Automation Rate** | ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋น„์œจ | >70% | ### 2. ํ’ˆ์งˆ ์ง€ํ‘œ ```typescript // ํ’ˆ์งˆ ๋Œ€์‹œ๋ณด๋“œ ์˜ˆ์‹œ interface QualityMetrics { testCoverage: number; // 85% passRate: number; // 98% avgExecutionTime: number; // 25 minutes defectsFound: number; // 23 defectsFixed: number; // 20 p0Blockers: number; // 0 technicalDebt: number; // 5 items } ``` ### 3. ๋ฆด๋ฆฌ์Šค ํ’ˆ์งˆ ๊ธฐ์ค€ ```markdown โœ… Release Criteria: - [ ] All P0/P1 tests pass (100%) - [ ] No critical/high severity bugs open - [ ] Code coverage >80% - [ ] Performance benchmarks met - [ ] Security scan clean - [ ] Accessibility (WCAG 2.1 AA) - [ ] Cross-browser tested ``` --- ## ์„ฑ์žฅ ๋กœ๋“œ๋งต ### Junior (0-2๋…„) โ†’ Mid (2-4๋…„) ```markdown โœ… Focus Areas: - [ ] ์ˆ˜๋™ ํ…Œ์ŠคํŠธ ๋งˆ์Šคํ„ฐ (๋ชจ๋“  ํƒ€์ž…) - [ ] ๊ธฐ๋ณธ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ - [ ] Playwright/Cypress ์ˆ™๋ จ - [ ] API ํ…Œ์ŠคํŠธ (Postman/REST Assured) - [ ] Git/CI ๊ธฐ๋ณธ ์‚ฌ์šฉ - [ ] ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ ์ž‘์„ฑ๋ฒ• ๐Ÿ“š ํ•™์Šต ์ž๋ฃŒ: - Playwright University - ISTQB Foundation ์ž๊ฒฉ์ฆ - Test Automation University ``` ### Mid (2-4๋…„) โ†’ Senior (4-7๋…„) ```markdown โœ… Focus Areas: - [ ] ํ…Œ์ŠคํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ - [ ] Performance testing (k6/JMeter) - [ ] Security testing (OWASP) - [ ] CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• - [ ] Test strategy ์ˆ˜๋ฆฝ - [ ] ์ฃผ๋‹ˆ์–ด ๋ฉ˜ํ† ๋ง ๐Ÿ“š ํ•™์Šต ์ž๋ฃŒ: - AWS Certified DevOps - OWASP Certification - Conference ๋ฐœํ‘œ ``` ### Senior (4-7๋…„) โ†’ Staff (7-10๋…„) ```markdown โœ… Focus Areas: - [ ] ์กฐ์ง ํ…Œ์ŠคํŠธ ์ „๋žต ์ˆ˜๋ฆฝ - [ ] ํ…Œ์ŠคํŠธ ๋„๊ตฌ ์„ ์ • ๋ฐ ๋„์ž… - [ ] ํฌ๋กœ์ŠคํŒ€ ํ˜‘์—… ๋ฆฌ๋“œ - [ ] ํ…Œ์ŠคํŠธ ํ‘œ์ค€ํ™” - [ ] ์—…๊ณ„ ์ปจํผ๋Ÿฐ์Šค ๋ฐœํ‘œ ๐Ÿ“š ํ™œ๋™: - ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฉ”์ธํ…Œ์ด๋„ˆ - ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์šด์˜ - ํ…Œ์ŠคํŠธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฆฌ๋” ``` --- ## ๋„๊ตฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ### ํ•„์ˆ˜ ๋„๊ตฌ ์ˆ™๋ จ๋„ ```markdown โœ… Level 2 (Mid): - [ ] Playwright/Cypress (E2E) - [ ] Vitest/Jest (Unit) - [ ] Postman/Insomnia (API) - [ ] Chrome DevTools - [ ] Git/GitHub - [ ] JIRA/Linear โœ… Level 3 (Senior): - [ ] k6/JMeter (Performance) - [ ] OWASP ZAP (Security) - [ ] Docker (Testํ™˜๊ฒฝ) - [ ] GitHub Actions (CI/CD) - [ ] Lighthouse (Performance) - [ ] Accessibility tools (axe) โœ… Level 4 (Staff): - [ ] Terraform (Infrastructure) - [ ] Grafana/Prometheus (Monitoring) - [ ] Custom test frameworks - [ ] Test data generators ``` --- ## ์ฐธ๊ณ  ์ž๋ฃŒ - **ISTQB**: International Software Testing Qualifications Board - **NRC**: Good Software Tester Characteristics - **OWASP**: Web Security Testing Guide - **Test Automation University**: Free courses - **Playwright Documentation**: Modern E2E testing --- **๐Ÿ“Œ ๋‹ค์Œ ๋ฌธ์„œ**: [Tester Usage Guide](TESTER_USAGE_GUIDE.md)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seanshin0214/persona-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server