순환 순서이란 무엇입니까?
내가 가끔 보는 용어는 "순환 복잡도"입니다. 여기에서 "언어 X의 CC를 계산하는 방법"또는 "최소한의 CC로 Y를 수행하는 방법"에 대한 몇 가지 질문을 표현지만 그것이 무엇인지 정말 잘 모르겠습니다.
온 NDepend 웹 사이트 , 기본적으로 내가 말하는 것을 설명했다 "방법의 결정의 수. 각에, && 등의 경우 CC에 +1을 추가"점수 "). 그것이 정말? 이해, 왜이되어 코드를 쉽게하기 유지하기 위해 if- 문의 수를 상당히 낮게 유지하고 싶을 수도 있습니다.
아니면 더 깊은 개념이 있습니까?
나는 더 깊은 개념을 알지 못합니다. 일반적으로 유지 보수성 지수의 맥락에서 고려됩니다. 특정 방법에 분기가 많을수록 해당 방법의 작동에 대한 정신적 모델을 유지하기가 더 어려워집니다 (일반적으로).
순환 복잡도가 높은 메소드는 단위 테스트에서 전체 코드 범위를 더 어렵습니다. ( Mark W 에게 감사드립니다 !)
물론 유지 관리의 다른 모든 계층을 가져옵니다. 오류 / 회귀 등의 가능성. 하지만 핵심 개념은 매우 간단합니다.
순환 인스턴스는 해당 블록을 통해 모든 경로를 실행하기 위해 다양한 매개 변수를 사용하여 코드 블록을 실행해야하는 횟수를 측정합니다. 더 많은 수는 멀리 떨어져있을 가능성이 있습니다.
Cyclocmatic complexity = Number of decision points + 1
결정 포인트는 if, if… else, switch, for 루프, while 루프의 조건문이 될 수 있습니다.
다음 차트는 애플리케이션 유형을 설명합니다.
순환 포장은 1 – 10에 속합니다
순환 순서는 11 – 20 중간 적용
순환 복잡도는 21 – 50 위험한 적용
순환 복잡도는 50 이상 다양한 적용
위키 백과는 이것에 대해 당신의 친구가 될 수 있습니다 : 순환 적 복잡성의 정의
기본적으로 프로그램을 제어 흐름 그래프 로 상상 한 다음
다음과 같이 정의됩니다.
M = E − N + 2P
어디
- M = 순환 복잡도,
- E = 그래프의 간선 수
- N = 그래프의 노드 수
- P = 구성 요소의 수
CC는 프로그램이 복잡한 지, 단일 정수로 테스트하는 것이 얼마나 어려운지의 개념입니다.
네, 그게 전부입니다. 코드가 있고 수있는 실행 경로가 많을수록 테스트 할 항목이 많아지고 오류해야 할 것이 있습니다.
내가 들었던 또 다른 흥미로운 점 :
들여 쓰기가 가장 큰 코드의 위치는 CC가 가장 많이 제공합니다. 거의 일반적으로 읽기 / 유지 관리가 더 어려운 예상되기 때문에 테스트 범위를 보장하는 데 가장 중요한 영역입니다. 다른 답변이 지적했듯이, 이것들은 또한 커버리지를 보장하기 위해 더 어려운 코드 영역입니다.
Cyclomatic Complexity는 정말 무서운 유행어입니다. 사실은 코드의 더 복잡한 부분을 지적하기 위해 소프트웨어 개발에 사용되는 코드 척도입니다 (버그 가능성이 높기 때문에 매우 신중하고 철저하게 테스트해야 함). EN + 2P 공식을 사용하여 자동으로 계산되는 것이 좋습니다. 코드의 가독성과 유지 보수성을 유지해야하는 CC를 5 미만으로 유지해야한다는 경험 법칙을 들었습니다.
저는 최근 에 Java 프로젝트 에서 Eclipse Metrics Plugin 을 실험 해 하던 대로 일반 Eclipse 도움말과 통합되는 정말 멋지고 간결한 도움말 파일이 다양하고 다양한 측정 및 팁 및 트릭에 대한 더 많은 정의를 읽을 수 있습니다. 코드 개선에.
즉, CC가 낮은 방법은 포크, 루핑 등이 적어 방법을 더 복잡하게 만듭니다. 분석기를 사용하여 500,000 줄의 코드를 검토하고 CC가 훨씬 더 높은 가지 방법을 본다고 상상해. 이를 통해 더 나은 이해를 위해 이러한 방법을 리팩토링하는 데 집중할 수 있습니다 (CC가 높을수록 버그 비율이 높은 것도 일반적입니다).
루틴 (루프, 스위치, if 등)의 각 결정 지점은 즉, 문과 동등한 요약됩니다. 에 대해 각각 if
취할 수있는 2 개의 코드 경로가 있습니다. 따라서 첫 번째 분기에는 2 개의 코드 경로가 있으며 두 번째 분기에는 4 개의 가능한 경로가 있습니다. 세 번째 분기에는 8 개의 코드 경로가 있습니다. 최소한 2 ** N 개의 코드 경로가 여기서 N은 분기 수입니다.
이로 인해 코드의 동작을 이해하고 N이 작은 숫자 이상으로 커질 때 테스트하기가 어렵습니다.
지금까지 답변은 순환에 대한 소프트웨어 품질의 상관 관계를 참조하지. 연구에 따르면 낮은 품질의 소프트웨어를 개발하는 데 도움이됩니다. 가독성, 유지 보수성 및 이식성의 소프트웨어 품질 속성에 도움이 될 수 있습니다. 일반적으로 5-10 사이의 반복도 방법을 시도해야합니다.
순환하는 것과 같은 사용을 사용하는 이유 중 하나는 일반적으로 인간이 뇌에서 약 7 개 (더하기 또는 빼기 2) 정보 만 추적 할 수 있기 때문입니다. 따라서 소프트웨어가 여러 의사 결정 경로로 복잡하게 소프트웨어의 작동 방식을 사용할 수 없을 것입니다 (즉, 높은 순환 절차를 가짐). 이것은 버그가 버그가있는 소프트웨어를 개발할 가능성이 가장 오류있는 소프트웨어입니다. 이에 대한 자세한 정보는 여기 와 Wikipedia 에서 사용할 수 있습니다 .
순환 복잡도는 제어 흐름 그래프를 사용하여 계산됩니다. 프로그램의 소스 코드를 포함하는 선형 독립 경로의 정량적 측정 수를 순환이라고합니다 (if / if else / for / while)
순환 복잡도는 기본적으로 유지 관리를 위해 더 많은 관심이 필요한 코드 영역을 제공하는 척도입니다. 기본적으로 리팩토링에 대한 입력입니다. 깊은 중첩 루프, 조건 등을 피하는 체계에서 코드 개선 영역을 확실히 표시합니다.
그것은 그것뿐입니다. 그러나 "case"또는 "switch"는 각 분기마다 1 개의 분기가 발생합니다. 실제로는 CC 가 케이스 문과이를 필요로하는 모든 코드 (명령 프로세서, 상태 머신 등)를 싫어 한다는 것을 의미 합니다.
출구에서 입구까지 추가 에지가있는 함수 의 제어 흐름 그래프 를 고려하십시오 . 순환 복잡도는 그래프를 두 조각으로 분리하지 않고 만들 수있는 최대 절단 수입니다.
예를 들면 :
function F:
if condition1:
...
else:
...
if condition2:
...
else:
...
연결된 그래프의 순환 복잡성이 3 인 이유를 직관적으로 알 수 있습니다.
순환 복잡도는 소프트웨어 단위가 얼마나 복잡한지를 측정하는 것으로, 프로그램이 조건부 논리 구조 (If, while, for, switch & cases 등 ...)로 따를 수있는 다양한 경로의 수를 측정합니다. 계산에 대해 더 자세히 알고 싶다면 https://www.youtube.com/watch?v=PlCGomvu-NM을 시청할 수있는 멋진 유튜브 비디오입니다.
프로그램이 취할 수있는 다양한 경로 또는 시나리오를 보여주기 때문에 테스트 케이스를 설계하는 데 중요합니다. "좋은 테스트 가능성과 유지 보수성을 갖기 위해 McCabe는 어떤 프로그램 모듈도 순환 복잡도 10을 초과하지 말아야한다고 권장합니다"(Marsic, 2012, p. 232).
참조 : Marsic., I. (2012, 9 월). 소프트웨어 공학 . 러트 거스 대학교. www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf에서 검색 함
참고 URL : https://stackoverflow.com/questions/911637/what-is-cyclomatic-complexity
'ProgramingTip' 카테고리의 다른 글
javascript / jquery에서 base64를 이미지로 변환 (0) | 2020.11.04 |
---|---|
HTTPS / 웹 소켓에서 실행되는 Webpack Dev Server 보안 (0) | 2020.11.04 |
iOS 장치에서 명령 줄에서 직접 반응 방식을 실행 하시겠습니까? (0) | 2020.11.03 |
Richtextbox WPF 바인딩 (0) | 2020.11.03 |
Rails에서 has_one과 belongs_to의 차이점은 무엇입니까? (0) | 2020.11.03 |