시스템에 부과되는 비기능적 요구사항으로 Performance, Scalability, Dependability 등이 있다. 자동차 소프트웨어의 핵심적인 NFR로는 제품의 동작에 대한 전반적인 믿음, Dependability가 있다.
Dependability의 한글 번역은 Relibaility와 혼동될 수 있으므로 영어 그대로 Dependability로 사용한다.
- 높은 Dependability를 위한 비용은 기하급수적으로 증가한다.
- 가전 < 자동차 < 항공기 << 의료기기
- 비용은 필요인력, 시간 등을 포함한다.
- 주요 Dependability 요소
- Availability, Reliability, Safety, Security, Resilience
- Repairability(수리용이성), Maintainability(유지보수성), Error tolerance(오류감내성)
Availability
- 요청 시 서비스를 제공하는 능력
- 사용 가능 확률: uptime+downtimeuptime
- downtime은 계획한 것, 예기치 못한 것을 모두 포함한다.
- Uptime
- 90%: 24시간 당 144분 down
- 99%: 24시간 당 14.4분 down
- 99.9%: 24시간 당 84초 down
- 99.99%: 일주일에 1분 down
- 고가용성을 위한 Redundant(중복) 설계
- Active redundancy: 둘 이상의 부품이 동시에 동작
- Throttle Control System에 적용된다.
- Passive redundancy: 한 부품에 문제가 생기면 나머지가 동작
- 자율주행 시 Passive redundancy가 적용된다.
- 자율주행의 경우 문제가 생겨도 동작 가능하게 하기 위해 Alternate, two computer systems, overlaps camera 등 중복으로 설계한다.
Reliability
- 신뢰성
- 정상 동작 확률 Mean Time Between Failures MTBF=Number of FailuresTotal Time
- 고장 안 나면 Number of Failures=0이므로 MTBF=∞
- Fault(결함): 오류로 이어질 수 있는 것. 인간이 잘못 설계한 bug
- Fault가 Hidden 상태이면 서비스는 성공적으로 제공된다.
- Fault가 발현되면 Error로 이어진다.
- Fault를 발견하고 제거하기 위해 Debugging이 필요하다.
- Error(오류): 예기치 않은 시스템 동작으로 이어질 수 있는 잘못된 시스템 설계. Fault가 발현된 것
- Error가 감지되거나 회복(detect, recover, handling, protection)되면 서비스는 성공적으로 제공된다.
- Error가 전파되면 Failure로 이어진다.
- Bug를 잡기 위해 Error로부터 bug를 tracking하려면 어느 부분에서 발생한건지 나누어서 소거해야 한다.
- Techniques: Detection, Identification, Isolation
- Failure(장애): 시스템이 예상한 서비스를 제공하지 않은 것. 오류가 고장으로 이어져 manage가 불가능한 문제가 발생한 것
- Failures를 관측하기 위해 Testing이 필요하다.
Fault Management
- Fault avoidance: 인간의 결합 생성을 원천적으로 방지
- Fault detection: 시스템에서 결함을 찾아내는 방법
- Fault tolerance: 결함이 장애로 이어지지 않도록 방지
Error Detection and Recovery
#define LEN_ARR 10
int arr[LEN_ARR];
i = 20;
arr[i] = 100; // Error Detection 추가
방어적 프로그래밍
if (i < LEN_ARR)
arr[i] = 100;
else
arr[LEN_ARR - 1] = 100;
Failure Protection
- 장애가 발생해도 치명적인 상황으로 이어지지 않도록 보호
- UPS(무정전 전원장치)는 Power failure로 인해 전원이 나가도 작업 상황이 보호된다.
Failure Classes
1 | 2 |
---|
Systematic Failure(인간의 실수 bug) | Random Hardware Failure |
Transient Failure(특정 상황에서 드물게 발생) | Permanent Failure(항상 발생) |
Recoverable Failure(자동 복구 가능) | Unrecoverable Failure(복구를 위해 운영자 개입 필요) |
Non-corrupting Failure(시스템을 파괴하지 않음) | Corrupting Failure(시스템을 파괴) |
Triple Modular Redundancy
- Redundancy를 통해 Reliability를 향상시킨다.
- Random hardware failure를 찾아내기에 효율적이다.
- 다수결의 원리
- 동일한 시스템에 대해 세개의 센서 출력값이 있으면 가장 신뢰있는 출력을 선택하는 것
N-version Programming
- Diversity를 통해 Reliability를 향상시킨다.
- 동일한 job에 대해 프로그래밍 언어, 개발팀 등을 다양하게 적용시킨다.
- Systeatic failure를 찾아내기에 효율적이다.
- 항공기에서 주로 사용한다.
Safety
- 안전성
- 불합리한 위험의 부재
- Safety는 상품이 아닌 사람을 위한 것이다.
- 혼자 동작하는 기계는 safety를 다루지 않는다.
Safety Standards for E/E/PE or E/E/PES Systems
- IEC 61508
- 기능안전 표준
- Electrical/Electronic/Programmable Electronic Safety-related Systems
- 다른 표준들의 모표준격
- 자동차 E/E System에 맞추어 customizing 된 것이 ISO 26262이다.
Security
- 보안성
- Confidentiality: 외부 공격자에게 정보가 유출될 위험
- Integrity: 공격자가 시스템 오동작을 유발할 위험
- Availability: 공격자가 시스템을 다운시킬 위험
Security vs Safety
- Security: 외부 환경, 사람의 공격으로부터 시스템을 보호하는 것
- Safety: 시스템으로부터 내부의 환경, 사람을 보호하는 것
Resilience
- 회복탄력성
- 일반적인 의미: 시련을 극복하는 능력
- 기술적인 의미: 장애 상황에서도 시스템의 최소한의 기능은 유지
- 장애로 인한 최대 품질을 제공하지 못할 경우 선택적으로 품질을 조정하여 최선을 서비스를 제공한다.
- Graceful Degradation: Gracefully 품질을 낮추어 서비스를 제공한다.
Simplex Architecture for Resiliency
- Simple + Complex
- 시스템이 고장이나 오류가 발생하더라도 안전하게 작동할 수 있도록 보장한다.
- 고성능 제어기 (High-performance controller):
- 기본적으로 사용된다.
- 주된 역할은 최적의 성능을 제공하는 것
- 일반적으로 고성능 알고리즘을 사용하여 차량 제어를 수행하지만, 새로운 기술이나 복잡한 기능이 도입되었을 경우 결함이 발생할 가능성도 존재한다.
- 안전 제어기 (Safety controller):
- 검증된 안정적인 알고리즘을 사용해 시스템을 항상 안전하게 유지하는 역할을 한다.
- 고성능 제어기에 문제가 생기거나 시스템이 불안정해지면, 이 안전 제어기가 기본적인 안전 기능을 수행하여 시스템을 보호한다.
- 모니터링 시스템 (Monitoring system):
- 고성능 제어기의 상태를 실시간으로 감시하여, 예상치 못한 오류나 비정상적인 동작이 감지되면 자동으로 안전 제어기로 전환하는 역할을 한다.