루프 테스트란 무엇입니까? 방법론, 예

⚡ 스마트 요약

루프 테스트는 프로그램 내부의 루프 구조를 검증하는 것으로, 루프가 건너뛰어지거나, 한 번만 진입하거나, 루프의 경계에서 실행되거나, 허용된 최대 횟수를 초과하여 한 번 더 실행될 때 어떤 일이 발생하는지 확인합니다.

  • 🔘 정의: 화면 테스트가 아닌 루프 유효성 검증을 목표로 하는 화이트 박스 제어 구조 기법입니다.
  • 🔁 네 가지 수업: 단순 루프, 중첩 루프, 연결된 루프, 비구조화된 루프는 각각 고유한 전략이 필요합니다.
  • 📍 세 개의 검문소: 반복문 진입, 실행 중 동작 및 종료 조건.
  • 🧪 경계 통과: 0, 1, 2, 일반적인 카운트, 그 다음 b-1, b, b+1번 반복합니다.
  • 🪜 중첩 순서: 가장 안쪽 고리부터 시작해서 바깥쪽 고리들을 최소한으로 유지한 다음 바깥쪽으로 작업해 나가세요.
  • 🐞 발견된 결함: 오차 범위 1, 초기화되지 않은 카운터, 무한 루프 및 용량 병목 현상.
  • ⚠️ 한정: 반복문 버그는 저수준 코드에 존재하며, 일단 발견되면 알아차리기 어려운 경우가 많습니다.

반복문 테스트 방법론, 반복문의 종류 및 예제 테스트 케이스

루프 테스트란 무엇입니까?

루프 테스트 반복문은 프로그램의 반복문 구조의 유효성만을 집중적으로 검사하는 소프트웨어 테스트 유형입니다. 이는 제어 구조 테스트의 한 분야이며, 다른 테스트 유형들과 함께 사용됩니다. 경로 테스트데이터 유효성 검사 및 조건 테스트.

루프 테스트는 화이트 박스 테스트 이 기법은 소스 코드를 읽고 루프 조건, 카운터 및 종료 경로를 파악할 수 있는 사람이 적용합니다. 테스터는 사용자 인터페이스에서 동작을 추측하는 것이 아니라, 루프 자체가 테스트 대상입니다.

아래 다이어그램은 루프 테스트가 제어 구조 테스트 범주 내에서 어떤 위치를 차지하는지 보여줍니다.

루프 테스트는 제어 구조 테스트의 한 갈래로 나타납니다.

테스트된 루프 유형

전략을 선택하기 전에 네 가지 반복문 유형 중 어떤 유형을 사용할지 파악하십시오. 테스트 대상 반복문 유형의 예는 다음과 같습니다.

  • 단순 루프 — 입구와 출구가 하나씩 있는 단일 순환로, 예를 들어 일반 도로와 같은 형태 을 통한, 동안 or 하면서 구성.
  • 중첩 루프 — 하나의 루프가 다른 루프 안에 배치되어 있어, 바깥쪽 루프가 한 번 지나갈 때마다 안쪽 루프가 완전히 실행됩니다.
  • 연결된 루프 — 두 개 이상의 루프가 순차적으로 하나씩 실행되는 것.
  • 구조화되지 않은 루프 — 중첩된 루프와 연결된 루프가 계획되지 않은 방식으로 결합된 것으로, 일반적으로 루프 본문으로 들어가거나 나올 때 발생합니다.

클래스에 따라 필요한 노력의 정도가 결정됩니다. 간단한 반복문은 몇 번의 반복 계산만으로 충분하지만, 구조화되지 않은 반복문은 테스트하기 전에 코드를 완전히 재설계해야 하는 경우가 많습니다.

루프 테스트를 수행하는 이유는 무엇입니까?

루프 테스트는 다음과 같은 이유로 수행됩니다.

  • 테스트를 통해 루프 반복 문제를 해결할 수 있습니다.
  • 반복 테스트를 통해 성능 및 용량 병목 현상을 파악할 수 있습니다.
  • 반복문을 테스트함으로써 반복문 내에서 초기화되지 않은 변수를 확인할 수 있습니다.
  • 이는 루프 초기화 문제를 식별하는 데 도움이 됩니다.

