본문 바로가기

CS/TOPCIT

[TOPCIT] 01소프트웨어 개발_4.소프트웨어 설계 원리와 구조적 설계

반응형

4. 소프트웨어 설계 원리와 구조적 설계

4.1 소프트웨어 설계 원리

  • 소프트웨어 설계 단계에서는 분할과 정복을 기본적 설계원리로 표현한다. 문제를 서브시스템으로 분할하고 개발하여 추후 통합되어 전체 시스템이 작동될 수 있도록 한다.

추상화

  • 추상화는 상위 수준에서 제품의 구현을 먼저 생각하는 것을 의미한다.
  • 컴포넌트의 구현 방법을 과감히 생략하고 외부 인터페이스에 초점을 맞추는 것이다.

정보 은닉

  • 정보 은닉이란 각 모듈의 내부 내용을 감추고 인터페이스를 통해서만 메세지를 전달할 수 있도록 하는 개념
  • 구성 요소간의 독립성을 유지시켜준다는 점에서 중요하다.

단계적 정제

  • 프로그램의 구조에서 점차 모듈에 대한 세부 사항으로 내려가며 구체화된다.
  • 세부적인 묘사를 가능하게 함으로써 시스템의 구현을 가능하게 한다.
  • 설계는 높은 추상화 단계에서 낮은 추상화 단계로 가는 단계적 정제 과정이다.

모듈화

  • 소프트웨어 모듈은 프로그래밍 언어로 표현하면 서브루틴, 프로시저, 함수 등으로 부른다.
  • 모듈화는 시스템을 지능적으로 관리할 수 있도록 해 주며, 복잡도의 문제를 해결해 준다
  • 모듈화는 시스템의 유지 보수와 수정을 용이하게 해준다.
  • 모듈의 수가 지나치게 증가하면 시스템의 성능이 떨어지고 과부화 현상이 나타나게 된다.

구조화

  • 시스템의 구조화는 분할 과정에 의해 얻어질 수 있다.
  • 시스템의 특성을 파악하여 기존 시스템들의 경험과 가이드라인을 활용할 수 있다.

4.2 응집도와 결합도

응집도

  • 모듈 내부가 얼마나 강한 연관성으로 뭉쳐져 있는가를 나타내는 모듈 성숙도의 측정치이다.
  • 모듈내의 모든 요소들이 단일 기능을 수행하고 그 상위 모듈을 위해 수행되는 기능적 응집도가 가장 높은 응집도이며, 아무 관련 없는 처리 요소들로 모듈이 형성되는 우연적 응집도가 가장 낮은 응집도이다.
  • 모듈의 응집도를 높이면 모듈 사이의 낮은 결합도를 얻을 수 있으며, 이와 반대로 낮은 응집도는 높은 결합도를 발생시킬 수 있다.
  • 응집도 종류와 정도
    1. 기능적 응집도: 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
    2. 순차적 응집도: 모둘 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활도으이 입력 데이터로 사용할 경우의 응집도
    3. 교환(통신)적 응집도: 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도
    4. 절차적 응집도: 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
    5. 시간적 응집도: 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
    6. 논리적 응집도: 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
    7. 우연적 응집도: 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도

결합도

  • 결합도는 모듈 사이의 상호 연관성의 복잡도를 말한다.
  • 모듈들 사이의 상호 교류가 많고 서로의 의존이 많을수록 모듈들 사이의 결합도는 높아지게 된다.
  • 결합도가 높을수록 한 모듈을 독립적으로 변경하기 어렵고, 이렇게 한 모듈의 변경이 다른 모듈에 미치는 영향도가 클 것으로 파문효과(ripple effect)를 일으키게 된다.
  • 파문효과가 클 수록 유지보수가 어려워 진다.
  • 결합도의 종류와 정도

1. 자료 결합도
   - 매개변수나 인수로 데이터를 주고 받을 때
   - 한 모듈의 내용을 변경하더라고 다른 모듈에는 전혀 영향을 미치지 않는 가장 바람직한 결합도이다.
2. 스탬프(검인) 결합도
    - 인터페이스로 배열이나 레코드등의 자료 구조가 전달될 때의 결합도이다.
    - 자료 구조의 어떤한 변화는 그것을 조회하는 모든 모듈 및 변화하는 필드를 실제로 조회하지 않는 모듈에게까지도 영향을 미치게 된다.
3. 제어 결합도
    - 한 모듈에서 다른 모듈로 논리적인 흐름을 제어하는 데 사용하는 제어 요소가 전달될 때의 결합도
    - 상위 모듈이 하위 모듈의 상세한 처리절차를 잘 알고 있어 이를 통제하는 경우
    - 처리 기능이 두 모듈에 분리되어 설계된 경우
4. 외부 결합도
    - 어떤 모듈에서 외부로 선언한 데이터를 다른 모듈에서 참조할 때
5. 공통(공유) 결합도
    - 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
6. 내용 결합도
    - 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때

4.4 구조적 설계 방법

변환흐름 중심 설계

  • 변환흐름 중심은 입력을 받아들여 시스템에서 사용할 수 있는 데이터로 정제하는 입력흐름, 데이터를 가공 처리하는 변환중심, 가공 처리된 정보를 받아 적당한 출력물로 변환시켜 출력시키는 출력흐름으로 이루어져 있다.
  • 변환흐름에 기초한 상위 수준 프로그램에는 3가지 구성요소가 있다.
    1. 입력을 처리하는 입력 제어 모듈
    2. 변환을 처리하는 변환 제어 모듈
    3. 출력을 처리하는 출력 제어 모듈

트랜잭션흐름 중심 설계

  • 트랜잭션이란 자료나 제어 시그널 등이 어떠한 행위를 유발시키는 것을 말한다.
  • 트랜잭션에 기초한 프로그램 구조를 만들면 세 구성 요소로 이루어져 있다.
    1. 트랜잭션 중심으로 작용하는 모듈
    2. 입력을 받아들이는 모듈
    3. 각 동작 경로에 해당하는 하나 이상의 모듈

반응형