Kiểm tra vòng lặp là gì? Phương pháp, ví dụ

⚡ Tóm tắt thông minh

Kiểm thử vòng lặp xác thực cấu trúc vòng lặp bên trong chương trình, kiểm tra điều gì xảy ra khi một vòng lặp bị bỏ qua, được gọi một lần, được thực thi tại giới hạn của nó và bị đẩy vượt quá số lần lặp tối đa cho phép.

  • 🔘 Định nghĩa: Một kỹ thuật cấu trúc điều khiển hộp trắng nhằm mục đích kiểm tra tính hợp lệ của vòng lặp, chứ không phải để hiển thị màn hình.
  • 🔁 Bốn lớp: Các vòng lặp đơn giản, lồng nhau, nối tiếp và không có cấu trúc đều cần chiến lược riêng.
  • 📍 Ba điểm kiểm tra: Điểm vào vòng lặp, hành vi trong quá trình thực thi và điều kiện thoát khỏi vòng lặp.
  • 🧪 Đường biên giới: Không, một, hai, một số đếm thông thường, sau đó là b-1, b và b+1 lần lặp.
  • 🪜 Thứ tự lồng nhau: Bắt đầu từ vòng trong cùng, giữ các vòng ngoài ở mức tối thiểu, sau đó làm việc ra ngoài.
  • 🐞 Các lỗi được phát hiện: Các giới hạn sai lệch một đơn vị, bộ đếm chưa được khởi tạo, vòng lặp vô hạn và tắc nghẽn dung lượng.
  • ⚠️ hạn chế: Các lỗi vòng lặp thường nằm ở mã cấp thấp và hiếm khi khó phát hiện khi gặp phải.

Phương pháp kiểm thử vòng lặp, các loại vòng lặp và các trường hợp kiểm thử ví dụ.

Kiểm tra vòng lặp là gì?

Kiểm tra vòng lặp Đây là một loại kiểm thử phần mềm tập trung hoàn toàn vào tính hợp lệ của các cấu trúc vòng lặp trong chương trình. Nó là một phần của kiểm thử cấu trúc điều khiển, cùng với... kiểm tra đường dẫn, kiểm thử xác thực dữ liệu và kiểm thử điều kiện.

Kiểm tra vòng lặp là một kiểm thử hộp trắng Đây là kỹ thuật được áp dụng bởi người có thể đọc mã nguồn và xem điều kiện vòng lặp, bộ đếm và đường dẫn thoát. Người kiểm thử không cần phải đoán hành vi từ giao diện người dùng; chính vòng lặp là đối tượng cần kiểm thử.

Sơ đồ bên dưới cho thấy vị trí của kiểm thử vòng lặp trong nhóm kiểm thử cấu trúc điều khiển.

Kiểm thử vòng lặp được thể hiện như một nhánh của kiểm thử cấu trúc điều khiển.

Các loại vòng lặp đã được thử nghiệm

Trước khi chọn chiến lược, hãy xác định bạn đang xem xét loại vòng lặp nào trong bốn loại vòng lặp. Ví dụ về các loại vòng lặp được kiểm thử là:

  • Vòng lặp đơn giản — một vòng lặp đơn với một điểm vào và một điểm ra, chẳng hạn như một vòng lặp thông thường. cho, trong khi or làm trong khi xây dựng.
  • Vòng lặp lồng nhau — một vòng lặp được đặt bên trong một vòng lặp khác, do đó vòng lặp bên trong sẽ hoàn thành mỗi khi vòng lặp bên ngoài đi qua.
  • Vòng lặp nối — Hai hoặc nhiều vòng lặp chạy nối tiếp nhau.
  • Vòng lặp không có cấu trúc — Sự kết hợp không theo kế hoạch của các vòng lặp lồng nhau và nối tiếp nhau, thường là kết quả của việc nhảy vào hoặc ra khỏi thân vòng lặp.

Khối lượng công việc cần bỏ ra sẽ do chính lớp học quyết định. Một vòng lặp đơn giản chỉ cần một vài lần lặp; một vòng lặp không có cấu trúc thường cần phải thiết kế lại mã trước khi có thể kiểm tra được.

Tại sao phải thực hiện Kiểm tra vòng lặp?

Kiểm tra vòng lặp được thực hiện vì những lý do sau

  • Kiểm tra có thể khắc phục các vấn đề lặp lại vòng lặp
  • Kiểm tra vòng lặp có thể giúp phát hiện các điểm nghẽn về hiệu suất và dung lượng.
  • Bằng cách kiểm tra các vòng lặp, có thể xác định được các biến chưa được khởi tạo trong vòng lặp.
  • Nó giúp xác định các vấn đề khởi tạo vòng lặp.

