본문 바로가기
전공공부/소프트웨어공학

소프트웨어 설계

by 으노으뇨 2021. 10. 27.
728x90
반응형
SMALL

학습중점

  • 소프트웨어 설계 개념
  • 소프트웨어 설계 기본원리
  • 모듈의 개념과 모듈의 기능적 독립성
  • 응집도와 결합도 개념 및 특징
  • 효율적인 설계 방안

소프트웨어 설계 개요

요구사항 분석에서 정의된 결과로 얻은 요구사항 명셰를 기초로 소프트웨어의 기능 및 성능 들을 가장 적합하게 실현시킬수 있는 알고리즘과 그 알고리즘에 의해서 처리될 자료 구조의 특성을 찾아내여 이들을 문서화하는 과정

소프트웨어 설계 목표

1. 시스템의 구성과 이에 필요한 데이터를 추상화

2. 시스템의 각 구성요소 사이에 있는 인터페이스를 확립하고 제어와 데이터의 연결을 명확히 정의

3. 목표한 시스템의 품질을 보증하기 위한 여러 가지 설계상의 장단점을 파악해 개선 방향을 제시한다.

요구사항 분석과 설계 간 관계

 

설계모델 주요 내용
프로시저 설계 프로그램 아키텍처의 구조요소를 소프트웨어 구성요소에 대한 절차 서술로 변환한다.
인터페이스 설계 소프트웨어가 상호작용하는 시스템과 시스템, 시스템과 사용자 간 교류를 나타난다.
아키텍처 설계 프로그램의 주요 구성요소 간 관계를 정의한다.
데이터 설계 분석과정 중 생성된 정보영역을 소프트웨어로 구현하는데 필요한 데이터 구조로 변환한다.

소프트웨어 설계 원리

추상화

추상화는 자세한 구현에 대한 고민에 앞서서 상위수준에서 제품의 구현을 먼저 생각하는 것이다.
-큰 흐름을 잃지 않으면서 점차적 구현으로 접근하기 위한 목적이다.

추상화의 종류

제어 추상화 제어의 정확한 메커니즘을 정의하지 않고 원하는 효과를 정하는데 이용한다.
기능 추상화 입력 자료를 출력 자료로 변환하는 과정을 추상화 하는 방법이다.
자료 추상화 자료와 자료에 적용될 수 있는 기능을 함께 정의함으로써 자료 객체를 구성하는 방법이다.

단계적 분해

문제를 상위수준에서 점증적으로 좀 더 구체적인 하위수준으로 분할하는 기법이다.
소프트웨어를 해결할 만한 작은 문제로 나누고 구체화의 정도를 작게 하여 점증적으로 문제를 다루어나가는 방법이다.

단계적 명세화 과정

  1. 문제를 하위수준의 독립된 과정으로 나눈다.
  2. 구분된 문제의 자세한 구현은 뒤로 미룬다. - 대략적으로 만듦
  3. 점증적으로 구체화 작업 반복이다.
집을 혼자 짓는다고 생각하자, 대략적인 집의 외형, 그리고 층수, 각 층수의 방배열 구조, 방 구조 등.

프로그램 구조

소프트웨어의 구조 요소인 모듈의 계층적 구성을 나타내는 것으로, 제어계층 구조라고도 한다.
프로그램의 순서, 선택, 반복과 같은 소프트웨어의 절차적인 처리 과정을 나타내지는 않는다.
프로그램 구조는 일반적으로 트리 구조의 다이어 그램으로 표기한다.
사각형은 모듈을 나타낸다.

G의 Fan-in : 3개(BCD)

G의 Fan-out : 2개(IJ)

프로그램 구조에서 사용되는 용어