상업적인 이유도 있습니다. 반복문이 한 번이라도 더 실행되면 총합이 왜곡되고, 종료되지 않는 반복문은 프로세스를 멈추게 합니다. 이러한 결함은 개발자 컴퓨터에서 코드를 테스트할 때는 비용이 적게 들지만, 실제 운영 환경에서는 훨씬 더 많은 비용이 듭니다.

루프 테스트 수행 방법: 완전한 방법론

반복문을 테스트할 때는 세 가지 다른 수준에서 확인해야 합니다.

  • 루프에 진입할 때
  • 실행 중에, 그리고
  • 루프가 남을 때

이러한 모든 반복문에 대한 테스트 전략은 다음과 같습니다.

단순 루프

아래 그림과 같이 간단한 반복문은 진입점 하나와 출구점 하나를 가지고 있습니다.

하나의 진입점과 하나의 종료 조건을 가진 간단한 루프 흐름도

간단한 루프는 다음과 같은 방법으로 테스트됩니다.

  1. 전체 루프 건너뛰기
  2. 루프를 한 번 통과하세요
  3. 루프를 2번 통과시킵니다.
  4. 확인 a 루프를 통과하는 곳 a < b이는 일반적인 중간 범위의 반복 횟수입니다.
  5. 확인 b, b-1 및 b+1은 루프를 통과합니다. b 루프를 통과할 수 있는 최대 허용 횟수입니다.

마지막 두 가지 경우가 가장 중요한 가치를 지닙니다. 건너뛰세요.ping 이 루프는 본체가 움직이기 전에 종료 조건이 평가된다는 것을 증명합니다. b+1번 사례는 루프가 배열 오버런을 일으키는 대신 선언된 제한을 넘어서는 작업을 거부한다는 것을 증명합니다.

중첩 루프

중첩 루프는 가능한 반복 조합의 수를 늘리기 때문에 한 번에 전체를 검사하는 것이 아니라 안쪽에서부터 바깥쪽으로 검사합니다.

외부 루프가 내부 루프를 감싸는 중첩 루프 순서도

중첩 루프를 사용하려면 다음 단계를 따라야 합니다.

  1. 나머지 루프들의 값을 최소값으로 설정하고 가장 안쪽 루프부터 시작하세요.
  2. 가장 안쪽 루프의 경우 간단한 루프 테스트를 수행하고 외부 루프를 최소 반복 매개변수 값으로 유지합니다.
  3. 다음 루프에 대한 테스트를 수행하고 바깥쪽으로 진행하십시오.
  4. 가장 바깥쪽 루프가 테스트될 때까지 계속합니다.

연결된 루프

그림에서 볼 수 있듯이, 연결된 루프는 동일한 실행 경로에서 서로 연속해서 나타납니다.

연결된 루프의 흐름도. 두 개의 루프가 순차적으로 실행되는 것을 보여줍니다.

연결된 루프에서 두 루프가 서로 독립적이면 단순 루프 방식으로 테스트하고, 그렇지 않으면 중첩 루프로 테스트합니다.

하지만 한 루프의 루프 카운터를 다른 루프의 초기값으로 사용하면 두 루프는 독립적이지 않은 것으로 간주됩니다.

구조화되지 않은 루프

비정형 루프는 제어 흐름이 임의의 지점에서 루프 본체 안팎으로 이동하기 때문에 가장 어려운 경우입니다.

제어 점프가 포함된 비정형 루프 흐름도ping 루프 내부 및 외부 본체

비정형 반복문의 경우, 구조적 프로그래밍 구문을 사용하도록 설계를 재구성해야 합니다. 코드가 단순형, 중첩형 또는 연결형으로 축소되면 위의 매칭 전략이 적용됩니다.

반복문 테스트 예제 (테스트 케이스 포함)

