소프트웨어 공학 - Chpater 10. 확실성 있는 시스템
소프트웨어 공학 수업을 들을 때는 힘들었는데 정보 처리 기사 자격증을 따려는 지금은 꽤 도움이 되고 있다.
역시 공부를 하면 손해는 없는 것 같다.
확실성 있는 시스템 목차
- 확실성 있는 시스템
- 확실성의 특성들
- 사회기술적 시스템
- 중복성과 다양성
- 확실성 있는 프로세스
- 정형 기법과 확실성
System Dependability [292p]
-
소프트웨어 시스템을 신뢰할 수 있어야 한다
- 확실성
- 가용성 (Availability), 신뢰성 (Reliability), 안전성 (Safety), 보안성 (Security) 등의 시스템 특성
- 프로그램을 사용하기 전에 결함을 발견
- 확실성의 5가지 주요 측면
- 가용성 (Availability)
- 어떤 주어진 시간에 시스템이 작동 중이고 사용자에게 유용한 서비스를 제공할 확률
- 신뢰성 (Reliability)
- 주어진 기간 동안 시스템이 사용자가 기대하는 대로 정확하게 서비스를 제공할 확률
- 정확성, 정밀성, 적시성 포함
- 안전성 (Safety)
- 시스템이 사람 혹은 환경에 손상을 입힐 가능성
- 보안성 (Security)
- 시스템이(우연적/의도적) 침입을 막아낼 가능성
- 무결성, 기밀성 포함
- 복원성
- 시스템이 장비 고장, 사이버 공격 등과 같은 파괴적 사건의 존재 하에서 중요한 서비스를 얼마나 잘 유지할 수 있는가
- 가용성 (Availability)
- 확실성이 중요한 이유
- 시스템 장애가 많은 사람들에게 영향
- 신뢰할 수 없고 안전하지 않고 보안성이 없는 시스템은 사용 불가
- 막대한 시스템 장애 비용
- 시스템의 정보 손실로 인한 피해
-
확실성 있는 소프트웨어를 개발하기 위해 확인해야 하는 사항들
- 소프트웨어 명세화 및 개발 과정에서 우발적으로 시스템에 오류가 도입되는 것을 피한다
- 시스템의 확실성에 영향을 주는 잔여 오류를 발견하는데 효과적인 검증 및 확인 프로세스를 설계한다.
- 장애가 발생된 후에도 작업을 계속할 수 있게 결함 내성을 가지도록 시스템을 설계한다
- 시스템의 가용성 및 보안성을 손상시킬 수 있는 외부 공격으로부터 보호하는 메커니즘을 설계한다
- 운영 환경에 맞게 시스템 및 지원 소프트웨어를 구성한다
- 외부 사이버 공격을 인식하고 이러한 공격에 저항하기 위한 시스템의 기능을 포함한다
- 중요한 데이터의 손실없이 시스템 장애 및 사이버 공격으로부터 신속하게 복구될 수 있도록 시스템을 설계한다
System Dependability [293p]
- 중대한 시스템 (Critical System)
- 시스템 장애가 사람이나 환경에 피해를 주거나 큰 경제적 손실을 줄 수 있는 시스템
- 안전성 중심 시스템, 임무 중심 시스템, 비즈니스 중심 시스템
- **중대한 시스템을 개발하는 데 비용이 매우 많이 든다. **
- 장애가 매우 드물게 발생하도록 개발되어야 할 뿐만 아니라 장애가 발생할 경우에 복구하는 메커니즘을 포함해야 한다.
-
확실성이 높지 않아도 유용한 소프트웨어도 존재
- 장애의 원인 (Cause of Failure)
- 하드웨어 장애 : 부품 고장, 물리적 환경, 부품 수명
- 소프트웨어 장애 : 명세 오류, 설계 오류, 구현 오류
- 운영 시의 장애 : 의도하지 않은 방법으로 시스템을 사용
Principal Properties [294p]
- 가용성 (Availability)
- 어떤 시점에 시스템이 작동 (서비스를 제공)할 확률
- 신뢰성 (Reliability)
- 주어진 기간 동안 시스템이 (정확하게) 서비스를 제공할 확률
- 정확성 (Correctness)
- 정밀성 (Precision)
- 적시성 (Timeliness)
- 주어진 기간 동안 시스템이 (정확하게) 서비스를 제공할 확률
- 안전성 (Safety)
- 시스템에 사람 또는 환경에 손상을 주지 않는지
- 보안성 (Security)
- 시스템이 (우연한/의도적인) 침입을 막을 수 있는지
- 무결성 (Integrity)
- 기밀성 (Confidentiality)
- 시스템이 (우연한/의도적인) 침입을 막을 수 있는지
- 복원성 (Resilience)
- 시스템이 장비 고장, 공격 등 아래에 중요한 서비스를 잘 유지하는지
Other dependability Properties [295p]
- 수리가능성 (Repairability)
- 시스템이 얼마나 ᄈᆞᆯ리 수리될 수 있는지
- 가용성과 관련
- 유지보수성 (Maintainability)
- 새로운 요구사항을 수용하기 위한 시스템 변경이 용이한지
- 오류내성 (Error tolerance)
- 사용자 입력/ 조작 오류를 방지하고 감내할 수 있는지
- 사용성 (Usability) 과 관련
Cost / Dependability Curve
- 결함 내성 (Fault Tolerance)
- 결함이 있어도 시스템이 서비스를 계속 제공할 수 있는 능력
- 잘못된 상태를 감지하고 장애가 발생하기 전에 복구하는 코드 필요
- 확실성이 높으면 비용도 많이 필요하다
- 결함 내성의 정의
-
장애가 발생하기 전에 결함으로부터 복구하기 위한 여분의 코드를 포함해야 한다는 것을 의미
-
시스템이 실행될 때마다 추가적인 검사가 필요하기 때문에 이것은 시스템의 성능에 영향을 미친다.
-
따라서 설계자는 일반적으로 성능과 확실성 사이의 상쇄관계를 고려해야 한다.
-
결론: 검사가 시스템을 느리게 하기 때문에 검사를 생략할 수 있으나, 그 결과로 결함이 감지되지 않아 시스템 장애가 발생할 수 있다.
-
Redundancy and diversity [302p]
- 고려사항
- 시스템 컴포넌트의 장애는 피할 수 없음
- 컴포넌트의 장애가 시스템 전체 장애로 이어지지 않도록 시스템을 설계해야 함
- 중복성 (Redundancy)
- 시스템 컴포넌트의 장애가 일어났을 때 사용할 수 있는 여분의 기능을 시스템에 포함시킴
- 다양성 (Diversity)
- 같은 방식으로 실패하지 않도록 서로 다른 중복 컴포넌트를 사용
- 중복성과 다양성 예시
- 가용성을 높이기 위해 중복된 서버 사용
- 서로 다른 유형의 서로 다른 운영체제의 서버를 사용
- 확실성을 위해 설계된 소프트웨어 시스템은 다른 시스템 컴포넌트와 동일한 기능을 제공하는 중복된 컴포넌트를 포함할 수 있다.
- 주 컴포넌트가 실패하면 중복 컴포넌트로 전환된다
- 중복 컴포넌트가 다양하면 컴포넌트의 공통 결함이 시스템 장애로 이어지지 않음
- 시스템의 상태를 검사하고 복구하는 코드를 포함시킬 수 있음
- 문제점 (중복성과 다양성을 피하는 것이 낫다는 주장이 존재)
- 중복성과 다양성의 도입에 따라 버그가 생길 수 있음
- 다양성과 중복성은 시스템을 더 복잡하게 만들고 일반적으로 이해하기 어렵게 한다
- 컴포넌트 장애를 감지하고 다른 컴포넌트로 전환하는 기능이 있어야 하므로 시스템의 복잡도가 올라감
- 추가적인 복잡성은 프로그래머가 오류를 만들 가능성을 높이고 시스템을 점검하는 사람이 이러한 오류를 찾아낼 가능성을 낮춘다
- 복잡도가 높아지면 결함이 발생할 확률도 높아진다.
- 중복성과 다양성의 도입에 따라 버그가 생길 수 있음
Dependable Processes [304p]
- 확실성 있는 프로세스의 특징
- 명시적으로 정의 (Explicitly Defined)
- 반복 가능 (Repeatable)
- 명시적으로 정의된 프로세스
- 정의된 프로세스 모델이 있음
- 개발팀이 프로세스를 준수했다는 데이터가 수집되어야 한다
- 반복 가능한 프로세스
- 개인의 해석과 판단에 의존하지 않는 프로세스
- 누가 개발에 참여하는지에 관계 없이 프로세스가 반복될 수 있어야 한다
Dependable Processes [305~306p]
- 확실성 있는 프로세스 활동
- 요구사항 검토
- 요구사항 관리
- 정형 명세
- 시스템 모델링
- 설계 및 프로그램 인스펙션
- 정적 분석
- 테스트 계획 수립 및 관리
-
잘 정의된 품질 관리 및 변경 관리 프로세스가 필요
- 확실성 있는 소프트웨어 개발에 애자일 방법 사용을 고려
- 주로 계획 기반 프로세스를 이용
댓글남기기