Test  Viewpoint
Menu
  • Home
  • Basic Knowledge
  • Manual Testing
  • Test Automation
  • Blog
  • About Me
  • Contact
Menu
#16 White-box testing

White-box Testing: Loop Testing (phần 16)

Posted on January 16, 2024January 4, 2024 by Test Viewpoint

Kiểm Thử Vòng Lặp – Loop Testing Là Gì?

Kiểm thử vòng lặp – Loop testing (hay Loop coverage) là một phương pháp trong kiểm thử phần mềm để đảm bảo rằng tất cả các loại vòng lặp trong source code đã được thực thi một số lần tương ứng. Mục tiêu của kiểm thử vòng lặp là đảm bảo rằng source code chứa vòng lặp hoạt động đúng cách và không gặp phải lỗi hoặc vấn đề về hiệu suất do các vòng lặp không kết thúc hoặc không hoạt động như dự kiến gây ra.

Kiểm thử vòng lặp thường được đo lường bằng cách xác định một số tiêu chí quan trọng, bao gồm:

  • Loop Entry Coverage: Đảm bảo rằng mỗi vòng lặp đã được thực thi ít nhất một lần. Điều này đảm bảo rằng mọi vòng lặp đã được kích hoạt trong source code.
  • Loop Exit Coverage: Đảm bảo rằng mỗi vòng lặp đã kết thúc ít nhất một lần. Điều này đảm bảo rằng tất cả các điều kiện kết thúc vòng lặp đã được kiểm tra.
  • Loop Iteration Coverage: Đảm bảo rằng số lần lặp tối thiểu và tối đa đã được thực hiện cho mỗi vòng lặp. Điều này có thể bao gồm kiểm tra các giới hạn về số lần lặp trong vòng lặp.

Việc sử dụng kiểm thử vòng lặp giúp tăng cường quá trình kiểm thử bằng cách tập trung vào các phần quan trọng của source code mà có thể ảnh hưởng đến hiệu suất và tính ổn định của phần mềm. Nó cũng giúp phát hiện lỗi liên quan đến vòng lặp như lặp vô hạn (infinite loop), vòng lặp không bao giờ thực thi, hoặc vòng lặp thực thi quá ít lần.

Ví Dụ Về Kiểm Thử Vòng Lặp

Các lý thuyết khác nhau đã được đưa ra nhằm cố gắng quy định mức độ kiểm thử mà chúng ta nên đưa ra cho một vòng lặp. Mức tối thiểu cơ bản có xu hướng là ba lần kiểm tra, không lần nào qua vòng lặp và một lần qua vòng lặp, sau đó kiểm tra số lần tối đa dự kiến sẽ quy vòng (nếu bạn biết số lần có thể là bao nhiêu).

Cùng mình xem xét lại ví dụ sau đây:

Hình: Loop coverage 0 and 1 times through

Test 1: n = 0

Bằng cách nhập số 0 (theo mũi tên màu trắng), chúng ta sẽ có vòng lặp không được thực hiện lần nào. Do điều kiện có giá trị là (0 ≤ 1) hoặc FALSE. Điều này khiến chúng ta rơi khỏi vòng lặp.

Test 2: n = 1

Bằng cách nhập số 1 (theo mũi tên màu đen), chúng ta sẽ có vòng lặp thực hiện chỉ một lần. Khi nhập dòng 12, điều kiện có giá trị là (1 <= 1) hoặc TRUE. Vòng lặp thực thi và i được tăng lên. Tại thời điểm này, điều kiện được đánh giá lại, ( 2 <= 1) hoặc FALSE. Điều này khiến chúng ta rơi ra khỏi vòng lặp.

Làm thế nào để xác định số vòng lặp tối đa thông qua? Mỗi vòng lặp có thể có một cách khác nhau để tìm ra điều đó; đối với một số vòng lặp, sẽ không thể xác định được.

