역사 속의 소프트웨어 오류
Publish date: 2020-08-03Tags: 역사 항공기-사고
인상 깊은 단락
p21
1997년 대한항공 괌 추락사고로 인해 비상 사태시에 승객이 취해야할 자세에 대한 안전 수칙이 추가 됨.
p35
페트리어트 시스템의 오류는 10진수와 2진수 사이의 변환 오차로 인한 것
p56
큐리오시티의 성공에는 분명 MCO의 실패에서 얻은 교훈이 녹아 있었을 것이다. NASA는 MCO 사례 이후 모든 프로젝트 진행시 도량형을 미터법으로 통일하도록 규제했기 때문이다. 도량형 문제로 3억 2,760만 달러(한화 약 4,00억 원, 환율 1,100원 기준)를 허공에 날리면서 얻은 귀중한 교훈이었다.
p134
특히 요구 사항 정의와 관련해서는 아리안4에서 사용헀던 SRI를 아리안 5에서도 그대로 사용한 행위에 대한 지적이 있었다.
p156
그레고리력에 의한 윤년 계산 로직
- if (4의 배수)
- if (100의 배수)
- if 400의 배수) return 윤년
- else return 평년
- else return 윤년
- if (100의 배수)
- else return 평년
리팩토링하면
- if (4의 배수가 아니면) return 평년
- if (400의 배수면) return 윤년
- if (100의 배수면) return 평년
- return 윤년
p161
1970년 1월1일을 기준으로 한 UNIX의 시스템 시간이 32bit 부호있는 정수형에 저장되어 있다면 2038년 1월19일 3시14분 7초에 값의 저장범위를 넘어서게 됨.
p171
게임 이브온라인의 업데이트가 C:/boot.ini
를 삭제해버려서 컴퓨터가 부팅되지 않는 버그
p242
벤쿠버 증권 거래소의 반올림 오류를 재현하는 Python 소스
p288
토요타 급발진 사고의 추정 원인
결국 소프트웨어 오류로 인해 태스크를 제어하는 자료구조의 메모리 값이 변경되면서 언제나 수행되어야 할 태스크가 종료되는 것이 급가속 문제의 핵심이였다.
2005년형 캠리 L4의 소프트웨어
- 1만 1,000개의 전역 변수
- 67개 함수는 순환 복잡도 수치 50이상
- 스로틀의 각도를 조절하는 함수는 순환 복잡도 수치 100이상
- 메모리 사용량이 예측보다 높음
- 예측 41%, 실제 94
- 태스크를 제어하는 자료구조를 침범하여 값이 변경되는 원인
- MISRA-C 코딩 규약 미준수
- 검사했을 때 8만개 이상의 위반
- 127개의 규칙 중 11개의 규칙만 지키고 있었음.
p295
오류 검출이 늦을수록 비용이 올라감
- 요구사항 분석 139달러
- 설계 단계 455달러 (3배)
- 코딩 단계 077달러 (7배)
- 테스팅 단계 7,136달러 (50배)
- 배포 단계 1만 4,102달러 (100배)