달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
 
객체지향 방법론
(Object Oriented Methodology)



- 본 글은 객체지향 방법론의 개략이며 Rational社의 객체지향 방법론인 Objectory Process의 개요서 부분 중 일부를 번역한 내용입니다.

1. 생명주기 구조(LifeCycle Structure)

소프트웨어 생명 주기는 여러주기로 나누어 지며, 각 주기는 제품의 새로운 생산물을 만든다. 본 방법론은 4개의 연속적인 단계로 하나의 개발 주기를 이룬다.
  • 개념화(Inception)
  • 상세화(Elaboration)
  • 구축(Construction)
  • 전이(Transition)
각 단계는 정의된 이정표(어떤 중요한 결정이 만들어지며 따라서 주요 목표가 취득되는 시점)와 함께 종결된다.


[그림 1] 프로세스의 단계들과 주요 이정표

주어진 제품에 대하여 처음 4단계를 한번 수행한 것을 초기 개발 주기(Initial Development Cycle)라 한다. 만약 제품이 계속적으로 지속된다면, 개념화, 상세화, 구축, 전이 단계를 계속적으로 반복하면서 기존의 제품은 다음 세대로 발전(Evolve)할 것이다. 이 기간을 "발전화(Evolution)"단계라 한다. 초기 개발 주기 다음에 이루어지는 개발 주기를 "발전주기(Evolution Cycles)"라 한다.


[그림 2] 두개의 중요한 개발 사이클

1.1 개념화 단계(Inception Phase)

개념화 단계동안 시스템에 대한 비즈니스 사례(Business Case)를 만들고 프로젝트 범위(Scope)를 정의한다. 이를 성취하기 위해서는 시스템과 상호작용을 하는 모든 외부 엔티티(Actor)를 명시하고, 상위 레벨(High Level)에서 상호작용의 특징을 정의한다. 여기에는 모든 유스케이스(Use Case)를 명시하고 중요한 몇 가지를 설명하는 것도 포함된다. 비즈니스 사례는 성공기준(Success Criteria), 위험관리(Risk Management), 필요한 자원의 평가, 주요한 이정표 날짜를 보여주는 단계별 계획을 포함한다.
개념화 단계의 마지막에는 프로젝트 목적을 검사하고 개발 진행여부를 결정한다.

1.2 상세화 단계(Elaboration Phase)

상세화 단계의 목표는 문제영역(Problem Domain)을 분석하고 견고한 아키텍쳐 토대를 마련하고 프로젝트 계획을 개발하며 프로젝트에서 가장 위험한 요소를 제거하는 것이다. 아키텍쳐에 대한 결정은 전체 시스템의 충분한 이해를 통하여 이루어져야 한다. 이것은 유스케이스를 기술하고 추가적인 요구사항과 같은 제약사항을 고려하는 것을 의미한다. 아키텍쳐를 검증하기 위해서는 선정된 아키텍쳐를 실현하고(Demonstrates) 중요한 유스케이스를 실행하는 시스템을 구현하는 것이다.
상세화 단계의 마지막에는 상세한 시스템의 목적과 범위 및 아키텍쳐 선정과 주요 위험을 검사한다.

1.3 구축 단계(Construction Phase)

구축 단계에서는 사용자들(User Community)에게 전이할 수 있도록 반복 및 점증적으로 제품을 완전히 개발하는 것이다. 이것은 나머지 유스케이스를 기술하고 설계부문을 더욱 충실하게 하며, 구현을 완전히 끝내고 소프트웨어를 테스트하는 것을 의미한다.
구축단계의 마지막에는 소프트웨어와 환경과 사용자들이 운영될 준비가 되었는지를 결정한다.

1.4 전이 단계(Transition Phase)

전이 단계에서는 소프트웨어를 사용자들(User Community)에게 전달하는 것이다. 제품이 사용자의 손에 전해졌을 때에는, 시스템에 적합하도록 추가적인 개발 및 발견되지 않은 문제점을 수정하고 미루어 놓은 사항들(Features)을 마무리 짓는다. 일반적으로 이 단계는 시스템의 "베타 릴리즈(Beta Release)"로 시작된다.
전이 단계의 마지막에는 생명주기 목적의 충족여부 및 또 다른 개발 주기의 시작여부를 결정해야 한다. 또한 프로세스를 개선하기 위해 프로젝트에서 경험한 것을 여기서 정리한다.

1.5 반복(Iteration)

방법론 프로세스에서의 각 단계는 여러 번의 반복으로 나누어질 수 있다. 반복은 하나의 완전한 개발 루프로서 내부적 혹은 외부적 실행가능한 제품(개발내에서 최종 제품의 부분적인 집합)을 만들어낸다. 이 실행 가능한 제품은 반복과 반복을 거듭하므로서 점증적으로 발전하여 최종 시스템이 된다.


