소프트웨어 개발 방법론

 소프트웨어 개발 방법론 

 

  • 소프트웨어 개발에 필요한 반복적인 과정(절차, 방법, 산출물, 기법, 도구)들을 체계적으로 정리한 것
  • 수 많은 소프트웨어 실제 개발 과정을 정리하여 체계적인 분석을 통해 각각의 상황에 맞는 개발 방법을 정의한 이론

 

소프트웨어를 생산하는 데 필요한 프로그래밍 개발 과정들을 정리하고 표준화하여

프로그래머들이 프로그래밍 개발과정에서 각 개인이 개발과정에서의 일관성을 유지하고

프로그래머들 간의 효과적인 협업이 이루어질 수 있도록 돕기 위한 방법론

 

 소프트웨어 방법론 구성 요소 

 

 1. 구조적 방법론 

1970년대

  • 절차 지향 소프트웨어 개발 방법론
  • 제한된 구조에서 코드 생성 및 순차적 실행
  • 프로세스 단위로 문제 해결  : 알고리즘 단위 구조( 순차, 선택, 반복 )로 코드 표현

 

구조적 방법론 기본 개발 과정

과정 설명
1) 요구사항 분석 고객이 원하는 요구사항을 끌어내 명세화하는 것
2) 구조적 분석 고객이 원하는 기능/시스템환경/데이터를 종합하여 데이터 흐름도(Data Flow Diagram)를 작성
3) 구조적 설계 모듈 중심 설계 단계. 목적 : 재활용, 결합도를 낮춰 독립성을 높임
4) 구조적 프로그래밍 순차(Sequencing), 선택(Selection), 반복(Iteration)의 논리 구조 구성으로 프로그램 복잡성 최소화

 

※ DD ( Data Dictionary )

  • 자료의 의미나 자료의 단위 및 값에 대한 사항을 정의하는 도구
  • DFD에 표현된 자료 저장소를 구체적으로 명시하기 위해 사용

 

※ DTD ( Data Flow Diagram ) 

  • 각 기능을 최대한 상세화가 될 때까지 분할하여 표현한 구조

 

※ STD ( State Transition Diagram )

  • 보통 어떤 상태에서 다른 상태로 변경되는 과정 및 해당 과정의 프로세스 명세

ex) 자판기 프로세스 STD

     각 상태에서 어떤 기능이 실행되고 괄호 안 조건 만족에 따라 화살표 방향으로 상태 전이

 

자판기 프로세스

 

※ Minispec ( Mini Specification )

  • 쪼갤 수 없을 정도 까지의 기능으로 분리 후 명세 ( 구조 언어 사용하거나 N-S Chart 이용 ) 

ex) 웹 브라우저 오픈 시 위키피디아 로드 여부에 따른 기능 명세

 -  구조 언어 명세법 -

     IF open web browser IF wikipedia open = true THEN search for article ELSE click wikipedia link

 

 -  N-S Chart 명세법 -

N-S Chart

 구조적 개발 방법론 장점 

  • 정형화 / 체계화 : 명확한 요구사항을 추출하여 설계에 반영 가능
  • 모듈화 :  효율적인 재사용 및 유지보수 가능

 

 구조적 개발 방법론 한계 

  • 거시적 관점 인식 부족 : 방법론에 대한 다양한 시도를 하고 있지 않다는 뜻으로 단위적 프로젝트에서만 사용하는 추세
  • 그 결과, 실제 사례 자료 부족으로 데이터 모델링 방법과 명확한 방법론적 지침이 미흡함

 

 구조적 방법론 대표적 모델링 :   폭포수 모델

폭포수 모델

 

 

 2. 정보 공학적 방법론 

1980년대

  • 정보시스템 > 경영정보시스템 ( MIS, Management Information System ) 진화
  • 기업의 정보시스템 구축을 위해 계획/분석/설계 등 전 과정을 정형화 시킨 절차 및 방법론
  • 과정 : 설계 및 구현 단계 ( 데이터 우선 개발 ) > 문제 영역 세분화 >  Top-Down 방식 전개
  • 빠른 결과물 확인이 가능하며 단순 S/W 개발이 아닌 기업의 경영전략에 초점을 둠

 

 단계별 정리 

 

1) ISP : 전사적인 전략과 시스템의 Align 단계
     경영전략 분석 -> 현행 업무 프로세스 분석 -> 현행 시스템 분석/평가 -> 아키텍처 개발 -> 전략 계획 (우선 순위 도출)
2) BAA : ISP에서 수집된 자료를 기반으로 세부적으로 확장하는 단계
     데이터 모델 다이어그램, 프로세스 분할 다이어그램, 프로세스/데이터 매트릭스 (CRUD 매트릭스)
3) BSD : 비지니스 시스템 설계
     ERD, DFD 등의 비지니스 시스템 설계
