M3
- MOF(Meta Object Facility)
- M2 수준에 속한 메타 모델을 정의하는 메타메타 모델

M2
- UML 기반 설계를 가능케하는 모델 요소를 정의하는 메타 모델

M1
- 사용자 모델을 도식화하는 모델 계층

M0
- 런타임 인스턴스 계층
- 모델이  코드를 생성하고, 그것을 실행하는 단계

 

[출처] 한국IBM

 

I. UML 2.0 개정의 개요

. 머리말

UML 2.0은 모델 중심의 방식을 위해 존재한다. 스케치 툴로서 사용하고자 하는 사람들도 UML 1 처럼 비공식적으로 사용할 수 있다. 언어의 룩앤필도 별로 변경되지 않았다.
하지만 MDD에서는 이제 표준화 방식으로 사용할 수 있다. UML 2.0은 정확성이 향상되었다. 완전히 자동화된 코드 생성 기능을 사용할 수 있다.
언어 구조는 모듈식과 점진적은 방식으로 채택하도록 구성되었다. 관심 있는 언어의 일부를 공부하고 나머지는 무시해도 된다. 경험과 지식이 늘어날수록 새로운 기능을 선택적으로 사용할 수 있다. 순응성 정의도 상당히 간단해져서 보조 툴들간 상호운용성과 다양한 벤더들의 툴들간 상호 운용성이 향상되었다.
새롭게 추가된 부분은 얼마 안된다. (언어가 팽창되는 것을 방지하기 위해서이다.) 그리고 이 모든 것들은 실제로 매우 크고 복잡한 시스템을 모델링 할 수 있는 반복 원리에 따라 디자인되었다. 특히, 소프트웨어 아키텍쳐, 복잡한 시스템 인터랙션, 플로우 기반 모델이 확장되어 비즈니스 프로세스 모델링과 시스템 엔지니어링 같은 애플리케이션에 이상적으로 쓰이도록 변모하였다.
언어 확장 메커니즘도 단순하게 재구성되었다. UML에 기반하여 도메인 스팩의 언어들을 정의할 때 보다 직접적인 방식을 사용할 수 있다. 이러한 언어들은 UML 툴과 전문성을 활용할 수 있다는 장점이 있다.
전체적으로 볼 때, 고급의 소프트웨어 시스템을 보다 빠르고 신뢰성 있게 구현할 수 있는 차세대 모델링 언어가 되었다. 중요한 것은, 개별 컴포넌트들이 큰 규모에 통합될 때 하드웨어 디자인에서 발생하는 단계들과 견줄 수 있는 고급 레벨의 프로그램 디자인이란 점이다

 

. UML 2.0의 정의

- 보다 수준 높은 자동화를 실행할 수 있는 정확한 언어 정의

. UML 1 개정의 이유

- MDD 툴과 메소드를 보다 잘 지원하기 위함

- 전통적인 CASE 툴 보다 한층 더 수준 높은 자동화를 지원하는 UML 기반의 툴 필요성

- 수준 높은 자동화를 지원하기 위해서는 원래 표준보다 더 정확한 방식으로 UML을 정의해야함

- 웹 기반 애플리케이션과 SOA등 신기술의 등장

 

II. UML 2.0의 향상된 특징

. UML 2.0의 주요 기능

기능

내용

정확한 언어 정의

MDD에 필요한 고급 자동화를 지원

모델의 모호함과 부정확성을 없애고 프로그램이 모델을 변형 및 조작을 가능케함

향상된 언어 구조

사용자가 언어에 보다 쉽게 접근할 수 있고 툴들 간 내부 작동을 활성화 할 수 있는 모듈식

규모가 큰 시스템의 모델링 향상

현대 시스템은 더욱더 복잡해지고 있는 추세=>이를 지원하기 위해 유연한 새로운 계층 기능이 언어에 추가되어 소프트웨어 모델링을 지원

도메인 스팩의 특성화 지원 향상

" 확장" 메커니즘 이용

기본적인 언어가 보다 정확하고 단순해지도록 정리되었음

다양한 모델링 개념들의 정리, 개념화, 정의

보다 단순하고 일관성 있는 언어

중복된 개념을 제거하고, 많은 정의들을 정리하고, 텍스트 정의와 예제를 추가함

. UML 2.0의 상세 설명

1). 정확도

- 초기 소프트웨어 모델링 언어는 비공식적으로 정의=>사람마다 다르게 해석

- 대부분의 모델링 언어들이 문서화나 설계에만 사용되고 상세한 부분은 구현시 기술함

이러한 모호함을 줄이기 위해 UML 첫 표준 정의가 메타모델(metamodel)을 사용하여 정의

- 메타모델은 UML의 한 요소를 사용하여 정의되었고 Object Constraint Language (OCL)로 작성된 정식 제약으로 보완

이렇게 조합하여 UML의 추상 신택스에 대한 공식 스팩을 선보임.

 

메타모델 : 각 UML 모델링 개념의 특징과, 다른 모델링 개념들과의 관계를 정의하는 모델

UML 클래스 다이어그램에서 정의된 개념들로 구성된 UML의 하위 세트를 Meta-Object Facility (MOF)라고 한다. 이 하위세트는 다른 모델링 언어를 정의하는데도 사용

이것은 실제 표기법이나 구체적 신택스 (텍스트와 그래픽)와 무관하기 때문에 모델을 표현하는데 사용

다시 말해서 이것은 해당 모델이 잘 구성되었는지 여부를 결정할 때 사용할 수 있는 규칙 세트를 정의한 것.

 

- UML 2.0에서 정확도를 향상시키기위해 추가한 기능

기능

내용

메타모델 인프라의 리팩토링

추상적인 모델링 개념과 패턴들로 구성하여 의미와 규칙을 명확히 표현

신택스와 의미를 개별적으로 정의함

잘 정리된 개념들은 다양한 방식들로 조합되어 보다 복잡한 사용자 레벨의 모델링 개념들을 만듬

확장되고 보다 정확해진 의미 설명

UML 2.0 스팩은 의미를 강조

분명하게 정의된 역할 의미

UML 2.0 스팩은 원 버전의 심각한 의미 차이를 명확히 함

런타임 시 링크와 인스턴스의 구조적 의미

구조와 작동의 관계

현재 UML의 모든 고급 작동 형식에서 공유되고 있는 의미의 기초 또는 일상성 모델(스테이트 머신, 액티비티, 인터랙션)과 잠재적인 미래 모델. 또한 다양한 형식을 사용하여 표현되는 객체의 작동은 서로 인터랙팅 하는지를 확인

그림 1. UML 2.0 의미 구조

 

2). 새로운 언어 아키텍쳐

- 언어의 복잡성 문제를 다루기 위해 UML 2.0은 언어(표 1) 모듈을 선택적으로 사용할 수 있는 방식으로 구성

- 그림 2는 공유 개념들(클래스와 관련 개념)로 이루어진 기초로 구성하고, 그 위에는 하위 언어 또는 언어 단위의 모음들이 수직적으로 구성함

- 수직적 언어 단위들은 최대 세 가지 레벨들로 구성하고 이 레벨들은 아래 레벨에서 사용했던 것에 더 많은 모델링 기능을 추가함


그림 2. UML 2.0의 언어 구조

