Kỹ thuật kiểm thử hộp trắng – White-box testing

Bất kỳ sản phẩm phần mềm nào cũng chắc chắn có lỗi, bởi vì sản phẩm phần mềm do con người xây dựng, dù có cẩn trọng và giỏi đến đâu, cũng không thể đảm bảo rằng sản phẩm mình tạo ra là hoàn toàn không lỗi. Do đó, cần có một người, nhóm hoặc tổ chức độc lập để kiểm thử sản phẩm đó và xác định xem có vấn đề hay lỗi gì không. Để kiểm thử phần mềm, chúng ta cần có kế hoạch, chiến lược kiểm thử và kỹ thuật hiệu quả cho mỗi mức độ kiểm thử. Kiểm thử phần mềm bao gồm hai phương pháp khác nhau là kiểm thử hộp trắng (white-box testing) và kiểm thử hộp đen (black-box testing).

Trong đề tài này, tôi sẽ đi sâu vào tìm hiểu về kỹ thuật kiểm thử hộp trắng. Để hiểu rõ hơn về kỹ thuật kiểm thử hộp trắng (White-box testing), chúng ta hãy tìm hiểu các nội dung dưới đây:

1. Kiểm thử hộp trắng là gì?

Kiểm thử hộp trắng (còn gọi là Clear Box Testing, Open Box Testing, Glass Box Testing, Transparent Box Testing, Code-Based Testing hoặc Structural Testing) là một phương pháp kiểm thử phần mềm trong đó người kiểm tra biết về cấu trúc nội bộ / thiết kế. Người kiểm tra chọn đầu vào để thực hiện các đường dẫn thông qua mã và xác định đầu ra thích hợp. Kiến thức về lập trình và thực hiện là rất cần thiết trong kiểm thử hộp trắng.

Kỹ thuật kiểm thử hộp trắng - White-box testing

Việc kiểm thử hộp trắng bao gồm phân tích dòng dữ liệu, điều khiển dòng, dòng thông tin, mã thực hiện, ngoại lệ và các lỗi trình bày trong hệ thống để kiểm tra các hành động của phần mềm không định hướng trước.

Có Thể Bạn Quan Tâm :   Thủ tục kiểm soát là gì? Các loại thủ tục kiểm soát nội bộ

2. Đối tượng áp dụng

Đối tượng được kiểm thử là một thành phần phần mềm (TPPM). TPPM có thể là một hàm chức năng, một module chức năng hoặc một phân hệ chức năng…

3. Mức độ áp dụng

Phương pháp Kiểm tra Hộp trắng áp dụng cho các mức độ kiểm tra phần mềm sau:

  • Unit Testing (Kiểm thử đơn vị): Để kiểm tra các đường dẫn trong một đơn vị.
  • Integration Testing (Kiểm thử tích hợp): Để kiểm tra các đường dẫn giữa các đơn vị.
  • System Testing (Kiểm thử hệ thống): Để kiểm tra các đường dẫn giữa các hệ thống con.

Tuy nhiên, phương pháp này chủ yếu áp dụng cho kiểm thử đơn vị.

4. Ưu điểm và nhược điểm của kiểm thử hộp trắng

  • Ưu điểm
    • Test có thể bắt đầu ở giai đoạn sớm hơn, không cần phải chờ đợi GUI để có thể kiểm tra.
    • Test chi tiết hơn, có thể bao phủ hầu hết các đường dẫn.
    • Thích hợp trong việc tìm kiếm lỗi và các vấn đề trong mã lệnh.
    • Cho phép tìm kiếm các lỗi ẩn bên trong.
    • Các lập trình viên có thể tự kiểm tra.
    • Giúp tối ưu việc mã hoá.
    • Do yêu cầu kiến thức về cấu trúc bên trong của phần mềm, nên có thể kiểm soát lỗi tối đa.
  • Nhược điểm
    • Vì các bài kiểm tra rất phức tạp, đòi hỏi có tay nghề cao và kiến thức sâu rộng về lập trình và thực hiện.
    • Maintenance test script có thể là gánh nặng nếu thể hiện thay đổi quá thường xuyên.
    • Vì phương pháp kiểm thử này liên quan chặt chẽ với ứng dụng được kiểm tra, nên các công cụ để phục vụ cho mọi loại triển khai/nền tảng có thể không có sẵn.
Có Thể Bạn Quan Tâm :   Hàng Tồn Kho Là Gì? Định Nghĩa Vai Trò Và Đặc Điểm Hàng Tồn Kho

5. Các kỹ thuật kiểm thử hộp trắng phổ biến

