배너
닫기

테크노트

배너

[Technical Report] 코드 분석 도구(Code Analysis Tools)

  • 등록 2019.08.05 09:17:00
URL복사

[첨단 헬로티]



소프트웨어 개발 중 발생한 다양한 문제를 해결하기 위한 비용은 개발의 시간이 지남에 따라 기하급수적으로 늘어난다. 이 때문에 개발 초기에 최대한 많은 문제를 발견하고 해결하는 것이 문재 해결 비용을 최소화할 수 있는 최적의 방법이다. 즉, 개발 초기 코드 작성 단계부터 코드의 문제를 쉽게 검사하고 문제 확인과 문제의 수정을 쉽게 할 수 있는 도구가 필요하다.


코드 분석 도구

현재의 소프트웨어 산업에서 가장 큰 화두 중 하나는 소프 트웨어의 품질이다. 빠르게 발전하는 소프트웨어 산업으 로의 소프트웨어 다양성 확대, 소프트웨어의 기능 확장, 소프트웨어의 복잡도 증가 등의 이유로 소프트웨어 밸리 데이션, 테스팅, 위험관리 등의 품질 관련한 이슈가 많아 지고 있다.


소프트웨어 개발 중 발생한 다양한 문제를 해결하기 위한 비용은 개발의 시간이 지남에 따라 기하급수적으로 코커질 수밖에 없다.

가능한 개발 초기에 최대한 많은 문제를 발견하고 해결 하는 것이 문재해결 비용을 최소화할 수 있는 최적의 방법이다. 따라서 개발 초기 코드 작성 단계부터 코드의 문제를 쉽게 검사하고 문제 확인과 문제의 수정을 쉽게 할수 있도록 다양한 도구의 필요성이 강조된다. 이러한 도구들 중 개발 환경에 통합돼 있으며 소프트웨어의 초기 품질 검사와 개발자의 다양한 코딩 실수를 검사할 수 있는 IAR Systems의 Code Analysis 툴인 C-RUN, C-STAT이다.


Static vs Runtime

정적(Static) 방법의 분석과 실행/동작(Runtime) 방법의 분석 모두 코드가 가지고 있는 오류 또는 취약점을 찾아내 주는 분석 방법의 종류이다. 정적 분석은 작성되어있는 소스코드를 대상으로 코드 안에 내포되어있는 잠재적인 취약점을 분석하는 방법이며 동작 분석 방법은 실제 코드를 실행 시켜 실행 중 발생하는 오류를 분석하는 방법으로두 방법에는 차이가 있다.


IAR Systems 의 Code Analysis 툴 중 C-STAT은 작성된 코드를 분석하는 정적 분석도구이며, C-RUN은 실제 실행 코드를 타깃 다운로드 후 실행 중 발생하는 오류를 분석하는 동적 분석도구에 해당한다.


C-STAT Static Analysis

C-STAT은 IAR Embedded Workbenc에 통합돼 있는 추가 제품이다. IAR Embedded Workbench 외에 별도의 설치를 할 필요가 없으나 C-STAT의 기능을 사용하기 위해 C-STAT 사용을 위한 라이센스 추가가 필요하다.

C-STAT은 정적 분석으로 작성된 코드만으로 코드 내의 잠재적 문제들을 쉽게 파악해 개발 초기부터 코드 품질, 더 나아가 제품의 품질을 높여 줄 수 있다.


C-STAT의 주요 기능

• C/C++ 언어의 코드 분석

• MISRA C:2004, MISRA C++:2008 및 MISRA C:2012에 정의된 규칙 준수 확인

• CWE 및 CERT C/C++에 따른 많은 문제에 기반한 다양한 검사항목 • 직관적이고 사용하기 쉬운 설정

• 개별 규칙 단계 뿐만 아니라 규칙 설정 단계의 유연한 규칙 선택 • IAR Embedded Workbench IDE와 완벽하게 통합 • 다양하고 상세한 오류 정보 표시