예제를 통해 반복 횟수를 구체적으로 알 수 있습니다. 실행 결과를 1부터 모든 정수로 곱하는 루틴을 생각해 보세요. n팩토리얼 계산입니다. 루프 카운터는 1부터 시작하며, 종료 조건은 다음과 같습니다. 카운터 > n그리고 해당 루프는 결과가 선언된 정수형을 초과하기 전에 최대 12번의 반복을 허용하도록 선언되었습니다.

이를 단순 반복문으로 간주하면 위에서 권장한 반복 횟수는 다음과 같습니다. 테스트 케이스.

테스트 케이스 n의 값 패스 실행됨 이것이 증명하는 것
TC01 0 0 (루프 건너뛰기) 종료 조건은 실행 전에 평가되며, 결과는 초기값인 1로 유지됩니다.
TC02 1 1 한 번의 통과로 정확한 결과가 나오고 카운터가 한 번 증가합니다.
TC03 2 2 누산기는 연속적인 두 번의 패스 사이에 값을 유지합니다.
TC04 5 5 일반적인 중간 범위 카운트는 예상대로 120을 반환하여 정상적인 동작을 확인시켜 줍니다.
TC05 11 11 최대치보다 한 단계 낮은 통과도 정상적으로 완료됩니다.b-1).
TC06 12 12 선언된 최대값이 수락되고 루프가 종료됩니다.b).
TC07 13 거부 최대 수용 인원을 초과하는 경우, 조용히 초과되는 것이 아니라 거부됩니다.b+ 1).

TC01과 TC07은 개발자들이 가장 자주 간과하는 두 가지 경우이며, 이 두 가지 경우가 초기화 누락 및 오버플로 결함을 드러낸다는 점에 유의하십시오. 음수 값은 n 사양에서 제공하는 것을 허용하는 경우 동일한 세트에 속하며, 이는 루프 테스트를 연결합니다. 부정적인 테스트.

반복 테스트를 통해 발견된 일반적인 결함

반복 테스트를 통해 동일한 소수의 결함이 계속해서 발견되는데, 이것이 바로 고정된 반복 횟수를 매번 실행할 가치가 있는 이유입니다.

  • 오프 바이 원 경계 — 다음과 같이 작성된 조건 < 어디에 <= 의도한 바가 아니어서 루프가 한 번 덜 실행되거나 한 번 더 실행됩니다.
  • 초기화되지 않은 카운터 또는 누산기 — 이전 통화에서 남은 값이 포함된 총액입니다.
  • 무한 루프 — 이는 카운터가 일부 분기에서만 업데이트되기 때문에 루프 본문이 절대 만족시킬 수 없는 종료 조건입니다.
  • 루프 건너뛰기 가정 — 루프 이후에 루프 본문에서 설정될 것으로 예상되는 변수를 읽는 코드가 있는데, 루프가 한 번도 실행되지 않으면 이 코드가 오류를 발생시킵니다.
  • 용량 및 성능 결함 — 이 루프는 실행 자체는 올바르지만 매번 데이터베이스를 다시 읽기 때문에 반복 횟수가 늘어날수록 비용이 증가합니다.
  • 중첩 루프 간섭 — 외부 루프 카운터를 재사용하고 외부 반복 횟수를 조용히 변경하는 내부 루프.

각 결함이 특정 반복 횟수에 대응하기 때문에, 여기서 발견된 결함은 더 높은 반복 횟수에서 발견된 결함에 비해 재현하기 쉽고 수정도 빠릅니다. 테스트 레벨.

루프 테스트와 다른 제어 구조 테스트 기법 비교

루프 테스트는 제어 구조 계열의 한 종류이며, 인접한 기법들과 혼동하기 쉽습니다. 아래 표는 이들을 구분합니다.

기술 목표로 하는 것 일반적인 보장 목표
루프 테스트 반복문 구성 요소: 진입, 반복 횟수 및 종료 각 루프에 대한 0회, 1회, 일반적인 반복 횟수 및 경계 반복 횟수
상태 테스트 결정문 내의 부울 표현식 각 조건은 참과 거짓으로 평가되었습니다.
데이터 흐름 테스트 각 변수의 정의 및 사용법 모든 정의-사용법 쌍은 최소 한 번 이상 실행되었습니다.
기본 경로 테스트 제어 흐름 그래프를 통한 독립적인 경로 순환 복잡도와 같은 수의 경로

