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): 단위 테스트를 통과한 여러 모듈을 연결해서 전체 시스템이 잘 동작하는지를 테스트하는 방법.
정리
시험에서는 정적 분석과 동적 분석의 차이점, 프로파일링과 커버리지 분석 같은 개념이 출제될 가능성이 높습니다. 또한, Valgrind나 SonarQube 같은 도구의 사용 목적을 묻는 문제도 출제될 수 있으니, 대표적인 도구의 용도와 특징을 알아두면 좋습니다.
'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 |