공유도(fan-in, 팬 - 입력) 어떤 모듈을 제어하는 모듈의 수를 나타낸다.
제어도(fan-out, 팬 - 출력) 어떤 모듈에 의해 제어되는 모듈의 수를 나타낸다.
깊이(depth) 제어의 계층 수를 나타낸다.
넓이(width) 제어의 분기된 수를 나타낸다.
주종적 모듈(superordinate) 다른 모듈을 제어하는 모듈을 나타낸다.
종속적 모듈(subordinate) 어떤 모듈에 의해 제어되는 모듈을 나타낸다.

모듈화

  • 모듈은 독립적으로 수행할 수 있는 프로그램 단위를 의미하며, 함수, 서브루틴, 작업단위 등으로 불리기도 한다.
  • 모듈화는 소프트웨어를 모듈단위로 나누는 것을 의미한다.
  • 하나의 모둘로 구성된 대형 프로그램은 제어경로 수, 참조 범위, 변수의 수, 전체적인 복잡도로 인해 이해가 어렵다.
  • 분할 해결법을 이용해 복잡한 문제를 여러 작은 문제로 나누면 무제 해결이 쉬워진다.
  • 모듈화를 이용하여 설계하면 확장성, 융통성, 경제성 등이 향상된다.
  • 모듈은 독립적으로 컴파일이 가능하고, 다른 모듈을 사용할 수도 있으며 다른 프로그램에서 사용될 수도 있다.

효과적인 모듈 설계의 기준

정보은닉(infomation hiding)

정보은닉의 원리 각 모듈의 내부 내용에 대해서는 감추고, 인터페이스를 통해서만 메시지를 전달할 수 있도록 하는 개념.
설계상의 결정 사항이 각 모듈 안에 감추어져 다른 모듈이 직접 접근하거나 변경하지 못하도록 한다.
정보은닉의 장점 모듈 구현의 독립성 보장
변경 영향성 최소화

기능적 독립성(functional independence)

뚜렷한 하나의 목적을 가지면서 다른 모듈과의 상호 의존도가 낮을수록 기능적으로 독립적이다.
기능적 독립성의 장점 개발 용이성 : 기능분리가 가능하고 접속관계가 단순하다.
오류 파급효과 최소화 : 설계 및 코드 수정에 의한 연쇄적 수정작업을 최소화 한다.

기능적 독립성의 지표 (응집도, 결합도)

모듈의 기능적 독립성은 응집도와 결합도에 의해 측정되며, 독립성을 높이려면 모듈의 응집도를 강하게,
결합도를 약하게 하며 모듈의 크기를 작게 만들어야 한다.

모듈의 응집도

  • 모듈의 안의 요소들이 서로 관련되어있는 정도
  • 모듈이 독립적인 기능으로 잘 정의되어 있는 정도
  • 응집도가 높은 모듈은 하나의 작업을 수행하도록 모듈 내의 요소가 구성된다.
  • 응집도는 체계를 모듈 단위로 얼마나 잘 분할했는지를 알려주는 지침이 된다.
  • 독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 한다.
기능적 응집도
(functional cohesion)
모듈 내의 모든 요소들이 단일 문제와 연관되어 수행될 경우


순차적 응집도
(sequential cohesion)
모듈내 하나의 활동으로 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우
교환(통신)적 응집도
(communicational cohesion)
동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우
절차적 응집도
(procedural cohesion)
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
일시적 응집도
(temporal cohesion)
특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우
논리적 응집도
(logical cohesion)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우
우연적 응집도
(coincidental cohesion)
모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우

모듈의 결합도

  • 모듈 간의 상호 의존도는 두 모듈 사이의 연관관계를 의미한다.
  • 모듈은 다른 모듈에게 의전적인 성향 없이 독립적인 기능을 할수록 낮은 결합도를 가진다.
  • 독립적인 모듈이 되기 위해서는 각 모듈 간의 결합도가 약해야 하며 의존하는 모듈이 적어야 한다.
  • 결합도가 강하면 시스템 구현 및 유지보수 작업이 어렵다.
