소프트웨어 고장 사례
화성 기후 관측 위성 결함 사례
MCO(Mars Climate Orbiter) 위성
- 화성의 대기 탐사를 목적으로 1998년 개발
- 화성 궤도에 진입하는 과정에서 통신 두절
결함
- 위성 속도 변화 계산 프로그램(SM_FORCE)에 사용된 변수가 정상 값보다 4.45배 작게 계산된 것을 발견
- 국제 표준 단위가 아닌 미국식을 사용
Jeep 체로키 해킹사례
- 2014년 밀러와 발라섹이 운행중인 중인 차량에 원격 접속
- 라디오 모듈에 앱 설치
- 소프트웨어 패치를 위해 104만대 자동차 리콜
보잉 737 MAX89 추락 사례
보잉 737 MAX8의 탄생
- 보잉 737 기종 기체 변경으로 엔진 위치 변경
- MCAS를 이용한 자세 제어
추락
- 2018년 자카르타에서 출발한 아이언 에어 610편 이륙 12만에 자바 해변에 추락으로 189명 사망
- MCAS에 입력되는 노즈 센서 값의 오류로 노즈 하강
테슬라 자율 주행차 사고
- 2016년 5월, 미국 플로리다주 고속도로에서 트럭 측면과 충돌
- 흰색 트럭 인식 오류 발생
도요타 자동차 급발진 사고
- 2009년 8워르 미국 캘리포니아 샌디에고 고속도로에서 사고
- 자동차 연료 주입 제어장치의 프로그래밍 실수
소프트웨어 위기(Crisis)
- 1968년 NATO 소프트웨어공학학회에서 처음 등장
원인
- 소프트웨어 규모의 대형화 및 복잡성 증가에 따른 개발 비용 증대
- 소프트웨어 유지보수의 어려움과 개발 정체 현상 발생
- 소프트웨어 개발 프로젝트 기간 및 소요 예산에 대한 정확한 예측의 어려움
- 신기술에 대한 교육 및 훈련의 부족
- 사용자의 소프트웨어에 대한 기대치 증가
- 소프트웨어에 대한 사용자 요구사항의 빈번한 변경 및 반영
소프트웨어 개발이 어려운 이유
- 의사소통의 문제
- 소프트웨어 개발 과정에 참여하는 개발자, 품질 관리자, 개발자 간의 의사 소통 오류
- 시스템의 순차 특성
- 3차원적인 실세계의 서비스를 2차원 평면에서 프로그램 코드로 나열
- 개발에 의한 결과물
- 조립이나 문제 풀이가 아닌 개발자의 활동의 결과물
- 프로젝트 복잡성
- 프로젝트마다 개발 기간, 개발자 수 등의 차이로 인하여 유연한 관리 필요
- 다양한 관리 이슈
- 요구사항 관리, 일정 관리, 코드 버전 관리 등 수많은 활동 간의 오케스트레이션
- 개발자의 특성
소프트웨어 공학 기술의 적용
정의
ISO24765(2010): 소프트웨어의 설계, 구현, 테스트, 문서화를 위한 과학적이고 기술적인 지식, 경험의 체계적인 적용
원리
- 엄격성과 정형성
- 소프트웨어는 개발자의 경험과 지식에 의존적인 창의적, 공학적 활동의 산출물
- 관심사의 분할
- 복잡한 문제를 단순한 문제로 분리하여 적용하는 소프트웨어 개발 활동
- 소프트웨어 개발 과정의 분할
- 소프트웨어 테스트 과정의 분할
- 모듈화
- 독립적인 기능을 갖는 프로그램의 조작
- 높은 응집력과 낮은 결합력을 갖는 소프트웨어 구조 설계
- 이해도를 높이고 변경 영향을 최소화하기 위한 공학적 원리
- 추상화
- 세부사항은 감추고 대표적인 속성으로 대상물을 정의하는 공학적 원리
- 대상물에 대한 직관적인 이해를 높이고 관심사를 잘 표현할 수 있음
- ex) 함수 정의, 매크로 함수, 객체, 추상데이터 타입 등
- 변경의 예측
- 소프트웨어 개발과정에서 변경 발생은 피할 수 없는 사건
- 변경을 대처하기 위한 공학적 방법의 적용이 요구됨
- 변경이 발생할 것으로 예상되는 부분을 모듈화 구조로 분리
- 일반화
- 다양한 플랫폼, 다양한 환경, 다양한 사용자를 지원하기 위한 원리
- 하드웨어 성능이나 사양에 의존적이지 않은 소프트웨어 개발
- 점진성
- 단계적이며 순차적으로 소프트웨어를 개발하고자 하는 공학적 원리
- 작은 단위의 소프트웨어를 반복 개발하면서 전체 시스템을 완성
- 단계적인 개발과 배포를 통한 사용자 피드백의 수집과 반영
- 명세화
- 소프트웨어 개발 과정 및 대상물에 대한 정보를 체계적으로 기술하는 원리
- 팀 기반의 개발 활동을 지원하기 위한 정보의 공유 지원
- 지속적으로 진화하는 소프트웨어에 대한 이력서