가이드라인: 변동 분석
변동 분석에서는 변경과 도메인 모델의 고정된 형태를 구분하는 모델을 작성합니다. 이렇게 하면 예상 변경 유형 및 해당 규칙을 구체화할 수 있으며, 앞으로 기존 디자인의 변경사항에 대한 비주입식 소개가 가능합니다.
관계
기본 설명

소개

서비스 디자이너는 아티팩트: 서비스 스펙  형성 시 다음과 같은 두 힘의 균형을 맞춰야 함을 인식해야 합니다.

  • 전문화: 서비스가 이에 필요한 작업을 하고 있고 활동: 기존 자산 분석 중에 식별된 기능을 수행하는지 확인해야 합니다.
  • 일반화: 서비스가 가능한 한 재사용가능하고 앞으로 요구사항에 기존 서비스의 재디자인이 필요하지 않은지 확인해야 합니다.

이 덕분에 디자이너는 "공통성 및 변동" 분석이라는 기법을 채택할 수 있습니다. 이 기법은 한동안 패턴 공식화[Coplien, Gabriel] 및 소프트웨어 제품 라인 엔지니어링[GBS, JGBS01, JB02, MRR04, Parnas, SBM01]의 영역에 잘 알려져서 문서화되었습니다. 이 두 영역은 또한 디자이너가 패턴에서 서로 같은 힘의 균형을 맞추는 영역입니다. 패턴의 매개변수로 변동을 캡처하여 서로 다른 상황에서 패턴의 적응성을 사용할 수 있습니다.

패턴 [Coplien]에 대한 자료에서는 공통성을 "추상화의 핵심"으로, 변동을 "인생의 색다른 맛"으로 설명하며 [Gabriel]에서는 공통성 및 추상화 간의 관계를 보다 구체적으로 설명합니다. 개별 요소의 변동 지정 시 올바른 추상화에서는 솔루션 전반의 공통 양상을 캡처해야 합니다.

프로그래밍에서 추상화는 조직적 변형이 있는 공통 패턴을 식별하는 프로세스입니다. 추상화에서는 공통 패턴을 표시하고 사용할 변형을 지정하기 위한 수단을 제공합니다.

유사한 용어 [Parnas]에서는 다음과 같이 프로그램의 제품군(오늘날 소프트웨어 제품 라인이라는 점에서 설명)을 정의하며 이 제품군은 세트의 공통 특성 및 개별 구성원의 특수한 특성을 기반으로 합니다.

세트의 공통 특성을 처음 연구한 후 개별 제품군 구성원의 특수한 특성을 결정하여 세트의 프로그램을 연구할 때마다 제품군을 구성하는 프로그램 세트를 고려합니다.

변동 캡처

많은 시스템은 새 요구사항에서의 변경사항 통합에 대한 고려 없이 빌드됩니다. 공통성과 변동 분석에서는 원상 복귀되는 디자인을 작성하는데 이 디자인은 변경에 좀 더 적응 가능합니다. 이 분석은 구체화의 프로세스를 통해 변경될 도메인 형태의 하드 코딩 또는 하드 디자인을 피하여 수행됩니다. 여기서 구체화란 좀 더 고정적이고 변경되지 않는 형태에서 빠르게 변경되는 기능적이고 구조적인 형태의 도메인을 구분해내는 것입니다. 이 기법에서는 침입적인 변경이 없는 새 요구사항 때문에 시스템의 디자인을 발전시킬 수 있습니다. 분석 중에 공통성 및 변동이 계층 구조 유형이라는 용어로 모델링됩니다. 변동의 각 지점을 식별하고 구체화합니다. 예를 들어, 변형의 인스턴스(예: 조직의 고객개별 고객)를 필요한 경우 확장 가능한 고객 유형의 두 가지 실현(realization)으로 모델링할 수 있습니다. 구체화 유형(예: 고객 유형)은 고객 규칙과 연관되어 있으며 이 규칙에서는 모든 고객을 파악하고 각 유형의 고객을 위한 특정 규칙 유형을 통해 정제 및 확장을 수행합니다.

