Study_Note

static analysis vs dynamic analysis 본문

QA_study

static analysis vs dynamic analysis

12월7일생 2023. 7. 25. 11:18
728x90

정적분석(Static Analysis) vs 동적분석(Dynamic Analysis)

 

모든 공학 분야에서, 건물을 수백 층으로 손톱만한 전자 회로까지, 우리는 설계의 정확성을 확인하기 위해 테스트를 진행합니다. 이는 해당 분야가 얼마나 발전하고 완성도를 갖췄는지를 나타내는 중요한 지표입니다. 그러나 여전히 우리는 미완성된 세계에서 살고 있음을 인지해야 합니다. 이에 정적 분석과 동적 분석이 등장하게 됩니다.

정적 분석은 소프트웨어를 실행하지 않고도 코드를 분석하여 오류를 찾아내는 방법입니다. 반면, 동적 분석은 소프트웨어를 실행하며 그 동작을 분석하여 문제를 발견합니다. 이들의 핵심 원리를 이해하는 것이 중요합니다.

테스트에는 새로운 방법들이 지속적으로 등장하지만, 그래도 정답이라고 자신하기는 어렵습니다. 이는 소프트웨어의 본질 때문입니다. 소프트웨어는 보이지 않는 대상이며, 끊임없이 변화하고 발전하기 때문에 어려움이 끊이지 않습니다. 하지만 이러한 도전과 어려움을 극복해내면 더 나은 세상을 만들어갈 수 있습니다. 테스트 기법의 발전은 우리가 미래를 향해 나아갈 수 있는 열쇠입니다.

 

소프트웨어를 테스트하는 방법에는 여러 가지 시각과 단계, 유형이 있지만, 여기서는 주로 동적 분석(Dynamic analysis)과 정적 분석(Static analysis)으로 나누어 설명하겠습니다. 이 두 가지 방법은 소프트웨어를 다양한 관점에서 평가하며, 차이점을 알아보겠습니다.

동적 분석은 소프트웨어에 여러 가지 입력을 주고 실행시킨 결과를 분석하여 동작과 성능을 평가하는 방법입니다. 즉, 소프트웨어를 실행시켜보고 그 동작을 관찰하여 문제를 찾아내고 개선하는 방식입니다. 이는 오랜 역사를 가지며, 프로그램 개발과 함께 함께 발전해왔습니다.

반면에 정적 분석은 소프트웨어를 실행시키지 않고, 소스 코드 등의 내용을 기반으로 판단하는 방법입니다. 소스 코드를 분석하여 잠재적인 오류, 버그, 보안 취약점 등을 찾아내고, 코딩 규칙을 준수하는지를 검사합니다. 정적 분석은 최근에야 주목을 받기 시작했으며, 컴파일러 최적화와 요약해석 이론의 발전과 함께 1970년대부터 이미 개념이 완성되었습니다. 그러나 컴퓨팅 파워의 발전과 함께 2000년대 들어서야 산업계에서 실용적으로 활용될 수 있을 만큼 성장하였습니다.

따라서 소프트웨어 테스트는 동적 분석과 정적 분석을 조합하여 진행하는 것이 보다 효과적인 결과를 얻을 수 있습니다. 동적 분석은 실제 실행 환경에서 소프트웨어의 동작을 확인하며 버그를 찾고, 정적 분석은 소스 코드를 검사하여 미리 발견할 수 있는 문제들을 해결하는 데에 유용합니다. 이렇게 함께 사용하면 더 안정적이고 안전한 소프트웨어를 개발할 수 있습니다.

 

정적분석

정적 분석은 소프트웨어가 실제로 구현되기 전에 기획서, 요구사항 정의서, 설계서, 소스 코드 등의 개발 산출물을 실행 없이 테스트하는 기법으로, 주로 개발 초기에 오류를 찾아내어 소프트웨어 제품의 품질을 향상시키는 것이 목표입니다. 따라서 테스트 초기 단계에서 수행됩니다.