데이터 결합도
(data coupling)
-모듈이 파라미터나 인수로 다른 모듈에게 데이터를 넘겨주고 호출 받은 모듈은 데이터에 대한 처리 결과를 다시 돌려주는 가장 이상적인 결합도
-인터페이스만 합의하면 서로 상호작용할 수 있고 내부 구현에 대해서는 서로 간섭하지 않는다.


스탬프 결합도
(stamp coupling)
-한 모듈이 배열이나 레코드 등의 자료구조를 다른 모듈에게 전달될 때의 결합도이다.
-두 모듈이 동일한 자료 구조를 조회하는 경우 결합도이며 자료구저의 어떠한 변화, 즉 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에 까지도 영향을 미치게 된다.
제어 결합도
(control coupling)
-어떤 모듈이 다른 모듈의 내부 논리 조작을 제어하기위한 목적으로 제어신호를 이용하여 통신하는 경우, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생하게 되는 결합도
-상위 모듈이 하위 모듈의 상세한 처리 절차를 알고있어 이를 통제하는 경우에 발생한다.
외부 결합도 
(external coupling)
-어떤 모듈에서 외부로 선언한 데이터를 다른 모듈에서 참조할 때의 결합도
-참조되는 데이터의 범위를 각 모듈에서 제한할 수 있다.
공통 결합도
(common coupling)
-공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도 
-공통 데이터 영역의 내용을 조금만 변경하더라도 이를 사용하는 모듈에 영향을 미치므로 모듈의 독릭성을 약하게 한다.
내용 결합도
(contents coupling)
-한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 작접 참조하거나 수정할 때의 결합도(피해야함!!)
-한 모듈에서 다른 모듈의 내부로 제어 이동 시에도 발생한다.

권리전도현상 : 하위모듈이 상위모듈에게 명령을 처리하도록 하게끔하는것.


효율적 설계의 기준

효과적 모듈설계를 위한 기준

  • 초기 프로그램 구조를 평가해 결합도를 줄이고 응집도를 높여 독립성 있도록 설계
  • 모듈 인터페이스를 평가해 복잡성과 중복성을 줄이고 일관성을 유지
  • 기능이 예측 가능한 모듈을 정의하되, 지나치게 제한적인 모듈은 피한다.
  • 모듈은 유지보수가 용이해야한다.
  • 하나의 입구와 하나의 출구를 가지도록 설계
  • 모듈의 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해한다.

바람직한 설계의 특징 및 고려사항

  • 소프트웨어를 구성하고 있는 모듈과 모듈간에 상호작용하는 방법, 모듈에 의해 사용되는 자료구조 등을 나타내야 한다.
  • 독립적인 기능적 특성을 가진 요소로 구성되어야 한다.
  • 모듈 구조, 즉 특정 기능 또는 부기능을 수행하는 논리적 요소들로 분리되는 구조를 가져야 한다.
  • 소프트웨어 요소 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 한다.
  • 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 한다.
  • 모듈 간과 외부 개체 간의 연결 복잡성을 줄이는 인터페이스를 가져야한다.
  • 요구사항분석에서 얻어진 정보를 이용하여 반복적인 방법으로 이루어져야 한다.
  • 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화 시켜야 한다.
  • 사용자 요구사항을 모두 구현해야하고, 유지보수가 용이해야한다.
  • 모듈 간의 상관성을 낮추고, 응집도는 높여야한다.

계층적 조직 구성
혼합형 조직 구성
경험자와 초보자를 구별
전문 프로그래머와 리더에게 지휘 권한을 부여
의사 소통은 초급 프로그래머와 고급 프로머로 분산
기술 인력이 프로젝트 관리를 담당해야 하는 부담이 따름

728x90
반응형
LIST

'전공공부 > 소프트웨어공학' 카테고리의 다른 글

객체지향의 원리  (0) 2021.11.01
객체지향 방법론  (0) 2021.11.01
기출문제(1)  (0) 2021.10.13
구조적 분석 도구  (0) 2021.10.13
요구사항 분석  (0) 2021.10.13

댓글