동적 프로그램 분석

Dynamic program analysis

동적 프로그램 분석은 실제 또는 가상 프로세서에서 프로그램을 실행하여 실행되는 컴퓨터 소프트웨어의 분석입니다.동적 프로그램 분석이 효과적이려면 대상 프로그램이 가능한 거의 모든 출력을 커버할 수 있는 충분한[1] 테스트 입력으로 실행되어야 합니다.코드 커버리지와 같은 소프트웨어 테스트 수단을 사용하면 프로그램 동작의 적절한 슬라이스가 [why?]관찰될 가능성이 높아집니다.또한 계측이 대상 [why?][needs context]프로그램의 실행(시간적 속성 포함)에 미치는 영향을 최소화하기 위해 주의를 기울여야 한다.동적 분석은 정적 프로그램 분석과 대조적입니다.유닛 테스트, 통합 테스트, 시스템 테스트 및 인수 테스트에서는 동적 [2]테스트를 사용합니다.

동적 분석 유형

코드 커버리지

테스트 스위트 또는 워크로드에 따라 코드 범위를 계산하는 것은 표준 동적 분석 기법입니다.

  • Gcov는 GNU 소스 코드 커버리지 프로그램입니다.
  • VB Watch는 동적 분석 코드를 Visual Basic 프로그램에 주입하여 코드 범위, 콜 스택, 실행 추적, 인스턴스화된 개체 및 변수를 모니터링합니다.

메모리 오류 검출

  • 인텔 인스펙터:Windows Linux에서 실행되는 C, C++ 및 Fortran 응용 프로그램의 동적 메모리 오류 디버거.
  • Address Sanitizer: Linux, macOS, Windows 등의 메모리 오류 검출.LLVM의 일부입니다.
  • Bounds Checker:Windows 베이스의 애플리케이션의 메모리 에러 검출.Micro Focus DevPartner의 일부입니다.
  • Dmalloc: 메모리 할당 및 누수를 체크하기 위한 라이브러리.소프트웨어를 다시 컴파일해야 하며 모든 파일에 특수 C 헤더 파일 dmalloc.h가 포함되어야 합니다.
  • 퍼지: 주로 메모리 파손 검출과 메모리 누전 검출입니다.
  • 볼그린드:가상 프로세서에서 프로그램을 실행하여 메모리 오류(malloc free의 오용 등) 및 멀티스레드 프로그램의 레이스 조건을 검출할 수 있습니다.

장애 현지화

장애의 현지화는 테스트 실패 및 합격 사례에 따라 버그 코드(버그 스테이트먼트 등)를 특정하는 것입니다.예를 들어, Tarantula는 커버된 [3]코드에 기초한 잘 알려진 결함 위치 파악 접근법입니다.결함의 현지화는 동적 분석의 중요한 속성을 나타냅니다. 분석 결과는 고려된 워크로드, 입력 또는 테스트 사례에 따라 달라집니다.결함 국부화의 경우 테스트 사례를 재팩터링하여 [4]더 나은 결과를 얻을 수 있는 것으로 나타났습니다.

불변추론

다이나믹 불변 검출의 실장입니다.Dikon은 프로그램을 실행하고 프로그램이 계산하는 값을 관찰한 후 관찰된 실행에 대해 참이었던 속성을 보고합니다. 따라서 모든 실행에 대해 참일 가능성이 높습니다.

보안 분석

동적 분석을 사용하여 보안 문제를 탐지할 수 있습니다.

  • IBM Rational AppScan은 개발 라이프사이클의 다양한 단계를 대상으로 하는 애플리케이션 보안 솔루션 제품군입니다.이 스위트에는 2개의 주요 동적 분석 제품이 포함되어 있습니다.IBM Rational AppScan Standard Edition 및 IBM Rational AppScan Enterprise Edition이 있습니다.또한 이 제품군에는 정적 분석 도구인 IBM Rational AppScan Source Edition이 포함되어 있습니다.

동시 실행 오류

  • Parasoft Jtest는 런타임 오류 검출을 사용하여 레이스 조건, 예외, 리소스 및 메모리 누수, 보안 공격 취약성 의 결함을 노출합니다.
  • 인텔 인스펙터는, Windows 로 런타임 스레드화와 메모리 에러 분석을 실시합니다.
  • Parasoft Insure++는 런타임 메모리 분석 및 오류 감지 도구입니다.Inuse 컴포넌트는 전체 힙 사용량, 블록 할당, 미결 누출 가능성 등을 특정 시각적으로 파악할 수 있는 시간 경과에 따른 메모리 할당 그래픽 보기를 제공합니다.
  • Google의 스레드 세니타이저는 데이터 레이스 탐지 도구입니다.LLVM IR을 계측하여 레이시 메모리액세스를 캡처합니다.

프로그램 슬라이스

프로그램 동작의 특정 서브셋에 대해 프로그램 슬라이싱은 선택된 동작을 생성하는 최소한의 형태로 프로그램을 축소하는 것으로 구성됩니다.축소된 프로그램은 "슬라이스"라고 불리며 지정된 동작 서브셋의 도메인 내에서 원래 프로그램의 충실한 표현입니다.일반적으로 슬라이스를 찾는 것은 해결할 수 없는 문제이지만 변수 집합의 값으로 목표 동작 서브셋을 지정함으로써 데이터 흐름 알고리즘을 사용하여 대략적인 슬라이스를 얻을 수 있습니다.이러한 슬라이스는 보통 개발자가 디버깅 중에 오류의 원인을 찾기 위해 사용합니다.

퍼포먼스 분석

대부분의 성능 분석 도구는 동적 프로그램 분석 [citation needed]기술을 사용합니다.

  • CriticalBlue의 Prism은 실행 시 소프트웨어 애플리케이션을 동적으로 추적하고 성능 저하의 원인을 분석 및 식별하는 데 사용할 수 있는 데이터를 캡처하는 도구입니다.

기술

대부분의 동적 분석 기술은 일종의 코드 계측 또는 변환을 기반으로 합니다.

  • DynInst는 동적 프로그램 분석 프로브를 개발하고 컴파일된 실행 파일에 적용하는 데 유용한 런타임 코드 패칭 라이브러리입니다.Dyninst는 일반적으로 소스 코드나 재컴파일을 필요로 하지 않지만, 스트라이핑되지 않은 실행 파일과 디버깅 기호가 있는 실행 파일은 더 쉽게 실행할 수 있습니다.
  • Iroh.js는 JavaScript용 런타임 코드 분석 라이브러리입니다.코드 실행 경로를 추적하고 실행 중인 특정 코드 패턴을 수신할 수 있는 런타임 청취자를 제공하며 프로그램 실행 동작을 가로채고 조작할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). "Just enough semantics: An information theoretic approach for IR-based software bug localization". Information and Software Technology. 93: 45–57. doi:10.1016/j.infsof.2017.08.012.
  2. ^ Myers, G. J. (1979). The Art of Software Testing. John Wiley and Sons.
  3. ^ Jones, James A.; Harrold, Mary Jean (2005). "Empirical evaluation of the tarantula automatic fault-localization technique". Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering - ASE '05. ACM. pp. 273–282. doi:10.1145/1101908.1101949. ISBN 1581139934.
  4. ^ Xuan, Jifeng; Monperrus, Martin (2014). "Test case purification for improving fault localization". Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2014. pp. 52–63. CiteSeerX 10.1.1.477.2525. doi:10.1145/2635868.2635906. ISBN 9781450330565.