소프트웨어 설계 복잡성
복잡성이라는 용어는 여러 개의 상호 연결된 링크와 매우 복잡한 구조를 가진 이벤트 또는 사물의 상태를 나타냅니다. 소프트웨어 프로그래밍에서 소프트웨어 설계가 실현됨에 따라 요소의 수와 상호 연결이 점차 커져서 한 번에 이해하기가 너무 어려워집니다.
소프트웨어 설계 복잡성은 복잡성 메트릭 및 측정을 사용하지 않고 평가하기 어렵습니다. 세 가지 중요한 소프트웨어 복잡성 측정을 살펴 보겠습니다.
Halstead의 복잡성 측정
1977 년에 Maurice Howard Halstead는 소프트웨어 복잡성을 측정하는 메트릭을 도입했습니다. Halstead의 메트릭은 프로그램의 실제 구현과 그 측정 값에 따라 달라지며, 이는 정적 방식으로 소스 코드의 연산자와 피연산자에서 직접 계산됩니다. C / C ++ / Java 소스 코드에 대한 테스트 시간, 어휘, 크기, 난이도, 오류 및 노력을 평가할 수 있습니다.
Halstead에 따르면, "컴퓨터 프로그램은 연산자 또는 피연산자로 분류 될 수있는 토큰 모음으로 간주되는 알고리즘의 구현입니다." Halstead 메트릭은 프로그램을 연산자 및 관련 피연산자의 시퀀스로 생각합니다.
모듈의 복잡성을 확인하기 위해 다양한 지표를 정의합니다.
매개 변수 | 의미 |
---|---|
n1 | 고유 연산자 수 |
n2 | 고유 한 피연산자 수 |
N1 | 연산자의 총 발생 수 |
N2 | 피연산자의 총 발생 수 |
Metric Viewer에서 복잡성 세부 정보를보기 위해 소스 파일을 선택하면 Metric Report에 다음 결과가 표시됩니다.
미터법 | 의미 | 수학적 표현 |
---|---|---|
엔 | 어휘 | n1 + n2 |
엔 | 크기 | N1 + N2 |
V | 음량 | 길이 * Log2 어휘 |
디 | 어려움 | (n1 / 2) * (N1 / n2) |
이자형 | 노력 | 난이도 * 볼륨 |
비 | 오류 | 볼륨 / 3000 |
티 | 테스트 시간 | 시간 = 노력 / S, 여기서 S = 18 초. |
순환 복잡성 측정
모든 프로그램은 어떤 작업을 수행하기 위해 실행할 문과 실행해야 할 문을 결정하는 기타 의사 결정 문을 포함합니다. 이러한 의사 결정 구조는 프로그램의 흐름을 변경합니다.
같은 크기의 두 프로그램을 비교하면 프로그램의 제어가 자주 점프하므로 의사 결정문이 더 많은 프로그램이 더 복잡해집니다.
McCabe는 1976 년에 주어진 소프트웨어의 복잡성을 정량화하기 위해 Cyclomatic Complexity Measure를 제안했습니다. if-else, do-while, repeat-until, switch-case 및 goto 문과 같은 프로그램의 의사 결정 구조를 기반으로하는 그래프 기반 모델입니다.
흐름 제어 그래프를 만드는 과정 :
- 의사 결정 구조로 구분 된 작은 블록으로 프로그램을 중단하십시오.
- 이러한 각 노드를 나타내는 노드를 만듭니다.
- 다음과 같이 노드를 연결하십시오.
제어가 블록 i에서 블록 j로 분기 할 수있는 경우
호 그리기
출구 노드에서 입구 노드로
호를 그립니다.
프로그램 모듈의 순환 복잡도를 계산하기 위해 다음 공식을 사용합니다.
V(G) = e – n + 2
Where
e is total number of edges
n is total number of nodes
위 모듈의 순환 복잡성은 다음과 같습니다.
e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
= 4
P. Jorgensen에 따르면 모듈의 순환 복잡성은 10을 초과하지 않아야합니다.
기능 포인트
소프트웨어의 크기를 측정하는 데 널리 사용됩니다. Function Point는 시스템에서 제공하는 기능에 중점을 둡니다. 시스템의 특징과 기능은 소프트웨어 복잡성을 측정하는 데 사용됩니다.
기능 포인트는 외부 입력, 외부 출력, 논리 내부 파일, 외부 인터페이스 파일 및 외부 조회로 명명 된 5 개의 매개 변수에 포함됩니다. 소프트웨어의 복잡성을 고려하기 위해 각 매개 변수는 단순, 평균 또는 복합으로 추가로 분류됩니다.
기능 포인트의 매개 변수를 보겠습니다.
외부 입력
외부에서 시스템에 대한 모든 고유 한 입력은 외부 입력으로 간주됩니다. 두 개의 입력이 동일한 형식을 가져서는 안되므로 입력의 고유성이 측정됩니다. 이러한 입력은 데이터 또는 제어 매개 변수 일 수 있습니다.
Simple -입력 수가 적고 내부 파일에 영향을 덜 미치는 경우
Complex -입력 수가 많고 더 많은 내부 파일에 영향을 미치는 경우
Average -단순함과 복잡함 사이.
외부 출력
시스템에서 제공하는 모든 출력 유형이이 범주에 포함됩니다. 출력 형식 및 / 또는 처리가 고유 한 경우 출력은 고유 한 것으로 간주됩니다.
Simple -출력 카운트가 낮은 경우
Complex -출력 카운트가 높은 경우
Average -단순함과 복잡함 사이.
논리적 내부 파일
모든 소프트웨어 시스템은 기능 정보를 유지하고 올바르게 작동하기 위해 내부 파일을 유지합니다. 이 파일은 시스템의 논리 데이터를 보유합니다. 이 논리 데이터에는 기능 데이터와 제어 데이터가 모두 포함될 수 있습니다.
Simple -레코드 유형 수가 적은 경우
Complex -레코드 유형 수가 많은 경우
Average -단순함과 복잡함 사이.
외부 인터페이스 파일
소프트웨어 시스템은 파일을 일부 외부 소프트웨어와 공유해야하거나 처리를 위해 파일을 전달하거나 일부 기능에 매개 변수로 전달해야 할 수 있습니다. 이러한 모든 파일은 외부 인터페이스 파일로 계산됩니다.
Simple -공유 파일의 레코드 유형 수가 적은 경우
Complex -공유 파일의 레코드 유형 수가 많은 경우
Average -단순함과 복잡함 사이.
외부 문의
조회는 입력과 출력의 조합으로 사용자가 조회 할 데이터를 입력으로 보내고 시스템은 조회 결과를 처리하여 사용자에게 응답합니다. 쿼리의 복잡성은 외부 입력 및 외부 출력 이상입니다. 입력 및 출력이 형식 및 데이터 측면에서 고유 한 경우 쿼리는 고유하다고합니다.
Simple -쿼리가 낮은 처리를 필요로하고 소량의 출력 데이터를 생성하는 경우
Complex -쿼리에 높은 프로세스가 필요하고 많은 양의 출력 데이터가 생성되는 경우
Average -단순함과 복잡함 사이.
시스템의 이러한 각 매개 변수에는 클래스 및 복잡성에 따라 가중치가 부여됩니다. 아래 표에는 각 매개 변수에 주어진 가중치가 나와 있습니다.
매개 변수 | 단순한 | 평균 | 복잡한 |
---|---|---|---|
입력 | 삼 | 4 | 6 |
출력 | 4 | 5 | 7 |
문의 | 삼 | 4 | 6 |
파일 | 7 | 10 | 15 |
인터페이스 | 5 | 7 | 10 |
위의 표는 원시 기능 포인트를 산출합니다. 이러한 기능 포인트는 환경 복잡성에 따라 조정됩니다. 시스템은 14 개의 다른 특성을 사용하여 설명됩니다.
- 데이터 통신
- 분산 처리
- 성능 목표
- 작업 구성 부하
- 거래 율
- 온라인 데이터 입력,
- 최종 사용자 효율성
- 온라인 업데이트
- 복잡한 처리 로직
- Re-usability
- 설치 용이성
- 운영 용이성
- 여러 사이트
- 변화를 촉진하려는 열망
이러한 특성 계수는 아래에 언급 된대로 0에서 5까지 등급이 지정됩니다.
- 영향 없음
- Incidental
- Moderate
- Average
- Significant
- Essential
그런 다음 모든 등급이 N으로 합산됩니다. N 값의 범위는 0에서 70까지입니다 (14 가지 특성 유형 x 5 가지 등급 유형). 다음 공식을 사용하여 복잡성 조정 계수 (CAF)를 계산하는 데 사용됩니다.
CAF = 0.65 + 0.01N
그때,
Delivered Function Points (FP)= CAF x Raw FP
이 FP는 다음과 같은 다양한 메트릭에서 사용할 수 있습니다.
Cost = $ / FP
Quality = 오류 / FP
Productivity = FP / 인-월