언어 단위

목적

Actions

정의가 잘된 액션들의 (기본) 모델링

Activities

데이터와 제어 흐름 작동 모델링

Classes

기본 구조들의 (기본) 모델링

Components

컴포넌트 기술을 위한 복잡한 구조 모델링

Deployments

전개 모델링

General Behaviors

일반적인 동작 의미 기초와 시간 모델링 (기본)

Information Flows

추상 데이터 흐름 모델링

Interactions

객체간 동작 모델링

Models

모델 구조

Profiles

언어 커스터마이징

State Machines

이벤트 중심의 동작 모델링

Structures

복잡한 구조 모델링

Templates

패턴 모델링

Use Cases

비공식적인 동작 요구사항 모델링

1. UML 2.0의 언어 단위

 

3). 호환성

- 호환성의 정의와 구조도 UML 2.0에서 매우 단순해짐

- UML 2.0에서, 단 세 개의 호환성 레벨만 정의

- 계층적 언어 단위 레벨에 순응하는 것은 0으로 표시.

- 레벨(n)의 모델이 더 높은 레벨(n+1)에 있는 모델들에도 호환되도록 정의

네 가지 유형의 호환성이 정의

·  추상 신택스 호환

·  구체적 신택스(UML 표기법) 호환

·  추상/구체적 신택스 호환성

·  추상/구체적 신택스에 대한 호환과 다이어그램 교환 표준[OMG03b]에 대한 호환

 

4). 대규모 시스템 모델링 기능

- 대부분의 새로운 모델링 기능들은 기존 기능들의 단순한 확장일 뿐이고, 이것은 대규모의 소프트웨어 시스템을 모델링 하는데 사용됨

- 해당 유형의 모델 엘리먼트들을 조합하여 단위로 만들고 다음 추상화 레벨에서 같은 방식으로 조합

프로그래밍 언어의 프로시저가 다른 프로시저 안에서 중첩되는 방식과 비슷

다음 모델링 기능들은 위에 설명한 방식으로 확장됨.

  • 복잡한 구조(Complex structures)
  • 액티비티(Activities)
  • 인터랙션(Interactions)
  • 상태 머신(State machines)

위 세가지 요소는 UML 2.0에서 거의 90% 이상을 차지.

 

5). 복잡한 구조(Complex structures)

- 다양한 아키텍쳐 디스크립션 언어들에 기반하고 그래프로 개념을 나타냄

- 한 개 이상의 포트(port)를 갖고 있는 파트(part)라고 하는 기본 구조적 노드들은 커넥터(connector)라고 하는 통신 채널을 통해 서로 연결

- 자신의 포트를 갖고 있는 더 높은 레벨 안에서 캡슐화 되어 다른 상위 레벨에 조합됨(그림3)


그림 3. 복잡한 구조 모델링 개념
  그림 3에서 /a:A 파트와 /b:B 는 파트 /c:C 내에서 중첩된다. 이것은 합성 구조 클래스 C의 인스턴스를 나타냄.

- 모두 포트, 파트, 상호연결 등의 개념을 갖고 있고 이 세 가지 기본 개념을 반복적으로 적용하는 것으로 임의의 복잡한 소프트웨어 아키텍쳐를 모델링이 가능함

 

액티비티(Activities)

다양한 종류의 흐름들을 모델링하는데 사용

신호(signal)나 데이터(data) 흐름 뿐만 아니라, 알고리즘 (algorithmic) 흐름 또는 절차적(procedural) 흐름을 모델링

UML 2.0은 상태 머신 기초를 훨씬 더 일반적인 의미로 바꾸어 그 모든 제한사항을 제거함

다른 액티비티들과 이들을 결합하여 보다 복잡한 액티비티를 구성

인터랙션(Interactions)

보다 확장된(고급 레벨의) 시퀀스에서 반복될 수 있는 재사용 시퀀스 기능

복잡한 시스템의 인터랙션을 표현하는 다양한 복잡한 제어 흐름의 모델링 기능(반복적인 연속 발생, 대안 실행 경로, 동시성, 순서와 무관한 실행 등)

그림 4. 복잡한 인터랙션 모델 참조

상태 머신(State machines)

변환 엔트리와 변환 종료점을 분명히 묘사

재사용 가능한 개별적인 상태 머신 스팩에 의해 그 상태의 내부 분해를 정의


그림 4. 복잡한 인터랙션 모델
그림 4는 확장된 인터랙션 모델을 묘사하고 있다. 이 경우, ATMAccess 인터랙션은 CheckPIN 이라고 하는 저수준 트랜잭션을 처음으로 호출한다. 나중에 발생하는 인터랙션은 매개변수를 갖고 있다. (이 경우, 무효 PIN이 트랜잭션이 취소되기 전에 입력될 수 있는 회수). 그 후, 클라이언트는 어떤 종류의 인터랙션이 필요한지, DispenseCash 인터랙션이나 PayBill 인터랙션중 어떤 것을 수행할지를 지정하는 비동기식 메시지를 보낸다.

 

6).언어 부분의 기능들

액션과 액티비티

액션의 개념적 모델은 데이터 흐름과 제어 흐름 컴퓨팅 모델을 모두 수용

액션과 액티비티에 대한 일반적인 문법 및 의미 구조를 제공

전체적인 단순함과 명확성에 기여

템플릿(Templates)

UML 2.0의 템플릿 메커니즘은 분류자, 연산, 패키지로 제한

컴포넌트 기반 디자인 개념(Component-based design concepts)

UML 2.0에서 컴포넌트는 일반적인 클래스의 특별한 경우로서 정의

하위시스템들도 컴포넌트 개념 중에 단지 특별한 경우

의미와 표기법 스팩도 강화

각 메타클래스 스팩에는 의미상의 변이 포인트, 표기법 옵션, UML 1 스팩과의 관계 등을 분명히 정의

 


아키텍팅(architecting)”에 대한 기본적인 개념에 접근하는 총 4부 시리즈 중 첫 번째 글입니다. 필자는 핵심 용어들을 정의하고 잘 설계된 아키텍처가 전개 환경에 어떤 기여를 하는지를 조명합니다.

 

이 세계는 점점 더 소프트웨어에 의존하고 있다. 소프트웨어는 유비쿼터스 셀폰 뿐만 아니라 복잡한 항공 제어 시스템의 필수적인 요소이다. 사실 우리가 지금 당연하다고 여기는 많은 혁신들도 소프트웨어가 없었다면 존재하지 않았을 것이다. 금융, 유통, 공공 분야 같은 전통적인 조직도 소프트웨어에 깊이 의존하고 있다.

 

이러한 혁신과 기업들이 살아 남기 위해서, 소프트웨어는 필요한 기능을 제공해야 하고, 품질도 갖추어야 하고, 기대하는 대로 사용할 수 있어야 하며, 합리적인 가격에 제공되어야 한다.

 

이 모든 특성들은 소프트웨어의 아키텍처에 영향을 받는다. 나는 이 글에서 “소프트웨어 중심 시스템(software-intensive systems)”에 대해 이야기하고자 한다. IEEE는 다음과 같이 정의한다.

 

