소프트웨어 개발 1: 소프트웨어 개발 방법론과 생명 주기
22 Jul 2024 #cs
소프트웨어 공학 (SE; Software Engineering)
소프트웨어(SW)의 위기를 극복하기 위한 방안으로 연구된 학문입니다. SW의 품질과 생산성 향상을 목적으로 합니다.
- 기본 원칙
- 현대적인 프로그래밍 기술을 사용해야 함.
- SW 품질 유지를 위해 지속적으로 검증해야 함.
- SW 개발 관련 사항 및 결과에 대한 기록을 유지해야 함.
소프트웨어 개발 방법론
SW 개발의 전체 과정을 체계적으로 계획하고 관리하기 위한 일련의 절차와 기법. 요구사항 수집, 설계, 구현, 테스트, 배포, 유지보수 등의 단계로 구성.
- 방식: 구조적 방법론, 객체지향 방법론, 애자일 방법론, 컴포넌트 기반 방법론 등.
구조적 방법론
정형화된 분석 절차에 따라 사용자 요구사항을 파악 및 문서화하는 프로세스(process) 중심의 방법론.
- 자료 흐름도 (DFD), 자료 사전 (DD), 소단위 명세서의 특징을 가짐.
- 목적: 이해가 쉽고 검증 가능한 프로그램을 만드는 것.
- 절차: 타당성 검토 → 계획 → 요구사항 → 설계 → 구현 → 테스트 → 운용/유지보수
컴포넌트 기반 방법론 (CBD; Component Based Design)
기존 시스템이나 SW의 컴포넌트를 조합해 새로운 애플리케이션을 만드는 방법론.
- 컴포넌트의 재사용(reusability)을 통해 시간 및 노력을 절감.
- 절차: 준비 → 분석 → 설계 → 구현 → 테스트 → 전개 → 인도
소프트웨어 개발 생명 주기 (Software Development Life Cycle)
SW 개발 과정을 각 단계별(설계, 운용, 보수 등)로 나눈 것. 개발 단계와 각 단계별 활동, 결과적 산출물로 표현.
폭포수 모형 (Waterfall Model)
각 단계를 확실히 끝내고 그 결과를 검토하여 승인한 뒤 다음 단계를 진행하는 모형.
- 이전 단계로 돌아갈 수 없음을 가정.
- 고전적 생명 주기 모형: 제일 오래되고 많이 사용되어 옴.
나선형 모형 (Spiral Model)
나선을 돌듯 여러 번의 개발 과정을 거쳐 점진적으로 최종 SW를 개발하는 모형.
- Boehm이 제안함.
- 과정: 계획 수립 → 위험 분석 → 개발/검증 → 고객 평가 → 처음부터 반복
애자일 모형 (Agile Model)
요구사항 변화에 유연하게 대응할 수 있게 일정한 주기를 반복하면서 개발하는 모형.
- 고객과 소통하여 빠르고 낭비 없게 개발하기 위한 방법론을 통칭하는 말.
- 핵심 가치: 개인과 상호작용, 실질적인 SW, 고객과의 협업, 변화에 대한 반응
- 대표적 모형: 스크럼(Scrum), XP(eXtreme Programming), Kanban, Lean, FDD(Feature Driven Development; 기능 중심 개발)
스크럼 (Scrum)
애자일 방법론의 일종으로, 팀이 반복적이고 점진적으로 작업을 수행하며 일정한 기간 내에 가치를 전달할 수 있도록 돕는 프레임워크.
- 프로세스:
- 스프린트 계획 회의 (Sprint Planning Meeting): 제품 백로그 중 이번 스프린트에서 작업할 내용을 가지고 단기 일정을 수립하는 회의
- 스프린트 (Sprint): 실제 개발 과정. 보통 2-4주 기간에서 진행.
- 일일 스크럼 회의 (Daily Scrum Meeting): 모든 팀원이 매일 15분 여동안 진행 상황을 점검하는 회의. 남은 작업은 소멸 차트(Burn-down chart)에 표시함.
- 스프린트 검토 회의 (Sprint Review): 부분/최종 완성 제품이 요구사항에 부합하는지 테스트하는 회의.
- 스프린트 회고 (Sprint Retrospective): 규칙 준수 여부 및 개선점을 확인하고 기록.
XP (eXtreme Programming)
고객의 요구사항에 수시로 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법.
- 짧고 반복적인 개발 주기, 고객의 적극적 참여로 빠른 SW 개발을 목적으로 함.
- 핵심 가치: 의사소통(Communication), 단순성(Simplicity), 용기(Courage), 존중(Respect), 피드백(Feedback)
- 주요 실천 방법 (Practice):
- Pair Programming: 함께 프로그래밍함으로써 개발에 대한 책임을 공동으로 가짐.
- Collective Ownership: 개발 코드에 대한 권한과 책임을 공동으로 소유.
- Test-Driven Development: 코딩 전 테스트 케이스를 먼저 작성하여 해야할 일을 명확히 파악함. 자동화된 테스트 도구(구조, 프레임워크)를 사용하여 테스트를 지속적으로 실시함.
- Whole Team: 개발에 참여하는 모든 구성원(+고객)은 각자 역할이 있고, 그에 대한 책임을 가짐.
- Continuous Integration: 모듈 단위로 개발된 코드는 작업이 마무리될 때마다 지속적으로 통합됨.
- Refactoring: 프로그램 기능을 변경하지 않고 시스템을 재구성함. 프로그램을 쉽게 이해/수정하여 빠르게 개발하기 위해서.
- Small Release: 릴리즈 기간을 짧게 반복하여 고객 요구 변화에 신속히 대응.