5.1. Kiểm thử đường cơ bản – Đồ thị dòng

  • Là một kỹ thuật được sử dụng trong kiểm thử hộp trắng do Tom McCabe đưa ra đầu tiên. Đồ thị dòng tương tự như đồ thị luồng điều khiển của chương trình.

  • Đây là phương pháp mô tả thuật giải dễ hiểu. Phương pháp này giúp chúng ta nhìn thấy các thành phần và mối quan hệ giữa chúng khi thực hiện thuật giải.

  • Kỹ thuật đường cơ bản – đồ thị dòng có thể giúp người thiết kế kiểm thử nhận biết độ phức tạp của một logic thủ tục.

  • Đồ thị dòng điều khiển bao gồm hai loại thành phần: các nút và các cung kết nối giữa chúng.

  • Các loại nút trong đồ thị dòng điều khiển: Kỹ thuật kiểm thử hộp trắng - White-box testing

  • Các cấu trúc thành phần đồ thị dòng điều khiển: Kỹ thuật kiểm thử hộp trắng - White-box testing

    Ví dụ: Kỹ thuật kiểm thử hộp trắng - White-box testing Nếu đồ thị dòng điều khiển chỉ chứa các nút quyết định nhị phân thì gọi là đồ thị dòng điều khiển nhị phân. Ta luôn có thể chi tiết hóa một đồ thị dòng điều khiển bất kỳ thành đồ thị dòng điều khiển nhị phân. Kỹ thuật kiểm thử hộp trắng - White-box testing

  • Độ phức tạp Cyclomatic C Độ phức tạp Cyclomatic C = V(G) của đồ thị dòng điều khiển được tính bằng một trong các công thức sau: V(G) = E – N + 2, trong đó E là số cung, N là số nút của đồ thị. V(G) = P + 1, nếu là đồ thị dòng điều khiển nhị phân (chỉ chứa các nút quyết định luận lý – chỉ có 2 cung xuất True/False) và P số nút quyết định. Độ phức tạp Cyclomatic C chính là số đường thực hiện tuyến tính độc lập của TPPM cần kiểm thử.

5.2 Kiểm thử dựa trên luồng điều khiển

  • Đường thi hành (Execution path): là một kịch bản thi hành đơn vị phần mềm tương ứng, cụ thể là danh sách các lệnh được thi hành theo một thứ tự nhất định ứng với một lần chạy cụ thể của đơn vị phần mềm, từ điểm nhập của đơn vị phần mềm đến điểm kết thúc của đơn vị phần mềm.

  • Mỗi TPPM có từ một đến n (có thể rất lớn) đường thi hành khác nhau.

  • Mục tiêu của phương pháp kiểm thử luồng điều khiển là đảm bảo mọi đường thi hành của đơn vị phần mềm cần kiểm thử đều chạy đúng. Tuy nhiên, trong thực tế, công sức và thời gian để đạt mục tiêu trên là rất lớn, ngay cả trên những đơn vị phần mềm nhỏ.

  • Ví dụ về đoạn mã sau: for (i=1; i<=1000; i++) for (j=1; j<=1000; j++) for (k=1; k<=1000; k++) doSomethingWith(i,j,k); chỉ có một đường thi hành, nhưng rất dài: 100010001000 = 1 tỷ lệnh gọi hàm doSomething(i,j,k) khác nhau.

  • Còn đoạn mã gồm 32 lệnh if else độc lập sau: if (c1) s11 else s12; if (c2) s21 else s22; if (c3) s31 else s32; … if (c32) s321 else s322; có 2^32 = 4 tỷ đường thi hành khác nhau.

  • Thậm chí nếu kiểm thử hết tất cả các đường thi hành, vẫn không thể phát hiện được những đường thi hành cần có nhưng chưa được hiện thực: if (a>0) doIsGreater(); if (a==0) doIsEqual(); // thiếu việc xử lý trường hợp a < 0 – if (a<0) doIsLess();

  • Một đường thi hành đã được kiểm tra là đúng, nhưng vẫn có thể bị lỗi khi sử dụng thực tế (trong một số trường hợp đặc biệt): int phanso(int a, int b) { return a/b; } khi kiểm tra, ta chọn b <> 0 thì chạy đúng, nhưng khi sử dụng thực tế trong trường hợp b = 0 thì hàm phân số bị lỗi.

    => Ngoài hai kỹ thuật kiểm thử trên, còn có: Kiểm thử dựa trên luồng dữ liệu (Data-flow Testing) và kiểm thử đột biến (Mutation Testing).

Có Thể Bạn Quan Tâm :   Booking là gì? Cần tìm hiểu những gì trước khi Book phòng khách sạn?

Tài liệu tham khảo: http://softwaretestingfundamentals.com/white-box-testing/

Back to top button