[테스트/개발] 동적(Dynamic) VS 정적(Static) 프로그램/코드 분석(Program/Code Analysis) 란? 비교 및 개념정리



매우 잘 동작하는 코드를 만드는 것은 매우 중요합니다! 튼튼한 코드를 만들기 위해서는 튼튼한 분석/테스트가 함께되어야 할 것입니다. 정적 & 동적 프로그램/코드 분석 방법은 튼튼한 코드를 만들기 위해서 우리에게 큰 도움을 줄 수 있습니다. 코드 취약점을 알아내고 사전에 오류를 방지하는 것은 필수적입니다.

1. 정적 프로그램/코드 분석(Static Program/Code Analysis)

  • 정적 프로그램 분석(Static program analysis)실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 말한다.
  • 대부분의 경우에 분석은 소스 코드의 버전 중 하나의 형태로 수행되며, 가끔은 목적 파일 형태로 분석된다.
  • 정적 코드 분석은 소스 코드에서 수행되는 일련의 자동 검사로 구성
  • 정적 분석 도구는 코드를 검사하여 메모리 누수 또는 버퍼 오버플로우 등 일반적으로 알려진 오류 및 취약점을 파악
  • 정적 분석을 활용하면 코딩 표준 적용이 가능
  • 정적 분석은 소스 코드에서 시행되며 프로그램을 실행할 필요가 없으므로 CI/CD 파이프라인의 첫 단계에서 수행하거나 변경 사항 커밋 전 IDE에서 직접 수행
  • 정적 분석은 프로그래밍된 규칙 위반이 발생한 사례만을 식별하며, 소스를 읽는 것만으로는 모든 결함을 발견할 수 없음
  • 소스코드 실행 이전에 수행
  • ESLint, SonarQube 등의 다양한 SW 가 정적 분석 방법입니다.

2. 동적 프로그램/코드 분석(Dynamic Program/Code Analysis)

  • 동적 프로그램 분석(Dynamic program analysis) 정적 프로그램과 반대로, 실행 중인 프로그램을 분석하는 것을 동적 프로그램 분석이라고 한다.
  • 실제 또는 가상 프로세서에서 프로그램을 실행함으로써 수행된다. 이것을 더 효과적으로 하기 위해서 프로그램은 반드시 충분히 테스트된 입력을 사용해서 흥미로운 행동을 생산해야 한다.
  • 코드 커버리지 같은 소프트웨어 테스트 기법을 사용하는 것은 적절한 프로그램 셋트 조각의 관찰되는 가능한 행동이 확신하는데 도움을 준다.
  • 코드를 실행하여 런타임에 사용자 혹은 해커의 입장에서 기능을 테스트하여 분석

reference