타스크: 기존 디자인 요소 통합
이 타스크는 디자인 모델을 발전시키고 정제하는 방법을 설명합니 다.
목적
  • 인터페이스, 디자인 클래스 및 디자인 서브시스템을 찾기 위해 분석 클래스의 상호작용 분석
  • 가능한 경우 재사용을 구체화하여 아키텍처 정제
  • 공통적으로 발생하는 디자인 문제점에 대한 공통 솔루션 식별
  • 소프트웨어 아키텍처 문서의 논리 보기 섹션에 구조적으로 중요한 디자인 모델 요소 포함.
관계
역할기본: 추가: 지원:
입력필수: 선택사항:
  • 없음
외부:
  • 없음
출력
단계
재사용 기회 식별
목적 인터페이스를 기반으로 기존 서브시스템 및/또는 컴포넌트를 재사용할 수 있는 경우를 식별합니다. 

비슷한 인터페이스를 제공하는 기존 서브시스템 또는 컴포넌트를 찾으십시오. 식별된 각 인터페이스를 기존 서브시스템이나 컴포넌트가 제공하는 인터페이스와 비교하십시오. 대개 정확하게 일치하는 것은 없겠지만 근사적으로 일치하는 것은 찾을 수 있습니다. 먼저 비슷한 동작과 리턴값을 찾은 후 매개변수를 고려하십시오.

새로 식별된 인터페이스를 수정하여 잘 맞게 개선하십시오. 기존 인터페이스에 대한 준수를 개선할 후보 인터페이스에 대해 사소한 변경을 수행할 기회가 있을 수 있습니다. 단순한 변경에는 후보 인터페이스에 매개변수 추가 또는 재정렬 및 인터페이스를 여러 개의 인터페이스로 분할하여 하나 이상이 기존 컴포넌트의 인터페이스와 일치하고 "새로운" 동작은 별도의 인터페이스에 위치하도록 인터페이스를 분해하는 사항이 포함됩니다.

후보 인터페이스를 정확하게 일치하는 기존 인터페이스로 바꾸십시오. 단순화 및 분해 후, 기존 인터페이스와 정확하게 일치하는 경우 후보 인터페이스를 제거하고 간단하게 기존 인터페이스를 사용하십시오.

후보 서브시스템을 기존 컴포넌트에 맵핑하십시오. 기존 컴포넌트 및 후보 서브시스템 세트를 조사하십시오. 시스템의 필수 동작을 충족시키기 위해 가능할 때마다 기존 컴포넌트가 사용되도록 서브시스템을 분해하십시오. 후보 서브시스템이 기존 컴포넌트에 의해 실현될 수 있는 경우 구현 모델에 디자인 서브시스템과 해당 컴포넌트 사이의 추적성을 작성하십시오.

재사용가능 컴포넌트에 서브시스템을 맵핑하는 데 있어서, 서브시스템과 연관된 디자인 메커니즘을 고려하십시오. 기타 경우에는 오퍼레이션 서명 사이의 정확한 일치에도 불구하고 성능 또는 보안 요구사항이 컴포넌트의 재사용을 부적격으로 판정할 수 있습니다.

컴포넌트 및 데이터베이스 리버스 엔지니어링
목적 다른 프로젝트, 외부 소스 또는 이전 반복으로부터 잠재적으로 재사용가능 모델 요소를 통합합니다. 

현재 프로젝트/반복에 사용 가능한 이전 프로젝트 또는 반복에서 작업을 수행하기 위해 기존 코드와 데이터베이스 정의를 '재사용(scavenged)'할 수 있습니다. 잠재적 재사용 기회를 필터로 사용하여 리버스 엔지니어링되는 작업을 현재 반복에서 재사용가능한 컴포넌트에만 집중할 수 있습니다.

컴포넌트 리버스 엔지니어링

비슷한 시스템을 빌드하는 조직에는, 종종 새 시스템에 필요한 많은 아키텍처 메커니즘을 제공하는 공통 컴포넌트 세트가 있습니다. 또한 시장에 아키텍처 메커니즘을 제공하는 컴포넌트가 있을 수도 있습니다. 기존 컴포넌트를 점검하여 소프트웨어 아키텍처 내에서 적합성 및 호환성을 판별해야 합니다.

이전 반복에서 개발되었지만 아직 디자인 모델에 포함되지 않았거나 구매한 컴포넌트인 기존 컴포넌트는 리버스 엔지니어링되어 디자인 모델에 통합되어야 합니다. 디자인 모델에서 그런 컴포넌트는 일반적으로 하나 이상의 인터페이스를 갖는 서브시스템으로 표시됩니다.

데이터베이스 리버스 엔지니어링

데이터베이스 및 데이터베이스에 상주하는 데이터는 재사용가능한 자산을 위한 가장 중요한 소스 중 하나를 표시합니다. 기존 데이터베이스에 구체화된 내재적 클래스 정의를 재사용하려면 응용프로그램이 사용하는 정보가 이미 기존 데이터베이스에 상주하는지 판별하십시오. 이 정보를 보유하는 데이터베이스 구조를 표시하기 위해 클래스 세트를 리버스 엔지니어링하십시오. 동시에 응용프로그램의 클래스 표시와 데이터베이스에서 사용되는 구조 사이의 맵핑을 구성하십시오. 데이터베이스 리버스 엔지니어링에 대한 자세한 정보는 중간 산출물 가이드라인: 관계형 데이터베이스 리버스 엔지니어링을 참조하십시오. 관계형 데이터베이스의 클래스 및 테이블 사이의 맵핑에 대한 정보는 중간 산출물 가이드라인: 데이터 모델을 참조하십시오.

