Các hình thức kiểm thử


Đầu tiên là hai hình thức kiểm thử cho hai giai đoạn đầu của quy trình phát triển phần mềm Kiểm thử yêu cầu và kiểm thử thiêt kế. Hai hình thức kiểm thử này chỉ có trong các quy trình phát triển phần mềm truyền thống (Waterfall, spiral...). Những quy trình thuộc dạng Agile hầu như không thực hiện cách kiểm thử này hoặc nếu có cũng chỉ thực hiện theo hình thức review.

1. Kiểm thử yêu cầu và kiểm thử thiết kế
Những dự án được phát triển theo mô hình truyền thống tất cả mọi giai đoạn cần phải được kiểm tra để đảm bảo rằng không có những lỗi khi chuyển sang giai đoạn khác. Do yếu tố chặc chẽ của quy trình nên các hình thức kiểm thử này là tất yếu.

Hình thức kiểm thử này do QA và các Tester thực hiện
2. Kiểm thử Unit (Junit - java, Nunit - .Net...)

Hình thức kiểm thử này được thực hiện bởi người phát triển. Mục tiêu của hình thức kiểm thử này là để bản thân người lập trình phải tự đánh giá lại mã lệnh để giảm thiểu số lỗi sảy ra.

Theo thống kê củaSteve McConell trong cuốn sách Code complete (phiên bản 2) ở trang 47 thì nếu thực hiện tốt hình thức này chúng ta có thể giảm đến 50% số lỗi của phần mềm.

3. Kiểm thử tích hợp (Intergration test)

Hình thức kiểm thử này cũng do những người phát triển phần mềm thực hiện. Mục tiêu của hình thức kiểm thử này là xác định các chức năng (class, method...) mà mình vừa viết có làm cho các chức năng khác bị lỗi hay không.

Theo Steve McConell, nếu thực hiện tốt giai đoạn này ta có thể tìm được khoảng 40% số lỗi do vấn đề tích hợp các chức năng của hệ thống gây ra.

4. Kiểm thử hệ thống (System test)

Hình thức kiểm thử này do các tester thực hiện và tùy theo loại dự án mà ta có thể chọn một trong các hình thức kiểm thử sau đây.

- Kiểm thử các chức năng theo hình thức hộp đen (black box functional testing)
- Kiểm thử các yêu cầu phi chức năng (nonfunctional)
- Kiểm thử thực thi (performance testing) hình thức kiểm thử này dùng để kiểm định lại những đặc điểm như phần mềm có chạy đúng (đảm bảo tính tin cậy), có khả năng mở rộng hoặc có chiếm quá nhiều tài nguyên của máy không.
- Kiểm thử sức chịu tải (Load test, Stress test) với hình thức  này kiểm thử viên sẽ đặt ra những trường hợp đặc biệt như website có nhiều người vào cùng một lúc. Ứng dụng đang chạy trên bộ nhớ ram đã dùng gần hết...) Mục đích của hình thức kiểm thử này là để xác định hệ thống sẽ phản ứng như thế nào trong những trường hợp đặc biệt đó.

- Kiểm thử bảo mật (security testing)

- Kiểm thử cấu hình (configuration testing) chạy và kiểm thử ứng dụng trên các nền tảng khác nhau như Window xp, vista, 7, 8 hoặc chạy trên các máy tính với cấu hình khác nhau...

- Kiểm thử sao lưu dữ liệu (Recovery testing) thực hiện kiểm thử để đảm bảo hệ thống có thể chạy được khi có sự cố như bị tấn công bởi hacker và mất dữ liệu...

5. Kiểm thử hồi quy (Regression Test)

Hình thức kiểm thử này thường do người lập trình và cả kiểm thử viên thực hiện. Mục đích của kiểm thử này là thực hiện việc đánh giá lại đoạn mã lệnh sau khi được sửa lỗi (đã test và sửa lỗi) thì các đoạn mã lệnh sửa lỗi đó có ảnh hưởng đến các mã lỗi khác hay không.

6. Kiểm thử chấp nhận (Aceptance Testing)

- Hình thức kiểm thử này thông thường được thực hiện rất cẩn thận vì đây là hình thức kiểm thử cuối dùng trước khi sản phẩm được đưa ra thị trường. Với mỗi dạng mô hình phát triển phần mềm thường có một cách khác nhau

- Với quy trình dạng Agile. Kiểm thử xác nhận thông thường do khách hàng (Users) thực hiện. Theo cách thực hiện của loại quy trình này thì cứ mỗi giai đoạn của ứng dụng thì một bản release sẽ được tạo và khách hàng có thể thực hiện kiểm thử trên từng phần đó.

- Với quy trình truyền thống, thông thường QA sẽ thự hiện kiểm thử để đánh giá lần cuối về lỗi của phần mềm.

- Tuy nhiên, với các ứng dụng lớn thì thông thường các công ty còn nâng cấp hình thức này lên ở mức cao hơn như Alpha Testing và Beta Testing. Các hình thức này thường là chạy ứng dụng trong môi trường thực và ghi lại những lỗi gặp phải. Ví dụ trong trường hợp này là công ty Microsoft. Cứ mỗi khi một sản phẩm mới ra đời thì những nhân viên trong công ty phải là người sử dụng đầu tiên.