개요
이번 기사에서는 이전의 CI/CI의 개발 방법에 이어, 임베디드 소프트웨어 개발에서 CI의 실제 구축 사례를 살펴보도록 하겠습니다.
CI를 도입한 임베디드 소프트웨어 개발 환경 예시
- 소프트웨어 엔지니어는 작업한 코드를 SVN(코드 관리도구)에 업로드 합니다.
- CI를 관장하는 도구인 Jenkins는 코드를 가져와 S32 Design Studio에서 제공하는 컴파일러를 이용하여 코드를 빌드합니다.
- 정적 테스트, 유닛 테스트, 통합 테스트가 모두 자동화 가능한 PARASOFT를 이용하여 코드 레벨에서의 테스트를 진행합니다. 테스트 결과는 REDMINE에 등록됩니다.
- REDMINE은 소프트웨어 엔지니어에게 CI 결과를 알려줍니다.
- 코드 관리는 SVN 대신 Git, Atlassian Bitbucket 등으로 대체할 수 있고, 이슈 관리는 REDMINE 대신 Atlassian Jira, Backlog, trac 등으로 대체할 수 있으며, CI 환경은 Jenkins 대신 GitLab CI, Travis CI, Atlassian Bamboo 등으로 대체할 수 있습니다.
Jenkins를 이용한 CI 구성 예시
코드 빌드, 정적 / 유닛 / 통합 테스트를 수행하고 결과를 등록하는 Jenkins 구성입니다.
Jenkins에서 SVN의 코드를 가져올 수 있도록 설정합니다.
윈도우에서 실행 가능한 배치 파일을 통해 코드를 빌드하도록 설정합니다.
윈도우에서 실행 가능한 배치 파일을 통해 정적 테스트, 유닛 테스트, 통합 테스트를 수행하도록 설정합니다.
테스트 자동화를 위해 PARASOFT의 CLI(Command Line Interface)를 이용합니다.
PARASOFT에서 제공하는 CLI를 이용하면 정적 테스트는 물론, 설정된 유닛 테스트 및 통합 테스트의 테스트 케이스에 대한 테스트 실행과 각각의 테스트 리포트 생성까지 자동으로 수행할 수 있습니다.
아래 그림은 Jenkins에서 자동으로 수행된 정적 테스트 부분의 로그입니다
위 로그에서 정적 테스트 수행 및 테스트 리포트가 생성된 것을 확인하실 수 있습니다.
- Jenkins에서는 PARASOFT에서 생성한 정적 테스트, 유닛 테스트, 통합 테스트의 결과를 REDMINE에 등록하는 것 역시 자동으로 진행됩니다.
아래와 같이 Pipeline을 구성합니다.
위 Jenkins 파이프라인이 동작하면 REDMINE에 이슈가 등록됩니다.
결론
- 자동차 산업에서 급격하게 증가하는 소프트웨어어의 개발 생산성과 효율성을 향상시키기 위해서는 위와 같은 CD(Continuous Development)와 CI(Continuous Integration)를 연계하여 적용하는 것은 중요한 개발 방법 중의 하나입니다.
- PARASOFT에서 지원하는 테스트 자동화는 CI의 속도를 가속시키고, 에너지 비용 절감 및 인프라 요구 사항을 감소시켜 프로젝트 비용을 절감합니다.
- CI의 핵심 원칙은 개발자가 코드를 자주 업로드하는 것입니다.
- 또한 아래와 같은 몇 가지 사항들을 고려하는 것이 필요합니다.
- 소프트웨어 개발 도구 및 테스트 도구의 개발 프로세스상의 통합
- 실제 현장에서 실행하고 있는 개발현황에 대한 고려
- 경영진의 개발 효율성 향상을 위한 의지
- 개발에 대한 프로세스를 공개적이고 협업가능한 구조로 개선 등
참고 문헌
- “Continuous Integration & Continuous Delivery for Embedded Systems – PARASOFT”
- “Add Static Code Analysis to Your CI CD Pipelines – SD Times” (16 April 2020)