자료구조 설계

Download Report

Transcript 자료구조 설계

소프트웨어 공학 응용 및 실습
제 4 장 : 구조 설계
이형원
강릉대학교 컴퓨터과학과
1
학습 내용
 구조 설계와 상세 설계
 설계 원리
 구조적 설계 기법
변환 분석
처리 분석
자료구조 설계
데이타베이스 설계
구조 설계서
2
설계
모듈 구조 설계
자료 구조 설계
프로그램(알고리즘) 설계
사용자 인터페이스 설계
분 석
설계
구현
사용자 요구사항
제약조건
구축 시스템
시스템의
본질정의
시스템
구축
구현대안
설정
분석모형
설계모형
3
구조 설계
세부 작업
• 소프트웨어를 이루는 모듈들을 정의
• 모듈 사이의 관계(인터페이스)를 정립
• 자료 구조 및 데이타베이스 설계
결과
• 시스템 구조도(Structure Chart)
• 외부 화일 및 DB 설계도(레코드 layout, ERD)
4
상세 설계
세부 작업
• 모듈 내부 설계(모듈 안의 알고리즘, 모듈 안의
지역 변수)
• 사용자 인터페이스(메뉴, 입력 양식, 출력 양식)
• 자료구조 설계(구조형 및 배열)
결과
• 프로그램 사양서
• 화면 및 출력물 레이아웃
5
설계 방법론
구조적 설계(structured design)
• 시스템을 기능적 관점에서 다룸 : SA의 원리를 그대로
• 하향적 세분화
• Yourdon/Constantine
객체지향 설계(object-oriented design)
•
•
•
•
자료와 자료에 적용될 기능을 함께 추상화
객체 : 자료 + 기능
프로그램은 객체들의 모임
Yourdon, Sheller/Meller, Rumbaugh, Booch...
자료구조 중심 설계
• 입출력 자료의 구조 파악으로 소프트웨어 구조를 추출
6
• Jackson, Warnier-Orr
설계 원리: 추상화
실세계의 복잡한 문제로부터 불필요한 사항 배제
설계로의 적용: SW의 구조를 이루는 계층 및
요소의 파악
• 기능 추상화
입력 자료를 출력 자료로 변환하는 과정을 추상화
부 프로그램의 기능만 생각(매개 변수화)
• 자료 추상화
자료와 기능을 묶어서 생각
자료의 표현과 기능의 구현은 배제
• 제어 추상화
외부 이벤트에 대한 반응을 추상화
7
설계 원리: 정보 은닉
각 모듈의 자세한 처리 내용이 시스템의 다른
부분으로부터 은폐되어야 함
• 다른 모듈과의 교류는 잘 정의된 인터페이스를 사용
• 인터페이스가 모듈 안의 구체적 사항을 최소로 반영
• 가능한 한 전역변수가 없어야 함
장점
• 설계 시 한 모듈이 변경되더라도 다른 모듈에 영향을
주지 않음
• 모듈화의 기준
• 모듈 구현, 수정, 시험, 유지 보수의 독립성
• 모듈의 이해도를 높임
8
설계 원리: 단계적 분해
문제를 상위 개념부터 구체적인 단계로 하향식 분할
상세 내역(알고리즘, 자료구조)는 가능한 뒤로 미룸
장점: 일관성 유지
추상화 I
CAD system
추상화 II
추상화 III
CAD software tasks:
procedure: 2-D drawing creation;
user interaction task;
repeat until <drawing creation task terminates>
2-D drawing creation task;
do while <digitizer interaction occurs>
graphics display task;
digitizer interface task;
drawing file management task;
determine drawing request;
end.
line: line drawing task;
circle: circle drawing task;
.
.
.
9
설계 원리: 모듈화
0
1
2
1
2
5
3
6
4
3
문제영역
4
시스템 분해
1
2
4
3
시스템 구조
 모듈: 함수/부프로그램(의 집합), ADT, 독립 프로그램, ….
 모듈의 특성: 이름, 분리 컴파일, 다른 모듈을(에서) 사용
 적합한 모듈 규모
• LOC : 30줄 이하(Weinberg), 50줄(한 페이지/화면) 이하(IBM)
• 모듈 관련 문서 양
• 10줄 이하: 수행 속도, 문서화, 테스트에 악영향
 모듈의 응집도는 높게, 모듈 간 결합도는 약하게
