본문 바로가기
코딩취미/C,C++

ISO 26262 국제표준 : ASIL별 프로그래밍 규칙과 코딩 가이드라인

by 브링블링 2024. 2. 17.
728x90

ISO 26262 국제표준 : ASIL별 프로그래밍 규칙과 코딩 가이드라인

ISO 26262 국제 표준에 따른 ASIL별 프로그래밍 규칙과 코딩 가이드라인은 자동차 전기/전자 시스템의 기능 안전성을 확보하기 위해 필요한 구체적인 요구사항을 정의합니다. ASIL(Automotive Safety Integrity Level)은 위험 평가를 바탕으로 하여 할당되는데, 이는 A에서 D까지 네 가지 수준으로 나뉘며, D가 가장 높은 안전 요구 수준을 나타냅니다. 각 ASIL별로 요구되는 프로그래밍 규칙과 코딩 가이드라인은 다음과 같습니다.

 

ASIL A

  • 기본 코딩 규칙 준수: 가독성이 높고 유지보수가 용이한 코드를 작성합니다.
  • 간단한 오류 처리: 기본적인 입력 검증 및 오류 처리 메커니즘을 포함해야 합니다.

기본적인 프로그래밍 규칙을 적용합니다. 예를 들어, 변수명은 의미를 명확하게 전달해야 하며, 매직 넘버 대신 상수를 사용해야 합니다.

#define MAX_SPEED 100 // 매직 넘버 대신 상수 사용

int speed = 50; // 변수명은 명확한 의미를 전달
if (speed > MAX_SPEED) {
    // 속도 제한 초과 처리
}

 

ASIL B

  • 향상된 데이터 검증 및 오류 처리: 모든 입력 데이터는 철저히 검증되어야 하며, 시스템은 오류 상태에서 안전하게 복구할 수 있어야 합니다.
  • 코드 리뷰 및 정적 분석: 코드의 정확성을 검증하기 위해 정적 분석 도구 사용 및 코드 리뷰를 권장합니다.

좀 더 엄격한 에러 처리와 데이터 검증을 요구합니다. 모든 입력 데이터는 검증되어야 하며, 에러 상황에서는 안전한 상태로 복귀해야 합니다.

int setSpeed(int inputSpeed) {
    if (inputSpeed < 0 || inputSpeed > MAX_SPEED) {
        return -1; // 입력 데이터 검증
    }
    speed = inputSpeed;
    return 0; // 성공적으로 속도 설정
}
728x90

ASIL C

  • 고급 코딩 기법: 재사용 가능성, 모듈성, 그리고 테스트 용이성을 고려한 코드 설계가 필요합니다.
  • 철저한 테스트 및 검증: 단위 테스트, 통합 테스트, 시스템 테스트를 포함한 광범위한 테스트가 요구됩니다.

더욱 철저한 코드 분석과 테스트를 요구합니다. MISRA C와 같은 업계 표준을 준수해야 하며, 모든 함수는 사이드 이펙트가 없어야 하고, 글로벌 변수의 사용을 최소화해야 합니다.

int adjustSpeed(int currentSpeed, int adjustment) {
    int newSpeed = currentSpeed + adjustment;
    if (newSpeed < 0 || newSpeed > MAX_SPEED) {
        return currentSpeed; // 안전한 범위 내에서 속도 조절
    }
    return newSpeed;
}

 

 

ASIL D

  • 최고 수준의 안전 요구사항: 시스템의 모든 부분에서 잠재적 오류를 식별하고 대처할 수 있는 방법을 구현해야 합니다.
  • 완전한 문서화 및 검증: 모든 개발 단계와 변경 사항은 완벽하게 문서화되어야 하며, 독립적인 검증을 통해 코드의 안전성을 입증해야 합니다.

최고 수준의 안전성을 위해, 모든 가능한 오류 상황을 고려해야 합니다. 코드는 재사용 가능해야 하며, 모듈화되고, 완전히 문서화되어야 합니다. 모든 비정상적인 동작은 감지되고, 처리되어야 하며, 시스템은 어떠한 경우에도 안전한 상태를 유지해야 합니다.

// 복잡한 로직과 여러 에러 처리 메커니즘을 포함한 고급 함수 예시
int controlMotor(int desiredSpeed) {
    if (desiredSpeed < 0 || desiredSpeed > MAX_SPEED) {
        return -1; // 입력 검증
    }
    
    // 가정: motorSetSpeed는 모터 속도를 설정하는 함수로, 성공 시 0을 반환
    int result = motorSetSpeed(desiredSpeed);
    if (result != 0) {
        // 오류 처리 로직
        handleError(result); // 가정: 에러 처리 함수
        return -1;
    }
    
    return 0; // 성공
}

 

 

공통 요구사항

모든 ASIL 수준에서 공통적으로 요구되는 사항은 다음과 같습니다:

  • 명확한 코딩 표준 적용: MISRA C와 같은 업계 인정 표준을 적용하여 일관된 코딩 스타일 유지.
  • 오류 처리 메커니즘: 시스템은 어떠한 오류 상황에서도 안전한 상태로 유지되어야 합니다.

 

ASIL별 요구사항은 시스템의 특정 부분이 얼마나 중요한지, 그리고 잠재적인 위험 수준을 어떻게 관리해야 하는지에 대한 인식을 바탕으로 합니다. 따라서, 더 높은 ASIL 수준은 더 엄격한 코딩 규칙과 가이드라인을 요구하며, 이는 전체 시스템의 안전성을 보장하기 위한 조치입니다. 그리고  각 단계에서 요구되는 구체적인 규칙과 가이드라인은 프로젝트의 특성, 개발 조직의 정책, 그리고 적용되는 다른 표준들에 따라 달라질 수 있습니다. 중요한 것은 각 ASIL 수준에 맞게 적절한 안전 조치를 취하고, 소프트웨어 개발 과정에서 발생할 수 있는 위험을 최소화하는 것입니다. ISO 26262는 이러한 프로세스를 체계화하고 문서화하는 데 중점을 둡니다.

728x90