득이공간

[소프트웨어공학] 1장. 소프트웨어 공학과 개발 프로세스 본문

CS/소프트웨어공학

[소프트웨어공학] 1장. 소프트웨어 공학과 개발 프로세스

쟁득 2024. 2. 24. 14:22
해당 게시물은 김정욱 교수님의 '소프트웨어공학' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 1장. 소프트웨어 공학과 개발 프로세스

1-1. 소프트웨어
1-2. 소프트웨어 공학
1-3. 소프트웨어 개발 프로세스
1-4. 소프트웨어 개발 생명주기 모델


📌 1-1. 소프트웨어

* 소프트웨어
- 컴퓨터를 비롯한 시스템에서 특정 작업을 수행하게 하는 프로그램의 집합

* 소프트웨어 특징
- 비제조성
- 소모되지 않는 소프트웨어
- 사용자의 요구에 따라 새롭게 생산됨
- 변경성 (Changeability)
- 복제 가능 (Duplicability)

* HW vs SW
- HW 제조: 결과물의 차이가 크지 않다.
- SW 개발: 개인 능력에 따라 결과물의 차이가 크다.
- HW 부품: 오래 사용하면 주변 환경의 문제로 실패율이 치솟는다. 욕조 곡선(Bathtub Curve)
- SW: 사용자의 요구로 인한 변경의 부작용으로 실패율이 급격히 증가할 수 있다.

* 소프트웨어 개발의 어려움
- 수준에 따른 구분
- 대규모 소프트웨어 개발의 어려움
- 개발 과정이 복잡하다. (개발 방법, 기술 필요)
- 참여 인력이 많다. (팀 구성, 관리 필요)
- 개발 기간이 길다. (프로젝트 체계 필요)


📌 1-2. 소프트웨어 공학

* 소프트웨어 공학의 등장배경
- 소프트웨어의 위기(Software Crisis)
- 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못한다.
- 쉽지 않은 대규모 소프트웨어 개발 (체계적이지 못한 상황)
=> 공학의 개념을 소프트웨어에 주입한다.

* 소프트웨어 공학 (Software Engineering)
- 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반을 체계적이고 정량적으로 다루는 학문

* 소프트웨어 엔지니어의 역할
- 문제의 분석, 정확한 요구 사항 도출
- 소프트웨어 구조, 입출력, 인터페이스 설계
- 알고리즘, 데이터 구조, 데이터베이스 설계
- 양질의 프로그램을 생산
- 테스트 및 통합 기술
- 사용자 지침서 및 개발 문서 작성
- 성능 측정과 모델 설계
- 유지보수
- 프로젝트 계획 및 관리


📌 1-3. 소프트웨어 개발 프로세스

* 소프트웨어 개발 프로세스
- 소프트웨어 개발 프로세스 모델
- 소규모 프로젝트
- 대규모 프로젝트
=> 소프트웨어 개발 생명주기 (Software Development Life Cycle, SDLC)

* 소프트웨어 개발 생명주기 (SDLC)
1. 계획: 프로젝트를 수행하는데 필요한 비용, 기간, 위험분석, 문제정의(목표 및 제약조건) 등에 대해 계획한다.
2. 분석: 개발할 소프트웨어의 기능, 제약조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의한다.
3. 설계: 분석 단계에서 표현한 다이어그램을 사용해서 코딩할 수 있는 수준으로 환경에 밀접하게 구체화한다. (소프트웨어의 구조, 알고리즘 작성)
4. 구현: 프로그래밍 언어를 선택하고 기법, 스타일, 순서를 결정한 후 실제로 프로그램을 작성한다.
5. 테스트: 개발한 시스템이 요구사항을 만족하는지, 실행 결과가 예상 결과와 맞는지, 숨어있는 오류는 없는지 찾아내고 완성도를 높인다.
6. 유지보수: 시스템이 인수되고, 배포가 이루어진 후 일어나는 모든 활동(결함 수정, 성능 개선, 소프트웨어 제품 수정)으로 생명주기 중 가장 긴 부분이다.


📌 1-4. 소프트웨어 개발 생명주기 모델

* 소프트웨어 개발 생명주기 모델
- 전체 흐름을 체계화 한 개념이다.
- 목적: 고품질의 소프트웨어 제품을 만드는 것
- 역할: 전체적인 기본 골격을 세워준다.
- 각 단계별로 문서화하고 정리하는 것이 중요하다.
- 특징: 세부적인 생명주기 모델(SDLC)은 소프트웨어 개발 팀마다 다르다.

* 소프트웨어 개발 생명주기 모델 종류
- 주먹 구구식 모델 (No Document)
- 선형 순차적 모델 (Plan & Document)
- 폭포수 모델
- V 모델
- 진화적 프로세스 모델 (Plan & Document)
- 프로토타입 모델
- 나선형 모델
- 단계적 개발 모델 (Plan & Document)
- 점증적 개발 모델
- 애자일 프로세스 모델 (No Document)

* 주먹 구구식 모델
- Build and fix, Code and fix. 제품을 완성한 뒤 코드에 문제가 있으면 수정, 문제가 없으면 사용한다. 대규모 프로젝트에서는 불가능하다. (No Document)

* 선형 순차적 모델
- 폭포수 모델: 각 단계들이 하향식으로 진행되며 단계가 넘어갈 때마다 확실하게 각 단계의 작업을 종료한다. 단계별 진척상황에 대한 관리가 용이하다. 소규모 프로젝트에 적합하다. (Plan & Document)
- V 모델: 폭포수 모델에서 각 단계에 해당되는 테스트 단계를 추가한다. 각 개발 단계를 검증하는데 초점이 맞춰져있다. 신뢰성이 높이 요구되는 분야에 적합하다. (Plan & Document)

* 진화적 프로세스 모델
- 프로로타입 모델: 초기 버전의 프로토타입을 개발해서 사용자의 요구사항을 충분히 분석한다. 사용자의 요구가 충분히 반영되어 최종 제품이 나오므로 유지보수에 필요한 노력과 시간을 줄일 수 있다. (Plan & Document)
- 나선형 모델: 요구분석->위험분석->프로토타입개발->평가 순서가 반복적으로 진행된다. 대규모 프로젝트, 국책사업 및 위험부담이 큰 시스템 개발에 적합하다. (Plan & Document)

* 단계적 개발 모델
- 점증적 개발 모델: 개발과 사용을 병행하는 과정을 반복한다. 요구분석명세서에 명시된 시스템 전체를 서브 시스템으로 분할하고 서브 시스템을 단계적으로 하나씩 릴리즈한다. (Plan & Document)

* 애자일 프로세스 모델
- 고객의 요구에 민첩하게 대응하고 스프린트(2~4주의 일정기간) 단위로 그때그때 주어지는 문제를 풀어나간다. 수정과 변경에 유연하게 대처 가능하고 프로젝트 진행 현황에 따라 목표에 맞게 변화 시도 가능하다.
- 목표
- 프로세스 보다 개개인과의 상호 소통
- 문서 보다 실행 가능한 소프트웨어
- 계약과 협상 보다 고객과의 협력
- 계획 보다 변화에 대한 민첩한 대응
- 스크럼: 팀원들이 마치 하나처럼 움직이고 따라줘야 성공할 수 있는 프로세스
- 1. 제품 기능 목록 작성
- 2. 스프린트 계획 회의
- 3. 스프린트 수행 (1~4주)
- 4. 스프린트 개발 완료: 최종 제품
- 5. 스프린트 검토 회의 및 회고