실제로 이러한 기술들은 경쟁하기보다는 상호 보완적입니다. 순환 복잡도 독립적인 경로가 몇 개 존재하는지 알려주고, 기본 경로 테스트는 이를 모두 포함하며, 루프 테스트는 경로 커버리지만으로는 알 수 없는 반복 횟수를 추가합니다. 이 모든 것들은 동적 테스트 결과를 확인하려면 코드를 실행해야 하므로 이러한 활동은 필수적입니다.

루프 테스트의 한계

이 기술에는 분명한 한계가 있으며, 이를 아는 것은 과잉 투자를 방지하는 데 도움이 됩니다.

  • 루프 버그는 주로 낮은 수준의 소프트웨어에서 나타납니다.
  • 루프 테스트 중에 확인된 버그는 그다지 미묘하지 않습니다.
  • 많은 버그는 메모리 경계 위반, 감지 가능한 포인터 오류 및 유사한 결함을 유발하기 때문에 운영 체제에서 감지될 수 있습니다.
  • 모든 반복문의 클래스를 식별하고 그에 따라 테스트하는 데는 시간이 소요되는데, 위험도가 낮은 코드 경로에 이러한 시간을 투자하는 것은 정당화하기 어렵습니다.

자주 묻는 질문

소스 코드 접근 권한이 있는 개발자 및 기술 테스터는 일반적으로 다음과 같은 상황에서 작업합니다. 단위 테스트 또는 코드 검토. 비즈니스 테스터는 루프 조건이 사용자 인터페이스에서 보이지 않기 때문에 이를 적용할 수 없습니다.

모델은 루프 조건을 읽고 오버플로우 경우를 포함하여 0회, 1회, 일반적인 반복 횟수 및 경계 반복 횟수를 자동으로 제안합니다. 검토자는 각 예상 결과가 사양과 일치하는지 확인합니다.

이 시스템은 반복 패턴이 정형화되어 있기 때문에 신속하게 초안을 작성합니다. 에이전트형 어시스턴트는 또한 테스트 스위트를 실행하고 실패한 항목을 보고할 수 있지만, 최대 허용 통과 횟수를 결정하는 것은 여전히 ​​사람이 담당해야 할 설계 사항입니다.

테스트가 중단되지 않고 빠르게 실패하도록 타임아웃 또는 반복 횟수 제한을 설정하여 테스트 케이스를 실행하세요. 최종 출력값뿐 아니라 기록된 실행 횟수에 대해서도 어설션을 적용하세요.

모든 조합보다 훨씬 적습니다. 안쪽에서 바깥쪽으로 테스트하는 방식은 바깥쪽 루프가 최소값에 고정된 상태에서 안쪽 루프가 실행되기 때문에, 각 레벨에 걸쳐 카운트가 곱셈이 아닌 대략 덧셈 방식으로 유지됩니다.

이를 위한 전용 도구는 없습니다. 팀들은 다음과 같은 단위 테스트 프레임워크를 결합하여 사용합니다. JUnit 또는 분기별 코드 커버리지를 보고하는 커버리지 도구를 사용하여 pytest를 실행한 다음, 보고서를 읽어 0회 반복 경로에 도달했는지 확인합니다.

아니요. 분기 테스트는 루프에 한 번 진입하고 한 번 빠져나오는 것으로 충분합니다. 루프 테스트에는 추가적으로 건너뛴 패스와 경계 카운트가 필요한데, 분기 테스트만으로는 이러한 요소들을 확인할 필요가 없습니다.

구조화되지 않은 경우 — 제어 점프ping 신체 내부 또는 외부로의 침투. 단순하거나 중첩된 형태 또는 연결된 형태로 재구성하는 것이 모든 불규칙적인 침투 지점에 대한 검사를 설계하는 것보다 비용이 적게 듭니다.

이 게시물을 요약하면 다음과 같습니다.