새소식

반응형
밥벌이/소프트웨어 공학

소프트웨어 설계 원리

  • -
반응형
  • 설계 원리 개념
    • 소프트웨어를 구성 요소로 나누는데 적용되는 기준
    • 기능과 데이터 구조를 소프트웨어에 대한 개념적 표현으로부터 분리하는 방법
    • 소프트웨어 설계의 기술적 품질을 정의하는 균일한 기준
         
  • 추상화
    • 현실 세계를 컴퓨터 세계로 변환시키는 과정
    • 소프트웨어 공학 프로세스의 각 단계에서 추상화가 정제됨
      • 요구 사항 분석 시 환경에 친숙한 용어들로 설명
      • 설계가 진행됨에 따라 추상화 수준이 낮아짐
      • 소스 코드가 생성될 때 최하위 수준의 추상화에 도달
        • 기능(프로시저) 추상화
          제한된 특정 기능을 갖는 명령어들의 명명된 순서
        • 자료(데이터) 추상화
          데이터 객체를 기술하는 데이터들의 명명된 집합체
        • 제어 추상화
          내부적인 상세 표현이 없는 프로그램 제어 메커니즘
           
  • 단계적 정제(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)
    • 한 모듈 내부에 포함된 절차와 데이터 등의 정보는 이러한 정보를 필요로 하지 않는 모듈로부터 접근할 수 없도록 모듈이 명세화되고 설계되어야 한다는 개념
    • 소프트웨어 기능을 수행하는데 반드시 필요한 정보들만을 전달하도록 독립적인 모듈들을 정의함으로써 효과적인 모듈화가 이루어지게 함
    • 정보 은닉의 목정은 변경 시의 부주의로 인한 오류로부터 소프트웨어의 다른 부분이 영향을 받지 않도록 하기 위함
반응형

'밥벌이 > 소프트웨어 공학' 카테고리의 다른 글

소프트웨어 테스트 프로세스  (0) 2010.12.27
소프트웨어 설계 개요  (0) 2010.11.25
소프트웨어 모듈화  (0) 2010.11.25
소프트웨어 설계 방법  (0) 2010.11.25
소프트웨어 요구사항의 개요  (0) 2010.10.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.