시스템(system)이란 말은 널리 쓰이는 말 중의 하나이다. 우리는 컴퓨터 시스템, 운영체제, 급여 시스템, 교육 시스템, 정부 시스템에 관하여 자주 언급한다. 여기서 사용된 시스템이란 말은 각자 다르게 사용되고 있다. 시스템이라는 것은 그것의 부품의 합이라는 것 이상의 의미를 지닌다.
정부 시스템과 같은 매우 추상적인 시스템은 이 책의 범주에서 벗어난다. 결론적으로 여기서는 컴퓨터를 포함하는 시스템과 통신, 내비게이션 지원, 급여 계산과 같은 특정 목적을 갖는 시스템에 초점을 맞춘다. 그러므로 이러한 의미를 가진 시스템을 다음과 같이 정의할 수 있다.
시스템은 어떤 목적을 성취하기 위해서 함께 작동하는 서로 연관된 컴포넌트의 의도적인 모양이다.
이러한 일반적인 정의는 매우 방대한 시스템을 포함한다. 예를 들어, 펜과 같은 매우 간단한 시스템은 세 개 혹은 네 개의 하드웨어 컴포넌트로 구성되어 있다. 반면에 수천개의 하드웨어와 소프트웨어, 그리고 컴퓨터 시스템으로부터 얻은 정보에 의해 결정을 내리는 사람으로 구성된 항공관제 시스템도 있다.
소프트웨어를 포함하는 시스템은 다은 두 부류로 나눌 수 있다.
- 기술적 컴퓨터 기반 시스템 : 프로시저와 프로세스를 포함하지 않는 하드웨어와 소프트웨어로 구성된 시스템을 의미한다. 이러한 시스템의 예로서 텔레비전, 휴대폰, 개인용 PC 등이 있다. 사람과 조직은 어떠한 목적으로 기술적 시스템을 사용하지만 그 목적이 시스템의 일부분은 아니다. 예를 들어, 저자가 사용하고 있는 워드 프로세서 그 자체의 목적이 책을 쓰는 것만은 아니다.
- 사회-기술적 시스템 : 하나 또는 그 이상의 기술적 시스템을 포함하지만 중요한 것은 어떠한 더 광범위한 목적을 성취하기 위해서 사용될 지식을 포함한다. 이것은 정의된 운영 프로세스, 시스템의 필수적인 부분으로서 사람(운영자)을 포함하고 조직의 정책과 국가의 법과 규제에 의해서 통제받는다.
사회-기술적 시스템의 기본적 특징은 다음과 같다.
1. 시스템의 일부분이라기보다는 전체로서의 특성인 창발성(emergent property)을 갖는다. 창발성은 컴포넌트 사이의 관계와 시스템 컴포넌트에 모두 의존한다. 시스템이 너무 복잡하기 때문에 창발성은 시스템이 결합된 후에 추정될 수 있다.
2. 창발성은 종종 비결정적(nondeterministic)이다. 이것은 특정 입력에 대해 늘 같은 출력이 생성되지 않는다는 것을 의미한다. 시스템의 행위는 운영하는 사람에 따라 다르며, 사람은 늘 같은 방법으로 대응하지 않는다. 또한 시스템의 사용은 시스템 컴포넌트 사이에 새로운 관계를 창출할 수도 있으며 그것의 행위를 변경할 수도 있다.
3. 시스템이 조직의 목표를 지원하는 정도는 시스템 그 자체에 의존하지 않는다. 그것은 목표의 안정성, 조직의 목표 간의 관계와 상충, 그리고 조직의 인적 구성이 어떻게 그 목표를 이해하느냐에 따라 다르다. 새로운 경영진은 시스템이 지원하도록 설계된 조직의 목표를 잘 해석할 수도 있고, '성공적'인 시스템이 '실패' 한 시스템이 될 수도 있다.
소프트웨어 엔지니어는 이러한 시스템에서 소프트웨어의 중요성 때문에 사회-기술적 시스템과 시스템 공학에 대한 지식을 가져야 한다. 예를 들어, 1969년 달에 인간을 착륙시킨 미국 아폴로 우주선에는 10메가바이트보다 작은 규모의 소프트웨어가 있었지만 콜롬버스 우주 센터의 제어 시스템에는 100메가바이트의 제어 시스템 소프트웨어가 있었다.
모든 시스템의 특징은 시스템의 컴포넌트 행위와 특성이 복잡하게 얽혀 있다는 것이다. 각 시스템 컴포넌트의 성공적인 운영은 다른 컴포넌트의 기능에 달려 있다. 이것은 소프트웨어는 프로세스가 잘 운영되어야만 작동할 수 있다는 것을 의미한다 계산을 정의하는 소프트웨어 시스템이 성공적으로 설치되어야만 프로세서는 계산을 수행할 수 있다.
시스템은 계층적 구조를 가지며 다른 시스템을 포함한다. 예를 들어, 경찰의 지휘 및 통제 시스템은 사고의 상세한 위치를 알려 주는 지리 정보 시스템을 포함한다. 이러한 다른 시스템을 서브시스템(sub-system) 이라고 한다. 서브시스템의 특징은 자기만의 독립적인 시스템으로 운영될 수 있다는 것이다. 그러므로 같은 지리 정보 시스템이라도 다른 시스템에서 사용될 수 있다.
소프트웨어는 근본적으로 유연성이 있기 때문에, 예상치 않은 시스템의 문제는 대개 소프트웨어 엔지니어가 해결할 수 있다. 레이더가 설치된 곳에 이미지 잔상이 생긴다고 가정하자. 그렇다고 해서 레이더를 덜 방해받는 곳으로 옮기는 것은 비현실적이기 때문에, 시스템 소프트웨어가 이 잔상을 없앨 수 있는 다른 방법을 찾아내야 한다. 그 해결책은 소프트웨어의 이미지 처리 능력을 향상시켜서 잔상을 제거하도록 하는 것이다. 이것은 소프트웨어 속도를 저하시켜 사용하지 못하게 할 수도 있다. 이 문제는 '소프트웨어 오류' 라기보다는 시스템 전체로서의 설계상의 오류이다.
이러한 상황에서 소프트웨어는 추가적인 하드웨어 비용 없이 소프트웨어의 성능을 향상시킬 수 있는 방법을 고려하게 된다. 소위 소프트웨어 오류는 원래 소프트웨어가 갖고 있는 문제가 아니라 시스템 공학의 요구사항에 맞게 소프트웨어를 변경하는 과정에서 생긴 결과이다. 제어 소프트웨어는 사용하는 장비가 여러가지 제약에 대처할 수 있도록 만들어져야 하는 것이다. 그 예가 바로 덴버 공항의 수하물 처리 시스템이다.
소프트웨어 공학은 복잡한 컴퓨터 기반 사회-기술적 시스템의 성공적인 개발에 매우 중요하다. 우리는 단순히 소프트웨어에 대해서만 관여하는 것이 아니라, 소프트웨어가 다른 하드웨어 및 소프트웨어 시스템과 어떻게 작동하며 지원하는지에 관한 것을 항상 염두에 두고 일해야 한다. 이러한 지식은 소프트웨어의 한계를 이해하고 좀 더 나은 소프트웨어와 시스템 공학 그룹의 동등한 구성원으로서 참여해야 한다는 것을 이해하는 데 도움을 준다.
2.1 창발성
한 시스템 내에 있는 컴포넌트 간의 복잡한 관계는 시스템이 단지 부품의 합이라는 것 이상을 의미한다. 그것은 전체로서의 시스템 특성을 갖는다. 이러한 창발성은 시스템의 특정 부분 때문일 수는 없다. 그것은 시스템 컴포넌트가 통합되었기 때문에 나타난 것이다. 어떤 특성은 같은 유형의 서브시스템으로부터 나온 것이라고도 할 수 있지만, 대개는 개개의 시스템 컴포넌트의 특성으로부터 나온 것이 아니라 복잡한 서브시스템들의 관계로부터 나타난 현상이다.
특성 | 내용 |
부피 | 시스템의 부피는 어떻게 컴포넌트가 결합되고 연결되었는지에 따라 달라진다 |
신뢰성 | 시스템 신뢰성은 컴포넌트 신뢰성에 의존하지만, 예상치 못한 상호작용에 의해 새로운 형태의 고장이 일어나고, 시스템의 신뢰성에 영향을 미칠 수 있다 |
보안성 | 시스템의 보안성은 쉽게 측정될 수 없는 복잡한 특성이다. 공격은 시스템 설계자가 예측할 수 없는 방법으로 고안되기 때문에, 내장된 안전 장치를 파괴할 수 있다 |
수리가능성 | 이 특성은 시스테믜 문제를 일단 발견한 우에 얼마나 쉽게 수정하는가를 나타낸다. 이 특성은 문제를 진단하고, 결함이 있는 컴포넌트들을 평가하여 이 컴포넌트들을 수정하거나 교체할 수 있는 능력에 의해 좌우된다 |
사용성 | 이 특성은 어떻게 쉽게 시스템을 사용하느냐에 관한 것이다. 이것은 기술적 시스템 컴포넌트, 운영자, 운영 환경에 의존한다. |
창발성의 예
창발성에는 두 가지 유형이 있다.
1. 기능적 창발성 : 어떠한 목적을 달성하기 위해 시스템의 모든 부분이 작동했을 때 나타난다. 예를 들어, 자전거는 모든 부품들이 결합되었을 때 운송 장치로서의 특성을 갖는다.
2. 비기능적 창발성 : 운영 환경 내에 있는 시스템의 행위와 관계가 있다 비기능적 특성의 예로서는 신뢰성, 성능, 안전성, 보안성 등이 있다. 이러한 것이 최소한의 기준에 다다르지 않으면 고장으로 간주되어 시스템을 사용할 수 없기 때문에 매우 중요하다. 어떤 사용자는 특정 기능이 없어도 시스템을 사용할 수 있지만 안전하지 않거나 너무 느리면 모든 사용자에게 거부될 가능성이 높다.
창발성의 복잡성을 보여주기 위해서, 시스템 신뢰성을 생각해 보자. 신뢰성은 각 부품 수준에서보다는 시스템 수준에서 생각해야 할 복잡한 개념이다. 시스템에서 각 부품은 독립적이기 때문에 한 부품의 고장은 시스템 내에서 다른 부품의 동작에 영향을 미친다. 따라서 한 부품의 고장이 시스템 내에서 어떻게 퍼져 나가는지를 예측하기가 힘들다. 결과적으로 시스템 부품의 신뢰성으로부터 얻은 데이터로 전체 시스템을 평가하기가 힘들다.
시스템의 전체 신뢰성에 영향을 미치는 것에는 다음과 같은 세 가지 종류가 있다.
1. 하드웨어 신뢰성 : 한 하드웨어 부품이 고장 날 확률은 얼마이며, 그 부품은 수리하는데 얼마나 걸리는가?
2. 소프트웨어 신뢰성 : 하나의 시스템 컴포넌트가 잘못된 결과를 생성할 확률은 얼마이며, 그 소프트웨어 고장이 소프트웨어 장착되지 않은 하드웨어 고장과 구분될 수 있는가? 고장은 순간적이기 때문에 잘못된 결과가 생성된 후에도 시스템은 계속 작동한다.
3. 운영자 신뢰성 : 시스템 운영자가 오류를 범할 확률은 얼마인가?
위의 세 가지 모두 밀접하게 연관되어 있다. 하드웨어 고장은 소프트웨어에서 예상되는 입력 값 범위 외의 값을 생성할 수 있다. 그럴 경우의 소프트웨어는 예상치 못한 행동을 한다. 운영자 오류는 시스템 고장이 일어났을 때 스트레스가 될 수 있다. 운영자 오류는 하드웨어에 더 많은 오류가 일어나도록 하는 스트레스가 된다. 초기의 회복 가능한 오류도 완전히 시스템을 멈춰야만 하는 심각한 문제로 발전될 수 있다.
성능, 사용성과 같은 다른 특성도 신뢰성처럼 평가하기가 힘들지만 시스템이 운영된 후에는 측정할 수 있다. 안전성과 보안성 같은 특성은 다른 문제에 직면한다. 시스템의 전체 행위와 관련된 속성과 관계가 있는 것이 아니라 시스템이 보여줄 수 없는 행위와 연관되어 있다. 보안 시스템은 모든 가능한 접속을 예측하고 금지하는 것이 불가능하기 때문에 허가받지 않은 접속을 금지하도록 하는 시스템이다. 그러므로 기본적으로 보안성을 평가하는 것은 가능하지만, 시스템이 안전하지 않다는 것은 다른 사람이 침입했을 경우에만 검증된다.
'공부 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 사회-기술적 시스템3 (시스템 통합에서 폐기까지) (0) | 2023.07.20 |
---|---|
[소프트웨어공학] 사회-기술적 시스템2 (시스템공학) (0) | 2023.07.19 |
[소프트웨어공학] 서론3 (소프트웨어 엔지니어의 책임) (0) | 2023.07.16 |
[소프트웨어공학] 서론2 (소프트웨어 프로세스 모델과 소프트웨어 공학) (0) | 2023.07.15 |
[소프트웨어공학] 서론1 (소프트웨어란??) (0) | 2023.07.15 |