개요
CI/CD의 주요 개념은 자동화를 도입하여 지속적인 통합(CI: Continuous Integration)과 지속적인 배포(CD: Continuous Deployment)를 하는 것입니다.
특히 CI/CD는 통합 및 테스트부터 배포(Release)에 이르는 소프트웨어의 수명 주기 전반에 걸쳐 자동화 및 모니터링이 가능합니다.
자동차 산업에서 임베디드 소프트웨어 개발에 고려되어야 하는 사항
“What really amazes me is the sheer number of lines of code of software running on all these ECUs, especially if compared to other products and computer software.
A modern high-end car features around 100 million lines of code, and this number is planned to grow to 200-300 million in the near future.” – Andrea Busnelli (Client Director, Automotive Industry, IBM)
이처럼 임베디드 소프트웨어 개발에 문제를 야기하는 한 가지는 방대한 코드의 양입니다. 다른 한 가지는 임베디드 소프트웨어의 복잡도(Complexity)입니다. 임베디드 시스템에서 널리 사용되는 최신 QNX RTOS 커널에는 10300가지의 다양한 상태가 존재합니다. 전통적인 테스트 방식으로는 코드의 양과 방대한 복잡도에 대해 테스트가 불가능 합니다.
그렇기 때문에 자동차용 임베디드 소프트웨어는 표준(Standard)을 준수하는 것이 중요합니다. 표준은 각 프로젝트를 측정하기 위한 명확한 기준이 있고, 달성 수준에 대한 독립적인 평가가 가능합니다. 이로 인해 시스템의 품질, 안전 및 보안에 대한 신뢰도를 높입니다. 그러나 표준을 준수하는 것은 비용이 수반됩니다. Aviation Today에 따르면 DO-178C를 준수한 시스템용 소프트웨어의 개발 비용은 코드 1줄 당 최대 100달러입니다.
이로 인해 복잡한 소프트웨어일수록 개발 단계가 지남에 따라 결함을 해결하는 비용이 증가됩니다. 또한 여기에 예산, 품질, 안전, 보안까지 고려되어야 합니다.
CI/CD를 통한 자동차용 임베디드 소프트웨어 개발
CI는 다음과 같은 특성을 가지고 있습니다
- 신규 작성 또는 수정된 코드의 통합을 짧은 주기로 수행합니다.
- 코드 저장소에 의한 코드를 관리합니다.
- 소프트웨어 통합 과정이 자동화되고 특정한 버전의 소프트웨어 통합 수행을 반복할 수 있습니다.
- 오류를 일찍 발견할 수 있습니다.
CD는 다음과 같은 특성을 가지고 있습니다.
- 코드 저장소의 코드를 빌드하고 배포를 자동화합니다.
- 모든 단계가 자동화되면 CD는 잘 설계된 테스트 자동화에 크게 의존합니다.
- CD는 소프트웨어 변경 사항을 한 번에 모두 배포하는 것보다 여러 번에 나눠서 배포합니다.
- CI/CD의 주요 이점은 아래와 같습니다.
소프트웨어의 문제를 개발 초기단계에 발견하고 수정할 수 있도록 합니다.
- 개발자가 문제를 조기에 인식하는 것을 지원합니다. CI를 통해 개발자는 각 통합 빌드에서 많은 문제를 감지할 수 있습니다. 이로 인해 소프트웨어는 테스트의 폭, 깊이 및 반복성을 증가시킬 기회를 얻게 됩니다.
- CI를 통해 발견된 문제의 세부 정보를 개발자에게 알려줍니다. 이점은 문제가 올바르게 수정될 가능성을 높입니다. 이로 인해 오류가 없고 작동 가능한 소프트웨어가 더 빨리 생성될 수 있습니다.
- 코드를 모듈식으로 변경하도록 장려하게 됩니다. 문제가 감지된 부분은 배포가 되지 않도록 사전에 방지할 수 있습니다. 이는 재작업의 복잡성을 줄이고 문제가 미치는 영향을 최소화할 수 있습니다.
- CI는 반복 작업의 자동화를 제공하여 개발자가 개발 및 수정에 집중할 수 있도록 합니다.
- CI/CD는 개발도구를 공유하여 비용을 줄일 수 있습니다.
결론
임베디드 시스템은 점점 더 커지고 복잡해지고 있으며 임베디드 소프트웨어 개발은 시간과 예산이 제한되어 있지만 요구되는 안전, 보안 및 품질 수준을 충족해야 합니다.
CI/CD는 임베디드 소프트웨어 개발 효율성을 향상시켜 시간과 비용을 줄입니다.
다음 레터에서는 CI 구축 사례를 살펴보겠습니다.
참고 문헌
- ISO/IEC 15288:2008 (IEEE Std 15288-2008), Systems and software engineering — System life cycle processes
- ISO/IEC 12207:2008 (IEEEStd12207-2008), Systems and software engineering — Software life cycle processes
- DO-178C, Considerations in airborne systems and equipment certification
- Donald Firesmith (23 March 2015). “Four Types of Shift Left Testing”
- “Add Static Code Analysis to Your CI CD Pipelines – SD Times” (16 April 2020)
- “What is CI/CD? – Red Hat” (11 May 2022)