소프트웨어 중심 시스템(software-intensive system)은 소프트웨어가 디자인, 구현, 전개, 시스템의 진화에 중요한 영향을 미치는 시스템을 의미한다. [IEEE 1471. "아키텍처 정의" 섹션 참조]

 

이 글에서 “아키텍처”라는 용어는 “소프트웨어 아키텍처”의 동의어이다. 이 글에서는 소프트웨어 중심 시스템을 중심적으로 다루겠지만, 소프트웨어 중심 시스템 역시 신뢰성이나 퍼포먼스 같은 특정 품질을 제대로 이행하기 위해서는 하드웨어가 필요하다. 나중에 보다 자세히 설명하도록 하겠다.

 

아키텍처 정의

 

“아키텍처”에 대한 정의는 부족함이 없다. 정의만을 모아서 관리하는 웹 사이트가 있을 정도니까 말이다.1 이 글에 사용되는 정의는 IEEE Std 1472000- IEEE Recommended Practice for Architectural Description of Software-Intensive Systems(IEEE 1471)2에서 발췌하였다. 핵심 내용은 볼드체로 표시했다.

 

아키텍처는 컴포넌트로 구체화된 시스템의 기본적인 조직이며, 환경에 대한 관계이며, 디자인과 진화를 이끄는 원리이다. [IEEE 1471]

 

이 표준은 이 정의와 관련하여 다음 용어를 정의하고 있다.

 

시스템은 특정 기능이나 기능 세트를 달성하도록 조직된 컴포넌트의 컬렉션이다. 시스템이라는 용어에는 개별 애플리케이션, 전통적인 의미의 시스템, 하위 시스템, 시스템의 시스템, 제품 라인, 제품군, 전체 엔터프라이즈, 기타 이익의 집합 등을 아우른다. 시스템은 이 환경에서 한 개 이상의 미션을 수행하기 위해 존재한다. [IEEE 1471]

 

환경또는 컨텍스트는 그 시스템에 대한 개발, 작동, 정책, 기타 영향들의 설정과 환경을 결정한다. [IEEE 1471]

 

미션은 스테이크홀더가 목표를 달성하기 위해 시스템이 수행할 사용이나 연산이다. [IEEE 1471]

 

스테이크홀더는 시스템에 관련된 개인, 팀, 조직이다. [IEEE 1471]

 

우리들도 볼 수 있듯이, “컴포넌트”라는 용어는 이러한 정의 전반에 걸쳐 사용된다. 하지만 아키텍처의 대부분의 정의는 “컴포넌트”를 정의하지는 않는다. IEEE 1471도 예외는 아니다. 따라서 산업계에서 여러 가지 의미로 사용하기 때문에 매우 모호하다. 컴포넌트는 논리적이거나 물리적이거나, 기술 독립적이거나 기술적이거나, 대단위 이거나 소단위 이거나이다. 이 글의 목적상 나는 UML 2.0 스팩에서의 컴포넌트의 정의를 사용한다. 그리고 나는 우리가 마주칠 수 있는 다양한 아키텍처 엘리먼트를 아우르기 위해 매우 느슨하게 용어를 사용하겠다. 객체, 기술 컴포넌트(이를 테면, Enterprise JavaBean), 서비스, 프로그램 모듈, 레거시 시스템, 패키지 애플리케이션 등이 포함된다. 다음은 “컴포넌트”에 대한 UML 2.0D의 정의이다.

 

[컴포넌트는] 이것의 콘텐츠를 담고 있는 시스템의 모듈 부분이고 이것의 표현은 이것의 환경 내에서 대체 가능하다. 컴포넌트는 제공된 필수 인터페이스의 관점에서 작동을 정의한다. 컴포넌트는 유형으로서 작동하고 이것의 순응성은 필요한 인터페이스에 의해 정의된다. (정적 및 동적 의미로 정의된다.)

 

여기에 제공된 정의는 많은 다른 개념들을 아우른다. 이것은 이 글 후반에 논의되겠다. 산업계에는 “아키텍처”에 대해 일반적으로 동의된 정의가 없지만 다른 정의들도 고려하여 이들간 유사성을 관찰해 보는 것도 좋은 일이다. 중요한 내용은 볼드체로 표시했다.

 

아키텍처는 소프트웨어 시스템의 구성, 구조적 엘리먼트와 시스템을 구성할 인터페이스의 선택, 그러한 엘리먼트들간 협업에 지정된 것으로서 작동과 함께, 그러한 엘리먼트를 점진적으로 더 큰 하위 시스템으로의 구성, 이러한 조직을 이끄는 아키텍처 스타일, 이러한 엘리먼트와 인터페이스, 협업, 구성에 대한 중요한 결정 세트이다. [Kruchten]4

 

프로그램 또는 컴퓨팅 시스템의 소프트웨어 아키텍처는 소프트웨어 엘리먼트를 구성하는 시스템의 구조 또는 구조이자, 그러한 엘리먼트들을 외부로 보이는 속성이자 이들간 관계이다. [Bass et al] 5

 

[아키텍처는] 조직화된 구조이며 시스템의 제휴된 작동이다. 시스템의 제휴된 작동이다. 아키텍처는 인터페이스, 부분들과의 관계, 어셈블링의 제약조건 등으로 분할될 수 있다. 인터페이스를 통해 인터랙팅하는 부분들에는 클래스, 컴포넌트, 하위 시스템 등이 있다. [UML 1.5]6

 

시스템의 소프트웨어 아키텍처나 시스템의 컬렉션은 소프트웨어 구조와, 그 시스템을 구성하고 있는 구조들 간 인터랙션에 대한 중요한 디자인 결정들로 구성되어 있다. 디자인 결정은 원하는 품질을 보장해야 한다. 디자인 결정은 시스템 개발, 지원, 관리에 개념적인 기반을 제공한다. [McGovern]7

 

정의는 다소 다르더라도 우리는 여기에서 공통점을 발견하게 된다. 예를 들어, 모든 정의는 아키텍처는 구조와 작동에 관한 것이며, 중요한 결정들만 관여하며, 아키텍처 스타일에 순응하고, 스테이크홀더와 환경에 영향을 받으며, 이론적 근거에 입각하여 결정을 구체화 한다. 이제부터 자세히 설명하도록 하겠다.

 

아키텍처가 구조를 정의한다.

 

누군가가 당신에게 “아키텍처”에 대해 설명하라고 하면 십중팔구는 구조라고 말할 것이다. 이것은 빌딩 또는 다리 같은 도시 엔지니어링 구조와 관련이 있다. 작동, 적합성, 미학 같은 아이템의 다른 특성들도 물론 존재하지만 이것이 가장 익숙하고 자주 언급되는 구조적인 특성이다.

 

당신이 누군가에게 그가 작업하고 있는 소프트웨어 시스템의 아키텍처에 대해 설명하라고 요청하면 그는 시스템의 구조적 양상을 보여주는 다이어그램을 보여줄 것이다. 이 양상이 아키텍처 레이어든, 컴포넌트든, 분산 노드든 상관없이 말이다. 구조는 아키텍처의 진실로 중요한 특성이다. 아키텍처의 구조적 양상은 여러 가지 방법으로 드러나기 때문에 아키텍처에 대한 정의는 모호하다. 구조적 엘리먼트는 하위 시스템, 프로세스, 라이브러리, 데이터베이스, 전산 노드, 레거시 시스템, 제품 등이 될 수 있다.

 

