Vòng lặp của quy trình phát triển phần mềm có thể được kết thúc (tiến sang giai đoạn deploy) tại công đoạn kiểm tra. Vì vậy, các công ty đều rất chú trọng đến giai đoạn này. Unit Test là một kiểm thử phần mềm được sử dụng nhiều nhất trong thị trường hiện nay. Vậy phần mềm kiểm thử có tên Unit Test này là gì?
Trong bài viết dưới đây, GrowUpWork sẽ giải thích chi tiết về Unit Test và những điều cần biết và lưu ý về công đoạn test đầu tiên nhưng rất quan trọng này.
Hãy cùng bắt đầu tìm hiểu nhé!
Việc chạy thử và kiểm tra sản phẩm phần mềm (kiểm thử phần mềm) trước khi giao cho khách hàng là một công việc cần thiết. Vậy các cấp độ kiểm tra (test levels) để đạt được chất lượng cao là gì? Dưới đây là 4 cấp độ kiểm thử phần mềm chính:
Có 4 cấp độ kiểm thử khác nhau:
Trong phạm vi bài viết này, chúng ta sẽ chỉ đi sâu vào kiểm thử đơn vị (Unit Testing).
Kiểm thử đơn vị hay Unit Testing là công đoạn đầu tiên của quy trình kiểm thử phần mềm. Mục đích kiểm tra là xem mỗi đơn vị nhỏ nhất của phần mềm có đang phát triển theo kế hoạch hay không. Kiểm thử đơn vị là mức kiểm thử nhỏ nhất trong bất kỳ phần mềm nào. Các hàm (function), thủ tục (procedure), lớp (class) hoặc phương thức (method) có thể được xem như các đơn vị này.
Thông thường nó có một hoặc nhiều đầu vào, nhưng chỉ có một đầu ra. Nó được thực hiện bởi các lập trình viên và là White-box testing. Nó được thực hiện càng sớm càng tốt trong giai đoạn mã hóa và trong suốt quá trình phát triển phần mềm.
Mục tiêu của đơn vị kiểm thử là tập trung vào các thành phần có thể kiểm tra riêng biệt.
Tuy nhiên, bạn không nên hiểu rằng Unit Testing được sử dụng để tìm lỗi. Theo định nghĩa, các đơn vị kiểm thử kiểm tra từng đơn vị mã riêng biệt. Nhưng khi ứng dụng của bạn đang chạy trong thế giới thực, tất cả các đơn vị phải làm việc cùng nhau. Vì thế sẽ trở nên phức tạp hơn tổng các phần riêng lẻ của bài kiểm tra độc lập.
Viết Unit Test là một quá trình thiết kế, không phải là một quá trình kiểm tra sản phẩm. Viết một bài đơn vị kiểm thử buộc bạn phải suy nghĩ rõ ràng về thiết kế của mình. Xác định đầu vào và đầu ra mong đợi của từng đơn vị riêng lẻ và do đó chỉ định các thành phần, lớp, mô-đun,...
Một đơn vị (Unit) là thành phần nhỏ nhất mà chúng ta có thể kiểm tra. Chẳng hạn như các hàm (function), thủ tục (thủ tục), Class (lớp) hoặc phương thức (method), mô-đun cơ sở dữ liệu ...
Khi bạn nhận được một công việc, bạn thường làm như sau: Đọc Yêu cầu - Viết Mã - Có lỗi - Sửa lỗi.
Tuy nhiên, có một gợi ý hữu ích cho bạn là viết Unit Test trước khi triển khai mã code. Điều đó giúp ích cho việc định hướng hơn. Thiết kế chương trình chi tiết, giúp bạn xác định rõ các yêu cầu, những gì cần có trong mã và những gì mã của bạn phải đạt được.
Unit Test nên được viết dựa trên ý tưởng được chứa trong yêu cầu, chúng tôi xác định các thành phần phần mềm, lớp, giao diện cần thiết từ phân tích đặc tả và logic tương tác giữa các đơn vị này được chuyển từ mô tả trong đặc tả sang phương pháp trường hợp kiểm thử trong đặc tả đơn vị kiểm thử.
Quá trình viết Test thường bao gồm:
Như đã chia sẻ ở trên, đơn vị kiểm thử Unit Test là một kỹ thuật kiểm thử White Box Testing. Trong ngành kiểm thử phần mềm, có hai chiến lược kiểm thử điển hình là black box testing và whitebox testing.
Black-box testing thực hiện quá trình kiểm thử mà không cần biết mã nguồn của chương trình. Và White-box testing được sử dụng khi mã nguồn của chương trình có sẵn. Logic của chương trình có thể được kiểm tra bằng cách truy cập cấu trúc dữ liệu và thuật toán bên trong chương trình.
White-box testing được chia thành hai loại: luồng điều khiển (Control flow) và luồng dữ liệu (Data flow).
Trong khi viết Unit Test, bạn đã bao giờ tự hỏi mình “Có bao nhiêu phần của ứng dụng đã được thử nghiệm?”. Trong bài viết này, mình sẽ chia sẻ phương pháp đánh giá test case theo luồng điều khiển.
Code coverage là một phương pháp được sử dụng để mô tả mức độ mà mã code của chương trình đã thực thi khi chạy một Test. Nói cách khác, Code Coverage là một cách để đảm bảo rằng các thử nghiệm của bạn kiểm tra mã của bạn.
Code Coverage có thể chia thành các loại sau:
Đảm bảo rằng tất cả các dòng trong mã nguồn đã được kiểm tra ít nhất một lần.
Mức độ bao phủ của câu lệnh = (Số câu lệnh mã được kiểm tra / Tổng số câu lệnh mã) x100
Ví dụ: Có 100 lệnh, 87 lệnh có thể kiểm tra độ phủ của câu lệnh = 87%. Đối với ví dụ này, để bao phủ 100% câu lệnh dc, mỗi lệnh bắt buộc phải được kiểm tra ít nhất một lần.
Mọi câu lệnh if, case, do-while... hay bất cứ hàm nào đều được coi là một quyết định. Một quyết định có 2 đầu ra, TRUE hoặc FALSE, được gọi là kết quả quyết định. Để đảm bảo độ phủ 100%, mỗi đầu ra TRUE FALSE phải được kiểm tra ít nhất một lần.
Mức độ bao phủ quyết định = (Tổng kết quả ra quyết định của bài kiểm tra / Tổng kết quả ra quyết định) * 100.
Lưu ý: Khi bạn đảm bảo kiểm tra tất cả các quyết định, bạn cũng có thể đảm bảo vượt qua tất cả các dòng lệnh. 100% phạm vi quyết định ⇒ 100% phạm vi tuyên bố.
Đảm bảo rằng tất cả các đường dẫn có thể có từ đầu đến cuối của bài kiểm tra đều được kiểm tra. Có đảm bảo 100% đường dẫn có nghĩa là bạn có 100% phạm vi quyết định.
Trên đây là những hiểu biết của GrowUpWork về Unit Test và những điều bạn cần biết về kiểm thử phần mềm này. Hy vọng bài viết trên có thể giúp các bạn có những hiểu biết chung về Unit Test và đề xuất các test case phù hợp!