현대 사회에서 자동차, 철도, 항공우주, 원자력, 국방 등의 다양한 분야에서 대부분의 장치들이 소프트웨어를 내장하고, 제어용 소프트웨어 시스템이 탑재됨에 따라 소프트웨어의 안전성에 대한 중요도가 높아지고 있다. 다양한 산업 분야에서 소프트웨어가 사용되면서 소프트웨어에 의한 사고의 위협도 높아지기 때문에 소프트웨어 오동작에 의한 안전성 위협이 큰 이슈로 떠오르게 되었다. 소프트웨어의 사고는 사용자의 오조작에 의해서 발생할 수 도 있지만 가장 근본적으로는 설계 과정에서의 안전성에 대한 검증이 제대로 이루어지지 않아서 발생하게 된다. 따라서 본 논문에서는 소프트웨어 개발 프로세스에서 소프트웨어 안전성 분석 및 관리 활동이 어떻게 이루어져야 하는 가를 제시한다. 특별히 프로토타입이나 점진적 개발 프로세스에서의 안전성 분석 및 관리 활동의 적용 방안에 대하여 제시한다.
현대 사회에서 자동차, 철도, 항공우주, 원자력, 국방 등의 다양한 분야에서 대부분의 장치들이 소프트웨어를 내장하고, 제어용 소프트웨어 시스템이 탑재됨에 따라 소프트웨어의 안전성에 대한 중요도가 높아지고 있다. 다양한 산업 분야에서 소프트웨어가 사용되면서 소프트웨어에 의한 사고의 위협도 높아지기 때문에 소프트웨어 오동작에 의한 안전성 위협이 큰 이슈로 떠오르게 되었다. 소프트웨어의 사고는 사용자의 오조작에 의해서 발생할 수 도 있지만 가장 근본적으로는 설계 과정에서의 안전성에 대한 검증이 제대로 이루어지지 않아서 발생하게 된다. 따라서 본 논문에서는 소프트웨어 개발 프로세스에서 소프트웨어 안전성 분석 및 관리 활동이 어떻게 이루어져야 하는 가를 제시한다. 특별히 프로토타입이나 점진적 개발 프로세스에서의 안전성 분석 및 관리 활동의 적용 방안에 대하여 제시한다.
As most devices in a wide range of automotive, aerospace, and missile have built-in software that controls the system behaviors, the safety of the software is growing in its importance. That is, the software safety has emerged as one of big issues because the threat of accidents caused by software m...
As most devices in a wide range of automotive, aerospace, and missile have built-in software that controls the system behaviors, the safety of the software is growing in its importance. That is, the software safety has emerged as one of big issues because the threat of accidents caused by software malfunction is rising. Accident by software can be occurred from user mal-operation, but the fundamental reason of the accident comes from insufficient verification of the safety in software development process. Therefore, this paper presents how the software safety analysis and management activities should be done in the development process. In particular, we propose how to apply the safety analysis and management activities in the prototype or incremental development process.
As most devices in a wide range of automotive, aerospace, and missile have built-in software that controls the system behaviors, the safety of the software is growing in its importance. That is, the software safety has emerged as one of big issues because the threat of accidents caused by software malfunction is rising. Accident by software can be occurred from user mal-operation, but the fundamental reason of the accident comes from insufficient verification of the safety in software development process. Therefore, this paper presents how the software safety analysis and management activities should be done in the development process. In particular, we propose how to apply the safety analysis and management activities in the prototype or incremental development process.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
ISO 26262 등과 같은 안전성 관련 표준들이 소프트웨어 개발에 대한 가이드라인을 제공하고 있지만, 구체적이지 못하며 대체적으로 폭포수 모델(Waterfall Model)과 같은 프로세스에서의 적용을 기준으로 제시하고 있다[11,12]. 따라서 본 연구에서는 먼저 소프트웨어 개발 프로세스에서 안전성을 어떻게 관리해야 하는가를 살펴보고, 이를 기반으로 점진적 개발에서의 안전성 분석 및 관리 방안을 제시한다.
이러한 안전 요구사항들이 시스템의 설계 활동에서 반영될 수 있도록 고려되어야 함은 물론, 시스템의 개발 과정에서 반드시 기능 안전성에 대한 검증이 수행되어야 한다. 또한 본 논문에서는 점진적인 개발 프로세스를 기반으로 안전 필수 소프트웨어가 개발되는 경우, 어떠한 프로세스 관점에서의 고려가 있는지도 제시하였다. 이들은 안전 소프트웨어를 개발하는 조직에서 개발 프로세스를 정립하기 위한 기반으로 활용될 수 있을 것이다.
본 논문에서는 소프트웨어 개발 프로세스 단계에서 어떠한 안전성 관련 활동 등이 있는가를 정리하였고, 이를 통해 안전 소프트웨어 개발 활동이 어떻게 이루어지는 가를 프로세스 관점에서 조명하였다. 이를 위해서는 먼저 정확한 기능 요구사항으로부터 안전성 목표를 정의하고, 이에 따른 안전성 요구사항을 도출하는 것이 중요하다.
제안 방법
아키텍처를 이루는 각각의 소프트웨어 모듈은 상세 설계 과정을 거쳐 구현되며, 단위 테스트 과정을 거쳐 통합된다. 그리고 마지막으로 통합된 소프트웨어 시스템에 대하여 안전 요구사항이 만족되는지를 점검한다. Fig.
따라서 운영 단계에서도 시스템의 동작 과정에서 기능 안전 요구사항이 충분히 만족되는지를 모니터링 해야 한다. 모니터링 결과들은 시스템 내부에 존재하는 로그 형태로 기록되어야 하며, 예상하지 못했던 운영 조건에서 사고가 발생하면, 로그를 기반으로 어떠한 기능적 오동작이 있는지를 분석하는 과정을 수행한다.
HAZOP은 설계 또는 운용상에서 의도한 기능에서 벗어나 사고가 발생하는 것을 가정하고, 설계부터 예상 운용에서 일어날 수 있는 모든 가능한 일탈 상황과 그와 관련된 위험 요소를 찾으려고 하는 것이다[22,23]. 분석 과정에서 시스템에 대한 효율적인 검토를 수행하기 위하여 시스템 설계의 일정 구간을 분할하여 단계적으로 장비의 오작동이나 운전 조작 실수 등과 같은 위험 및 운영성을 평가한다.
Kim이 수행한 안전성 평가에 관한 연구에서는 안전 필수 시스템에서 소프트웨어 안전성을 보다 엄격하게 평가할 수 있는 방안을 제시하였다[15]. 상호보완적인 관계에 있는 결함분석 기법을 이용하여 안전성을 분석하는 방법으로 FTA와 FMEA 분석 기법을 결합한 하이브리드 방법을 제안하였다.
Hwang의 연구에서는 기존의 자동화된 소프트웨어 테스트 도구를 확장하는 방식을 통한 안전성 점검방안을 제시하였으며, 소프트웨어 개발 주기에서 파생된 안전성 활동의 결과들을 입력으로 표준에서 요구하는 평가항목들을 동적으로 테스트하는 평가도구를 제안하였다[16]. 소프트웨어 설계단계에서 수행한 안전성 활동 결과를 테스트 도구의 입력으로 사용하여 지속적으로 안전성을 검증하도록 기능을 확장하였다.
위협 분석은 운영 환경 조건, 시스템과 사용자의 상호작용 등을 고려하는 모든 가능한 시나리오에 대하여 분석되어야 하며, 위험한 상황이 발생했을 때, 이러한 상황이 사용자 또는 정의된 시스템에서 제어 가능한 상태인지, 얼마나 심각한 위험인지, 얼마나 빈번하게 발생하는지 등을 고려하여 분석한다. 위협 분석의 결과를 기반으로 시스템이 제공해야 하는 기본적인 안전성 요구사항을 확정하게 된다.
일반적인 결함 트리 분석에서처럼 상위 수준에서의 결함이 하위수준에서의 결함으로 구성될 수 있다는 기본 개념을 적용하는 것이다. 하위 수준에서의 결함이 상위 수준의 결함을 유발하기 위해 AND 조건으로 연결될 것인가 OR 조건으로 연결될 것인가를 고려하여 안전성 요구사항을 할당하고 검증한다.
후속연구
이들은 안전 소프트웨어를 개발하는 조직에서 개발 프로세스를 정립하기 위한 기반으로 활용될 수 있을 것이다. 향후의 연구로써는 3장에서 제시한 다양한 안전성 분석기법이 소프트웨어의 특성에 따라 어떻게 적용될 수 있는가를 분류하고, 이에 대한 적용방안을 고찰하는 것이다.
질의응답
핵심어
질문
논문에서 추출한 답변
소프트웨어 시스템에서 안전성은 어떤 의미인가?
안전성이란 사고나 손실로부터 자유로운 상태라고 정의할 수 있는데, 소프트웨어 시스템의 경우 외부의 잘못된 입력으로부터 시스템을 안전하게 지켜주고, 재난 발생을 막기 위한 통제를 수행할 수 있는 가에 대한 관심을 말한다. 이와 관련하여 신뢰성과 안전성은 소프트웨어에 있어서는 매우 유사한 개념으로 사용되었으나 최근에는 그 개념이 분리되는 추세에 있다.
소프트웨어의 결함으로부터 비롯된 사고의 사례들은?
이러한 소프트웨어들은 우리 생활에 편의를 위한 기능을 제공하지만, 생활에 밀접하게 관련이 있는 만큼 소프트웨어의 오류는 크고 작은 사고를 야기하는 원인이 될 수 있다. 자동차 분야에서는 2014년 도요타 프리우스 자동차 리콜 사례가 있었다[1]. 철도 분야에서는 KTX의 사고사례를 들 수 있고, 항공우주 분야에서는 Arian 5 Rocket 폭발과 2012년 러시아 화성 탐사선의 추락사고가 있었다[2-4]. 원자력 분야에서 가장 대표적으로 알려진 Therac -25 사고가 있었다. 이러한 사고들은 모두 소프트웨어의 결함으로 비롯되었다[5].
소프트웨어에 의한 사고가 발생하는 가장 근본적인 원인은?
소프트웨어에 의한 사고는 조작 미숙 혹은 외적인 요인에 의해서 발생할 수도 있지만, 가장 근본적인 원인은 소프트웨어 개발단계에서의 안전성에 대한 검증이 제대로 이루어지지 않기 때문에 발생하게 된다. 소프트웨어 분석 및 설계 단계에서 안전성에 대한 연구는 대부분 안전성 분석 및 평가, 또는 소프트웨어 아키텍처 설계기법을 통한 안전성의 확보를 목표로 수행하는 것이 일반적인 추세이다.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.