Detecting Object-Oriented Code Smells through Social Network Analysis
이 논문은 소프트웨어 구성 요소와 그 상호작용을 사회적 네트워크로 모델링하고 네 개의 자바 오픈 소스 프로젝트에 사회 네트워크 분석(SNA) 지표를 적용하여 숨겨진 설계 결함을 찾아냄으로써 객체 지향 코드 스멜을 탐지하는 새로운 접근 방식을 제안한다.
원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
소프트웨어는 수많은 작은 명령들이 서로 협력하여 구축되며, 이는 마치 도시가 개별 건물들과 그들을 연결하는 도로들로 세워지는 것과 같습니다. 도시가 잘 계획되어 있다면 교통 흐름이 원활하고, 새로운 동네를 혼란 없이 추가할 수 있습니다. 컴퓨터 프로그래밍의 세계에서 이러한 조직화는 '객체 지향 설계'라고 불리며, 코드는 서로 상호작용하는 독립적인 단위들로 그룹화됩니다. 하지만 도시가 과밀한 교차로나 버려진 건물들로 인해 고통받을 수 있는 것처럼, 소프트웨어 또한 '코드 스멜(code smells)'이라고 알려진 구조적 결함이 발생할 수 있습니다. 이것은 프로그램이 충돌을 일으키는 오류는 아니지만, 설계가 점점 지저지고 이해하기 어렵거나 수정하기 힘들어지고 있다는 신호입니다. 이를 방치하면 소프트웨어는 취약해지고 유지보수 비용이 비싸지며, 개발자들은 새로운 기능을 만드는 데보다 엉킨 매듭을 푸는 데 더 많은 시간을 소비하게 됩니다.
수십 년 동안 연구자들은 이러한 결함을 자동으로 찾아내기 위해 노력해 왔으며, 종종 코드의 줄 수를 세거나 단일 섹션에서 얼마나 많은 변수를 사용하는지를 측정했습니다. 이러한 전통적인 방식은 도움이 되긴 하지만, 때때로 더 큰 그림을 놓치며 서로 다른 부분들이 복잡한 방식으로 어떻게 의존하는지를 파악하지 못합니다. 킹 사우드 대학교(King Saud University)의 모하메드 마데(Mohamed Maddeh)가 최근 발표한 연구에서 상세히 다룬 새로운 접근 방식은 소프트웨어를 단순히 파일들의 집합이 아니라 하나의 사회적 네트워크로 바라볼 것을 제안합니다. 이 관점에서 모든 코드 클래스는 한 명의 사람이며, 한 코드 조각이 다른 조각을 사용하는 매 순간은 사회적 상호작용입니다. 연구자는 인간 공동체의 우정과 영향력을 지도화하는 데 사용되는 것과 동일한 수학적 도구를 적용하여, 이러한 구조적 약점을 더욱 명확하게 식별하는 방법을 개발했습니다.
연구는 Java 언어로 작성된 네 개의 잘 알려진 오픈 소스 소프트웨어 프로젝트인 JUnit, Spring, Apache Commons BCEL, 그리고 Guava에 집중되었습니다. 이 프로젝트들은 수백 개에서 4,000개 이상의 별도 코드 단위에 이르기까지 규모가 매우 다양합니다. 분석을 위해 연구자는 먼저 이 프로젝트 내의 모든 클래스를 추출하고 그들이 어떻게 상호작용하는지를 정확히 매핑했습니다. 만약 한 클래스가 다른 클래스로부터 데이터나 함수를 필요로 한다면, 그 사이에 선을 그려 거대한 연결망을 만들었습니다. 이 웹은 전문 시각화 도구인 Gephi로 가져와졌으며, 이를 통해 연구자는 소프트웨어 전체 구조를 하나의 상호 연결된 지도로 볼 수 있었습니다.
소프트웨어가 네트워크로 모델링되자, 연구자는 특정 측정치를 적용하여 '스멜'을 식별했습니다. 사회적 네트워크에서 모든 사람을 알고 중심에서 많은 대화를 나누는 사람은 연결성이 높습니다. 소프트웨어에서 너무 많은 다른 클래스와 상호작용하는 클래스는 '갓 클래스(God Class)'를 나타내는데, 이는 너무 많은 책임을 떠맡아 모든 것을 하려고 하는 단위입니다. 반대로, 아무도 알지 못하고 지도 가장자리에 홀로 앉아 있는 사람은 '죽은 코드(Dead Code)'를 의미하며, 이는 더 이상 사용되지 않는 소프트웨어 조각을 나타냅니다. 또한, 외부 세계와는 전혀 소통하지 않고 자기들끼리만 대화하는 집단이나, 두 개의 분리된 그룹 사이를 잇는 유일한 가교 역할을 하는 한 사람과 같은 패턴은 정보만 보유하고 아무것도 하지 않는 '데이터 클래스(Data Classes)', 혹은 한 번의 변경이 여러 곳의 수정을 요구하는 '샷건 서저리(Shotgun Surgery)'와 같은 결함을 드러냈습니다.
결과는 이 네트워크 기반 방식이 건강한 코드의 대다수를 효과적으로 걸러내어, 개발자들에게 검사해야 할 용의자 목록을 훨씬 작게 만들어 준다는 것을 보여주었습니다. 4,000개가 넘는 클래스를 포함한 가장 큰 프로젝트에서, 이 방식은 약 17%만을 잠재적으로 문제가 있는 것으로 분류했습니다. 거의 1,000개의 클래스를 가진 또 다른 프로젝트에서는 약 35%가 주의가 필요한 것으로 식별되었습니다. 시각화 도구는 이러한 발견을 즉각적이고 직관적으로 만들어 주었습니다. '갓 클래스'는 지도의 중심에서 크고 밝게 빛나는 허브로 나타났고, '죽은 코드'와 '사용되지 않는 클래스'는 작고 어두운 노드로 나타나 지도 가장자리로 밀려나 있거나 종종 연결되지 않은 고립된 섬으로 존재했습니다.
이 접근 방식은 인간의 판단을 대체하거나 모든 결함을 오류 없이 완벽하게 식ident하겠다고 주장하는 것이 아닙니다. 대신, 이는 강력한 트리아지(triage, 우선순위 분류) 도구로서, 전체 코드베이스를 검토하는 압도적인 작업을 가장 구조적으로 특이한 부분들의 관리 가능한 목록으로 줄여주는 역할을 합니다. 코드의 내부 내용뿐만 아니라 조각들 사이의 관계에 집중함으로써, 이 방법은 오래된 문제에 대한 새로운 관점을 제공합니다. 이는 소프트웨어 시스템의 건강함이 종종 그 연결의 패턴에서 보인다는 것을 시사하며, 이러한 패턴을 지도화함으로써 개발자들이 디지털 창조물이 감당할 수 없게 되기 전에 숨겨진 약점을 찾아낼 수 있도록 돕습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.