CHAPTER 25(1162p~1219p), 28(1344p~)
- 표준 라이브러리 커스터마이즈 및 확장 방법
- 소프트웨어 공학 기법
Polymorphic memory allocator
- std::pmr::polymorphic_allocator
- allocator()와 deallocator()를 비롯한 기본 요건을 모두 갖추고 있다.
- 탬플릿 타입 매개변수 방식이 아닌 생성 당시의 memory_resouce에 따라 달라지기 때문에 polymorphic_allocator타입이 같더라도, 할당/해제 방식으로 다를 수 있다.

Simple Directed Graph (Digraph)
- Node, vertex, Edge로 연결되어 있다.
- 각 엣지는 방향이 있는 화살표로 표시한다.
Feature creep(기능 변형)
Software lift cycle
-
Waterfall model
- 소프트웨어 구축에 필요한 단계를 정의 후 각 단계를 마쳐야 다음 단계로 넘어가는 방식
- 기본적으로 각 단계에서 최대한 모든 것을 정확하게 완료해야 다음 단계로 무난히 진행할 수 있다고 가정한다.

- 장점
- 간결함.
- 어떤 프로젝트가 주어지더라도 동일한 방식으로 시작하면 된다.
- 이상적으로 코드를 여러 차례 수정하면서 이리저리 끼워 맞출 필요 없이 한 번만 작성하면 된다.
- 요구사항이 아주 구체적이고 규모가 작은 프로젝트라면 폭포수 모델이 효과적이다.
- 단점
- 폭포수 모델은 단계를 거슬러 가는 것을 허용하지 않는다.
- 현실은 개발 과정을 수행하는 동안에도 요구사항이 새로 추가되는 경우가 많다.
- 요구사항을 초반부터 완벽히 정의해야 한다는 점에서 현실성이 떨어진다.
- 위험 요인을 최소화하기 위해 주요 결정사항을 최대한 초반에 확정하는 점이 오히려 위험 요인을 가진다.
- 설계 단계에서 핵심 이슈를 발견하지 못하는 등의 이슈가 발생했을 때 거의 마지막 단계에서 발견되기 때문에.
-
Sashimi model
- 각 단계를 서로 겹치는 방식으로 폭포수 모델을 개선한 것.
- 각 단계를 겹치게 두고, 동시에 진행할 수 있도록 하는 것.

-
Spiral model
- 위험 중심 소프트웨어 개발 프로세스.
- Iterative Process로 분류된다.
- 현재 단계에 문제가 있더라도 다음 단계에서 해결하면 된다는 생각에 바탕을 두고 있다.

- 위험 요인이 가장 많은 작업을 현재 주기의 개발 단계에 배치한다.
- 개발 단계에서 수행할 작업은 평가 단계에서 발견한 위험 요인에 따라 결정된다.

-
장점
- 폭포수 모델의 장점에 반복 프로세스를 적용한 것.
- 가장 위험한 작업부터 수행한다.
- 폭포수 모델처럼 마지막에 가서야 폭탄처럼 문제가 터지는 일을 막을 수 있다.

- 반복적인 프로세스로 구성되었기 때문에 테스터가 제공하는 피드백을 반영하기도 좋다.
- 매 주기마다 시스템에 대한 이해가 깊어지면서 설계를 개선할 수 있다.
-
단점
- 실제 효과를 극대화하기 위해 반복 주기를 최소화하기 힘들다.
- 각 주기마다 매번 네 단계를 반복 수행하여 오버헤드가 발생한다.
- 여러 팀이 동시에 진행하다 보면 서로 작업이 어글날 위험이 있다.
-
Agile model
- 애자일 선언문
- 프로세스와 도구보다는 개인과 상호 작용
- 완벽한 문서보다는 실제 작동하는 소프트웨어
- 고객과 협상하기보다는 고객과 협력하기
- 계획을 따르기보다는 변화에 대처하기
- 고객으로 인해 발생하는 변경사항을 프로젝트 개발 과정에 쉽게 반영하도록 프로세스를 유연하게 구성해야 한다는 뜻.
소프트웨어 개발 프로젝트에 적용할 수 있는 방법론
- 소프트웨어 라이프 사이클 모델을 “다음 단계에 수행할 일”에 대한 정규 모델을 제공하지만 “그 일을 수행하는 방법”에 대해서는 뚜렷한 답을 주지 않는다.
- 수행하는 방법에 대해서 제시하는 방법론 중에 주목받는것들은 아래와 같다.
- UP
- RUP
- 스크럼
- 익스트림 프로그래밍
- 소프트웨어 트리아지
UP(Unified Process)