728x90
Ch10. 확실성 있는 시스템
📌 [교재] 소프트웨어 공학 10판
[시스템 확실성] System dependability
✅소프트웨어 시스템을 신뢰할 수 있어야 함
✅확실성
- 가용성(availability), 신뢰성(reliability, 안전성(safety), 보안성(security) 등 시스템 특성
✅확실성이 중요한 이유
- 시스템 장애가 많은 사람들에게 영향
- 신뢰할 수 없고 안전하지 않고 보안성이 없는 시스템은 사용 불가
- 막대한 시스템 장애 비용
- 시스템의 정보 손실로 인한 피해
✅중대한 시스템(critical system)
- 시스템 장애가 사람이나 환경에 피해를 주거나 큰 경제적 손실을 줄 수 있는 시스템
- 안전성 중심 시스템, 임무 중심 시스템, 비즈니스 중심 시스템
✅확실성이 높지 않아도 유용한 소프트웨어도 있음
✅장애의 원인(causes of failure)
- 하드웨어 장애 : 부품 고장, 물리적 환경, 부품 수명
- 소프트웨어 장애: 명세 오류, 설계 오류, 구현 오류
- 운영 시의 장애: 의도하지 않은 방법으로 시스템을 사용
10-1. 확실성의 특성들
[확실성 주요 특성] Principal properties
✅가용성 ★ (availability)
- 어떤 ‘시점’에 시스템이 작동(서비스를 제공)할 확률
✅신뢰성 ★ (reliability)
- 주어진 ‘기간’ 동안 시스템이 (정확하게) 서비스를 제공할 확률
: 정확성(correctiness), 정밀성(precision), 적시성(timeliness) 포함
✅안전성 ★ (safety)
- 시스템에 ‘사람 또는 환경’에 손상을 주지 않는지
✅보안성 ★ (security)
- 시스템이 (우연한/의도적인) ‘침입’을 막을 수 있는지
: 무결성(integrity), 기밀성(confidentiality) 포함
✅복원성 ★ (resilience)
- 시스템이 장비 고장, 공격 등 아래에 중요한 서비스를 잘 유지하는지
[다른 확실성 특성들] Other dependability properties
✅수리가능성 (repairability)
- 시스템이 얼마나 빨리 수리될 수 있는지
- 가용성과 관련
✅유지보수성 (maintainability)
- 새로운 요구사항을 수용하기 위한 시스템 변경이 용이한지
✅오류 내성 (error tolerance)
- 사용자 입력/조작 오류를 방지하고 감내할 수 있는지
- 사용성(usability)과 관련
cf. 11장. ‘결함 내성’ 과 다르다.
결함 내성(fault tolerance)
- 결함이 있어도 시스템이 서비스를 계속 제공할 수 있는 능력
- 잘못된 상태를 감지하고 장애가 발생하기 전에 복구하는 코드 필요
10-3. 중복성과 다양성
[중복성과 다양성] Redundancy and diversity
✅고려사항
- 시스템 컴포넌트의 장애는 피할 수 없음
- 컴포넌트의 장애가 시스템 전체 장애로 이어지지 않도록 시스템을 설계해야 함
<확실성을 향상시키기 위해 ‘중복성과 다양성’을 사용한다.>
✅중복성(redundancy)
- 시스템 컴포넌트의 장애가 일어났을 때 사용할 수 있는 여분의 기능을 시스템에 포함시킴
✅다양성(diversity)
- 같은 방식으로 실패하지 않도록 서로 다른 중복 컴포넌트를 사용
✅중복성과 다양성 예
- 가용성을 높이기 위해 중복된 서버 사용
- 서로 다른 유형의 서로 다른 운영체제의 서버를 사용
✅확실성을 위해 설계된 시스템은 중복 컴포넌트를 포함
- 주 컴포넌트가 실패하면 중복 컴포넌트로 전환
- 중복 컴포넌트가 다양하면 컴포넌트의 공통 결함이 시스템 장애로 이어지지 않음
- 시스템의 상태를 검사하고 복구하는 코드를 포함시킬 수 있음
✅문제점
- 중복성과 다양성의 도입에 따라 버그가 생길 수 있음
- 컴포넌트 장애를 감지하고 다르 컴포넌트로 전환하는 기능이 있어야 하므로 시스템의 복잡도가 올라감
- 중복성과 다양성을 피하는 것이 낫다는 주장이 있음
10-4. 확실성 있는 프로세스
[확실성있는 프로세스] Dependable processes
✅확실성 있는 프로세스의 특징
- 명시적으로 정의 (explicitily defined)
- 반복 가능(repeatable)
✅명시적으로 정의된 프로세스
- 정의된 프로세스 모델이 있음
- 개발팀이 프로세스를 준수했다는 데이터가 수집되어야 함
✅반복 가능한 프로세스
- 개인의 해석과 판단에 의존하지 않는 프로세스
- 누가 개발에 참여하는지에 관계없이 프로세스가 반복될 수 있어야 함
✅확실성 있는 프로세스 활동
- 요구사항 검토
- 요구사항 관리
- 정형 명세
- 시스템 모델링
- 설계 및 프로그램 인스펙션
- 정적 분석
- 테스트 계획 수립 및 관리
✅잘 정의된 품질 관리 및 변경 관리 프로세스가 필요
✅확실성 있는 소프트웨어 개발에 애자일 방법 사용을 고려
- 주로 계획 기반 프로세스를 이용
728x90
'[전공] 학교 전공 공부 > [학교] 소프트웨어 공학' 카테고리의 다른 글
Ch15. 소프트웨어 재사용 (0) | 2022.06.08 |
---|---|
Ch12. 안전성 공학 (0) | 2022.06.07 |
Ch09. 소프트웨어 진화 (0) | 2022.06.07 |
JUnit 으로 @Test 테스트 케이스 작성 (0) | 2022.05.05 |
Ch08. 소프트웨어 테스팅 (0) | 2022.04.14 |