소프트웨어설계 Software Engineering C2014 Kim, Haeng Kon
우리는설계를서둘러끝냄으로써 개발에많은시간을배려하려고하지만, 그개발이란서둘렀던설계상의문제를해결하는데보다많은시간을낭비하고만다. - G.Myers, 1978 2
소프트웨어설계개념 (1) 소프트웨어설계 요구사항분석단계에서규명된필수기능들의구체적인구현방법을명시하는단계 장치, 프로세스그리고시스템을명확하고자세하게정의하며실질적으로실현가능하도록관련된기술과원칙을적용하는과정 소프트웨어에요구되는기능과성능조건들을만족하는소프트웨어의내부기능, 구조및동적행위들을모델링하여표현, 분석, 검증하는과정혹은그러한과정의산출물을의미 목적 : 무엇을 (What) 으로부터 어떻게 (How) 로관점이바뀌며구현할소프트웨어의청사진을만드는것 3
소프트웨어설계개념 (2) 설계원칙 소프트웨어설계는변경이용이하도록구조화되어야함 하나의함수안에는특정기능을수행하는데필요한자료만을사용하도록규제할것 독립적이고기능적인특성을지닌모듈단위로분할설계 계층적구조를가져야함 4
소프트웨어설계대상 (1) 1) 구조와행위모델링 구조모델링 : 소프트웨어를구성하는컴포넌트들의유형, 인터페이스, 내부설계구조및이들의상호연결구조를모델링 행위모델링 : 소프트웨어의구성요소들의기능들과이들이언제, 어떠한순서로기능을수행하고상호작용하는지를모델링 5
소프트웨어설계대상 (2) 소프트웨어설계모델의구성 구조모델 시스템구조컴포넌트구조 구성요소 ( 컴포넌트유형 ) 컴포넌트연결구조인터페이스데이터구조 설계모델 알고리즘구조 행위모델 시스템행위컴포넌트행위 시스템기능 ( 입출력 ) 컴포넌트제어계산실행제어상호작용 6
소프트웨어설계대상 (3) 2) 소프트웨어설계모델의정적요소와동적요소 7
소프트웨어설계유형 자료구조설계 (Data structure design) 요구분석단계에서생성된정보를바탕으로소프트웨어를구현하는데필요한자료구조로변환하는과정 아키텍처설계 (Architecture design) 예비설계또는상위수준설계 소프트웨어시스템의전체구조를기술 소프트웨어를구성하는컴포넌트들간의관계를정의 인터페이스설계 (Interface design) 소프트웨어와상호작용하는컴퓨터시스템, 사용자등이어떻게통신하는지를기술 프로시저설계 (Procedure design) 알고리즘설계 프로그램아키텍처의컴포넌트를소프트웨어컴포넌트의프로시저서술로변환하는과정 8
설계방법 구조적설계 (structured design) 소프트웨어에요구된기능, 자료처리과정, 알고리즘등을중심으로시스템을분해하여설계하는방식 ( 기능적관점 ) 시스템의각모듈은최상위기능에서하위계층으로하향적세분화 Yourdon/Coad 자료구조중심설계 입출력자료의구조를파악함으로써소프트웨어구조를추출하는방식 Jackson, Warnier-Orr 객체지향설계 (object-oriented design) 자료와자료에적용될기능을함께추상화하는개념 ( 객체 = 자료 + 기능 ) 시스템은객체의모임 Yourdon, Sheller/Meller, Rumbaugh, Booch... 9
설계시고려사항들 모듈 (Module) 독립적으로처리할수있는구별단위 (Identifiable unit), 그단위들은하나이상의프로시저들을포함. 모듈의개념사용 모듈은소프트웨어에꼭나타남 모듈분할의바람직한방법의특징 설계의질을측정시사용 유지보수와재사용용이 영향을주는설계형태 추상화 (Abstraction) 모듈화 (Modularity) 정보은폐 (Information Hiding) 복잡도 (Complexity) 시스템구조 (System Structure) 10
설계원칙 (design principles) 모듈화 (Modularity) 프로그램을작고독립적인단위로분할하여개발하는것 변경에의한영향을최소화 추상화 (Abstraction) 구체적인데이터의내부구조를외부에알리지않으면서데이터를사용하는데필요한함수만을알려주는기법 정보은닉 (Information hiding) 각모듈의자세한처리내용이시스템의다른부분에게감추어짐 단계적분해 (Stepwise refinement) 상위개념에서좀더상세화된하위개념으로구체화시키는과정 구조화 (Structure) 시스템을소프트웨어의구성요소인모듈의계층적구조형태로표현 11
모듈화 (Modularity) (1) 모듈화과정중고려해야할사항들 시스템을어떻게분해할것인가? 한모듈의규모는어느정도인가? 모듈의응집력 (cohesion) 은높게 모듈간의결합력 (coupling) 은약하게 결합도 : 모듈간의상호의존도 응집도 : 모듈내부의처리요소들간의기능적연관도 4 1 5 2 3 6 1 4 2 5 3 6 문제영역 시스템분해 C(p1) C(p2) E(p1) E(p2) E(p1+p2) > E(p1) + E(p2) 12
모듈화 (Modularity) (2) 모듈 (Module) 소프트웨어구조를이루는기본단위 서브시스템 (subsystem), 서브루틴 (subroutine), 작업단위 (work unit) 시스템을기능단위로구분하며독립적으로컴파일되고하나의입구와하나의출구를가짐 모듈당비용과접속관계소요비용 장점 모듈의수가증가하면전체개발비용은감소하지만인터페이스비용증가 최적의모듈개수결정이중요 복잡도감소, 수정용이, 구현용이 확장성, 융통성, 유지보수성, 재사용성, 경제성 13
추상화 (Abstraction) 객체의속성중불필요한부분은생략하거나숨기고가장필수적인속성만으로주어진객체를묘사하는것 전체적이고포괄적인개념으로부터차례로자세하게세분화함으로써구체화하는방법 유형 기능추상화 (Functional Abstraction) 입력자료를출력자료로변환하는과정을추상화하는방법 자료추상화 (Data Abstraction) 자료와자료에적용가능한연산을함께정의함으로써자료객체를구성하는방법 ( 객체 = 자료 + 연산 ) 제어추상화 (Control Abstraction) 제어의정확한메커니즘을정의하지않고원하는효과를정의하는데이용 14
정보은닉 (Information hiding) 모듈간의불필요한상호작용을제거하기위해최소한의정보만보여주고, 각모듈의자세한처리내용은시스템의다른부분으로부터감추어져접근되지않도록하는것 각모듈이다른모듈에독립적으로설계가능 캡슐화 (Encapsulation) 를통해모듈의추상화와독립성향상 모듈단위의수정, 시험, 유지보수에큰장점 모듈설계평가에기초 15
단계적분해 (Stepwise refinement) 단계적인프로그램개발 시스템을상위레벨에서좀더구체화된하위레벨로분할하는하향식기법 (Wirth 에의해최초로제시 ) 활동과정 문제를기본단위로분해 독립된문제로구별 가능한상세한내역 ( 알고리즘, 자료구조 ) 에관한결정은뒤로연기 계속점증적으로구체화작업을진행 단계적분해의주요이점 하나의문제는관리가능한작은단위로분리 임의의특정시간에다루어야하는상세내역의양은최소화 설계자의사고과정은적절한시기에적절한관점으로모아짐 16
소프트웨어구조도 (Structure) 소프트웨어구조도 시스템이어떤모듈로구성되어있으며모듈사이의관계가어떠한가를표현 각모듈은명칭을가지며, 다른모듈을호출하거나호출될수있음 Fan-In 임의의한모듈을호출하는상위모듈의수 얼마나많은모듈이주어진모듈을호출하는가를나타냄 Fan-Out 임의의한모듈에의해호출되는모듈의수 17
모듈의독립성 (1)- 결합도 결합도 (Coupling) 모듈간의상호의존도또는연관관계 목표 : 가능한낮은결합력을갖도록설계 장점 파급효과 (Ripple Effect) 의최소화가능 모듈의독립적유지보수및변경가능 특정모듈의내부상황을자세히알지못해도그와관련된다른모듈의효과적취급가능 1 자료결합도 (Data coupling) 2 스탬프결합도 (Stamp coupling) 3 제어결합도 (Control coupling) 4 공통결합도 (Common coupling) 5 내용결합도 (Content coupling) 약한결합 강한결합 18
모듈의독립성 (2)- 결합도 1) Data Coupling( 자료결합도 ) 모듈들이간단한변수를파라메타로교환하는경우 2) Stamp Coupling( 스탬프결합도 ) 두모듈이동일한자료구조를조회하는경우 3) Control Coupling( 제어결합도 ) 제어신호를이용하여통신하는경우 4) Common Coupling( 공통결합도 ) 두모듈이동일한총체적자료영역 (global data area) 을공동으로조회하는경우 5) Content Coupling( 내용결합도 ) 한모듈이다른모듈의내부기능및내부자료를조회하는경우 한모듈이다른모듈내의값을수정할수있는상태 19
모듈의독립성 (3)- 응집도 응집도 (Cohesion) 한모듈내부의처리요소들간의기능적연관도 모듈안의구성요소들이공동의목적을달성하기위하여관련되어있는정도 목표 : 가능한강한응집도를갖게설계 한모듈이단일기능을갖도록설계 1 기능적응집성 (Functional Cohesion) 2 순차적응집도 (Sequential Cohesion) 3 통신적응집성 (Communicational Cohesion) 4 절차적응집성 (Procedural Cohesion) 5 일시적응집성 (Temporal Cohesion) 6 논리적응집성 (Logical Cohesion) 7 우연적응집성 (Coincidental Cohesion) 강한응집도 약한응집도 20
모듈의독립성 (4)- 응집도 1) 기능적응집성 (Functional Cohesion) 한모듈이한가지기능만을수행하는경우 ex) 제곱근계산, 판매세금계산 2) 순차적응집성 (Sequence Cohesion) 한모듈내의소작업결과가작업의입력이된경우 ex) 보험료계산하고분기별지출액산출 3) 통신적응집성 (Communication Cohesion) 동일한입력과출력자료를이용하여서로다른기능을수행 ex) 출력파일을출력하고저장 4) 절차적응집성 (Procedural Cohesion) 모듈안의작업들이큰테두리안에서는같은작업에속하고입출력을공유하지만순서에따라수행될필요가있는경우 ex) 재수행처리 : 합계를출력하고화면을지우고메뉴를보여주고메뉴선택을받아들임 21
모듈의독립성 (5)- 응집도 5) 일시적응집성 (Temporal Cohesion) 모듈의기능요소들이시간에의해연결되는단위처리에포함된경우 ex) 프로그램초기화작업 6) 논리적응집성 (Logical Cohesion) 유사한성격의작업을하나의모듈로구성하는경우 ex) 입출력처리 7) 우연적응집성 (Coincidential Cohesion) 아무관계없는요소들을하나의모듈로구성하는경우 ex) 혼합기능수행 22
모듈의독립성 (6) 응집성구분흐름도 모듈이한가지기능만을수행하는가? 기능적응집성 자료모듈내의작업이무엇과관계있는가? 제어신호자료또는제어신호와무관 처리순서가중요한가? 처리순서가중요한가? 모듈내의작업이동일한범주에속하는가? Yes No Yes No Yes No 순차적응집성자료공유응집성 ( 통신적 ) 절차적응집성일시적응집성논리적응집성우연적응집성 23
소프트웨어구조도 (1) 소프트웨어구조도 시스템이어떤모듈로구성되어있으며모듈사이의관계가어떠한가를표현 각모듈에의해수행되는기능도기술 각모듈은명칭을가지며, 다른모듈을호출 자료흐름도를구조도로변환하는전략 변환흐름전략 (transition flow) 거래흐름전략 (transaction flow) 24
소프트웨어구조도 (2) 표준기호 모듈의호출 자료흐름 ( 변수 / 자료구조 ) 반복 주석달기 comment 제어흐름 Module 모듈 선택 미리정의된모듈 ( 라이브러리 ) 입출력모듈 25
소프트웨어구조도 (3) 변환흐름전략 (transition flow) 일반적인자료의흐름 과정 입력흐름 변환흐름 출력흐름 DFD에서입력자료와출력자료흐름을파악 중심기능인변환부분식별 시스템의필수적인기능을내포 입출력의특정구현과는독립적 최상위구조도작성 분할된각부분을같은방법으로분할 구조도는한단계씩추가 26
소프트웨어구조도 (4) 변환흐름을가진자료흐름도 27
소프트웨어구조도 (5) 변환흐름에의해유도된구조도 28
소프트웨어구조도 (6) 거래흐름전략 (transaction flow) 자료흐름도의한프로세스에서여러개의자료흐름이유출되는경우에사용 거래 : 어떤동작이나또는연속된동작을발생, 유발또는시작시키는어떤자료요소, 제어, 신호, 사건또는상태의변화등 과정 DFD 에서처리센터식별 처리모듈을중심으로구조도작성 구조도상세화 하위구조도작성 29
소프트웨어구조도 (7) 거래흐름에의해유도된구조도 거래흐름을가진 DFD 30
모듈명세서 (1) 모듈명세서 Module 내부에대한명세 시스템구조도에표현되지않은상세알고리즘기술 알고리즘선택시주의사항 정확성 : 알고리즘은기본적으로정확해야함 효율성 : 알고리즘의수행에소요되는컴퓨터자원의양 ( 기억장치의소요량과수행시간 ) 적합성 : 알고리즘은목표시스템의 h/w 와 s/w 에적합 31
모듈명세서 (2) 모듈명세화기법 흐름도 (flow chart) N-S 도표 (Nassi-Schneiderman Chart) 의사코드 (pseudo code) 의사결정표 (decision table) 의사결정도 (decision diagram) PDL(Program Design Language) 상태천이도 (state transition diagram) 행위도 (action diagram) 32
모듈명세서 (3) 모듈총자산구함 ( 고객구좌표, 표질이 : 총자산 ) /* 구좌번호에의해분류된은행고객집단의순자산총액구함 */ /* 고객구좌표에는합계될모든고객의인증된구좌번호가들어있음 */ /* 표길이는고객수임 */ /* 총자산은모든고객의순자산임 */ 총자산 = 0 고객번호 = 1 고객번호 > 표길이까지반복고객구좌번호 := 고객구좌표 ( 고객번호 ). 자산없음 ( 고객구좌번호 : 차변, 대변 ) 호출총자산 +=( 대변 - 차변 ) 고객번호 +:=1 반복끝끝총자산구함. 33
자료구조지향설계 입출력자료의구조파악으로소프트웨어구조를추출 자료는실세계에존재하는각종실체를반영하며특정한처리와는독립적인특성 변화되기쉬운처리보다는상대적으로안정적인자료를중심으로소프트웨어설계 변화에크게영향을받지않는시스템설계가능 구현방법 JSP(Jackson system of Programming) 설계법 Warnier 설계법 34
JSP 설계법 (1) JSP : Jackson System of Programming 프로그램이다루는입출력자료의구조를설계함으로써프로그램의제어구조를유도하는방법 입력자료구조와출력자료구조를각각설계한후서로간의대응관계가바로프로그램의구조 입력자료 대 응 프로그램구조 대 응 출력자료 35
JSP 설계법 (2)- 설계순서 자료단계 (Data Step) JSP 구조도를사용. 입력트리 / 출력트리설계 프로그램단계 (Program Step) JSP tree 구조도설계 연산단계 (Operation Step) 프로그래밍에필요한명령을열거 텍스트단계 (Text Step) 프로그램의알고리즘을명세언어로표현 36
JSP 설계법 (3)-JSP 트리구조도 37
JSP 설계법 (4)- 설계예 요구사항 입출력연관도 반별, 학생별로기록된성적파일을읽고성적보고서를작성 하라. 성적보고서에는학생별성적의출력이외에, 반별평균및 총평균도출력한다. 또한, 성적 파일의데이터에는합격자와불 합격자가섞여있다. 38
JSP 설계법 (5)- 설계예 자료단계 입력트리 출력트리 39
JSP 설계법 (6)- 설계예 프로그램단계 입 / 출력트리의대응 프로그램트리 40
JSP 설계법 (7)- 설계예 연산단계 1) 성적보고서 file을출력 file로개방 2) 성적보고서 file의폐쇄 3) 성적보고서의제목출력 4) 성적보고서의학반명출력 5) 성적보고서의명세 ( 합격자 ) 출력 6) 성적보고서의명세 ( 불합격자 ) 출력 7) 성적보고서의반평균출력 8) 성적보고서의총평균출력 9) 모든합계변수초기화 10) 반별합계초기화 11) 과목별점수및인원수를반별합계에누적 12) 반별합계를총합계에누적 13) 비교를위한반코드를저장 14) 성적 file을입력 file로개방 15) 성적 file의폐쇄 16) 성적 file에서읽음 41
JSP 설계법 (8)- 설계예 Text 단계 42
Warnier 설계법 (1) 자료구조로부터프로그램구조를유도하는방법 프로그램의구조는취급하는자료의구조에의해결정 작업순서 출력자료구조의설계 출력 < 제 1 레벨 > < 제 2 레벨 > < 제 3 레벨 > 제목 (1 회 ) 반별 (1 회 ) 총평균 (1 회 ) 반명 (1 회 ) 성적 (1 회 ) 반평균 (1 회 ) 학번 성명 이름 국어 수학 영어 합격여부 ( 각 1 회 ) 43
Warnier 설계법 (2) 입력자료구조의설계 입력 반 (m 회 ) 성적 (n 회 ) 합격자 (0-1 회 ) 불합격자 (0-1 회 ) 프로그램구조도의설계 시작부 (1 회 ) 시작부 (1 회 ) 시작부 (1 회 ) 합격자출력 (0-1 회 ) 프로그램 반처리 성적처리 (n 회 ) + 불합격자출력 (0-1 회 ) 종료부 종료부 (1 회 ) 종료부 (1 회 ) 44
Warnier 설계법 (3) 구조적흐름의설계 절차명령의설계 45
Warnier 설계법 (4) Program 상세사양의설계 46
재사용성 여러수준에서고려될수있는재사용 응용시스템재사용 부시스템재사용 모듈혹은객체의재사용 함수재사용 Focus 재사용을이용한소프트웨어개발 재사용을위한소프트웨어개발 생성기에기반한재사용 응용시스템의재사용 47