본문 바로가기

CS 정리

탑싯_1_소프트웨어 개발_5_소프트웨어 설계 원리와 구조적 설계

1. 소프트웨어 설계 원리

요구사항을 지속적으로 분할하여 분할하여 문제영역의 복잡성을 줄여야 한다.

적절한 그룹으로 분할과 정복을 한다.

- 복잡한 문제도 해결하기 쉽고 개발자들이 독립적으로 개발 할 수 있다.

추상화

관심 분야가 아니거나 필수적이 아닌 세부적인 것을 생략한다.

필수적인 것만 표현한다.

어떤 논리적인 기능이 있는지, 컴포넌트가 어떻게 상호 작용하는지를 우선적으로 생각한다. 

유형: 자료 추상화, 제어 추상화, 과정 추상화

 

정보 은닉

각 모듈의 내용을 감추고 인터페이스를 통해서만 메세지를 전달한다.

가장 중요한 것은 최소한의 모듈들에만 미치도록 하는 것

구성 요소 간의 독립성을 유지시켜준다는 점이 중요하다.

장점: 변화에 쉽게 적응, 유지보수를 용이

 

단계적 정제

모듈에 다한 세부 사항으로 내려가며 구체화한다.

종류: 높은 추상화 단계에서 낮은 추상화 단계, 엔지니어링의 흐름도, 하나의 큰 프로세스로 시작해 점점 쪼개진다

 

모듈화

하향식 접근 방법을 사용하여 기능 단위로 쪼개어 나간다. 또 모듈들 사이의 제어 계층을 나타낸다.

모듈화는 지능적으로 관리할 수 있고 복잡도의 문제를 해결해준다.(복잡한 큰 문제-> 많은 작은 문제)

모듈 수가 증가하면 각 모듈의 크기는 줄어들지만 상호 교류가 증가하여, 시스템 성능이 떨어진다.

 

구조화

시스템의 중요 요소나 기능을 찾아내어 분할해 나가는 것

 

2. 응집도와 결합도

응집도

모듈 내부가 얼마나 강한 연관성으로 뭉쳐져 있는가를 나타내는 모듈 성숙도의 측정치다.

공통의 목적을 달성하기 위해 서로 얼마나 관련이 있는지 연관 정도를 나타낸다.

또한 모듈의 독립성을 측정하는 척도

응집도가 커지면 결합도는 낮아진다

 

1. 기능적 응집도 -  모든 기능 요소가 단일 문제와 연관

2. 순차적 응집도 -  하나의 활동에서 나온 출력이 다음 활동의 입력으로 간다

3. 교화 통신적 응집도 - 다른 기능을 수행하는 구성 요소들이 모여있다.

4. 절차적 응집도 - 모듈 안의 구성 요소들이 기능을 순차적으로 수행할 경우

5. 시간적 응집도 - 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈

6. 논리적 응집도 - 유사 성격이나 특정 형태의 요소를 묶음

7. 우연적 응집도 - 서로 연관 없는 요소로 구성

결합도

모듈과 다른 모듈들과 연관 관계를 가진다. 이 때 결합도는 모듈 사이의 상호 연관성

모듈끼리 서로 의존하는 부분이 많을수록 결합도가 높아진다.

모듈간 매개변수로 통신하는 자료결합이 가장 약한 결합도

다른 모듈의 자료를 직접 참조, 수정하는 결합은 가장 강한 결합도

결합도가 높을수록 한 모듈을 독립적으로 변경하기 어렵고 다른 모듈에 영향을 미친다

 

1. 자료 결합도 - 모듈 간의 인토페이스가 자료 요소로만 구성될 때(매개 변수나 인수로 데이터 전달)

2. 스탬프 결합도 - 인터페이스로 배열이나 레코드 등의 자료 구조가 전달

3. 제어 결합도 - 한 모듈에서 다른 모듈로 논리적인 흐름을 제어

4. 외부 결합도 - 외부로 선언한 데이터를 다른 모듈에서 참조할 때

5. 공통 결합도 - 공유되는 공통 데이터 영역을 여러 모듈이 사용함

6. 한 모듈이 다른 모듈의 내부 기능 및 내부 자료를 직접 참조하거나 수정할 때

 

 

3. 구조적 설계 방법

구조적 방법을 적용할 경우 설계 초기 단계에서 시스템을 논리적으로 분할해 모듈화한다.

- 표기법

 구조적 분석 과정(버블 차트, 자료흐름도) -> 구조적 설계(구조도표)

변환흐름 중심 설계

기본적인 기능을 수행하는 모듈들과 모듈들 사이의 계층구조를 생성한다.

 

단계

1) 입력 처리(흐름) : 입력을 받아드려 시스템에서 사용할 수 있는 데이터로 정제

2) 변환 처리(흐름) : 데이터를 가공 처리하는 기능

3) 출력 처리(흐름) : 가공 처리된 정보를 받아 출력물로 변환 출력

트랜잭션흐름 중심 설계

자료나 제어 시그널이 행동을 유발. 들어온 입력을 여러 갈래의 출력흐름으로 쪼갠다. 트랜잭션은 입력값을 평가하고 그 결과에 따라 여러 출력 경우 중 하나로 흘러간다.

 

구성요소

1) 트랜잭션 중심으로 작용하는 모듈

2) 입력을 받아들이는 모듈

3) 각 동작 경로에 해당하는 모듈