기술인사이트

기술리포트

IEC 61508과 MISRA-C 및 해당 표준 룰셋 기반의 정적분석 테스트 방법 소개 ①

[목 차]

1. 서론
2. IEC 61508이란
3. IEC 61508의 용어 정리
4. IEC 61508 내용
5. MISRA-C(The Motor Industry Software Reliability Association)란?
6. 도구를 활용한 정적 분석 테스트
7. 결론 및 시사점
________________________________________

1. 서론

○ 현 주제에 대한 선택 배경 소개

안녕하십니까. 와이즈스톤 정희원 선임연구원입니다. 본 기술 리포트의 주제는 IEC 61508 표준과 MISRA-C입니다. 와이즈스톤은 2021년 8월 KOLAS로부터 소프트웨어 기능안전분야 국제표준 ‘IEC 61508’을 인정받았으며 MISRA-C:2012를 코딩 룰(Cording Rule)로 채택하여 정적 분석 도구를 사용한 시큐어코딩 서비스를 제공하고 있습니다. 매년 IEC 61508에 대한 관심과 중요도가 증가하고 있어 이번 리포트 주제로 선정해보았습니다.
본 기술 리포트에서는 IEC 61508와 MISRA-C에 대한 전반적인 이해와 내용, 구성 등을 소개하도록 하겠습니다.


2. IEC 61508이란

○ 정의

- 전반적인 산업 안전과 관련한 기능안전(functional safety) 기술 요구사항을 제공하고 안전 무결성 수준(Safety integrity level, SIL)을 결정하는 국제 안전 인증 표준입니다.

○ 목적

- 안전 시스템에 전기, 전자 또는 프로그래밍(E/E/PE) 가능한 전자 기술 기반 요소 포함 시 모든 종류의 산업에 적용 가능한 기본적인 기능 안전 표준이 될 의도로 작성하였습니다.
- 완전한 안전 수명 주기를 포함하며 필요에 따라 부문 특정(자동차, 의료, 철도, 원자력 등) 표준을 개발하기 위한 해석이 필요할 수 있습니다.

출처 : IEC 61058 기반 산업일반 분야 SW안전 가이드(2020.01.02.07)

정의와 목적에서 알 수 있듯 IEC 61508의 가장 중요한 키워드는 ‘산업 안전’입니다. IEC 61508이 탄생하게 된 배경이 무엇인지, 다른 산업 표준들에 어떤 영향을 주는지 IEC 61508에 대해 좀 더 자세히 알아보도록 하겠습니다.


○ 배경

- 61508 제정 배경
현대 사회는 전기, 전자 또는 프로그램 가능한 전자장치 시스템(E/E/PE)에 의해 수행되는 산업이 광범위하게 존재하고 있으며 그 분야가 확장됨에 따라 ‘안전 기능’은 점점 더 중요해지고 있습니다.
안전에 대한 시험은 필수적이지만 복잡해진 시스템에 대해 모든 기능을 시험하는 것은 쉽지 않을뿐더러 고장 모드를 완전히 결정하거나 안전 성능을 예측하는 것은 현실적으로 불가능합니다. 따라서 ‘기능안전성 달성’을 위해서는 시스템의 설계 단계에서 위험측 고장 방지나 고장 발생시 제어하는 방식을 고려해야 합니다. 즉, 61508은 요구분석부터 폐기까지 제품의 하드웨어와 소프트웨어의 안전생명주기를 통해 산업 안전 전반에 대한 기본적인 역할을 하기 위한 표준으로 탄생하였습니다

- 다른 표준으로의 기초
61508의 요구사항을 바탕으로 각 산업군별 안전 제약사항 및 특성이 반영된 표준 제작이 가능합니다. 즉, IEC 61508의 표준이 여러 산업의 라이프사이클, 특성, 성격 등의 여러 제약사항들을 포함하거나 표현할 수 없으므로 각 산업군 별 표준을 별도로 두고 있습니다. 또한 산업별 적절한 안전 관련 표준 문서가 없을 경우 IEC 61508을 참고할 수 있습니다.

