- 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차
- 시스템이 개발될 때부터 운용과 유지보수를 거쳐 생애를 마칠 때까지 어떠한 순서를 밟는지에 대한 작업 프로세스를 모델화한 것
요구사항 분석
기능 요구사항 , 비기능 요구사항
설계
시스템 구조 설계 , 프로그램 설계 , 사용자 인터페이스 설계
구현
인터페이스 개발 , 자료 구조 개발 , 오류 처리
테스트
단위 테스트 , 통합 테스트 , 시스템 테스트 , 인수 테스트
유지보수
예방 , 완전 , 교정 , 적응 유지보수
: 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델
타당성 검토 -> 계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
: 고객이 요구한 주요 기능을 프로토타입으로 구현하여 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델
: 시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델
계획 및 정의 -> 위험 분석 -> 개발 -> 고객 평가
: 구축대상을 나누어 병렬적으로 개발 후 통합하거나 반복적을 개발하여 점증 완성시키는 SDLC모델
구분 | 폭포수 모델 | 프로토타이핑 모델 | 나선형 모델 | 반복적 모델 |
---|---|---|---|---|
특징 | 순차적 접근 | 프로토타입 개발 | 위험분석, 반복개발 | 증분방식으로 병행 개발 |
장점 | - 이해가 용이 - 관리가 편리 | - 요구분석 용이 - 타당성 검증 가능 | 위험성 감소와 변경에 유연한 대처 | 병행 개발로 인한 일정 단축 가능 |
단점 | 요구사항 변경이 어려움 | 프로토타입 폐기에 따른 비용 증가 | 단계 반복에 따른 관리 어려움 | 병행 개발에 따른 관리 비용 증가 |
- 소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차, 기법
- 소프트웨어를 하나의 생명체로 간주하고 소프트웨어 개발의 시작부터 시스템을 사용하지 않는 과정까지의 전 과정을 형상화한 방법론
: 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현하는 기법
💭 구성요소
클래스(Class)
- 특정 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀
- 객체 지향 플그래밍에서 데이터를 추상화하는 단위
- 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현
- 속성은 변수의 형태로 행위는 매서드 형태로 선언
객체(Object)
- 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상
- 클래스에서 정의한 것을 토대로 메모리에 할당됨
- 객체마다 각각의 상태와 식별성을 가짐
메서드(Method)
- 클래스로부터 생성된 객체를 사용하는 방법
- 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산
- 전통적 시스템의 함수(Function) 또는 프로시저(Procedure)에 해당하는 연산 기능
메시지(Message)
- 객체 간 상호 작용을 하기 위한 수단
- 객체에게 어떤 행위를 하도록 지시하는 방법
- 객체 간의 상호 작용은 메시지를 통해 이루어짐
- 메시지는 객체에서 객체로 전달됨
인스턴스(Instance)
- 객체 지향 기법에서 클래스를 통해 만든 실제의 실형 객체
- 클래스에 속한 각각의 객체
- 실제로 메모리상에 할당
속성(Property)
- 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의
- 성질, 분류, 식별, 수향, 현재 상태 등에 대한 표현 값
💭 기법
1. XP
: 의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높이기 위한 방법론
1~3주의 반복 개발주기
5가지 가치
- 용기(Courage)
: 용기를 가지고 자신감 있게 개발- 단순성(Simplicity)
: 필요한 것만 하고 그 이상의 것들은 하지 않음- 의사소통(Communication)
: 개발자, 관리자, 고객 간의 원활한 소통- 피드백(Feedback)
: 의사소통에 대한 빠른 피드백- 존중(Respect)
: 팀원 간의 상호 존중
12가지 기본원리
- 짝 프로그래밍(Pair Programming)
: 개발자 둘이서 짝으로 코딩하는 원리- 공동 코드 소유(Collective Ownership)
: 시스템에 있는 코드는 누구든지 언제라도 수정 가능하다는 원리- 지속적인 통합(CI / Continuous Integration)
: 매일 여러 번씩 소프트웨어를 통합하고 빌드해야 한다는 원리- 계획 세우기(Planning Process)
: 고객이 요구하는 비즈니스 가치를 정의하고 개발자가 필요한 것은 무엇이며 어떤 부분에서 지연될 수 있는지를 알려주어야 한다는 원리- 작은 릴리즈(Small Release)
: 작은 시스템을 먼저 만들고 짧은 단위로 업데이트한다는 원리- 메타포어(Metaphor)
: 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통을 원활하게 한다는 원리- 간단한 디자인(Simple Design)
: 현재의 요구사항에 적합한 가장 단순한 시스템을 설계한다는 원리- 테스트 기반 개발(TDD / Test Driven Development)
: 작성해야 하는 프로그램에 대한 테스트를 먼저 수행하고 이 테스트를 통과할 수 있도록 실제 프로그램의 코드를 작성한다는 원리- 리팩토링(Refactoring)
: 프로그램의 기능을 바꾸지 않으면서 중복제거, 단순화 등을 위해 시스템 재구성한다는 원리- 40시간 작업(40-Hour Work)
: 개발자가 피곤으로 인해 실수하지 않도록 일주일에 40시간이상을 일하지 말아야 한다는 원리- 고객 상주(On Site Customer)
: 개발자들의 질문에 즉각 대답해 줄 수 있는 고객을 프로젝트에 풀타임으로 상주시켜야 한다는 원리- 코드 표준(Coding Standard)
: 효과적인 공동 작업을 위해서는 모든 코드에 대한 코딩 표준을 정의해야 한다는 원리
2. 스크럼(SCRUM)
: 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
- 백로그(Backlog)
: 제품과 프로젝트에 대한 요구사항- 스프린트(Sprint)
: 2~4주의 짧은 개발 기간으로 반복적 수행으로 개발품질 향상- 스크럼 미팅(Scrum Meeting / 데일리 미팅)
: 매일 15분 정도 미팅으로 To-Do List 계획수립- 스크럼 마스터(Scrum Master)
: 프로젝트 리더, 스크럼 수행 시 문제를 인지 및 해결하는 사람- 스프린트 회고(Sprint Retrospective)
: 스프린트 주기를 되돌아보며 정해놓은 규칙 준수 여부, 개선점 등을 확인 및 기록
- 해당 스프린트가 끝난 시점이나 일정 주기로 시행- 번 다운 차트(Burn Down Chart)
: 남아있는 백로그 대비 시간을 그래픽적으로 표현한 차트
- 백로그는 보통 수직축에 위치하며 시간은 수평축에 위치
3. 린(LEAN)
: 도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
비교대상 | 애자일 | 전통적 |
---|---|---|
계획수립 | 유동적 범위 설정 | 확정적 범위 설정 |
업무수행 | 팀 중심 업무 수행 | 관리자 주도적 명령과 통제 개인 단위로 업무 수행 |
개발/검증 | 반복 주기 단위로 소프트웨어를 개발/검증 | 순차적으로 수행 |
팀관리 | 업무 몰입, 팀 평가 | 경쟁, 개별 평가 |
문서화 | 문서화보다는 코드를 강조 | 상세한 문서화를 강조 |
성공요소 | 고객 가치 전달 | 계획/일정 준수 |
유형 | XP, 스크럼, 린 | 폭포구, 프로토타입, 나선형 |
영역 공학 | 응용 공학 |
---|---|
영역 분석, 영역 설계, 핵심 자산을 구현하는 영역 | 제품 요구분석, 제품 설계, 제품을 구현하는 영역 |