[소프트웨어 공학] 소프트웨어 공학 개요

상준·2024년 4월 2일
0

소웨공

목록 보기
1/10
post-thumbnail

소프트웨어 고장 사례

화성 기후 관측 위성 결함 사례

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) 함수 정의, 매크로 함수, 객체, 추상데이터 타입 등
  • 변경의 예측
    • 소프트웨어 개발과정에서 변경 발생은 피할 수 없는 사건
    • 변경을 대처하기 위한 공학적 방법의 적용이 요구됨
    • 변경이 발생할 것으로 예상되는 부분을 모듈화 구조로 분리
  • 일반화
    • 다양한 플랫폼, 다양한 환경, 다양한 사용자를 지원하기 위한 원리
    • 하드웨어 성능이나 사양에 의존적이지 않은 소프트웨어 개발
  • 점진성
    • 단계적이며 순차적으로 소프트웨어를 개발하고자 하는 공학적 원리
    • 작은 단위의 소프트웨어를 반복 개발하면서 전체 시스템을 완성
    • 단계적인 개발과 배포를 통한 사용자 피드백의 수집과 반영
  • 명세화
    • 소프트웨어 개발 과정 및 대상물에 대한 정보를 체계적으로 기술하는 원리
    • 팀 기반의 개발 활동을 지원하기 위한 정보의 공유 지원
    • 지속적으로 진화하는 소프트웨어에 대한 이력서
profile
컴공생 공부

0개의 댓글