루프 테스트란 무엇입니까? 방법론, 예
⚡ 스마트 요약
루프 테스트는 프로그램 내부의 루프 구조를 검증하는 것으로, 루프가 건너뛰어지거나, 한 번만 진입하거나, 루프의 경계에서 실행되거나, 허용된 최대 횟수를 초과하여 한 번 더 실행될 때 어떤 일이 발생하는지 확인합니다.
루프 테스트란 무엇입니까?
루프 테스트 반복문은 프로그램의 반복문 구조의 유효성만을 집중적으로 검사하는 소프트웨어 테스트 유형입니다. 이는 제어 구조 테스트의 한 분야이며, 다른 테스트 유형들과 함께 사용됩니다. 경로 테스트데이터 유효성 검사 및 조건 테스트.
루프 테스트는 화이트 박스 테스트 이 기법은 소스 코드를 읽고 루프 조건, 카운터 및 종료 경로를 파악할 수 있는 사람이 적용합니다. 테스터는 사용자 인터페이스에서 동작을 추측하는 것이 아니라, 루프 자체가 테스트 대상입니다.
아래 다이어그램은 루프 테스트가 제어 구조 테스트 범주 내에서 어떤 위치를 차지하는지 보여줍니다.
테스트된 루프 유형
전략을 선택하기 전에 네 가지 반복문 유형 중 어떤 유형을 사용할지 파악하십시오. 테스트 대상 반복문 유형의 예는 다음과 같습니다.
- 단순 루프 — 입구와 출구가 하나씩 있는 단일 순환로, 예를 들어 일반 도로와 같은 형태 을 통한, 동안 or 하면서 구성.
- 중첩 루프 — 하나의 루프가 다른 루프 안에 배치되어 있어, 바깥쪽 루프가 한 번 지나갈 때마다 안쪽 루프가 완전히 실행됩니다.
- 연결된 루프 — 두 개 이상의 루프가 순차적으로 하나씩 실행되는 것.
- 구조화되지 않은 루프 — 중첩된 루프와 연결된 루프가 계획되지 않은 방식으로 결합된 것으로, 일반적으로 루프 본문으로 들어가거나 나올 때 발생합니다.
클래스에 따라 필요한 노력의 정도가 결정됩니다. 간단한 반복문은 몇 번의 반복 계산만으로 충분하지만, 구조화되지 않은 반복문은 테스트하기 전에 코드를 완전히 재설계해야 하는 경우가 많습니다.
루프 테스트를 수행하는 이유는 무엇입니까?
루프 테스트는 다음과 같은 이유로 수행됩니다.
- 테스트를 통해 루프 반복 문제를 해결할 수 있습니다.
- 반복 테스트를 통해 성능 및 용량 병목 현상을 파악할 수 있습니다.
- 반복문을 테스트함으로써 반복문 내에서 초기화되지 않은 변수를 확인할 수 있습니다.
- 이는 루프 초기화 문제를 식별하는 데 도움이 됩니다.
상업적인 이유도 있습니다. 반복문이 한 번이라도 더 실행되면 총합이 왜곡되고, 종료되지 않는 반복문은 프로세스를 멈추게 합니다. 이러한 결함은 개발자 컴퓨터에서 코드를 테스트할 때는 비용이 적게 들지만, 실제 운영 환경에서는 훨씬 더 많은 비용이 듭니다.
루프 테스트 수행 방법: 완전한 방법론
반복문을 테스트할 때는 세 가지 다른 수준에서 확인해야 합니다.
- 루프에 진입할 때
- 실행 중에, 그리고
- 루프가 남을 때
이러한 모든 반복문에 대한 테스트 전략은 다음과 같습니다.
단순 루프
아래 그림과 같이 간단한 반복문은 진입점 하나와 출구점 하나를 가지고 있습니다.
간단한 루프는 다음과 같은 방법으로 테스트됩니다.
- 전체 루프 건너뛰기
- 루프를 한 번 통과하세요
- 루프를 2번 통과시킵니다.
- 확인 a 루프를 통과하는 곳 a < b이는 일반적인 중간 범위의 반복 횟수입니다.
- 확인 b, b-1 및 b+1은 루프를 통과합니다. b 루프를 통과할 수 있는 최대 허용 횟수입니다.
마지막 두 가지 경우가 가장 중요한 가치를 지닙니다. 건너뛰세요.ping 이 루프는 본체가 움직이기 전에 종료 조건이 평가된다는 것을 증명합니다. b+1번 사례는 루프가 배열 오버런을 일으키는 대신 선언된 제한을 넘어서는 작업을 거부한다는 것을 증명합니다.
중첩 루프
중첩 루프는 가능한 반복 조합의 수를 늘리기 때문에 한 번에 전체를 검사하는 것이 아니라 안쪽에서부터 바깥쪽으로 검사합니다.
중첩 루프를 사용하려면 다음 단계를 따라야 합니다.
- 나머지 루프들의 값을 최소값으로 설정하고 가장 안쪽 루프부터 시작하세요.
- 가장 안쪽 루프의 경우 간단한 루프 테스트를 수행하고 외부 루프를 최소 반복 매개변수 값으로 유지합니다.
- 다음 루프에 대한 테스트를 수행하고 바깥쪽으로 진행하십시오.
- 가장 바깥쪽 루프가 테스트될 때까지 계속합니다.
연결된 루프
그림에서 볼 수 있듯이, 연결된 루프는 동일한 실행 경로에서 서로 연속해서 나타납니다.
연결된 루프에서 두 루프가 서로 독립적이면 단순 루프 방식으로 테스트하고, 그렇지 않으면 중첩 루프로 테스트합니다.
하지만 한 루프의 루프 카운터를 다른 루프의 초기값으로 사용하면 두 루프는 독립적이지 않은 것으로 간주됩니다.
구조화되지 않은 루프
비정형 루프는 제어 흐름이 임의의 지점에서 루프 본체 안팎으로 이동하기 때문에 가장 어려운 경우입니다.
비정형 반복문의 경우, 구조적 프로그래밍 구문을 사용하도록 설계를 재구성해야 합니다. 코드가 단순형, 중첩형 또는 연결형으로 축소되면 위의 매칭 전략이 적용됩니다.
반복문 테스트 예제 (테스트 케이스 포함)
예제를 통해 반복 횟수를 구체적으로 알 수 있습니다. 실행 결과를 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회, 일반적인 반복 횟수 및 경계 반복 횟수 |
| 상태 테스트 | 결정문 내의 부울 표현식 | 각 조건은 참과 거짓으로 평가되었습니다. |
| 데이터 흐름 테스트 | 각 변수의 정의 및 사용법 | 모든 정의-사용법 쌍은 최소 한 번 이상 실행되었습니다. |
| 기본 경로 테스트 | 제어 흐름 그래프를 통한 독립적인 경로 | 순환 복잡도와 같은 수의 경로 |
실제로 이러한 기술들은 경쟁하기보다는 상호 보완적입니다. 순환 복잡도 독립적인 경로가 몇 개 존재하는지 알려주고, 기본 경로 테스트는 이를 모두 포함하며, 루프 테스트는 경로 커버리지만으로는 알 수 없는 반복 횟수를 추가합니다. 이 모든 것들은 동적 테스트 결과를 확인하려면 코드를 실행해야 하므로 이러한 활동은 필수적입니다.
루프 테스트의 한계
이 기술에는 분명한 한계가 있으며, 이를 아는 것은 과잉 투자를 방지하는 데 도움이 됩니다.
- 루프 버그는 주로 낮은 수준의 소프트웨어에서 나타납니다.
- 루프 테스트 중에 확인된 버그는 그다지 미묘하지 않습니다.
- 많은 버그는 메모리 경계 위반, 감지 가능한 포인터 오류 및 유사한 결함을 유발하기 때문에 운영 체제에서 감지될 수 있습니다.
- 모든 반복문의 클래스를 식별하고 그에 따라 테스트하는 데는 시간이 소요되는데, 위험도가 낮은 코드 경로에 이러한 시간을 투자하는 것은 정당화하기 어렵습니다.





