Dịch vụ kiểm thử phần mềm chuyên nghiệp có thực sự cần thiết? Câu trả lời nằm trong case study này: một startup fintech tại Việt Nam suýt go-live với 12 critical bugs trong module thanh toán — bao gồm bug cho phép rút tiền vượt số dư. Dịch vụ QA đã phát hiện tổng cộng 147 bugs trước khi app đến tay 50,000 người dùng đầu tiên.
Bối cảnh dự án
Khách hàng
Startup fintech phát triển app ví điện tử cho thị trường Việt Nam. Đã gọi vốn Series A thành công, áp lực go-live trong 2 tháng để đáp ứng yêu cầu từ nhà đầu tư.
Tình trạng khi liên hệ Trinh Digital
| Hạng mục | Chi tiết |
|---|---|
| Platform | Mobile app (iOS + Android) + Admin web |
| Tech stack | React Native, Node.js, PostgreSQL |
| Team size | 8 developers, 0 QA |
| Timeline | Go-live trong 6 tuần |
| Features | Nạp/rút tiền, chuyển khoản, thanh toán QR, lịch sử giao dịch |
| Test coverage | ~15% (chỉ vài unit test) |
| Đã test chưa | Developer tự test happy path, chưa có systematic testing |
Vấn đề
CEO lo ngại: “Team dev nói đã test rồi, nhưng tôi không yên tâm. App liên quan đến tiền — 1 bug nhỏ cũng có thể gây thiệt hại hàng tỷ đồng và vi phạm quy định.”
Phạm vi dịch vụ QA
Team QA từ Trinh Digital
| Vai trò | Số lượng | Trách nhiệm |
|---|---|---|
| QA Lead | 1 | Lập test plan, phân công, báo cáo |
| QA Engineer (Manual) | 2 | Functional testing, exploratory testing |
| QA Engineer (Automation) | 1 | Automated regression test, performance test |
| Security Tester | 1 (part-time) | Penetration testing, security audit |
Loại testing thực hiện
| Loại test | Scope | Tool |
|---|---|---|
| Functional Testing | Tất cả feature (32 user stories) | Manual + Playwright |
| API Testing | 67 API endpoints | Postman + Newman |
| Performance Testing | Load test 10,000 concurrent users | k6, Grafana |
| Security Testing | OWASP Top 10, penetration test | Burp Suite, OWASP ZAP |
| Compatibility Testing | iOS 15-17, Android 11-14, 12 devices | BrowserStack |
| Regression Testing | Automated suite 280 test cases | Playwright, Appium |
| UAT Support | Hỗ trợ business team UAT | Manual |
Quy trình QA: 6 tuần
Tuần 1: Test Planning & Setup
Ngày 1-2 — Requirement Review:
- Đọc PRD (Product Requirements Document)
- Identify gaps: 8 requirements mơ hồ, cần clarify với Product Owner
- Phát hiện sớm 3 logical inconsistencies trong business rules:
- Rule 1: “User mới được bonus 50K” nhưng không định nghĩa “mới” (đăng ký lần đầu hay chưa giao dịch?)
- Rule 2: “Giới hạn chuyển 10 triệu/ngày” nhưng không rõ tính theo ngày UTC hay giờ Việt Nam
- Rule 3: “KYC level 1 giới hạn 5 triệu/tháng” nhưng không xử lý case user upgrade KYC giữa tháng
Ngày 3-5 — Test Case Design:
- 450 test cases tổng cộng
- Priority: P0 (120), P1 (180), P2 (100), P3 (50)
- Bao gồm: happy paths, error paths, boundary values, edge cases
Setup:
- Test environment (staging) isolated
- Test data generation scripts
- CI/CD integration: automated tests chạy mỗi khi deploy staging
- Bug tracking trên Linear
Tuần 2-3: Functional Testing Sprint
Kết quả functional testing:
| Module | Test cases | Pass | Fail | Bug count |
|---|---|---|---|---|
| Đăng ký / KYC | 45 | 38 | 7 | 9 |
| Nạp tiền | 35 | 28 | 7 | 11 |
| Rút tiền | 40 | 29 | 11 | 15 |
| Chuyển khoản | 50 | 39 | 11 | 18 |
| Thanh toán QR | 30 | 24 | 6 | 8 |
| Lịch sử giao dịch | 25 | 22 | 3 | 5 |
| Notification | 20 | 14 | 6 | 9 |
| Admin Panel | 55 | 47 | 8 | 12 |
| Tổng | 300 | 241 | 59 | 87 |
Top 5 Critical Bugs phát hiện
Bug #1 — Rút tiền vượt số dư (P0 Critical):
Khi user rút tiền, API kiểm tra số dư → approve → trừ tiền. Nhưng nếu gửi 2 request rút tiền cùng lúc (race condition), cả 2 đều được approve trước khi trừ tiền. Kết quả: số dư 1 triệu nhưng rút được 2 triệu.
Impact nếu không phát hiện: Mất tiền thật, có thể hàng tỷ VND.
Bug #2 — Bypass KYC Level (P0 Critical):
API endpoint update KYC không validate ở server-side. User có thể gửi API request trực tiếp để tự nâng KYC level từ 1 lên 3, bỏ qua xác minh CCCD.
Impact: Vi phạm quy định chống rửa tiền.
Bug #3 — SQL Injection trong tìm kiếm (P0 Critical):
Ô tìm kiếm lịch sử giao dịch không sanitize input. Nhập '; DROP TABLE transactions; -- → execute SQL trên database.
Impact: Hacker có thể xóa toàn bộ dữ liệu giao dịch.
Bug #4 — Thông tin giao dịch người khác (P0 Critical):
API /api/transactions/{id} không kiểm tra ownership. User A có thể xem giao dịch của User B bằng cách thay đổi transaction ID trong URL.
Impact: Rò rỉ thông tin tài chính cá nhân, vi phạm quy định bảo mật.
Bug #5 — Notification chứa thông tin nhạy cảm (P1 Major):
Push notification hiển thị “Bạn đã nhận 5,000,000 VND từ Nguyễn Văn A (SĐT: 0912345678)” — hiển thị trên lock screen, ai cũng đọc được.
Impact: Lộ thông tin giao dịch, số điện thoại.
Tuần 4: Performance & Security Testing
Performance Testing Results:
| Metric | Target | Kết quả (trước fix) | Kết quả (sau fix) |
|---|---|---|---|
| Response time (P50) | < 200ms | 180ms ✅ | 150ms ✅ |
| Response time (P99) | < 2s | 4.5s ❌ | 1.8s ✅ |
| Throughput | 1,000 req/s | 650 req/s ❌ | 1,200 req/s ✅ |
| Error rate @ 5,000 users | < 1% | 12% ❌ | 0.3% ✅ |
| Error rate @ 10,000 users | < 5% | 45% ❌ | 2.1% ✅ |
Bottleneck phát hiện: Database connection pool chỉ có 10 connections (default PostgreSQL). Tăng lên 100 + thêm Redis cache → throughput tăng 85%.
Security Testing Results:
| Vulnerability | Severity | Count |
|---|---|---|
| Critical | 4 | SQL Injection (1), Broken Access Control (2), Insecure Direct Object Reference (1) |
| High | 6 | Missing rate limiting, weak session management, CORS misconfiguration… |
| Medium | 8 | Missing security headers, verbose error messages… |
| Low | 5 | Information disclosure in headers… |
| Total | 23 vulnerabilities |
Tuần 5: Regression Testing & Bug Fix Verification
- Dev team fix bugs dựa trên priority (P0 → P1 → P2)
- QA verify từng bug fix
- Automated regression suite (280 test cases) chạy sau mỗi fix
- 3 rounds regression: Round 1 — 12 bugs reopen, Round 2 — 4 bugs reopen, Round 3 — 0 bugs reopen
Tuần 6: UAT & Final Sign-off
- Business team test 2 ngày (10 scenarios thực tế)
- 5 bugs mới phát hiện từ UAT (P2-P3)
- Fix + retest trong 2 ngày
- Go/No-Go meeting: All P0 = 0, P1 = 0, P2 = 3 (accepted), P3 = 8 (backlog)
- Decision: GO ✅
Tổng kết kết quả
Bug Statistics
| Severity | Phát hiện | Fix before launch | Remaining |
|---|---|---|---|
| P0 Critical | 12 | 12 (100%) | 0 |
| P1 Major | 28 | 28 (100%) | 0 |
| P2 Minor | 45 | 42 (93%) | 3 (accepted) |
| P3 Trivial | 62 | 54 (87%) | 8 (backlog) |
| Total | 147 | 136 | 11 |
Chi phí và ROI
| Hạng mục | Chi phí |
|---|---|
| QA team (5 người × 6 tuần) | 180 triệu VND |
| Tools & infrastructure | 15 triệu VND |
| Tổng đầu tư QA | 195 triệu VND |
| Hạng mục | Thiệt hại tránh được |
|---|---|
| 12 P0 bugs (trung bình 100 triệu/bug) | 1.2 tỷ VND |
| 28 P1 bugs (trung bình 30 triệu/bug) | 840 triệu VND |
| Security breaches (potential fine + reputation) | 500 triệu - 2 tỷ VND |
| Performance issues (lost revenue day 1) | 200 triệu VND |
| Tổng thiệt hại tránh được | 2.7 - 4.2 tỷ VND |
ROI: Đầu tư 195 triệu → tránh thiệt hại 2.7-4.2 tỷ → ROI 1,300-2,000%.
Feedback từ CEO
“Ban đầu tôi nghĩ thuê QA bên ngoài là tốn tiền. Nhưng khi thấy bug cho phép rút tiền vượt số dư — nếu go-live với bug đó, chúng tôi có thể mất cả tỷ đồng trong tuần đầu tiên. 195 triệu cho QA service là khoản đầu tư xứng đáng nhất dự án.”
FAQ — Câu hỏi thường gặp
1. Dịch vụ QA từ bên ngoài có thể thay thế hoàn toàn QA nội bộ không?
Có thể cho giai đoạn đầu hoặc dự án ngắn hạn. Về lâu dài, nên kết hợp: QA nội bộ cho regression testing hàng ngày + QA outsource cho security audit, performance testing, và các dự án lớn cần tăng cường nhân sự.
2. Chi phí dịch vụ kiểm thử bao nhiêu?
Tùy scope: từ 50 triệu (dự án nhỏ, 2-3 tuần) đến 300 triệu+ (dự án lớn, full QA team, 6-8 tuần). Liên hệ Trinh Digital để được báo giá theo scope cụ thể.
3. QA bên ngoài có cần truy cập source code không?
Không bắt buộc. Black-box testing (test từ bên ngoài, không cần source code) vẫn hiệu quả cho functional và security testing. Tuy nhiên, white-box testing (có source code) cho kết quả toàn diện hơn, đặc biệt là security audit.
Kết luận
App fintech go-live thành công với 0 critical bugs, 0 major bugs, và đạt 50,000 users trong tháng đầu tiên mà không có sự cố nào liên quan đến chất lượng phần mềm. Khoản đầu tư 195 triệu VND cho dịch vụ kiểm thử đã tránh được thiệt hại tiềm tàng hàng tỷ đồng.
Nếu doanh nghiệp bạn đang phát triển app/website và cần đảm bảo chất lượng trước khi go-live, hãy liên hệ Trinh Digital. Chúng tôi cung cấp dịch vụ kiểm thử phần mềm chuyên nghiệp — từ functional testing đến security audit — giúp bạn go-live tự tin và an toàn.