C# 순환 복잡도(CC), 계산법부터 CA1502 임계값과 리팩터링 예제까지 정리

C# 순환 복잡도(CC), 계산법부터 CA1502 임계값과 리팩터링 예제까지 정리

  • 순환 복잡도(CC)는 메서드의 독립 실행 경로 수를 세는 지표로, 분기문 개수에 1을 더해 계산함. if, while, for, case, &&, ||, ?:, ?? 등은 세고 else, do, try, return, 메서드 호출은 세지 않음.
  • 1976년 Thomas McCabe가 그래프 이론으로 도입했고 M=E-N+2P 공식으로 정의함. 도구들은 대개 1에 결정점 개수를 더한 형태로 계산함.
  • 점수가 곧 메서드를 완전히 커버하는 최소 테스트 케이스 수를 뜻함. 10이 전통적 상한이고 25 초과는 Microsoft CA1502 분석기가 과도로 표시함.
  • if 6개와 && 1개를 쓴 주문 처리 예제의 CC는 8로 완전 커버에 테스트 8개가 필요함. 글은 이를 CC 2, 2, 5짜리 작은 메서드 여러 개로 쪼개는 리팩터링을 보여줌.
  • else는 짝이 되는 if가 이미 대안 경로를 만들어 점수를 올리지 않고, switch는 키워드가 아니라 case마다 1씩 더함. C# 패턴 매칭(and, or, switch 식)도 같은 방식으로 가산됨.

Hacker News opinions

ndepend 같은 도구로 에이전트 리팩터링을 유도하는 사람 있음? 나는 C#이랑 파이썬 의존성 그래프를 만들어서 로컬 DB에 넣어두는데, 에이전트가 이걸 잘 파고들어서 리팩터 아이디어를 뽑아내더라. 순환 의존성은 단순 도구로도 잡히고, 클러스터링 같은 더 복잡한 도구를 쓰라고 시키는 편임.

나는 의존성 그래프에 CC랑 커버리지 데이터까지 로컬 스토어에서 먹여주는데 잘 먹힘. 순환 의존성이나 CC 높은 핫스팟 찾는 데 특히 좋았음.

보안 관점에서 CC는 꽤 중요함. 나는 파이썬 코드 보안 등급 매길 때 쓰는데, nocomplexity.com에 정리된 방법이 검증돼 있고 탄탄함.

복잡도가 낮으면 보안이 실제로 좋아진다는 연구가 있음? 얼마나 개선되는지 수치로 본 자료가 궁금함.

CC는 유용하지만 다형성이 자리 잡기 전에 만들어져서 명시적 분기만 셈. C#에서 가상 메서드 호출은 점수를 안 올리는데, IEnumerable 같은 흔한 인터페이스면 경로가 수천 개, 라이브러리면 사실상 무한임. 고차 함수도 마찬가지고. CC 상한이 유지보수 만능은 아님. 내가 해독한 제일 이해 안 되는 함수들이 오히려 CC가 낮았음.

글 읽으면서 뭔가 어긋난다고 느꼈는데 이 댓글 보고 알겠음. 예제에서 리팩터링한 새 코드가 더 복잡해 보임. 중첩 if를 다른 언어 기능으로 아예 뜯어고치는 게 맞을 듯.

CC 낮은데 이해 안 되는 함수 얘기 공감함. EEG로 인지 부하랑 소요 시간을 측정한 연구를 보면 우리가 쓰는 복잡도·가독성 지표가 실제와 부분적으로만 맞음.

전 회사에서 CC가 갑자기 중요해진 시점이 AI 툴로 코드 변경을 남발하던 때랑 겹쳤음. 그 뒤로 리뷰 불가능한 diff가 쏟아졌음.

나는 에이전트용 결정론적 품질 게이트에 CC를 넣었음. 플라시보인지는 모르겠지만, 에이전트가 프로젝트 제약을 벗어나는 경우를 꽤 많이 잡아냄.

