본문 바로가기
공부/소프트웨어공학

[소프트웨어공학] 중대한 시스템1 (서론)

by 사당동호랭이 2023. 7. 22.

 소프트웨어 고장은 비교적 일반적이다. 대부분의 경우에 이러한 고장은 불편하지만 심각하거나 장기간 손해를 입히지는 않는다. 그러나 어떤 시스템 고장은 중요한 경제적 손실과, 물질적 피해, 혹은 사람의 생명에 위협이 될 수 있다. 이러한 시스템을 중대한 시스템(critical system)이라 한다. 중대한 시스템은 사람 혹은 기업이 의존하는 기술적 혹은 사회-기술적 시스템이다. 만약 시스템이 고장 나면, 생각한 것보다 심각한 문제나 중요한 손실이 초래될 수 있다. 

 중대한 시스템에는 다음과 같은 세 가지 유형이 있다.

 

  

 1. 안전성 중심 시스템 : 시스템의 고장으로 인해 부상을 당하거나, 생명을 잃거나, 심각한 환경 파괴를 가져올 수 있다. 화학 공장에서의 제어 시스템이 그 예이다.

 2. 임무 중심 시스템 : 시스템의 고장으로 인해 목표를 향하는 활동의 실패를 초래한다. 이렇나 시스템의 예로는 비행기의 항법 시스템을 들 수 있다.

 3. 비즈니스 중심 시스템 : 시스템의 고장으로 인해 그 시스템을 사용하는 사업에 대한 매우 높은 비용의 대가를 치러야 하는 경우이다. 이러한 시스템의 예로는 은행의 고객 계정 시스템을 들 수 있다. 

 

 중대한 시스템의 가장 중요한 특성은 확실성이다. 확실성 (dependability)이란 용어는 가용성, 신뢰성, 안전성, 보안성과 같은 시스템의 속성을 다루기 위해서 라프리에 의해서 제안되었다. 이러한 특성은 복잡하게 얽혀 있어서, 한마디로 이러한 모든 것을 설명할 수는 없다.

 확실성이 중대한 시스템의 가장 중요한 특성인 이유는 다음과 같다.

 

 1. 신뢰할 수 없고, 보안이 잘 안 되면 사용자가 시스템을 거부한다. 만약 시스템을 믿지 못하면 시스템을 거부할 것이다. 더군다나, 그 회사 제품도 믿을 수 없다는 생각에 그 회사의 다른 제품을 사용하거나 구입하지도 않게 된다.

 2. 시스템 고장 비용이 막대하다. 원자로 제어 시스템 혹은 항공관제 시스템과 같은 응용시스템의 경우, 시스템 고장에 대한 비용은 제어 시스템의 비용보다 훨씬 더 크다.

 3. 믿을 수 없는 시스템은 정보 손실이 생길 수 있다. 데이터를 수집하고 유지하는 데 드는 비용이 매우 많이 소모된다. 때로는 그것을 처리하는 시스템보다 더 가치가 있을 수 있다. 데이터 훼손을 막기 위해 가치 있는 데이터를 복제하는 데 많은 노력과 돈이 사용된다.

 

 중대한 시스템의 고장에 비용이 많이 든다는 것은 신뢰성 있는 방법과 기술이 시스템 개발을 위해 사용되어야 한다는 것을 의미한다. 결과적으로 중대한 시스템은 광범위한 실제 경험을 통하지 않은 새로운 기술보다는 잘 실행된 기술을 사용하여 개발된다. 중대한 시스템의 개발자는 새로운 기술과 방법을 포용하기보다는 자연히 보수적이다. 새로운 기술은 좋은 것처럼 보이지만 장기간 사용 시의 문제점이 밝혀지지 않았기 때문에 새로운 기술보다는 강점과 약점을 잘 알고 있는 과거의 기술을 선택한다.

 중대하지 않은 시스템의 경우에는 비용대비 효과가 좋지 않은 비싼 소프트웨어 공학기술이라도, 때로는 중대한 시스템의 개발에 사용될 수도 있다. 예를 들어, 소프트웨어 개발을 위한 정형화된 수학적 방법이 안전성 중심 시스템과 보안성 중심 시스템에 성공적으로 사용되어 왔다. 이러한 정형 기법이 사용되는 이유는 시험의 양을 줄이는 데 많은 도움이 되기 때문이다. 중대한 시스템의 경우는 증명과 검증 비용이 매우 높아서 전체 시스템 개발 비용의 약 50% 이상이 된다.

 비록 적은 수의 제어 시스템만 완전히 자동화되었지만, 대부분의 중대한 시스템은 컴퓨터 기반 시스템의 운영을 사람이 감시하고 제어하는 사회-기술적 시스템이다. 중대한 시스템은 고장으로 인한 비용이 많이 들기 때문에 예상치 못한 상황과 무엇인가가 잘못되어 가고 있는 상황에서 어려움을 복구할 수 있는 사람이 필요하다.

 물론 시스템 운영자는 문제를 복구할 수 있지만 잘못하면 문제를 더 일으킬 수도 있다. 중대한 시스템에서 고장이 날 수 있는 세 가지 '시스템 컴포넌트'는 다음과 같다.

 

 1. 설계상의 실수, 생산 시의 부속품의 오류, 혹은 부속품이 수명을 다 했기 때문에 시스템 하드웨어가 고장 난다.

 2. 분석, 설계 혹은 구현 시의 오류 때문에 시스템 소프트웨어가 고장 난다.

 3. 시스템의 운영자가 시스템을 제대로 운영하지 못해서 고장 난다. 하드웨어나 소프트웨어는 더욱 신뢰성이 높아지므로 운영 시의 고장이 시스템 고장의 가장 큰 단일 원인 중의 하나이다.

 

 

 이러한 고장은 상호 관련성이 있다. 고장 난 하드웨어 부속품은 시스템 운영자가 예상치 않은 상황에 직면해야 한다는 의미이고 추가적인 일이 된다. 이것으로 인해 스트레스를 받게 되고 스트레스를 받고 있는 사람은 자주 실수를 하게 된다. 이것 또한 소프트웨어 오류의 원인이 되고 운영자에게 더 많은 일과 더 많은 스트레스가 된다.

 결과적으로 중대한 시스템의 설계자는 시스템의 한 측면에 초점을 맞추기보다는 시스템의 전체에 초점을 맞추어야 한다. 만약 하드웨어, 소프트웨어, 운영 프로세스가 시스템의 다른 부분의 약점에 대한 고려 없이 분리되어 설계된다면, 시스템의 인터페이스에서 오류가 생길 확률이 커진다.