Hay còn gọi là Kiểm thử đơn vị, là một loại kiểm thử phần mềm tập trung vào việc kiểm tra các thành phần hoặc “đơn vị” nhỏ nhất và riêng biệt của mã nguồn. Một đơn vị có thể là một hàm (function), một phương thức (method), một lớp (class) hoặc một module. Mục đích chính của Unit Testing là để xác minh rằng mỗi đơn vị này hoạt động đúng theo thiết kế và thực hiện chức năng của nó một cách độc lập.

 

Vòng đời Unit Test

 

Unit Test có 3 trạng thái cơ bản như sau:

  • Fail – trạng thái lỗi.
  • Ignore – trạng thái tạm ngừng thực hiện.
  • Pass – trạng thái làm việc.

 

Unit Test được vận hành trong hệ thống tách biệt có nhiều PM hỗ trợ thực thi UT với giao diện trực quan. Thường thì trạng thái Unit Test được biểu hiện với những màu sắc khác nhau như là màu xanh (pass), màu vàng (ignore) và màu đỏ (fail).

 

Unit Test chỉ đem lại hiệu quả khi:

  • Tự động hoàn toàn
  • Được vận hành lặp lại nhiều lần
  • Độc lập với các Unit Test khác.

 

Thiết kế Unit test

 

Mỗi UT đều được thiết kế theo đúng trình tự như sau:

 

  • Thiết lập các điều kiện cần thiết: Khởi tạo đối tượng -> Xác định tài nguyên cần thiết -> Xây dựng các dữ liệu giả.
  • Triệu gọi phương thức cần kiểm tra.
  • Kiểm tra hoạt động chính xác của các phương thức.
  • Dọn dẹp tài nguyên sau khi kiểm tra kết thúc.

 

Ứng dụng Unit test

  • Kiểm tra đơn vị nhỏ nhất sẽ là các thuộc tính, thủ tục, sự kiện và hàm.
  • Kiểm tra trạng thái, ràng buộc đối tượng ở mức sâu mà thông thường chúng ta khó có thể truy cập được.
  • Kiểm tra quy trình (process) và mở rộng là các khung làm việc (workflow – tập hợp của nhiều quy trình).

 

Những khái niệm thường thấy khi làm Unit test 

 

 

  • Assertion

 

 

  • Là một phát biểu mô tả các công việc kiểm tra cần tiến hành, thí dụ: AreEqual(), IsTrue(), IsNotNull()… 
  • Mỗi một UT gồm nhiều assertion kiểm tra dữ liệu đầu ra, tính chính xác của các lỗi ngoại lệ ra và các vấn đề phức tạp khác như: 
  • Sự tồn tại của một đối tượng 
  • Điều kiện biên: Các giá trị có vượt ra ngoài giới hạn hay không 
  • Thứ tự thực hiện của các luồng dữ liệu …

 

 

  • Test Point

 

 

  • Là một đơn vị kiểm tra nhỏ nhất, chỉ chứa đơn giản một assertion nhằm khẳng định tính đúng đắn của một chi tiết mã nào đó. Mọi thành viên dự án đều có thể viết một test point. 

 

 

  • Test Case

 

 

  • Là một tập hợp các test point nhằm kiểm tra một đặc điểm chức năng cụ thể, thí dụ toàn bộ giai đoạn người dùng nhập dữ liệu cho đến khi thông tin được nhập vào cơ sở dữ liệu. Trong nhiều trường hợp kiểm tra đặc biệt và khẩn cấp có thể không cần đến test case.

 

 

  • Test Suite

 

 

  • Là một tập hợp các test case định nghĩa cho từng module hoặc hệ thống con.

 

 

  • Regression Testing (hoặc Automated Testing)

 

 

  • Là phương pháp kiểm nghiệm tự động sử dụng một phần mềm đặc biệt. Cùng một loại dữ liệu kiểm tra giống nhau nhưng được tiến hành nhiều lần lặp lại tự động nhằm ngăn chặn các lỗi cũ phát sinh trở lại. 
  • Kết hợp Regression Testing với Unit Testing sẽ đảm bảo các đoạn mã mới vẫn đáp ứng yêu cầu thay đổi và các đoạn mã cũ sẽ không bị ảnh hưởng bởi các hoạt động bảo trì.

 

 

  • Production Code

 

 

  • Phần mã chính của ứng dụng được chuyển giao cho khách hàng.

 

 

  • Unit Testing Code

 

 

  • Phần mã phụ để kiểm tra mã ứng dụng chính, không được chuyển giao cho khách hàng.

 

