08 designprinciple(2010).ppt [호환 모드]€¦ · 변환 분석 방법...

29
LECTURE 8 8 설계 설계 원리와 원리와 구조적 구조적 설계 설계 설계 설계 원리와 원리와 구조적 구조적 설계 설계 똑똑한 사람은 문제를 해결한다. 그러나 현명한 사 람은 문제를 예방한다. 최은만, CSE 4039 소프트웨어 공학

Upload: others

Post on 04-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

LECTURE

88설계설계 원리와원리와 구조적구조적 설계설계설계설계 원리와원리와 구조적구조적 설계설계

−똑똑한 사람은 문제를 해결한다. 그러나 현명한 사람은 문제를 예방한다.

최은만, CSE 4039 소프트웨어 공학

읽읽 기기

교과서 4장 설계교과서 4장 설계

참고문헌Code Complete(제 2판), 스티브 맥코넬, 정보문화사, 2005. p , , ,Chapter 5, pp129-196.

최은만, CSE 4039 소프트웨어 공학 2

설게(Design)이란?g

최은만, CSE 4039 소프트웨어 공학 3

소프트웨어 설계

아키텍처는 상위 수준의 설계이며 시스템의 컴포넌트와아키텍처는 상위 수준의 설계이며 시 템의 컴포넌 와이들의 커넥션에 초점

상세 설계는 코드에 더 가까운 수준, 즉 객체, 클래스, 알고리즘, 변수들을 관찰

상위 수준의 설계와 하위 수준의 설계 작업의 차이가 애매할 수도 있음. 동일한 원리가 적용 됨

최은만, CSE 4039 소프트웨어 공학 4

좋은 설계는?

설계를 움직이는 힘은 복잡성 콘트롤설계를 움직이는 힘은 복잡성 콘 롤

모든 소프트웨어 설계 기술의 목표는 복잡한 문제를 단모든 소프트웨어 설계 기술의 목표는 복잡한 문제를 단순한 조각으로 자르는 것

성능을 높이는 열쇠는 복잡한 예외처리가 아니라 간결함

최은만, CSE 4039 소프트웨어 공학 5

설계의 목표

7가지 바람직한 설계 목표7가지 바람직한 설계 목표

1 복잡성 최소1. 복잡성 최소

2. 느슨한 결합(Loose coupling)

3 강한 응집력(Strong cohesion)3. 강한 응집력(Strong cohesion)

4. 확장성

5 재사용성5. 재사용성

6. 유지보수성

7 유연성7. 유연성

최은만, CSE 4039 소프트웨어 공학 6

추상화의 원리

복잡한 문제 ⇒ 추상화 ⇒ 개념복잡한 문제 추상화 개념

(현실)

소프트웨어의 구조를 이루는 계층의 파악웨어의 구 를 이루는 계층의 파악

기능 추상화입력자료를 출력자료로 변환하는 과정을 추상화

부프로그램의 시그네처와 기능만 생각

자료 추상화자료와 기능을 묶어서 생각

제어 추상화외부 이벤트에 대한 반응을 추상화

최은만, CSE 4039 소프트웨어 공학 7

정보은닉(information hiding)정 은닉( o a o d g)

각 모듈의 자세한 처리 내용이 시스템의 다른 부분으로각 모듈의 자세한 처리 내용이 시 템의 다른 부분 로부터 감추어져 있어야

각 모듈이 다른 모듈에 구애받지 않고 설계

인터페이스가 모듈 안의 구체적 사항을 최소로 반영전역변수가 없어야

모듈 단위의 수정, 시험, 유지보수에 큰 장점모듈 설계 평가에 기초

최은만, CSE 4039 소프트웨어 공학 8

단계적 분해

기능을 최대한으로 떼어내어 생각

점차적으로 구체화

상세한 내역(알고리즘, 자료구조)는 가능한 뒤로 미룸

CAD softrware tasks:user interaction task;

procedure: 2-D drawing creation;repeat util <drawing creation task terminates>

추상화 I 추상화 II 추상화 III

user interaction task;2-D drawing creation task;graphics display task;drawing file management task;

end

repeat util <drawing creation task terminates>do while <digitizer interaction occurs>

digitizer interface task;determine drawing request;

line: line drawing task;

CAD system

end. line: line drawing task;curcle: cricle drawing task;..

최은만, CSE 4039 소프트웨어 공학

.

9

모듈화

1 4

2

0

41

12 3

5

63

2 41

6532

45

6

시스템의 분해를 어떻게 할 것인가?

문제영역 시스템 분해 시스템 구조

시스템의 분해를 어떻게 할 것인가?

한 모듈의 규모

이식성이식성

모듈의 응집력(cohesion)이 높게

