본문 바로가기

System & Software Engineering

Software Reliability Engineering

소프트웨어 신뢰성 공학은 매우 중요한 품질 특성중의 하나인 신뢰성을 다루고 있다.
품질 틀성에는 신뢰성 이외에도 기능성, 사용성, 성능, 유지 보수성 등과 같은 여 러 다른 특성들을 포함하고 있지만, 신뢰성은 인명 손실과 막대한 재산 피해를 일으킬 수 있는 소프트웨어 고장을 정량화하기 때문에 특히 중요하게 생각되어진다.



실제로 많은 경우, 소프트웨어 신뢰성은 전체 시스템 신뢰성의 병목 지역으로 작용하고, 보통 소프트웨어 완성도는 하드웨어의 완성도보다 떨어진다. 그러므로 시스템 전체의 신뢰성을 높이기 위해서는 하드웨어 신뢰성도 중요하지만, 소프트웨어 신뢰성은 특히 주의깊게 관리되어야 한다.
소프트웨어 신뢰성 공학에 대한 정의는 "신뢰성에 관한 사용자 요구사항을 가진 소프트웨어 시스템의 운용에 대한 정량적인 연구" 이다. 따라서 소프트웨어 신뢰성 공학은 다음과 같은 것을 포함하고 있다.

  • 소프트웨어 신뢰성 측정: 신뢰성 모델을 사용하여 신뢰성을 예측하거나 추정하는 것을 모두 포함
  • 신뢰성과 관계있는 소프트웨어 설계, 개발 프로세스, 시스템 아키텍처, 운영 환경 등의 특성과 측정치
  • 위 두가지를 소프트웨어 아키텍처, 개발, 시험, 획득, 사용, 유지보수에 적용

고 심각도 (High Severity) 고장은 사용자가 느끼는 전체 시스템의 품질에 큰 영향을 준다. 조사에 따르면, 고객이 느끼는 품질은 신뢰성/가용성, 빠른 제품의 인도, 낮은 비용 순으로 나타난다. 이런 품질 특성을 고려하는 것은 개발자 중심의 자세보다는 현재 추세인 고객 중심의 자세와도 관계가 있다.

개발자의 입장에서 이런 사용자 요구 품질이 서로 충돌하는 경우가 빈번히 일어난다. 신뢰성 목표가 너무 높게 설정되면 인도 시점이 미뤄지고, 개발 비용이 증가하게 된다. 반대로 신뢰성 목표가 너무 낮게 설정되면 사용자는 제품에 대해 큰 불만을 가지게 되고, 제품의 특징에 따라서 심각한 인명 손실 및 재산 피해까지 야기할 수 있다.

개발 인도 시점과 비용에 대한 정량적인 측정은 오래 전부터 발전되어 이용되어 왔지만, 신뢰성의 정량화는 최근에야 연구되어 지고 있다. 신뢰성을 명확히 정량화하기 어렵다는 것은 일정 관리와 비용에 대한 요구와 신뢰성에 대한 요구가 서로 충돌되면, 신뢰성이 희생될 가능성이 크다는 것을 의미한다. 이런것을 해결하기 위해 소프트웨어 신뢰성 공학이 필요하다. 소프트웨어 신뢰성 공학은 수용할 수 있는 비용으로 만족할 수 있는 신뢰성을 가진 제품을 알맞은 시간 내에 만들 수 있게 하는 것을 목표로 한다. 예를 들면, 시험 기간이 6개월로 계획된 2년 예정 프로젝트가 있다고 하면, 여기서 시험에 소요되는 비용 및 시간은 요구되는 신뢰성에 매우 밀접하게 연관된다. 소프트웨어 신뢰성 공학을 통해 5개월의 시험으로는 원하는 신뢰성이 달성되었다고 파악되면, 프로젝트에서 4%의 개발 비용을 줄일 수 있다. 소프트웨어 신뢰성 공학으로 인해 발생하는 비용은 전체 개발 비용의 0.1%~0.2%에 불과하므로 소프트웨어 신뢰성 공학은 프로젝트의 생산성을 높일 수 있다.

소프트웨어 신뢰성 공학은 제품이 어떻게 사용될지와 주요 품질 요소를 정량화함으로써 이루어진다. 운영 프로파일 (Operational Profile)을 작성함으로써 제품이 사용자 환경에서 어떻게 사용될지를 예측하고, 이를 토대로 자주 사용하거나 고객에게 심각한 영향을 미치는 기능을 분별해내서 개발 단계에 자원 (테스트케이스, 검토 시간 및 인원, 시험 시간)을 합리적으로 할당할 수 있다. 그리고 고객이 중요하게 여기는 품질 요소 (개발 기간, 비용, 신뢰성)를 정량화함으로써 각 품질 요소의 목표치가 서로 균형을 이루게 할 수 있다.


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