Unit Testing là gì? (QC/Tester)

Kiểm thử (mức) đơn vị (unit testing)

Đây là mức kiểm thử thấp nhất. Ở mức kiểm thử này, các thành phần nhỏ nhất của một hệ thống phần mềm như class, function, hay module sẽ được kiểm thử riêng lẻ. Phần lớn test case (các trường hợp kiểm thử) ở mức này sẽ gọi trực tiếp đối tượng được kiểm thử (như class, function… nào đó) trong code (mã nguồn) nên cần phải có sự hỗ trợ của các thư viện (unit test framework phổ biến như XUnit, JUnit, Nunit, Jest,… đa phần ngôn ngữ lập trình nào cũng có nhiều thư viện hỗ trợ cho unit testing) để giả lập các cụm chức năng (class, function,…) liên quan nhằm tách riêng phần cần kiểm thử.

Khi phát hiện lỗi ở mức kiểm thử này thường sẽ giúp tiết kiệm thời gian và chi phí nhiều vì nếu không được phát hiện lỗi này sớm, có thể nó sẽ gây ra các lỗi tích hợp, hoặc gây ra sự cố khi đưa vào sử dụng thực tế. Lúc này chúng ta phải đi sửa lỗi ở 1 đơn vị code nào đó, và phải test lại (confirmation testing) để xem lỗi này đã được sửa đúng hay chưa, ngoài ra còn phải kiểm thử các khu vực khác để bảo đảm quá trình sửa lỗi không gây ra lỗi mới khác (regression testing).

Ví dụ, như hình bên dưới, để kiểm thử đơn vị code màu vàng, chúng ta phải giả lập các đơn vị có liên quan trực tiếp đến nó (màu xanh tím).

Trong thực tế, lập trình viên (developer – hay gọi tắt là dev) sẽ phụ trách thực hiện kiểm thử đơn vị. Để xác định trường hợp cần kiểm thử, dev sẽ dựa vào mã nguồn (source code) và tài liệu mô tả yêu cầu chi tiết (SRS – System Requirement Specification) của chức năng đang được kiểm thử là nguồn thông tin bổ sung, giúp xác định kết quả mong đợi cho các test case đó.

Trong ví dụ trong hình dưới, chương trình kiểm tra số nguyên tố đơn giản, không cần phải giả lập gì. Và 2 test case cơ bản để kiểm tra 1 số là số nguyên tố và 1 số không phải là số nguyên tố.