무엇을 재사용하면 효과가 좋을까? 
아래의 도표가 현재 개발중인 시스템과 유사하지 않을 수 있다. 하지만 재사용의 효과에 대한 정도는 고민해 볼 필요가 있다.



 
- Artifact Reuse
The reuse of previously created development artifacts-use cases, standards document, domain-specific models, procedures and guidelines, and other applications-to give you a kick start on a new project
- Code Reuse
The reuse of source code within section of an application and potentially across multiple applications.
- Component Reuse
The reuse of pre-built, fully encapsulated components in the development of your application.
- Domain-component Reuse
The reuse of pre-built, large-scale domain components that encapsulate cohesive portions of your business domain
- Framework Reuse
The reuse of collections of classes that together implement the basic functionality of a common technical or business domain
- Inheritance Reuse
The use of inheritance in your application to take advantage of behavior implemented in existing classes
- Pattern Reuse
The reuse of publicly documented approaches, called patterns, to solving common problems
- Template Reuse
The reuse of common set of layouts for key development artifacts-documents, models, and source code-within your organization

 
참고 :Process pattern p46 

Posted by sjokim
,

Interaction Mode
크게 4가지 방식으로 정리할 수 있다. 그중에서 Bus방식과 Coordinated 방식이 유사하다
Bus방식과 Coordinated방식의 차이는 정보의 전달에 참여하는 방식에 따라 달라진다. Bus는 정보 전달에 있어 수동적인 역할만을 수행하지만 Coordinator는 자신이 Subject시스템으로 부터 데이터를 가져와 Target 시스템으로 전달하는 능동적 역할을 수행하게 된다.
예를 들어 JSP<->Servlet<->EJB 형태에서 servlet의 역할은 coordinator의 역할을 하고 있다.


 

참고 : business component factory p211


'아키텍처와 공학' 카테고리의 다른 글

파일럿(Pilot)과 프로토타이핑  (0) 2009.10.26
재사용 효과  (1) 2009.10.26
프로그램시 고려해야하는 Validation의 종류  (0) 2009.10.26
소프트웨어 Decomposition  (0) 2009.10.26
Variability mechanism  (1) 2009.10.26
Posted by sjokim
,

Simple formatting validation
이것은 일반적으로 특정한 사용자 인터페이스에서 수행된다. 예를 들어 문자열입력을 위해 mask를 사용하여 숫자만을 입력 받는다든지 혹은 특별한 ID(XXX999포맷)를 입력받는 등의 입력 문자열의 문자 형태의 올바름을 검사한다.

Datatype validation
데이터에 내부적인 제약이 추가되는 경우이다. 15라는 값이 월에 입력되면 잘못된 값이다. 또는 체크값을 갖는 데이터의 경우 특히 주민번호와 같이 각 자리값의 로직적 판단이 필요한 Validation이 이에 해당한다.

System-parameter-dependent validation
설치된 시스템의 상황에 따라 달라지는 경우이다. 예를 들어 날짜의 경우 설치된 환경이 DD-MM-YYYY인경우에는 그에 맞게 검사되어야 한다. 
또한 이런 타입의 Validation에는 business code validation이 포함된다.  예를 들어 코드 테이블에 등록된 코드만을 허용해야 하는 경우의 validation을 의미한다 남녀구분, 지역구분, 통화구분코드 등이다. OLTP업무의 20~25%는 이러한 업무로 알려져 있다.

Functional validation
일반적으로 다른 비즈니스 컴포넌트나 일부 Database의 Data를 Access해서 Validation을 수행하는 경우이다. 예를 들어 계좌번호가 맞는지 혹은 해당 ID의 권한이 있는지 등을 검사하는 것을 의미한다.

참고 : Business component factory p368

'아키텍처와 공학' 카테고리의 다른 글

재사용 효과  (1) 2009.10.26
모듈 혹은 시스템 사이의 Interaction 설계 방법  (0) 2009.10.26
소프트웨어 Decomposition  (0) 2009.10.26
Variability mechanism  (1) 2009.10.26
컴포넌트 Dependency  (0) 2009.10.26
Posted by sjokim
,

Functional decomposition vs Entity-based decomposition
Functional decomposition는 시스템이 제공해야하는 기능을 기준으로 분할 하는 것이다. 특히 3GL (C,Pascal)로 구현하는 시스템에서 주로 사용되는 방식이다.
반면에 Entity-based decomposition은 주로 객체지향 언어에서 사용되는데 시스템에서 사용되어야 하는 Entity를 기준으로 분할하는 방식이다.비즈니스는 분석한다는 것은 주로 이두 개의 decomposition을 기준으로 수행된다.

