CH5. 소프트웨어 개발 방법론

김유찬·2023년 4월 9일
0

소프트웨어 공학

목록 보기
5/12
post-thumbnail

■ 소프트웨어 개발 방법론

-> SW 시스템을 구축하는데 필요한 수행방법과 수행에 따른 각종 기법 및 도구를 소프트웨어 공학 원리와 기업 문화를 바탕으로 체계적으로 정리하여 표준화한 것
-> 개발방법론의 전체 개발 공정 단계는 요구정의, 분석, 설계, 구축, 운영전환 5단계의 공정으로 구성

-> 개발방법론 Meta Model을 기반으로 개발 규모 및 적용 기술에 따라 최적화된 SW 개발 프로세스를 구축 -ex)Agile Practice, OO/CBD 등등

  • 프로토타입에서 제일 중요한 건 고객, 같이 일하는 팀원들이 이해하기 쉽도록 하는 것

  • incremental: 전체에서 부분부분 쪼개서 개발 후 마지막에 합치는 것

  • iterative: 전체적인 스케치를 그리고 수정하고 다시 또 수정해서 만드는 것

  • Spiral Model(나선형 모델)
    -디자인과 프로토타이핑 요소의 결합
    -프로토타이핑과 waterfall model의 기능을 결합
    -비용이 많이 들고 복잡한 대규모 프로젝트에 적합
    -하향식 및 상향식 개념의 장점

  • 방법론이라는 것도 모델의 개념이 존재 - (작업절차, 작업방법, 산출물, 기법), 도구, 관리

  • 구조적 방법론(top-down)
    -조각상처럼 깎아 내려가는 것
    -DFD, DD는 거의 필수적으로 요구사항단계부터 적용됨
    -실수하면 다시 깎아야 하기에 그만큼 어려움이 존재
    -프로세스 중심(기능위주)

  • 객체지향방법론(bottom-up)
    -UML 중심으로 모델링
    -V형태
    -재사용성
    -데이터중심(데이터+연산)

  • CBD 방법론
    -표준 인터페이스라는 게 정의되어 있어야 함(중요시함)
    -대다수가 Y형태
    -UML 선호

  • 개발 방법론 비교

  • 설계 방법에 따른 차이


    -구조적 방법론 즉, 프로세스 지향 설계는 기능과 데이터가 개별적으로 존재함
    -객체지향설계는 기능과 데이터가 객체안에 하나의 형태로 존재

■ 구조적 개발 방법론

  1. 구조적 기법의 개요
  • 구조적 기법의 정의
    -업무활동 중심의 방법론으로 정형화된 절차 및 도형 중심의 도구를 이용하여 사용자 요구사항 파악 및 문서화하는 기법
    -구조적 방법론의 기본적인 뿌리는 구조적 프로그래밍에서 출발하여 설계의 원칙들을 정리한 구조적 설계, 시스템 복잡성 해결을 위한 구조적 분석으로 발전

  • 구조적 기법의 등장 배경
    -소프트웨어 위기의 해결책 필요성
    -생산성 향상, 품질 개선, 유지보수성 향상

  • 특징
    -정보와 정보의 구조를 중심으로 분석, 설계, 구현
    -정형화된 분석 절차에 따라 사용자 요구사항을 파악하고 도형중심의 다이어그램을 이용하여 문서화
    -GOTO 분기 대신에 3개의 논리적인 구조인 순차, 선택, 반복을 구성하여 프로그램 흐름 복잡성을 감소

  • 구조적 기법의 기본원리
    -추상화
    -구조화(수평분리:factoring, 입력/자료변환/출력, 수직분리: 상위제어모듈 변경시 하위모듈로의 파급이 큼)
    -단계적 상세화
    -모듈화: Divide & Conquer

  1. 구성요소
  • 구조적 프로그래밍
    -Dijkstra에 의해 정형화
    -계층적 형식, 제한된 제어구조, 작성순서대로 PGM 실행
    -연속 구조, 선택 구조, 반복

  • 구조적 설계
    -개념: 소프트웨어 기능과 프로그램 구조, 모듈을 설계하기 위한 전략, 평가지침, 문서화 도구를 지원하는 체계적 설계기법
    -기본원칙: 복합 설계의 기본 원칙(결합도, 응집도)

  • 구조적 분석
    -개념: 도형중심: DFD, DD< Minispec 이용 / 정형화된 분석절차, 사용자 요구파악, 문서화하는 체계적 기법
    -기본 원칙: 분할과 정복, 추상화, 정형화, 구조적 조직화, 하향식 기능분해

  • 구조적 언어
    -Structured COBOL, Fortran 77, PL/1, Pascal

  1. 구조적 기법의 설계평가 및 구조적 설계의 단점
  • 설계평가: 결합도, 응집도
  • 단점: 데이터 설계방법 결여, 변환분석과 거래분석 측정 기준 모호, 응집도/결합도 측정기준 모호, 대규모/복잡한 시스템에 비효율적

