Chapter 01. 소프트웨어 개발방법론
01. 소프트웨어 생명주기 모델의 종류 이해
1. SDLC(SW Development Life Cycle)
★시스템의 요구분석부터 유지보수까지의 전 공정을 체계화한 절차★
- SDLC의 프로세스
요구사항 분석단계 → 설계 → 구현 → 테스트 → 유지보수
2. 생명주기 모델
2-1. 폭포수 모델(Waterfall Model)
소프트웨어 개발 시, 각 단계를 확실히 마무리 지은 후 다음 단계로 넘어가는 모델
폭포수 모델의 특징
- 가장 오래된 모델
- 선형 순차적 모형(고전적 생명주기 모형 / 한 번 정해지면 변경이 어려움)
- 오래된 모형이기에 성공 사례 많음
- 단계별 정의와 산출물 명확
- 요구사항 변경 어려움
2-2. 프로토타이핑 모델(Prototyping Model)
고객이 요구한 주요 기능을 프로토타입(시제품)으로 구현하여 고객의 피드백을 반영하여 만들어가는 모델
프로토타이핑 모델의 특징
- 개발자와 사용자 공동 참조로 만들어지기 때문에 개발자와 사용자 모두 이해할 수 있음
2-3. 나선형 모델(Sprial Model)
시스템 개발 시, 위험을 최소화 하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델
나선형 모델의 특징(계위개고)
계획 및 정의 → 위험 분석 → 개발 → 고객 평가
2-4. 반복적 모델 개념(Iteration Model)
구축 대상을 나누어 병렬적으로 개발한 후에 통합하는 방식으로 반복 개발을 통해 점증적으로 완성시키는 SDLC 모델
인력을 분산하여 효율적으로 개발할 수 있다는 특징 존재
02. 소프트웨어 개발방법론 종류 이해
2-1.구조적 방법론 개념(Structured Development)
- 전체 시스템을 기능에 따라 나누어 개발하고, 이를 통합하는 분할과 정복 접근 방식의 방법론
- 프로세스 중심의 하향식 방법론
- 구조적 프로그래밍 표현을 위하여 시각적으로 명확히 식별할 수 있는 나씨 - 슈나이더만 차트를 활용
- 정보시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론
- 개발주기를 이용해 대형 프로젝트를 수행하는 체계적 방법
- 보통 은행권같은 곳에서 많이 활용
- 구조적 방법론과는 다르게 DB를 활용함
2-3.객체지향 방법론 개념(Object-Oriented Development)
- '객체'라는 기본 단위로 시스템을 분석 및 설계하는 방법
- 사람이 이해하는 방식으로 시스템에 적용
2-4.컴포넌트 기반 방법론(CBD)
- 소프트웨어를 구성하는 컴포넌트를 조립하여 하나의 새로운 응용 프로그램을 작성하는 방법론
- 개발 기간 단축으로 인한 생산성 향상
- 새로운 기능 추가 쉬움(확장성)
- 소프트웨어 재사용성 가능
★2-5. 애자일 방법론 개념(Agile)★
- '사람' 중심으로 변화에 유연하고 신속하게 적응하며 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발방법론
- 전통적인 개발방법론의 단점을 극복하기 위해 모색한 방법론
2-5-1. 애자일 방법론 특징
- 프로젝트의 요구사항은 기능 중심
- 절차와 도구보다는 개인과 소통을 중요
- 작업 계획을 짧게 세워 요구 변화에 유연하고 신속하게 대응할 수 있음
- 고객의 피드백이 중요
2-5-2. 애자일 방법론 유형(XP / 스크럼 / 린)
1️⃣ XP
- 의사소통 개선과 즉각적 피드백으로 스프트웨어 품질을 높이기 위한 방법론
- 1~3주의 반복 개발 주기
- 5가지 가치와 12개의 실천 항목 존재
- 5가지 가치 : 용기, 단순성, 의사소통, 피드백, 존중
- 12개의 실천 기본 원리 (하단 표 참조)
순서 | 이름 | 설명 |
---|
1 | 짝프로그래밍 | 개발자 둘이서 짝으로 코딩하는 원리 |
2 | 공동 코드 소유 | 시스템에 있는 코드는 누구든지 언제라도 수정 가능하다는 원리 |
3 | ★지속적 통합(CI)★ | 매일 여러 번 씩 소프트웨어를 통합하고 빌드해야한다는 원리 |
4 | 계획세우기 | 고객이 요구하는 비즈니스 가치를 정의하고, 개발자가 필요한 것은 무엇이며 어떤 부분에서 지연될 수 있는지를 알려주어야 한다는 원리 |
5 | 작은 릴리즈 | 작은 시스템을 먼저 돌리고, 짧은 단위로 업데이트 |
6 | 메타포어 | 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통을 원할 |
7 | 간단한 디자인 | 현재의 요구사항에 적합한 가장 단순한 시스템을 설계 |
8 | ★테스트 기반 개발(TDD)★ | 작성해야하는 프로그램에 대한 테스트틀 먼저 수행하고, 이 테스트를 통과할 수 있도록 실제 프로그램의 코드를 작성 |
9 | ★ 리팩토링 ★ | 프로그램의 기능을 변경하지 않고, 단순화, 중복제거 등을 위한 시스템 재구성 |
10 | 40시간 작업 | 개발자의 피곤으로 인해 실수하지 않도록 40시간 이상 일하지 말아야한다는 원리 |
11 | 고객 상주 | 실제 고객이 상주하며 즉각 피드백을 받는다는 원리 |
12 | 코드 표준 | 효과적인 공동 작업을 위해서 모든 코드에 대한 코딩 표준 정의 |
2️⃣ 스크럼
매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
3️⃣ 린
도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질 향상시킨 방법론
2-6. 제품 계열 방법론 개념
- 특정 제품에 적용하고 싶은 공통된 기능 정의하여 개발하는 방법론
- 임베디드 소프트웨어를 작성하는 데 유용한 방법론으로 영역 공학(Domin)과 응용 공학(Application)으로 구분
03. 비용산정 및 일정관리 모형
3-1. 비용산정
소프트웨어 규모 파악을 통해 투입 자원 및 소요시간을 파악하여 실행 가능한 계획을 수립하기 위해 비용을 산정하는 기법
산정방법 | 특징 | 종류 |
---|
하향식 | 경험 많은 전문가에게 비용 산정을 의뢰하거나 여러 전문가와 조정자를 통해 산정하는 방식 | 전문가 판단 / 델파이 기법 |
상향식 | 세부적인 요구사항과 기능에 따라 필요한 비용을 계산하는 방식 | 코드 라인 수(LOC) / Man Month / COCOMO모형 / Putnam 모형 / FP(Function Point) 모형 |
상향식 산정방법의 종류 및 특징
-
LOC★(이를 계산하는 내용은 나오지 않고 보통 문제에 주어짐)
소프트웨어 각 기능의 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구하고 이를 이용하여 비용 산정
-
Man Month(계산식을 활용한 단답 문제로 기출)★
한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 프로젝트 비용을 산정하는 기법
- 계산방법
Man Month = LOC / 프로그래머의 월간 생산성
프로젝트 기간 = Man Month / 프로젝트 인력
- COCOMO 모형
- 보헴이 제안한 모형으로 프로그램규모에 따라 비용 산정
- 규모에 따라 유형이 조직형, 반분리형, 임베디드형 으로 나뉨
- 푸트남 모형
- 각 단계별로 요구할 인력의 분포를 가정
- 시간에 따른 함수로 표현되는 Rayleigh -Norden 곡선의 노력 분포도를 기초로 함
- 기능(FP) 점수 모형
- 요구 기능을 증가시키는 인자별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능의 점수를 계산하여 비용을 산정하는 방식
- 기능점수(FP) = 총 기능점수 X [0.65 + (0.1 X 총 영향도)]
- 경험을 바탕으로 단순, 보통, 복잡한 정도에 따라 가중치를 부여
3-2. 일정관리 모형
프로젝트가 일정 기한 내에 적절하게 완료될 수 있도록 관리하는 모델
일정관리 모형의 종류 및 특징
3-2-1. 주 공정법(CPM)
- 여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정을 계산하는 기법
- 노드와 노드 간 연결을 통해 공정을 계산하기 위한 액티비티 표기법
3-2-2. PERT
- 일의 순서를 계획적으로 정리하기 위한 수렴 기법으로 LOC의 3점 추정방식을 통해 일정을 관리하는 기법
3-2-3. 중요 연쇄 프로젝트 관리(CCPM)
주 공정 연쇄법으로 자원제약사항을 고려하여 일정을 작성하는 기법