Ngoài ra còn có lý do về mặt thương mại. Một vòng lặp chạy quá nhiều lần sẽ làm sai lệch tổng thể; một vòng lặp không bao giờ kết thúc sẽ làm treo tiến trình. Cả hai lỗi này đều dễ tìm khi mã vẫn còn trên máy của nhà phát triển, nhưng lại tốn kém khi đã được đưa vào sản xuất.

Cách thực hiện Kiểm tra vòng lặp: Phương pháp hoàn chỉnh

Khi kiểm tra một vòng lặp, cần phải kiểm tra ở ba cấp độ khác nhau:

  • Khi vòng lặp được bắt đầu
  • Trong quá trình thực hiện, và
  • Khi vòng lặp còn lại

Chiến lược kiểm thử cho tất cả các vòng lặp này như sau.

Vòng lặp đơn giản

Một vòng lặp đơn giản có một điểm vào và một điểm ra, như hình minh họa bên dưới.

Sơ đồ lưu trình vòng lặp đơn giản với một điểm vào và một điều kiện thoát.

Một vòng lặp đơn giản được kiểm tra theo cách sau:

  1. Bỏ qua toàn bộ vòng lặp
  2. Thực hiện một lượt qua vòng lặp
  3. Thực hiện 2 lần đi qua vòng lặp
  4. Hãy a đi qua vòng lặp nơi a < bđó là số lần lặp điển hình ở mức trung bình.
  5. Hãy b, b-1 và b+1 đi qua vòng lặp tại đó b là số lần tối đa cho phép đi qua vòng lặp.

Hai trường hợp cuối cùng mang giá trị cao nhất. Bỏ quaping Vòng lặp chứng minh điều kiện thoát được đánh giá trước khi phần thân được thực thi, và bTrường hợp +1 chứng minh rằng vòng lặp từ chối thực hiện công việc vượt quá giới hạn đã khai báo thay vì tràn mảng.

Vòng lặp lồng nhau

Vòng lặp lồng nhau nhân số lượng các tổ hợp lặp có thể có, do đó nó được kiểm tra từ trong ra ngoài chứ không phải tất cả cùng một lúc.

Sơ đồ thuật toán vòng lặp lồng nhau với vòng lặp bên trong được bao bọc bởi vòng lặp bên ngoài.

Đối với vòng lặp lồng nhau, bạn cần thực hiện các bước sau.

  1. Đặt tất cả các vòng lặp khác về giá trị tối thiểu và bắt đầu từ vòng lặp trong cùng.
  2. Đối với vòng lặp trong cùng, thực hiện kiểm tra vòng lặp đơn giản và giữ các vòng lặp bên ngoài ở giá trị tham số lặp tối thiểu của chúng
  3. Thực hiện kiểm tra cho vòng lặp tiếp theo và tiếp tục từ trong ra ngoài.
  4. Tiếp tục cho đến khi vòng ngoài cùng được kiểm tra.

Vòng lặp nối

Các vòng lặp được nối tiếp nhau nằm liền kề nhau trong cùng một đường dẫn thực thi, như sơ đồ minh họa.

Sơ đồ khối vòng lặp ghép nối thể hiện hai vòng lặp thực thi tuần tự.

Trong các vòng lặp ghép nối, nếu hai vòng lặp độc lập với nhau thì chúng được kiểm tra bằng phương pháp vòng lặp đơn giản, ngược lại thì chúng được kiểm tra như các vòng lặp lồng nhau.

Tuy nhiên, nếu bộ đếm vòng lặp của một vòng lặp được sử dụng làm giá trị ban đầu cho vòng lặp kia, thì hai vòng lặp đó không được coi là độc lập.

Vòng lặp không có cấu trúc

Các vòng lặp không có cấu trúc là trường hợp khó nhất, bởi vì quá trình điều khiển nhảy vào và ra khỏi thân vòng lặp tại các điểm tùy ý.

Sơ đồ lưu trình vòng lặp không cấu trúc với điều khiển nhảy.ping vào và ra khỏi thân vòng lặp

Đối với các vòng lặp không có cấu trúc, thiết kế cần được cấu trúc lại để phản ánh việc sử dụng các cấu trúc lập trình có cấu trúc. Khi mã đã được rút gọn thành các dạng đơn giản, lồng nhau hoặc nối tiếp, chiến lược khớp nối nêu trên sẽ được áp dụng.

Ví dụ kiểm thử vòng lặp với các trường hợp kiểm thử