출처 : SGS Korea FS

- 독립적인 표준으로서의 61508 사용
61508의 시리즈(1 ~ 7)는 필요에 따라 독립적인 산업 표준으로 사용할 수 있습니다.
다음은 사용 예시입니다.
• 응용 분야 또는 제품 표준이 적절하지 않을 때 E/E/PE 안전관련 시스템에 대한 요구사항으로 사용함
• E/E/PE 컴포넌트 및 서브 시스템 공급자가 전 분야에 사용함
• 시스템 빌더가 안전관련 시스템을 사용자 명세에 맞추기 위하여 사용함
• 사용자가 성능 요구사항을 수반한 안전기능에 대한 요구사항 명시하기 위하여 사용함
• E/E/PE 안전관련 시스템의 '설계한 대로‘ 안전무결성을 유지하기 위해 사용함
• 적합성평가 및 인증 서비스의 기술적 프레임워크 제공 또는 안전 생명주기 활동 평가를 수행하기 위하여 사용함

- 61508과 26262
IEC 61508은 2011년에 자동차 안전 규격으로 제정되었고 이듬해 KS에서 ISO 26262를 국내 자동차 표준으로 도입하였습니다. ISO 26262는 IEC 61508 규격을 기반으로 자동차 산업에 맞게 제정된 규격이고 둘 다 안전 무결성(Safety integrity)을 다루며 SIL(Safety integrity level)을 통해 그 정도를 나타내고 있습니다. 두 표준 모두 기능안전(Functional safety)을 다루고 있지만 개념에는 하기와 같은 차이점이 있습니다.
※ ISO 26262에서는 ASIL(Automotive SIL)

• IEC 61508 Functional safety : EUC와 EUC 제어 시스템과 관련된 전체 안전한 상태로 유지하거나 달성하기 위하여 필요한 활동을 수행하는 E/E/PE 안전관련 시스템, 기타 기술 안전관련 시스템, 외부 리스크 감소 시설의 능력을 말한다.
•ISO 26262 Functional safety : 전기/전자 시스템이 오작동 행위를 하여 나타나는 위험원으로 인한 비합리적인 리스크가 존재하지 않음.
지금까지 61508의 정의와 목적, 그리고 배경에 대해 알아보았습니다.

여기서 문제 하나 드리겠습니다! ‘위험’과 ‘위해’의 차이가 무엇인지 아시나요?
61508 표준 내용 소개 전 61508에서 정의하고 있는 기능 안전 관련 용어들을 미리 인지하고 내용을 파악하시면 이해에 도움이 되실 것으로 생각되어 중요 단어와 개념들을 정리해보았습니다.


3. IEC 61508의 용어 정리

기능 안전 관련 용어 정리


출처 : ISO 14971 Medical Devices - Application of Risk Management to Medical Devices

- 위험원(Hazard)
• 피해의 잠재적 요인, 위해 및 사고를 일으키는 원인
- 위험한 상황(Hazardous Situation)
• 사람이 위험에 노출되는 상황
- 위해(Harm), 사고(Accident)
• 재산이나 환경에 대한 피해의 결과로 직간접적인 사람들의 신체적 상해 또는 건강에 대한 피해
- 위험(Risk)
• 잠재적 위해의 원인
• 위해 발생 가능성과 해당 위해의 심각성의 조합
- 안전 (safety)
• 국제표준 ISO/IEC: 허용 불가한 위험으로부터의 자유
• 허용할 수 없는 위험으로부터의 자유


출처 : IEC 61058 기반 산업일반 분야 SW안전 가이드(2020.01.02.07)

- 허용 가능한 위험(Tolerable Risk)
• 사회의 현재 가치관에 기반하여 특정 상황을 허용하는 위험
- 위험 감소 대책(Risk Reduction Measure)
• 위험이 허용 가능한 위험 수준보다 높다면 위험원을 제거하는 것
- 잔존 위험(Residual Risk)
• 위험 감소 대책 후 남아있는 위험
- 안전 상태(SafetyState)
• 위험이 매우 허용 가능한 수준보다 적어 문제가 되지 않은 상태