Problem-domain-based decomposition vs Solution-domain-based decomposition
만약 시스템을 3Tier 구조로 가져가겠다라고 결정하였을때 이분할은 Solution-domain-based decomposition이다. 시스템에서 처리하고자하는 기능을 역할 분할하여 배치하는 것이다. 반대로 컴파일러 프로그램 처럼 어휘분석 -> 구문분석 -> 기계코드 생성 과 같이 해결해야 하는 문제를 기준으로 분할 하는 것을 Problem-domain 중심적인 분할이다.
S/W아키텍쳐가 설계될때 주로 이두개의 관점을 통해 아키텍쳐를 수립하게되는데 Tier나 Layer를 결정하는것을 Solution-based decompostition에 해당하고 Log나 Exception, Configuration등의 문제를 정리하는 것을 Problem-domain decomposition을 통해서 도출하게된다. 전자는 개념적 아키텍쳐가 되고 후자는 메커니즘/전략으로써 정리된다. 
또한 Problem-domain은 추적성이 떨어지는 문제가 있다 예를 들어 log, config와 같은 문제들은 이전에 특정한 요구에 기반하지 않고 컴퓨터 시스템이라는 특수성에 의해 도출되는 경우가 많아 주의를 요하는 경우가 많다.
 

참고 : Design & use of software architecture p63



 


Posted by sjokim
,

Inheritance
Assuming that the component is implemented as aclass in an OO language, inheritance  can be used as a white-box technique to specialize the component for its context. Using inheriance, the component (re)user can define a subclass and add the application-specific behaviour to the component behaviour. Depending on the OO language that was used to implement the component, different mechanisms may be available to control the specialization of component behaviour. By defining operations as abstract, the component developer can require the component user to extend those operations. Similary, by defining operations as final, the component developer can block the component user to extend behaviour that would potentially lead to inconsistencies. Inheritance has a number of associated disadvantages, especially due to the fact that forms a logical entity is divided over multiple components. This may, among others, complicate the understandability and testing of components

Extensions
An extension is a variation point where the component user provides one out of several variants of some behaviour. The strategy design pattern is a typical example of using extensions. The underlying idea is to factor out functionality that may vary form stable functionality and to model the variable functionality as an independent entity. The different instances of variable functionality are implemented as variants and the component user can either select an existing variant or develop a new variant

Configuration
A third approach to handling variability is to include all variants at all variantion points into the component and to provide an interface to the component user. This interface allows the user to set parameters that select particular variants at the variantion points. Through the use of , for instance, procedure parameters, components can even be configured for invoking component.

Template instantiation
Components, at times, need to be configured with application-specific types. A typical example is list-handling or queue component that needs to be configured with the type of element that is to be stored in the use of templates, I.e. component definitions that can be instantiated for particular types. Templates are particularly useful for performing type adaptation.

Generation
The final type of variability mechanism to be discussed here is the notion of a component generator. The typical use of this approach is that the component user prepares a specification in some language, e.g a domain-specific or component-specific language. This specification is taken as input by a generator, or high-level compiler, that translates the specification into, generally, a source-code-level component that can be incorporated into the product ar pplication that component user is concerned with. Typcal examples of this approach can be found in graphical user interfaces where either a graphical or textual specification is used to generate a source-code component that implements the desired functionality 

참고 : Design & use of software architecture p225

Posted by sjokim
,


Business Component에서 외부 Logic과 2가지 관점에서 Dependency를 갖는다. 구조적 의존성은 컴파일 타임에 검사가 되기 때문에 의외로 문제가 되지 않으나 기능적 의존성이 보다 어려운 문제이다 따라서 Dependency관리 전략이라 함은 이러한 기능적 의존성을 간결하게 하여 보다 일관된 Component를 구성하는데 목적이 있다.

Structural Dependency(Technical Dependency)
구조적이라 함은 Compile Time의 Dependency를 의미한다. 호출되는 Method명과 인터페이스의 Method명이 일치해야 한다.