■ 정보공학 방법론

  1. 정보공학 방법론 개요
    1) 정보공학 방법론의 정의
    -기업 전체 또는 주요부문을 대상으로 저옵시스템 계획수립, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합 적용하려는 데이터 중심 방법론
    -기업에 필요한 정보와 업무를 총체적, 체계적, 효과적으로 파악하여 이를 모형화하고 빠른 시간 내에 정보시스템으로 발전시키기 위해 필요한 일련의 작업절차를 자동화한 공학적인 방법론

2) 정보공학 방법론의 등장배경
(1) 환경의 변화
-비즈니스의 변화: 컴퓨터 이용 활성화, 업무 기능 및 데이터의 분업화
-정보기술의 발달: 하드웨어, 네트워크, R-DBMS 성능향상 등
(2) 구조적 방법론의 한계
-데이터 모델링 방법의 미흡
-기업 전반의 거시적 관점의 부족
-명확한 방법론적 지침의 미흡
-설계와 코딩을 강조
(3) 정보공학 방법론의 특징
-기업업무중심(ISP포함), 자료중심, 도형중심 접근
-프로젝트 계획, 개발, 운영 단계의 명확한 구조기반 제시
-정보시스템 개발의 자동화 지향
-고객지향적, 최신 정보기술 능동적 수용
-공학적 접근방식을 사용
-적극적인 사용자 참여를 유도

  1. 추진 원칙 및 추진 단계
    1) 추진 원칙
    -프로젝트를 관리 가능한 단위로 분할, 정복
    -데이터와 프로세스의 균형 유지
    -모듈화, 하향식 구현
    -핵심기술: 레파지토리, CASE, 4GL, RAD

2) 단계별 수행 내용
(1) 정보전략 계획: 경영전략, 관련조직, 업무자료 거시적 분석, 현행시스템 평가
(2) 업무영역분석: 데이터모델링:ERD, 프로세스 모델링: PHD,PDD,DFD
(3) 업무시스템설계: 업무절차 정의, Presentation 설계, 분산설계
(4) 시스템 구축: 응용프로그램 작성

  1. 장단점
    1) 장점
    -경쟁우위 확보의 전략적 기회 식별 및 방안 제공
    -일관성 있고 통일된 정보시스템 구축 가능
    -시스템의 장기적인 진화, 발전 허용
    -데이터 중심으로 업무절차 및 환경 변화에 유연

2) 단점
-정보공학의 효과를 위해 장기간 필요
-소규모의 자동화 요구 사업영역에는 시간이 오래걸림
-특정 사업영역으로부터 독립된 시스템 개발에는 부적합

  1. 문제점 및 개선대책
    1) 문제점
    -구조적 방법의 SDLC 그대로 이용
    -CASE Tool 이용이 쉽지 않음
    -중소 규모 프로젝트의 무리한 적용
    -복잡한 논리, 많은 산출물

2) 동향 및 개선대책
-재사용 패러다임이 대안
-정보공학으로 커버 못하는 영역의 확산(인터넷, 멀티미디어)
-기업시스템 구축은 당분간 유지

■ 객체지향 방법론