출처 : IEC 61058 기반 산업일반 분야 SW안전 가이드(2020.01.02.07)

- 안전 기능(safety function)과 안전관련 시스템
• 명시된 위험한 사건에 대해 안전 상태를 달성하고 유지하는 것이며 이를 위한 시스템을 안전 관련 시스템이라 함
- 안전 관련 SW
• 안전관련 시스템에 의해 사용되도록 개발되었거나 개발 중 사용된 모든 소프트웨어
• 안전관련 시스템이 목표하는 안전 기능과 안전 무결성, 안전성 및 신뢰성 달성을 위함
- 안전무결성(safety integrity levels: SILs) = 안전 기능이 만족스럽게 수행될 가능성
• 안전 기능이 주어진 시간내에 요구사항대로 수행되는지 리스크 평가를 통해 도출 가능함
• 안전무결성 수준 SIL1은 가장 낮은 수준이고 SIL4는 가장 높은 수준(높을수록 요구사항은 엄격,고장 가능성 낮음)
- 기능 안전성 (functional safety)
• 특정 기능 수행 또는 리스크를 허용 가능한 수준으로 달성하거나 유지하기 위한 기능
• 입력에 대한 정확한 동작 수행 필요
• 잠재적인 위험 발생 상황을 파악하여 위험 사건 발생을 예방 또는 보호 매커니즘을 활성화하는 것


출처 : IEC 61058 기반 산업일반 분야 SW안전 가이드(2020.01.02.07)

- 소프트웨어 안전(Software Safety)
• 위험이 소프트웨어 역량을 통해 허용 가능한 수준으로 제거 또는 감소되어 있는 상태
- 소프트웨어를 통한 안전(Safety through Software)
• 소프트웨어로 구현한 안전 기능으로 예상되는 위험원제거 또는 감소시키는 것
• 위험원 분석 및 필요한 소프트웨어 안전 기능을 식별하고 대책을 적용해야 함
- 소프트웨어의 안전(Safety of Software)
• 안전 소프트웨어로 인한 사고를 방지하기 위해 품질을 확보하는 것
• 소프트웨어 안전 무결성을 확보 해야함
“안전과 기능안전성은 시스템의 전체적인 측면과 상호작용하는 환경으로 결정”
안전기능 기능안전성 등 언뜻 보면 비슷한 용어들이 자주 등장하고 있는 걸 보실 수 있습니다. 이에 대한 개념을 초반에 명확히 이해해둔다면 61508 뿐 아니라 안전 관련 표준 전반적인 해석에 분명 도움이 될 것입니다. 이제 IEC 61508의 구성 및 시리즈 별 세부내용들을 살펴보겠습니다.


4. IEC 61508 내용

○ 구성

- 안전생명주기(Safety Lifecycle)
안전수명주기를 정의하고 이에 따른 활동, 절차, 기술을 정의하고 있습니다. 위험 검증과 무결성 수준을 만족하도록 설계하기 위해 필요한 것으로 요인 분석을 통해 위험 감소 대상을 식별하고 조직, 프로세스, 인적자격요소 등이 식별된 위험을 감소시키기 위해 어떤 활동을 해야 하는지를 다루고 있습니다. 품질과 안전 보증 절차는 안전수명주기의 각 활동들과 통합되어야 하며 각 단계는 적용범위를 갖는 기초 활동과 각 단계를 위해 명시된 입력과 그 결과물인 산출물로 구분되어야 합니다.

- 하드웨어(Hardware)
기능 안전이 구현된 하드웨어에 대한 요구사항을 정의하고 있습니다. 안전 요구사항에 따라 하드웨어를 설계하고 구현하는 것과 이들에 대한 계획, 검증, 구조적 제한, 시험, 수정 시 영향분석을 정의하고 있습니다.

