Transcript 슬라이드 제목 없음
컴퓨터 공학 및 응용실습 5월 29일 9:30 공대강당 최병주 Software Architecture : Fundamentals May, 2002 박수용 서강 대학교 컴퓨터학과 [email protected] 목차 서론 Architecture 란 무엇인가? Architecture view Architecture 의 중요성 결론 Software System Engineering Lab 서론 Building a dog house Software System Engineering Lab Building a house Software System Engineering Lab Building a High Rise Software System Engineering Lab Dimensions of Complexity Higher technical complexity - Embedded, real-time, distributed, fault-tolerant - Custom, unprecedented, architecture reengineering An average software project: - High performance - 5-10 people Defense - 10-15 month duration Telecom Weapon System - 3-5 external interfaces Switch National Air Traffic - Some unknowns & risks Commercial Control System Embedded Compiler Automotive Large-Scale Software CASE Tool Organization/Entity Simulation Lower management complexity - Small scale - Informal - Single stakeholder - “Products” Higher management complexity Small Scientific Simulation IS Application Distributed Objects (Order Entry) Enterprise IS (Family of IS Applications) IS Application GUI/RDB (Order Entry) Business Spreadsheet Lower technical complexity - Mostly 4GL, or component-based - Application reengineering - Interactive performance Software System Engineering Lab Defense MIS System - Large scale - Contractual - Many stake holders - “Projects” Problems Increasing uncertainties in requirements Rapidly evolving technology Structural change in the industry and government Needs to interoperability with other systems Productivity and quality improvement We need a description of a target system that Provides a answer for above problems Software System Engineering Lab Architecture 란 무엇인가? 정의 표준이나 보편화된 정의가 없다. 몇몇 일반적인 정의 – Software 구성 요소들, 관계, 공정, 제약조건, 기능으로 표현된 기본적이고 통합적인 체계구 조. [Rechtin 1991] – Software 구성 요소들의 구조, 그들 간의 관계, 시스템 설계와 개발 시 적용되는 원칙과 지침 [Garlan 1995] Software System Engineering Lab 정의 • 소프트웨어 구성 요소들, 관계, 제약조건 등의 모임 • 소프트웨어 개발 참가자들의 요구 사항들의 모 임 • 구성 요소들간의 연결, 소프트웨어 개발 참가자 들의 요구 사항들을 만족시키는데 필요한 제약 조건들을 증명해 보일 수 있는 근거[Boehm 1995] Software System Engineering Lab 정의 공통 – 구성 요소들, 관계, 기능, 제약들 추가 – 공정, 원칙과 지침, 요구 사항들 Software System Engineering Lab 목적 이해도 향상 : 복잡한 소프트웨어를 시각화 및 단순화 (추상화에의한) 시킴으로 개발자와 요구자간의 이해도 향상 – 시스템 경계(boundary), 주요 구성 요소, 기능, 제 약조건, 관계 대안의 선택 : 개발 시 예상되는 변화에 대한 대안들의 고려 분석 : 전체적인 요구사항의 일관성 (consistency), 품 질 요소 (performance, reliability), 등의 검증 Software System Engineering Lab 목적 관리 : 소프트웨어 개발시 상대적 가격 및 일 정 예측의 근거 자료, 위험요소(Risk) 예측 및 관리 방안 계획 재사용 : 향후 유사 소프트웨어 개발시 재사 용의 근거 재시로 인한 막대한 비용 절감 Software System Engineering Lab 개발 방안 실제로 성공적인 종합체계구조 개발을 위하 여 경험적이고 절차적인 방법과 일반적인 지식 및 실제상황에서 발생된 합의 및 규칙 등을 적절하게 혼합하여 적용 하여야 한다 Software System Engineering Lab 개발 공정 영역화 집단화, 분할화 검증 영역화 목표의 축소/팽창 거시적인 면에서의 대안 고려 구매자의 만족-개발자의 성공 가능성 조사 집단화 분할화 기능적 집단화 (추상적) 구성요소의 서브시스템화 인터페이스 정의 및 분석 시간적 흐름/기능에의한 집단화 동작-기능적 분할 성능 모델의 구축 인터페이스 정의 및 분석 검증 기능에 의한 검증 검사 및 평가 확인 실패에 대한 평가 Software System Engineering Lab A Good architecture Resilient Simple Approachable Clear separation of concerns Balanced distribution of responsibilities Balances economic and technology constraints Software System Engineering Lab Architecture View 소프트에어 구조의 모델 다양한 관점 자료 목적/목표 동작 시스템 관리 성능 % 형태 Software System Engineering Lab Architectural view An architectural view is a simplified description (an abstraction) of a system from a particular perspective or vantage point, covering particular concerns, and omitting entities that are not relevant to this perspective Software System Engineering Lab Representing Software architecture (4+1 model) Logical View End-user Functionality Implementation View Programmers Software management Scenarios Process View System integrators Performance Scalability Conceptual Throughput Software System Engineering Lab Deployment View Physical System engineering System topology Delivery, installation Communication Architecture 의 중요성 As software begins larger Overall Software structure Organization of a software Global control structure Protocols for communication Software System Engineering Lab Algorithms and Data structures 개발의 기반으로서 미래의 소프트웨어는... – – – – – – 컴포넌트 기반의 시스템이 지배할 것이다. 더 많은 비프로그래머가 프로그래밍을 하게 될 것이다. 지속적으로 발전하는 시스템이 비즈니스의 일반적인 형태 가 될 것이다. 시스템은 더욱 분산되고 병렬화될 것이다. 기술의 범람(Technology Churn)은 계속될 것이다. 모델링, 아키텍쳐, 프로세스에 대한 소프트적인 경험들이 더욱 많이 채택될 것이다. 결국, 점점 복잡해지는 소프트웨어와 컴포넌트의 조립을 통제하 기 위해서는 밑그림이 되는 아키텍쳐가 매우 중요하다. Software System Engineering Lab 개발의 기반으로서 The architecture is the foundation of everything. Software System Engineering Lab Architecture 의 중요성 - 요약 소프트웨어에 대한 이해 개발의 조직화 재사용의 촉진 소프트웨어의 진화 Software System Engineering Lab 결론 Architecture의 현재(1/2) Good Architectural Design has Always been a Major Factor in Determining the Success of a System. However, while there are Many Useful Architectural Paradigms – Pipelines, Layered Systems, Client-Server, etc. 선택의 문제는? ------------> 직관 그러나… Software System Engineering Lab Architecture의 현재(2/2) 그러나 바뀌고 있다. How? – Architectural Description Language • UML & OCL, ADL, Model Driven Architecture – Codification of Architectural Expertise • Pattern Oriented Software Architecture • Architecting Processes – Frameworks of Specific Domains • Facilities in the OMG, Domain Specific Architecture – Formal Underpinnings for Architecture • Z-Notations, UML OCL, ADL Software System Engineering Lab Architecture가 추구하는 것은? Sound Basis for Architecture Promises Benefits for Both Development and Maintenance – Recognize Common Paradigms – Getting the Right Architecture – Analysis & Description of High-Level Properties of a Complex System – User of Notations for Describing Architectural Paradigms Software System Engineering Lab 성공적 architecture 개발의 증거 요구사항에 대한 사용자와 개발자간의 공통된 이해 향후 변경에 대한 대안책 마련 다양한 설계 방안에 대한 체계적 분석을 통한 선택 및 장단점 파악 재사용의 기반 마련 상호 운용성에 대한 고려 및 보장 Software System Engineering Lab Q&A Software System Engineering Lab