중간고사
- 소프트웨어모델링이란 무엇인가 소프트웨어 모델링에서 UML이 갖는 의미에 대해 서술하라(자료와 개인적인 생각 / 논리적으로)
 - 교재 연습문제
 - 영문 그대로
 - 클래스 다이어그램으로 표시(아마 교재에 있는 예시로 나올듯)
 - 요구사항 분석 설계
 - 유스케이스 - 기능적 요구사항
 - 액티비티 - 워크 플로우
 - 소스코드 주고 클래스 다이어그램 만들기
 - 교재에 안나오는 기본적인
 - 교재에 안나옴(클래스 스코프 > 스태틱), (오브젝트or인스턴스 스코프), (메소드 스코프)
 - 클래스 스코프의 스태틱은 다이어그램에서 및줄을 긋는다
 - 추상클래스(상속표기법 extends), 인터페이스(implements, 클래스 다이어그램으로 어떻게 표시?: 상속 화살표에서 점선 화살표)
 - 자바 코드 실행결과(에러 발생할 수도?)
 - O/X 문제(모호한거 자세히 알아야 할듯)
 
프로젝트
- 자바 c++ 등 순수 객체지향적 언어로 된 프로젝트가 좋음
 - 상품성없어도 됨 비즈니스 필요없음
 
기말
- 브룩스 법칙: 프로젝트가 지체될때 인력을 더하는 것은 개발을 늦춘다
 
소프트웨어 모델링
- OMG에 따르면 : 코딩하기 전에 응용 소프트웨어를 설계하는 것
 - 개인적인 생각 :
 - 요구사항 - 유스케이스
 - 정적 모델 - 클래스
 - 동적 모델 -
 
UML
- 대표적 UML - 클래스, 유스케이스, 인터렉션(시퀸스, 커뮤니케이션), 스테이트 머신(스테이트 차트)
 - 대표적 UML 기반 방법론 - RUP(소프트웨어 개발 프로세스 프레임워크)
 - UML을 방법론 독립적이여서 객체지향적 분석 설계 기술이 필요함
 - COMET도 UML 기반 방법론(이 수업에서 주로 다룰 예정)
 
모델링 종류
- use case modeling: 기능적 요구사항을 다룸
 - static modeling: 시스템의 구조적인 뷰, 클래스와 그들 간의 관계
 - dynamic modeling: 시스템의 행동, 기능적 요구사항을 상호작용으로 실체화
 
소프트웨어 아키텍처
- 높은 수준 : 시스템을 서브 시스템로 분해
 - 낮은 수준 : 서브 시스템을 모듈이나 컴포넌트로 분해
 
UML 표기법
Use case Diagram
- use case diagram: 액터와 타원형의 유스케이스
 - « extends » : 조건부로 같이 발생하는 use case
 - « include » : 항상 같이 발생하는 use case
 
Class & Object
- class name, attribute(생략 가능), operation(생략 가능) 순으로 사각형으로 나누어 표기
 - 객체는 밑줄로, 클래스나 객체 이름 생략 가능
 