아키텍처의 많은 정의들은 구조적 엘리먼트를 인정할 뿐만 아니라 구조적 엘리먼트의 구성, 이들의 관계, 인터페이스, 파티셔닝도 다루고 있다. 이들 각 엘리먼트들은 다양한 방식으로 제공될 수 있다. 예를 들어, 커넥터는 소켓이 될 수 있고, 동기식 또는 비동기식일 수 있으며 특정 프로토콜과 제휴될 수 있다.

 

그림 1은 구조적 엘리먼트의 예제이다. 이 그림은 주문 처리 시스템을 나타내는 구조적 엘리먼트들을 포함하고 있는 UML 클래스 다이어그램을 보여주고 있다. 세 개의 클래스 OrderEntry, CustomerManagement, AccountManagement가 있다. OrderEntry 클래스는 CustomerManagement 클래스와 AccountManagement 클래스에 의존하여 나타난다.

 

 

아키텍처가 작동을 정의한다.

 

아키텍처가 구조적 엘리먼트를 정의하는 것 외에도 구조적 엘리먼트들간 인터랙션을 정의한다. 원하는 시스템 작동을 제공하는 것이 이러한 인터랙션이다. 그림 2는 UML 시퀀스 다이어그램으로서 많은 인터랙션들을 보여주고 있다. 시스템은 주문 처리 시스템에서 주문의 생성을 지원할 수 있다. 여기에서 다섯 개의 인터랙션이 보인다. 첫 번째는 Sales Clerk 액터가 OrderEntry 클래스의 인스턴스를 사용하여 주문을 만든다. OrderEntry 인스턴스는 CustomerManagement 클래스의 인스턴스를 사용하여 고객의 상세를 얻는다. OrderEntry 인스턴스는 AccountManagement 클래스의 인스턴스를 사용하여 주문을 만들고, 주문 아이템들에 주문을 파퓰레이트 하고 주문을 한다.

 

 

그림 2는 그림 1의 연장선상에 있다. 그림 2에서 정의된 인터랙션에서 그림 1에서 보여준 종속관계를 이끌어 낼 수 있다. 예를 들어, 그림 2의 인터랙션을 보면 OrderEntry는 CustomerManagement의 인스턴스에 의존한다. 이러한 의존성은 상응하는 OrderEntry와 CustomerManagement 클래스 간 의존성 관계에 반영된다. (그림 1)

 

아키텍처가 중요한 엘리먼트에 집중한다.

 

아키텍처가 구조와 작동을 정의하지만 모든 구조와 모든 작동에 대해서 그렇게 하는 것은 아니다. 오직 중요한 엘리먼트들에만 그렇게 한다. 중요한 엘리먼트는 길고 지속적인 영향력을 갖고 있는 엘리먼트이다. 이러한 엘리먼트들은 필수 작동과 제휴되어 있고 신뢰성과 확장성 같은 중요한 품질을 다루고 있다. 일반적으로 아키텍처는 이러한 엘리먼트의 세분화된 상세를 신경 쓰지 않는다. 아키텍처 중요성은 경제적인 중요성도 띤다. 특정 엘리먼트를 다른 것보다 귀중히 여기는 이유는 생성 비용과 변경 비용이 관련되어 있기 때문이다.

 

아키텍처가 중요한 엘리먼트에만 집중하기 때문에 시스템 관점에서 생각해 봐야 한다. 이는 대부분 아키텍처와 관련이 있다.8 아키텍처는 아키텍트가 복잡성을 관리하는 것을 돕는 시스템의 추상화이다.

 

중요한 엘리먼트 세트는 정적이지 않고 시간이 지나면서 변한다. 변화하는 요구 사항, 리스크 분석, 실행 가능한 소프트웨어 구현, 레슨 등의 결과로 중요한 엘리먼트는 변하기 마련이다. 하지만 변화에 직면해서도 아키텍처가 안정적이라는 것은 좋은 아키텍처라는 신호이자, 아키텍팅 과정이 잘 실행되었다는 신호이며, 좋은 아키텍트라는 신호이다. 아키텍처가 비교적 소소한 변경 때문에 지속적으로 개정되어야 한다면 이것은 좋은 징조가 아니다. 하지만 아키텍처가 비교적 안정적이라면 정 반대이다.

 

아키텍처가 스테이크홀더의 필요를 조정한다.

 

아키텍처는 궁극적으로 스테이크홀더의 필요를 다루기 위해 만들어진다. 하지만 모든 필요를 다 맞추기는 불가능하다. 예를 들어, 스테이크홀더가 지정된 시간 안에 특정 기능을 요청하지만 이러한 두 가지 필요(기능과 타임프레임)은 상호 배타적이다. 스케줄러에 맞추기 위해 범위게 줄어들거나, 초과된 타임프레임에서 기능이 제공 될 수도 있는 것이다. 이와 비슷하게 다른 스테이크홀더들은 상충하는 필요를 표현하기 때문에 적절한 밸런스가 필요하다. 따라서 트레이드오프는 아키텍팅 프로세스와 협상의 중요한 측면이자 아키텍트가 갖추어야 할 자질이다.

 

스테이크홀더들의 필요에 대해 생각해 보자.

 

엔드 유저는 매력적이고 정확한 작동, 퍼포먼스, 신뢰성, 가용성, 보안 등에 관심이 있다.
시스템 관리자는 매력적인 작동, 관리, 모니터링 툴에 관심이 있다.
마케터는 경쟁력 있는 기능, 출시일, 다른 제품들과의 포지셔닝, 비용 등에 관심이 있다.
고객은 비용, 안정성, 스케줄에 관심이 있다.
개발자는 명확한 요구 사항, 간단하고 일관성 있는 디자인 방식을 원한다.
프로젝트 매니저는 프로젝트 예견, 스케줄, 효과적인 자원활용, 예산 등을 신경 쓴다.
유지 보수를 하는 사람들은 포괄적이고 일관되면서 문서화가 된 디자인 방식과 변경의 용이성 등을 생각한다.

 

이 리스트를 보면 알겠지만 아키텍트의 또 다른 도전은 스테이크홀더들이 시스템이 필요한 기능을 제공하는 것에만 관심을 갖는 것은 아니라는 점이다. 위에 제시한 관심 영역들은 비기능적이다. 시스템의 기능에는 어떤 기여도 하지 않는다. (비용과 스케줄링 등). 이 같은 영역은 시스템 품질이나 제약조건을 나타낸다. 비기능적 요구 사항들은 아키텍트에 있어서 가장 중요한 요구 사항이다.

 

아키텍처가 이론에 입각한 결정을 구체화 한다.

 

아키텍처의 중요한 측면은 단순히 최종 결과인 아키텍처에 있지 않다. 이론적 근거가 필요하다. 따라서 아키텍처와 결정에 대한 이론적 근거를 문서화 하는 것이 중요하다.

 

이 정보는 많은 스테이크홀더와 관련이 있다. 특히 시스템을 관리해야 하는 사람들과 관련이 있다. 이 정보는 결정에 대한 이론적 근거를 알고 싶어하는 아키텍트에게도 매우 귀중한 것이다. 예를 들어, 이 정보는 아키텍처가 리뷰 될 때와 아키텍트가 결정을 판단할 때 사용된다.

 

