소프트웨어 생명주기 (SDLC; Software Development Life Cycle)
시스템이 개발될 때부터 운용과 유지보수의 생애를 마칠 때까지 전 공정을 체계화한 절차
소프트웨어 생명주기 모델 종류 [✏️ 폭프나반]
폭포수 모델
프로토타이핑 모델
나선형 모델
반복적 모델
폭포수 모델 (Waterfall Model)
요구사항 변경이 어렵고, 각 단계의 결과가 확인되어야 다음 단계로 넘어갈 수 있는 모델
모형의 적용 경험과 성공 사례가 많음
선형, 순차적, 고전적 생명주기 모형
단계별 정의와 산출물 명확
프로토타이핑 모델 (Prototyping Model)
고객이 요구한 주요 기능을 실제 개발될 소프트웨어처럼 견본품(프로토타입)으로 구현하며 완성하는 모델
나선형 모델 (Spiral Model)
시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템을 개발해나가는 모델
절차 [✏️ 계위개평]
계획 및 정의
위험 분석
개발
고객 평가
반복적 모델 (Iteration Model)
구축 대상을 여러 개의 시스템이나 모듈로 나누어 병렬적으로 개발 후 통합하거나 반복적으로 개발하여 완성하는 모델
병행 개발로 일정 단축 가능
소프트웨어 개발방법론
소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차 기법
소프트웨어 개발 방법론 종류
설명
구조적 방법론 (Structured Development)
- 전체 시스템을 기능에 따라 나누어 분할과 정복 접근 방식의 방법론 - 프로세스 중심 하향식 방법론 - 구조적 프로그래밍 표현을 위해 나씨-슈나이더만(NS) 차트 사용
정보공학 방법론 (Information Engineering Development)
- 정보 시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론 - 개발 주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론 - 기업의 데이터 중심 방법론
객체 지향 방법론 (Object-Oriented Development)
- '객체'라는 기본 단위로 시스템을 분석 및 설계하는 방법론 - 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용 - 객체, 클래스, 메시지 사용
컴포넌트 기반 방법론 (CBD; Component Based Development)
- 소프트웨어를 구성하는 컴포넌트를 조립하여 하나의 새로운 응용 프로그램을 작성하는 방법론 - 개발 기간 단축으로 인한 생산성 향상 - 확장성이 좋고, 소프트웨어 재사용 가능
애자일 방법론 (Agile Development)
- 절차보다 소통이 중심이 되어 변화에 유연하고 신속하게 적응하는 방법론 - 개발 기간이 짧고 신속하며, 폭포수 모델과 대비됨
제품 계열 방법론 (Product Line Development)
- 특정 제품에 적용하고 싶은 공통 기능을 정의하여 개발하는 방법론 - 임베디드 소프트웨어를 작성하는데 유용한 방법론
애자일 방법론 (Agile Development)
절차보다 소통이 중심이 되어 변화에 유연하고 신속하게 적응하는 방법론
개발 기간이 짧고 신속하며, 폭포수 모델과 대비됨
기존의 개발 방법론의 한계를 극복하기 위해 고안됨
애자일 방법론 유형
XP (eXtreme Programming)
스크럼 (SCRUM)
린 (Lean)
크리스털
FDD (Feature-Driven Development)
ASD (Adaptive Software Development)
XP (eXtreme Programming) ⭐⭐
문서보다 코드를 중요시하여 의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높이는 방법론
1~3주 반복 개발 주기
XP 핵심가치 5 [✏️ 의피존용단]
의사소통 (Communication)
피드백 (Feedback)
존중 (Respect)
용기 (Courage)
단순성 (Simplicity)
XP 실천 항목 12
설명
Pair Programming 짝 프로그래밍
- 개발자 둘이 함께 짝으로 코딩
Collective Ownership 공동 코드 소유
- 시스템에 있는 코드는 누구든지 언제나 수정 가능
CI (Continuous Integration) 지속적 통합
- 매일 여러 번씩 소프트웨어를 통합·빌드
Planning Process 계획 세우기
- 고객이 요구하는 비즈니스 가치 정의 - 고객에게 개발자에게 필요한 것과 어떤 부분에서 지연될 수 있는지 알려줘야 함
Small Release 소규모 배포
- 작은 시스템을 먼저 만들어서 짧은 단위로 업데이트
Metaphor 메타포
- 공통적인 이름 체계, 시스템 서술서로 고객과 개발자 간 의사소통을 원활하게 함
Simple Design 간단한 디자인
- 현재 요구사항에 적합한 가장 단순한 시스템 설계
TDD; Test Driven Development 테스트 기반 개발
- 프로그램에 대한 테스트를 먼저 수행하고 이 테스트를 통과할 수 있도록 구현
Refactoring 리팩토링
- 프로그램의 기능을 바꾸지 않으면서 중복 제거, 단순화 등을 통해 시스템 재구성
40 Hour Work 40시간 작업
- 개발자가 피곤으로 실수하지 않도록 일주일에 40시간만 일하기
On Site Customer 고객 상주
- 개발자의 질문에 즉각 대답할 수 있는 고객이 풀타임 상주
Coding Standard 표준 코딩
- 모든 코드에 대해 코딩 표준을 정의
스크럼 (SCRUM)⭐
매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
소프트웨어 개발 시 포함될 기능, 개선점의 우선순위 부여
개발 주기를 2~4주로 조절하여 실제 동작할 수 있는 결과 제공
항상 팀 단위로, 매일 15분 회의
스크럼 용어
설명
백로그
- 제품, 프로젝트에 대한 요구사항
스프린트
- 2~4주의 짧은 개발 동안 반복적 수행을 통해 개발 품질 향상
스크럼 마스터
- 프로젝트 리더
스프린트 회고
- 스프린트 주기를 되돌아보며 정해놓은 규칙 준수 여부, 개선점 등 확인 및 기록
번 다운 차트
- 남아있는 백로그 대비 시간을 그래픽적으로 표현한 차트
린 (Lean)
도요타의 린 시스템 품질 기법을 소프트웨어 개발에 적용하여 낭비 요소를 제거해 품질 향상
JIT(Just In Time), 칸반 보드 사용
객체 지향 방법론
'객체'라는 기본 단위로 시스템을 분석 및 설계하는 방법론
복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용
객체, 클래스, 메시지 사용
객체 지향 구성요소 6
클래스(Class)
객체 (Object)
메서드 (Method)
메시지 (Message)
인스턴스 (Instance)
속성 (Property)
객체 지향 기법 6 [✏️ 캡상다추정관]
객체 지향 기법 6
설명
캡슐화 (Encapsulation)
- 서로 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터페이스만 표출 - 재사용 용이, 인터페이스 단순화
상속 (Inheritance)
- 상위 클래스의 속성, 메서드를 하위 클래스에서 재정의 없이 물려받아 사용
다형성 (Polymorphism)
- 상속 받은 하위 객체들이 상위 객체와 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질 - 오버로딩: 같은 이름으로 매개변수의 유형, 개수만 다르게 다양하게 정의 - 오버라이딩: 상위 클래스에서 정의한 메서드의 구현을 하위 클래스에서 무시하고 재정의
추상화 (Abstraction)
- 공통 성질을 추출하여 추상 클래스 설정 - 과정 추상화, 자료 추상화, 제어 추상화
정보 은닉 (Information Hiding)
- 코드 내부를 숨기고, 공개 인터페이스를 통해서만 접근 가능하도록 만드는 코드 보안 기술
관계성 (Relationship)
- 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법 - Association 연관화: is-member-of - Aggregation 집단화:is part of, part-whole - Classification 분류화: is-instance-of - Generalization 일반화: is-a - Specialization 특수화: is-a
객체 지향 설계 원칙 5 [✏️ SOLID]
SOLID
설명
SRP; Single Responsibility 단일 책임의 원칙
- 하나의 클래스는 하나의 목적을 위해서 생성 (한 클래스는 하나의 책임을 수행하는 데 집중)
OCP; Open Close 개방 폐쇄의 원칙
- 소프트웨어 구성요소(컴포넌트, 클래스 ,모듈, 함수)는 확장에 열려있고 변경에는 닫혀있어야 함
LSP; Liskov Substitution 리스코프 치환의 원칙
- 하위 객체는 어디서나 상위 클래스를 교체할 수 있어야 함
ISP; Interface Segregation 인터페이스 분리의 원칙
- 범용적인 인터페이스보다 실제로 사용하는 인터페이스를 분리하여 구현해야 함
DIP; Dependency Inversion 의존성 역전의 원칙
- 상위 객체는 구현된 하위 객체에 의존하지 말고, 추상화된 인터페이스에 의존해야 함
객체 지향 방법론 종류
객체 지향 방법론 종류
설명
Rumbaugh 럼바우 방법론
- 그래픽 표기법을 이용해 소프트웨어 구성요소를 모델링하는 방법론 (객체 → 동적 → 기능) - 객체 모델링: Object Modeling, Information Modeling - 동적 모델링: Dynamic Modeling - 기능 모델링: Functional Modeling
Booch 부치 방법론
- 미시적 방법 + 거시적 방법 - 설계 문서화 강조하여 다이어그램 중심으로 개발
Jacobson 제이콥슨 방법론
- 유스케이스(Usecase) 사용
Coad-Yourdon 코드-요든 방법론
- E-R 다이어그램(ERD) 사용
Wirfs-Brock 워프-브록 방법
- 분석과 설계 간 구분 없음
002 프로젝트 관리 ⭐⭐
프로젝트 관리
주어진 기간 내 최소 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
프로젝트 관리 3요소 [3P]
People 사람
Problem 문제
Process프로세스
비용 산정
하향식 산정 기법
하향식 산정 기법
설명
전문가 판단 기법
프로젝트 경험이 있는 전문가가 비용 산정
델파이 기법
프로젝트 경험이 있는 전문가 여러 명이 비용 산정
상향식 산정 기법
상향식 산정 기법
설명
LoC; Lines of Code 코드 라인 수 기법
- 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구하여 비용 산정 - ( 낙관치 + ( 4 * 중간치 ) + 비관치 ) / 6
M/M; Man Month 기법
- 한 사람이 1개월동안 할 수 있는 일의 양을 기준으로 프로젝트 비용 산정 - LoC: 원시 코드 라인 수 - M/M = ( LoC / 프로그래머 월간 생산량 ) - 기간 = ( M/M / 프로젝트 인력 명수 )
COCOMO 기법
- 보헴, 프로그램 규모에 따라 비용 산정 - 조직형 (Organic Mode): 5만 라인 이하 - 반 분리형 (Semi-Detached Mode): 30만 라인 이하 - 임베디드형 (Embededed Mode): 30만 라인 이상
Putnam 기법
- 생명 주기 예측 모형 - Rayleigh-Norden 곡선 사용
FP; Function Point 기능 점수 기법
- 요구 기능을 증가시키는 인자에 가중치를 부여한 후 합산하여 기능의 점수를 계산하여 비용 산정 - ETIMACS: FP 모형을 기초로 개발한 자동화 추정 도구