인지부하 기반 자동 리팩터링으로 초보자 코드 이해도 향상

본 논문은 인지부하 이론을 적용한 자동 리팩터링 도구 CDDRefactorER를 제안한다. CDD 원칙에 따라 제어 흐름 복잡도를 측정·제한하고, 메서드 추출·중첩 감소·식별자 개선 등 초보자 친화적 변환을 수행한다. MBPP·APPS 데이터셋에서 GPT‑5‑nano와 Kimi‑K2 모델을 이용해 실험한 결과, 기존 무제한 프롬프트 대비 리팩터링 실패율을 54‑71 % 감소시켰으며, 사이클로매틱·인지 복잡도 증가 가능성을 크게 낮추었다. 20명…

저자: Subarna Saha, Alif Al Hasan, Fariha Tanjim Shifat

인지부하 기반 자동 리팩터링으로 초보자 코드 이해도 향상
본 논문은 초보 프로그래머가 타인의 코드를 이해하는 데 겪는 어려움을 ‘구조적 복잡성’—특히 깊은 중첩, 모호한 식별자, 비논리적 흐름—으로 규정하고, 이를 완화하기 위한 새로운 자동 리팩터링 접근법인 CDDRefactorER를 제안한다. CDDRefactorER는 Cognitive‑Driven Development(CDD)에서 제시된 Intrinsic Complexity Points(ICP)를 정량적 지표로 채택한다. ICP는 조건문·반복문·중첩 깊이 등에 가중치를 부여해 함수·메서드 수준에서 누적 복잡도를 산출하고, 인간 작업 기억 한계인 밀러 법칙(7 ± 2)과 비교해 임계값을 초과하는 코드를 식별한다. 시스템 설계는 크게 두 부분으로 구성된다. 첫 번째는 ‘ICP 측정 및 제한’ 단계로, 입력 코드에 대해 자동으로 ICP를 계산하고, 임계값(≤7)을 초과하면 해당 코드 블록을 리팩터링 대상으로 표시한다. 두 번째는 ‘인지 부하 인식 리팩터링 전략’ 단계이며, 여기서는 사전에 정의된 변환 규칙을 적용한다. 주요 전략은 다음과 같다. (1) Extract Method: 복잡한 함수를 작은 단일 목적 메서드로 분리해 인지 부하를 분산한다. (2) Reduce Nesting: 깊은 중첩을 평탄화해 제어 흐름을 단순화한다. (3) Eliminate Duplication: 중복 코드를 추출·통합해 코드 양을 감소시킨다. (4) Simplify Boolean Returns: 복잡한 조건식 대신 직접적인 불리언 반환으로 바꾼다. (5) Descriptive Naming: 변수·함수 식별자를 의미 있게 바꾸어 의미적 부하를 낮춘다. (6) Sequential Flow: 논리적 순서를 재배열해 흐름을 직관적으로 만든다. 각 전략은 구체적인 변환 예시와 함께 프롬프트에 명시되어, 대형 언어 모델(LLM)이 일관된 방식으로 코드를 변환하도록 유도한다. 프롬프트 설계는 두 가지 버전으로 비교된다. ‘Unconstrained Zero‑shot Prompt’는 일반적인 가독성·유지보수성을 목표로 하지만 구조적·인지 제약을 명시하지 않는다. 반면 ‘CDDRefactorER Prompt’는 ICP 계산식, 임계값, 그리고 위에서 언급한 변환 규칙을 코드 블록 형태로 제공한다. 이 프롬프트는 GPT‑5‑nano와 Kimi‑K2 두 모델에 적용되어, 동일한 입력에 대해 서로 다른 리팩터링 결과를 생성한다. 실험은 자동 리팩터링 성능 평가와 인간 실험 두 축으로 진행된다. 자동 평가에서는 MBPP와 APPS 두 공개 데이터셋을 사용해 3,000여 개의 함수/문제를 대상으로 변환을 수행했다. 평가 지표는 (a) 기능 정확도(테스트 케이스 통과 여부), (b) 사이클로매틱 복잡도, (c) 인지 복잡도(ICP), (d) 구조적 유사도(CodeBLEU)이다. 결과는 CDDRefactorER가 무제한 프롬프트 대비 리팩터링 실패율을 평균 62 % 감소시켰으며, 사이클로매틱·인지 복잡도 증가 확률을 각각 0.18→0.05, 0.21→0.07로 크게 낮췄다. 또한 구조적 유사도는 0.84에서 0.91로 향상돼 원본 코드와의 일관성을 유지한다는 점이 강조된다. 인간 실험은 CS‑101을 수강한 20명의 초보자를 두 그룹(통제 vs. 실험)으로 무작위 배정하고, MBPP에서 추출한 3개의 문제를 사전·사후 테스트했다. 사전 테스트에서는 두 그룹 간 차이가 없었으며, 사후 테스트에서는 실험군이 함수 목적 파악 정확도에서 31.3 % 상승, 주관적 가독성 점수에서 22.0 % 상승했다. 반면, 재귀·동적 메모리 관리 등 새로운 개념에 대한 이해도는 두 그룹 간 차이가 미미했다. 이는 구조적 개선이 기본적인 이해를 돕지만, 개념적 학습을 대체하지는 못한다는 한계를 시사한다. 위험 요인으로는 (1) 프롬프트 설계가 특정 LLM에 최적화되어 있어 모델 교체 시 성능 저하 가능성, (2) ICP 임계값이 언어·도메인에 따라 다를 수 있어 일반화에 한계, (3) 자동 변환이 복잡한 프로젝트에서 발생하는 의존성·상호작용을 충분히 고려하지 못할 위험이 있다. 저자는 향후 동적 실행 기반 복잡도 측정, 다중 프로그래밍 언어 지원, 자동 테스트와 연계한 변환 검증 등을 통해 이러한 한계를 보완하고, 교육용 IDE와 연동해 실시간 인지 부하 기반 리팩터링 피드백을 제공하는 방향을 제시한다. 결론적으로, 이 연구는 인지 부하 이론을 LLM 기반 자동 리팩터링에 적용함으로써 초보자 친화적인 코드 변환을 실현했으며, 정량적·정성적 실험을 통해 기능 정확도 유지와 구조적 복잡도 감소, 그리고 학습자 이해도 향상을 동시에 달성했다는 점에서 의미가 크다. 이는 향후 프로그래밍 교육 도구와 AI 코딩 어시스턴트 설계에 중요한 설계 원칙을 제공한다.

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기