LECTURE 8 설계원리와구조적설계 똑똑한사람은문제를해결한다. 그러나현명한사람은문제를예방한다. 최은만, CSE 4039 소프트웨어공학
읽기 교과서 4 장설계 참고문헌 Code Complete( 제 2판 ), 스티브맥코넬, 정보문화사, 2005. Chapter 5, pp129-196. 최은만, CSE 4039 소프트웨어공학 2
설게 (Design) 이란? 최은만, CSE 4039 소프트웨어공학 3
소프트웨어설계 아키텍처는상위수준의설계이며시스템의컴포넌트와이들의커넥션에초점 상세설계는코드에더가까운수준, 즉객체, 클래스, 알고리즘, 변수들을관찰 상위수준의설계와하위수준의설계작업의차이가애매할수도있음. 동일한원리가적용됨 최은만, CSE 4039 소프트웨어공학 4
좋은설계는? 설계를움직이는힘은복잡성콘트롤 모든소프트웨어설계기술의목표는복잡한문제를단순한조각으로자르는것 성능을높이는열쇠는복잡한예외처리가아니라간결함 최은만, CSE 4039 소프트웨어공학 5
설계의목표 7 가지바람직한설계목표 1. 복잡성최소 2. 느슨한결합 (Loose coupling) 3. 강한응집력 (Strong cohesion) 4. 확장성 5. 재사용성 6. 유지보수성 7. 유연성 최은만, CSE 4039 소프트웨어공학 6
추상화의원리 복잡한문제 추상화 개념 ( 현실 ) 소프트웨어의구조를이루는계층의파악 기능추상화 입력자료를출력자료로변환하는과정을추상화 부프로그램의시그네처와기능만생각 자료추상화 자료와기능을묶어서생각 제어추상화 외부이벤트에대한반응을추상화 최은만, CSE 4039 소프트웨어공학 7
정보은닉 (information o hiding) 각모듈의자세한처리내용이시스템의다른부분으로부터감추어져있어야 각모듈이다른모듈에구애받지않고설계 인터페이스가모듈안의구체적사항을최소로반영 전역변수가없어야 모듈단위의수정, 시험, 유지보수에큰장점 모듈설계평가에기초 최은만, CSE 4039 소프트웨어공학 8
단계적분해 기능을최대한으로떼어내어생각 점차적으로구체화 상세한내역 ( 알고리즘, 자료구조 ) 는가능한뒤로미룸 추상화 I 추상화 II 추상화 III CAD system CAD softrware tasks: procedure: 2-D drawing creation; user interaction task; repeat util <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; curcle: cricle drawing task;... 최은만, CSE 4039 소프트웨어공학 9
모듈화 4 1 5 2 3 6 0 1 4 2 5 1 4 3 6 2 3 5 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 소프트웨어공학 11
구조적설계 ( 계속 ) 시스템템구구조도 (structure chart) 의도출 시스템을모듈단위로분할 모듈의계층적구성 모듈사이의입출력인터페이스 모듈의이름과기능 S1 S2 S3 S4 S5 S1 S4 S5 S4 S3 S1 S5 S2 Structure #1 Structure #2 S2 S3 Structure #3 최은만, CSE 4039 소프트웨어공학 12
시스템구조도 표준기호 한모듈이모듈을호출 자료흐름 ( 변수나자료구조 ) 제어흐름 ( 플래그 ) 모듈 반복선택주석달기 comment Module 최은만, CSE 4039 소프트웨어공학 13
구조적설계 ( 계속 ) 예 a Main b c A B C f a f f W X Y Z 기타사용되는기호 미리정의된모듈 ( 라이브러리 ) 입출력모듈 최은만, CSE 4039 소프트웨어공학 14
변환분석 자료의변환흐름 (transformation flow) 입력흐름 출력흐름 변환센터 변환분석은자료흐름도를입력흐름, 변환센터, 출력흐름으로분할하는과정 입력흐름 : 입력을준비하는단계 ( 입력, 검증...) 출력흐름 : 출력을위하여준비되는단계 ( 포매팅, 출력 ) 변환센터 : 실제자료가변환 최은만, CSE 4039 소프트웨어공학 15
변환분석방법 1 자료흐름도에서입력자료흐름과출력자료흐름을파악 2 중앙변환부분을식별 3 변환중심부를축으로최상위구조 (first-cut) 작성 4 각모듈의하위구조도같은방법으로분석 5 설계기준을적용하여수정, 최적화 예 : 화일안에포함된단어의개수를계산 화일이름읽음 입력흐름 화일이름화일이름검증검증된화일이름 단어개수계산 단어개수 단어개수편집 출력흐름 단어개수출력 변환센터 16 최은만, CSE 4039 소프트웨어공학
변환분석 ( 계속 ) 시스템구조도 단어계산 검증된화일이름화일이름상태단어개수 화일이름 단어개수 입력, 검증 계산 프로그램의구조 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
구독자관리시스템 1 자료흐름의요소를분해 입력자료흐름, 출력자료흐름, 변환센터 구독자레코드준비 구독자레코드 출력흐름 입력흐름 만료일추출 만료일 새만료일계산 새만료일 구독자레코드변경 구독갱신기간입력 갱신기간 변환센터 레코드를화일에출력 변경레코드 최은만, CSE 4039 소프트웨어공학 18
구독자관리시스템 ( 계속 ) 구조도의최상위층작성 구독갱신시스템 구조도를상세화 구독갱신시스템 갱신정보추출 구독갱신 갱신레코드저장 갱신정보추출 구독갱신 갱신레코드저장 새구독기간입력 구독만료일준비 구독자레코드변경 레코드화일로출력 구독레코드추출 구독만료일추출 최은만, CSE 4039 소프트웨어공학 19
처리분석 처리 (transaction) 자료흐름도의한프로세스에서여러개의자료흐름이유출되는것 처리흐름 처리센터 T 처리경로 (action path) 방법 1 자료흐름도에서처리센터를식별 2 처리모듈을중심으로구조도작성 3 구조도를상세화 - 하위구조도를작성 최은만, CSE 4039 소프트웨어공학 20
설계평가기준 모듈의크기 소규모시스템 : 함수, 서브루틴 대규모시스템 : 독립프로그램 ( 하나의수행화일 ) 모듈응집력 (module cohesion) 모듈안의요소들이강한응집력을갖도록설계 모듈결합도 (module coupling) 다른모듈과의결합도가약한모듈이되도록설계 설계요령 (design heuristics) 최은만, CSE 4039 소프트웨어공학 21
모듈응집력 모듈안의구성요소들이공동의목적을달성하기위하여관련되어있는정도 목표 한모듈이단일기능을갖도록설계 < 예 > finishup : 최종보고서를출력하고, 계산결과를디스크에저장 응집력의단계 1 기능적 (functional) 모듈의기능이한문장으로떨어짐 < 예 > 판매세금계산 2 순차적 (sequential) 작업의결과가다른작업에입력 < 예 > 거래를읽고마스터화일을변경 22 최은만, CSE 4039 소프트웨어공학
모듈응집력 ( 계속 ) 3 교환적 (communicational) 동일한입력과출력을사용하는작업의모임 4 절차적 (procedural) < 예 > 출력화일을출력하고저장 같은범주에속하는일들이순서적으로수행 < 예 > restart-rtn : 총계를출력하고, 화면을지우고메뉴를뿌리고, 메뉴선택을받음 5 시간적 (temporal) 프로그램초기화 6 논리적 (logical) 유사한성격의작업을한모듈로모음 7 우연적 (coincidential) 아무관련없는작업을한모듈에모음 최은만, CSE 4039 소프트웨어공학 23
모듈결합도 모듈간의관련정도 설계목표 모듈간의결합도가낮게설계 결합의단계 1 자료결합 (data coupling) 모듈들이간단한변수를파라메터로교환 2 스탬프결합 (stamp coupling) 모듈사이에 nonglobal 자료구조를교환 3 제어결합 (control coupling) 제어용신호 (flag) 를주고받음 4 공통결합도 (common coupling) global variable 을사용 5 내용결합 (content coupling) 한모듈이다른모듈내의값을수정 최은만, CSE 4039 소프트웨어공학 24
설계요령 (design heuristics) first-cut( 최상위 ) 모듈의결합은줄이고응집은높이도록최대한노력 high fan-out 은줄이도록노력... redundancy 와 complexity 를줄이기위하여모듈의 인터페이스를점검 최은만, CSE 4039 소프트웨어공학 25
설계요령 ( 계속 ) 양파모양의구조가일반적 복잡한모듈의연결은피함 과다한깊이를가진구조도피함 모듈의영향권을그모듈의하위에둔다 < 잘못된예 > < 잘된예 > 변경된모듈 변경된모듈 영향받는모듈 최은만, CSE 4039 소프트웨어공학 26
사례 : 비디오대여점 (Level 0 변환분석 ) 최은만, CSE 4039 소프트웨어공학 27
사례 : 비디오대여점 (Level 1 변환분석 ) 최은만, CSE 4039 소프트웨어공학 28
사례 : 비디오대여점 ( 시스템구조도 ) 최은만, CSE 4039 소프트웨어공학 29