학습 목표 

1. 소프트웨어의 특성과 문제점

2. 소프트웨어공학의 배경과 목적

3. 소프트웨어 개발 프로세스 모델

 

 

핵심 키워드

소프트에어의 특성

소프트웨어 생명주기

요구사항분석, 설계, 구현, 테스팅

소프트웨어 요구관리, 소프트웨어 유지관리, 소프트웨어 형상관리, 소프트웨어 품질관리

 

 


 

 

01 소프트웨어 공학의 배경과 목적

 

가) 소프트웨어 공학 소개

효과적인 소프트웨어 공학 기술 적용을 위한 3가지 요소

1. 체계적인 업무 방식 및 흐름의 정의와 이를 적용할 수 있는 프로세스(Process)

2. 전문적인 지식을 갖춘 조직 및 인력(People)의 구성

3. 정의된 업무 방식과 조직인력이 효율적으로 운영되기 위한 인프라 기술(Technology)

 

정리 : 

성공적인 SW 프로젝트의 핵심요소

Process (Procedures & Methods)

People (Process & Organization)

Technology (Tool & Equipments)

 

 

나) 소프트웨어 공학 배경

 

1950s : 소프트웨어 개발 프로젝트를 위한 소프트웨어 공학 개념 도입

1960s : 소프트웨어 수요 급증, "소프트웨어의 위기(Crisis)"-SW 구현하는 인력들의 경험과 능려그 수적인 부족이 원인

              -> 본격적인 소프트웨어 공학 도입

1970s : 소프트웨어 수요 급증 -> 소프트웨어 개발 인력 부족

             해결책 - 비전공자들도 대거 투입 -> 쉽게 수정될 수 있도록 해야됨. (선코딩-후수정 접근방식 이용)

1980s : 개발 생산성을 높이기 위한 방법들 연구.

1990s : 시장에서 경쟁우위 선점을 위한 제품의 시장출시 시간을 단축해야 됨. 

             -> 개발 생산성을 높이기 위한 방법들 연구 활성화. 동시공학(Concurrent Engineering) 모델 활용.

             동시공학 : 폭포수 모델에서 요구사항, 설계 및 구현 등을 동시에 진행할 수 있는 공학 모델

2000s : 급속한 변화에 효과적으로 대응하기 위한 애자일 방법론 도입.

 

 

 

다) 소프트웨어 공학의 4가지 중요요소

 

소프트웨어 공학

- 정의 : 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문

- 4가지 중요 요소 : 방법, 도구, 절차, 사람

 

  • 방법론: 프로젝트 계획, 분석, 설계 등 전체 소프트웨어 개발 프로세스를 체계적으로 관리하는 방법.
  • 도구: 소프트웨어 개발을 자동화하고 효율성을 높이기 위한 도구들.
  • 절차: 개발 과정을 체계적으로 정리하여 효율적으로 작업할 수 있도록 함.
  • 사람: 소프트웨어 개발에 참여하는 인력의 중요성을 강조.

 

 

 

 

02 소프트웨어 개발 생명주기

 

가) 정의 

- 사용자 환경 및 문제점 이해에서 시작하여 운용/유지 보수에 이르기까지의 모든 과정을 의미함.

 

타당성 검토 → 개발 계획 →  요구사항 분석 →  설계 →  구현 →  테스트 →  운용 →  유지보수

 

 

나) 목적

- 프로젝트 비용 산정과 개발 계획 수립, 기본 골격 구성

- 용어의 표준화

- 프로젝트 관리

 

 

다) 소프트웨어 생명주기 선정

- 기업에서 프로젝트의 개발 프로세스를 테일러링하는데 중요한 활동

- 테일러링 : 소프트웨어 개발 프로세스에서 특정 프로젝트나 조직의 필요에 맞게 프로세스나 방법론을 조정하고 최적화하는 것을 의미

 

 

라) 소프트웨어 생명주기 모델 종류

 

1. V 모델

  • 요구사항이 명확히 정의된 프로젝트에서 사용됨.
  • 각 개발 단계와 그에 따른 검증 및 확인(Verification & Validation) 단계가 연관되어 있으며, 개발 초기부터 테스트를 고려함.
  • 이 모델은 체계적이고 명확하게 관리되며, 요구사항 분석과 설계 단계에서 발생한 오류를 발견하기 용이함.

 

2. VP 모델 (V Model with Prototyping)

 

  • VP 모델: V 모델에 프로토타이핑을 결합한 것으로, 시스템 이해와 리스크 감소를 목적으로 합니다. 이는 개발 초기 단계에서 시스템의 일부분을 신속하게 개발하고, 이를 통해 불확실성을 줄이는 데 도움을 줍니다.
  • Prototyping이란 - 소프트웨어 개발 과정에서 최종 제품을 만들기 전에 핵심 기능을 미리 구현한 시제품 또는 초안
  • 접근방법 1: 명확하지 않은 문제에 대해 가능한 해결책을 탐색하고 적용하는 방법으로, 반복적으로 시도하면서 불확실성을 줄이는 접근법입니다.
  • 접근방법 2: 여러 해결책을 평가하여 가장 적합한 것을 선택하는 방법으로, 특정 기능이나 시스템 성능과 관련된 리스크가 존재할 때 유용합니다.

 

3. 점증적 모델 (Incremental Model)

 

  • 시스템의 핵심 기능을 먼저 개발하고, 이후 추가 기능을 점진적으로 확장하는 방식입니다.
  • 초기에는 제한된 기능만 제공하며, 각 단계에서 시스템이 점점 완성됩니다.
  • 개발 초기의 리스크를 줄이고, 시간이 지남에 따라 개선이 필요한 경우에 유용합니다.

 