Trong đoạn code này, chúng ta có một giá trị tăng dần đều giúp dễ dàng tính toán số vòng lặp lớn nhất có thể. Kích thước tối đa của kiểu dữ liệu được sử dụng trong biến Collector, f, sẽ cho phép chúng ta tính toán số lần lặp tối đa. Chúng ta cần so sánh kích thước của giai thừa được tính toán với kích thước số nguyên tối đa (loại dữ liệu thực tế sẽ phải được xác nhận trong code).

Hãy cùng mình xem xét bảng các giá trị giai thừa dưới đây.

nn!
01
11
22
36
424
5120
6720
75,040
840,320
9362,880
103,628,800
1139,916,800
12479,001,600
136,227,020,800
1487,178,291,200
151,307,674,368,000
Bảng: Các giá trị giai thừa

Giả sử số nguyên 32 bit có dấu được sử dụng để thực hiện phép tính, giá trị tối đa có thể được lưu trữ là 2.147.483.647. Đầu vào là 12 sẽ cho chúng ta giá trị 479.001.600. Giá trị đầu vào là 13 sẽ gây ra tràn (6.227.020.800).

Cùng mình tiếp tục xem xét ví dụ trên với 2 trường hợp kiểm thử mới:

Test 3: n = 12

Test 4: n = 13

Hình: Loop coverage max times through

Cần lưu ý rằng quy tắc về phạm vi bao phủ vòng lặp không giải quyết toàn diện việc kiểm tra tiêu cực (negative testing). Kiểm tra tiêu cực là kiểm tra các giá trị không hợp lệ để đảm bảo lỗi mà chúng gây ra là nhẹ nhàng, cung cấp cho chúng ta thông báo lỗi có ý nghĩa và có thể khôi phục sau lỗi. Có lẽ chúng ta muốn kiểm tra giá trị 13 để đảm bảo việc tràn được xử lý một cách khéo léo. Điều này nhất quán với khái niệm kiểm tra giá trị biên đã thảo luận ở phần trước.

Tóm lại, với với kiểm thử vòng lặp, ví dụ này cần xem xét các trường hợp kiểm thử sau:

Test 1: n = 0, vòng lặp không được thực thi

Test 2: n = 1, vòng lặp được thực thi một lần

Test 3: n = 12, vòng lặp được thực thi tối đa

Test 4: n = 13, vòng lặp không được thực thi. Kiểm tra để đảm bảo việc xử lý tràn bộ nhớ được thực hiện một cách khéo léo.

Bài viết hôm nay mình xin kết thúc ở đây. Hẹn gặp lại các bạn trong các bài viết tiếp theo.

Happy Testing!

Related

Category: Basic KnowledgeTest Automation

Archives

  • June 2025
  • May 2025
  • April 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023

Categories

  • Basic Knowledge
  • Manual Testing
  • Test Automation

About Me

Xin chào các bạn. Mình là một kỹ sư kiểm thử phần mềm. Ngành công nghệ thông tin nói chung và công việc kiểm thử phần mềm nói riêng luôn luôn đổi mới đòi hỏi phải học hỏi mỗi ngày. Với mình chia sẻ những gì học được là cách tốt nhất để mình học những điều mới. Hãy cùng mình tìm hiểu thông qua blog này nhé!

Newsletter

Nhận thông báo về bài viết mới nhất qua email

Popular Posts

About Me

Xin chào các bạn. Mình là một kỹ sư kiểm thử phần mềm. Ngành công nghệ thông tin nói chung và công việc kiểm thử phần mềm nói riêng luôn luôn đổi mới đòi hỏi phải học hỏi mỗi ngày. Với mình chia sẻ những gì học được là cách tốt nhất để mình học những điều mới. Hãy cùng mình tìm hiểu thông qua blog này nhé!

  • Facebook
  • Instagram
  • YouTube

Recent Posts

Newsletter

Nhận thông báo về bài viết mới nhất qua email

©2025 Test Viewpoint