소프트웨어공학-개론/개발생명주기/개발방법론

728x90

 

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

💡소프트웨어 공학이란?
➡︎ 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이로 서술적이며 정량적으로 다루는 학문
➡︎소프트웨어를 성공적으로 개발하기 위해선 요구사항분석부터 유지보수까지 전 과정에 걸쳐
체계적이고 효율적으로 관리를 해야하고 이 방법을 지원해주는 것

 

효과적인 소프트웨어 공학 기술을 적용하기 위해서는 아래 3가지 핵심 요소의 균형이 필요하다.

출처: topcit essence

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

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

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

 

 

배경

1960년대 "소프트웨어의 위기"가 발생하며 소프트웨어 개발 시 선코딩-후수정 방식의 접근을 하게 됨.

해당 방식의 부작용으로 인해 폭포수 모델을 개발하여 사용하게 되었지만,

폭포수 모델은 비용이 많이 들고 진척도가 떨어졌기 때문에 

소프트웨어 개발 생산성을 높이기 위한 방법들을 연구하기 시작함.

 

이 후, 요구사항, 설계 및 구현 등을 동시에 진행할 수 있는 동시공학(Concurrent Engineering)에 집중한 모델을 활용.

2000년대에는 급속한 변화에 효과적으로 대응하기 위한 애자일 방법론이 본격적으로 도입됨.

💡 폭포수 모델(Waterfall model)이란?

 

 

 

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

1️⃣ 방법

방법은프로젝트계획수립과추정, 시스템과소프트웨어분석, 자료구조, 프로그램구조, 알고리즘, 코딩. 테스팅, 유지 관리와같은작업들로 구성
•종종특수한언어중심(예: 객체지향방법)또는그래프표기법을도입
• 소프트웨어품질에대한일련의평가기준을 도입

2️⃣ 도구

3️⃣ 절차

4️⃣ 사람

 

 

 

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

 

💡 소프트웨어 개발 생명주기란?
➡︎ 사용자 환경 및 문제점 이해에서 시작하여 운용/유지 보수에 이르기까지의 모든 과정을 의미

 

일반적인 소프트웨어 생명주기는 다음과 같다.

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

 

목적

  • 프로젝트 비용 산, 개발 계획 수립, 기본 골격 구성
  • 용어의 표준화
  • 프로젝트 관리

 

소프트웨어 생명주기 선정

  • 선택한 모델은 프로젝트에 존재하는 리스크/불확실성을 최소화 시킬 수 있어야 함
  • 폭포수 모델, 프로토 타입(Protolype) 모델, 진화(Evolutionary) 모델, 점증적( Incremental) 모델 등이 대표적인 생명주기 모델임

 

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

따로 정리해둠 !

🔽 아래 글 참고 🔽

 

소프트웨어공학 생명주기 모델-V모델/VP모델/점증적모델/진화모델

가장 많이 사용되는 생명주기 모델의 예시 4가지를 알아보자. ❗️프로젝트의 특성에 따라 생명주기 모델을 변경하여 사용할 수도 있다. 1. V모델 확장된 폭포수 모델 중 하나 시스템의 요구사항

brynn-park.tistory.com

 

 

03 소프트웨어 개발 방법론

소프트웨어 개발 방법론의 특징은 개발 단계를 각각 정의하고 각 단계별 수행 활동, 산출물, 검증절차, 산출물, 완료기준을 정의하고, 개발 계획, 분석, 설계 및 구현의 수행 단계에 대해 정형화된 방법과 절차, 지원 도구를 정의한다.

 

소프트웨어 개발 방법론 비교

출처: topcit essence

 

 

소프트웨어 개발 단계

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

 

1️⃣ 요구사항 분석 (개념적 단계)

  • 소프트웨어 개발의 실제적인 첫 단계로 사용자의 요구에 대하여 이해하는 단계
  • 전체 개발 과정에서 개발 비용을 감소시킬 수 있는 결정적인 단계

 

2️⃣ 설계 (물리적 실현의 첫 단계)

  • 시스템 설계는 시스템 구조를 결정
  • 시스템 구조는 서브 시스템들로 이루어지고, 서브 시스템은 하드웨어나 소프트웨어 등의 구성요소를 의미함
  • 설계가 제대로 되지 않으면 시스템의 안정감 저하 및 유지 보수도 어려워짐

 

3️⃣ 구현

  • 설계 명세를 기반으로 요구사항을 만족할 수 있도록 프로그래밍 하는 것
  • 이 단계에서 가장 중요한 부분은 코딩 표준을 정하고, 이를 기반으로 명확하게 코드를 작성하는 것

 

4️⃣ 테스팅

  • 시스템이 정해진 요구사항을 만족하는 지, 결과값이 얼마나 차이를 보이는 지 등에 대해 수동 또는 자동화된 방법으로 평가하는 일련의 과정
  • 소프트웨어의 품직 확보를 위한 결함을 찾아내고 수정하는 작업도 포함