Class Diagram
- association(연관): 그냥 화살표(단어를 작성해 어떤 연관인지 표시 가능)
 - 상속: 비워진 삼각형 화살표
 - Aggregation: 비워진 마름모 화살표
 - Composition: 채워진 마름모 화살표
 - visibility: public(+), private(-), protected(#)
 
Communication Diagram(Interaction Diagram)
- UML 1.X에서는 collaboration diagram임
 - 액터가 객체에게 메시지를 전달하고 객체는 다른 객체에게 메시지 전달
 - 액터와 객체들은 선으로 연결되며, 객체는 세로로 배치됨
 - 화살표와 메시지 이름으로 무슨 메시지인지, 어떤 방향으로 전달되는지 표시
 - 메시지 이름 앞에 순서(1,2,…)를 표시하며, 조건을 표시가능
 
Sequence Diagram(Interaction Diagram)
- communication D를 90도 돌린것
 - 액터와 객체는 그 밑으로 점선이 그려짐
 - 메시지는 점선사이에 화살표로 표시됨
 - 시간은 밑으로 흐름
 
State Transition Diagram
- = state machine = state chart
 Event[condition]/Action(조건은 생략 가능)- Event: 다른 상태로 전환하게 하는 사건
 - Condition: Event가 발생할 때 상태가 전환될 조건
 - Action: 상태가 전환될 때 행동
 - 시작 상태는 검은 점으로 표시
 - 종료 상태는 검은 점을 둘러싼 원으로 표시
 - 상태는 둥근 사각형으로 표시하며, composite 상태와 sub 상태가 있음
 - 이벤트, 조건, 행동은 화살표 옆이나 상태안에 표시
 - composite 상태는 orthogonal region으로 분리 가능
 
Package
- 패키지를 model element(class, object, use case 등)를 모아놓은 것
 - 패키지는 사각형의 좌상단에 작은 사각형을 하나 더 붙인 폴더 모양
 - 패키지 이름을 표시
 
Concurrent Commnication Diagram
- Active Object(Concurrent Object): 내부 양옆에 세로선이 그려진 사각형 안에 «active object»로 표기
 - Passive Object: 사각형 안에 «passive object»로 표기
 - 액티브 오브젝트는 자신이 제어하는 스레드가 있음
 - Concurrent Applications: 액티브 오브젝트가 한개 이상 있음(스레드 다수, 비동기 메시지 가능)
 - Sequential Applications: 패시브 오브젝트만 있음(한개의 스레드)
 - 비동기 메시지는 결합도가 낮고, 동기 메시지는 높음
 - 비동기 메시지: 화살표 위에 «Asynchronous Message»와 name(argument list)으로 표시
 - 동기 메시지: 채워진 삼각형 화살표 위에 «Synchronous Message»와 name(argument list)으로 표시
 - reply 메시지: 점선 화살표 위에 «reply»로 표시
 - simple 메시지: 비동기 메시지와 동일하게 표시
 
Deployment Diagram
- physical nodes와 physical connections로 physical configuration를 표시
 
UML Extension Mechanisms
- Stereotypes: «entity»(DB관련 클래스), «control»(시스템 로직), «boundary»(시스템-외부 인터페이스)
 - Tagged Values: 클래스의 설명, 작성자, 생성일 등과 같은 부가 정보
 - Constraints: 속성 등에 제약사항을 넣을 수 있음
 
COMET
클래스 분류
엔티티: 데이터 중심(DB)바운더리: GUI 관련, input/output- user interaction
 - device I/O
 - proxy
 
컨트롤- timer
 - state dependant control
 - coordinator
 
어플리케이션 로직(COMET에서는 컨트롤 클래스에서 떨어져 나옴)- business logic
 - algorithm
 - service
 
특징
- UML 기반의 방법론
 - 유스 케이스 기반, 객체 지향
 - 요구사항, 분석, 설계 단계
 
과정
Requirement Modeling: 기능적 요구사항 서술, throwaway prototypeAnalysis Modeling: static, dynamic modelingDesgin Modeling: sw 아키텍처 설계Incremental Software Construction: 자세한 설계, 코딩, 유닛 테스트Incremental Software Integration: 각각의 use case의 통합 테스트(화이트 박스), 각 통합에서 Incremental Prototyping을 만듦, 만약 중대한 문제가 발생한다면 이전 단계 중 하나로 복귀System Testing: 시스템의 기능 테스트(블랙 박스)
COMET의 차별점
- Analysis: 문제의 분해
 - Design: 해결책을 합성
 
SysML
- system modeling
 
유스 케이스 모델링
requirement > analysis > design
기능적 요구사항 vs 비기능적 요구사항
- 기능적 요구사항: 시스템의 기능
 - 비기능적 요구사항: 시스템의 성능, 품질
 - 기능적 요구사항 설명이 main
 - 비기능적 요구사항을 서술식으로 보충 설명 가능
 
use-case 확장
- « extends » : 조건부로 같이 발생하는 use case
 - « include » : 항상 같이 발생하는 use case
 
요구 사항 명세서
- 요구 사항 분석가 - 사용자의 합의로 만들어짐
 - 개발자도 이해해야함
 - 기능적, 비기능적 요구사항 둘다 명세
 - Good SRS(Software Requirements Specification)-“IEEE Recommended Practice for Software Requirements Specification”를 참조
 
use case model 특징
- 유스 케이스란 액터와 시스템의 상호작용(기능적 요구사항)
 - 액터는 시스템에 input을 주고, 시스템은 response를 줌
 - 한 유스케이스에 액터가 여러명일 수 있음(복잡한 경우)
 - 시스템을 블랙박스로 취급, 내부 동작 방식은 다루지 않음
 - 유스 케이스에 참여하는 객체는 아직 정하지 않음(분석 모델링에서 정함)
 
유스케이스 핵심 요소
- 유스 케이스 및 액터 이름
 - 유스 케이스 한 문장으로 요약
 - main 이벤트 순차적 설명
 - main 시퀸스 대안적 설명
 
Actor
- 시스템 외부 존재(사람, 외부 시스템, 입출력 디바이스 등)
 - 스틱 피규어로 표현
 - 같은 유형의 모든 액터를 하나의 역할로 표현
 - primary actor: 이것의 입력으로 유스 케이스가 시작됨
 - secondary actor: primary가 다른 유스 케이스에서는 이것이 될 수 있음
 
Static Modeling
requirement > analysis > design
시스템 안에 클래스들과 그들의 속성, 연산, 관계를 정의
Association
- 클래스 간의 관계
 - Multiplicity,Association Name,arrow
 - unary association : 자신과 연관
 - association class : 연관관계 자체가 자신의 속성을 가져야하는 경우
 - Link: 객체 간의 연결(Association의 인스턴스)
 
Composition(집합) & Aggregation(구성)
- 둘다 비슷한 의미
 - 전체-부분 관계(has a)
 - association의 특수한 형태
 - composition : part object와 같이 생성, 소멸됨 - 한몸
 - aggregation : part가 whole과 떨어져 존재할 수 있음
 - part > whole 방향으로 표시
 
Generalization & specialization
- is-a 관계(sub is a super)
 
Constraints
- 제약사항은 문자로 표현된다.
 - OCL(Object Constraint Language) - ex) {count >= 0}
 
