Conceptual View 
Conceptual View는 어플리케이션 도메인에 밀접하게 연관되어 있다. 이 View에서는 시스템의 기능요구들이 Conceptual Component, Coordination connectors에 의해 제어되는 data 전송이 라는 아키텍쳐 요소들로 멥핑된다.
Conceptual View는 3Cs에 의해 표현된다고 보면된다.
예를 들어 Pipe & Filter에서 filter는 Component이고 pipe는 Connector이다.
Conceptual View는 도메인에서 Problem과 Solution이 기본적으로 보여지게 된다. Conceptual View는 H/W나 특정 S/W에 독립적이어야 한다.

다음 내용들이 Conceptual View에서 보여져야 한다.
1. How does the system fulfills the requirements?
2. How are the commercial off the self(COTS) components to be integrated and how do they
   interact(at functional level) with the rest of the system?
3. How is functionality partitioned into product releases?
4. How does the system in corporate portions of the prior generations of the product and how
   will it support future generations?
5. How are product lines supported?
6. How can the impact of changes in requirements or the domain be minimized?

Module View 
Module View에서 Conceptual View에서 정의된 컴포넌트나 컨넥터가 서브시스템이나 모듈로 멥핑된다. 여기서 아키텍트는 개념적 Solution이 어떻게 현재의 Software platform이나 기술로 구현될지가 고려된다.

Module View에서 다루어져야 할 내용들은
1. How is the product mapped to the software platform?
2. What system support/services does it use, and exactly where?
3. How can testing be supported?
4. How can dependencies between modules be minimized?
5. How can reuse of modules and subsystems be maximized?
6. What techniques can be used to insulate the product from changes in COTS software, in
   the software platform, or changes to standards?

Execution View
Execution Views 각 모듈들이 실행환경에 의해 제공되는 요소들이나 하드웨어에 멥핑될 것인가를 정의한다. Execution View는 시스템의 runtime entity와 그들의 속성(메모리사용량등)을 정의한다.
Execution View의 중요한 부분은 제어의 흐름이다. Conceptual View는 논리적 제어의 흐름을 설명하는 반면 Execution View는 실행환경의 제어의 흐름을 다룬다.

1. How does the system meet its performance, recovery, and reconfiguration requirements?
2. How can one balance resource usage(for example, load balancing)?
3. How can one achieve the necessary concurrency, replication, and distribution without   
   adding too much complexity to the control algorithms?
4. How can the impact of changes in the runtime platform be minimized?

Code View
Code View는 아키텍트가 실행뷰로 부터 정의된 실행 엔티티들을 어떻게 deployment component로 멥핑할 것인가에 대한 문제를 다룬다. 또한 모듈뷰에서 정의된 모듈들이 소스컴포넌트(소스 파일)로 어떻게 멥핑될 것이가에 대해서 또한 분배 컴포넌트가 어떻게 소스 컴포넌트로 부터 만들어질 것인가에 대한 문제를 다룬다.

1. How can the time and effort for product upgrades be reduced?
2. How should product versions and releases be managed?
3. How can build time be reduced?
4. What tools are needed to support the development environment?
5. How are integration and testing supported?

 

참고 : Applied Software Architecture

Posted by sjokim
,

Reference Model
a Reference Model is a division of functionality together with data flow between the pieces. A reference model is a standard decomposition of a known problem into parts that cooperatively solve the problem. Arising from experience, reference models are a characteristic of mature domains and are often obtained by domain analysis or other group activity. Can you name the standard parts of a compiler to a database management system? Can you explain in broad terms how the parts work together to accomplish their collective purpose? If so, it is because you have been taught a reference model of these applications. 

Technical   Reference model
A Technical Reference Model (TRM) is a taxonomy that provides the following :
◎ A consistent set of service areas, interface categories, and relationships used to address interoperability 
     and open-system issues
◎ Conceptual entities that establish a common vocabulary to better describe, compare, and contrast systems 
     and components
◎ A basis (an aid) for the identification, comparison, and selection of existing and emerging standards 
     and their relationships

The TRM organizes the Standards Profile and any Standards or Technology Forecast documents. It can also organize technology infrastructure documentation. Frequently, some combination of the documents organized using the TRM are presented in a single document.

Reference Architecture
A reference architecture is the generalized architecture of several end systems that share one or more common domains. The reference architecture defines the infrastructure common to the end systems and the interfaces of components that will be included in the end systems.The reference architecture is then instantiated to create a software architecture of a specific system. The definition of the reference architecture facilitates deriving and extending new software architectures for classes of systems. A reference architecture, therefore, plays a dual role with regard to specific target software architectures. First, it generalizes and extracts common functions and configurations. Second, it provides a base for instantiating target systems that use that common base more reliably and cost effectively.The concept of a reference architecture is very similar to that of an application framework in the parlance of object technologists and to that of a product line architecture. In fact, the terms reference architecture and product line architecture are often used interchangeably. A product line architecture is the architecture for a software product line.1 Within a government context, the establishment of a reference architecture that can span a broad range of missions, development organizations, and operations concepts is motivated by the desire of end-system customers and integrators. These groups wish to achieve high levels of strategic software reuse and interoperability. The reference architecture provides specifications
for both system and component developers.