아래는 정적 분석의 주요 기법들입니다:

  • 비공식 검토(Informal Reviews): 문서에서 오류를 찾기 위해 프로세스를 따르지 않는 검토 방법으로, 주로 비공식적인 의견을 제공하는 방식입니다.
  • 기술적 검토(Technical Reviews): 동료로 구성된 팀이 소프트웨어 제품의 기술 사양을 검토하고 프로젝트에 적합한지 확인합니다. 주로 테스트 전략, 테스트 계획, 요구사항 사양 등 소프트웨어 관련 기술 문서를 검토합니다.
  • 워크쓰루(Walkthrough): 작업 산출물 작성자가 자신의 팀에게 제품에 대한 설명을 하고, 참가자들은 질문을 할 수 있습니다. 회의는 작성자에 의해 주도되며, 검토 의견은 기록됩니다.
  • 인스펙션(Inspection): 주요 목적은 결함을 발견하는 것으로, 공식화된 절차와 훈련된 조정자(Moderator)에 의해 주도됩니다. 공식적인 일정에 맞추어 보고서를 작성하고 평가하며, 시작과 종료 기준(Entry & exit criteria)을 가진 규칙과 체크리스트에 기반한 형식적인 프로세스입니다.

정적 분석은 소프트웨어 개발 초기 단계에서 오류를 발견하고 해결하는 데에 매우 유용한 방법으로, 테스트 초기 단계에서 사용함으로써 소프트웨어의 품질과 신뢰성을 향상시킬 수 있습니다.

 

동적분석

동적 분석은 코드를 실행하여 소프트웨어 시스템의 기능적 동작, 메모리/CPU 사용량 및 전반적인 성능을 점검하는 방법입니다. 이를 통해 소프트웨어 제품이 비즈니스 요구사항에 맞게 작동하는지 확인합니다. 동적 분석은 소프트웨어를 실행하고 예상 결과와 실제 출력을 비교하여 검증합니다. 블랙박스 테스트와 화이트박스 테스트로 분류되며, 블랙박스 테스트는 소스 코드를 들여다보지 않고 테스트하는 방법을 말하고, 화이트박스 테스트는 소스 코드와 함께 테스트하는 것을 의미합니다.

동적 분석에는 다음과 같은 기법들이 있습니다:

 

  • 단위 테스트(Unit Testing): 개발자가 개별 단위 또는 모듈을 테스트합니다. 주로 소스 코드를 검증하는데 사용됩니다.
  • 통합 테스트(Integration Testing): 개발자가 그룹화한 모듈을 테스트하여 통합된 모듈이 예상대로 작동하는지 확인합니다
  • 시스템 테스트(System Testing): 전체 시스템 또는 응용 프로그램이 요구사항 사양을 충족하는지 확인하는 테스트입니다. 성능 테스트와 보안 테스트와 같은 비기능적인 테스트도 동적 분석에 포함됩니다.

 

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

정적 분석과 동적 분석의 주요 차이점은 다음과 같습니다.

  • 실행 여부
    • 정적 분석은 소프트웨어를 실행하지 않고 수행됩니다.
    • 동적 분석은 소프트웨어를 실행하여 수행됩니다.
  • 검사대상
    • 정적 분석은 코드, 요구사항 문서, 설계서 등에서 오류를 확인합니다.
    • 동적 분석은 소프트웨어 시스템의 기능적 동작, 메모리/CPU 사용량, 전체 성능을 확인합니다.
  • 목적
    • 정적 분석은 결함 방지에 관한 것이며, 동적 분석은 결함을 찾아 수정하는 것입니다.
  • 프로세스 
    • 정적 분석은 확인(Verification) 프로세스를 수행합니다.
    • 동적 분석은 검증(Validation) 프로세스를 수행합니다.
  • 수행시점
    • 정적 분석은 컴파일 전에 수행되며, 코드 커버리지를 확인하는 것이 일반적입니다.
    • 동적 분석은 컴파일 후에 소프트웨어를 실행하여 테스트하며, 경계값 분석 및 동치분할 등의 기법을 사용할 수 있습니다.

이렇게 두 가지 분석 방법은 각각 다른 시점과 목적으로 소프트웨어 품질을 보증하고 향상시키는데 사용됩니다.

 

 

반응형

 

'QA_study' 카테고리의 다른 글

equivalence partitioning testing  (0) 2023.07.28
types of test design techniques  (0) 2023.07.27
functional test & non-functional test  (0) 2023.07.25
what is the difference between QA, Tester, and QC?  (0) 2023.04.29
Pairwise testing (with PCIT)  (0) 2023.04.28