아키텍처가 아키텍처 스타일에 순응한다.

 

대부분의 아키텍처들은 비슷한 영역들을 공유하는 시스템에서 파생된다. 이러한 유사성을 아키텍처 스타일이라고 한다. 이는 특정 유형의 패턴으로도 생각할 수 있다. 종종 복잡한 합성 패턴일 때가 많다. (많은 패턴들이 함께 적용된다.) 패턴과 마찬가지로 아키텍처 스타일은 경험의 성문화를 나타내고, 아키텍트가 그러한 경험들을 재사용 할 기회를 찾는 것은 좋은 방법이다. 아키텍처 스타일의 예제에는 분산 스타일, 파이프와 필터 스타일, 데이터 중심 스타일, 규칙 기반 스타일 등이 있다. 시스템은 한 가지 이상의 아키텍처 스타일을 보여준다. Shaw 와 Garlan은 다음과 같이 설명한다.

 

[아키텍처 스타일]은 구조적 조직의 관점에서 시스템 군을 정의한다. 보다 구체적으로 말하면, 아키텍처 스타일은 컴포넌트와 커넥터 유형의 어휘를 정의하고 이들이 결합되는 방식에 대한 제약 조건들을 정의한다.

 

그리고 UML의 관점에서는

 

[패턴은] 주어진 상황에서 일어나는 일반적인 상황에 대한 일반적인 솔루션이다.

 

경험을 재사용 하는 것 외에도 아키텍처 스타일(또는 패턴)의 적용은 아키텍트의 삶을 더 풍요롭게 만든다. 스타일은 이론적 근거라는 관점에서, 그리고 작동의 관점에서 문서화되기 때문이다. (생각을 좀 덜해도 되고 스타일을 참조하기 때문에 아키텍처 문서들이 줄어든다.)

 

아키텍처가 아키텍처 스타일에 순응한다.

 

시스템은 환경 안에 거하고, 이 환경은 아키텍처에 영향을 미친다. 이것을 “정황 속의 아키텍처”라고 한다. 환경은 시스템이 운영되고 아키텍처에 영향을 미치는 바운더리를 결정한다. 아키텍처에 영향을 미치는 환경적 요인들에는 아키텍처가 지원할 비즈니스 미션, 시스템 스테이크홀더, 내부적인 기술 제약조건들(조직의 표준에 순응하는 제약조건 등), 외부적인 제약조건(외부 시스템에 대한 인터페이스의 필요라든가, 외부적인 규제 표준에 순응할 것 등) 등이 포함된다.

 

반대로, Bass, Clements, Kazman11이 설명한 것처럼 아키텍처도 환경에 영향을 미친다. 기술적인 관점에서 아키텍처의 생성이 환경을 변화시킬 뿐만 아니라, 아키텍처의 생성이 기능적인 관점에서 환경을 변경시킨다.

 

소프트웨어 중심 시스템의 경우 언제나 고려해야 하는 환경의 특정 측면이 있다. 유용한 소프트웨어가 되려면 실행될 수 있어야 한다. 실행될 수 있으려면 소프트웨어는 하드웨어에서 실행되어야 한다. 따라서 결과 시스템은 소프트웨어와 하드웨어의 결합이고, 신뢰성과 퍼포먼스 같은 속성들이 갖추어져야 한다. 소프트웨어는 하드웨어와 별개로 이를 달성할 수 없다.

 

IEEE Std 12207-1995, IEEE Standard for Information Technology -- Software Life Cycle Processes는 IEEE 1471 시스템 정의와는 다르게 시스템을 정의한다. (이것은 소프트웨어 중심 시스템에 초점이 맞춰져 있다.) 하지만 시스템 엔지니어링 분야에 대한 정의는 동의하고 있다.

 

[시스템은] 필요나 목적을 달성할 수 있는 기능을 제공하는 한 개 이상의 프로세스, 하드웨어, 소프트웨어, 장치, 사람들로 구성된 통합 구성체이다. [IEEE 12207]

 

Rational Unified Process for Systems Engineering (RUP SE)의 설정에도 비슷한 정의가 있다.

 

[시스템은] 기업이 비즈니스 목적이나 미션을 수행하기 위해 사용하는 서비스를 제공하는 일종의 리소스이다. 시스템 컴포넌트에는 하드웨어, 소프트웨어, 데이터, 작업자 등이 포함된다.

 

시스템 엔지니어링 분야에서, 소프트웨어, 하드웨어, 사람들간 상쇄 현상이 일어난다. 예를 들어, 퍼포먼스가 중요하다면, 소프트웨어나 사람이 아닌 하드웨어에 특정 시스템 엘리먼트를 구현하는 결정을 내리게 된다. 고객에게 유용한 시스템을 제공하려면 소프트웨어나 하드웨어에서 구현된 인터페이스 보다는 인간이라는 인터페이스를 제공하게 된다. 좀더 복잡한 시나리오의 경우는 소프트웨어, 하드웨어, 사람들이 결합을 해야 한다. (따라서 본 시리즈에서는 소프트웨어 외의 다른 엘리먼트도 참조할 것이다.)

 

시스템 엔지니어링이 소프트웨어와 하드웨어를(사람들도 포함) 피어로서 취급하고, 따라서 하드웨어가 소프트웨어 대한 제 2의 클래스로서 취급 받거나 소프트웨어를 실행하는 단순한 기구로서 취급 받게 되는 상황을 방지한다. 또는 소프트웨어가 하드웨어에 대한 제 2의 클래스이고 하드웨어를 위한 단순한 도구로 취급 받지 않도록 한다.

 

아키텍처가 팀 구조에 영향을 미친다.

 

아키텍처는 주어진 영역을 다루는 관련 엘리먼트들의 그룹핑을 정의한다. 예를 들어, 주문 처리 시스템을 위한 아키텍처는 주문 시작, 계정 관리. 고객 관리, 업무 수행, 외부 시스템과의 통합, 영속성, 보안에 대한 엘리먼트들을 그룹핑 한다.

 

이들 각각의 그룹핑은 다른 기능 세트를 필요로 한다. 따라서 소프트웨어 개발팀 구조가 정의되었다면 아키텍처로 정렬하는 것 맞다. 하지만 아키텍처는 초기 팀 구조에 의해 영향을 받는 경우가 종종 있다. 이것은 매우 위험한 일이다. 이상적인 아키텍처 상이 아니다. Conway의 법칙에서는 “컴파일러 상에 실행되는 네 개의 그룹이 있다면 4-pass 컴파일러를 갖게 된다.”라고 명시하고 있다. 실제로 우리는 의도하지 않았는데도 아키텍처를 만들어서 기업에 반영하는 아키텍처들을 만든다.

 

하지만 이렇게 다소 이상적인 뷰가 늘 실질적은 것은 아니다. 순전히 실제적인 이유로 인해 현재 팀 구조와 기능은 무엇이 가능한 지에 대한 매우 실질적인 제약조건을 나타내고 아키텍처는 이를 고려해야 한다.

 

아키텍처가 모든 시스템에 존재한다.

 