static modeling
- physical class와 entity class를 주로 모델링(변하지 않을 것들)
 - Physical Class: 물리적인 장치, 사용자
 - Entity class: 데이터를 다루는 클래스, 오래 살아남음
 
Context Modeling
- 시스템 내부와 외부를 식별하는 목적
 - 클래스 다이어그램 표기법으로
 - system context diagram: 전체 시스템 수준에서(하드웨어 + 소프트웨어)
 - software system context diagram: 소프트웨어 수준에서
 
«external class»
- «external user»: standard I/O devices (keyboard/display, mouse)
 - «external device»
    
- «external input device»
 - «external output device» ex) ReciptPrinter, CashDispenser
 - «external I/O device» ex) CardReader
 
 - «external system»
 - «external timer»
 
Entity Class
- 데이터 중심 클래스, 데이터를 저장하고 접근 통제(DB 같은)
 - COMET의 정적 모델링에서는 Entity class의 속성과 관계에 중점
 - 오퍼레이션은 아직 명세 안함(디자인 모델링 때 함)
 - E-R 모델링과의 차이는 정적 모델링은 오퍼레이션을 명시하는 것을 허용*
 
!정적 모델링은 오퍼레이션을 포함해야 하지만, 동적 모델링 이후에 만드는게 쉽다
Object & Class Structuring
Dynamic Interaction Modeling
Finite State Machines
시스템이나 객체의 제어와 과정을 모델링
실시간 시스템과 같은 많은 시스템은 상태 의존적임
- 그들의 행도을 그드르이 입력 뿐만 아니라 이전에 무슨 일이 일어났는지에 의존
 - 높은 상태 의존적 시스템에서 그들의 표기법은 시스템의 복잡성을 이해하는 것으로 통찰력을 얻는데 도움이됨
 
상태 머신 다이어그램
- Statechart & State machine diagram은 비슷한 의미로 쓰임
 - flat statechart는 위계가 없고, hierarchical statechart는 위계가 있음
 
Finite State Machine
- 유한한 수의 상태를 다룸
 - State Machine은 단 하나의 상태를 가짐
 - 상태의 전이는 입력 이벤트로 이루어짐
 - 객체지향 모델에서 상태 의존적 관점의 시스템은 하나 이상의 Finite state machine을 의미함
 - 동적 측면을 모델링 하여 클래스의 수명을 표현함
 
Events
- 상태 전이를 일으키는 트리거
 - 이벤트는 특정 시간에 일어남
 - 이벤트는 즉시 일어남(zero duration)
 - 예를 들어 card inserted, pin entered, door opened
 
State
- 상태는 특정한 조건을 만족하고, 특정 행동을을 하고, 다른 이벤트를 기다리는 조건이나 상황임
 - round square로 표기
 
Gaurd Condition
entry action
- 어떤 상태로 들어가자마자 즉시 발생하는 행동
 - 상태 안에다가 쓰고, ‘Entry/Action’으로 표기
 - 어떤 상태로 들어가는 전이가 여러 개일 때
 - 상태에서 무조건 수행해야 하는 행동
 
exit action
- 다른 상태로 나갈 때 발생
 - 상태 박스 안에 exit/Action으로 표기
 - 다른 상태로 가는 전이가 많을 때 사용하면 좋음
 - 다른 상태로 나갈 때 반드시 수행되어야 하는 것
 
flat statechart의 잠재적 위험
- 상태와 전이의 증식이 읽기 어렵게 만듬
 - 상태를 단순화하는 방법은 composite state(super state)를 만드는것
 
hierarchical statechart의 목적
- 모든 계층적 상태 차트는 flat statechart로 매핑될 수 있다.
 
Composite State
- 내부 스테이트들을 가진 스테이트를 추상화 한것(블랙박스로)
 
Aggregation State Transition
Othogonal statechart
- 같은 객체의 상태에서 모델의 다른 관점을 나타냄
 - 각각 독립적으로 작동
 
statechart 가이드 라인
- 상태의 이름은 인지가능한 상황이나 시간이 간격을 반영해야함 - 형용사구, 동명사구가 많음
 - 상태의 이름은 유일해야함
 - 모든 상태에서 빠져나올 수 있어야하나, 종료상태는 없어도됨
 - sequential statechart에서 한번에 하나의 상태만 가짐
 - 이벤트는 다른 상태로 가게 하는것에서 액션과 다름
 - 이벤트는 즉각적으로 발생
 - 액션은 명령임
 - 액션은 즉시 실행되며 동시에 실행되야 하며, 순서에 따라 결과가 달라지면 안됨
 - 조건은 불린 값
 - 액션과 컨디션은 없어도됨
 
use case에서 statechart를 만들기 위해
- 하나의 특정한 경로로 시작
 
Subsystem Architectural Design
분석 모델링 중에 use case를
설계 모델링 중에 소프트웨어 아키텍처를 설계하는 것에 의해