2.log

07 | 설계 원리와 구조적 설계 본문

소프트웨어공학

07 | 설계 원리와 구조적 설계

2.log 2023. 4. 28. 19:52
728x90
반응형

* KOWC에 등록된 동국대학교 최은만 교수님의 강의내용을 공부목적으로 정리한 글임을 밝힙니다.
| 출처 : http://www.kocw.net/home/search/kemView.do?kemId=331697&ar=relateCourse  

 

 

분석과 설계 비교


 

 

 

 

소프트웨어 설계


아키텍처 설계

시스템 컴포넌트와 이들의 커넥션에 초점 (모듈의 역할과 인터페이스 정의)

 

상세설계

코드 수준에 가까움 (모듈 내부 알고리즘, 데이터 명세화)

 

 

 

 

좋은 설계의 요건


1. 복잡성 최소화

2. 느슨한 결합(Loose coupling0

3. 강한 응집력(Strong cohension)

4. 확장성

5. 재사용성

6. 유지보수성

7. 유연성

 

>>  궁금 목표 : 모듈화, 캡슐화 등을 통해 결합성은 낮추고 응집력은 높여 복잡성을 최소화하는 것

시스템을 잘게 쪼개어 비슷한 것들끼리 최대한 묶어 놓으면, 각 모듈 간에는 서로 필요한 것들이 상이하기에  결합 정도가 줄어들게 되고, 모듈 내부적으로는 자기네들끼리 특성이 비슷한 것끼리 묶여있어 필요한 것들은 한 0모듈 내에서 해결할 수 있게 되므로 응집력 높아짐. 같은 맥락에서 캡슐화/은닉화는 각 모듈의 자세한 처리 내용을 시스템의 다른 0부분으로부터 감추어지게 하므로 결합도 낮추는데 기여함. 이는 결과적으로 유지보수성을 높임 (모듈 간 상호작용 최소화 > 수정 시 파급효과 감소)

 

 

 

 

구조적 설계


구조적 분석의 결과물을 이용해 아키텍쳐를 설계하고 모듈을 정의하는 것

데이터 흐름을 분석해 시스템을 모듈단위로 분할 & 계층적으로 구성함

DFD에서 발견된 패턴에 따라 크게 변환분석(Transform) / 처리분석(Transaction)으로 구분하여 구조도로 변환

 

 

 

 

Structure Chart (구조도)


모듈들의 계층 구조, 매개 변수, 상호 연결 관계 보여줌

상위 모듈이 하위 모듈을 호출하며 [위 -> 아래], [좌 -> 우] 순으로 해석

 

출처: The Application of Prolog to Structured Design - Scientific Figure on ResearchGate. Available from:  https://www.researchgate.net/figure/Sample-structure-chart_fig3_220281904  [accessed 27 Apr, 2023]

 

 

표준기호

 

이 때, empty circle 이 단순히 데이터를 넘겨주는 것이라면, filled circle 은 실행흐름을 변화시키는 flag 로써 모듈 간 결합도를 높인다는 차이가 있음

 

 

 

 

변환분석(Transform)


DFD 를 입력흐름(입력, 검증), 변환센터(data), 출력 흐름(포맷팅, 출력)으로 분할하는 과정

 

 

분석방법

1. DFD 에서 입/출력 자료 흐름 파악

2. 중앙 변환 부분 식별

3. 변환 중심부를 축으로 최상위 (first-cut) 작성

4. 각 모듈의 하위 구조도 역시 같은 방법으로 분석

5. 설계기준 적용하여 수정/최적화

 

 

 

 

 

처리분석(Transition)


DFD의 한 프로세스에서 여러 경로로 자료 흐름이 유출되는 것

 

 

분석방법

1. DFD에서 처리 센터 식별

2. 처리 모듈 중심으로 구조도 작성

3. 구조도 상세화, 하위 구조도 작성

 

 

 

 

 

설계평가기준


모듈의 크기

소규모 시스템은 함수, 서브루틴(프로그램이 호출하는 일련의 명령어) / 대규모 시스템은 독립프로그램 기준

 

 

모듈 응집력(module cohesion)

모듈 내 요소들 간에 응집력 높이기 이해  한 모듈이 되도록 단일기능 갖도록 설계

 

* 응집력의 단계 (아래로 갈수록 약한 응집력, 강할수록 좋음)

 

1. 기능적(functional) : 모듈의 기능이 한 문장으로 떨어짐 (ex. 판매대금 계산)

2. 순차적(sequencial) : 한 작업의 결과가 다른 작업의 입력으로 들어감

3. 교환적(communicational) : 기능적으로 크게 관련은 없지만 동일한 입/출력을 사용하는 작업의 모임

4. 절차적(procedual) : 입//출력을 공유하지 않으나, 같은 범주에 속하는 작업들이 순서대로 수행

5. 시간적(temporal) : 초기화와 같이 한 번만 수행되는 요소가 포함된 경우

6. 논리적(logical) : 유사한 성격의 작업을 한 모듈로 모음 (ex. math.c library)

7. 우연적(coincidential) : 아무 관련 없는 작업들의 모임

 

>> 5 ~ 7 과 같은 작업들은 별도의 모듈로 분리하는 게 좋음

 

 

모듈 결합도(module coupling)

서로 다른 모듈들 간에 결합도 낮게 설계

 

* 결합의 단계(아래로 갈수록 강한 결합, 약할수록 좋음)

 

1. 자료 결합(data coupling) : 모듈 간에 간단한 변수를 파라미터로 교환

2. 스탬프 결합(stamp coupling) : 모듈 간 인터페이스로 배열, 구조체, 레코드 등의 자료구조 전달 (nonglobal)

3. 제어 결합(control coupling) : 제어 요소(flag) 주고받는 경우

4. 공통 결합(common coupling) : 여러 모듈이 공동의 자료 영역 사용 (global variable..)

5. 내용 결합(content coupling) : 한 모듈이 다른 모듈의 일부를 직접 참고 또는 수정

 

>> 4, 5 와 같은 결합도 높은 모듈 설계는 피해야 함

 

 

설계 요령(design heuristics)

1. first cut(최상위) 모듈의 결합도는 낮게, 응집도는 높게

2. high fan-out* 줄이도록 노력

3. 양파모양 구조가 일반적 (보통 Fan-In으로 인해 모듈 구조도 하위로 갈수록 폭이 좁아지는 형태 보임)

4. 모듈의 영향권은 관련있는 모듈의 하위에 둠 (가능한 서로 호출하는 일 없도록, 복잡도 & 결합도 최소화)

 

* Fan-In & Fan-Out

Fan-In : 어떤 모듈을 제어(호출)하는 모듈의 수, 최대 입력 수, 모듈 자신 기준으로 자신을 제어하는 상위 모듈 수

Fan-Out : 어떤 모듈에 의해 제어(호출)되는 모듈의 수, 최대 출력 수, 모듈 자신 기준으로 자신이 제어하는 하위 모듈 수

example

 

 

 

 

 

 

 

 

 

 

[참고]

https://mini-noriter.tistory.com/20

 

소프트웨어 공학의 모든 것 6 - 설계 원리

포인트1. 설계 기본 개념과 과정은 무엇인가? 포인트2. 설계 작업에 고려하여야 할 품질 목표에는 어떤 것들이 있는가? 포인트3. 전통적인 설계 원리는 어떤 것들이 있는가? 포인트4. 객체지향 패

mini-noriter.tistory.com

https://booolean.tistory.com/579

 

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

소프트웨어 공학 - [제7강] 소프트웨어 설계 주요용어소프트웨어 아키텍처: 소프트웨어 구조를 말하며 시스템을 구성하는 요소들과 그들 간의 관계를 표현하향식/상향식 설계: 하향식 설계는 시

booolean.tistory.com

https://ahn3330.tistory.com/111

 

[소프트웨어공학] 설계 1 - 추상화, 모듈화, 정보은닉, 응집력, 결합도

Github로 보기 상위 설계와 하위 설계 상위 설계 아키텍처 설계, 예비 설계라고 함 소프트웨어 구성 컴포넌트들 간의 관계로 구성된 시스템의 전체적인 구조 시스템 구조도, 외부 파일 및 DB 설계

ahn3330.tistory.com

https://post.naver.com/viewer/postView.nhn?volumeNo=27424202&memberNo=26040503 

 

[소프트웨어 공학] 팬인(Fan-In)/ 팬아웃(Fan-Out)

* 팬인 어떤 모듈을 제어(호출)하는 모듈의 수 하나의 모듈이 제어받는 상위 모듈의 수 게이트가 수용...

m.post.naver.com

 

728x90
반응형
Comments