2017년 3월 17일 금요일

소프트웨어 안전성

소프트웨어 안전성은 시스템 수준에서의 안전성 분석 결과를 바탕으로 수행되어야 한다. 이를 토대로 시스템 수준에서 식별된 물리적 구성품이 소프트웨어적 특성을 보유하였다면, 소프트웨어 안전성 활동을 수행해야 한다. 소프트웨어 안전성은 IEC 62279와 소프트웨어 생명주기 프로세스를 기초로 한다. 또한 시스템 설계에 적용되는 개발 프로세스와 장치, 통합, 시운전 시험 등을 거쳐야 한다. 이때 대상 시스템이 지닌 소프트웨어 설계의 민감한 요소들을 파악하는 고장계통 분석을 통해 정확한 구현이 가능해야 한다. 그리고 안전성 분석 결과를 필수 시스템(Vital System)과 서브시스템 요구 규격 내에 안전 요구사항 형태로 문서를 정리해야 한다.

소프트웨어 안전성 활동의 핵심은 코드에 대한 안전성 분석에 있다. 이러한 확인을 위한 선행 조건들은 다음과 같다.


  • 안전요구사항을 비롯한 시스템과 서브시스템 소프트웨어 요구사항 명세서를 위험원과 안전성 분석, 점검 전반에 걸쳐 작성한다. 또한 요구사항의 정확성, 완성도, 서브시스템 간 일관성 등을 확인해야 한다.
  • 서브시스템 소프트웨어의 안전 요구사항을 해당 소프트웨어 설계까지 추적 가능해야 한다. 안전성 분석과 검토를 안전에 필수적인 기능들에 대해 수행하여 이들의 정확성, 완성도, 일관성 등을 확인해야 한다.
  • 소스코드가 소프트웨어 안전성 설계 기준에 부합하는지 확인해야 한다.
  • 소프트웨어 상세 설계 준수 여부, 검토 목표는 소스코드가 정확하며 소프트웨어 상세 설계 관점에서 완벽한지 여부와 소스코드에 문서화 되지 않은 기능들이 구현되어 있는지 여부를 확인하는데 있다.
  • 일관성 확인: 데이터 조작 전에 데이터가 일관성을 유지하고 있는지를 확인한다.(제로 속도 확인, 신호기 이동명령 확인 등)
  • 타당성 확인: 관련 데이터들이 논리적으로 정확하게 합당하며 데이터 범위는 예상 범위 내에 있는지 확인한다.
  • 하드웨어 감시확인: 내장 시험, 출력의 교차 비교하여 확인한다.
  • 적정 수준의 통합 시험과 확인 시험을 계획하여 소프트웨어 코드 리뷰에 따라 실행하여 구현 내용이 설계 일치하며 안전 요건을 만족하는지 확인한다.
  • 단, 상용소프트웨어(COTS)를 사용할 경우에는 소프트웨어 안전성 활동에서 제외한다. 하지만 제외된 사항에 대해 동일 사양 제품의 적용사례 또는 카탈로그 등과 같은 증빙자료를 제시해야 한다.

철도 시스템의 소프트웨어 개발과 관련해서는 IEC 62279 기반 RAMS 인증을 받기 위해 아래와 같은 검증기법이 요구된다.


  • 철도 소프트웨어 인증지원 도구 즉, 기능 안전성의 블랙박스 테스팅이 가능하도록 최종 개발한 시스템에 활용하는 통신 인터페이스를 직접 모의하고 실제 신호를 발생, 주입함으로써 시스템 체계를 구성하는 하위 시스템의 모든 소프트웨어 영역을 검증할 수 있도록 기술 지원이 필요로 한다.
  • 또한, 자동차 산업계의 MISRA-C, MISRA-C++, 항공 산업계의 JSF AV C++, 각종 보안 관련 분야의 CERT-C, CERT-C++ 등을 참고하여 철도 시스템을 위한 소프트웨어 코딩 규칙 표준 및 지침이 필요로 한다.
  • 이를 적용함으로써, 시스템의 소프트웨어 안전·신뢰성 확보가 가능해진다. 소프트웨어 시험은 제작 시제품의 소프트웨어 테스팅을 수행하여 품질 및 안전성 검증의 적합성을 문서화하여 제시하여야 한다.
  • 코딩규칙 준수(MISRA-C 코딩규칙, IEC 61508 3 코딩규칙, IEC 62279 코딩 규칙) 여부 입증
  • 동적 테스팅(MC/DC 테스트, 제어흐름 테스트 또는 경로 테스트)을 수행
  • 기능 테스팅(기능요구사항 테스팅, 경계값 분석 포함) 수행