모든 시스템은 아키텍처를 갖고 있다. 아키텍처가 공식적으로 문서화 되지 않았더라도, 시스템이 하나의 엘리먼트로 구성된 아주 단순한 시스템이라도 말이다. 아키텍처에 대한 문서는 상당한 가치가 있다. 문서화된 아키텍처는 그렇지 않은 것 보다 조심스럽고 효과적으로 다루어져야 한다. 아키텍처의 기록 과정에서 통찰력이 생기기 때문이다.

 

반대로, 아키텍처가 문서화 되지 않으면 품질, 관리 가능성, 베스트 프랙티스의 채택 등을 입증할 방법이 없다. 오늘날 대부분, 아키텍처는 문서화 되지 않았으며 이는 의도적이기 보다는 일종의 사고다.

 

아키텍처가 특정 범위를 갖고 있다.

 

많은 종류의 아키텍처가 있다. 빌딩이나 도시 엔지니어링 건축물들도 아키텍처로 잘 알려져 있다. 소프트웨어 엔지니어링 분야에서도 우리는 다양한 형태의 아키텍처를 만나게 된다. 예를 들어, 소프트웨어 아키텍처의 개념 외에도, 엔터프라이즈 아키텍처, 시스템 아키텍처, 조직적 아키텍처, 정보 아키텍처, 하드웨어 아키텍처, 애플리케이션 아키텍처, 인프라 아키텍처등의 개념들을 보게 된다. 또한 특정 범위의 아키텍팅 행위를 정의하는 용어도 있다.

 

안타깝게도 산업계에는 이러한 용어나 서로간의 관계에 대한 어떤 동의도 없다. 따라서 같은 용어가 다른 의미를 갖게 되고 한 가지를 의미하는데 두 개 이상의 용어들이 생겨난다. 하지만 이러한 용어들의 범위는 그림 3처럼 한정된다. 이 그림과 그 뒤에 나오는 논의를 생각해 보면 여러분이 동의할 수 없는, 기업에서 다르게 사용했던 엘리먼트들이 많음을 알 수 있다. 그렇다. 이러한 용어들이 산업계에 존재하지만 의미에 대한 동의가 없다.

 

 

그림 3 의 엘리먼트:

 

소프트웨어 아키텍처. 이것은 이 글의 핵심 주제이다.
하드웨어 아키텍처. CPU, 메모리, 하드 디스크, 프린터 같은 주변 장치, 이러한 엘리먼트에 연결하는데 사용되는 엘리먼트 등이 있다.
조직적 아키텍처. 비즈니스 프로세스, 기업 구조, 역할과 책임, 기업의 핵심 능력 등이 여기에 속한다.
정보 아키텍처. 정보가 조직화 되는 구조를 의미한다.
소프트웨어 아키텍처, 하드웨어 아키텍처, 조직적 아키텍처, 정보 아키텍처. 이 모두는 전체적인 시스템 아키텍처의 하위 세트들이다.
엔터프라이즈 아키텍처. 하드웨어, 소프트웨어, 사람들 같은 엘리먼트를 갖고 있다는 점에서 시스템 아키텍처와 비슷하다. 하지만 엔터프라이즈 아키텍처는 비즈니스와 깊이 연결되어 있다. 비즈니스 목적의 달성에 집중하며 비즈니스 기민성과 조직의 효율성 같은 아이템과 관련이 있다. 엔터프라이즈 아키텍처는 기업 바운더리를 넘나든다.

 

물론 이에 상응하는 아키텍트(소프트웨어 아키텍트, 하드웨어 아키텍트)와 아키텍팅(소프트웨어 아키텍팅, 하드웨어 아키텍팅)이 있다.

 

지금까지 정의를 통해 고찰했다. 많은 의문점이 남아있을 것이다. 엔터프라이즈 아키텍처와 시스템 아키텍처의 차이는 무엇인가? 엔터프라이즈가 시스템인가? 데이터 중심 소프트웨어 애플리케이션에서 정보 아키텍처가 데이터 아키텍처와 같은 것인가? 불행히도 이러한 질문에 대한 정확하고 동의를 이룬 답은 없다.

 

현재까지는 다양한 용어들이 존재하지만, 이러한 용어들에 대한 일관된 정의와 관계 방식에는 동의 된 바가 없다. 따라서 여러분의 기업과 관련된 용어들을 선택하여 적절히 정의할 것을 권한다. 그렇다면 적어도 일관성은 이룰 것이고 오해로 빚어진 의사소통 문제도 줄어들 것이다.

 

요약

 

소프트웨어 아키텍처의 중심적인 특성을 정의하는 것에 대해 집중 조명해보았다. 하지만 아직도 많은 의문점들이 남아있다. 소프트웨어 아키텍트의 역할은 무엇인가? 아키텍트가 주로 하는 일은 무엇인가? “아키텍팅”의 효용성은 무엇인가? 이러한 질문에 대한 해답은 후속 시리즈에서 지속적으로 다루도록 하겠다.

 

Notes

1 Software Engineering Institute (SEI) Architecture Website -- http://www.sei.cmu.edu/architecture/definitions.html 참고

2 IEEE Computer Society, IEEE Recommended Practice for Architectural Description of Software-Intensive Systems: IEEE Std 1472000. 2000.

3 Object Management Group Inc., UML 2.0 Infrastructure Specification: Document number 03-09-15. September 2003.

4 Philippe Kruchten, The Rational Unified Process: An Introduction, Third Edition. Addison-Wesley Professional 2003.

5 Len Bass, Paul Clements, and Rick Kazman, Software Architecture in Practice, Second Edition. Addison Wesley 2003.

6 Object Management Group Inc., OMG Unified Modeling Language Specification Version 1.5, Document number 03-03-01. March 2003.

7 James McGovern, et al., A Practical Guide to Enterprise Architecture. Prentice Hall 2004

8 역할에 대해서는 다음 시리즈에서 다룰 것이다.

9 Mary Shaw and David Garlan, Software Architecture -- Perspectives on an Emerging Discipline. Prentice Hall 1996.

10 Grady Booch, James Rumbaugh, and Ivar Jacobson, The Unified Modeling Language User Guide. Addison Wesley 1999.

11 Bass et al., Op. cit.

12 IEEE Computer Society, IEEE Standard for Information Technology -- Software Life Cycle Processes. IEEE Std 12207-1995.

13 Murray Cantor, "Rational Unified Process for Systems Engineering." The Rational Edge, August 2003. http://download.boulder.ibm.com/ibmdl/pub/software/dw/rationaledge/aug03/f_rupse_mc.pdf

 

제공 : DB포탈사이트 DBguide.net 

 

UML(Unified Modeling Language)

UML이란 소프트웨어 개발 과정에서 산출되는 산출물들을 명시, 개발, 문서화하기 위한 모델링 언어이다. UML Rational 사의 Grady Booch, James Rumbaugh 의해 1994 10월에 처음 개발에 착수되었다. 이후 1995 10월에 Unified Method 0.8 명칭으로 OOPSLA '95에서 발표되었으며, 이후 Ivar Jacobson UML 개발에 함께 협력하면서 1996년에 버전 0.9 발표하였고, 1997 11월에는 UML 1.1 OMG 의해 표준으로 채택되었다.