[그림 3] 방법론 단계 내에서의 반복

각 반복은 소프트웨어 개발의 모든 관점을 거치고 지나가며 단계에 따라 각 프로세스 컴포넌트가 다양하게 강조될지라도 이것은 모두 프로세스 컴포넌트이다.
이는 다음 그림과 같이 여러 반복들이 서로 다른 부분에 강조를 하면서 4단계를 수행하는 모습으로 나타날 수 있다.


[그림 4] 프로세스 컴포넌트

본 방법론에서 단계들은 여러 반복들로 구성되어 있으며, 각 반복은 모든 프로세스 컴포넌트를 포함하고 있다. 각 프로세스 컴포넌트는 산출물에 대하여 책임이 있다. 곡선의 높이는 자원의 양을 표시하고 있다.
이 반복적인 접근방법의 중요한 점은 산출물은 초기에 기술되며 계속적으로 단계가 지나감에 따라 증대되며 성숙해진다.


[그림 5] 개발단계별 정보 집합의 발전

2. 프로세스 컴포넌트(Process Component)

2.1 프로세스 표현(Process Representation)

본 방법론의 프로세스가이드에서는 작업자(Workers)와 활동(Activities)과 작업흐름(Workflows)에 의하여 프로세스 컴포넌트를 기술한다. 수행하는 산출물은 산출물가이드에서 기술하고 있다.
  • 작업자(Workers)는 개개인의 행동 및 책임을 정의하거나 또는 함께 수행하는 개개인들의 집합 즉, 팀으로 정의된다. 왜냐면 일반적으로 생각하기에 작업자는 개인 혹은 팀 그 자체로 간주되지만 객체지향 방법론에서의 작업자는 개개인이 어떻게 작업을 수행하는냐 하는 그 역할에 중점을 두고 있기 때문에 이를 구분한는 것은 중요하다.
  • 활동(Activities)은 연관된 작업의 최소 단위이다. 활동의 한 부분만 수행하는 것은 적절하지 못하다. 하지만 개발의 감시를 용이하게 하기위하여 작업을 분할한다. 프로젝트에서 한 활동의 60% 완료되었다기 보다는 5개의 활동 중 3개가 완료되었다고 표현하는 것이 더 알기 쉽고 바람직하기 때문이다.
  • 산출물(Artifacts)은 개선(Evolve), 유지보수(Maintain) 혹은 입력자료로 사용되는 모델과 문서이다.
각 작업자는 연관성 있고 응집된(Cohesive) 활동 집합을 가지고 있다. "응집되어 있다는 것은(Cohesive)" 한 개인에 의해 활동이 가장 잘 수행되는 것을 의미한다. 각 작업자의 책임은 일반적으로 문서와 같이 연관된 산출물로 정의된다. 작업자의 예로는 유스케이스 설계자, 설계자, 아키텍트 그리고 프로세스 엔지니어가 있다.


[그림 6] 각 작업자별 고유의 활동집합과 산출물

활동의 연관된 집합을 둘러보면, 작업자는 또한 예상되는 작업수행 능력을 함축적으로 정의하고 있다.
프로젝트 관리자에 적합한 사람으로는 그 관련된 능력을 소지한 사람으로 볼 수 있다.
주어진 개개인이 한 작업자의 연관된 활동, 행위를 수행하고, 작업자와 연관되어 있는 모든 산출물에 대한 책임을 갖는 방법으로, 프로젝트 관리자는 이들 개개인을 작업자와 연관시킬 것이다.


[그림 7] 프로젝트에서 개인은 여러 작업자가 된다.

개인과 작업자의 관계는 시간에 따라 유동적이다. 적절한 능력을 소지한 개개인의 이용여부에 의한 제약사항 및 주어진 시간에 의해 수행되어지는 활동에 의한다. 보통은 한 개인이 하나의 작업자가 되지만 다음과 같은 경우도 있다.
  • 동일한 날에 개개인은 몇 개의 다른 작업자로서 일을 하기도 한다 : 이종범은 오전에는 설계 검토(Reviewer)를 하지만 오후에는 유스케이스 설계자로 대치될 수 있다.
  • 동시에 개개인은 몇 개의 작업자로서 일을 하기도 한다 : 어떤 클래스(Class)에서 허정무는 아키텍트와 설계자로서 존재할 수 있다.
  • 몇 명의 개인들은 동일한 작업자 즉 팀의 관계로서 어떤 활동을 함께 수행하기도 한다 : 선동렬과 박찬호는 동일한 유스케이스의 유스케이스 설계자로서 작업을 할 수 있다.