- 소프트웨어(Software)
하드웨어 뿐 아니라 소프트웨어를 설계하는데 요구되는 활동 및 설계기술의 요구사항도 정의하고 있습니다. 안전 시스템의 구성 중 소프트웨어 경우 시스템이 결합되는 하드웨어 및 시스템의 전체 고장률이 허용 가능한 범위의 고장률을 결정하여 목표하는 SIL(안전무결성)을 결정한 다음 IEC 61508에서 제시하는 단계별 요구사항을 따르도록 정의하고 있습니다.


○ 61508 Series 0~7

61508은 총 8개의 시리즈로 구성되어 있습니다. 특히 제2부와 제3부는 E/E/PE와 SW 안전 수명주기와 개발 프로세스에 대해서 다루고 있으므로 주요 내용을 세부적으로 살펴볼 필요가 있습니다. 각 시리즈별로 어떤 내용을 기술하고 있는지와 시리즈 간의 관계에 대해 정리하였습니다.



○ 요구사항 지도

요구사항 지도를 통하여 시리즈 별 관계를 한 눈에 파악할 수 있습니다. 분명 8개의 시리즈를 소개하였는데 0번에서는 일반적 개요를 다루고 있으므로 요구사항 지도 내에는 포함되지 않습니다.
기술 요구사항 내 제5부를 보시면 안전 무결성 수준을 결정하는 데 있어서 1부의 응용 분야에 대한 지침을 예시적 방법으로 제공하고 있습니다. 이러한 접근법을 통해 제1부의 전체 안전 요구사항 개발 및 E/E/PE 안전 관련 시스템에 대해 요구사항을 할당하고 제2부와 제3부에서 하드웨어와 소프트웨어 구현에 대한 추가적이고 구체적인 요구사항을 제공하고 있습니다. 제4부에서는 본 표준 전체에서 이용되는 정의와 약어를 기술하고 있습니다. 제6부는 2부와 3부의 응용에 대한 지침을, 마지막으로 제7부는 기법과 측정(수단)에 대한 개요를 포함합니다.



○ 제2부와 제3부 구현단계

제 2부에서는 전기/전자/프로그래밍 가능한 전자(E/E/PE)의 안전 관련 시스템을 위한 요구사항을, 제3부에서는 소프트웨어 요구사항에 대해 제공하고 있습니다. 두 시리즈 간 관계를 하기 이미지를 통해 좀 더 자세히 살펴보면 프로그램이 필요한 부분(Programable)과 필요하지 않은 부분(Non-programable)으로 나누어져 있는 것을 확인할 수 있습니다. 프로그램이 필요한 부분은 제3부의 소프트웨어 요구사항에 따라 개발된 산출물과 병합되며 이와 같은 과정을 거쳐 최종적으로는 프로그램이 필요하지 않은 부분과 E/E/PE 시스템으로 통합됩니다.

출처 : IEC 61508 :2010-3, Figure 5

각각 살펴보자면, 하기와 같은 구성입니다.




○ 안전 수명주기(Lifecycle)

제1부에서 다루고 있는 전체 안전 수명주기(IEC 61508)와 SW 안전 수명주기를 단계별로 비교해보았습니다.
소프트웨어 개발 수명 주기는 소프트웨어 구성 요소의 개발 및 테스트만 다루는 반면, 시스템 개발은 시스템을 구성할 수 있는 소프트웨어, 하드웨어, 인력 및 프로세스의 설정과 관리를 포함하는 더 광범위한 상위 개념입니다. 여기에는 소프트웨어 개발에 해당하지 않는 조직 교육 및 변경 관리 정책과 같은 작업이 포함될 수도 있습니다.

지금까지 IEC 61508에 대해 대략적으로 알아보았습니다.
다음주 연재될 'IEC 61508과 MISRA-C 및 해당 표준 룰셋 기반의 정적분석 테스트 방법 소개 ②'에서는 MISRA-C가 무엇인지 배경부터 정의, 필요성, 구성과 내용 등에 대해 상세히 이야기 하고자 합니다. 이어지는 기술리포트는 7월 중 포스팅 될 예정이니 많은 관심 바랍니다.

감사합니다!