CodeQL은 코드를 어떻게 분석하나요?

완료됨

CodeQL을 사용하여 코드 검사를 구현하려면 도구에서 코드를 분석하는 방법을 이해해야 합니다.

CodeQL 분석은 다음 3가지 단계로 구성됩니다.

  1. CodeQL 데이터베이스를 만들어 코드를 준비합니다.
  2. 데이터베이스에 대한 CodeQL 쿼리를 실행합니다.
  3. 쿼리 결과를 해석합니다.

이 단원에서는 CodeQL 분석의 세 가지 단계에 대해 알아봅니다.

데이터베이스 만들기

데이터베이스를 생성하기 위해 CodeQL은 먼저 코드베이스에 있는 각 원본 파일의 단일 관계형 표현을 추출합니다.

컴파일된 언어의 경우 추출은 일반 빌드 프로세스를 모니터링하여 작동합니다. 원본 파일을 처리하기 위해 컴파일러를 호출할 때마다 해당 파일의 복사본이 만들어지고 소스 코드에 대한 모든 관련 정보가 수집됩니다. 여기에는 추상 구문 트리에 대한 구문 데이터와 이름 바인딩 및 형식 정보에 대한 의미 체계 데이터가 포함됩니다.

해석된 언어의 경우 추출기는 소스 코드에서 직접 실행되어 코드베이스의 정확한 표현을 제공하기 위해 종속성을 확인합니다.

추출 프로세스가 가능한 한 정확한지 확인하기 위해 CodeQL에서 지원하는 각 언어에 대해 하나의 추출기가 있습니다. 데이터베이스는 다국어 코드베이스에 대해 한 번에 하나의 언어로 생성됩니다.

추출이 이루어진 후에는 분석에 필요한 모든 데이터(관계형 데이터, 복사된 원본 파일, 데이터에서 상호 관계를 지정하는 언어별 데이터베이스 스키마)가 CodeQL 데이터베이스라는 단일 디렉터리로 가져오기됩니다.

쿼리 실행

CodeQL 데이터베이스를 만든 후에는 하나 이상의 쿼리가 실행됩니다. CodeQL 쿼리는 QL이라는 특별히 설계된 개체 지향 쿼리 언어로 작성됩니다.

VS Code용 CodeQL 확장 또는 CodeQL CLI를 사용하여 CodeQL 리포지토리(또는 직접 작성한 사용자 지정 쿼리)에서 체크 아웃된 쿼리를 실행할 수 있습니다.

쿼리 결과

마지막 단계에서는 쿼리 실행 중에 생성된 결과가 소스 코드 컨텍스트에서 더 의미 있는 형식으로 변환됩니다. 즉, 쿼리가 찾아야 하는 잠재적 문제를 강조하여 보여 주는 방식으로 결과가 해석됩니다.

CodeQL 쿼리 결과의 스크린샷

쿼리에는 결과를 해석하는 방법을 나타내는 메타데이터 속성이 포함되어 있습니다. 예를 들어 일부 쿼리는 코드의 단일 위치에 간단한 메시지를 표시합니다. 다른 위치는 결과의 중요성을 설명하는 메시지와 함께 데이터 흐름 또는 제어 흐름 경로를 따라 단계를 나타내는 일련의 위치를 표시합니다. 메타데이터가 없는 쿼리는 해석되지 않습니다. 결과는 테이블로 출력되고 소스 코드에 표시되지 않습니다.

해석에 따라 코드 검토 및 심사에 대한 결과가 출력됩니다. 해석된 쿼리 결과는 Visual Studio Code에 대한 CodeQL의 소스 코드에 자동으로 표시됩니다. CodeQL CLI에서 생성된 결과를 다양한 형식으로 출력하여 각종 도구에서 사용할 수 있습니다.