실행 전 결함 탐색
프로그램을 실행하는 테스트와 달리 소스의 성질을 분석해 문제를 찾는다. 널 포인터 역참조는 유효한 객체가 없는 참조를 사용하는 문제이며, 데이터 경쟁은 여러 실행 흐름의 메모리 접근이 충돌하는 문제다. Infer는 이런 결함을 탐지하는 분석 기능을 제공한다.
함수와 파일의 경계
문제의 원인과 증상이 같은 함수 안에 있지 않을 수 있다. 다른 함수에서 만들어진 값이 전달되거나 여러 메서드가 함께 작동하는 상황을 고려해야 한다. Infer는 여러 함수나 서로 다른 파일 사이의 관계를 추론하는 분석을 수행할 수 있다.
개발 흐름에서의 역할
Meta에서는 코드 변경의 특정 성질을 검사하는 용도로 지속적 통합 과정에 사용한다. 정적 분석 결과는 개발자가 원인과 영향 범위를 검토할 단서가 된다. 탐지 결과가 있다는 사실만으로 모든 실행 조건에서 문제가 발생한다고 단정하거나, 결과가 없다는 이유로 모든 결함이 제거됐다고 볼 수는 없다.
관련 문서
Semgrep / Coccinelle / 컴파일러 / CodeQL