3.1 단순한 안전성 중심 시스템
장비 및 기계의 제어 시스템으로부터 정보 시스템 혹은 전자상거래 시스템에 이르기까지 다양한 종류의 컴퓨터 기반의 중대한 시스템이 존재한다. 그러한 시스템 개발에 고급 소프트웨어 공학 기술이 사용되었기 때문에 소프트웨어 고학 서적에서 훌륭한 사례 연구가 될 수 있다. 그러나 그것이 운영되는 응용 도메인에 대한 제약과 특징을 알아야 하기 때문에 이해하는 것은 매우 어려울 수도 있다.
결과적으로, 이 책에서 저자가 사용하는 중대한 시스템의 사례 연구는 췌장의 작동을 시뮬레이션하는 의료 시스템이다. 이것을 선택한 이유는 우리 모두가 의료 문제를 이해하고 있고, 왜 안전성과 신뢰성이 이러한 형태의 시스템에서 중요한지가 명백하기 때문이다. 이 시스템은 당뇨병으로 고생하는 사람을 위해서 고안되었다.
당뇨병은 사람의 췌장이 호르몬의 일종인 인슐린을 충분히 생산하지 못하기 때문에 생기는 비교적 흔한 질환이다. 인슐린은 피 속의 글리코스를 생산하게 도와준다. 당뇨병에 대한 통상적인 치료는 인공적으로 생산된 인슐린을 규칙적으로 두여하는 것이다. 당뇨 환자는 피 속에 있는 혈당 수치를 측정하여 투여될 인슐린의 양을 결정한다.
이러한 치료 방법의 문제는 피 속의 인슐린 수치가 피 속에 있는 포도당에 의존하는 것이 아니라 인슐린을 주사하는 시간에 의존한다는 것이다. 이것은 혈당이 너무 낮아지거나 매우 높아질 수도 있게 한다. 저혈당은 더 심각한 상태로서 일시적으로 뇌기능을 약화시킬 수 있고 의식을 잃거나 사망에 이룰 수 있다. 장기적으로는 계속적인 고혈당은 시력 손상, 신장, 심장 등에 문제를 일으킬 수 있다.
소형 센서 기기의 발달로 자동적으로 인슐린을 투여할 수 있는 시스템이 가능하게 되었다. 이 시스템은 혈당 수치를 측정하여 적당한 양의 인슐린을 투여한다. 이와 같은 인슐린 투여 시스템은 병원의 환자에게는 이미 사용되고 있다. 장래에는 이것을 환자의 몸에 영구적으로 붙이고 다닐 수 있는 시스템이 가능해질 것이다.
소프트웨어 제어 인슐린 투여 시스템은 환자의 몸에 삽입된 마이크로 센서를 사용하여 혈당 수치에 비례하는 값을 측정하여 작동할 수 있다. 이것이 펌프 제어기에 보내지고 제어기는 혈당 수치를 계산하고 필요한 인슐린을 계산하여 영구적으로 부착된 바늘로 인슐린을 투여한다.
3.2 시스템 확실성
우리 모두는 컴퓨터 시스템의 고장 문제에 친숙하다. 분명한 이유 없이, 컴퓨터 시스템은 때때로 요청한 서비스를 제공하지 못한다. 컴퓨터에서 작동하는 프로세스는 기대한 대로 작동하지 않을 수도 있으며, 때로는 시스템이 관리하는 데이터를 파괴한다. 우리는 이러한 고장에 익숙해져 있으며, 우리가 사용하고 있는 개인용 컴퓨터를 완전하게 신뢰하지는 않는다.
컴퓨터 시스템의 확실성은 그것을 신뢰할 수 있는 정도의 수준에 해당되는 시스템의 특성이다. 신뢰한다는 것은, 시스템이 기대하는 대로 작동하고 시스템을 정상적으로 사용할 경우 고장나지 않는다는 사용자의 확신 정도를 의미한다. 이 특성은 숫자로 표현될 수 없다. 그러나 우리가 시스템을 신뢰하는 정도에 따라 '믿을 수 없다', '매우 믿을 만하다', '실제로 믿을 만하다'와 같은 말로 표현할 수 있다.
믿음과 유용성은 물론 같은 것을 의미하지 않는다. 이 책을 저술하기 위해서 사용할 워드 프로세서는 매우 믿을 만한 시스템이라고 생각하지는 않지만 쓸 만하다. 하지만 시스템을 믿지 못하기 때문에 작업한 것을 자주 저장하고 여러 개의 사본을 만들어 둔다. 시스템이 고장 날 경우 발생할 수 있는 손실을 적게 할 수 있는 행동을 취함으로써 시스템의 확실성이 부족한 것을 보완한다.
확실성에는 네 가지 측면이 있다.
1. 가용성(availavility) : 시스템의 가용성은 어느 때라도 시스템이 서비스를 제공하고 사용할 수 있는 확률을 말한다.
2. 신뢰성(reliability) : 시스템의 신뢰성은 주어진 기간 동안 시스템이 사용자가 기대하는 대로 서비스를 제공할 확률을 의미한다.
3. 안전성(safety) : 시스템의 안전성은 시스템이 사람 혹은 그것의 환경에 손상을 입힐 확률을 의미한다.
4. 보안성(security) : 시스템의 보안성은 시스템이 사고 혹은 의도적인 침입을 얼마나 막을 수 있는지를 의미한다.
이것은 비슷한 여러 개의 다른 특성으로 나눌 수 있는 복잡한 특성이다. 예를 들어, 보안성은 무결성(integrity, 시스템 프로그램과 데이터가 손상되지 않음)과 기밀성(confidentiality, 권한이 있는 사람만 정보에 접근 가능함)을 포함한다. 신뢰성은 정확성(correctness, 명세와 일치하는 시스템 서비스를 보장), 정밀성(precision, 정보가 적절한 상세 수준으로 전달됨), 적시성(timeliness, 정보가 요구될 때 전달됨)을 포함한다.
가용성, 보안성, 신뢰성, 안전성은 모두 확실성과 관계가 있는 특성이다. 안전한 시스템 운영은 사용가능하고 믿을 수 있는 시스템 운영에 달려 있다. 시스템은 데이터가 침입자에 의해 파괴될 수 있기 때문에 신뢰할 수 없게 될 수 있다. 만약 안전하다고 여겨진 시스템이 바이러스에 감염되었다면 더 이상 안전한 운영을 기대할 수 없다. 시스템의 확실성 개념은 이러한 특성들로 둘러싸여 있기 때문에 이 특성들은 서로 밀접하게 연관된다.
위의 네 가지 측면 외에 다른 시스템 특성 또한 확실성에 영향을 미친다.
1. 수리가능성 (repairability) : 시스템 고장은 필연적이다. 그러나 시스템이 빨리 수리될 수 있다면, 시스템 고장에 의한 운영 중단은 최소화될 수 있다. 그렇게 하기 위해서는 문제를 진단하고 고장난 부품을 찾아내서 고칠 수 있어야 한다. 소프트웨어에서의 수리가능성은 시스템을 사용한 조직이 소스 코드에 접근하고 수정할 수 있는 기술을 가졌을 때 향상된다. 불행히도 이것은 제3자가 개발한 시스템과 블랙박스 부품을 이용하는 것이 점점 증가되기 때문에 더욱 힘들어진다.
2. 유지보수성 (maintainability) : 시스템을 사용함에 따라 새로운 요구사항이 생긴다. 새로운 요구사항을 수용하기 위해 시스템을 변경하여 시스템의 유용성을 유지하는 것이 중요하다.
3. 생존가능성 (survivability) : 인터넷 기반 시스템에서 가장 중요한 속성은 보안성 및 가용성과 밀접한 관계가 있는 생존가능성이다. 생존가능성은 공격을 받거나 시스템의 일부가 고장이 나더라도 서비스를 계속할 수 있는 시스템의 능력을 말한다. 생존가능성은 주요 시스템 부품을 찾아내어 그것이 최소한의 서비스를 제공할 수 있도록 하여 이루어진다. 생존가능성을 향상시키기 위한 세 가지 전략, 즉 공격에 대한 저항, 공격 인식, 그리고 공격에 대한 피해를 복구하는 것이다.
4. 오류 내성 (error tolerance) : 이 특성은 사용성의 일부분으로 생각할 수 있는 것으로서 시스템은 사용자 입력 오류를 피하고 감내할 수 있는 정도를 반영한다. 사용자 오류가 일어나면 시스템은 가능한 한 오류를 발견하고 자동적으로 수정하거나 아니면 사용자에게 데이터를 재입력하도록 요구해야 한다.
가용성, 신뢰성, 안전성, 보안성은 기본적으로 확실성에 관련되는 특성이다.
물론 이러한 확실성에 관련된 특성은 모든 시스템에 적용가능한 것은 아니다. 인슐린 펌프 시스템에서 가장 중요한 특성은 가용성(필요할 때 작동해야 한다), 신뢰성(정확한 인슐린 양을 투여해야 한다) 및 안전성(위험한 양의 인슐린을 투여해서는 안 된다)이다. 이 경우에 있어서 보안성은 문제가 되지 않는다. 펌프는 기밀 정보가 없으며 네트워크상에서 의도적으로 공격당하지 않기 때문이다.
설계자는 시스템의 성능과 시스템의 확실성 사이의 상쇄 관계(trade-off)를 고려해야 한다. 일반적으로, 높은 수준의 확실성은 시스템 성능에 대한 비용을 감수하고자 달성될 수 있다. 신뢰할 수 있는 소프트웨어는 예외적인 시스템 상태와 시스템 고장으로부터의 시스템의 성능을 약화시키고 소프트웨어에서 요구되는 저장 장치의 비용을 증가시킨다. 그것은 도한 시스템 개발 비용을 상당히 증가시킨다.
시스템의 확실성을 증가시키면 추가적인 설계, 구현, 검증 비용 때문에 개발 비용이 증가하게 된다. 시스템이 그 요구사항에 맞는지를 검사하는 것은 물론 검증 프로세스는 시스템을 신뢰할 수 있는지를 연방 항공청과 같은 외부 기관에서 검증할 수도 있다.
확실성이 높을수록 더 많은 시간을 시험하는 데 할애해야 한다. 비용/확실성 곡선의 지수 특성 때문에, 즉 시스템을 100% 신뢰하도록 하기 위해서는 확실성을 유지하기 위한 비용이 무한히 들기 때문에 불가능하다.
'공부 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 중대한 시스템4 ( 안전성 ) (0) | 2023.07.25 |
---|---|
[소프트웨어공학] 중대한 시스템3 (가용성과 신뢰성) (0) | 2023.07.23 |
[소프트웨어공학] 중대한 시스템1 (서론) (0) | 2023.07.22 |
[소프트웨어공학] 조직, 사람, 컴퓨터 시스템2 (레거시 시스템) (0) | 2023.07.21 |
[소프트웨어공학] 조직, 사람, 컴퓨터 시스템1 (조직의 프로세스) (0) | 2023.07.20 |