UML 모델링 언어일뿐 메쏘드(또는 방법론) 아니다. 메쏘드는 프로세스에 대한 정의와 각각의 업무들에 대한 지침과, 업무들 간의 순서들을 명시해야 하는 반면, 모델링 언어는 표기법(또는 다이어그램)들만을 제시하는 것이다. 따라서 UML 소프트웨어 개발에 사용하기 위한 여러 다이어그램들을 정의하고 있으며, 다이어그램들의 의미들에 대해 정의하고 있다.

UML 여러가지 다이어그램들을 제시함으로써 소프트웨어 개발과정의 산출물들을 비주얼하게 제공하고, 개발자들과 고객 또는 개발자들 간의 의사소통을 원활하게 있도록 하고 있다. UML 시스템을 모델링 있는 다양한 도구들을 제공하기 때문에, 도메인을 모델링하기가 훨씬 용이할 뿐만 아니라 모델링한 결과를 쉽게 파악할 있게 된다. 또한 산업계 표준으로 채택되었기 때문에 UML 적용한 시스템은 신뢰성 있는 시스템으로 평가받을 있다.

 

UML 정의

-      복잡한 소프트웨어 시스템 개발 모델링에 필요한 구성요소를 제시하고 이를 이용한 추상화 방법과 산출물들을 프로젝트 참여자들이 쉽게 이해할 있도록 소프트웨어 개발방법론(표현 기법)들이 통합된 객체지향개발 표준통합 모델링 언어

-      표준화된 다이어그램을 통하여 소프트웨어 생명 주기 전체 단계에서 시스템의 산출물을 가시화하고 명세화하는 모델링 언어

-      비즈니스 모델링이나 대규모의 복잡한 분산시스템 모델링, 정보시스템 모델링 등을 시각적으로 구체화하고 구축하는 객체지향 모델링 언어

 

UML 발전 과정

객체지향분석/설계(OOA/D) 방법 Booch, Rumbaugh, jacobson 방법론을 기초로 작성되고 OMG 의하여 표준화됨.

95 이전

97 1

2004 5

-      개발 방법론

-      Booch 방법론

-      OMT 방법론

-      OOSE 방법론

-      기타 방법론

-      UML 1.x

-      UML 파트너 전문가 견해 취합

-      Unified Method

-      OMG 공표

-       UML 2.0

-       OMG에서 UML 개선

개별화

통합/표준화

산업화

UML 특징

-      개발공정에 다양하고 일관성 있는 표현방법을 제공하고 확장성이 뛰어남

-      소규모에서 대규모 프로젝트까지 모두 적용할 있음

-      UML CASE 도구 개발프로세스(Unified Process) 지원

-      특정 개발 방법론에 얽매이지 않는 개방적이고 독립적 표기체계

-      별도의 비용이 없는 공개된 표준 모델링 제공

-      개발자간 의사소통 원활, 반복적 점진적 과정

-      사용자에게 사용하기 쉽고 표현이 풍부한 시각적 모형화 언어 제공

 

4+1 View


1.    Use-Case View

-      외부 사용자의 관점에서의 기능을 나타냄

-      시스템 행동을 설명

-      최종사용자, 분석가, 설계자, 테스트 담당자에게 제공 되는

-      시스템 아키텍쳐를 구체화하는 요인들을 명세화

Diagram

-      Static : Use-Case Diagram

-      Dynamic : Communication Diagram, State Chart Diagram, Activity Diagram

 

2.    Logical View

-       시스템 내부의 structure behavior functionality 어떻게 설계되었는지를 표현

-       Logical View Service관점에서 시스템이 사용자에게 제공해야 하는 기능적 요구사항 표현

Diagram

-      Static : Class Diagram, Object Diagram

-      Dynamic : Sequence Diagram, Communication Diagram, State Chart Diagram, Activity Diagram

 

3.    Implementation View

-      개발 환경 내에서 실제 소프트웨어 모듈의 구성과 관련

-      개발의 용이성, 소프트웨어 관리, 재사용, 프로그램언어와 개발 도구에 따른 제약과 관련되어 파생된 요구사항을 고려

-      시스템 배포의 형상관리 표현

-      물리적인 시스템을 조립하고 배포하는데 사용되는 Component File 들로 구성

Diagram

-      Static : Component Diagram

-      Dynamic : Communication Diagram, State Chart Diagram, Activity Diagram

 

4.    Process View

-      절차적인 관점

-      Performance, Reliability, Scalability, Integrity, System Management, Synchronization등의 요구사항을 고려

Diagram

-      Static : Class Diagram, Object Diagram

-      Dynamic : Communication Diagram, State Chart Diagram, Activity Diagram

 

5.    Deployment View

-      시스템을 컴퓨터와 device node 전개 시켜 표현

-      Deployment Diagram 시스템에서 서로 다른 node들과 node 간의 연결을 나타내기 위해 생성됨

Diagram

-      Static : Deployment Diagram

-      Dynamic : Communication Diagram, State Chart Diagram, Activity Diagram

 

UML Diagram 종류

Use-Case Diagram

시스템이 해야 행동 명세화를 하고 순서 있는 액션의 집합을 기술한 것으로 Actor에게 해택이 있는 결과를 제공해야 .

l  사용자의 시각에서 SW 시스템의 범위와 기능을 쉽게 설명하고 정의한 모델

l  시스템의 모든 기능에 대한 Use Case 이와 관련된 Actor 이들간의 관계를 표현

l  고객과 개발자간에 시스템이 무엇을 수행하는지에 대한 명확하고 일관성 있는 정의를 제공

l  개발자에게 시스템에 대한 이해를 제공하여 개발을 도와줌

l  시스템 행동을 조직화하고 모델링

l  시스템의 정적 쓰임새

Sequence Diagram

시스템의 동작을 정형화 하고 객체간의 메시지 교환을 쉽게 표현하고 시간에 따른 메시지 발생순서를 강조한다.

l  어떤 일을 하기 위해 참여하는 객체들 사이에 일어나는 상호작용을 시간 순으로 파악하기 위해 사용됨

l  객체들의 집합이 제시간에 상호 작용하는 방법을 표현

l  메시지의 시간적 순서를 강조

Class Diagram

시스템을 구성하는 클래스 구조를 나타내며 객체들의 공통구조와 동작을 추상화 하며, Dependency, Association, Aggregation, Realization 관계를 표현한다.

l  시스템에 포함된 객체들의 유형들과 클래스들 사이의 정적 관계성을 표현

l  클래스의 속성과 연산을 표현

l  객체들을 연결하는 방법에 적용하는 제약사항을 표현

l  클래스, 인터페이스, 협력간의 관계를 나타내며 객체 지향 시스템 모형화에서 가장 공통적으로 많이 쓰임

l  객체들 사이의 행위를 나타내는 것은 Sequence Diagram 동일

Communication Diagram

특정 메시지 집합 안에 참여하는 객체들의 조직에 초점을 두고 있으며 Sequence Diagram 마찬가지로 설계 작업흐름에 적용

l  객체들 사이의 행위를 나타내는 것은 Sequence Diagram 동일

l  객체들 사이의 정적인 구조에 초점

State Diagram

시스템의 동적 측면을 모델링 하는 것으로 Object행동 모델을 작성한다.

l  객체가 가지는 상태와 사건에 따라 순차적으로 발생하는 행동에 중점을 두고 작성

