대규모 언어모델(LLM)이 코드를 거의 완벽하게 생성하는 시대가 도래했지만, 이것이 코딩 문제의 끝은 아닙니다. 생성된 코드가 문법적으로는 정확하더라도, 불필요한 추상화를 도입하거나 중복을 만들고 전반적으로 좋지 않은 결정을 내릴 수 있기 때문입니다. 이러한 '엉성함(sloppiness)'은 프로젝트의 코드 라인 수(LOC)를 급증시켜 인간 개발자가 코드를 따라잡기 어렵게 만들며, 심지어 AI 에이전트조차도 이 문제를 효과적으로 처리하지 못하는 한계가 있습니다.
코드의 엉성함을 측정하는 것은 매우 어려운 과제입니다. 단순히 LLM에게 코드 품질을 1점에서 10점 사이로 평가하게 하거나, 두 가지 솔루션 중 선호하는 것을 고르게 하는 방식은 모델의 일관성 부족으로 인해 신뢰하기 어렵습니다. 인간 평가자가 가장 정확하지만, 대규모 AI 훈련이나 벤치마크에는 확장성이 떨어집니다. 이에 대한 대안으로, 코드 라인 수(LOC)의 변화를 측정하는 것이 의외로 효과적인 지표로 나타났습니다. 또한, 'SlopCodeBench' 연구에서는 '장황성(Verbosity)'과 '침식(Erosion)'이라는 두 가지 새로운 지표를 제안했습니다. 장황성은 불필요하게 중복되거나 장황한 코드 라인의 비율을 측정하며, 침식은 코드베이스 내에서 복잡하고 큰 함수에 얼마나 많은 '질량(mass)'이 집중되어 있는지를 측정합니다. 여기서 질량은 함수의 순환 복잡도(Cyclomatic Complexity)와 소스 코드 라인 수(SLOC)를 곱한 값으로 정의됩니다.
실제 실험 결과, LLM이 생성한 코드는 기존의 잘 구축된 저장소(repository) 코드에 비해 평균적으로 두 배 이상 장황하고 침식도가 높게 나타났습니다. 예를 들어, 기존 저장소의 장황성은 평균 0.15였던 반면, 에이전트 코드는 0.33을 기록했습니다. 침식도 역시 기존 저장소는 0.31, 에이전트 코드는 0.68로 큰 차이를 보였습니다. 이러한 결과는 LLM이 생성하는 코드가 여전히 인간의 개입 없이는 품질 면에서 개선될 여지가 많음을 시사합니다. '장황성'과 '침식' 같은 객관적인 지표를 활용하면, LLM 기반 코드 생성 도구의 성능을 더욱 정밀하게 평가하고, 개발자들이 더 효율적이고 유지보수하기 쉬운 코드를 작성하도록 돕는 데 기여할 수 있을 것입니다.
