1-2. 소프트웨어 개발 방법론
CHAPTER 1. 소프트웨어 공학 개념
Section 2. 소프트웨어 개발 방법론
소프트웨어 개발 방법론 : 이런 소프트웨어는 이렇게 개발하자
방법론을 세분화한 게 모델
타당성 검토 → 계획 → 요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수 단계
1. 소프트웨어 개발 방법론 종류
⑴ 구조적 방법론
- 절차지향 소프트웨어 개발 방법론
- 제한된 구조에서 코드 생성 및 순차적 실행
- 정형화된 분석 절차에 따라 처리
하향식
■ 구조적 방법론 기본 개발 과정
데이터흐름도 : 단말 - 데이터가 로그인 기능수행하고 - 데이터가 어디 저장되고 ...
자료사전 : 회원이라는 자료는 id + pw
상태전이도 : 상태값이 어떻게 바뀌냐 / 준비 -> 실행: 디스패치 / 실행 -> 준비: 타임런아웃
삼각형 구조 (그림)
소단위 명세서 : 자료사전 세분화
⑵ 정보공학 방법론
- 기업의 주요 부분을 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합, 적용하는 데이터
중심 방법론
- 빠른 결과물 확인이 가능하며 단순 S/W 개발이 아닌 기업의 경영전략에 초점을 둔다.
■ 정보공학 방법론 기본 개발 과정
⑶ 객체지향 개발 방법론
- 현실세계의 개체(Entity)를 속성(Attribute)과 메서드(Method)형태로 표현
회원이라는 객체 안에 id, pw라는 속성, 유저가 할 수 있는 행동(가입,로그인 등)
- 객체, 클래스 간의 관계를 식별하여 설계 모델로 변환하는 방법론
- 분석과 설계, 구현의 전 과정을 객체 중심으로 개발
- 전체 프로세스 방향성 유지와 상속에 의한 재사용성 향상
- 특징 : 캡슐화, 정보은닉, 상속, 다형성, 추상화 ★
객체지향 언어(자바, 파이썬 등) / 상향식 *구조적은 하향
상속: 부모로부터 물려받아 부모의 모든 요소 사용
다형성: 형태 다양.. 오버로딩 오버라이딩
오버로딩은 인자값에 따라 형태가 다양 / 오버라이딩은 부모 속성 재구성
추상화: 뭉뚱그려서 만들고 하위클래스에서 구체화
리모콘을 만들고, 선풍기 에어컨에서 구체화.. (up, down)
⑷ CBD( Component Based Development ) 분석 방법론
- 재사용 가능한 컴포넌트의 개발 또는 상용 컴포넌트를 조합해 어플리케이션 개발
- 새로운 기능 추가가 쉬운 확장성
- 생산성 및 품질이 향상
- 시스템 유지보수 비용 최소화
회원 모듈안에 로그인,가입 / 게시판 모듈 / 주문 모듈 / 상품 모듈
날씨 모듈을 외부에서 사옴 => 다합쳐 하나의 쇼핑몰을 만듬
⑸ 애자일 방법론
고객의 요구사항 수용, 빠르게 만들어냄
기존 방법론은 문서에 치중
- 기존 방법론들이 절차를 중시한 나머지 변화에 빠른 대응을 할 수 없는 단점 개선을 위해 등장
- 애자일 방법론 종류 : XP( eXtreme Programming ), SCRUM, FDD, Crystal 방법론 등
- 애자일 선언문
공정과 도구보다 개인과 상호작용을
포괄적인 문서보다 작동하는 소프트웨어를
계약 협상보다 고객과의 협력을
계획을 따르기보다 변화에 대응하기를
왼쪽에 있는 것들도 가치가 있지만,
우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다.
⑹ 개발 방법론 선택 기준
- 프로젝트 특성 및 규모
- 프로젝트 참여자의 수준
- 가용 자원의 정도(인력, 장비, 시간, 비용)
- 요구사항의 명확도
- 위험도
2. 소프트웨어 개발 모델
⑴ 폭포수 모델(Waterfall Model)
- 계획, 분석, 설계, 구현, 테스트, 운영 등 전 과정을 순차적으로 접근하는 개발모델
- 각 단계의 검증 후에 다음 단계를 진행한다.
- 각 단계가 순차적으로 진행되며, 병행되거나 거슬러 반복 진행되지 않는다.
- 가장 오래된 모형으로 적용 경험과 성공사례가 많다.
- 요구사항의 변경이 어렵다.
- 단계별 정의가 분명하고, 단계별 산출물이 명확하다.
⑵ 프로토타이핑 모델(Prototyping Model)
- 고객이 요구한 주요 기능을 프로토타입으로 구현하여 완성해가는 모델
- 개발자가 구축할 소프트웨어의 모델을 사전에 만들어 요구사항을 효과적으로 유도하고 수집한다.
- 프로토타이핑에 의해 만들어진 프로토타입은 폐기될 수 있고, 재사용될 수도 있다.
■ 순서
- 계획수립 → 프로토타입 개발 → 사용자 평가 → 구현 → 인수
■ 장점
- 사용자의 요구사항을 충실히 반영할 수 있다.
- 비교적 빠른 기간 안에 사용자가 평가할 수 있는 결과물이 만들어진다.
- 오류를 초기에 발견할 수 있다.
- 변경이 용이하다.
■ 단점
- 최종적으로 시간과 비용이 훨씬 많이 들 수 있다.
- 사용자가 실제 제품과 혼동할 수 있다.
- 문서작성이 소홀해질 수 있다.
- 프로토타입 폐기에 따른 비용이 든다.
⑶ 나선형 모델(Spiral Model)
- 폭포수 모델과 프로토타이핑 모델의 장점을 수용하고, 위험 분석을 추가한 점증적 개발 모델
- 프로젝트 수행 시 발생하는 위험을 관리하고 최소화하려는 것이 목적
- 대규모 프로젝트 및 위험 부담이 큰 시스템 개발에 적합
■ 순서
- 계획수립(planning) → 위험분석(Risk Analysis) → 공학적 개발(Development) → 평가(Evaluation) Ÿ 장점
- 위험분석 과정으로 위험성이 큰 프로젝트를 수행할 수 있다.
- 고객의 요구사항을 보다 더 상세히 적용할 수 있다.
■ 단점
- 시간과 비용이 많이 들 수 있다.
- 반복 단계가 길어질수록 프로젝트 관리가 어렵다.
⑷ RAD(Rapid Application Development) 모델
- 매우 짧은 개발 주기를 강조하는 점진적 소프트웨어 개발 방식
- 강력한 소프트웨어 개발 도구를 이용하여 매우 짧은 주기로 개발을 진행하는 순차적 소프트웨어 개발 프로세스
- CASE(Computer Adied Software Engineering) 도구를 이용해 시스템을 개발
- 개발 기간이 60일~90일 정도로 짧다.
- 기술적으로 위험이 적고 빠른 개발이 요구될 때 사용이 적합
⑸ V 모형
- 폭포수 모델에 시스템 검증과 테스트 작업을 강조
- 높은 신뢰성이 요구되는 분야에 적합함
⑹ 4세대 기법(4th Generation Techniques)
- CASE등의 자동화도구를 이용하여 요구사항 명세로부터 원시코드를 자동으로 생성
<폭포수 모델>
폭포 떨어지듯이 개발 - 순차적 - 선형 순차
문서화 중요
거슬러올라갈 수 없음
고객 요구사항 반영 힘듬
<프로토타이핑 모델>
고객요구사항 프로토타입 구현
사전에 만듬
시제품
<나선형 모델>
특이하게 위험분석 과정이 들어감
점증적 개발
위험 관리 => 대규모프로젝트에 사용
계획 위험분석 개발 평가 (그림 거미줄 모양 24:36)
<rad>
rapid 빠르게
케이스 도구[소프트웨어만드는 걸 도와줌] 이용
순차적(폭포수와 동일)
but, 매우 짧은 개발 주기 강조
<V모형>
폭포수 + 테스트 강조
구현에 맞춰 테스트 중요함
아키텍처: 전체적인 구조 (시스템 아키텍처[하드웨어,서버] / 소프트웨어 아키텍처[프레임워크])
단위 테스트: 모듈.. 정적 동적
통합: 모듈 모음.. 상위(하위기능->메인) 하향(메인->하위) 빅뱅(all) 백본(=샌드위치 상향+하향)
시스템: 실제로 서버에 올림.. 기능(사용자요구에맞는기능) 비기능(성능,효율성)
인수: 사용자가 테스트.. 알파(개발자+사용자) 베타(사용자)
<4세대 기법>
case도구에 문서 넣으면 소스코드 만들어줌
3. 애자일(Agile) 방법론
특정x, 애자일 방법론에 여러 종류 존재
계획x - 지나친 계획(폭포수) 사이 타협
⑴ 애자일 방법론의 개념
Ÿ 애자일 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과, 계획이 지나치게 많은 개발
방법들 사이에서 타협점을 찾고자 하는 방법론
Ÿ 애자일 개발 방법론이란 어느 특정 개발 방법론을 가리키는 말은 아니고 애자일 개발을 가능하게 해주는 다양
한 방법론 전체를 일컫는 말
Ÿ 경량(Lightweight) 프로세스라고도 함
Ÿ 프로젝트를 시작한 후 끊임없이 개선 노력
⑵ 애자일 프로세스의 등장배경
Ÿ 기존 소프트웨어 개발 방법론의 문제점을 개선하기 위해서 등장
Ÿ 기존 소프트웨어 개발 방법론의 주요 문제점
- 계약과 계획준수를 중요시하는 갑과 을의 문화가 지배적
- 문서를 중시함
- 프로세스나 툴 적용을 중시함
- 성과가 나쁠 때 계획 또는 통제의 실패로 인식함
⑶ 애자일 선언문
Ÿ 공정과 도구보다 개인과 상호작용을
Ÿ 포괄적인 문서보다 작동하는 소프트웨어를
Ÿ 계약 협상보다 고객과의 협력을
Ÿ 계획을 따르기보다 변화에 대응하기를
Ÿ 우리는 왼쪽 항목의 가치를 인정하면서도 오른쪽 항목을 더 중요하게 여긴다.
⑷ 애자일 특징
Ÿ 고객과 개발자의 지속적인 소통을 통하여 변화하는 요구사항을 신속하게 수용
Ÿ 개발자 개인의 가치보다는 팀의 목적을 우선시 하며 고객의 의견을 가장 우선
Ÿ 팀원들과의 주기적인 회의와 제품을 시연함으로써 소프트웨어를 점검
Ÿ 작업 계획을 짧게 세우고, 반복적으로 수행함으로 변화에 유연하게 대처
⑸ 애자일 방법론 종류 ★
① XP(eXtream Programming)
Ÿ 특징
- 문서보다는 코드를 중시하고, 5가지 핵심가치와 12개 실천 항목이 존재
- 개발을 세분화 하여 1~3주의 반복으로 개발을 진행
Ÿ XP 5가지 핵심가치
- 용기 : 고객의 요구사항 변화에 능동적인 대처
- 존중 : 개발자의 역량을 존중하고 충분한 권한과 권리를 부여
- 의사소통 : 개발자, 관리자, 고객 간의 원활한 의사소통
- 피드백 : 의사소통에 따른 즉각적인 피드백
- 단순성 : 부가적 기능, 사용되지 않는 구조와 알고리즘 배제
Ÿ 12가지 실천사항
② 스크럼 (SCRUM)
Ÿ 소프트웨어에 포함될 기능·개선점에 대한 우선 순위를 부여
Ÿ 개발 주기는 30일 정도(스프린트)로 조절하고 개발 주기마다 실제 동작할 수 있는 결과를 제공
Ÿ 개발 주기마다 적용할 기능이나 개선에 대한 목록을 작성
Ÿ 날마다 15분 정도의 회의
Ÿ 항상 팀 단위로 생각한다.
③ 그 외 애자일 방법론
Ÿ 크리스털 패밀리(Crystal)
- 프로젝트의 규모와 영향의 크기에 따라서 여러 종류의 방법론을 제공
Ÿ Feature-Driven Development (FDD)
- feature마다 2주 정도의 반복 개발을 실시
- 기능 주도 개발
Ÿ Adaptive Software Development, ASD
- 합동 애플리케이션 개발을 사용하는 방법론
종류 ★
-xp : 5가지 핵심가치 기억 / 1-3주 반복 개발 진행(시제품)
용기 존중 의사소통 피드백 단순성 .. 의사선생님 약 피존용기 담아주세요
(의사소통,피드백,존중,용기,단순성)
12가지 실천사항 : 짝 프로그래밍, 테스트기반개발
ci : svn (형상관리도구)에 개발자들이 올림.. 지속적 통합
di : 1차본 완성 -> 배포도구 이용해 서버에 지속 배포 => 짧은 릴리즈 관련
-스크럼 : 30일정도(스프린트.. 기간정해논 것)마다 실제동작 결과(sw) 제공
15분정도 회의
-크리스털패밀리 / fdd(기능주도개발) / asd