Skip to main content
QUICK REVIEW

[논문 리뷰] Graph4Code: A Machine Interpretable Knowledge Graph for Code

Ibrahim Abdelaziz, Julian Dolby|arXiv (Cornell University)|2020. 02. 21.
Software Engineering Research참고 문헌 30인용 수 10
한 줄 요약

Graph4Code는 130만 개의 GitHub 파일, 2,300개의 모듈, 4,700만 개의 포럼 게시물에서 유래한 파이썬 코드의 대규모 기계 가공 가능한 지식 그래프로, 정적 프로그램 분석과 문서화를 통해 기능, 클래스, 메서드 간의 관계를 RDF의 이름이 부여된 그래프로 표현한다. 이 지식 그래프는 20억 개 이상의 트리플을 포함하며, 코드 검색, 디버깅, 타입 추론, 최선의 실천 방식 적용 등의 응용 분야를 가능하게 한다.

ABSTRACT

Knowledge graphs have proven extremely useful in powering diverse applications in semantic search and natural language understanding. Graph4Code is a knowledge graph about program code that can similarly power diverse applications such as program search, code understanding, refactoring, bug detection, and code automation. The graph uses generic techniques to capture the semantics of Python code: the key nodes in the graph are classes, functions and methods in popular Python modules. Edges indicate function usage (e.g., how data flows through function calls, as derived from program analysis of real code), and documentation about functions (e.g., code documentation, usage documentation, or forum discussions such as StackOverflow). We make extensive use of named graphs in RDF to make the knowledge graph extensible by the community. We describe a set of generic extraction techniques that we applied to over 1.3M Python files drawn from GitHub, over 2,300 Python modules, as well as 47M forum posts to generate a graph with over 2 billion triples. We also provide a number of initial use cases of the knowledge graph in code assistance, enforcing best practices, debugging and type inference. The graph and all its artifacts are available to the community for use.

연구 동기 및 목표

  • 구문을 초월한 의미 관계를 포괄하는 확장 가능하고 확장 가능한 파이썬 코드 지식 그래프를 구축하는 것.
  • 소스 코드, 문서화, 커뮤니티 포럼과 같은 다양한 데이터 소스를 통합하여 RDF 기반의 통합 지식 그래프를 만드는 것.
  • 기계 가공 가능한 의미론을 통해 프로그램 이해, 리팩터링, 버그 탐지, 코드 자동화 등의 실용적 응용 분야를 지원하는 것.
  • 지속적인 기여와 진화를 가능하게 하기 위해 RDF의 이름이 부여된 그래프를 사용해 커뮤니티 기반의 확장성을 제공하는 것.
  • 타입 추론 및 최선의 실천 방식 적용과 같은 실제 코드 보조 작업에서 그래프의 유용성을 입증하는 것.

제안 방법

  • 정적 프로그램 분석을 사용해 130만 개의 파이썬 파일에서 기능, 클래스, 메서드를 추출하여 구조적 및 제어 흐름 관계를 식별하는 것.
  • 실제 코드에서 기능 사용 패턴을 추출하여 데이터 흐름과 호출 종속성을 지식 그래프의 간선으로 모델링하는 것.
  • 텍스트 기반 문서화, docstrings, 포럼 토론(예: 스택 오버플로우)을 의미론적 간선으로 통합하여 기능 설명을 풍부하게 하는 것.
  • 이름이 부여된 그래프를 사용해 RDF로 지식 그래프를 표현하여 모듈화되고 확장 가능하며 커뮤니티 기반으로 확장 가능한 지식 표현을 지원하는 것.
  • 다양한 데이터 소스를 일관되게 처리하기 위해 일반적이고 재사용 가능한 추출 파이프라인을 적용하는 것.
  • 이질적인 데이터 소스에서 유래한 20억 개 이상의 RDF 트리플을 포함하는 지식 그래프를 생성하기 위해 파이프라인을 확장하는 것.

실험 결과

연구 질문

  • RQ1다양한 실제 데이터 소스에서 유래한 대규모 기계 가공 가능한 파이썬 코드 지식 그래프를 어떻게 구성할 수 있는가?
  • RQ2정적 프로그램 분석과 문서화 및 포럼의 자연어 처리를 통해 코드 의미 모델링의 정확도는 어느 정도 향상될 수 있는가?
  • RQ3이러한 지식 그래프는 디버깅 및 타입 추론과 같은 실용적 소프트웨어 공학 작업을 효과적으로 지원할 수 있는가?
  • RQ4구조적이고 확장 가능한 지식 그래프에서 커뮤니티 기반의 확장성은 어떻게 달성할 수 있는가?
  • RQ5소스 코드, 문서화, 포럼 등 다양한 데이터 소스 통합이 코드 의미 표현의 품질과 유용성에 어떤 영향을 미치는가?

주요 결과

  • Graph4Code 지식 그래프는 130만 개의 파이썬 파일, 2,300개의 모듈, 4,700만 개의 포럼 게시물에서 유래한 20억 개 이상의 RDF 트리플을 포함한다.
  • 정적 프로그램 분석과 포럼 및 문서화에서 유래한 자연어 데이터의 통합은 기능 표현의 의미론적 풍부함을 크게 향상시킨다.
  • 지식 그래프를 통해 의미론적 추론을 통해 효과적인 코드 검색과 타입 추론, 디버깅과 같은 자동화 작업을 지원할 수 있다.
  • RDF의 이름이 부여된 그래프 사용은 모듈화되고 커뮤니티 기반으로 확장 가능한 지식 관리 및 장기적인 유지보수를 가능하게 한다.
  • 초기 사용 사례에서는 그래프가 코딩 최선의 실천 방식을 강제하고, 악성 패턴과 코드 냄새를 식별함으로써 리팩터링을 지원하는 데 성공했다.
  • 지식 그래프는 공개되어 있어 연구자 및 개발자 커뮤니티가 재사용 및 확장할 수 있다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.