01 소프트웨어 공학의 배경과 목적
💡소프트웨어 공학이란?
➡︎ 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이로 서술적이며 정량적으로 다루는 학문
➡︎소프트웨어를 성공적으로 개발하기 위해선 요구사항분석부터 유지보수까지 전 과정에 걸쳐
체계적이고 효율적으로 관리를 해야하고 이 방법을 지원해주는 것
효과적인 소프트웨어 공학 기술을 적용하기 위해서는 아래 3가지 핵심 요소의 균형이 필요하다.
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 소프트웨어 개발 방법론
소프트웨어 개발 방법론의 특징은 개발 단계를 각각 정의하고 각 단계별 수행 활동, 산출물, 검증절차, 산출물, 완료기준을 정의하고, 개발 계획, 분석, 설계 및 구현의 수행 단계에 대해 정형화된 방법과 절차, 지원 도구를 정의한다.
소프트웨어 개발 방법론 비교
소프트웨어 개발 단계
소프트웨어 개발 활동은 소프트웨어 생명주기에 따라 정의된다.
1️⃣ 요구사항 분석 (개념적 단계)
- 소프트웨어 개발의 실제적인 첫 단계로 사용자의 요구에 대하여 이해하는 단계
- 전체 개발 과정에서 개발 비용을 감소시킬 수 있는 결정적인 단계
2️⃣ 설계 (물리적 실현의 첫 단계)
- 시스템 설계는 시스템 구조를 결정
- 시스템 구조는 서브 시스템들로 이루어지고, 서브 시스템은 하드웨어나 소프트웨어 등의 구성요소를 의미함
- 설계가 제대로 되지 않으면 시스템의 안정감 저하 및 유지 보수도 어려워짐
3️⃣ 구현
- 설계 명세를 기반으로 요구사항을 만족할 수 있도록 프로그래밍 하는 것
- 이 단계에서 가장 중요한 부분은 코딩 표준을 정하고, 이를 기반으로 명확하게 코드를 작성하는 것
4️⃣ 테스팅
- 시스템이 정해진 요구사항을 만족하는 지, 결과값이 얼마나 차이를 보이는 지 등에 대해 수동 또는 자동화된 방법으로 평가하는 일련의 과정
- 소프트웨어의 품직 확보를 위한 결함을 찾아내고 수정하는 작업도 포함
'소프트웨어_개발' 카테고리의 다른 글
소프트웨어공학-애자일개발방법론 (2) | 2023.09.10 |
---|---|
소프트웨어공학 생명주기 모델-V모델/VP모델/점증적모델/진화모델 (1) | 2023.09.10 |