본문 바로가기

System & Software Engineering

Definition of Software Reliability

소프트웨어 신뢰성에 대한 정의는 정의를 내리는 사람 또는 기관에 따라 약간씩 다르게 정의되고 있다.



먼저 1992년 미국의 AIAA (American Institute of Aeronautics and Astronautics)의 정의에 따르면,
"The ability of a system or component to perform its required functions under stated conditions for a specified period of time." (특정 시간 동안 정해진 환경 조건하에서 요구되는 기능을 수행하기 위한 시스템 또는 컴포넌트들의 능력) (by ANS/AIAA R-013-1992)
로 되어 있다.
최근 새롭게 정의된 개념은 소프트웨어 시험(테스팅)에 보다 중점을 둔 개념이라 할 수 있다.
"Reliability is a measure of confidence that the software produces accurate and consistent results, that are repeatable under low, normal, and peak loads in the intended operational environment." (소프트웨어 신뢰성은 소프트웨어의 운영 환경에서 작업 부하에 상관없이 반복적으로 정확하고 일관된 결과를 제공할 수 있는 측도) (AT&T)
로 되어 있다.
하지만 가장 일반적으로 사용되는 소프트웨어 정의는 ANSI/IEEE Std. 729-1991에서 정의한 것을 따른다.
"The probability of failure-free software operation for a specified period of time in a specified environment." (특정 시간 동안 정해진 환경 조건하에서 요구되는 기능을 고장 없이 수행할 확률) (ANSI/IEEE Std. 729-1991)

소프트웨어 신뢰성을 하드웨어 신뢰성과 비교할 때 가장 두드러진 차이점은 시간의 개념이다. 하드웨어의 신뢰성은 시간 자체를 하나의 확률 변수로 보고 "얼마나 오랫동안" 요구 하는 기능을 수행하는가에 초점이 맞춰져 있는 반면, 소프트웨어 신뢰성은 "언제" 라는 개념이 중요하다. 즉, 현재 개발중인 소프트웨어를 언제까지 디버깅 해야 하며, 오류가 있다면 몇번의 시험을 해야하고, 또한 언제 릴리즈(출시) 해야 하는가라는 문제 등을 내포하고 있다.
또한 소프트웨어는 하드웨어와는 달리 고장율(Failure Rate)이 시간과 관계없다고 보는 것이다. 즉, 제품의 출시 이전 적당한 시험을 통해 목표로 하는 신뢰 수준을 확보 할 수 있고, 시험 결과가 반드시 동일한 결과만을 얻을 수 있으면 된다는 개념이다. 이런 이유로 최근 소프트웨어에 대한 신뢰성 평가의 흐름은 소프트웨어의 시험과 연결하여 설명하려는 경향이 있다. 여기서 고장 (Failure)은 소프트웨어에 남아 있는 결함 (Fault)에 의해 발생한다. 만약 소프트웨어에 남아 있는 결함의 총 수가 시험 단계에서 정확하게 추정될 수 있다면 소프트웨어 신뢰도는 정량적으로 측정 될 수 있다. 그러나 시험 중인 소프트웨어에 얼마나 많은 결함이 남아 있는지 모르기 때문에 언제까지 시험을 계속해야 하는지, 소프트웨어의 품질이 어느 정도인지를 알 수 없다. 물론 시험을 많이 할 수록 소프트웨어 품질은 높아 지겠지만 비용 문제로 계속적으로 시험할 수 없고, 고객이 요구한 시간 내에 좋은 품질의 소프트웨어를 출시(양도) 해야 하므로, 소프트웨어를 시험하는 동안에도 계속적으로 품질을 평가할 필요가 있는 것이다. 따라서 소프트웨어 시스템의 개발자와 사용자 모두에게 소프트웨어 신뢰성을 정량적으로 평가하고 예측 하는 것과 신뢰도 향상 여부가 관심의 대상이 되고 있다. 또한 신뢰성이 높은 소프트웨어 시스템을 개발하는 방법론에 대한 연구가 많이 행해져 오고 있다.


본 게시물의 모든 저작권은 본인에게 있으며, 본 게시물의 일부 또는 전체를 인용할 시에는 반드시 출처를 밝혀야 합니다.