□ 객체지향의 개요

  1. 객체지향의 정의
    -현실세계에서 개체를 데이터와 함수를 결합시킨 형태로 표현하는 개념으로 객체간의 메시지 통신을 통해 시스템을 구현하는 개발 방법

  2. 객체지향의 기본개념
    1) 객체와 메시지
    -객체란 실세계에 존재하는 사물을 표현한 것으로 데이터와 함수로 구성
    -객체간의 통신은 메시지를 통하여 전달하며 외부 객체에 의해 함수를 구현하여 객체의 데이터에 접근함
    2) 캡슐화와 정보은닉
    -객체의 데이터와 함수를 하나로 묶고 블랙박스화 하여 외부와 접근을 제한함
    -데이터의 임의변경을 통제하기 위해 메소드를 통해서만 접근이 가능토록 하는 것을 정보은닉이라고 함
    3) 클래스와 인스턴스
    -같은 종류 및 특성을 가진 객체들을 모아서 공통의 특성으로 분류하고 탬플릿화 하는 것을 클래스로 정의
    -클래스의 실체들로서 탬플릿화된 클래스에서 파생된 하나의 실제 객체를 인스턴스로 정의
    ※객체와 인스턴스 - 인스턴스는 클래스를 통해서 만들어지는 하나하나를 의미하고 객체는 클래스를 통해서 만들어지는 통째, 집약체를 의미
    4) 상속
    -클래스간의 계층구조를 통하여 공통 특성을 상위클래스로부터 물려받는 것을 상속이라고 함
    -다중상속: 두 개 이상의 상위클래스로부터 상속
    -단일상속: 오직 하나의 상위클래스로부터 상속
    5)다형성
    -하나의 함수의 이름이나 연산자가 여러목적으로 사용될 수 있는 것
    -Overriding: 상위클래스에 정의된 메소드를 하위클래스에서 재정의
    -Overloading: 매개변수의 데이터 형식에 따라 같은 이름의 메소드를 다중정의하여 여러 목적으로 사용함

□ 객체지향 설계 방법

  1. 일반적 설계기법 접근
    1) 전통적 개발 방법의 한계
    -종래의 폭포수 모형은 공정단계가 길고 문서 작업이 많았으나, 객체지향 개발방법론은 인간의 사고방식과 유사한 분석 및 설계가 가능함
    -개발 공정간의 전환이 자연스럽고 신속하며 절차적 프로그래밍과는 달리 객체지향설계는 문제해결을 위한 객체에 대한 이해가 선행되어야 함
    -소프트웨어 생산기술에 대한 관심이 프로그래밍에서 분석 및 설계로 옮겨지면서 프로그램을 객체단위로 분할하고 데이터의 동적 측면을 세분화
    2) 전통적 방법론과 비교

  2. 객체지향 개발 방법론 이론적 배경
    1) Booch
    -시스템 형성 구조를 모형화하는 데이터흐름도(DFD)를 사용하여 객체를 분해하고 객체간의 인터페이스를 찾아 프로그램으로 변환시키는 방법
    -요구사항분석: 요구분석을 위한 도구로서 시스템 함수명세서, 시스템차트 지원
    -도메인분석: 업무영역 분석을 위해 클래스다이어그램, 상속다이어그램, 객체시나리오 다이어그램 적용
    -시스템 설계: 클래스 분류 다이어그램 적용

2) OMT(Object Modeling Technique)
-객체 모델링 기법은 분석, 설계, 구현으로 이루어져 있음
-분석: 소프트웨어 구성요소들을 그래픽 표기법을 이용 객체모델링, 동적모델링, 기능모델링을 통해 분석모델설정
-시스팀 설계: 대상문제 파악에 중점을 둔 분석 단계와는 달리 시스템 구현을 위한 문제 해결방안 모색
-객체 설계: 분석단계의 모델을 상세화 하고 구현을 위한 기초를 제공하여 클래스, 모듈간의 인터페이스, 알고리즘 등 함수의 정의
-구현: 객체 설계단계의 객체, 동적, 기능모델 및 기타 문서 등을 이용 시스템 구현

