개요

목표: 체계적, 공하적 방법으로 주어진 비용, 시간을 통해 고품질 소프트웨어를 개발한다.
공학적으로 잘 작성된 소프트웨어의 특징: 사용자 요구사항 충족, 높은 신뢰성, 유지보수의 용이성, 손쉬운 인터페이스

등장배경

소프트웨어 위기사항(Software Crisis)
1960년대 소프트웨어: 소규모, 하드웨어 비약적으로 발전
1968년대 NATO(SWE) 공학 개념 정립

IEEE 2004. Software Engineering Body of Knowledge (SWEBOK)

소프트웨어 요구분석
소프트웨어 설계
소프트웨어 구축
소프트웨어 테스트
소프트웨어 유지보수
소프트웨어 형상관리
소프트웨어 공학관리
소프트웨어 공학 프로세스
소프트웨어 품질
소프트웨어 공학 도구와 방법
기타 관련 지식(프로젝트 관리, 경영학, 수학, 품질관리의 광범위화)

개발생명주기

SDLC(Software Development Life Cycle)
대표적인 모델: 폭포수 모델, 프로토타입 모델, 나선형 모델, 익스트림 프로그래밍 모델

폭포수 모델(waterfall model): 1970. 하향식, 폭포수가 떨어지듯이 각 단계가 순차적으로 진행된다.
계획 -> 요구분석 -> 설계 -> 구현 -> 테스트 -> 설치 및 유지보수
장점: 응용분야가 단순하거나 잘 알고 있는 경우 적합하다. 문서화가 잘 되어 있어 사용하는데 특수지식을 필요로 하지 않는다.
앞 단계까 결과물을 확인한 후 진행하므로 안정적이다.
단점: 요구사항이 예매할 경우 분석에 과도한 시간이 필요하다. 중간에 수정 요구가 있다면 그만큼 수정 비용이 늘어난다. 문서를 만드는데 과도하게 매달릴 수 있다.

프로토타입 모델(prototype model): 사용자의 의견을 중시하는 모델
장점: 사용자는 예상된 결과물을 미리 보면서 수정을 요청할 수 있다. 소프트웨어를 개발하는데 사용자의 적극적인 참여를 유도할 수 있다.
개발자가 사용자의 요구사항을 자세하게 알 수 있다.
단점: 사용자가 프로토타입의 최종 산출물과 같다고 믿어 소프트웨어가 곧 완성될 것으로 오해할 수 있다. 개발자의 입장에서는 중간과정을 점검할 수 있는 산출물이 없기 때문에 프로토타입이
개발 및 개선과정을 관리하기 어렵다.

나선형 모델(spiral model): 계획 및 정의 -> 위험분석 -> 개발 -> 고객평가(무한반복)
장점: 다른 모델에 비해 완전하고 신뢰성 있는 소프트웨어를 개발할 수 있다. 위험요인을 사전에 분석하여 제거하거나 낮출 수 있다.
단점: 시간과 비용이 많이 든다.

익스트림 프로그래밍 모델(Extreme Programming model): 1990. 소규모 소프트웨어 개발에 적합하다. 애자일 개발 프로세스 중 하나이다.
4가지 가치: 의사소통, 단순성, 피드백, 용기
익스트림 프로그래밍의 열 두가지 실천사항

  1. 계획
  2. 소규모 릴리즈
  3. 상징
  4. 단순 설계
  5. 테스팅
  6. 리팩토링
  7. 페어 프로그래밍
  8. 공동 소유
  9. 지속적인 통합
  10. 주당 40시간 업무
  11. 현장고객 지원
  12. 코딩 표준