4) SD : 시스템 설계를 기반으로 정보시스템을 구축하는 단계
     연관분석, 물리적 데이터베이스 설계, 코딩등의 작업 수행

ISP BAA BSD 기술설계 구축 전환 운영

 

 정보공학 방법론 장점 

  • 일관성 있고 통일된 정보시스템 구축 가능
  • 데이터 중심 : 업무 절차 및 환경 변화에 유연

 

 정보공학 방법론 한계 

  • 정보공학 방법론을 효과적으로 이행하기 위해서는 장시간이 소요됨
  • 특정 사업 영역으로부터 독립된 시스템 개발 분야에서는 부적합

 

 정보공학 방법론 대표적 모델링 :   프로토타입

 

 

 

 3. 객체 지향 방법론 

1990년대

  • 프로그램을 객체와 객체간의 인터페이스 형태로 구성하기 위하여 문제 영역에서
  • 객체, 클래스 간의 관계를 식별하여 설계 모델로 변환하는 방법론
  • 분석과 설계, 구현의 전 과정을 객체 중심으로 개발
  • 특징 : 추상화, 캡슐화, 정보은폐, 상속, 다형성

 

 

 

 객체 지향 방법론 장점 

 

  • 사용자의 요구 사항 반영 및 모든 단계를 유기적으로 협력시킴
  • 전체 프로세스 방향성 유지와 상속에 의한 재사용성 향상
  • 현실 반영을 통한 분석 설계의 갭 최소화, 유지보수 용이함

 

 객체 지향 방법론 한계 

 

  • Software 기술 없이는 구현이 어려움

 

객체 지향 방법론 대표적 모델링 :  

반복-점증적 모델 ( Iterative and Incremental ) 

 

 

 

 

 4. CBD( Component Based Development ) 분석 방법론 

※ 컴포넌트 : 인터페이스로 접근 가능하고 독립적인 기능을 수행하는 모듈로써 교체가 가능한 소프트웨어 부품

 

  • 문제를 조각으로 나누어 각각 컴포넌트를 생성한 후, 다시 조합하는 재사용성에 초점을 둔 방식
  • 재사용 가능한 컴포넌트의 개발 또는 상용 컴포넌트를 조합해 애플리케이션 개발

 

CD 단계

  • 컴포넌트 개발 단계
  • 도메인 분석 후 컴포넌트 대상 업무 선별 및 개발된 컴포넌트를 저장소에 입력

CBD 단계

  • 개발된 컴포넌트를 사용하여 개발을 진행하는 단계
  • 요구 분석 후 컴포넌트 기반으로 설계 후 필요한 컴포넌트를 저장소에서 찾아 조립하는 방식으로 프로그램 개발을 진행

 

 CBD 분석 방법론 장점 

  • 생산성 및 품질 향상
  • 시스템 유지보수 비용 최소화 

 

 CBD 분석 방법론 한계 

  • 높은 설계 및 개발 수준을 요구하는 컴포넌트 특성에 비해 턱없이 부족한 국내 기술
  • 개발된 컴포넌트를 공유 및 활용할 수 잇는 유통 플랫폼이 미흡함

 

 5. 애자일 방법론 

  • 기존 방법론들이 절차를 중시한 나머지 변화에 빠른 대응을 할 수 없는 단점 개선을 위해 등장
  • 절차 < 사람 / 문서 < 소프트웨어 / 사전 계획 < 변화에 즉각 대응 / 계약, 협상 < 고객과의 협력

 

 애자일 방법론에 따른 개발 과정 

  1. 개발 범위 안에 있는 요구사항 분석 후 우선순위 순으로 개발
  2. 개발된 부분에 대해 실행하는 모습 시연 후 고객 평가 수렴
  3. 고객의 요구사항/개선사항을 반영하여 다음 버전 개발에 참고
  4. 위의 과정을 반복하며 소프트웨어 개발 범위를 점진적으로 확장

 단계별로 고객에게 소프트웨어 동작 시연 후 요구사항에 대한 피드백 수용이 포인트 

 

 

애자일 방법론 대표적 모델  : 

XP( eXtreme Programming ), SCRUM, FDD, Crystal 방법론

 

 

 개발 방법론 선택 기준 

  •  프로젝트 특성 및 규모 

  •  프로젝트 참여자의 수준 

  •  가용 자원의 정도 

  •  요구사항의 명확도 

  •  위험도 

 

 

 


출처: 

https://yoo-hyeok.tistory.com/103 

http://ko.wikipedia.org 

https://m.blog.naver.com/seilius/130185981952

https://multicore-it.com/46

http://www.jidum.com/jidums/view.do?jidumId=18

 

'Knowledge' 카테고리의 다른 글

비밀키 / 공개키  (0) 2019.08.31
하드웨어 / 미들웨어 / 소프트웨어  (0) 2019.08.30
API , Restful  (0) 2019.08.14
프로그래밍 언어 종류 10가지  (2) 2019.08.10
DNS  (0) 2019.08.01