l  하나의 상태전이 다이어그램에서 객체의 초기 상태를 나타내는 시작 상태는 오직 하나만 존재하며, 객체의 마지막 상태인 종료 상태는 여러 존재할 있음.

Activity Diagram

순서도의 일종으로 발생하는 활동을 강조

l  데이터의 활동이나 흐름, 또는 활동들 사이의 의사 결정을 표현

l  하나의 사용사례 내에서 일어나는 활동들을 분할하기 위해 사용 가능

l  시스템의 기능을 모형화하고 객체간의 제어 흐름 표현에 유용

l  순서나 병렬적인 처리를 요하는 행위를 표현

Object Diagram

객체들 사이의 관계표현, 클래스의 Instance 대한 정적 스냅샷

l  객체들의 상호작용을 정의하기 위해 작성

l  특정 객체들이 전체 클래스 모델의 내용 안에서 사용되는 방법을 나타내기 위해 클래스 다이어그램에 추가 객체들 사이의 관계를 표현

Component Diagram

인터페이스를 가지고 자체 실행 가능한 컴포넌트 모임을 표현, 실행 Node에서 실행 가능한 컴포넌트를 명세화

l  물리적 구성단위 컴포넌트와 그들간의 구성 의존 관계를 표현

l  시스템의 논리적 모델을 개발자 관점에서 바라본 물리적 모델로 재배치하는 사용

l  어떤 클래스를 어떤 파일에 넣으면 어떤 파일을 모아 어떤 모듈을 만들 것인지 등을 정의하는

Deployment Diagram

노드들의 모임과 그들 사이의 의존과 연관관계를 보여주는 배치도

l  아키텍쳐의 정적 배치

 

UML 실무적용시 고려사항

-      개발 업무특성에 따라 적용될 산출물의 범위가 다르며 복잡한 업무 일수록 적용할 산출물의 종류가 증가될 있으며 이해당사자들 간의 의사소통에 중점을 둔다.

-      실제 현장에서 조직의 문화 환경에 맞는 UML 객체지향 모델링에 관한 선수지식확보 교육이 선행되어야 한다.

-      적용할 UML 다이어그램의 최적화를 위해 개발계획수립, 위험식별 평가, 개선사항 들은 반복을 통하여 관리되어야 한다.

-      기존 시스템을 역공학 하는 측면이면 사용자 매뉴얼을 참고하여 Use-Case 도출한다.

-      설계 측면에서 정적 모델과 동적 모델 데이터베이스 전환을 위해 OR Mapping 적용 컴포넌트 재사용을 고려 한다.



ISO 9126

 
ISO 9126의 정의
1.        소프트웨어 품질의 특성을 정의하고 품질 평가의 Metrics를 정의한 국제표준
2.        사용자 관점에서 본 소프트웨어의 품질 특성에 대한 표준
 
ISO 9126의 필요성
1.        사용자, 평가자, 시험관, 개발자 모두에게 소프트웨어 제품의 품질을 평가하기 위한 지침의 마련 필요
2.        평가대상 소프트웨어의 품질을 직접 측정하기 위해 필요한 평가 Metrics의 준비
3.        소프트웨어의 품질을 객관적이고 계량적으로 평가할 수 있는 기본적 틀 필요
 
ISO 9126의 구성
구분
분류
내용
ISO 9126-1
주특성과 부특성
- 소프트웨어 품질 특성과 Metrics
ISO 9126-2
External Metrics
-         소프트웨어가 사용될 때의 외부적 성질 표현
-         실행가능 소프트웨어 시험/운영으로 측정
ISO 9126-3
Internal Metrics
-         설계/코드와 관련된 소프트웨어의 내부 속성을 측정
-         설계/코딩 중인 소프트웨어 제품에 적용
 
ISO 9126 품질 특성 모델
 
주특성
주특성 내용
부특성
품질 특성
기능성
소프트웨어가 특정 조건에서 사용될 때, 명시된 요구와 내재된 요구를 만족하는 기능을 만족하는 기능을 제공하는 소프트웨어 제품의 능력
적절성
적밀성
상호 운용성
준수성
보안성
신뢰성
소프트웨어가 규정된 조건에서 사용될 때 규정된 성능수준을 유지하거나 사용자로 하여금 오류를 방지할 수 있도록 하는 소프트웨어 제품의 능력
성숙성
결함허용성
회복성
유용성
사용성
소프트웨어가 규정된 조건에서 사용될 때, 사용자에 의해 이해되고, 학습되며 선호될 수 있게 하는 소프트웨어 제품의 능력
이해성
학습성
운용성
효율성
규정된 조건에서 사용되는 자원의 양에 따라 요구된 성능을 제공하는 소프트웨어 제품의 능력
시간행동
자원이용
유지보수성
소프트웨어 제품을 변경할 수 잇는 능력, 변경에는 운영환경과 요구사항 및 기능적 사양에 따름 소프트웨어의 수정, 개선, 혹은 개작 등이 포함된다.
분석성
변경성
안정성
시험성
이식성
다양한 환경에서 운영될 수 있는 소프트웨어 제품의 능력
적응성
설치성
병행 존재성
적합성
대체성
 
ISO 9126의 품질 평가 절차

1.
        품질 요구 정의 단계
-         품질특성 및 이용 가능한 하부 특성들을 사용하여 품질 요구사항을 규정
-         소프트웨어 또는 시스템의 개발 이전에 반드시 정의되어야 하는 것
2.        평가준비 단계
-         품질요구사항을 측정할 수 잇는 정량적으로 표현 가능한 Metrics를 준비하는 단계
-         소프트웨어 제품의 성질 뿐만 아니라 환경과의 상호작용에 대한 Metrics도 함께 준비
-         Metrics를 사용하여 측정된 값이 어느 등급에 속하는지에 대한 기준을 설정하고, 최종적 판정 기준까지 사전에 정의하는 단계
3.        평가단계
-         실제로 측정하고 등급을 부여하며, 수용 또는 기각 등의 판정을 내리는 단계
-         선정된 Metrics를 소프트웨어 제품에 적용하는 것임
-         등급 부여는 측정된 값이 속하는 범위를 파악하고 등급기준을 결정하는 것
 
ISO 9126의 활용과 전망
1.        ISO 9126의 활용
-         기업내부 자체에서의 구축시스템에 대한 품질 평가를 할 때 활용할 수 있는 기준자료로 사용하는 것이 가능함
-         외부로부터 도입하는 소프트웨어 패키지의 품질 평가시의 기본적인 평가 측정 틀로 활용
-         정보시스템 감리 프로세스의 표준화된 개념적인 큰 틀을 제공하여 활용됨
2.        ISO 9126의 전망
-         정보시스템 감리에 대한 필요성이 커지면서 소프트웨어 품질에 대한 명확한 기분으로 활용할 필요가 있음
-         소프트웨어 제품자체의 품질을 직접적으로 높이는 연구는 보다 더 많은 노력이 필요함
-         소프트웨어 개발 프로세스를 개선하여 소프트웨어의 품질을 높이는 간접적인 방법으로 CMMSPICE를 도입하여 프로세스 능력을 개선하는 것이 필요

[출처] ISO 9126|작성자 피비티

+ Recent posts