Software Development
Software Development Life Cycle (SDLC)

SDLC는 아이디어에서 시작하여 전달로 끝나는 Software development Process이다.
- Requirements and Analysis Phase
- Design
- Implementation
- Testing
- Deployment
- Maintenance
-
Waterfuall : 고전적
다음 단계로 진행하기 전에 마지막 세부 사항까지 SDLC의 각 단계를 완료하고 이전 단계로 돌아가지 않고 모든 것을 기록하는 것.
-
Agile development
more adaptive, flexible method
Requirements and Analysis Phase
여러 계층의 질문에 답하는 것.
- stakeholder의 현재 상황, 요구 사항 및 제약 조건, 현재 인프라 등을 탐색하는 것으로 시작.
- 문제가 더 잘 정의된 후에는 더 구체적인 문제를 탐색함
- 소프트웨어 자체를 구축하기 위한 아키텍처 옵션을 평가함
- 요구 사항을 수집한 후 팀은 결과를 분석하여 다음을 결정
- 이러한 요구 사항에 따라 소프트웨어를 개발할 수 있으며 예산 내에서 수행할 수 있습니까?
- 개발 일정에 위험 요소가 있습니까? 그렇다면 위험 요소는 무엇입니까?
- 소프트웨어는 어떻게 테스트됩니까?
- 소프트웨어는 언제 어떻게 제공됩니까?
- 고전적인 waterfall 방식에선 SRS(Software Requirements Specification) documents 생성을 제안함.
- 소프트웨어 요구 사항 및 범위를 명시하고 stakeholder와 함께 이를 세심하게 확인하는 것
Design and Implementation Phases
- Design
- requirements & analysis 단계의 SRS document를 입력으로 사용함
- Design 단계가 끝난 후, HLD(High-Level Design) 및 LLD(Low-Level Design) document를 만듬.
- LLD는 개별 구성 요소의 아키텍쳐, 이들 간 통신 시 사용되는 프로토콜을 훨씬 자세히 설명하고 필요한 class 및 design의 기타 측면을 열거함.
- Implementation (코딩 or 개발 단계라고도 함)
- design 단계의 HLD와 LLD를 입력으로 사용함
- 모든 구성 요소와 모듈은 이 단계에서 build 되므로 Life Cycle 중 가낭 긴 단계임.
Testing, Deployment, and Maintenance
- Test
- Integraion testing
- Performance testing
- Security testing
- Deployment 전개
- production enviroment에 software를 installed 해봄
- Maintenance
- 고객 지원
- 프로덕션에서 발견된 버그 수정
- 소프트웨어 개선 작업
- 고객의 새로운 요청 수집
Software Development Nethodologies 소프트웨어 개발 방법론
Waterfall

- System requirements
- Software requirements
- Analysis
- Program Design
- Coding
- Testing
- Operations
Agile
- Agile의 가치
- 프로세스 및 도구에 대한 개인 및 상호 작용
- 포괄적인 문서보다 작업 소프트웨어
- 계약 협상을 통한 고객 협업
- 계획에 따른 변경에 대한 대응
- 12가지 원칙
- Customer focus
- Embrace change and adapt
- Sprint : SDLC의 빠른 반복
- Backlog
- 백로그를 생성하는 것은 제품 소유자의 역할입니다. 이 백로그는 우선 순위 목록에 있는 소프트웨어의 모든 기능으로 구성됩니다. 백로그의 기능은 요구 사항 및 분석 단계의 결과이며 반드시 즉시 릴리스에 포함될 필요는 없는 기능을 포함합니다.
- User stories
- 기능이 우선 순위 목록의 상단에 가까워지면 사용자 스토리라는 더 작은 작업으로 나뉨.
- 각 User stories는 single 팀이 sigle 스프린트 내에 완료할 수 있을 만큼 작아야 함.
- Scrum team
- Scrum team은 10명보다 크지 않아야 하지만 Sprint 내에서 User stories를 완료할 만큼은 커야함.
- 매일 15분이 넘지 않는 standup(=meeting)을 해야함. : 각자가 뭘 하는지 sync하는 것임.
- Agile Method
- Agile Scrum
- 짧은 기간 동안 매일 만나 반복적인 sprint로 작업하는 소규모의
- Lean
- waste effort를 제거하는 것에 중점을 둠
Lean Software Development
모든 waste를 eliminate해서 최소화하고, 고객에 대한 가치를 최대화 하는데 중점을 둠.
- Eliminate waste 낭비 제거
- 7가지 waste
- Partially Done Work
- Extra Processes
- Extra Features
- Task Switching
- Motion
- Waiting
- Defects
- Amplify learning 학습 확대
- 짧은 sprint로 learning 확대함. 더 많은 반복을 통해:
- Developers learn faster
- Customers can give feedback sooner
- 기능을 조절하여 customer에게 더 만은 value를 제공할 수 있음.
- Decide as late as possible 최대한 늦게 결정
- Deliver as fast as possible 최대한 빨리 전달
- Empower the team 팀의 역량 강화
- Build integrity in 무결성 구축
- Optimize the whole 전체 최적화
Software Design Patterns
Version Control Systems
Coding Basics
Code Review and Testing