디자인 모델의 조직 갱신
목적 디자인 모델의 조직에 새 모델 요소를 고려
필요한 경우 디자인 모델 구조의 밸런스 다시 조정 

새 요소가 디자인 모델에 추가되었을 때 디자인 모델의 요소를 다시 패키징하는 것이 자주 필요합니다. 재패키징은 여러 목표를 달성합니다. 패키지 사이의 결합을 줄이고 디자인 모델에서 패키지 내의 응집력을 개선합니다. 궁극적인 목적은 서로 다른 패키지(및 서브시스템)가 별도의 개인이나 팀에 의해 서로 독립적으로 디자인 및 개발될 수 있도록 하는 것입니다. 완벽한 독립은 달성하기가 거의 불가능하지만, 패키지 사이의 느슨한 결합은 대규모 또는 복잡한 시스템의 개발 용이성을 개선하는 경향이 있습니다.

'일반' 모델 구조(모든 패키지 및 서브시스템이 시스템에서 동일한 개념 레벨에 상주하는 구조)는 소규모 시스템에 적합하며, 더 큰 시스템은 '계층화'라고 부르는 추가 구조화 도구가 필요합니다(중간 산출물 가이드라인: 계층화 참조). 계층화 규칙은 특정 유형의 패키지 사이에 허용되는 관계에 대한 제한을 정의합니다. 이러한 규칙이 특정 종속성이 존재하지 않아야 함을 인식합니다. 즉, 응용프로그램 기능성이 특정 운영 체제 또는 윈도윙 시스템 서비스에 직접 종속되지 않아야 합니다. 응용프로그램 기능성을 하위 레벨 구현 서비스의 변경으로부터 분리하는 논리적 운영 체제와 윈도잉 서비스를 포함하는 중간 계층이 있어야 합니다. 계층화는 변경의 영향을 줄이는 방법을 제공합니다. 패키지와 서브시스템 사이의 종속성을 제한하는 규칙을 강제로 실행하고 패키지와 서브시스템 사이의 결합 정도를 줄여서 시스템이 보다 강력하게 됩니다. 시스템은 변경을 허용합니다.

새 모델 요소가 시스템에 추가될 때 단일 팀이 관리할 수 없을 만큼 기존 패키지가 너무 커질 수 있습니다. 패키지는 패키지 내에서 강력하게 응집성을 갖지만 패키지 사이에는 느슨하게 결합되는 여러 패키지로 분할되어야 합니다. 이를 수행하는 방법이 어려울 수 있습니다. 일부 요소는 두 패키지 모두에 의해 사용되기 때문에 하나의 특정 패키지에 배치하기 어려울 수 있습니다. 두 가지 가능한 솔루션이 있습니다. 요소를 각 패키지에 하나씩 여러 오브젝트로 분할하거나(이것은 요소가 여러 가지 '개성' 또는 어느 정도 공통 원소를 갖지 않는 책임 세트를 갖는 경우에 가능함), 모든 상위 계층 요소가 동일하게 의존할 수 있는 하위 계층의 패키지로 요소를 이동하십시오.

시스템의 복잡도가 커질수록 유지보수 가능하고 이해할 수 있는 구조를 갖기 위해 많은 수의 계층이 필요하게 됩니다. 그러나 계층 수에 따라서 복잡도는 증가하고 이해 가능한 정도는 줄어들므로 7 - 10 이상의 계층은 가장 큰 시스템에서조차 드뭅니다.

미들웨어 및 시스템 소프트웨어 계층을 포함한 계층화 예제가 아래에 표시됩니다.

Java/웹 응용프로그램에 대한 레이아웃 다이어그램

Java/웹 기반 응용프로그램에 대한 샘플 패키지 계층화. 참고: 일반적으로 TCP/IP 서비스의 사용이 Java VM, java.rmi 및 웹 브라우저 내에 캡슐화되기 때문에 TCP/IP 패키지에 대한 종속성은 명시적으로 모델링되지 않습니다. 여기에서는 설명을 위해서만 표시됩니다.

서브시스템 및 계층에 대한 책임을 개인이나 팀에 배정하십시오. 각 패키지 또는 서브시스템은 한 개인(범위가 작은 경우) 또는 한 팀(범위가 큰 경우)의 책임이어야 합니다.

논리 보기 갱신
목적 중간 산출물: 소프트웨어 아키텍처 문서(논리 보기)가 최신으로 유지되도록 보장합니다. 

디자인 클래스, 패키지 및 서브시스템(모델 요소)이 아키텍처 관점에서 중요한 경우 이들은 중간 산출물: 소프트웨어 아키텍처 문서의 논리 보기 섹션에 포함되어야 합니다. 이는 새로운 구조적으로 중요한 모델 요소가 다른 프로젝트 팀 구성원과 커뮤니케이션되도록 합니다.

또한 소프트웨어 설계자 역할은 프로세스 엔지니어 역할과 협업하여 디자이너 및 구현자에게 새로 통합된 디자인 요소를 사용하는 방법에 대한 상세한 안내를 제공합니다.



특성
다중 발생
이벤트로 구동됨
진행 중임
선택사항
계획됨
반복 가능함
자세한 정보