본문 바로가기
Category/정보처리기사

분석 도구 정리

by Corinee 2024. 10. 12.
728x90
반응형

1. 정적 분석(Static Analysis):

  • 정의: 프로그램을 실행하지 않고 소스 코드를 분석하는 기법. 소스 코드의 문법적 오류, 보안 취약점, 코드 품질, 성능 문제 등을 탐지합니다.
  • 목적: 코드 실행 전에 버그, 코딩 표준 위반, 취약점 등을 찾아냅니다.
  • 특징: 소스 코드나 중간 코드를 대상으로 하며, 컴파일 이전 또는 정적 코드 검사 도구를 이용해 분석.
  • 도구 예시:
    • SonarQube: 코드 품질 및 보안 분석.
    • FindBugs: 자바 프로그램의 잠재적인 버그를 찾아내는 도구.
    • PMD: 자바 소스 코드에서 발견되는 버그, 취약점 등을 탐지하는 도구.
    • ESLint: JavaScript 코드의 규칙 위반을 검출하는 도구.

2. 동적 분석(Dynamic Analysis):

  • 정의: 프로그램을 실제로 실행하면서 코드의 동작, 메모리 사용, 성능 등을 분석하는 기법. 실행 중 발생하는 문제를 탐지할 수 있습니다.
  • 목적: 런타임에서의 메모리 누수, 스레드 결함, 리소스 관리 문제 등을 확인.
  • 특징: 실시간으로 코드가 어떻게 동작하는지를 확인할 수 있고, 실행 중에 발생할 수 있는 문제를 해결할 수 있습니다.
  • 도구 예시:
    • Valgrind: 메모리 누수 및 힙, 스택 오류를 탐지.
    • AppDynamics: 애플리케이션 성능 모니터링 도구.
    • Dynatrace: 클라우드 애플리케이션을 위한 동적 성능 모니터링 도구.
    • Purify: 메모리 누수, 런타임 오류 등을 검출하는 도구.

3. 정적 분석과 동적 분석의 차이점

  • 정적 분석실행 없이 코드를 분석하고, 동적 분석은 프로그램을 실행한 상태에서 분석합니다.
  • 정적 분석은 주로 보안 취약점, 코드 품질 문제를 미리 찾아내는 데 유용하고, 동적 분석실시간 메모리 사용이나 실행 중 문제를 발견하는 데 유리합니다.

4. 시험에 자주 나올 수 있는 관련 용어

  • 프로파일링(Profiling): 프로그램을 실행하면서 성능 특성을 분석하는 기법. 주로 CPU 사용률, 메모리 사용량, 실행 시간 등을 분석.
  • 커버리지 분석(Coverage Analysis): 테스트에서 코드의 몇 퍼센트가 실행되었는지 측정하는 기법. 대표적으로 분기 커버리지조건 커버리지가 있습니다.
  • 리팩토링(Refactoring): 코드의 내부 구조를 개선하여 가독성을 높이거나 유지보수성을 향상시키는 과정. 기능은 변경하지 않고 코드의 품질을 개선합니다.
  • 흐름 분석(Control Flow Analysis): 코드의 제어 흐름을 분석하여 조건문반복문 등의 흐름을 추적하는 기법.
  • 데이터 흐름 분석(Data Flow Analysis): 프로그램 내에서 데이터가 어떻게 사용되는지를 추적하고 분석하는 기법.
  • 리그레션 테스트(Regression Testing): 수정된 코드새롭게 추가된 코드가 기존 기능에 악영향을 미치지 않는지를 확인하기 위한 테스트.

5. 대표적인 정적/동적 분석 도구

  • 정적 분석 도구:
    • Lint: C 언어의 소스 코드 분석 도구.
    • Checkstyle: 자바 코드 스타일을 검사하는 도구.
    • Clang Static Analyzer: C/C++ 코드에 대한 정적 분석 도구.
  • 동적 분석 도구:
    • JProfiler: 자바 애플리케이션의 성능을 분석하는 도구.
    • Heapster: JVM의 힙 메모리 사용을 분석하는 도구.
    • Wireshark: 네트워크 패킷을 분석하는 도구로, 네트워크 관련 문제를 분석할 수 있음.

6. 추가적으로 기억할 개념

  • 검증(Verification): 소프트웨어가 명세서에 정의된 요구사항을 충족하는지 확인하는 과정. 소스 코드 분석 등이 포함됩니다.
  • 확인(Validation): 소프트웨어가 사용자의 요구를 충족하는지 확인하는 과정. 실제 환경에서 동작하는지 검증하는 테스트가 포함됩니다.
  • 단위 테스트(Unit Test): 코드의 개별 모듈이나 함수가 올바르게 동작하는지를 테스트하는 방법.
  • 통합 테스트(Integration Test): 단위 테스트를 통과한 여러 모듈을 연결해서 전체 시스템이 잘 동작하는지를 테스트하는 방법.

정리

시험에서는 정적 분석동적 분석의 차이점, 프로파일링과 커버리지 분석 같은 개념이 출제될 가능성이 높습니다. 또한, ValgrindSonarQube 같은 도구의 사용 목적을 묻는 문제도 출제될 수 있으니, 대표적인 도구의 용도와 특징을 알아두면 좋습니다.

'Category > 정보처리기사' 카테고리의 다른 글

DESC(Descending) 키워드란?  (1) 2024.10.12
주요 무선 보안 프로토콜 정리  (0) 2024.10.12
APT(Advanced Persistent Threat)란?  (0) 2024.10.12
워터링 홀(Watering Hole)이란?  (0) 2024.10.12
append()와 extend() 차이  (0) 2024.10.12