Kiểm thử hộp trắng
Bài đăng này đã không được cập nhật trong 3 năm
Kiểm thử hộp trắng (White box testing) là một kỹ thuật xác minh giúp các kỹ sư phần mềm có thể sử dụng để kiểm tra mã code của họ hoạt động như dự kiến. Có 2 hoạt động kiểm thử hộp trắng:
- Kiểm thử luồng điều khiển
- Kiểm thử dòng dữ liệu
Trong bài viết này, tôi trình bày sơ lược về kiểm thử luồng điều khiển. Để tìm hiểu về kiểm thử luồng điều khiển trước hết ta phải hiểu về đường cơ sở (basic path testing).
Đường cơ sở (basic path testing)
Là con đường thử nghiệm cơ bản, một thử nghiệm có cấu trúc hoặc kỹ thuật kiểm thử hộp trắng được sử dụng cho việc thiết kế trường hợp thử nghiệm nhằm kiểm tra tất cả các đường dẫn có thể thực hiện ít nhất một lần. Tạo và thực hiện các thử nghiệm cho tất cả các đường dẫn kết quả tốt ở khi 100% bao phủ nhánh. Ví dụ đoạn mã:
Các bước để xây dựng nên đường cơ sở được chia như sau:
- Bước 1: Vẽ đồ thị mô tả dòng điều khiển
- Bước 2: Xác định các đường tuyến tính độc lập:
Sau đó chúng ta thực hiện tạo từng test case cho từng đường thi hành tuyến tính cơ bản rồi so sánh kết quả có được với kết quả được kỳ vọng.
Các kĩ thuật kiểm thử hộp trắng
Khi thực hiện kiểm thử bằng whitebox testing thì ta phải có một bộ test cho chương trình đó. Tuy nhiên làm sao để biết chắc chắn được là bộ test của chúng ta đã đầy đủ cho tất cả các trường hợp hay chưa? Lúc này ta sẽ áp dụng các kiến thức của coverage tesing để đo đạc kết quả của chương trình khi thực hiện bộ kiểm thử.
Coverage testing có thể hiểu nôm na là tỉ lệ (tính theo %) test case đã được thực hiện trên tổng số test case cần thiết cho ứng dụng. Nếu tỉ lệ này càng cao thì ứng dụng càng được test kỹ. Mặc dù việc đảm bảo ứng dụng có test coverage là 100% trong một số trường hợp là bất khả thi, nhưng ta vẫn sẽ luôn cố gắng để đạt được kết quả gần với con số đó nhất.
Có 3 kĩ thuật
- Bao phủ câu lệnh(Statement Coverage): Kiểm thử sao cho mỗi câu lệnh được thực thi ít nhất 1 lần. Ví dụ đọan mã:
Public int foo(int x, int y) Int z = 0; If (x > 0 && y > 0) { z = x; } Return z; }
Nếu ta gọi foo(1,1) thì dòng z = x sẽ được thực hiện, còn nếu gọi foo(0,1) thì dòng z = x sẽ không được thực hiện, lúc đó test case của ta sẽ không thỏa điều kiện bao phủ câu lệnh.
- Bao phủ điều kiện(Branch Coverage, Decision coverage): Kiểm thử đòi hỏi phải đủ trường hợp thử nghiệm như vậy mà mỗi điều kiện trong một quyết định có trên tất cả các kết quả có thể ít nhất một lần. Đó là các nhánh (quyết định) lấy cả 2 trường hợp đúng và sai. Nó giúp trong việc chứng thực tất cả các ngành có mã đảm bảo rằng đó không có chi nhánh dẫn đến hành vi bất thường của ứng dụng. Ví dụ đoạn mã:
Ta có thể sinh các test case bao phủ các điều kiện của nhánh:
- Bao phủ nhánh(Path Coverage): Trong các trường hợp kiểm thử được thực hiện trong một cách mà mọi con đường được thực hiện ít nhất một lần. Tất cả các con đường kiểm soát có thể được thực hiện, bao gồm tất cả những con đường vòng lấy bằng không, một lần, và nhiều (lý tưởng là tối đa) các trường hợp thử nghiệm được chuẩn bị dựa trên các biện pháp phức tạp logic của một thiết kế thủ tục. Để hoàn thiện bao phủ nhánh, chúng ta phải xét thêm 2 trường hợp bug(a) khi đúng và khi sai.
Tổng kết
Coverage testing giúp ta xem xét tỉ lệ các test case dùng để thực thi cho mã nguồn đã đủ hay còn thiếu, giúp tìm ra lỗi tìm tàng trong sản phẩm phần mềm và giúp xây dựng các test case chất lượng để tăng độ phủ của bộ test.
Nguồn:
http://agile.csc.ncsu.edu/SEMaterials/WhiteBox.pdf
http://coltech.vnu.edu.vn/~hungpn/class/ASE/KiemthuHopTrang.pdf
All rights reserved