3) OOSE(Object Oriented Software Engineering)
-Use Case 다이어그램을 적용하여 분석하며 Use Case 모델은 생성되는 다른 모델의 모든 근간을 제공
-요구모델: 시스템 정의 및 요구사항 파악
-분석모델: 시스템 구조개발에 목적을 두고 논리적구조에 중점을 두고 기능을 Use Case로 분할
-설계모델: 분석모델의 정제 및 형식화를 통해 설계모델 생성 및 실제 환경에서 모델개발
-구현모델: 실제적인 코드를 작성 - 객체지향언어 권고
-검사모델: 개발된 시스템의 검증 - V&V(Validation & Verification)

  1. 객체지향 개발 단계별 주요 Activity

    -소프트웨어 개발산출물에 대한 검증 및 확인활동은 공정별로 주요활동에 차이가 있음

1) 시스템 계획 단계
-시스템에 대한 비즈니스 요구사항에 따른 요구사항 정의
-요구사항 목표 달성을 위한 사례를 만들고 프로젝트의 범위를 정의하고 계획 수립
-사례는 성공기준, 위험관리에 필요한 자원평가, 중요한 일정을 보여주는 단계별 전력 및 계획을 포함

2) 분석 단계
-주어진 요구사항의 문제에 대해 객체를 찾고, 이들 객체를 분류하고, 객체간의 관계를 분석(일반화, 특수화, 집단화)
-객체모델링: 시스템의 정적인 표현으로 객체 및 클래스를 정의하고 시스템에 대한 전박적인 개념적 모델링 과정 수행
-동적모델링: 객체의 활동 및 흐름을 분석하며 시스템의 동적인 표현으로 객체의 상태가 업무처리 흐름에 따라 변화되는 과정 기술
-기능모델링: 처리 행위자, 데이터 저장, 정보의 흐름에 대하여 식별된 객체들의 기능처리 표현을 목적으로 하는 과정
-User Interface: 사용자와 원활한 의사소통을 위해 요구사항 전반에 대한 개념 이해를 돕기 위한 프로토타입 개발

3) 설계 단계
-시스템 구조설계: 문제영역 분석에 따라 견고한 아키텍처 기초를 마련하여 프로젝트 위험요소를 최소화 하고, 아키텍처에 대한 결정은 전체 시스템에 대한 충분한 이해를 통하여 이루어져야 함
-상세객체모델링: 분석단계에서 개념모델링(객체, 동적, 기능)을 구체화된 모습으로 모델링하며 주된 작업내용은 문제영역으로부터 클래스 도출, 동작정의, 객체간의 관계파악, 클래스간의 인터페이스를 정의하고 구체화 시켜가는 과정
-설계단계에서 User Interface는 실제 화면설계이며 정적 모델링에서 도출된 객체를 데이터베이스 설계(ERD)로 전환을 포함

4) 구현 단계
-설계단계의 산출물을 이용하여 객체지향 언어를 적용하여 프로그래밍 수행
-클래스 변수 및 메소드 구현, 클래스간의 인터페이스, 화면 구현
-개발자는 화이트박스테스트 및 블랙박스테스트 수행

5) V&V(Validation & Verification)
-개발산출물의 확인 및 검증활동

□ 객체지향 기술의 향후 전망

1) 방법론 측면
-소프트웨어 개발이 복잡하고 다양해짐에 따라 프로토타입을 개발하여 위험요인을 사전에 제거하는 추가 요구 활동이 필요하며 아직 성숙되지 않은 개발 방법론이나 생산성을 높일 수 있는 방법론임
-웹 개발환경이 보편화 됨에 따라 유사 반복내용에 대한 디자인 패턴 개발 적용 및 소프트웨어 시스템 관점으로 접근하고 있음
-개발의 생산성을 위한 CASE 도구 및 Repository를 환경을 토대로 버전 및 형상관리를 위한 자동화 노력이 추세임

2) 기술적 픅면
-최근 프로그래밍 언어가 분산객체 환경을 지원하는 개념 지원 웹 서비스가 가능한 플랫폼이 지원되고 있으면 데이터베이스, 운영체제, 네트워크 등 정보기술 분야에 신기술 적용을 위한 연구, 개발이 활발함
-객체지향 기술은 기업 비즈니스 또는 산업차원에서 소프트웨어 재사용성을 높이기 위해 CBD 프로젝트가 활성화 될 전망임

profile
eukddan

0개의 댓글