밥벌이/소프트웨어 공학 소프트웨어 설계 원리 - 반응형 설계 원리 개념 소프트웨어를 구성 요소로 나누는데 적용되는 기준 기능과 데이터 구조를 소프트웨어에 대한 개념적 표현으로부터 분리하는 방법 소프트웨어 설계의 기술적 품질을 정의하는 균일한 기준 추상화 현실 세계를 컴퓨터 세계로 변환시키는 과정 소프트웨어 공학 프로세스의 각 단계에서 추상화가 정제됨 요구 사항 분석 시 환경에 친숙한 용어들로 설명 설계가 진행됨에 따라 추상화 수준이 낮아짐 소스 코드가 생성될 때 최하위 수준의 추상화에 도달 기능(프로시저) 추상화 제한된 특정 기능을 갖는 명령어들의 명명된 순서 자료(데이터) 추상화 데이터 객체를 기술하는 데이터들의 명명된 집합체 제어 추상화 내부적인 상세 표현이 없는 프로그램 제어 메커니즘 단계적 정제(Stepwise Refinement) Niklaus Wirth에 의해 제안된 하향식(Top-down) 설계 전략 정제는 높은 수준의 추상화 단계에서 정의된 기능 명세로부터 시작되어 모든 문장이 컴퓨터의 기본 명령이나 프로그래밍 언어로 표현될 때 완료 모듈성 소프트웨어 아키텍처는 모듈성을 구체적으로 표현한 것 하나의 모듈로 구성된 대형 프로그램은 제어 경로의 수, 참조 범위, 변수의 수, 전체적인 복잡도로 인해 이해하는 데 어려움이 있음 분할 및 정복(Divide and Conquer)을 이용하여 복잡한 문제를 여러 작은 문제로 나누면 문제 해결이 쉬워짐 모듈성은 모듈 내부의 응집도는 높이면서 각 모듈 간의 결합도는 낮을 때 가장 효과적 소프트웨어 아키텍처 정의 광의 : 주요 시스템 요소들과 이들 간의 상호 작용을 표현 협의 : 프로그램 구성 요소(모듈)들의 계층 구조, 상호 작용 방법, 구성 요소에 의해 사용되는 데이터의 구조를 총칭 아키텍처 설계에서 명세 되어야 할 성질 구조적 성질 : 시스템 구성 요소들이 패키지화되고 상호 작용하는 방법 특별/기능적 성질 : 시스템 특성들을 달성하는 방법(성능, 용량, 신뢰도, 보안) 관련 시스템들의 집합 : 관련된 시스템들의 설계에서 공통적으로 직면하는 반복 패턴들을 유도해 내야 함 아키텍처 설계 모델 종류 Structural 모델 프로그램 구성 요소들의 조직화된 모임으로 아키텍처 표현 Framework 모델 유사한 타입의 애플리케이션에서 직면하는 반복적인 아키텍처 설계 프레임워크(패턴)들을 식별함으로써 추상화 수준을 향상시킴 Dynamic 모델 구조나 시스템 형상이 외부사건의 함수로서 어떻게 변경되는지 프로그램 아키텍처의 행위 측면들을 나타냄 Process 모델 시스템이 수용해야 하는 업무나 기술적 프로세스에 초점을 맞춤 Functional 모델 시스템의 기능 계층 구조를 나타내기 위해 사용함 ADL(Architecture Description Language) 모델들을 표현하기 위한 아키텍처 서술 언어 제어 계층 구조 : 프로그램 구조 프로그램의 구성 요소인 모듈들의 계층적인 구성을 나타내며, 제어의 계층 구조를 암시 대표적인 표기법은 구조 차트인 트리 구조 Fan-out : 한 모듈에 의해 직접 제어되는 모듈의 수 Fan-in : 특정 모듈을 직접 제어하는 모듈의 수 구조적 분할 수평적 분할 각 주요 프로그램 기능 단위로 모듈 계층 구조가 분리되는 분할 장점 소프트웨어의 테스트를 쉽게 해줌 유지보수를 쉽게 해줌 부작용(Side Effects)을 최대한 줄여줌 소프트웨어 확장을 수월하게 함 단점 모듈 인터페이스들 사이에 주고받는 데이터의 양을 증가 시키며, 프로그램 흐름의 전체 제어를 복잡하게 만들 수 있음 수직적 분할 제어(의사 결정)와 작업이 프로그램 아키텍처에서 하향식으로 분리되는 분할 상위 모듈들은 실제 처리 작업을 거의 수행하지 않고 제어 기능들을 수행하며, 하위 모듈들은 입.출력, 계산 등을 수행하는 작업 모듈 수직적으로 분할된 아키텍처는 변경이 일어날 때 부작용의 영향을 덜 받으며, 따라서 유지보수성이 좋아짐 분할이란 : 문제가 복잡할 때 문제를 쉽게 이해할 수 있는 부분으로 나누는 것을 의미하는데, 수평적 분할은 기능 단위로 분할하는 것이고, 수직적 분할은 각 기능에서 세부적으로 분할 하는 것을 의미 소프트웨어 프로시저 프로그램 구조는 계층적으로 제어를 결정해주며, 프로시저는 각 모듈이 어떻게 수행되는가를 자세하게 나타냄 프로시저는 반드시 연속된 사건, 정확한 결정 순간, 반복 수행, 데이터 구조까지 포함하여 정확한 수행 명세를 제공해야 함 정보 은닉(Information Hiding) 한 모듈 내부에 포함된 절차와 데이터 등의 정보는 이러한 정보를 필요로 하지 않는 모듈로부터 접근할 수 없도록 모듈이 명세화되고 설계되어야 한다는 개념 소프트웨어 기능을 수행하는데 반드시 필요한 정보들만을 전달하도록 독립적인 모듈들을 정의함으로써 효과적인 모듈화가 이루어지게 함 정보 은닉의 목정은 변경 시의 부주의로 인한 오류로부터 소프트웨어의 다른 부분이 영향을 받지 않도록 하기 위함 반응형 공유하기 게시글 관리 구독하기IT RED OCEAN 에서 살아 남기(일흔까지만) '밥벌이 > 소프트웨어 공학' 카테고리의 다른 글 소프트웨어 테스트 프로세스 (0) 2010.12.27 소프트웨어 설계 개요 (0) 2010.11.25 소프트웨어 모듈화 (0) 2010.11.25 소프트웨어 설계 방법 (0) 2010.11.25 소프트웨어 요구사항의 개요 (0) 2010.10.18 Contents 당신이 좋아할만한 콘텐츠 소프트웨어 테스트 프로세스 2010.12.27 소프트웨어 설계 개요 2010.11.25 소프트웨어 모듈화 2010.11.25 소프트웨어 설계 방법 2010.11.25 댓글 0 + 이전 댓글 더보기