설계 술어

Design predicates

설계 술어는 Thomas McCabe에 [1]의해 발명된 방법으로, 2개의 소프트웨어 유닛의 통합의 복잡성을 정량화하기 위해서입니다.4가지 유형의 설계 술어 각각에는 관련된 통합 복잡도 등급이 있습니다.둘 이상의 설계 술어를 적용하는 코드 조각의 경우 통합 복잡도 등급을 조합할 수 있습니다.

코드 단위의 통합 복잡도 합계와 1은 통합을 완전히 실행하기 위해 필요한 최대 테스트 사례 수입니다.일반적으로 테스트 엔지니어는 새로운 테스트마다 이전에 공개된 설계 술어를 최대한 많이 포함시킴으로써 이 문제를 줄일 수 있습니다.또한 설계 술어의 일부 조합은 논리적으로 불가능할 수 있습니다.

콜의 종류

무조건 콜

유닛 A는 항상 유닛 B를 호출합니다.이 통합의 복잡도는 0입니다.예를 들어 다음과 같습니다.

unitA:: functionA() {unitB-> functionB(); }

조건부 콜

장치 A는 장치 B를 호출할 수도 있고 호출할 수도 없습니다.이 연동의 복잡도는 1이며, 2개의 테스트가 필요합니다.하나는 B를 호출하는 테스트이고, 다른 하나는 호출하지 않는 테스트입니다.

unitA:: functionA() {if (조건) unitB-> functionB(); }

상호 배타적 조건부 콜

이것은 프로그래밍 언어의 스위치 문과 같습니다.유닛 A는 가능한 유닛 중1개를 정확하게 호출합니다.연동의 복잡도는 n - 1 입니다.여기서 n은 호출할 수 있는 유닛의 수입니다.

unitA:: functionA() {switch (condition) {case 1: unitB-> functionB(); break; 케이스 2: unitC-> functionC(); break; ... 디폴트: unitN-> functionN(); break; }

반복 호출

반복 콜에서는 유닛A가 유닛B에 적어도1회 콜을 발신합니다만, 그 이상일 수도 있습니다.이 통합의 복잡도는 1입니다.또한 유닛 B를 1회 호출하는 테스트와 유닛 B를 2회 호출하는 테스트의 2가지 테스트도 필요합니다.

unitA:: functionA() {do { unitB-> functionB(); }(조건부), }

콜의 조합

특정 연동으로 여러 유형의 콜을 조합할 수 있습니다.예를 들어 장치 A는 장치 B를 호출할 수도 있고 호출하지 않을 수도 있습니다.호출할 경우 1회 이상 호출할 수 있습니다.이 연동은 연동의 복잡도가 1인 조건부 콜과 연동의 복잡도가 1인 반복 콜을 조합합니다.통합의 복잡성은 합계 2입니다.

unitA:: functionA() { if ( someNumber > 0 ) { for ( i = 0 ; i < someNumber ; i++ ) { unitB - > functionB ( ) ; } } }

시험 횟수

필요한 테스트의 수는 통합의 복잡도에1을 더한 것이기 때문에, 이 통합에는 3개의 테스트가 필요합니다.첫 번째 예에서는 someNumber가 0보다 크지 않으면 유닛B가 호출되지 않습니다.다른 예에서는 someNumber가 1이면 유닛B가 1회 호출됩니다.그리고 마지막에서는 some Number가 1보다 크면 유닛B가 여러 번 호출됩니다.

레퍼런스

  1. ^ McCabe, Thomas J.; Butler, Charles W. (12 Dec 1989). "Design complexity measurement and testing". Communications of the ACM. 32 (12): 1415–1425. doi:10.1145/76380.76382.

「 」를 참조해 주세요.