Một ví dụ cụ thể sẽ làm rõ số lần lặp. Hãy xem xét một chương trình con nhân kết quả đang chạy với mọi số nguyên từ 1 đến... n, một phép tính giai thừa. Bộ đếm vòng lặp bắt đầu từ 1, điều kiện thoát là chống lại > nvà vòng lặp được khai báo để chấp nhận tối đa 12 lần lặp trước khi kết quả vượt quá giới hạn của kiểu số nguyên đã khai báo.

Nếu xem đây như một vòng lặp đơn giản, số lần lặp được đề xuất ở trên sẽ tương ứng với các số lần lặp sau: trường hợp thử nghiệm.

Kiểm tra trường hợp Giá trị của n Các lượt thực thi Điều đó chứng minh điều gì
TC01 0 0 (vòng lặp bị bỏ qua) Điều kiện thoát được đánh giá trước khi thân hàm chạy và kết quả giữ nguyên giá trị ban đầu là 1.
TC02 1 1 Chỉ cần một lần chạy là cho ra kết quả chính xác và bộ đếm tăng lên một lần.
TC03 2 2 Bộ tích lũy giữ lại giá trị giữa hai lần chạy liên tiếp.
TC04 5 5 Kết quả đo ở mức trung bình thường cho ra con số 120 như mong đợi, xác nhận đây là hoạt động bình thường.
TC05 11 11 Một lượt chạy dưới mức tối đa vẫn hoàn thành bình thường (b-số 1).
TC06 12 12 Giá trị tối đa đã khai báo được chấp nhận và vòng lặp kết thúc.b).
TC07 13 từ chối Nếu số lượt truy cập vượt quá mức tối đa, hệ thống sẽ từ chối thay vì âm thầm tràn dữ liệu.b+ 1).

Lưu ý rằng TC01 và TC07 là hai trường hợp mà các nhà phát triển thường bỏ qua nhất, và chúng là hai trường hợp bộc lộ các lỗi bỏ qua khởi tạo và tràn số. Giá trị âm của n thuộc cùng một bộ nếu đặc tả cho phép cung cấp, điều này liên kết việc kiểm tra vòng lặp với thử nghiệm tiêu cực.

Các lỗi thường gặp được phát hiện bằng phương pháp kiểm tra vòng lặp

Việc kiểm tra vòng lặp liên tục phát hiện ra cùng một nhóm nhỏ các lỗi, đó là lý do tại sao việc sử dụng số lần lặp cố định luôn đáng để thực hiện.

  • Lệch khỏi ranh giới một — một điều kiện được viết như sau: < Ở đâu <= Đúng như dự định, vòng lặp chạy thiếu một lượt hoặc thừa một lượt.
  • Bộ đếm hoặc bộ tích lũy chưa được khởi tạo — tổng số tiền còn lại từ lần gọi trước.
  • Vòng lặp vô hạn — một điều kiện thoát mà thân vòng lặp không bao giờ có thể thỏa mãn vì bộ đếm chỉ được cập nhật trên một số nhánh nhất định.
  • Giả định vòng lặp bỏ qua — Đoạn mã sau vòng lặp đọc một biến mà phần thân vòng lặp được cho là sẽ thiết lập, đoạn mã này sẽ bị lỗi khi vòng lặp chạy không lần nào.
  • Lỗi về dung lượng và hiệu suất — Một vòng lặp chính xác nhưng đọc lại cơ sở dữ liệu ở mỗi lần lặp, do đó chi phí tăng theo số lần lặp.
  • Nhiễu vòng lặp lồng nhau — một vòng lặp bên trong tái sử dụng bộ đếm của vòng lặp bên ngoài và âm thầm thay đổi số lần lặp của vòng lặp bên ngoài.

Vì mỗi lỗi tương ứng với một số lần lặp cụ thể, nên các lỗi phát hiện ở đây dễ tái hiện và khắc phục nhanh chóng hơn so với các lỗi được tìm thấy ở các mức độ cao hơn. mức độ kiểm tra.

So sánh kiểm thử vòng lặp với các kỹ thuật kiểm thử cấu trúc điều khiển khác

Kiểm thử vòng lặp là một thành viên của nhóm cấu trúc điều khiển, và rất dễ bị nhầm lẫn với các kỹ thuật lân cận. Bảng dưới đây phân loại chúng.