분석의 첫 번째 단계는 기능(정적) 및 프로세스(동적) Perspective 모두로부터 유형의 종속성을 식별하는 것입니다. 엔티티(기능적) 유형에 따르는 프로세스 유형을 식별하는 것은 다음과 같이 디자인 리팩토링을 위한 발견적 방법입니다.

  • 기능 및 프로세스의 공통 요소를 식별합니다(예: 비즈니스 프로세스 예약).
  • 형태가 덜 변경되는 것과 변경되는 것을 구분하십시오. 변경할 예정이거나 종속적인 프로세스 및 기능 관련 핵심 유형을 식별하십시오(고객 유형에 따라 달라지는 예약 유형 -- 고객 유형이 변경되는 경우 예약 유형도 변경될 수 있음).
  • 변형을 구체화하고 알려진 인스턴스가 있는 계층 구조 유형을 작성하십시오(빈도 유형은 기본 또는 정기적, 관계자는 조직 또는 개인임).

이 변동 지점은 원상 복귀되고 적응성이 있는 시스템을 빌드하는 중요한 부분입니다. 변동 지점을 구체화하여 나머지 디자인에 영향을 주지 않고 이 지점을 수정할 수 있습니다. 따라서 변경의 파급 효과가 변동 지점에서 차단 및 제한됩니다. 이 계층 구조를 표시하는 UML 클래스 다이어그램에서는 세부적인 디자인 및 나아가 구현에 대한 로드맵을 제공합니다.

공통성 및 변동 디자인에 대한 기본 원칙은 다음과 같습니다.

  1. 도메인 형태가 변경되지 않는 것과 변경되는 것을 구분하십시오.
  2. 인터페이스와 구현을 구분하십시오.
  3. 변경사항을 구체화하십시오. 도메인의 일부 요소가 유동적 상태인 경우, 그 요소를 클래스(또는 재사용의 상위 계층)로 구체화하도록 보증할 수 있습니다.
  4. 각 재사용 레벨의 자산을 빌드하십시오. 재사용 레벨에는 기본 클래스, 상속 계층 구조, 집계 계층 구조, 클러스터, 프레임워크, 컴포넌트, 패턴, 일반 아키텍처가 있습니다.
  5. 재사용 요소에는 각각 고유한 동작 규칙 및 메타데이터가 있습니다. 이 메타데이터는 서비스 기능의 런타임 조회에 필요한 재사용 요소를 적응 가능하게 자가 설명하는 데 필요합니다.

참조 문헌

[Arsanjani]    A. Arsanjani. Rule Object: A Pattern Language for Flexible Modeling and Construction of Business Rules. Washington University Technical Report number:  wucs-00-29, Proceedings of the Pattern Languages of Program Design, 2000.

[Coplien]    J. O. Coplien. Multi-Paradigm Design for C++. Addison-Wesley Professional; 1st edition, 1998.

[Gabriel]    R. P. Gabriel. Patterns of Software: Tales from the Software Community. Oxford University Press, 1998.

[GBS]    J. van Gurp, J. Bosch and M. Svahnberg. Managing Variability in Software Product Lines. http://citeseer.ist.psu.edu/568368.html

[GHJV]    E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns. Addision-Wesley 1994.

[JGBS01]    J. van Gurp, J. Bosch, and M. Svahnberg. On the notion of variability in software product lines. In Proceedings 2nd Working IEEE / IFIP Conference on Software Architecture (WICSA), pages 45--54. IEEE Computer Society, 2001. http://citeseer.ist.psu.edu/vangurp01notion.html

[JB02]    M. Jaring, J. Bosch, Representing Variability in Software Product Lines: A Case Study, to appear in the Second Product Line Conference (SPLC-2), San Diego CA, August 19-22, 2002. http://citeseer.ist.psu.edu/jaring02representing.html

[MRR04]    Jurgen Meister, Ralf Reussner, and Martin Rohde. Managing Product Line Variability by Patterns. http://se.informatik.uni-oldenburg.de/pubdb_files/pdf/ManagingProductLineVariabilityByPatterns-Final.pdf

[Parnas]    D. L. Parnas. On the Design and Development of Program Families. IEEE Transactions on Software Engineering, SE-2(1):1--9, 1976.

[SBM01]    A. Stephenson, D. Buttle and J. McDermid. Extending Commonality Analysis for Embedded Control System Families. Lecture Notes in Computer Science, Volume 1951, 2001. http://citeseer.ist.psu.edu/stephenson51extending.html

[SGB01]    M. Svahnberg, J. van Gurp, J. Bosch, A Taxonomy of Variability Realization Techniques, submitted June 2001. http://citeseer.ist.psu.edu/svahnberg01taxonomy.html