다양한 프로세스 컴포넌트와 활동을 계획할 때 프로젝트 관리자는 매끄럽게 이어지도록(Seamless Fashion) 개개인의 작업을 할당해야 한다. 이 말은 즉, 산출물이 한 개인으로부터 다른 개인으로 넘겨지는 것을 최대한 줄이고자 하는 것이다.
예를 들어서, 클래스의 설계자는 구현자(Implementer)가 될 수 있다. 주어진 유스케이스에서 동일한 개인이 유스케이스 명세자(Specifier)와 유스케이스 설계자로 행동할 수 있다.

2.2 프로세스 컴포넌트와 모델(Process Components and Models)

프로세스 컴포넌트는 연관된 집합의 활동과 산출물을 가지고 있다. 가장 중요한 산출물은 각 프로세스 컴포넌트가 산출하는 모델이다. 즉 유스케이스 모델, 설계 모델, 구현 모델 그리고 테스트 모델이다. 아래 그림은 프로세스 컴포넌트와 모델의 관계도를 보여주고 있다.


[그림 8] 각 프로세스 컴포넌트는 하나의 특정한 모델과 연관된다.

2.3 요구사항 수집(Requirement Capture)

프로세스 컴포넌트 중 요구사항 수집의 목표는 시스템이 무엇이며 무엇을 하는가를 기술하고 개발자와 고객이 기술서에 동의하도록 하는 것이다. 이를 위해서 시스템의 범위를 정하고 시스템의 주위 환경 및 행동을 정의한다. 시스템 요구사항이 존재할 뿐만 아니라 고객과 잠재적인 사용자는 정보의 중요한 소스(Sources)이다.
요구사항 수집을 하므로써 유스케이스 모델과 추가 요구사항(Supplementary Requirements)을 만들어 낸다. 유스케이스 모델은 사용자와 개발자에게 필수적인 요소이다. 사용자에겐 예상한 시스템이 모델에 잘 반영되었는가를 평가하기위해 모델이 필요하며, 개발자에게는 시스템상에서 요구사항을 보다 잘 이해하기 위해서 모델이 필요하다.
유스케이스 모델은 프로젝트에 참여하고 있는 모든 사람에게 유용하다.
유스케이스 모델은 액터(Actors)와 유스케이스(Use Cases)로 구성되어 있다. 액터는 사용자와, 개발되어질 시스템과 상호작용을 하는 다른 시스템을 의미한다. 액터는 시스템 범위를 정하는 것을 도와주고, 시스템이 어떻게 될 것이다라는 명확한 그림을 제공한다.
유스케이스는 시스템의 행위를 표현한다. 유스케이스는 액터의 요구사항에 의해 개발되어지기 때문에 시스템은 사용자에게 보다 적절하게 될 수 있다. 아래 그림은 재활용품 수집기(Recycling-machine) 시스템에 대한 유스케이스 모델의 예를 보여주고 있다.


[그림 9] 유스케이스 모델의 예

각각의 유스케이스는 상세히 기술된다. 유스케이스 설명서(Description)는 시스템이 단계적으로 액터와 어떻게 상호작용 하는가와 시스템이 무엇을 하는지를 설명한다.
유스케이스 역할은 시스템의 개발 주기 전체에 걸쳐 통합된 매개체(Thread)의 기능을 하는 것이다. 동일한 유스케이스 모델이 요구사항 수집, 분석 및 설계와 테스트 동안에 사용된다.

▶ 작업자와 작업흐름(Workers and Workflow)

각 작업자는 활동 집합과 행동에 대해 책임을 진다. 각 프로세스 컴포넌트는 고유의 작업자들과 그 작업자가 활동을 진행하는 논리적 방법인 작업흐름을 가지고 있다. 아래의 작업자들은 요구사항 수집에서 정의된다.
  • 유스케이스 모델 아키텍트(Use-Case Model Architect)
  • 유스케이스 명세자(Use-Case Specifier)
  • 요구사항 검토자(Requirements Reviewer)
  • 아키텍트(Architect)
아래 그림은 요구사항 수집에서 작업흐름에 대한 전체적인 개요를 보여주고 있다.


[그림 10] 요구사항 수집 단계

2.4 분석 및 설계(Analysis & Design)

프로세스 컴포넌트 중 분석 및 설계의 목표는 구현 단계에서 시스템이 어떻게 실현되는가를 보여주는 것이다. 아래 사항을 만족하는 시스템을 구축하여야 한다.
  • 유스케이스 설명서에 명시된 작업(Task)과 기능(Functions)을 구체적인 구현 환경에서 수행한다.
  • 시스템의 모든 요구사항을 충족한다.
  • 견고한 구조를 가진다(기능적 요구사항 변화가 있을 때 쉽게 변경할 수 있는가)