Software Architecture

The software architecture of a program or computing system is the structure
or structures of the system, which comprise software components, the externally
visible properties of those components, and the relationships among
them [Bass 98].

The software architecture represents the earliest software design decisions. These design decisions are the most critical to get right and the most difficult to change downstream in the system development life cycle. The software architecture is the first design artifact addressing reliability, modifiability, security, real-time performance, and interoperability goals and requirements.
 There are many different views of a software architecture, and which one is relevant depends on the stakeholders and the system properties that are of interest. If we consider the analogy of the architecture of a building, various stakeholders such as the construction engineer, the plumber, and the electrician all have an interest in how the building is to be constructed. However, they are interested in different structural units and different structural relationships; they each have a different view of what constitutes the architecture. Each of their views of
architecture is valid. Each represents a structure that maps to one of the structural goals of the building, and all views are necessary to represent the architecture of the building fully. Similarly, a software architecture has a variety of stakeholders, including possibly the development organization, the end user, the system maintainer, the operator, and the acquisition organization. Each of these stakeholders has a vested interest in different system properties and goals that are structurally represented by different views of the system. These different properties
and goals and their corresponding architectural views are important to understand and to analyze in order to reason about the appropriateness and the quality of the architecture.

Reusable Application Framework
Reusable Application Framework은 공식적인 용어는 아니다 일반적으로 말하는 Application framework을 의미한다고 보면 된다. 
Application Framework을 2가지로 분류할 수 있는데, 하나는 프로젝트에서 만들어지는 것이고 다른 하나는 프로젝트와 상관없이 외부에서 만들어 지는 것이다. 전자는 과거에 보통 프로젝트에서 공통모듈의 형태를 취하고 있었으며 객체에 와서 프레임웍으로 발전되었으며 본 문서에서는 이를 Project Framework이라 명명하고 있다. 후자의 경우에는 Apache Struts와 같이 임의의 시스템에서 사용할 수 있는 프레임웍이다.

Architectural Style
An architecture style is a description of component types and a pattern of their runtime control and/or data transfer. A style can be thought of as a set of constraint  on an architecture - constraints on the components on the component types and their patterns of interaction - and these constraints define a set of family of architectures that satisfy them. For example, client-server is a common architectural style. Client and server are two component types, and their coordination is described in terms of the protocol that the server uses to communicate with each of its clients themselves are not identified, and there is no discussion of what functionality(other than implementation of the protocols)has been assigned to any of the clients or to the server. Countless architectures are of the client-server style as we have defined it, but these architectures are different from each other.An architectural style is not an architecture, then, but it still conveys a useful image of the system - it imposes useful constraints on the architecture

아키텍쳐 스타일과 아키텍쳐패턴은 유사하게 사용되고 있다. 그들은 모두 각각의 요소에 대한 타입과 요소들 사이의 상호 작용에 대해서 정의하고 있다. 
그런데 다른 패턴(코딩패턴, 분석패턴,디자인패턴, 도메인패턴, 조직패턴)들과 명확히 구분하기 위해 주로 아키텍쳐 스타일이 많이 사용된다

Design Patterns
Design Patterns are applicable towards the end of coarse-grained design, when refining and extending the fundamental architecture of a software system. For example deciding on the basic communication mechanisms between subsystems. Design patterns are also applicable in the detailed design stage for specifying local design aspects, such as the required support for multiple implementation of a component

Refactoring
Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure It is a disciplined way to clean up code that minimizes the chances of introducing bugs. In essence when you refactor you are improving the design of the code after it has been written.

Product-line architecture
Product-line 아키텍쳐는 주로 조직이나 회사의 프로덕트의 집합에 적용되는 개념이다.
회사에서 동일한 유형의 제품을 개발하는데 있어 그 제품들을 일반화하는 데서 발전한 개념이다.
공통 디자인과 일부 구현부를 재사용함으로써 일관되고 저가에 제품을 개발하는데 초점이 맞추어져 있다.
MS의 각종 제품들이 상호 연동되고 동일한 DLL파일을 공유하도록 되어 있는 것에서 가장 근접한 예를 찾을 수 있다. 그러나 MIS 프로젝트를 수행하는 회사에서는 개념자체를 직관적으로 적용하는데는 약간의 어려움이 있을 수 있다.

 
Define Element Types and How They Interact
Defines a Mapping of Functionality to Architecture Elements
Define Instances of Architecture Elements
Architecture style
 YES  Sometimes  NO
Reference Architecture
 YES  YES  NO