• 빠른 분석 실행 속도

C-STAT의 정적 분석으로 사용할 수 있는 기능 중 하나로 코딩룰을 MISRA-C 코딩 룰을 검사하는 기능이 있다.

MISRA-C 코딩 룰은 MISRA(Motor Industry Software Reliability Association)에서 개발된 자동차 산업 제품의 소프트웨어 개발에 사용되는 C 프로그래밍에 대한 코딩 룰이며 소프트웨어의 코드 안전성, 호환성, 신뢰성 향상을 목표로 하고 있다.


C-STAT에서는 MISRA-C의 MISRA-C:1998, MISRA-C:2004, MISRA-C++:2008, MISRA-C:2012 버전의 코딩룰 검사를 지원하고 있어 MISRA-C 코딩 룰을 준수해 진행되는 프로젝트의 개발자가 코드 작성 후 바로 코딩 룰 검사를 실행 해 볼 수 있는 장점이 있다. 또한, CERT C/C++ 의 일부 코딩 룰 체크가 가능하며 CWE 리스트 기반의 개발자가 범할 수 있는 실수를 검사할 수 있는 다양한 스텐다드 검사항목을 제공한다.



C-RUN Runtime Analysis

C-RUN은 C-STAT과 마찬가지로 IAR Embedded Workbenc에 통합돼 있는 추가 제품이다. IAR Embedded Workbench 외에 별도의 설치를 할 필요가 없으나 기능 사용을 위해 라이센스를 추가해야 한다. 다만 C-RUN의 경우 추가 라이센스를 구매하지 않더라도 코드 사이즈 제한(테스트 코드 12K 제한)으로 평가 가능하다. C-RUN 은 실행 분석으로 작성된 소스 코드를 실제 동작의 타깃에 다운로드해 동작 시킨 후 발생하는 문제점에 대해 분석한다.


C-RUN의 주요 기능

• C/C++ 언어의 코드 분석

• 직관적이고 사용하기 쉬운 설정

• 최적화된 테스트 코드 삽입으로 코드 사이즈와 성능 저하를 최적화

• 다양하고 상세한 런타임 오류 정보 표시

• 콜 스택 정보를 포함한 오류 정보 표시

• 오류 사항과 코드와의 상관관계 확인 및 에디터 창에 오류 표시

• 유연한 필터 관리

• 배열 또는 범위를 가지고있는 객체들의 경계범위를 벗어난 접근 검사

• 버퍼 오버플로우 검사

• 서로 다른 타입의 변수를 캐스팅 할 경우 발생하는 값의 변화 검사

• 산술연산에서의 오버플로우 검사

• 쉬프트 연산에서의 오버플로우 검사

• 힙 메모리의 잘못된 사용과 메모리 누수 검사


일반적인 동적/실행 분석 도구들은 코드 실행 중 검사를 하기에 소스 코드 중 테스트 돼야 할 위치에 테스트 코드를 사용자가 직접 입력해야 한다. 따라서 전체의 소스 코드의 크기가 커지고 테스트 코드와 같이 실행되기에 코드 실행 성능이 떨어지게 된다. 하지만 C-RUN의 경우 테스트 코드의 입력을 컴파일러가 코드를 분석해 최적화된 코드를 자동 삽입하기에 코드 사이즈 증가와 실행 성능 저하를 최소화 하고 있다.


코드 분석을 통해 내포돼 있는 잠재적 문제를 개발 초기에 확인할 수 있다. 다양한 내포된 문제들이 초기에 발견 되지 못하고 개발 후반기 또는 출시 이 후 발견된다면 문제 해결 비용이 큰 부담이 될 수 있다. C - R U N , C-STAT와 같은 코드 분석 툴들을 개발 초기에 잘 활용해 문제를 개발 초기에 발견과 해결을 한다면 소프트웨어의 품질 향상과 문제해결 비용 최소화에 도움이 많이 될 것이다.


글 / IAR Systems 이현도 과장



















주요파트너/추천기업