소프트웨어 개발방법론
(SDM; Software Development Methodology) :
소프트웨어를 개발하는 방법에 대한 이론으로서, 소프트웨어 개발 과정, 절차, 방법, 산출물, 기법, 도구들을 체계적으로 정리하고 표준화시킨 것입니다.
구조적 방법론
(Structured Development) :
전체 시스템을 정형화된 분석 절차에 따라 요구사항을 파악하여 문서화 하고, 이를 기반으로 소트프웨어를 개발하는 방법론 입니다.
- 요구 사항 분석 : 고객이 원하는 요구사항을 끌어내어 명세화합니다.
- 구조적 분석 : 고객이 원하는 기능과 시스템 환경, 데이터를 종합하여 DFD(Data Flow Diagram)을 작성하고, 이를 통해 기능을 분해하여 기능별 소단위 명세( mini-Specification)를 작성합니다.
- 구조적 설계 : 모듈 중심으로 소프트웨어를 설계합니다.
- 구조적 프로그래밍 : 설계를 기반으로 소프트웨어를 개발합니다.
“거시적 관점”이 부족하다는 한계가 있음
정보공학 개발 방법론
(Information Engineering Development) :
비즈니스 시스템 규모 성장과 소프트웨어 공학 발전에 따라 1980년대 중반에 등장한 방법론으로
기업 전체, 또는 기업의 주요 부분을 계획, 분석, 설계 및 구축에 정형화 된 기법들을 상호 연관성 있게 통합, 적용하는 데이터 중심 방법론 입니다.
- 정보 전략 계획(ISP) : 업무프로세스와 시스템을 분석하고 미래 아키텍처와 전략계획을 수립합니다.
- 업무 영역 분석(BAA) : 업무 현황을 분석하여 개념 수준의 데이터와 프로세스를 설계합니다.
- 업무 시스템 설계(BSD) : 실질적으로 시스템을 설계하는 단계로 다양한 다이어그램을 사용하여 프로세스를 설계합니다.
- 시스템 구축(SC) : 설계 명세서로부터 데이터베이스를 상세 설계하고 실행 가능한 프로그램 코드를 생성합니다.
“경직된 구조”로 이전 단계의 변화에 대응하기 어려움
객체 지향 개발 방법론
(Object-Oriented Development) :
현실 세계의 개체(Entity)를 속성(Attribute)과 메소드(Method)가 결합된 형태의 객체(Object) 로 표현하며,
이 객체들이 메시지 교환을 통해 상호 작용함으로써 전체 시스템이 운영되도록 개발하는 방법론입니다.
- 개념화 : 요구 사항을 분석하여 정의합니다.
- 상세화 : 문제 영역(Problem Domaion)을 분석하고 견고한 아키텍처 토대를 마련합니다.
- 구축 : 사용자들에게 전이할 수 있도록 반복 및 점증적으로 제품을 완전히 개발합니다.
- 전이 : 소트프웨어를 사용자에게 전달합니다.
개발 수준이 저 수준의 추상화 개념이므로 실제로 재사용 가능한 소프트웨어 개발은 기대하기 어려움
컴포넌트 기반 개발 방법론
(Component Based Development) :
컴포넌트를 조립하여 시스템을 개발 하여 객체지향의 단점인 S/W 재사용성을 극대화한 개발 방법론입니다.
- 분석 : 사용자의 요구 사항을 수집하고 이를 정의합니다.
- 설계 : 소프트웨어의 아키텍처를 정의하고 이를 구성하는 콤포넌트와 데이터베이스 등을 설계합니다.
- 구현 : 개발 표준을 정의하고 이에 맞춰 코드를 구현합니다.
- 테스트 : 요구 사항이 모두 반영되었는지 테스트하고 이에 대한 결과를 보고합니다.
애자일 개발 방법론
(Agile Software Development) :
기존 개발 방법론들이 너무 절차를 중시한 나머지 변화에 대응하기 어려웠던 단점을 개선하기 나왔습니다.
미래를 예측하기 보다는 주기적으로 제작 프로토타입을 시험해보는 철저한 관리를 통한 개발 방법론이라 할 수 있으며
끊임없이 개발하고 수정하는 일을 반복하면서 고객이 가장 만족할 수 있는 방향으로 소프트웨어를 개발합니다.
- 먼저 개발 범위 안에 있는 요구 사항을 분석해 우선 순위가 높은 요구 사항을 먼저 개발합니다.
- 개발 된 부분에 대해 실행하는 모습을 고객에게 보여주고 이에 대한 피드백을 받습니다.
- 고객의 요구 사항과 개선 사항을 반영하여 다음 요구 사항을 개발합니다.
- 1-3을 반복합니다.
테스트 기반 개발 방법론
(Test Driven Development) :
전통적인 개발 방법론에서의 구현 후 테스트를 수행하는 단계와는 반대로 테스트를 먼저 수행하고, 소프트웨어를 구현하는 개발 방법론입니다.
- 테스트 케이스 작성 : 요구 사항을 만족하기 위한 테스트 케이스를 작성합니다.
- 실제 코드 구현 : 테스트 케이스를 통과하기 위한 최소한의 코드를 구현합니다.
- 리팩토링 : 작성한 코드를 표준에 맞도록 리팩토링 합니다.
- 모든 요구 사항을 만족하는 테스트 케이스를 통과 할 때까지 1-3을 반복합니다.
행위 기반 개발 방법론
(Behaviour Driven Development) :
TDD에서 파생된 개발 방법론으로, 사용자의 행위를 정의하고 이에 대한 테스트 코드를 작성하면서 소프트웨어를 개발하는 방법입니다.