10
모듈 응집도(Cohesion)
모듈 안의 구성 요소들이 공동의 목적을 달성하기
위하여 관련되어 있는 정도
목 표 : 한 모듈이 단일 기능을 갖도록 설계
응집도의 판별
• 모듈의 기능을 짧은 문장 하나로 정의
강한 응집도 모듈 : 하나의 동사 + 목적어
약한 응집도 모듈 : 중문, 복문
• 예) finishup : 최종 보고서를 출력하고, 계산 결과를
디스크에 저장
11
모듈 응집도(계속)
① 기능적(functional): 모듈의 기능이 한 문장으로 떨어짐
<예> 판매세금 계산
② 순차적(sequential): 모듈 내 소작업의 결과가 다른 소작업의 입력
<예> 거래를 읽고 마스터 화일을 변경
③ 교환적(communicational): 같은 입력/출력을 사용하는 작업 모임
<예> 출력 화일을 출력하고 저장
④ 절차적(procedural): 같은 범주에 속하는 일들이 순서적으로 수행
<예> restart-RTN : 총계를 출력하고, 화면을 지우고 메뉴를 뿌림
⑤ 시간적(temporal): 특정 시간에 처리되는 작업들을 수행
<예> 프로그램 초기화 모듈, 프로그램 종료 모듈
⑥ 논리적(logical): 유사한 성격의 작업을 한 모듈로 모음
<예> process-data-with-tag
⑦ 우연적(coincidential): 아무 관련 없는 작업을 한 모듈에 모음
12
모듈 결합도(Coupling)
① 자료 결합(data coupling): 필요한 자료만을 인자로 사용
② 스탬프 결합(stamp coupling): 비단순 자료 구조가 인자로
사용 Q. 자료 구조 전부가 필요하면 ?
③ 제어 결합(control coupling): 제어용 정보(flag, tag)를 주고
받음 Q. Why not so good ?
④ 공통 결합(common coupling): global variable을 사용
⑤ 내용 결합(content coupling): 한 모듈이 다른 모듈 내의
값을 수정 <예> 어셈블리 프로그래밍, 다른 모듈의
중간으로 분기
13
구조적 설계
시스템을 이루는 모듈의 구조를 파악하여
구조도로 표현
모듈 분해의 계층적, 인터페이스 지향적 접근
Functional
Decomposition
+
Design
Criterion
+
(cohesion, coupling)
Design
Heuristics
(설계 요령)
자료 흐름도  구조도
• source-transform-sink: 변환 분석(transform analysis)
• transaction pattern: 처리 분석(transaction analysis)14
구조도: 기능 분해
구조도(structure chart) 생성
•
•
•
•
S1
시스템을 모듈 단위로 분할
모듈의 계층적 구성
모듈 사이의 입출력 인터페이스
모듈의 이름과 기능
S2
S3
S4
S5
S1
S4
S3
Structure #1
S4
S5
S1
S2
S5
Structure #2
S2
S3
Structure #3
15
구조도: 기능 분해(계속)
 표준 기호
