학습 정리
SDLC(소프트웨어 생명 주기 모델)
시스템 요구 분석부터 유지보수까지 전 공정 체계화한 절차
SDLC 프로세스
요설구테유
요구사항 분석 | 다양한 이해관계자의 상충 가능한 요구사항 고려하여 새로운 제품이나 변경된 제품에 부합하는 요구/조건 결정하는 단계 |
---|---|
설계 | 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법 논리적으로 결정하는 단계 |
구현 | 문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램 작성 |
테스트 | 시스템이 정해진 요구 만족하는지, 예상과 결과의 차이 검사하고 평가 |
유지보수 | 시스템 인수되고 설치 후 일어나는 모든 활동 |
소프트웨어 생명 주기 모델 종류
폭프나반
| 폭포수 모델
Waterfall Model | SW 개발 시 각 단계 확실히 마무리 지은 후 다음 단계로 넘어가는 가장 오래된 모델 |
---|---|
프로토 타이핑 모델 | |
Prototyping Model | 고객이 요구한 주요 기능을 프로토타입으로 구현해 고객의 피드백 반영하여 소프트웨어 만들어가는 모델 |
나선형 모델 | |
Spiral Model | 시스템 개발 시 위험 최소화위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델 |
• 계위개고 계획 및 정의→위험 분석→개발→고객 평가 | |
반복적 모델 | |
Iteration Model | 구축 대상 나누어 병렬 적 개발 후 통합/반복적 개발로 점증 완성시키는 모델 |
소프트웨어 개발 방법론 종류 [2020 2회 기출]
구정객컴애제
| 구조적 방법론 Structured Development | • 전체 시스템을 기능에 따라 나눠 개발, 이를 통합하는 분할과 정복 접근 방식의 방법론 • 나씨 슈나이더만(Nassi-Shneiderman) 차트 사용 | | --- | --- | | 정보 공학 방법론 Information Engineering Development | • 정보 시스템 개발에 필요한 관리 절차, 작업 기법 체계화 • 개발 주기 이용해 대형 프로젝트 수행 | | 객체 지향 방법론 Object-Oriented Development | • 객체라는 기본 단위로 시스템 분석 및 설계 • 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용 | | 컴포넌트 기반 방법론 CBD; Component Based Development | • 소프트웨어를 구성하는 컴포넌트를 조립해 새로운 응용 프로그램 작성 | | 애자일 방법론 Agile Development | • 절차보다 사람이 중심이 되어 변화에 유연하고 신속하게 적응하며 효율적으로 시스템 개발 가능한 신속 적응적 경량 개발 방법론 • 개발 과정의 어려움 극복 위해 적극적 모색 | | 제품 계열 방법론 Product Line Development | • 특정 제품에 적용하고 싶은 공통된 기능 정의하여 개발 • 임베디드 소프트웨어 작성 시 유용
나씨-슈나이더만 차트
구조적 프로그래밍 표현 위해 논리의 기술에 중점을 둔 도형식 표현 방법으로 연속, 선택, 반복 등의 제어 논리 구조로 표현
XP 5가지 가치
용단의 피존
| 용기
Courage | 용기를 갖고 자신감있게 개발 |
---|---|
단순성 | |
Simplicity | 필요한 것만 하기 |
의사소통 | |
Communication | 개발자/관리자/고객 간 소통 |
피드백 | |
Feedback | 의사소통에 대한 빠른 피드백 |
존중 | |
Respect | 팀원 간 상호 존중 |
XP 12가지 기본 원리
| 짝 프로그래밍
Pair Programming | 개발자 둘이 짝으로 코딩 |
---|---|
공동 코드 소유 | |
Collective Ownership | 시스템의 코드는 누구든 언제든 수정 가능 |
지속적 통합 | |
CI; Continuous Integration | 매일 여러번 소프트웨어 통합, 빌드 |
계획 세우기 | |
Planning Process | 고객 요구 비지니스 가치 정의, 개발자가 필요한 것, 지연 가능성 알려줘야 함 |
작은 릴리즈 | |
Small Release | 작은 시스템 먼저 생성, 짧은 단위로 업데이트 |
메타포어 | |
Metaphor | 공통적 이름 체계, 시스템 서술서 통해 고객과 개발자 간 의사소통 원활 |
간단한 디자인 | |
Simple Design | 현재 요구사항에 적합한 가장 단순한 시스템 설계 |
테스트 기반 개발 | |
TDD; Test Driven Develope | 테스트 먼저 수행, 통과 가능하게 실제 코드 작성 |
리팩토링 | |
Refactoring | 프로그램 기능 바꾸지 않으며 중복 제거, 단순화 등 위해 시스템 재구성 |
40시간 작업 | |
40-Hour Work | 개발자 실수 줄이기 위해 40시간만 일하기 |
고객 상주 | |
On Site Customer | 개발자 질문에 즉각 대답 가능한 고객 풀타임 상주 |
코드 표준 | |
Coding Standard | 효과적 공동 작업위해 코딩 표준 정의 |
리팩토링 목적 [2020 3회 기출]
복잡한 코드의 단순화, 소스의 가독성 통해 유지보수성 향상, 유연한 시스템, 생산성 향상, 품질 향상
애자일 방법론 종류
XP | 의사소통 개선과 즉각적 피드백으로 SW 품질 높이기 위한 방법론으로 5가지 가치와 12개 실천항목 존재 |
---|---|
SCRUM | 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀 위한 프로젝트 관리 중심 방법론 |
LEAN | 도요타 린 시스템 품질 기법을 SW 개발 프로세스에 적용해 낭비 요소 제거하여 품질 향상시킨 방법론 |
스크럼 주요 개념
| 백로그
Backlog | 제품, 프로젝트 요구사항 |
---|---|
스프린트 | |
Sprint | 2~4주 짧은 개발 기간으로 반복적 수행해 개발 품질 향상 |
스크럼 미팅 | |
Scrum Meeting | 15분 정도의 Daily Meeting |
스크럼 마스터 | |
Scrum Master | 프로젝트 리더 |
스프린트 회고 | |
Sprint Retrospective | 스프린트 주기 되돌아보며 규칙 준수, 개선점 확인 |
번 다운 차트 | |
Burn Dwon Chart | 남은 백로그 대비 시간 그래픽적으로 표현한 차트 |
객체 지향 분석(OOA;Object Oriented Analysis)
사용자 요구 사항 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계 정의하여 모델링하는 기법
객체 지향 분석 방법론 종류
| OOSE (Object Oriented Software Engineering) | 야콥슨 (Jacobson) | • 유스케이스를 모든 모델의 근간으로 활용 • 분석, 설계 구현 단계 • 기능적 요구 사항 중심 | | --- | --- | --- | | OMT (Object Modeling Technology) | 럼바우 (Rumbaugh) | • 그래픽 표기법으로 SW 구성요소 모델링 • 객체→동적→기능 모델링 | | OOD (Object Oriented Design) | 부치 (Booch) | • 설계 문서화 강조하여 다이어그램 중심 개발 • 분석/설계 분리 불가 • 분석 시 이용된 객체 모델 설계 시 적용 |
객체 지향 설계 원칙 SOLID
| 단일 책임의 원칙
(Single Responsibility Principle) | 하나의 클래스는 하나의 목적을 위해 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는데 집중되어 있어야 한다는 원칙 |
---|---|
개방 폐쇄 원칙 | |
(OCP: Open-closed Principle) | 소프트웨어 구성 요소는 확장에 열고, 수정 시 닫혀있어야 한다는 원칙 |
리스코프 치환의 원칙 | |
(LSP: Liskov Substitution Principle) | 서브 타입은 어디서나 자신의 기반타입으로 교체 가능하다는 원칙 |
인터페이스 분리의 원칙 | |
(ISP: Interface Segregation Principle) | 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙 |
의존성 역전의 원칙 | |
(DIP: Dependency Inversion Principle) | 실제 사용 관계는 바뀌지 않으며 추상을 매개로 메세지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙 |