I. Testing là gì?
Testing (kiểm thử phần mềm) là quá trình đánh giá một hệ thống phần mềm để xác định xem sản phẩm có đáp ứng các yêu cầu được đặt ra hay không, và nhằm phát hiện lỗi nếu có. Testing là một phần quan trọng trong vòng đời phát triển phần mềm (SDLC), giúp đảm bảo chất lượng và độ tin cậy của sản phẩm.
II. Mục đích của Testing
-
Phát hiện lỗi: Phát hiện và sửa lỗi trước khi phần mềm được triển khai.
-
Đảm bảo chất lượng: Đảm bảo sản phẩm đáp ứng yêu cầu kỹ thuật và nghiệp vụ.
-
Cải thiện trải nghiệm người dùng: Phần mềm không có lỗi và hoạt động mượt mà sẽ mang lại trải nghiệm tốt hơn cho người dùng cuối.
-
Giảm thiểu rủi ro: Giúp phát hiện lỗi sớm, giảm chi phí sửa lỗi sau này.
-
Xác minh và xác thực (Verification & Validation):
-
Verification đảm bảo phần mềm được xây dựng đúng theo thiết kế.
-
Validation đảm bảo phần mềm đúng với nhu cầu người dùng.
-
III. Các cấp độ kiểm thử (Testing Levels)
-
Unit Testing
-
Mục tiêu: Kiểm thử từng đơn vị nhỏ nhất của phần mềm (ví dụ: function, method, class).
-
Thực hiện bởi: Lập trình viên.
-
Công cụ: JUnit (Java), PyTest (Python), XCTest (iOS), v.v.
-
-
Integration Testing
-
Mục tiêu: Kiểm tra sự tương tác giữa các module riêng biệt (ví dụ: service gọi đến database).
-
Kiểm tra luồng dữ liệu giữa các module có chính xác không.
-
Có thể dùng mock/stub để giả lập các thành phần chưa hoàn thiện.
-
-
System Testing
-
Mục tiêu: Kiểm thử toàn bộ hệ thống như một thể thống nhất.
-
Kiểm tra tính đầy đủ, hiệu suất, bảo mật, tương thích, v.v.
-
-
Acceptance Testing
-
Mục tiêu: Kiểm thử cuối cùng trước khi bàn giao. Đảm bảo sản phẩm đúng với yêu cầu nghiệp vụ.
-
Được thực hiện bởi khách hàng hoặc QA.
-
IV. Các phương pháp kiểm thử phổ biến
-
Manual Testing (Kiểm thử thủ công)
-
Thực hiện bởi con người, không dùng công cụ tự động.
-
Ưu điểm: Linh hoạt, kiểm tra trải nghiệm người dùng thực tế.
-
Nhược điểm: Tốn thời gian, dễ bỏ sót.
-
-
Automation Testing (Kiểm thử tự động)
-
Viết mã kiểm thử để kiểm tra phần mềm một cách tự động.
-
Phù hợp với các dự án lớn, kiểm tra lặp đi lặp lại.
-
Công cụ: Selenium, Cypress, TestNG, Playwright, Appium, v.v.
-
V. Các loại kiểm thử khác
-
Regression Testing: Đảm bảo chức năng cũ vẫn hoạt động sau khi thêm chức năng mới.
-
Smoke Testing: Kiểm tra nhanh các chức năng chính có chạy được không sau khi build.
-
Load/Performance Testing: Đo hiệu suất khi có nhiều người dùng hoặc dữ liệu lớn.
-
Security Testing: Kiểm tra độ an toàn, chống xâm nhập, lỗ hổng bảo mật.
-
Usability Testing: Kiểm tra trải nghiệm và khả năng sử dụng của người dùng.
VI. Quy trình kiểm thử phần mềm (Testing Process)
-
Phân tích yêu cầu: Hiểu rõ chức năng cần test.
-
Lập kế hoạch kiểm thử (Test Plan): Xác định phạm vi, chiến lược, thời gian.
-
Viết test case: Mô tả các bước cụ thể để kiểm thử một chức năng.
-
Thiết lập môi trường test: Chuẩn bị thiết bị, cơ sở dữ liệu, công cụ…
-
Thực hiện kiểm thử: Chạy test case bằng tay hoặc tự động.
-
Ghi nhận lỗi (bug report): Ghi lại lỗi tìm thấy và chuyển cho lập trình viên.
-
Xác nhận lại lỗi đã sửa (Re-testing) và Regression test.
-
Đánh giá kết quả kiểm thử: Tổng hợp và báo cáo kết quả cuối cùng.
VII. Vai trò của người kiểm thử (Tester)
-
Là cầu nối giữa nhà phát triển và khách hàng.
-
Đảm bảo phần mềm đạt chất lượng trước khi phát hành.
-
Góp phần nâng cao uy tín, chất lượng sản phẩm.
Testing trong Flutter
Flutter là framework phát triển ứng dụng di động đa nền tảng do Google phát triển. Flutter hỗ trợ mạnh mẽ việc kiểm thử nhờ kiến trúc widget-based và bộ công cụ test tích hợp sẵn.
1. Các loại kiểm thử trong Flutter
a. Unit Test
-
Kiểm tra logic thuần túy của ứng dụng (không liên quan đến UI).
-
Dùng để kiểm tra các hàm, lớp hoặc service riêng biệt.
b. Widget Test
-
Kiểm tra từng widget riêng biệt và phản ứng của UI.
-
Không cần chạy trên thiết bị thật hoặc giả lập.
c. Integration Test
-
Kiểm thử toàn bộ luồng hoạt động của ứng dụng.
-
Mô phỏng hành vi thực tế của người dùng (nhấn nút, nhập liệu…).
Ưu điểm khi testing với Flutter
-
Không cần công cụ bên ngoài như Appium hay Selenium.
-
Viết test bằng chính ngôn ngữ Dart – không tách biệt khỏi project.
-
Dễ kiểm thử giao diện nhờ cấu trúc widget hóa toàn bộ UI.
-
Có thể mô phỏng toàn bộ tương tác người dùng một cách chi tiết.
Các công cụ hỗ trợ testing trong Flutter
- flutter_test: Thư viện hỗ trợ unit và widget test.
- integration_test: Hỗ trợ kiểm thử toàn bộ ứng dụng.
- flutter drive (cũ) – hiện nay nên dùng integration_test.
- flutter test: Lệnh để chạy các file test trong terminal.