QA 과정에서 코드 품질 개선을 위해 코드 분석 및 테스트를 진행하게 된다. 코드 분석 과정에서도, 정적 코드 분석과 동적 코드 분석으로 구분할 수 있는데, 이번에는 정적 코드 분석을 다루어 보겠다.
정적 코드 분석이란?
📌 실제 실행 없이 소스 코드를 검사하고 분석하여 버그, 취약점, 코드 품질 문제를 파악하는 것.
↔ 동적 코드 분석 : 실행 중인 프로그램을 분석하는 것. 테스트 코드를 작성하고 런타임 환경에서 수행됨.
정적 코드 분석 과정에서는 코드 구조, 데이터 흐름, 제어 흐름을 검사하여 코드의 동작을 추론하고 문제점을 찾아낸다.
일반적으로 정적 코드 분석은 개발 과정의 초기, 실제 소프트웨어 테스트 전에 이루어진다. 그렇게 되면 코드 품질을 향상시키고 보안 취약점을 줄이는 데 도움을 준다.
정적 코드 분석 VS 동적 코드 분석
위에서 간략하게 설명했듯이 코드 분석을 정적/동적으로 구분할 때의 기준은 '코드의 실행 여부'이다. 각 코드 분석은 서로 다른 특징을 가지고 있다. 관련 내용을 아래 표에서 간단히 작성해두었다.
구분 | 정적 코드 분석 (SCA) | 동적 코드 분석 (DCA) |
분석 방식 | 코드의 실행 없이 검사 및 분석 | 실제 코드 실행하면서 동작 관찰 |
장점 | 코드 실행 전에 문제점을 예방 가능 빠른 분석 속도 테스트 케이스 작성 필요 없음 코드 품질 향상 효과적 다양한 유형의 문제점을 식별 가능 |
실제 실행 환경에서 문제점을 발견 가능
경계 조건 및 드문 오류 발견 효과적 테스트 케이스 작성에 활용 가능 동작 분석을 통한 문제점 파악 가능 |
단점 | 실제 실행 환경에서의 문제점을 반영하지 못함 일부 문제점을 놓칠 수 있음 복잡한 코드 분석 어려울 수 있음 |
분석 속도 느림
테스트 케이스 작성 필요 실행 환경 구축 필요 일부 문제점을 재현하기 어려울 수 있음 |
활용 분야 | 코드 리뷰, 초기 단계 코드 검사, 코드 품질 관리, 보안 취약점 발견, 지속적 통합 및 배포(CI/CD) | 기능 테스트, 성능 테스트, 사용성 테스트, 통합 테스트, 시스템 테스트 |
대표적인 도구 | SonarQube, Coverity, Klocwork, RATS, PMD | JUnit, Selenium, Appium, LoadRunner, Gatling |
정적 코드 분석의 장단점
🍄🟫 정적 분석의 장점
- 오프라인 개발 환경에서도 코드 품질 검사를 수행 가능
- 버그, 취약점, 코드 품질 문제를 사전에 식별하여 코드 품질을 향상
- 개발자가 코드 검토 및 테스트에 소요하는 시간을 줄여 개발 효율성을 향상함
- 개발자들이 코드 품질 및 보안 문제에 대한 공통된 이해를 갖도록 돕고 협업을 활성화함
- SQL 주입, XSS, 버퍼 오버플로와 같은 보안 취약점을 식별하여 보안 취약점으로 인한 공격 위험 감소
- 테스트 및 디버깅에 소요되는 시간과 비용 감소
🍄🟫 정적 분석의 단점
- 프로그래밍된 규칙 위반이 발생한 사례만을 식별하기에 모든 결함을 발견할 수는 없음
- 거짓 양성 오류가 발생할 위험이 있음
- 코드에 결함이 있는 경우 툴이 결함을 표시하지 않을 수 있음
- 모든 코딩 규칙을 외부 문서가 필요한 규칙처럼 항상 준수할 수 있는 것은 아님
- 정적 분석은 비교 가능한 방법보다 시간이 더 걸릴 수 있음
- 함수의 실행 방법을 감지할 수 없음
- 시스템 및 제3자 라이브러리를 분석하지 못할 수 있음
정적 코드 분석의 종류
정적 코드 분석에는 여러 종류가 있다. 각각의 경우에 대해 간략하게 작성하였다.
- 문법 검사: 코드 구조 및 문법 오류를 식별
- 유형 검사: 변수 유형 및 데이터 흐름 오류를 식별
- 제어 흐름 분석: 코드 실행 경로 및 분기 조건 오류를 식별
- 보안 취약점 분석: SQL 주입, XSS, 버퍼 오버플로와 같은 보안 취약점을 식별
- 코드 품질 분석: 코드 복잡성, 코드 유지 관리성, 코드 스타일 위반 등을 식별
다음 글에서는 정적 코드 분석의 대표적인 툴인 SonarQube에 대해 작성해 보도록 하겠다.
728x90
반응형
'Working > Quality Assurance' 카테고리의 다른 글
[QA] 소프트웨어 QA란 무엇인가? (0) | 2024.07.09 |
---|