개요

소프트웨어 공학의 목표는 체계적이고 공학적인 방법으로, 주어진 비용과 시간 안에 고품질 소프트웨어를 개발하는 것이다. 공학적으로 잘 작성된 소프트웨어는 사용자 요구사항을 충족하고, 신뢰성이 높으며, 유지보수가 쉽고, 인터페이스도 손쉽게 다룰 수 있다는 특징을 가진다.

등장 배경

1960년대에는 하드웨어가 비약적으로 발전한 반면 소프트웨어는 소규모에 머물러 있었고, 이 격차에서 이른바 소프트웨어 위기(Software Crisis)가 불거졌다. 이를 계기로 1968년 NATO 회의에서 소프트웨어 공학(SWE)이라는 개념이 정립되었다.

IEEE 2004, Software Engineering Body of Knowledge (SWEBOK)

SWEBOK는 소프트웨어 공학이 다루는 지식 영역을 체계화한 것으로, 요구분석, 설계, 구축, 테스트, 유지보수, 형상관리, 공학관리, 공학 프로세스, 품질, 도구와 방법이라는 영역에 더해 프로젝트 관리·경영학·수학·품질관리 같은 광범위한 관련 지식까지 포괄한다.

개발생명주기

SDLC(Software Development Life Cycle)를 대표하는 모델로는 폭포수 모델, 프로토타입 모델, 나선형 모델, 익스트림 프로그래밍 모델이 있다.

**폭포수 모델(waterfall model)**은 1970년에 등장한 하향식 모델로, 폭포수가 떨어지듯 계획, 요구분석, 설계, 구현, 테스트, 설치 및 유지보수 단계가 순차적으로 진행된다. 응용 분야가 단순하거나 이미 잘 알고 있는 경우에 적합하고, 문서화가 잘 되어 있어 사용하는 데 특수한 지식이 필요하지 않으며, 앞 단계의 결과물을 확인한 뒤 다음 단계로 넘어가므로 안정적이라는 장점이 있다. 다만 요구사항이 애매하면 분석에 과도한 시간이 들고, 중간에 수정 요구가 생기면 그만큼 수정 비용이 늘어나며, 문서를 만드는 데 지나치게 매달리게 될 위험도 있다.

**프로토타입 모델(prototype model)**은 사용자의 의견을 중시하는 모델로, 사용자가 예상 결과물을 미리 보면서 수정을 요청할 수 있고 개발 과정에 적극적으로 참여하게 되며, 개발자도 사용자의 요구사항을 자세히 파악할 수 있다는 장점이 있다. 다만 사용자가 프로토타입을 최종 산출물과 동일하다고 오해해 소프트웨어가 곧 완성될 것으로 착각할 수 있고, 개발자 입장에서는 중간 과정을 점검할 산출물이 없어 개발과 개선 과정을 관리하기 어렵다는 단점이 있다.

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

**익스트림 프로그래밍 모델(Extreme Programming model)**은 1990년대에 등장한, 애자일 개발 프로세스 중 하나로 소규모 소프트웨어 개발에 적합하다. 의사소통, 단순성, 피드백, 용기라는 네 가지 가치를 바탕으로 하며, 다음 열두 가지를 실천사항으로 삼는다.

  • 계획
  • 소규모 릴리즈
  • 상징
  • 단순 설계
  • 테스팅
  • 리팩토링
  • 페어 프로그래밍
  • 공동 소유
  • 지속적인 통합
  • 주당 40시간 업무
  • 현장고객 지원
  • 코딩 표준