정적 프로그램 분석
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
정적 프로그램 분석은 소프트웨어의 신뢰성 및 안전성을 높이기 위해 소스 코드를 실행하지 않고 분석하는 기술이다. 소프트웨어 개발 초기 단계에서 잠재적인 오류나 보안 취약점을 발견하여 수정 비용을 절감하고 품질을 향상시키는 데 기여한다. 정적 분석은 다양한 수준으로 수행되며, 유닛 레벨, 기술 레벨, 시스템 레벨, 미션/비즈니스 수준으로 분류된다. 정형 방법론, 데이터 기반 분석, 자동 해결 등 다양한 기술과 도구가 존재하며, 의료 소프트웨어, 원자력 소프트웨어, 항공 소프트웨어 등 신뢰성이 중요한 분야에서 널리 활용된다.
더 읽어볼만한 페이지
- 품질 보증 - 소프트웨어 품질보증
소프트웨어 품질 보증(SQA)은 소프트웨어 개발 과정 전반의 품질 확보를 위한 활동으로, 정책 및 절차 준수, 분석, 설계, 테스트 등의 활동을 포함하며, ISO/IEC/IEEE 90003:2018과 같은 표준 준수 및 변경 제어 위원회 운영을 통해 품질을 관리한다. - 정적 프로그램 분석 - 호어 논리
호어 논리는 프로그램의 실행 전후 조건을 명시하고 코드 조각이 조건을 어떻게 변화시키는지 추론하는 규칙을 제공하여 프로그램의 정확성을 형식적으로 검증하는 논리 시스템이다. - 정적 프로그램 분석 - Perl::Critic
Perl::Critic은 Perl 코드의 품질, 스타일, 오류를 검사하여 더 나은 코드를 작성하도록 돕는 정적 분석 도구이다. - 소프트웨어 리뷰 - 코드 검토
코드 검토는 작성된 코드의 품질 향상과 오류 감소를 위해 수행되는 검토 방식이며, 오류 제거, 디버깅, 유지보수, 기능 개선에 효과적이고 소프트웨어의 진화 가능성과 유지보수성에 영향을 미친다. - 소프트웨어 리뷰 - 페어 프로그래밍
페어 프로그래밍은 두 명의 프로그래머가 한 컴퓨터로 코드를 함께 작성하며, 드라이버와 네비게이터 역할을 번갈아 수행하여 지식 공유, 실시간 코드 검토, 문제 해결 능력 향상 등의 이점을 제공하는 소프트웨어 개발 방법이다.
2. 정적 분석의 이유
소프트웨어 메트릭과 리버스 엔지니어링은 정적 분석의 한 형태로 묘사될 수 있다. 특히 임베디드 시스템에서 소프트웨어 메트릭을 끌어내는 것과 정적 분석은 소프트웨어 품질 목표를 정의함으로써 점점 서로를 효율적으로 사용하게 된다.[34]
시스템에서 사용되는 소프트웨어의 속성들을 검사하고 잠재적인 취약한 코드의 위치를 찾는 것은 정적 분석의 상업적 사용으로서 점차 증가하고 있다.[35] 예를 들어 아래와 같은 산업들은 정적 코드 분석의 사용을 통해 점점 정교하고 복잡해지는 소프트웨어의 질적 향상이라는 인식을 하고 있다.
객체 관리 그룹(OMG)은 소프트웨어 품질 측정 및 평가에 필요한 소프트웨어 분석 유형에 관한 연구를 발표했다. "CISQ 권고에 따라 복원력 있고 안전하며 효율적이며 쉽게 변경 가능한 IT 시스템을 제공하는 방법"이라는 문서에서는 소프트웨어 분석을 세 가지 수준으로 설명한다.[40][13]
VDC Research는 2012년 28.7%의 임베디드 소프트웨어 엔지니어들이 현재 정적 분석 툴을 사용하고 있으며, 2년 안에 39.7%가 사용할 것이라고 분석했다.[36] 2010년에는 유럽 리서치 프로젝트에서 인터뷰에 응한 60%의 개발자들이 적어도 자신의 기본 IDE에 내장된 정적 분석기를 사용한다고 조사되었다. 그러나 단지 10%의 직원들만이 추가적인 분석 툴을 사용하였다.[37]
또한 응용 프로그램 보안 산업에서 정적 애플리케이션 보안 테스트(SAST)가 사용되고 있다. SAST는 Microsoft에서 정의한 SDL과 같은 보안 개발 수명 주기(SDL)의 중요한 부분이며,[38] 소프트웨어 회사에서 흔히 사용되는 관행이다.[39]
3. 정적 분석 툴의 종류
추가적인 수준의 소프트웨어 분석을 정의할 수 있다.
사전 컴파일러(AOT 컴파일러)는 언어 사양에는 부합하지만 로직의 정당성이 의심스러운 코드나, 미정의 동작을 일으킬 수 있는 코드를 감지하여 경고를 내보내는 경우가 대부분이다. 다만, 컴파일러로는 다루기 어려운 사항도 있기 때문에, 독립된 정적 코드 분석 전용 툴을 보조적으로 병용하는 경우도 많다. 통합 개발 환경에 표준 탑재되어 있는 것도 있고, 플러그인이나 애드온으로 개발자가 추가할 수 있도록 되어 있는 것도 있다. 코드 편집기에서 문제가 있는 부분을 강조 표시하는 등, 소스 코드를 컴파일하지 않고 실시간으로 지적해 주는 것도 있다.
4. 정적 분석의 활용 분야
정적 분석은 다양한 산업 분야에서 활용되며, 특히 안전이 매우 중요한 시스템에서 그 중요성이 강조된다.
5. 정형 방법론
정형 방법론은 엄격한 수학적 방법을 사용하여 소프트웨어의 정확성을 검증하는 방법이다. 정지 문제에 대한 간단한 축약으로, 임의의 프로그램에서 모든 가능한 런타임 에러를 찾는 것은 결정 불가능하다고 증명될 수 있다. (임의의 프로그램이 런타임 에러를 보이든지 아니든지 항상 정확한 답을 하는 수학적 방법론은 존재하지 않는다.) 이 결과는 쿠르트 괴델이나 앨런 튜링의 연구에서부터 시작된다.[41] 많은 결정 불가능한 질문 중에서 유용한 근사해를 얻는 시도는 가능하다.
정형 정적 분석의 구현 기술에는 다음이 포함된다.[41]
6. 데이터 기반 정적 분석
데이터 기반 정적 분석은 광범위한 코드베이스를 활용하여 코딩 규칙을 추론하고 분석의 정확성을 향상시킨다.[16][17] 예를 들어, 깃허브에서 사용 가능한 모든 Java 오픈 소스 패키지를 사용하여 훌륭한 분석 전략을 학습할 수 있다. 규칙 추론에는 기계 학습 기법을 사용할 수 있다.[18] 또한, 과거의 많은 수정 사항과 경고로부터 학습하는 것도 가능하다.[16]
7. 자동 해결
정적 분석기는 경고를 생성한다. 특정 유형의 경고에 대해서는 자동화된 해결 기술을 설계하고 구현하는 것이 가능하다. 예를 들어, Logozzo와 Ball은 C# ''cccheck''에 대한 자동화된 해결 방안을 제안했다.[19]
8. 정적 코드 분석 도구
다양한 프로그래밍 언어에 대한 정적 코드 분석 도구들이 존재한다.
참조
[1]
학술지
Industrial Perspective on Static Analysis.
http://www.ida.liu.s[...]
1995-03
[2]
학술지
A survey on automated dynamic malware-analysis techniques and tools
https://doi.org/10.1[...]
2008-03-05
[3]
학술지
Just enough semantics: An information theoretic approach for IR-based software bug localization
https://linkinghub.e[...]
2018-01-01
[4]
간행물
Software Quality Objectives for Source Code
http://web1.see.asso[...]
2010
[5]
간행물
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
Benjamin Livshits
2006
[6]
웹사이트
Infusion Pump Software Safety Research at FDA
https://www.fda.gov/[...]
Food and Drug Administration
2010-09-08
[7]
웹사이트
Computer based safety systems
http://www.hse.gov.u[...]
2013-05-15
[8]
간행물
Position Paper CAST-9. Considerations for Evaluating Safety Engineering Approaches to Software Assurance
http://www.faa.gov/a[...]
FAA, Certification Authorities Software Team (CAST)
2002-01
[9]
웹사이트
Automated Defect Prevention for Embedded Software Quality
http://alm.parasoft.[...]
VDC Research
2012-04-10
[10]
논문
Empirical study of tool support in highly distributed research projects
https://ieeexplore.i[...]
IEEE
2010
[11]
서적
The Security Development Lifecycle: SDL: A Process for Developing Demonstrably More Secure Software
Microsoft Press
2006
[12]
간행물
Deploying Static Application Security Testing on a Large Scale
https://www.brucker.[...]
2014
[13]
웹사이트
OMG Whitepaper | CISQ - Consortium for Information & Software Quality
http://www.omg.org/C[...]
2013-10-18
[14]
웹사이트
A Survey of Automated Techniques for Formal Software Verification
http://www.kroening.[...]
Transactions On CAD
2015-05-11
[15]
웹사이트
A Formal Methods-based verification approach to medical device software analysis
http://embeddeddsp.e[...]
Embedded Systems Design
2010-09-09
[16]
웹사이트
Learning from other's mistakes: Data-driven code analysis.
https://www.slidesha[...]
2015-04-13
[17]
서적
Evaluation and Assessment in Software Engineering
Association for Computing Machinery
2021-06-21
[18]
서적
Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications - OOPSLA 2015
https://ora.ox.ac.uk[...]
[19]
학술지
Modular and verified automatic program repair
http://dx.doi.org/10[...]
2012-11-15
[20]
문서
Industrial Perspective on Static Analysis
1995-03
[21]
문서
静的コード分析ツールと IBM Rational Team Concert との統合 - IBM Documentation
https://www.ibm.com/[...]
[22]
문서
Software Quality Objectives for Source Code
http://web1.see.asso[...]
[23]
문서
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
2006
[24]
웹사이트
Infusion Pump Software Safety Research at FDA
http://www.fda.gov/M[...]
Food and Drug Administration
2010-09-09
[25]
문서
Computer based safety systems
http://www.hse.gov.u[...]
[26]
웹사이트
Automated Defect Prevention for Embedded Software Quality
http://blog.parasoft[...]
VDC Research
2012-04-10
[27]
웹사이트
A Formal Methods-based verification approach to medical device software analysis
http://embeddeddsp.e[...]
Embedded Systems Design
2010-09-09
[28]
문서
多言語(17)混在のシステムでの横断的解析が可能
[29]
문서
C/C++ code analyzers | Microsoft Learn
https://learn.micros[...]
[30]
문서
Clang-Tidy — Extra Clang Tools git documentation
https://clang.llvm.o[...]
[31]
문서
PhpMetrics, static analysis for PHP - by Jean-François Lépine
https://www.phpmetri[...]
[32]
문서
Find and fix problems in your JavaScript code - ESLint - Pluggable JavaScript Linter
https://eslint.org/
[33]
저널인용
Industrial Perspective on Static Analysis.
http://www.ida.liu.s[...]
1995-03
[34]
문서
"Software Quality Objectives for Source Code"
http://web1.see.asso[...]
[35]
문서
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
[36]
웹인용
Automated Defect Prevention for Embedded Software Quality
http://alm.parasoft.[...]
VDC Research
2012-04-10
[37]
논문
Prause, Christian R., René Reiners, and Silviya Dencheva
[38]
논문
M. Howard and S. Lipner
[39]
논문
Achim D. Brucker and Uwe Sodan
[40]
웹사이트
http://www.omg.org/C[...]
[41]
웹인용
A Survey of Automated Techniques for Formal Software Verification
http://www.kroening.[...]
Transactions On CAD
2015-05-11
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com
