그래프 기반 빌드 오류 자동 수정

본 논문은 소스 코드, 빌드 설정 파일, 컴파일러 진단 메시지를 그래프로 표현하고, 그래프 신경망(GNN)과 포인터·복사 메커니즘을 결합한 Graph2Diff 모델을 제안한다. 50만 건 이상의 실제 빌드 오류 데이터를 이용해 학습·평가했으며, 기존 DeepDelta 대비 두 배 이상의 정확도를 달성한다.

저자: Daniel Tarlow, Subhodeep Moitra, Andrew Rice

그래프 기반 빌드 오류 자동 수정
이 논문은 빌드 오류 자동 수정을 목표로 새로운 딥러닝 아키텍처인 Graph2Diff을 제안한다. 기존 연구는 주로 텍스트 기반 NMT 모델(DeepDelta 등)를 사용해 진단 메시지를 직접 수정 스크립트로 변환했지만, 이러한 접근법은 코드의 구조적 정보와 복잡한 의존 관계를 충분히 활용하지 못한다는 한계가 있었다. 이를 해결하기 위해 저자들은 세 가지 핵심 설계를 도입했다. 첫 번째는 입력 데이터를 그래프 형태로 통합하는 것이다. 소스 코드 파일은 AST 형태로 파싱되고, 빌드 설정 파일도 유사한 트리 구조로 변환된다. 컴파일러 진단 메시지는 템플릿과 인자 리스트로 분해되어 그래프에 연결된다. 노드 타입은 ‘Variable’, ‘MethodCall’, ‘Import’, ‘Diagnostic’, ‘BuildOption’ 등으로 정의되며, 엣지는 부모‑자식 관계, 데이터 흐름, 진단‑코드 매핑 등을 나타낸다. 이렇게 구성된 이종 그래프는 정적 분석 결과(예: 타입 정보, 심볼 테이블)와도 쉽게 결합될 수 있다. 두 번째는 그래프 신경망(GNN)을 이용해 노드 임베딩을 학습하는 단계이다. 저자는 Graph Convolutional Network를 사용해 각 노드의 로컬 구조와 멀리 떨어진 노드와의 관계를 동시에 캡처한다. GNN은 특히 “cannot resolve symbol”과 같은 진단이 실제 수정 위치와 멀리 떨어져 있을 때, 해당 심볼이 정의된 위치를 추론하도록 돕는다. 세 번째는 출력 디프(diff)를 토큰 시퀀스와 두 종류의 포인터로 표현하는 것이다. 일반 토큰은 삽입·삭제·수정 연산에 사용되며, ‘포인터’는 AST 내 특정 노드를 직접 가리킨다(예: “insert token at node 42”). ‘복사 포인터’는 원본 코드에서 식별자를 그대로 복사하도록 하여 OOV 문제를 해결한다. 이러한 설계는 디프를 길이 제한 없이 표현하면서도, 실제 코드 편집에 필요한 정확한 위치 정보를 제공한다. 논문은 또한 Graph2Tocopo라는 추상화 프레임워크를 제시한다. 이는 “그래프 입력 + 편집 도메인 언어 출력”이라는 인터페이스를 정의해, 다양한 코드 편집 작업에 동일한 구조를 적용할 수 있게 한다. Graph2Diff은 Graph2Tocopo의 한 구현체이며, Encoder‑Decoder 구조에 GNN‑Encoder와 포인터·복사‑Decoder를 결합한다. 학습 과정에서는 교차 엔트로피 손실 외에 포인터와 복사 메커니즘을 위한 별도 손실을 함께 최소화한다. 데이터셋 구축은 구글 내부 빌드 로그를 활용해 이루어졌다. 1년 치 로그에서 첫 번째 빌드가 오류를 발생시키고 두 번째 빌드가 성공한 경우를 추출해 ‘깨진’과 ‘수정된’ 코드 스냅샷을 매칭하였다. 이후 GumTree를 이용해 AST 차이를 디프 스크립트로 변환하고, 디프 길이가 7 이하인 사례만을 선택해 학습 효율을 높였다. 최종적으로 약 500 k 건의 빌드 오류·수정 쌍을 확보했으며, 이 중 36 %는 진단 라인과 실제 수정 라인이 일치하지 않았고, 21 %는 다중 비연속 영역을 동시에 수정해야 하는 복합적인 패턴을 보였다. 실험에서는 Graph2Diff이 정확히 동일한 디프를 생성하는 비율이 61 %였으며, 전체 오류 중 46 %에 대해 유의미한 수정을 제안했다. 이는 DeepDelta가 달성한 수준보다 두 배 이상 높은 수치이다. 또한, 모델이 제안한 디프가 개발자 디프와 다르더라도 실제 빌드가 성공하는 경우가 많아, 모델이 실용적인 대안을 제공함을 확인했다. 결론적으로, 그래프 기반 입력 표현과 포인터·복사 메커니즘을 결합한 Graph2Diff은 빌드 오류 자동 수리에서 뛰어난 성능을 보이며, 코드 편집 전반에 적용 가능한 일반화된 프레임워크인 Graph2Tocopo를 제시한다. 향후 연구에서는 타입 정보, 데이터 흐름 분석 등 더 풍부한 정적 분석 결과를 그래프에 통합하고, 다중 파일·다중 모듈 수정까지 확장하는 방향이 제시된다.

원본 논문

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

댓글 및 학술 토론

Loading comments...

의견 남기기