산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관

지난 10년간 임베디드 소프트웨어는 일반적인 차량에서 수십만 줄에서 1억 줄 이상으로 증가했습니다. 32비트 프로세서로의 전환과 풍부한 메모리는 전례 없는 기능을 가능하게 했지만, 동시에 안전과 보안을 위협하는 미묘한 버그의 위험도 증폭시켰습니다.

예방이 중요한 이유

개발자는 코드가 베이스에 들어가기 전에 오류를 방지하는 체계적인 접근 방식을 채택해야 합니다. 특히 주의를 기울여야 할 두 가지 주요 오류 범주가 있습니다:

MISRA C/C++과 같은 엄격한 코딩 표준을 구현하고, 요구사항 주도 테스트를 결합하면 강력한 "예방의 온스"가 됩니다. 이 전략은 디버깅 시간을 줄이고, 일정을 타이트하게 하며, 궁극적으로 ROI를 보호합니다.

왜 예방이 중요한가

인간의 실수는 피할 수 없습니다. 엔지니어는 서두르고, 세부 사항을 간과하거나, 복잡한 데이터 흐름을 오해합니다. 하지만 소프트웨어가 크기와 상호 연결성에서 성장하면, 이러한 단순한 실수가 연쇄적으로 중요한 실패로 이어질 수 있습니다. 규율 있는 코딩 표준은 이러한 함정의 많은 부분을 표면화되기 전에 탐지하고 제거하는 데 도움이 됩니다.

C/C++ 생태계에서 결함의 약 80%는 언어의 20%만 잘못 사용하여 발생합니다. 문제되는 구문을 금지하거나 제한함으로써 표준은 코드 품질을 극적으로 높입니다.

부호 있는 정수가 오른쪽으로 시프트될 때 발생하는 미정의 동작을 고려해 보세요. 컴파일러에 따라 결과가 달라져 일관성 없는 프로그램 동작으로 이어질 수 있습니다. 마찬가지로 순환 버퍼를 읽는 함수가 일부 컴파일러에서 예기치 않은 순서로 값을 반환할 수 있습니다. 이러한 미묘한 차이는 아래 그림에 강조되어 있습니다.

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 1. C/C++ 구문에서 컴파일러 종속 동작. 출처: LDRA

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 2. 순환 버퍼 예제에서 불특정 동작. 출처: LDRA

MISRA C/C++ 활용하기

1998년 자동차 산업을 위해 처음 발표된 MISRA는 임베디드 C/C++ 코딩의 황금 표준으로 남아 있습니다. MISRA는 다음을 명시합니다:

2016년 MISRA는 보안 중요 코드를 다루기 위해 확장되어 14개의 새로운 지침을 추가했습니다. 예를 들어, 지침 4.14는 미정의 동작으로 이어질 수 있는 구문을 명시적으로 금지하여 보안 태세를 강화합니다.

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 3. 미정의 및 불특정 동작에 대한 MISRA 가이드라인. 출처: LDRA

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 4. 미정의 동작 방지에서 지침 4.14의 역할. 출처: LDRA

코드에서 애플리케이션으로: 요구사항과 테스트의 역할

완벽한 코드라도 의도한 목적을 충족하지 못하면 실패할 수 있습니다. 요구사항 추적성과 단위 수준 테스트는 소프트웨어가 설계대로 동작하는지 검증하는 데 필수적입니다.

양방향 추적성은 각 기능을 하위 수준 요구사항으로, 시스템 수준 목표로 연결합니다. 이 매핑은 누락되거나 불필요한 기능을 조기에 노출시킵니다.

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 5. 함수에서 시스템 요구사항으로의 양방향 추적성. 출처: LDRA

하위 수준 요구사항이 정의되면 테스트 케이스가 자연스럽게 나옵니다. 이 테스트를 실행하면(이상적으로 자동화된 단위 테스트 도구로) 코드가 계약을 이행하는지 확인할 수 있습니다.

임베디드 코딩 마스터하기: 오류를 줄이고 안전을 높이는 검증된 습관
그림 9. 자동화된 단위 테스트 결과. 출처: LDRA

새로운 코딩 습관 채택하기

현대 임베디드 개발은 전체적인 접근을 요구합니다:

이러한 관행은 더 깔끔하고 유지보수하기 쉬운 코드를 제공하고, 기능 추가를 단순화하며, 장기 유지보수 비용을 줄입니다. 이는 안전 중요 및 비중요 도메인 모두에 공감되는 이점입니다.

이러한 습관을 채택하는 것은 경쟁 우위를 원한다면 선택이 아닙니다. 끊임없는 소방수 노릇이 필요한 코드베이스와 원활하게 진화하는 코드베이스의 차이는 종종 규율 있는 프로세스 하나뿐입니다.

원본 기사는 EDN에서 발췌했습니다.

임베디드

  1. 임베디드 소프트웨어의 숨겨진 취약점: 텍스트 문자열
  2. SOAFEE: 소프트웨어 정의 자동차 플랫폼을 강화하는 클라우드 네이티브 아키텍처
  3. Pixus, 구조적 강성 강화한 러기드 6U OpenVPX 페이스플레이트 출시
  4. Kontron, 새로운 고성능 임베디드 컴퓨팅 표준 COM HPC 공개
  5. GE Digital, 예지 자산 관리 소프트웨어 공개: 유지보수를 반응형에서 사전 예방형으로 전환
  6. CMMS 교육 마스터: 팀 참여 유도와 지식 정착
  7. IoT에서 오픈소스 소프트웨어 보안: 소프트웨어 위험 완화
  8. 소프트웨어 공급망 보안을 위한 3가지 검증된 단계
  9. 세일릭(Saelig), 임팩트-D 100AL 임베디드 PC 출시…15년 수명·풍부한 I/O·강력한 그래픽
  10. DevOps로 임베디드 소프트웨어 과제 극복하기