모듈 간의 결합력(coupling)은 약하게

최은만, CSE 4039 소프트웨어 공학 10

구조적 설계

시스템을 이루는 모듈의 구조를 파악하는 방법

모듈 분해의 계층적, 인터페이스 지향적 접근,

W. Stevens, G. Myers와 L. Constantine

Functional

Decomposition

Design

Criterion

Design

Heuristics+ +

(cohesion, coupling)

데이타의 흐름 형식에 중점데이타의 흐름 형식에 중점

source-transform-sink: 변환 분석(transform analysis)

transaction pattern: 처리 분석(transaction analysis

최은만, CSE 4039 소프트웨어 공학

p 처리 석( y

11

구조적 설계(계속)

시스템 구조도(structure chart)의 도출시 템 구 (structure chart)의 출

시스템을 모듈 단위로 분할

모듈의 계층적 구성

모듈 사이의 입출력 인터페이스

모듈의 이름과 기능

S4S3S2S1S1 S5S4 S4

S5

S3 S1 S5S2Structure #1 Structure #2

Structure #3

최은만, CSE 4039 소프트웨어 공학

S2 S3Structure #3

12

시스템 구조도

표준 기호한 모듈이 모듈을 호출

자료 흐름(변수나 자료구조)

제어 흐름(플래그)

모듈모듈

반 복 선 택 주석달기

comment

Module

최은만, CSE 4039 소프트웨어 공학 13

구조적 설계(계속)

예 Main

a

b

c

A B C

b

a f

W X Y Z

f a f f

기타 사용되는 기호

미리 정의된 모듈(라이브러리)미리 정의된 모듈(라이브러리)

입출력 모듈

최은만, CSE 4039 소프트웨어 공학 14

변환 분석

자료의 변환 흐름(transformation flow)

입력 흐름 출력 흐름

변환 센터

변환 분석은 자료 흐름도를 입력흐름, 변환센터, 출력흐름으로 분할하는 과정

입력 흐름: 입력을 준비하는 단계(입력 검증 )입력 흐름: 입력을 준비하는 단계(입력, 검증...)

출력 흐름: 출력을 위하여 준비되는 단계(포매팅, 출력)

변환 센터: 실제 자료가 변환

최은만, CSE 4039 소프트웨어 공학 15

변환 분석 방법

①자료흐름도에서 입력 자료 흐름과 출력 자료 흐름을 파악

②중앙 변환 부분을 식별

③변환 중심부를 축으로 최상위 구조(first cut) 작성③변환 중심부를 축으로 최상위 구조(first-cut) 작성

④각 모듈의 하위 구조도 같은 방법으로 분석

⑤설계 기준을 적용하여 수정, 최적화

예: 화일 안에 포함된 단어의 개수를 계산

화일 이름읽음

화일 이름 단어개수

단어개수출력

화일이름

화일 이름검증

단어개수계산

편집

검증된화일이름

단어개수

입력 흐름

출력 흐름

최은만, CSE 4039 소프트웨어 공학

화일이름

변환 센터 16

변환 분석(계속)

램의프로그램의 구조main()

{

...

시스템 구조도

...

read_file(file_name, status);

count_word(file_name, &word_count);

display(word_count);

}

단어 계산

검증된화일이름

화일이름단어개수

}

read_file(char* file_name, boolean status)

{

...단어개수계산

화일이름입력 검증

단어 개수편집 출력

화일이름

상태 단어개수

}

count_word(char* file_name, boolean status)

{

계산입력,검증 편집,출력

...

}

display(int word_count)

{

최은만, CSE 4039 소프트웨어 공학

...

}17

구독자 관리 시스템

① 자료 흐름의 요소를 분해

입력 자료 흐름, 출력 자료 흐름, 변환 센터입력 자료 흐름, 출력 자료 흐름, 변환 센터

구독자레코드 구독자 레코드

출력 흐름

레코드준비

만료일추출

새만료일

구독자레코드

구독자 레코드

만료일 새 만료일

계산 변경

갱신기간

변경 레코드

입력 흐름

구독갱신기간

입력

레코드를화일에출력

변환 센터

최은만, CSE 4039 소프트웨어 공학 18

구독자 관리 시스템(계속)

구조도의 최상위층 작성 구조도를 상세화

구독 갱신

구독 갱신시스템

시스템

구독 갱신갱신 정보추출

갱신 레코드저장

구독 갱신갱신 정보

추출

갱신 레코드저장

추출 저장

새구독기간 입력

구독 만료일준비

구독자레코드 변경

레코드화일로 출력

구독 레코드추출

구독 만료일추출

최은만, CSE 4039 소프트웨어 공학

추출 추출

19

처리 분석

처리(transaction)자료 흐름도의 한 프로세스에서 여러 개의 자료 흐름이 유출되는 것되는 것

처리흐름

T처리센터

처리 경로(action path)

방법방법① 자료 흐름도에서 처리 센터를 식별

② 처리 모듈을 중심으로 구조도 작성

③ 구조도를 상세화 하위 구조도를 작성

최은만, CSE 4039 소프트웨어 공학

③ 구조도를 상세화 - 하위 구조도를 작성

20

설계 평가 기준

모듈의 크기모듈의 크기

소규모 시스템: 함수, 서브루틴

대규모 시스템: 독립 프로그램(하나의 수행 화일)대규 시 템 독립 로 램(하나의 수행 화일)

모듈 응집력(module cohesion)모듈 안의 요소들이 강한 응집력을 갖도록 설계모듈 안의 요소들이 강한 응집력을 갖도록 설계

모듈 결합도(module coupling)다른 모듈과의 결합도가 약한 모듈이 되도록 설계다른 모듈과의 결합도가 약한 모듈이 되도록 설계

설계 요령(design heuristics)

최은만, CSE 4039 소프트웨어 공학 21

모듈 응집력

모듈 안의 구성 요소들이 공동의 목적을 달성하기 위하모듈 안의 구성 요소들이 공동의 목적을 달성하기 위하여 관련되어 있는 정도

목 표한 모듈이 단일 기능을 갖도록 설계

<예>

finishup : 최종 보고서를 출력하고, 계산 결과를 디스크에 저장

응집력의 단계응집력의 단계① 기능적(functional)

• 모듈의 기능이 한 문장으로 떨어짐

<예> 판매세금 계산

② 순차적(sequential) • 작업의 결과가 다른 작업에 입력

최은만, CSE 4039 소프트웨어 공학

• 작업의 결과가 다른 작업에 입력

<예> 거래를 읽고 마스터 화일을 변경 22

모듈 응집력(계속)

③ 교환적(communicational) • 동일한 입력과 출력을 사용하는 작업의 모임

<예> 출력화일을 출력하고 저장

④ 절차적( d l)④ 절차적(procedural)• 같은 범주에 속하는 일들이 순서적으로 수행

<예> restart-RTN : 총계를 출력하고, 화면을 지우고 메뉴를

뿌리고, 메뉴 선택을 받음

⑤ 시간적(temporal) • 프로그램 초기화프로그램 초기화

⑥ 논리적(logical)• 유사한 성격의 작업을 한 모듈로 모음

⑦ 우연적( )⑦ 우연적(coincidential)• 아무 관련 없는 작업을 한 모듈에 모음

최은만, CSE 4039 소프트웨어 공학 23

모듈 결합도

모듈 간의 관련 정도모듈 간의 관련 정도

설계 목표모듈 간의 결합도가 낮게 설계

결합의 단계① 자료 결합(data coupling)• 모듈들이 간단한 변수를 파라메터로 교환

② 스탬프 결합(stamp coupling)• 모듈 사이에 nonglobal 자료 구조를 교환모듈 사이에 nonglobal 자료 구조를 교환

③ 제어 결합(control coupling)• 제어용 신호(flag)를 주고 받음

④ 공통 결합도( li )④ 공통 결합도(common coupling)• global variable을 사용

⑤ 내용 결합(content coupling)

최은만, CSE 4039 소프트웨어 공학

⑤ ( p g)• 한 모듈이 다른 모듈 내의 값을 수정

24

설계 요령(design heuristics)g

first-cut(최상위) 모듈의 결합은 줄이고 응집은 높이

도록 최대한 노력록 최대 력

high fan-out은 줄이도록 노력

......

redundancy와 complexity를 줄이기 위하여 모듈의

인터페이스를 점검최은만, CSE 4039 소프트웨어 공학

인터페이스를 점검25

설계 요령(계속)

양파 모양의 구조가 일반적양파 모양의 구조가 일반적

복잡한 모듈의 연결은 피함

과다한 깊이를 가진 구조도 피함

모듈의 영향권을 그 모듈의 하위에 둔다

<잘못된 예> <잘된 예>

변경된 모듈 변경된 모듈변경된 모듈

영향받는 모듈

변경된 모듈

영향받는 모듈

최은만, CSE 4039 소프트웨어 공학 26

사례사례: : 비디오비디오 대여점대여점(Level 0 (Level 0 변환분석변환분석))

최은만, CSE 4039 소프트웨어 공학 27

사례사례: : 비디오비디오 대여점대여점(Level 1 (Level 1 변환분석변환분석))

최은만, CSE 4039 소프트웨어 공학 28

사례사례: : 비디오비디오 대여점대여점((시스템시스템 구조도구조도))

최은만, CSE 4039 소프트웨어 공학 29