Professional Documents
Culture Documents
Đặc trưng:
Kiểm thử hộp trắng dựa vào giải thuật cụ thể, cấu trúc dữ liệu bên trong của phần
mềm cần kiểm thử nhằm xác định đơn vị phần mềm đó có thực hiện đúng không.
Người kiểm thử hộp trắng phải có kỹ năng, kiến thức nhất định để có thể hiểu chi
tiết về đoạn code cần kiểm thử.
Nếu mức độ kiểm thử được nâng lên ở cấp kiểm thử tích hợp hay kiểm thử hệ
thống, thì sẽ cần nhiều thời gian và công sức để thực hiện.
Do đó, kỹ thuật này chủ yếu được dùng để kiểm thử đơn vị. Kiểm thử đơn vị là
kiểm thử từng tác vụ của một class chức năng nào đó trong lập trình hướng đối
tượng.
Có 2 hoạt động kiểm thử hộp trắng: Kiểm thử luồng điều khiển và kiểm thử dòng
dữ liệu.
3.2.2 Workflow
Kiểm thử hộp trắng được tiến hành trong hai bước cơ bản:
Điều đầu tiên mà một tester cần làm là học và hiểu mã nguồn của ứng dụng. Vì
kiểm thử hộp trắng liên quan đến kiểm tra hoạt động bên trong của một ứng dụng nên
người kiểm tra phải rất hiểu biết về các ngôn ngữ lập trình được sử dụng trong các ứng
dụng mà họ đang kiểm tra.
Ngoài ra, người kiểm tra còn phải nhận thức cao về các thực hành mã hóa an toàn. Người
kiểm thử có thể tìm ra các vấn đề bảo mật và ngăn chặn các cuộc tấn công từ tin tặc, hoặc
người dùng nào đó, những người có thể cố ý hoặc vô tình nhúng mã độc vào ứng dụng.
Bước này liên quan đến việc kiểm tra mã nguồn của ứng dụng để có luồng và cấu
trúc phù hợp.
Người kiểm thử sẽ phát triển các bài kiểm tra nhỏ cho từng quy trình hoặc một chuỗi quy
trình trong ứng dụng. Phương pháp này thường được thực hiện bởi các nhà phát triển,
người có kiến thức về mã.
Các phương pháp khác bao gồm Kiểm tra thủ công, thử nghiệm và kiểm tra lỗi, sử dụng
các công cụ kiểm tra.
3.2.3 Các kỹ thuật trong kiểm thử hộp trắng
Trong kỹ thuật này, các câu lệnh được duyệt qua ít nhất một lần. Do đó mỗi dòng
mã đều được kiểm tra. Trong trường hợp một lưu đồ (flowchart), mọi nút cũng phải được
duyệt qua ít nhất một lần. Và vì tất cả các dòng mã đều được che phủ, giúp chỉ ra mã bị
lỗi dễ dàng hơn.
Trong kỹ thuật này, các trường hợp kiểm thử được thiết kế để mỗi nhánh từ tất cả
các điểm được duyệt qua ít nhất một lần. Và trong một sơ đồ, tất cả các cạnh phải được
duyệt qua ít nhất một lần.
Trong hình trên, có 4 test case được thử nghiệm sao cho tất cả các nhánh của điều kiện
đều được bao phủ. Có nghĩa là tất cả trường hợp đều được kiểm tra.
Là phương pháp kiểm tra các biểu thức điều kiện trên hai giá trị True và False.
Đặc điểm: Cần xem xét kết hợp các điều kiện với nhau.
Ví dụ:
1. READ X, Y
2. IF(X == 0 || Y == 0)
3. PRINT ‘0’
Có 2 điều kiện: X==0 và Y==0. Để kiểm tra chúng là True hay False thì ta có:
Trường hợp 1: X = 0, Y = 10
Tất cả các trường hợp có thể có của các kết quả, sẽ được kiểm tra ít nhất một lần.
Ví dụ:
1. READ X, Y
2. IF(X == 0 || Y == 0)
3. PRINT ‘0’
Ta sẽ có:
Trường hợp 1: X = 0, Y = 0
Trường hợp 2: X = 0, Y = 5
Trường hợp 3: X = 5, Y = 0
Trường hợp 4: X = 5, Y = 10
Sẽ cần 4 trường hợp thử nghiệm cho hai điều kiện riêng lẻ.
Trong kỹ thuật này, đồ thị luồng điều khiển được tạo ra từ code hoặc lưu đồ và độ
phức tạp Cyclomatic được tính toán để xác định số lượng đường dẫn độc lập nhằm có thể
thiết kế số lượng trường hợp thử nghiệm tối thiểu cho mỗi đường độc lập.
Ký hiệu biểu đồ luồng: nó là một đồ thị có hướng bao gồm các nút và các cạnh. Mỗi
nút đại diện cho một chuỗi các câu lệnh hoặc một điểm quyết định. Nút vị (predicate
node) đại diện cho điểm quyết định có chứa điều kiện mà biểu đồ phân tách. Các vùng
được giới hạn bởi các nút và các cạnh.
Độ phức tạp của đồ thị dòng: là thước đo độ phức tạp logic của phần mềm và được sử
dụng để xác định số lượng đường dẫn độc lập. Cho đồ thị G, V(G) là độ phức tạp chu kỳ
của nó. Tính V(G):
V(G) = E - N + 2;
V(G) = P + 1.
Ví dụ:
Đường 1: 1 – 2 – 4 – 7 – 8
Đường 2: 1 – 2 – 3 – 5 – 7 – 8
Đường 3: 1 – 2 – 3 – 6 – 7 – 8
Đường 4: 1 – 2 – 4 – 7 - . . . – 7 – 8
Các vòng lặp được sử dụng nhiều và là nền tảng của nhiều thuật toán. Do đó việc
kiểm tra vòng lặp là rất quan trọng. Các lỗi thường xảy ra ở phần đầu và phần cuối của
vòng lặp.
Vòng lặp đơn giản (Simple loops): Với vòng lặp đơn giản kích thước n, các test case
được thiết kế như sau:
Vòng lặp lồng nhau (Nested loops): tất cả các vòng được đặt thành tối thiểu và bắt đầu
từ vòng lặp trong cùng. Thực hiện kiểm tra vòng lặp đơn giản cho vòng lặp trong cùng và
từ từ ra bên ngoài cho đến khi tất cả vòng lặp được kiểm tra.
Vòng lặp nối tiếp nhau (Concatenated loops): Kiểm tra vòng lặp đơn giản cho từng
vòng lặp độc lập. Nếu các vòng lặp không độc lập thì thực hiện kiểm tra vòng lặp lồng
nhau.
Ưu điểm
Test có thể bắt đầu ở giai đoạn sớm, không cần phải đợi giao diện để có thể test.
Test kỹ càng 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.
Tối ưu việc mã hóa
Việc kiểm soát lỗi tối đa nhất, do yêu cầu kiến thức cấu trúc bên trong phần mềm.
Nhược điểm