Kỹ thuật Mục tiêu của nó là gì? Mục tiêu phạm vi phủ sóng điển hình
kiểm tra vòng lặp Cấu trúc vòng lặp: điểm vào, số lần lặp và điểm ra. Số lần lặp 0, 1, thông thường và giới hạn cho mỗi vòng lặp
Kiểm tra tình trạng Biểu thức Boolean bên trong các quyết định Mỗi điều kiện được đánh giá cả đúng và sai.
Kiểm tra luồng dữ liệu Định nghĩa và cách sử dụng của từng biến số Mỗi cặp định nghĩa-cách sử dụng đều được luyện tập ít nhất một lần.
Kiểm thử đường dẫn cơ bản Các đường dẫn độc lập thông qua đồ thị luồng điều khiển Số lượng đường đi bằng với độ phức tạp chu trình

Trên thực tế, các kỹ thuật này bổ sung cho nhau chứ không cạnh tranh với nhau. Độ phức tạp của chu kỳ Cho bạn biết có bao nhiêu đường dẫn độc lập tồn tại, kiểm thử đường dẫn cơ sở bao phủ chúng, và kiểm thử vòng lặp sau đó bổ sung số lần lặp mà chỉ riêng việc bao phủ đường dẫn sẽ không bắt buộc. Tất cả chúng đều là thử nghiệm động các hoạt động, vì mã phải được thực thi thì kết quả mới có thể được quan sát.

Hạn chế trong thử nghiệm vòng lặp

Kỹ thuật này có những hạn chế nhất định, và việc nắm rõ những hạn chế đó sẽ giúp tránh đầu tư quá mức.

  • Lỗi vòng lặp xuất hiện chủ yếu ở phần mềm cấp thấp
  • Các lỗi được xác định trong quá trình kiểm tra vòng lặp không tinh tế lắm
  • Nhiều lỗi có thể được hệ điều hành phát hiện, vì chúng gây ra vi phạm giới hạn bộ nhớ, lỗi con trỏ có thể phát hiện và các lỗi tương tự.
  • Việc xác định lớp của từng vòng lặp và kiểm tra chúng tương ứng sẽ tốn thời gian, điều này khó có thể biện minh được đối với những đoạn mã có rủi ro thấp.

Câu Hỏi Thường Gặp

Các nhà phát triển và người kiểm thử kỹ thuật có quyền truy cập mã nguồn, thường là trong quá trình... kiểm tra đơn vị hoặc để xem xét mã. Người kiểm thử nghiệp vụ không thể áp dụng nó, vì điều kiện vòng lặp không hiển thị trên giao diện người dùng.

Mô hình đọc điều kiện vòng lặp và tự động đề xuất số lần lặp bằng không, một, thông thường và giới hạn, bao gồm cả trường hợp tràn số. Người kiểm tra vẫn xác nhận rằng mỗi kết quả mong đợi đều phù hợp với đặc tả kỹ thuật.

Nó soạn thảo chúng một cách nhanh chóng, vì mô hình lặp lại có tính công thức. Các trợ lý ảo cũng có thể chạy bộ kiểm tra và báo cáo những lần kiểm tra nào thất bại, nhưng việc quyết định số lần kiểm tra tối đa cho phép vẫn là một quyết định thiết kế do con người đưa ra.

Chạy trường hợp kiểm thử với bộ hẹn giờ hoặc bộ lặp điều kiện để kiểm thử thất bại nhanh chóng thay vì làm treo toàn bộ bộ kiểm thử. Kiểm tra số lần chạy được ghi lại, không chỉ dựa trên giá trị đầu ra cuối cùng.

Ít hơn nhiều so với mọi sự kết hợp. Việc kiểm tra từ trong ra ngoài giúp cho số lượng cộng dồn gần đúng qua các cấp độ thay vì nhân lên, bởi vì các vòng lặp bên ngoài được giữ ở giá trị tối thiểu trong khi vòng lặp bên trong được thực hiện.

Không có công cụ nào được dành riêng cho việc này. Các nhóm kết hợp một khung kiểm thử đơn vị như... JUnit Hoặc sử dụng pytest với công cụ đo độ phủ mã để báo cáo độ phủ nhánh, sau đó đọc báo cáo để xác nhận đã đạt được đường dẫn không có lần lặp nào.

Không. Độ bao phủ nhánh được đáp ứng khi vòng lặp được vào và ra một lần. Kiểm tra vòng lặp còn yêu cầu thêm số lần bỏ qua và số lần vượt qua ranh giới, điều mà chỉ riêng độ bao phủ nhánh không bao giờ yêu cầu.

Bất cứ khi nào nó không có cấu trúc — hãy kiểm soát việc nhảy.ping Vào hoặc ra khỏi cơ thể. Việc tái cấu trúc thành các dạng đơn giản, lồng nhau hoặc nối tiếp nhau tốn ít chi phí hơn so với việc thiết kế các bài kiểm tra cho mọi điểm vào không đều.

Tóm tắt bài viết này với: