Software Engineering

[소프트웨어공학] 제7장 소프트웨어 설계

iseop 2023. 5. 16. 20:54   인쇄용 버전

1. 단원 요약

  • 설계 프로세스
    • 입력: 요구사항 명세서, 요구사항 분석모델, 환경적 제약 조건
    • 출력: SW 아키텍처, 인터페이스, 알고리즘, 데이터 형식 정의
    • 설계 프로세스는 반복적이다.
    • 설계 행위
      • 아키텍처 설계: 시스템의 논리적 구성도로써, 비기능적 요구사항에 큰 영향
      • 데이터베이스 설계
      • 서브시스템 설계
      • 컴포넌트 설계
      • 자료구조/알고리즘 설계
    • 설계 원리
      • 문제분할(분할정복)
        • 수평 분할: 기능별로 모듈 그룹화(전체 제어가 복잡해지나 파급 효과가 작고 테스트, 유지보수, 확장이 용이하다.)
        • 수직 분할: 상위 모델은 제어, 하위 모델은 실제 작업을 수행(제어는 단순하나 파급 효과가 크다.)
      • 추상화
        • 기능 추상화: 
        • 데이터 추상화: 
      • 하향식 설계/상향식 설계
        • 하향식 설계: 
        • 상향식 설계: 
  • 아키텍처 설계
    • 아키텍처 스타일: 유사 부류의 소프트웨어들에서 사용되는 공통적 아키텍처 패턴
    • 아키텍처는 비기능적 요구사항에 큰 영향을 준다.
      • 성능: 서브시스템 간 통신 최소화
      • 보안: 계층형 아키텍처+필요한 시스템을 내부 계층으로 설계
      • 안전성: 안전성이 필요한 요소들을 단일 서브시스템에 집중하여 설계
      • 가용성: 동일 기능의 컴포넌트 중복 설계
      • 유지보수성: 자료 공유를 최소화, 작은 모듈로 분할 설계
    • 데이터 중심 아키텍처: 공유 데이터베이스를 통해 상호작용함
      • 데이터 공유에 효율적, 시스템 확장이 용이함
      • 데이터 생성 서브시스템과 데이터 소비 서브시스템이 분리됨
      • 모든 서브시스템이 공통 데이터 모델을 사용해야 함
      • 데이터 모델 변경 시 큰 비용을 수반함
      • 시스템 성능이 중앙 저장소의 성능에 의존적임
    • 데이터 흐름 아키텍처: 각 서브시스템은 입력 데이터를 받아 다음 서브시스템으로 전송함
      • 파이프(데이터 흐름)-필터(각 서브시스템) 구조
      • 데이터 스트림에 일련의 변환 작업을 수행하는 시스템에 적합
      • 요소 간 복잡한 상호작용이 제한됨
    • 클라이언트-서버 아키텍처: 서비스 제공 시스템(서버)과 시스템 이용 시스템(클라이언트)으로 구성됨
      • 분산 시스템 아키텍처이며, 서버와 클라이언트는 네트워크로 연결됨
      • 데이터 분산, 서버 추가, 분산된 프로세스의 효율적 활용이 용이함
      • 데이터 교환이 비효율적
      • 각 서버는 데이터 관리 책임을 가져야 함
    • 계층형 아키텍처: 추상 기계 모델이라고도 하며, 시스템을 계층별로 구성
      • 하위 계층이 제공하는 서비스를 상위 계층이 이용함
      • 상위 계층은 사용자 인터페이스이며, 하위 계층은 하드웨어 인터페이스임
      • 각 계층별 서브시스템의 점증적 개발이 가능
      • 특정 계층의 인터페이스 변경은 그 인접 계층에만 영항을 미침
      • 계층형 구조 설계는 어려움
    • MVC 아키텍처: 저장소 모델의 한 형태로, 하나의 모델에 여러 뷰를 제공
      • 컨트롤러가 사용자 입력을 받으면 이를 모델에 전송, 모델은 데이터를 뷰에 제공
      • 뷰의 변경이 모델에 영향을 주지 않음
      • 대화형 시스템에 적합
    • P2P 아키텍처: 각 서브시스템이 서버와 클라이언트 기능을 모두 수행(복잡)
    • 3계층 아키텍처: 사용자 인터페이스, 비즈니스 로직, 저장소의 3개 계층으로 구성됨
  • 상세 설계
    • 상세 설계는 기능적 요구사항에 중점을 둔다.
    • 모듈화: 시스템을 잘 정의되고 관리 가능한 단위(모듈)로 분해
    • 모듈 독립성: 다른 모듈과의 상호작용 최소화
    • 결합도: 데이터<스탬프<제어<외부<공통<내용결합(코드공유)
    • 응집력: 우연<논리<시간<절차<통신<순차<기능
내용결합 Source code
공통결합 Global variables
외부결합 특정 프로토콜, 특정 파일 포멧에 의존
제어결합 모듈의 실행 흐름이 다른 모듈에 의존
스탬프결합 특정 구조체 데이터 전송
데이터결합 데이터 전송
기능적 응집 단일 작업을 수행하는 기능을 한 모듈에 배치
순차적 응집 요소의 출력이 다음 요소의 입력이 되는 요소들을 한 모듈에 배치
통신 응집 동일 형식의 데이터를 처리하는 기능을 한 모듈에 배치
절차적 응집 특정 절차를 수행하는 기능을 한 모듈에 배치
시간적 응집 실행 주기가 유사한 기능을 한 모듈에 배치(초기-실행중-종료)
논리적 응집 같은 종류의 기능을 한 모듈에 배치(입력/처리/출력)
우연적 응집 기능의 무작위적 배치
  • 객체지향 설계 원칙
    • 단일 책임 원칙
    • 개방 폐쇄 원칙
    • 리스코프 교체 원칙
    • 인터페이스 분리 원칙
    • 의존성 역전 원칙
  • 구조적 설계: 구조적 분석의 산출물을 이용한 아키텍처 설계 및 모듈 개발 방법
    • 입력: 데이터 흐름도
    • 출력: 구조도, 모듈 명세서, 자료사전(DD)
    • 구조도(structure chart)
      • 모듈/라이브러리: □ / ▥
      • 데이터흐름/제어흐름: ○━▶ / ●━▶
      • 호출/선택적호출/반복적호출: ↓ / ◇ / ↺
    • 데이터 흐름도에 의한 구조도 설계
    • 변환 분석에 의한 구조도 설계
    • 트랜잭션 분석에 의한 구조도 설계

 

 

2. 연습문제 요약

  •