한 모듈이 모듈을 호출
자료 흐름(변수나 자료구조)
제어 흐름(플래그)
모듈
반 복
선택
주석달기
comment
Module
16
구조도: 기능 분해(계속)
예
Main
c, d
a
b
B
A
a
f
W
C
f
X
f
Y
Z
기타 사용되는 기호
미리 정의된 모듈(라이브러리)
입출력 모듈
17
구조도: 설계 요령
모듈의 결합은 줄이고 응집은 높이도록 노력
양파 모양의 구조가 이상적
• 과다한 깊이를 가진 구조: 최하위 모듈까지의 통신
overhead가 큼
• high fan-out은 줄임(7 ±2개가 적당)
......
18
구조도: 설계 요령(계속)
redundancy와 complexity를 줄이기 위하여
모듈의 인터페이스를 점검
모듈의 영향권을 그 모듈의 하위에 둔다
<잘못된 예>
변경된 모듈
<잘된 예>
변경된 모듈
영향받는 모듈
19
변환 분석
변환 분석: DFD를 입력흐름/출력흐름/변환센터로
분할
• 입력 흐름: 입력을 준비하는 단계(입력, 검증...)
• 출력 흐름: 출력을 위하여 준비되는 단계(포매팅, 출력)
• 변환 센터: 논리적 처리(실제 자료가 변환)
절차
① DFD에서 입력 자료 흐름과 출력 자료 흐름을 파악
② 중앙 변환 부분을 식별
③ 변환 중심부를 축으로 최상위 구조도 작성
④ 각 모듈의 하위 구조를 같은 방법으로 변환 분석(factoring)
⑤ 설계 기준을 적용하여 수정, 최적화
20
변환 분석: 예) Word Count
화일이름
화일이름
읽음
화일이름
검증
입력 흐름
단어개수
화일이름
상태
화일이름
입력,검증
단어개수
편집
단어개수
검증된
단어개수
계산
화일이름
단어 계산
검증된
화일이름
변환 센터
단어개수
출력
단어개수
단어개수
계산
단어 개수
편집,출력
출력 흐름
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, int word_count)
{…}
21
display(int word_count) { … }
변환 분석: 예)구독자 관리
① 자료 흐름의 요소를 분해
구독자
레코드
준비
출력 흐름
구독자 레코드
만료일
추출
만료일
입력 흐름
새
만료일
계산
새 만료일
구독자
레코드
변경
변경 레코드
갱신기간
구독
갱신기간
입력
변환 센터
레코드를
화일에
출력
22
변환 분석: 예)구독자 관리(계속)
구조도의 최상위층 작성
 구조도를 상세화
구독 갱신
시스템
갱신 정보
추출
구독 갱신 갱신레코드
저장
구독 갱신
시스템
갱신 정보
추출
새구독
기간 입력
구독 갱신
구독만료일
준비
구독레코드
추출
구독만료일
추출
갱신레코드
저장
구독자
레코드
레코드변경 화일로 출력
23
처리 분석
처리(transaction) : DFD에서 여러 개의 작업
중 하나를 선택하게 하는 프로세스
처리흐름
처리센터
T
처리 경로(action path)
방법
① 자료 흐름도에서 처리 센터를 식별
② 처리 모듈을 중심으로 구조도 작성
③ 구조도를 상세화하여 하위 구조도를 작성
24
자료구조 설계: 파일
외부 파일(DFD의 자료 저장소)에 대한 설계
• 자료설계표(자료 사전에 정의된 레코드의 항목)
화일 이름: 인사기본화일(INSA_BASIC.DAT)
화일 종류: 인덱스된 순차 화일
인덱스: primary -> employee_no secondary->name
자료 이름
자료형
자릿수
employee_no
정수형
4
name
문자형
10
sex
문자형
1
jumin_no
정수형
16
department
문자형
10
position
문자형
10
pay_grade
정수형
2
phone_office
문자형
15
phone_home
문자형
15
address
문자형
40
비
고
25
자료구조 설계: 데이타베이스
데이터 모델링: ERD(Entity Relationship Diagram)
• 개체(Entity)
모델링에 필요한 사물
자료 사전에 정의
• 속성(Attribute)
개체에 대한 관심있는 특성
derived attribute는 고려하지 않음
• 개체간 관계(Relationship)
관계를 나타내는 명확한 의미를 이름으로 사용
1:1, 1:N, 1:0 or 1, 1:0 or more, M:N(분할)
• 식별자(key)
개체를 구별할 수 있는 유일한 값을 갖는 속성
26
구조 설계서
1. 개요
1.1 시스템의 목표
1.2 하드웨어, 소프트웨어
1.3 소프트웨어의 주요 기능
1.4 설계상 제약 사항
1.5 참조된 개발 문서
2. 시스템 구조
2.1 시스템 구조 개요
2.2 구조도
2.3 자료사전
3. 모듈 설계(각 모듈에 대한)
3.1 모듈 이름
3.2 모듈 형
3.3 인터페이스
3.4 오류 메시지
3.5 사용하는 화일
3.6 호출하는 모듈
3.7 기능 설명
4. 화일 구조 또는 데이타베이스 설계
4.1 외부 화일(데이타베이스)의 논리적 구조
4.2 공유 자료
4.3 화일 접근 방법(데이타베이스 관리체제)
5. 요구 분석 참조표
6. 제약사항(통합 테스트에 필요한 절차/방법)
7. 참고사항
참고문헌
부록
27