그 자체로 콜 그래프가 바로 그 것이다. "잘못된"콜 그래프가 없습니다 (재귀를 금지하는 스타일 검사가없는 경우).
실제 문제는 프로그램의 한 지점에서 코드가 문제가되는 방식을 이해하는 데있어 일반적으로 세계의 모양 (어떤 데이터 구조가 살아 있는지, 어떤 값을 포함 할 수 있는지, 어떤 관계가 있는지 코드 포인트가 활성화 된 순간에 콜 그래프는 실행이 원하는 코드 포인트에 어떻게 도달 할 수 있는지 보여주고 콜 그래프 경로의 모든 코드는 코드 실행 컨텍스트를 설정합니다. 이를 통해 정적 분석기는보다 정확한 답변을 제공하는 "상황에 맞는"분석을 생성 할 수 있습니다.
이렇게하면 두 번째 문제가 발생합니다. 정확한 호출 그래프를 얻는 방법은 무엇입니까? A에서 B의 직접 호출이있는 경우 "A는 B를 호출합니다"라고 적어 두는 것이 쉽고 정확한 호출 그래프 사실이라고 생각합니다. 그러나 A가 간접 포인터를 통해 전화를 걸면 (갑자기 가상 메서드를 호출 할 수 있습니까?) 갑자기 A가 전화하는 사람이 갑자기 명확하지 않습니다. 당신은 결국 A-might-call-B1, A-might-call-B2, ...로 끝납니다. A가 실제로 실제로 호출하는 것은 A가 실행되는 상황에 달려 있습니다 ... oops, 당신은 제조 할 콜 그래프가 필요합니다. 콜 그래프. 좋은 소식은 아래에서 콜 그래프를 작성한다는 것입니다. "이것이 사실임을 확실히 알고 있으므로 확실해야합니다." 분석가가 알아낼 수없는 곳에서는 일반적으로 보수적 인 추측을합니다. ("이러한 모든 호출이 가능할 수도 있지만, 배제 할 수는 없습니다.") 그 보수주의는 정적 분석기의 정확성을 좌우하는 주요 원인 중 하나입니다.