유스케이스 모델은 추가 요구사항 명세서(Supplementary Specifications)와 함께 설계의 토대가 된다.
분석 및 설계에서는 소스 코드의 추상적 개념을 보여주는 설계 모델을 만들어 낸다. 설계 모델은 어떻게 소스 코드가 구조화되어져 있고 쓰여졌는지를 보여주는 청사진과 같은 역할을 한다. 설계 또한 유스케이스의 내부에 관한(Inside-view) 설명서 또는 참여하는 객체/클래스의 관점에서 유스케이스가 어떻게 실현되는지를 기술한 유스케이스 실현(Use-Case Realization)을 만든다.
설계 모델은 설계 패키지에 구조화된 설계 클래스들로 구성되어 있다. 또한 설계 모델은 유스케이스를 수행하기 위해서 어떻게 이들 설계 클래스의 객체들이 상호작용하고 있는지를 기술한 내용을 담고 있다.
설계 활동은 아키텍쳐 측면에 집중한다. 이 아키텍쳐의 생산(Production) 및 확인(Validation)은 초기 설계 반복의 주요한 초점이 된다. 아키텍쳐는 몇 개의 아키텍쳐(Architectural) 뷰에 의해 표현된다. 이들 뷰에는 주요하고 구조적인 설계 결정사항들이 수집된다. 본질적으로 아키텍쳐 뷰는 상세부분에서 탈피하여 중요한 특성을 보다 쉽게 볼 수 있도록 전체 설계를 추상화 혹은 단순화하는 것이다. 아키텍쳐는 좋은 설계 모델을 개발하는 것 뿐만 아니라 시스템 개발 동안 모델의 품질을 증대시키기 위한 중요한 수단이다.

▶ 작업자와 작업흐름(Workers and Workflow)

아래의 작업자들은 분석 및 설계에서 정의된다.
  • 아키텍트(Architect)
  • 유스케이스 설계자(Use-Case Designer)
  • 설계자(Designer)
  • 설계 검토자(Design Reviewer)
다음의 그림은 분석 및 설계에서 작업흐름의 전체적인 개요를 보여주고 있다. 작업흐름은 아키텍쳐-레벨(Architectre-Level) 설계와 클래스-레벨(Class-Level) 설계로 나뉘어 진다.


[그림 11] 분석 및 설계 단계

2.5 구현(Implementation)

시스템은 구현을 통해서 생성되는 소스, 즉 소스 코드 파일(Source-Code Files), 헤더 파일(Header Files), 메이크 파일(Make Files) 등에 의해서 실현된다. 이 소스는 실행 가능한 시스템을 만들어 낼 것이다. 그리고 소스는 구현 패키지(Implementation Packages)에 구성된 모듈(Modules)로 이루어져 있는 구현 모델(Implementation Model)에서 설명된다. 설계 모델은 구현을 위한 기초 자료가 된다. 구현은 별개의 클래스 또는 패키지의 테스팅을 포함하고 있지만, 동시에 패키지와 클래스를 함께 테스팅하는 것은 포함하지 않는다. 이것은 다음 프로세스 컴포넌트 "테스트(Test)"에서 설명된다.

▶ 작업자와 작업흐름(Workers and Workflow)

아래의 작업자들은 분석 및 설계에서 정의된다.
  • 아키텍트(Architect)
  • 시스템 통합자(System integrator)
  • 구현자(Implementor)
  • 코드 검토자(Code Reviewer)
다음의 그림은 구현에서 작업흐름의 전체적인 개요를 보여주고 있다. 작업흐름은 구현 뷰(Implementation View)를 정의하는 것으로부터 클래스의 구현과 통합의 계획 및 수행 까지의 활동을 연결(Span)한다.


[그림 12] 구현 단계

2.6 테스트(Test)

테스트는 시스템 전체를 검증한다. 참여하고 있는 클래스들이 잘 어울려져 올바르게 작동하는가를 검증하기 위해서는, 먼저 개별적으로 유스케이스를 테스트한다. 그런 후에 유스케이스 설명서를(어떤 관점에서의) 테스트의 입력 자료로 사용하여 전체적으로 시스템을 테스트 한다. 테스트를 끝낸 후에 시스템은 전달되어 진다.

▶ 작업자와 작업흐름(Workers and Workflow)

아래의 작업자들은 분석 및 설계에서 정의된다.
  • 테스트 설계자(Test Designer)
  • 통합 테스터(Integration Tester)
  • 시스템 테스터(System Tester)
  • 설계자(Designer)
  • 구현자(Implementer)
다음의 그림은 테스트에서 작업흐름의 전체적인 개요를 보여주고 있다. 작업흐름은 계획에서부터 설계, 구현 그리고 수행하는 테스트 절차(Procedures)까지 전체적인 활동을 연결(Span)한다.


[그림 13] 테스트 단계




Posted by tornado
|