Ưu điểm của Unit Testing

 

  • Ta có thể kiểm thử từng phần riêng rẽ mà không phải đợi các phần khác hoàn thành.
  • Vấn đề được phát hiện càng sớm thì càng ít lỗi phức hợp xảy ra.
  • Quá trình debug được thực hiện dễ dàng hơn.
  • Các dev có thể nhanh chóng thực hiện những thay đổi đối với code base.
  • Các dev cũng có thể sử dụng lại code, chuyển nó sang các dự án mới.
  • Các lỗi được phát hiện sớm sẽ giúp giảm chi phí sửa lỗi. Bởi vì chi phí sửa lỗi trong giai đoạn unit test sẽ ít hơn so với những giai đoạn sau.

 

Nhược điểm của Unit Testing

 

  • Các bài test sẽ không phát hiện ra tất cả các bug.
  • Unit tests chỉ kiểm tra các tập dữ liệu và chức năng của nó. Chứ unit tests không tìm ra các lỗi tích hợp.
  • Có thể cần viết nhiều dòng test code hơn để kiểm tra một dòng code.
  • Unit testing cần đầu tư thời gian, công sức để học tập. Bởi vì đôi khi bạn cần học cách sử dụng các công cụ phần mềm tự động.

About the Author

Huyền Vy

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Notion

  Là một ứng dụng quản lý công việc đa năng, hỗ trợ người dùng trong việc ghi chú, theo dõi nhiệm vụ, quản lý dự án, xây dựng wiki và lưu trữ cơ sở dữ liệu trong cùng một nền tảng. Là một ứng dụng viết ghi chú, nhưng nếu biết cách sử dụng, […]

Security Testing

Hay còn gọi là Kiểm thử bảo mật, là một trong những phần quan trọng trong phát triển phần mềm, nhằm đảm bảo các hệ thống và ứng dụng trong một tổ chức không có bất kỳ sơ hở nào có thể gây ra các tổn thất về an toàn bảo mật. Kiểm thử bảo […]

Non-Functional Testing

Hay còn gọi là Kiểm thử phi chức năng, là kỹ thuật kiểm thử tập trung vào việc đánh giá các khía cạnh phi chức năng của hệ thống. Nó kiểm tra các tham số không được kiểm tra trong Function Testing (kiểm thử chức năng), chẳng hạn như hiệu suất, khả năng sử dụng, […]

Smoke Testing

Hay còn gọi là Kiểm thử khói, là một loại kiểm thử phần mềm nhanh chóng, tập trung vào việc xác minh các chức năng cốt lõi và quan trọng nhất của ứng dụng có hoạt động ổn định hay không. Mục đích chính là để kiểm tra xem bản dựng (build) mới của phần […]

Functional Testing

Hay còn gọi là kiểm thử chức năng, là kỹ thuật kiểm tra phần mềm dựa trên từng chức năng để đảm bảo hệ thống đáp ứng đúng yêu cầu đã đặt ra. Đây là dạng kiểm thử hộp đen, trong đó tester không cần quan tâm đến mã nguồn mà chỉ so sánh chức […]

Testing Techniques

Hay còn gọi là các kỹ thuật kiểm thử, là các phương pháp và quy trình cụ thể được sử dụng để thiết kế và thực hiện các test case (trường hợp kiểm thử). Chúng cung cấp một cách tiếp cận có hệ thống để khám phá các lỗi (defects), đánh giá các thuộc tính […]