Product-line Architecture
 YES  YES  Sometimes
Software Architecture
 YES  YES  YES


Posted by sjokim
,
아키텍트를 위한 필독서

Software Architect in Practice I/II
S/W아키텍쳐에 대한 개념서로써 S/W 아키텍쳐에 대한 개념적 틀을 잡는데 도움이 된다. SEI의 연구 내용들이 주를 이루고 있으며, S/W아키텍쳐 정의에 대해 명쾌하게 설명하고 있다.





모두가 바이블이라고 하는책

Software Architecture 
전문 S/W 개발자들은 유사 패턴에 대한 논의와 평가에서 새로운 아이디어를 발견할 수 있을 것이다.
학생들은 시스템 조직 접근을 위한 유용한 테크닉을 발견할 수 있을 것이다.
교사들은 S/W 구조 수업을 위한 유용한 교재로 사용할 수 있을 것이다. 



무조건 보아야할 책

Documenting Software Architectures : Views and Beyond 
아키텍쳐 뷰와 S/W아키텍쳐의 관계, 이해당사자들과 아키텍쳐 뷰와의 관계들을 이해하기 쉽게 정리하고 있으며 시기적으로 2000년 이후에 쓰여져서 그간의 다양한 시각을 정리하는 내용이 많음






Siemens4View가 정리된책
Applied Software Architecture
이 책은 양질의 S/W 를 설계하기 위한 실질적인 가이드라인과 테크닉을 제공하는 책으로서 아키텍쳐의 4개의 중요 관점-개념, 모듈, 실행, 코드-에 초점을 맞춰 S/W 아키텍쳐 기본의 개관과 아키텍쳐 설계 업무에 대한 상세한 가이드를 제시한다. 




Use Case를 정복하라

Writing Effective Use Cases
이 책은 유즈케이스 작성에 관한 실질적인 가이드로서의 역할을 한다. 저자는 그의 경험을 바탕으로 유즈케이스 작성에 관해 개발자들에게 필수적인 어드바이스를 제공하고 있으며, 유즈케이스 작성의 여러 예를 보여주고 있다. 





프로젝트 프로세스를 위한 책

Process Patterns
S/W를 개발하는 것은 복잡한 업무이고, 여러분은 이러한 사실을 반영하는 개발 프로세스를 필요로 한다. 이 책은 객체 지향적인 S/W 프로세스를 서술한다. 이 책을 통해서 여러분은 프로젝트를 게시, 모델, 생성하는 방법과 사람, 프로젝트, 위험, 재사용, 기반구조 등을 관리하는 방법을 배우게 된다. 




말이 필요없는 책

Design Patterns : Elements of Reusable Object-Oriented Software 
이 책은 객체 지향 개발에 있어 현대적이고 고전적이며 소프트웨어 설계에서 공통적으로 발생하는 문제에 대한 정연하고 영구적인 솔루션을 제공해준다. 관리 객체 생성을 위한 패턴, 커다란 구조 내에서의 컴포징 객체, 객체간의 흐름 제어를 위한 패턴에 대해 설명하고 있다. 재사용성과 유연성을 향상시킬 수 있도록 작성된 수많은 예제를 제공하고 있다. 



한번은 봐야할 책

Core J2EE Patterns : Best Practices and Design Strategies
Explains how to leverage Java's architecture and mechanisms to design enterprise applications and considers code modularity, nonduplication, network efficiency, maintainability, and reusability



Core J2EE Patterns : Best Practices and Design Strategies (2nd Edition)
Explains how to leverage Java's architecture and mechanisms to design enterprise applications and considers code modularity, nonduplication, network efficiency, maintainability, and reusability




저자의 명성이 느껴지는 책

Patterns of Enterprise Application Architecture
이 책은 엔터프라이즈 어플리케이션 개발자들이 가지고 있는 어려운 도전적 과제들을 해결하여 줄기 위해 만들어졌다. 객체지향 설계자인 저자는 기술의 변화에도 불구하고 Smalltalk으로부터 CORBA와 Java, .NET에 이르기까지 동일한 기본 디자인 개념들은 일반적인 문제들을 해결하는데 적합하며 적용될 수 있다고 말하고 있다. 각 분야의 전문가들의 도움을 받아 저자는 어떠한 엔터프라이즈 어플리케이션 플랫폼에도 적용할 수 있는 해결책을 제시하고 있다


평가방법은 알아야 한다.

Evaluating Software Architectures
S/W 아키텍쳐를 평가하고 실생활에 적용하는 체계적인 방법들에 대해 설명한다. 이러한 평가들이 어떻게 개발하는데 드는 비용과 시간을 감소시킬 수 있는지 보여준다. 이 책은 아키텍쳐 평가의 개념적인 배경과 정부와 기관에서 수행되는 수많은 평가에 사용되는 진행 과정에 대한 단계적인 가이드를 해주고 있다. 


Posted by sjokim
,