4. 진화 모델 (Evolutionary Model)

 

  • 점증적 모델과 비슷하지만, 시스템의 각 버전을 반복적으로 개발하며 점차 완성도를 높입니다.
  • 사용자 피드백을 반영하여 지속적으로 시스템을 개선하고, 새로운 기능을 추가합니다.
  • 시스템이 완전히 불분명하거나 지속적인 개선이 필요한 경우에 적합합니다.

 

 

정리 :

V 모델, VP 모델, 점증적 모델, 진화 모델

 

 

03 소프트웨어 개발 방법론

 

소프트웨어 개발 방법론의 특징 :

- 개발 단계를 각각 정의하고

- 각 단계별 수행활동, 산출물, 검증절차, 산출물, 완료 기준을 정의하고 

- 개발 계획, 분석, 설계 및 구현의 수행 단계에 대해 정형화된 방법과 절차, 지원 도구를 정의한다.

 

 

가) 소프트웨어 개발 방법론의 필요성

1. 개발 경험의 축적 및 재활용을 통한 개발 생산성을 향상

2. 효과적인 프로젝트 관리

3. 공식 절차와 산출물을 제시하고 표준용어를 통일하여 의사소통 수단 제공

4. 각 단계별 검증과 승인된 종료를 통해 일정 수준의 품질 보증

 

 

나) 소프트웨어 개발 방법론의 필요성

 

 

 

다) 소프트웨어 개발 단계

 

소프트웨어 개발 활동은 소프트웨어 생명주기에 따라 정의됨.

 

  1. 요구사항 분석: 개발할 소프트웨어의 목적과 요구사항을 명확히 정의하는 단계입니다.
  2. 설계: 요구사항을 바탕으로 시스템의 구조와 설계를 구체화하는 단계입니다.
  3. 구현: 설계된 내용을 실제 코드로 작성하여 소프트웨어를 개발하는 단계입니다.
  4. 테스트: 개발된 소프트웨어가 요구사항을 충족하는지 확인하고 오류를 찾아내는 단계입니다.

 

정리:

소프트웨어 개발 단계는

요구사항 분석 → 설계 → 구현 → 테스팅

 

 

 

 

04 애자일 개발 방법론

 

 

 

 

가) 애자일 방법론 종류

  • 애자일 선언문 이후 다양한 애자일 방법론이 등장했으며, 그 중 **스크럼(Scrum)**과 **익스트림 프로그래밍(XP)**이 널리 사용됩니다.
  • 최근에는 **린 소프트웨어 개발(Lean Software Development)**도 주목받고 있습니다.
  • 주요 애자일 방법론으로는 스크럼, XP, 린 소프트웨어 개발, 애자일 UP(AUP) 등이 있습니다.

 

 

나) 애자일 개발 방법론 - XP

 

1. XP 개요

  • XP는 1990년대 후반에 켄트 벡(Kent Beck)이 개발한 방법론으로, 주로 소규모 개발 조직에 적합한 경량화된 개발 방식입니다.
  • 테스트 주도 개발(TDD), 일일 빌드(Daily Build), 지속적 통합(Continuous Integration) 등의 기술과 연관됩니다.
  • XP는 가치(Value)와 이를 실현하기 위한 실천법(Practice), 원칙(Principle)으로 구성되어 있으며, 반복적인 개발 과정을 통해 점진적으로 소프트웨어를 개선해 나갑니다.
  • 국내에서는 스크럼과 같은 다른 애자일 방법론과 함께 적용되는 경우가 많습니다.

 

2. XP 개발절차

 

 

 

3. XP 가치

 

  • 의사소통: 팀 내의 원활한 소통이 중요하며, 이를 통해 문제를 해결하고 팀워크를 강화합니다.
  • 단순성: 불필요한 복잡성을 제거하고, 가능한 한 단순한 설계를 유지합니다.
  • 피드백: 지속적인 피드백을 통해 개선하고, 변화에 유연하게 대응합니다.
  • 용기: 요구사항의 변경에 용감하게 대처하고, 문제 해결을 주도적으로 수행합니다.
  • 존중: 팀원들 간의 상호 존중을 중요하게 여겨야 프로젝트의 성공을 보장할 수 있습니다.

 

4. XP의 실천 방법

 

 

 

 

다) 스크럼(SCRUM)

 

1. 스크럼 개요

 

프로젝트 관리를 위한 애자일 방법론.

추정 및 조정 기반의 경험적 관리기법의 대표적인 형태이다.

 

스크럼 역할자 유형 : 제품 책임자, 스크럼 마스터, 스크럼 팀

 

 

2. 스크럼 프로세스

스크럼 프로세스는 다음과 같은 3가지 구성 요소를 갖는다. 

  • 스프린트(Sprint) : 달력기준 1~4주 단위의 반복개발기간을 가리킨다.
  • 3가지 미칭 : 일일 스크럼, 스프린트 계획, 스프린트 리뷰
  • 3가지 산출물 : 제품 백로그, 스프린트 백로그, 소멸 차트

 

 

 

 

 

 

 

3. 스크럼 특징 

 

  • 투명성 - 스크럼은 스크럼 회의, 소멸차트, 스프린트 리뷰와 같은 기법을 이용해서 프로젝트의 상태나 문제점을 효과적으로 파악할 수 있다.
  • 타임박싱 - 스크럼을 진행하는 데 들어가는 시간을 제한. 프로젝트 진행에만 집중하는 것이 가능해진다.
  • 커뮤니케이션 - 개발자들이 갖고 있는 문제점 공유, 플래닝 포커를 사용하여 사용자의 스토리 구현 난이도, 시간 토론하는 절차를 가짐.
  • 경험주의 모델 - 프로젝트에 참여하는 개개인의 경험을 중요시 한다.

+ Recent posts