해커뉴스
C# 순환 복잡도(CC), 계산법부터 CA1502 임계값과 리팩터링 예제까지 정리과학은 곧 오픈소스 소프트웨어라는 주장, 해커뉴스 댓글은 "동치가 아니다"라며 반박미켄스 논문: LLM 내부 계산은 언어로 표현 안 되니 CoT 감시로는 샌드박스 못 지킨다, 테인트 추적을 쓰자KV 캐시로 LLM끼리 직접 대화하는 Cache-to-Cache, 텍스트 통신보다 정확도 3.1~5.4% 높고 지연은 2.5배 단축알리바바, 복부 CT로 146개 소견 판독하는 의료 AI 'Damo Radar' 오픈소스 공개OpenAI, 자체 LLM으로 Jalapeño 칩 설계... 파운드리 첫 칩 반환 후 벤치마크 성능 0.31%에서 88.94%로샌프란시스코 양파선물회사, 개인에게 양파 선물 계약 팔며 '우리는 보드 오브 트레이드가 아니다'라고 주장뇌는 고대 신경계 두 개가 합쳐진 하이브리드, 쥐·인간 배아에서 앞뒤 뇌의 기원이 다르다는 연구 나와해커뉴스에 다시 오른 'Warez: The Infrastructure and Aesthetics of Piracy', 300쪽 PDF와 옛 릴리스 그룹 회고Xcode 27.1 베타 공개, Swift 6.4와 iPhone Duo 시뮬레이터 런타임 포함C++26, while(true); 무한 루프를 더 이상 미정의 동작으로 두지 않는다RP2350, 광자 방출 현미경으로 디버그 레지스터 찾아 레이저로 Secure 디버그 뚫려 (장비값 $250,000)볼리비아에서 100년 만에 고양잇과 신종 확인, Leopardus tilcayo로 명명 제안랩터 1의 배관 덩어리에서 랩터 3까지, SpaceX가 로켓 엔진을 매끈하게 만든 방법미니멀 폰 2, 물리 QWERTY 키보드 단 안드로이드 폰 $599에 예약판매 시작Cloudflare, 일관 해싱 알고리즘 손봐서 전 세계 100TB RAM 회수ZCode, 로그인만 하면 워크스페이스 전체와 .git 히스토리를 알리윈 OSS로 조용히 업로드한국, 개인정보 유출 과징금을 매출 10%로 상향…쿠팡 사례 적용하면 조 단위Claude Code 2.1.277, CLAUDE.md 없으면 AGENTS.md를 읽는다Android 17 QPR1, AOSP 릴리스 없이 새 API 추가: 허니콤 3.x 이후 처음이며 Pixel 전용미 제2연방항소법원, 국경에서 의심 없이 전자기기 수색 허용 판결Voronoi 셰이더가 윈도우 RTX 4070에서만 버벅인 이유를 일주일간 파헤친 디버깅기북한 2017년 핵실험 후 풍계리 일대 지진 8년째 증가, 규모 2 미만 1399회 확인Dan Luu "LLM에 머리 끄고 맡기는 미트 프록시는 직원에게 이득인 지점이 없다"해외 중앙은행 미 국채 보유 3.77조 달러로 2012년 수준, 발행 잔액은 3배Dan Abramov, 한 달간 Claude로 콘웨이 세분화 추측 Lean 증명 작성... 수학자 독립 검증은 아직코딩 에이전트 하네스 176개 설정 실험, 컨텍스트 관리 이득은 대부분 오버플로 방지에서 나와Cloudflare, 계정 없이 한 줄로 로컬 서버를 여는 Quick Tunnels 공개...HN은 TOS와 남용 우려 제기패스키는 기업엔 맞고 개인엔 아직 이르다, 하드웨어 키 계정 한도와 동기화 계정 정지 위험 지적수백 년 묵은 메인주 사과나무, DNA 분석으로 수백 품종의 잃어버린 조상으로 확인멜버른 GPS 수신기 한 대가 2006년으로 돌아가며 텔스트라 전국망 마비우주는 왜 팽창하는가: 표준 우주론을 프랑켄슈타인에 비유한 글Qwen 3.8 27B용 ShapeLearn GGUF 5종 공개, GPU-5가 BF16 대비 99.63% 정확도로 13.1GB VRAM에 90.42 TPS마이크로소프트 임원, AI 스크레이핑을 '인류 역사상 최대의 노동 절도'라고 불러. 공개된 법원 문서에서 드러난 내부 발언고대 그리스어에 남은 정체불명 어휘 1,000개, 사라진 팔레오유럽 언어의 흔적OpenJev, 브라우저에서 도는 Jev 인터페이스 재현 공개... 4B 모델 TypeSafe 84.5%, 호스팅 Jev는 88.3%FEX가 정리한 x86-TSO 에뮬레이션 문제: load-acquire 매핑, split-lock, uncached 메모리jemalloc 5.4.0 공개, 160개 넘는 커밋으로 기술 부채 정리하고 tcache 정책을 바꿈LLM 글쓰기 조언: 모델이 제안한 단어 금지, 격려 금지 두 규칙libheif 취약점 연쇄로 OpenAI 직원 ChatGPT 계정 탈취, 바운티는 6,500달러Snapdrop이 snapdrop.me로 재출시, WebRTC로 기기 간 파일 전송에 Chrome은 마이크 권한 요청북미 밖에서는 처음, 스페인 테루엘에서 디플로도쿠스 화석 확인Uber, 문맥 인식 재시도 차단으로 폭풍 막아 950만 건 요청 억제금융 앱에서 '문서 허브'와 '알림 센터'를 거부한 PM의 에세이, 무엇을 만들지 않는가가 가장 중요한 결정이라는 주장Flet 1.0 공개: Python 코드 하나로 iOS, Android, 웹, 데스크톱 앱 빌드알리바바, 1M 토큰 컨텍스트 옴니모달 Qwen3.8-Omni-Flash 공개AI 연산 공세에 수학자들 "연구 방향 숨겨야 하나"... 타오 "희소 자원은 이제 문제 발굴"TSMC, IEDM 2026에서 A14 노드 공개: N2 대비 밀도 20% 증가, 2028년 양산PrismML, 삼진 가중치 Bonsai 2 27B 공개: 5.9GB에 9배 압축, 성능 98.2% 유지MoE에서 착안한 '무한 파라미터 LLM', 런타임 데이터를 저랭크 가중치로 생성하는 하이퍼네트워크 제안CrowdSec, TanStack 백도어가 빼낸 API 키로 비공개 소스코드 유출 확인GitLab.com, 10월 19일부터 요금제별 API 한도 적용. 비인증 요청은 IP당 시간당 60회빅터 태일린이 공개한 Bend, 증명으로 AI 실수를 막고 GPU에서 124배 빠르게 실행OpenAI, GPT-6 Astra 기반 법률 특화 'Astra for Law' 공개... 판례 2억 3천만 URL 인덱스 탑재뉴요커 "미국의 종교는 교회와 셀프 스토리지" 기사, HN에서 노숙과 상속 잡담으로 번져가워스, 필즈상 수상자 25인 AI 성명서 서명 거부… "위기라는 데는 동의하지만 분석이 다르다"업무 시간 75%를 AI에 빼앗긴 보안 엔지니어의 폭발: Everybody's Lost Their MindsSearx 개발자가 만든 개인 검색엔진 Hister, HN 프런트페이지 재진입과 함께 상표 충돌로 이름 변경 요구받아디랙 1939년 강연: 물리학자는 단순성이 아니라 수학적 아름다움을 좇아야 한다후지쓰, 2nm 3D 적층 CPU FUJITSU-MONAKA 11월 출시, AI 추론 처리량 2배 주장Cloudflare, 코딩 에이전트용 보안 감사 스킬 공개... 6단계로 취약점 검증CCC, 40C3 참가 신청 시작…2026년 12월 27일부터 30일까지 함부르크 전시장에서카니 캐나다 총리, EU 준회원국 제안 환영. 트럼프는 "적대 행위면 매우 심각한 관세" 위협GLM, 10만 개 넘는 중국산 가속기로 추론 인프라 자체 구축…작업 대부분 Infra Agent가 수행2천만 설치된 2014년 PHP 임시 패치, 작성자가 12년 만에 deprecated 선언Servo 기부금으로 고용된 메인테이너 1년: PR 1150건 리뷰, 새 메인테이너 8명, 총지출 $52,883.97Neovim 기부 푸터 비트코인 주소에 2023년 들어온 10 BTC, 약 $80만 그대로 방치Fable 5로 2시간 만에 설계한 RP2350 E-ink 보드, DRC 오류 65개 딛고 JLCPCB에서 5장 130유로에 완성505 Games 콘솔 포팅 엔지니어가 파헤친 텍스처 메모리 레이아웃의 해부아마존 사이언스, Rust 정형 검증 도구 Verus 소개... HN에서는 "결국 Z3에 증명 던지는 것뿐" 지적UC Berkeley 연구진 "코딩 에이전트 하네스는 정답률보다 비용을 바꾼다", Claude Code는 Pi보다 2배 비쌈Jev 리버스 엔지니어링한 'jevlike' 저장소 공개, Doom과 체스 학습 예제까지 추가OpenSpec, AI 코딩 에이전트용 경량 스펙 프레임워크 공개 (GitHub 스타 6만 8천)미국 운전면허 PDF417 바코드의 ECDSA 서명에서 공개키 복구, 리포니아만 6개월 만에 검증 문서 공개프로그래머들은 reduce를 싫어한다, 코드 리뷰에서 자주 지적받는 이유미 전략비축유 7억1400만 배럴, 지상 탱크 대신 지하 소금 동굴에 넣은 이유백업은 단순하지 않다: RPO에서 GFS 로테이션, 하드링크 중복 제거까지 계속 늘어나는 백업의 조건일본 도서관이 여행지가 되다: 인구 9천 명 난칸 도서관에 연 10만 명 방문호주, 캐나다 따라 EU와 '고유 동맹' 추진 가능성 시사1.58비트 장벽 깬 BITCOS, 3진 LLM 가중치를 1.485비트까지 압축Factorio RNG 역공학: taus88 상태를 읽어 전설 품질 제작 순간을 예측한 2년 작업DeepMind가 AGI 논의 플랫폼 'DeepMind Institute' 공개, 실체는 블로그스티븐 타우브, 'Performance Improvements in .NET 11' 공개... 런타임·라이브러리 수백 개 개선 정리NVIDIA, Rust로 GPU 커널을 직접 작성하는 CUDA Rust 공개. SIMT용 cuda-oxide와 Tile용 cutile-rs 두 트랙AWS, 이란 드론 공격받은 중동 데이터센터 일부 데이터 복구 불가샤오미 MiMo 2.6, RL 포스트트레이닝 과정을 실시간 대시보드로 공개4B 모델을 RL로 학습해 Postgres 기본 플랜보다 1.81배 빠른 쿼리 플랜 생성구글 테스팅 블로그의 CRAP 지표(2011)가 해커뉴스에 재등장, 커버리지 대신 분기만 잰다는 반론과 옛 동료 회고까지온타리오 사설 온라인 도박 합법화 후 도박장애 응급실 방문 2배, 젊은 남성에 집중가동률 99.9%와 99.99%는 10배 차이인데 왜 똑같아 보일까, 상태 페이지 표기 비판MS AI CEO 술레이만, Anthropic의 '모델 복지' 교육이 정렬을 불가능하게 만든다고 경고Anthropic, Claude Cowork와 채팅을 하나의 Claude로 통합하고 Docs·Slides 공개Dream-RSI, 탐색 이력을 리플레이 시뮬레이터로 써서 온라인 평가 없이 탐색 정책을 개선발표자에게 "발표 잘 들었어요" 한마디, 침묵이 더 괴롭다는 발표자의 글터미널·SQL·git 잔기술 모음 'Small Programming Tricks'가 해커뉴스에서 손코딩 논쟁을 불러옴PS2 보안 칩 CXP102064, 26년 만에 뚫려. 4년 디캡 작업 끝에 소프트웨어 익스플로잇 확보해커 집단이 Flock 카메라를 뜯어내 내부 저장소와 암호화 키를 통째로 복제, 사람까지 탐지하는 소프트웨어 확인1993년, 부동소수점 없는 25MHz 486-SX로 1024x768 GPS 이동 지도를 2초마다 갱신한 계약 개발기코딩 에이전트가 테스트 데이터를 지어내지 않게, DATAMIMIC CE 4.1.0 개발 버전 공개Conversations 개발자, 구글 플레이 심사가 일주일 넘게 걸린다며 스크린샷 공개