Functional Dependency 
기능적인 의존관계 즉 Client가 원하는 행위를 수행해야 한다는 것이다. 만약 100볼트 전자 제품을 200볼트의 소켓에 연결하려고 하면 소켓의 모양이 않 맞다 그래서 중간에 컨버터를 꽂아서 연결한다면 과연 전자 제품이 정상적으로 동작할까? 절대 아니다. 전자제품은 바로 고장 날 것이다. 마찬가지로 Structural Dependency만을 맞춘다고 Component가 동작하는 것이 아니다
그러나 기능적 의존성은 그 자체로 비즈니스를 대변하기 때문에 정형화 한다는 것 자체가 상당히 어려움이 있고 이것은 CBD를 위한 하나의 중요한 기술 영역이라 볼 수 있다.
이러한 기능적 의존관계를 효과적으로 관리하기 위한 것은 분석적인 영역이라고 할 수 있는데 다만 아키텍쳐에서는 컴포넌트의 인터페이스가 최대한 기능적 요구를 대변할 수 있도록 만들어야 한다. 마치 100V소켓과 200V소켓의 모양이 다른 것과 같은 이치이다.
 

참고 : Business component factory p138

'아키텍처와 공학' 카테고리의 다른 글

소프트웨어 Decomposition  (0) 2009.10.26
Variability mechanism  (1) 2009.10.26
컴포넌트 구현 스타일 중에서(Instance-based style vs Service-based style)  (0) 2009.10.26
RUP 4+1 VIEW  (2) 2009.10.26
Siemens 4 Views  (0) 2009.10.26
Posted by sjokim
,

Instance-based Style
 컴포넌트가 인스턴스를 기반으로 동작하는 구조이다. 컴포넌트가 관리한는 DB데이터를 멤버에 저장하고 다음 메소드를 서비스 할 때 이 멤버의 정보를 기반으로 서비스하는 방식이다. 다시 말해 이전의 서비스가 현재의 서비스에 영향을 미치는 방식으로 설계하는 방식이다.
장점으로는 컴포넌트를 구성하는데 있어 OO의 잇점을 이용할 수 있다.단점으로는 메소드의 수가 증가함으로 주의를 요하며 특히 동시성에 대한 이슈가 발생하는 경우에는 디자인시 부담이 가중될 수 있다. 또한 기술적인 요인으로 인해 사용할 수 없는 경우가 있다. 예) Stateless Session Bean을 사용하는 경우 Instance-based style을 사용할 수가 없다.

Service-based Style
독립적인 메소드로 컴포넌트를 구성하는 방식이다.당연히 멤버변수가 사용되지 않는다.
모든 메소드가 다른 메소드와는 독립적으로 사용된다. 따라서 전통적인 함수 개념의 디자인이 이루어지며 이해하기 쉽다. 그러나 최대단점으로 위와 같은 경우 create를 수행하고 수정된 정보를 클라이언트에 리턴해야 하는 경우 create메소드가 커지고 복잡해지며 당연히 코드 중복이 많이 발생하는 경우가 있다.


'아키텍처와 공학' 카테고리의 다른 글

Variability mechanism  (1) 2009.10.26
컴포넌트 Dependency  (0) 2009.10.26
RUP 4+1 VIEW  (2) 2009.10.26
Siemens 4 Views  (0) 2009.10.26
Software Architecture 관련 용어들  (3) 2009.10.26
Posted by sjokim
,

RUP 4+1 VIEW

아키텍처와 공학 2009. 10. 26. 10:17



Logical View

This view of the architecture addresses the functional requirements of the system, in other words, what the system should do for its end users, It is an abstraction of the design model and identifies major design packages, subsystems, and classes.
Examples include a flight, a flight plan, an airway, an airport, and an airspace package

Implementation View
This view describes the organization of static software modules(source code, data files, components, executables, and other accompanying artifacts)in the development environment in terms of packaging and layering and in terms of configuration management(ownership, release strategy, and so on). It addresses the issues of ease of development, management of software assets, reuse, subcontracting, and off-the-shelf components.
 Examples include the source code for a flight class and the library of code for an airspace database

Process View
This view addresses the concurrent aspects of the system at runtime-tasks, threads, or processes as well as their interactions. It addresses issues such as concurrency and parallism, system startup and shutdown, fault tolerance, and object distribution. It deals with issues such as deadlock, response time, throughput, and isolation of functions and faults. It is concerned with scalability.
 Examples are a flight management process, flight plan entry process, and an airspace management process.

Deployment View
This view shows how the various executables and other runtime components are mapped to the underlying platforms or computing nodes. It is here that software engineering meets system engineering. It address issues such as deployment, installation, and performance.
 For example, the flight management process runs on the main flight processor, whereas the flight plan entry processes run on any workstation

Use-Case View
This view plays a special role with regard to the architecture. It contains a few key scenarios or use cases. Initially, these are used to drive the discovery and design of architecture in the inception and elaboration phases, but later they will be used to validate the different views. These few scenarios act to illustrate in the software architecture document how the other views work.
 Examples are the entry of a flight plan and the handover of responsibility to another air traffic controller.


Posted by sjokim
,


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
,