-
소프트웨어 개발 수명 주기(SDLC) 모델개발 관련/개념 2020. 9. 30. 00:23
소프트웨어 개발 수명 주기 (Software Development Life Cycle)
= 소프트웨어 개발 프로세스(Software Development Process)라고도 한다
크게 순차적 개발 모델, 점진적 개발 모델, 반복적 개발 모델로 나누어 진다
순차적 개발 모델 (폭포수 모델, V-모델)
반복적 개발 모델 (래셔널 통합 프로세스, 스크럼, 칸반, 나선형 모델, 지속적 전달/배포)
폭포수 모델(Watefall model)은 6개의 연속적 단계로 이루어져있다
계획 - 분석 - 설계 - 구현 - 테스트 - 유지
계획
소프트웨어 개발 프로젝트의 전 과정에 걸쳐 일정과 예산에 대한 계획안을 수립하는 단계
계획 내용: 프로젝트 목적과 범위, 기대 효과와 관리상의 목표, 통제과정과 처리절차 및 자금,
인력, 장비, 시간의 소요량, 투입기간
요구사항 분석소프트웨어가 '무엇을 할 것인지'
개발하고자 하는 업무를 면밀히 조사, 이해하여 사용자의 요구사항을 정의해 요구사항 명세서를 만드는 단계
대표적인 기법: 객체 지향 분석(OOA), 구조적 분석(Structured Analysis)
설계
시스템의 개념적 측면(What)을 구체적(How)으로 명세화하는 단계
코딩(구현)의 준비단계, 테스트 계획과 유지보수에 대한 청사진을 나타냄
외부 설계: 외부적인 특성(화면, 출력물, 파일 또는 데이터베이스) 설계
내부 설계: 포괄적인 기능을 세부기능으로 분할해서 내부처리 기능을 나타내고, 자료를 정의. 일반 설계, 상세 설계로 나누어짐.
일반 설계: 전체 소프트웨어의 구조를 기능별로 분해해 계층적으로 나타냄
상세 설계: 각 기능별 모듈의 내부처리 기능을 순서도 (flow chart), 나씨-슈나이더만 차트, 의사코드(Pseudo code) 등으로 나타냄
대표적인 기법: 객체 지향 설계(OOD), 구조적 설계(Structured Design)
구현
설계 내용을 토대로 적합한 프로그래밍 언어로 각 모듈을 코딩하고 단위 모듈 테스트(Unit Test) 한 후
모듈들을 결합해서 총제적인 시스템으로 만드는 단계
유지보수하기 좋은 소프트웨어 구현 → 절차적(or 구조화) 프로그래밍 기법
모듈 재사용성 고려 → 객체 지향 프로그래밍(OOP) 기법
시스템 테스트
구현된 전체 시스템이 설계 내용과 같은 기능을 수행하는지기능의 정확성, 신뢰성 및 효율성 등에 대해 여러 가능한 경우를 가정해 실행해 보고 결과를 평가하는 단계
유지보수
개발이 완료되어 사용자가 운영하고 있는 시스템에 대해 일어나는 모든 변화에 대처해서 수정
소프트웨어 비용 중 67%를 차지, 다른 어떤 단계들보다도 가장 중요한 단계
테스팅 단계에서 <이미 설계되고 코딩된 제품>을
출시 전에 테스트하는 것은 오류 비용이 증가하는 경향이 있다
계획 단계에서 초기에 오류 감지할 시, 비즈니스에 비교적 큰 손실이 발생하지 않음!
프로세스가 더 진행될 수록, 손실은 기하급수적으로 증가
설계 단계에서 오류가 발견될 시, 재설계를 해야한다
발견되지 못 했을 시, 상당한 노력과 투자를 하여 디자인과 소스 코드를 크게 변경해야한다
구현 단계도 마찬가지다
로직에 문제가 있음에도 그 위에 기능을 더 빌드하는 경우, 장기적으로 심각한 손실을 일으킬 수 있다
→ 제품이 아직 빌드되는 동안, 모든 기능을 테스트하는 것이 좋다! (반복적인 애자일 방법론)
애자일 개발 모델 (Agile Development Model)
시간이 중요한 애플리케이션에 적용되며, 수명주기 단계의 속도를 높이고 범위를 줄임
개발 프로세스를 더 작은 <부분, 주기, 스프린트>로 나눈다
테스터는 프로세스 전반에 걸쳐 나머지 팀과 동시에 작업할 수 있으며,
결함 및 오류가 발생하는 즉시 수정 가능!
제한된 시간 안에 효율적으로 더 빨리, 자주, 많이 테스트 가능
테스트 업무 분산화, 테스트 활동 및 도구 다양화
주요 목적: <새로운 소프트웨어 기능>을 빠르고 최상의 품질로 제공
가격 경쟁력 있음: 개발 프로세스에서 일찍 오류를 고치는 것은 비교적 적은 비용과 노력을 요함
빠른 속도, 더 나은 결과: 팀 내 효과적인 커뮤니케이션과 이해관계자의 적극적 참여
DevOps 개발 모델
<개발-QA-운영> 갭을 해소하는 Agile 확장판!
개발 + 운영 → 커뮤니케이션에서 오는 장애 해소, 빠른 서비스 개발 & 반영
체인(개발 - QA - 운영)의 다양한 기능들 간 높은 수준의 합동 필요
개발자가 직접 운영환경을 컨트롤 (신속성 향상)
Agile과 다르게, DevOps는 지속적 개발(Continuous Development) 컨셉을 포함
지속적 개발(CD) = 버전 컨트롤에 작성, 커밋되는 코드는 빌드, 배포, 테스트 되며, 사용자가 사용할 준비가 된 프로덕션 환경에 설치됨
빠른 속도로 어플리케이션 및 서비스를 전달할 수 있게 해주는 자동화, 지속적 통합 툴에 큰 중점을 둔다
DevOps 모델의 각 단계에서 테스트 수행 → 테스터의 역할과 테스트 전반적 의미를 변화시킴 (전문적 기술+코드 능숙 요구)
연관 포스트
'개발 관련 > 개념' 카테고리의 다른 글
디버깅 (0) 2021.05.09 모듈 (0) 2021.05.09 도메인 주도 설계 (DDD) (0) 2021.04.11 소프트웨어 개발 환경 (0) 2021.02.17 점진적 개발 모델 Vs 반복적 개발 모델 (0) 2021.01.29