PowerPoint 프레젠테이션

Download Report

Transcript PowerPoint 프레젠테이션

CHAPTER
11
최신 소프트웨어 공학 개요
11.1 컴포넌트 기반 소프트웨어 개발
11.2 웹 엔지니어링
11.3 정형적 명세 기법
11.4 익스트림 프로그래밍
11.5 관점 지향 프로그래밍
11.6 웹 서비스와 SOA
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
학습 목표
 컴포넌트란 무엇이며 그 개발 과정은 어떻게 되는가?
 웹 기반 소프트웨어의 개발 과정은 무엇인가?
 정형적 명세 방법에는 어떤 것들이 있으며 어떻게 표현하는가?
 익스트림 프로그래밍의 철학과 방법은 무엇인가?
 관점지향 프로그래밍이란 무엇인가?
 웹 서비스를 이용한 SOA란 무엇인가?
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
2
소프트웨어 공학 기술의 발전
 1970년대 초: 구조적 프로그래밍





구조적 코딩
하향식 프로그래밍
정보 은닉(Parnas)
추상화(Dijkstra)
단계적 세분화(Wirth)
 1970년대 중: 설계 방법론
 구조적 설계(Yourdon과 Constantine)
 JSP 설계 방법(Jackson)
 Warnier-Orr 설계 방법
 1970년대 말: 분석 방법론
 구조적 분석(Demarco, Gane과 Sarson)
 SADT(SofTech)
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
3
소프트웨어 공학 기술의 발전
 1980년대 초: 자동화 도구 및 객체지향 프로그래밍
 PSL/PSA
 코드 자동 생성
 소프트웨어 공학 도구
 객체지향 프로그래밍(Smalltalk, C++)
 1980년대 말: 컴퓨터 응용 소프트웨어 공학
 분석을 위한 대화식 그래픽 도구
 분석, 설계 지원 도구
 프로그래밍 환경
 통합 소프트웨어 공학 환경
 사용자 인터페이스 관리 시스템
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
4
소프트웨어 공학 기술의 발전
 1990년대 초: 객체지향 소프트웨어 공학
 객체지향 분석, 설계(Booch, OMT, Shaller-Meller, Yourdon, Fusion,
Jacobson, ......)
 객체지향 분석, 설계 도구
 소프트웨어 리엔지니어링
 1990년대 중: 객체지향 분산처리
 소프트웨어 재사용
 설계 패턴
 객체 분산 처리 구조(CORBA, OLE/COM, ...)
 분산 객체 프로그래밍(JAVA)
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
5
소프트웨어 공학 기술의 발전
 2000년대 초
 컴포넌트 개발 방법
 익스트림 프로그래밍
 애스펙트 중심 프로그래밍
 2000년 대 중
 웹 서비스와 SOA
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
6
11.1 컴포넌트 기반 소프트웨어 개발
 목적
 개발 생산성 높임
 빨리 좋은 품질의 소프트웨어 개발 가능
 컴포넌트 기반 개발 과정
 객체지향 기술 이용
 이미 개발된 컴포넌트를 사용하여 시스템을 구성
 언어, 방법, 도구, 관리 등의 여러 요소를 함께 적용
 소프트웨어 개발에 사용하는 블록은 프로그래밍 언어에 제약을 받지 않
아야 하며, 규모가 크고 캡슐화된 단위여야 한다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
컴포넌트란 무엇인가?
 정의
 밀접한 관계에 있는 소프트웨어의 패키지로서 독립적으로 개발되어 분
배될 수 있는 단위이며 다른 컴포넌트와 조립될 수 있도록 제공하는 서
비스와 사용하는 서비스를 인터페이스로 정의한 것[D’Souza,1999]
 밀접한 관계에 있는 소프트웨어의 패키지
 독립적으로 개발되어 분배될 수 있는 단위
 제공하는 서비스에 대하여 명시적으로 잘 정의된 인터페이스가 있음
 다른 것으로부터 제공되어야 할 서비스에 대하여 명시적으로 잘 정의된
인터페이스가 있어야 함
 다른 컴포넌트와 조립될 수 있고 컴포넌트 자체를 수정하지 않고 컴포
넌트의 성질을 맞게 고칠 수 있어야 함
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
컴포넌트의 특성
 패키지의 단위
 제공하는 인터페이스 리스트
 요구되는 인터페이스 리스트
 외부 명세
 수행 코드
 검증 코드
 설계
 독립된 배포 단위
 쪼개어져 일부만 전달될 수 없음
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
컴포넌트의 특성
 제공되는 인터페이스와 요구되는 인터페이스의 명세
 컴포넌트 명세
• 클라이언트가 그 컴포넌트에 대하여 사용할 수 있는 모든 인터페이스와 그
컴포넌트가 조립될 환경에서 제공되어야 할 인터페이스를 나타낸다.
• 내부 충실적(selfcontained)
• 대칭적(symmetrical)
 인터페이스와 구현을 완전히 분리
 인터페이스 명세
• 컴포넌트가 무엇을 제공하고 사용될 때 무엇을 요구하는지 정의
 컴포넌트 조립
 조립될 수 있는 컴포넌트 선택
 제공하는 인터페이스와 요구하는 인터페이스의 연결
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
컴포넌트의 특성
 컴포넌트 조립
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
Java 컴포넌트
 JavaBeans
 Java를 이용하여 컴포넌트를 구축하기 위한 컴포넌트 기술
 외부 인터페이스를 특성, 메소드, 이벤트로 기술한 단일 Java 클래스
 리플렉션
 Java는 컴파일된 클래스, 인터페이스, 메소드 정의에 대하여 런 타임 형
태로 보관하는데 이러한 정보를 접근하여 읽을 수 있는 것이 리플렉션
API이다.
 리플렉션을 이용하면 알려지지 않은 타입의 객체에 대하여 인터페이스
및 메소드를 호출하는 바인딩을 늦출 수 있다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
Java 컴포넌트
 기본 JavaBeans
 리플렉션 API를 이용하여 Bean을 인스턴스화 한다.
 JavaBeans 컴포넌트
 Jar 파일 패키징
 패키지는 컴포넌트 서비스와 특성, 메소드, 이벤트를 명시한 추가 클래
스 파일 및 기타 정보를 포함한다.
 Enterprise JavaBeans
 비즈니스 로직을 서버로 옮기는 과정을 단순화한 서버 컴포넌트 모델
 응용 프로그램을 규모나 성능, 신뢰성 측면에서 향상시킨다.
 미들웨어를 복잡하게 하여 비용은 증가한다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
Java 컴포넌트
 Enterprise JavaBeans
 구성요소
• 홈 인터페이스
• 리모트 인터페이스
• EJB 클래스
• 배치 디스크립터
 컨테이너
• 미들웨어 벤더에 의하여 구현된 컴포넌트로 서버 컴포넌트의 컨테이너 역
할
• 클라이언트에게 리모트 접근, 분산 트랜잭션 관리, 보안, 자원 공동 사용, 병
렬 서비스, 클러스터링 등의 서비스를 제공
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
COM+ 컴포넌트
 컴포넌트 분야에서 Microsoft가 정의한 별도의 표준
 컴포넌트 소프트웨어의 기초는 인터페이스의 바이너리 표준인
COM으로 시작
 모든 인터페이스는 QueryInterface라는 기능을 제공. 이를 통하여
다른 인터페이스에 대한 질의를 한다.
 COM 인터페이스는 IDL이라 불리는 인터페이스 정의 언어에 의하
여 정의
 COM은 OLE(COM인터페이스의 집합)이라 불리는 복합 도큐먼트
를 위한 모델을 가지고 있다.
 COM+는 Microsoft의 최신 컴포넌트 기술로 Java 머쉰과 같은 컴
포넌트에 대한 가상 기계 모델을 정의하고 있다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
CORBA 컴포넌트
 OMG(Object Managemnet Group)에서 다양한 플랫폼과 언어에서
객체 사이의 분산 통신을 지원하기 위해 설계
 다른 기종 사이에 수행되기 위하여 CORBA는 바이너리보다는 원시
코드 표준이 되었다.
 컴포넌트 인터페이스는 CORBA IDL을 이용하여 모듈 안에서 정의
 여러 가지 프로그래밍 언어에서 IDL과 바인딩하기 위한 표준이 정
의되어 있다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
CORBA 컴포넌트
 CORBA 구조
CORBA
CORBA
CORBA
응용
수직기능
수평기능
CORBA 버스
CORBA
서비스
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
11.2 웹 엔지니어링
 목적
 고품질의 웹 기반 시스템을 성공적으로 개발하며 배치하고 유지 보수하
기 위하여 엔지니어링 및 경영 관리 원리를 확립하고 사용하는 것
 웹 기반 응용 시스템의 특성
 네트워크
• 네트워크 상에 수행되며 다양한 클라이언트에 대하여 서비스 해야 함
 컨텐트 중심
• 엔드유저에게 텍스트, 그래픽, 오비오, 비디오 컨텐트를 제공하는 것
 계속적인 진화
• 시간 단위로 수정됨
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 엔지니어링
 웹 엔지니어링의 작업 분류
 단순 정보
 다운로드
 커스텀 기능
 인터액션
 사용자 입력
 트랜젝션 중심
 서비스 중심
 포탈
 데이터 웨어하우스
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 엔지니어링 프로세스
 공식화
 웹 응용의 목표와 목적, 범위를 정함
 계획
 비용 예측, 리스크를 파악하여 개발 일정 정의
 분석
 기술적인 요구 확립, 그래픽 디자인에 대한 요구도 정의
 엔지니어링
 컨텐트 설계, 프로덕션
 구조 설계, 네비게이션 설계, 인터페이스 설계
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 엔지니어링 프로세스
 페이지 생성 및 테스트
 자동화 도구를 이용하여 웹 페이지를 구축하는 작업
 고객 평가
 웹 엔지니어링 프로세스가 반복될 때마다 사용자의 평가가 필요
 수용된 변경 요구는 다음 프로세스에 반영
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 엔지니어링 프로세스
 웹 엔지니어링 프로세스 모델
공식화1
계획1
분석1
구조설계
엔지니어링1
페이지 생성
및 테스트1
네비게이션 설계
인터페이스 설계
컨텐트 설계
공식화2
계획2
분석2
고객 평가1
프로덕션
엔지니어링2
페이지 생성
및 테스트2
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
고객 평가2
웹 구조 설계
 선형 구조
 보여지는 순서가 정해져 있음
 그리드 구조
 웹 페이지의 내용이 이차원적으로 분류된 구조
 계층적 구조
 계층 구조의 수직적 분기를 따라 제어 흐름이 내려간다.
 네트워크 구조
 진정한 웹 구조. 웹 응용의 컴포넌트가 자유 자재로 제어를 넘겨서 네비
게이션이 자유롭게 된다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 구조 설계
 선형 구조
 그리드 구조
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
웹 구조 설계
 계층 구조
 네트워크 구조
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
네비게이션 설계
 네비게이션 경로를 정의
 사용자 부류에 따라 네비게이션 목적을 파악하고 네비게이션 방법
을 정의
 일시적 방문자
 등록된 고객
 특별 사용자
 네비게이션 목적에 맞는 링크 경로 파악
 텍스트 링크, 아이콘, 버튼, 스위치, 그래픽 등에서 선택
 언제 클릭 가능하게 하는지도 선택
 네비게이션 링크의 색상 결정
 사이트 맵, 목차, 인덱스, 탑색 메커니즘, 도움말 기능도 선택
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
26
인터페이스 설계
 심각한 오류 혹은 작은 오류이라도 사용자가 웹 사이트를 떠나게
할 수 있음
 컴퓨터 모니터를 읽는 속도는 인쇄물을 읽는 것보다 25 퍼센트 정
도 느림
 ‘공사 중’이란 표시는 피한다.
 사용자는 일반적으로 스크롤이 필요 없게 한 화면에 모든 정보가
담겨 있는 것을 좋아함
 네비게이션 메뉴와 헤드바는 일관성 있게 설계하고 모든 페이지에
서 보이도록 설계
 미학적인 부분이 기능적인 부분을 대치할 수는 없음
 네비게이션 옵션은 초보자에게도 분명하고 쉽게 이해할 수 있도록
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
27
웹 테스트
 웹 응용에 포함된 컨텐트에 오류가 있는지 살핌
 네비게이션 오류를 찾아내기 위하여 웹 설계 모델을 검토
 웹 페이지 단위로 테스트
 통합 테스트
 시스템 테스트를 위하여 웹 응용 전체 기능과 컨텐트가 잘 나타내
지는지 점검
 웹 응용이 여러 환경에서 잘 수행되는지 테스트
 사용자에 의한 테스트
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
28
11.3 정형적 명세 기법
 정형적 명세
 구문 문법 숙어 등이 수학에 기초한 정형 방법으로 정의된 언어로 작성
된 명세
 모호하지 않게
 전기, 토목 공학 등 전통적인 공학 기법에서는 수학적 표현이 많이
사용 됨
 소프트웨어 분야에도 수학적 표현이 필요함
 원자로 제어 소프트웨어
 제어 시스템
 시뮬레이션 시스템
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
29
기본 개념
 간단한 게임
 Question: 이 게임은 끝날 것인가? 최종 남은 공의 색깔은?
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
30
정형적 방법
b: 검은 공
w: 하얀 공
f: 변환을 나타내는 함수
(b-2+1, w)
f(b, w) = (b-1, w+1-1)
(b+1, w – 2)
(b-1, w)
f(b, w) = (b-1, w)
(b+1, w-2)
f(0,1) = (0, 1)
f(1, 0) = (1, 0)
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
31
증명
 Theorem 1: 게임은 끝난다.
 Theorem 2:
f* (b, w) = if odd (w)
then (0, 1)
else (1, 0).
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
32
정형 시스템이란 무엇인가?
 정형 시스템이 되기 위한 요소
1. 언어(language): 관심 대상을 표현할 언어
예: 공 꺼내는 게임에서 꺼내는 행위를 f(b, w) = (b-1, w-1+1) 로 표
현하는 것
2. 규칙(rule): 언어에서 어떤 사실을 추론하는 규칙
예: (b-1, w-1+1)=(b-1, w)로 유도 시키는 것
3. 의미부여(assigning meaning)
예: b가 검은 공의 개수라고 의미를 부여하는 것
4. 검증(validity)
예: 언어로 표현된 의미가 정확한지 체크하는 일
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
33
정형 시스템의 기본 요소
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
34
명세 기법의 종류
 대수학적 방법
 오퍼레이션과 이들 사이의 관계로 시스템을 표현
 시스템: 분할된 서브 시스템의 인터페이스
 Larch, OBJ, Lotos
 모형 기반 방법
 시스템: 상태 모형
 집합과 수열, 수학적 요소를 이용하여 표현
 Z, VDM, CSP, Petri-net
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
35
Z 명세
 타입이 있는 집합 이론과 논리
 집합, 관계, 함수
 술어 논리(predicate logic) 사용
 스키마
 이름 있는 짝(tuples) – 레코드와 같은 것
 스키마 조합 연산
 작은 스키마들을 조합하여 더 큰 스키마를 만들기 위한 연산자
 구문 규칙
 추적 용이하도록
 프로그래밍과 관련 되도록
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
36
스키마
 Z에서 정형 명세를 구성하는 중요한 단위
 스키마는
 시스템이 처하는 상태와
 일어날 수 있는 오퍼레이션
 복잡한 시스템 안의 요소들의 관계들을 나타낸다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
37
상태 스페이스
 시스템의 상태는 스키마로 표시함
 스키마의 일반적인 형태
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
38
사례: 생일 기록부
[NAME, DATE ]
Given
Sets
BirthdayBook
known: P NAME
birthday: NAME § DATE
known = dom birthday
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
39
사례: 생일 기록부
known = { David, Judy, Robert }
birthday = { David  24-June,
Judy  26-August,
Robert  8-July}
The invariant is satisfied:
known= dom birthday
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
40
시스템 초기 상태
InitBirthdayBook
BirthdayBook
birthday = 
known = 
BirthdayBook
known: P NAME
birthday: NAME § DATE
known = dom birthday
birthday = 
known = 
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
41
오퍼레이션
 시스템의 상태 변화를 스키마로 표시함
SchemaName
D State
input/output param declarations
preconditions
postconditions
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
42
생일 추가 오퍼레이션
AddBirthday
D BirthdayBook
name?: NAME
date?: DATE
Observations:
• 오퍼레이션 수행 전의 상태
• 오퍼레이션 수행 후의 상태
• 입력과 출력
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
43
오퍼레이션
AddBirthday
D BirthdayBook
name?: NAME
date?: DATE
known, known’: P NAME
birthday, birthday’: NAME § DATE
known = dom birthday
known’ = dom birthday’
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
44
생일 추가 오퍼레이션
AddBirthday
D BirthdayBook
name?: NAME
date?: DATE
pre-condition
post-condition
name?  known
birthday' = birthday  { name?  date? }
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
45
생일 기억 오퍼레이션
Remind
X BirthdayBook
date?: DATE
names!: P NAME
names! =
{n: known | birthday(n) = date?}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
46
11.4 익스트림 프로그래밍
 대규모 시스템 개발 과정의 문제점
 치밀하게 계획, 품질 보증을 철저히 등의 오버헤드
 프로그램 개발 자체 보다는 다른 일(문서화, 회의, 설계 등)의 작업에
더 매달리게 됨
 무거운 방법론
 애자일(agile) 방법




설계와 문서화 보다는 소프트웨어 그 자체에 더 초점을 두는 방법
사용자의 요구가 빈번히 변경될 수 있는 환경 제공
빠른 피드백
예: 익스트림 프로그래밍, SCRUM, Crystal, Adaptive Software
Development, Feature Driven Development
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
47
애자일 방법의 원리
 고객 참여
 고객의 역할 – 시스템의 요구를 제공, 우선순위를 정하여 개발하게 하
고 평가
 반복적 릴리스
 요구를 조금씩 개발하여 단계적으로 릴리스
 프로세스보다 사람
 개인을 존중하여 맡김
 변경을 포용
 변경에 조화되도록 설계
 단순함을 유지
 가능하면 단순하게 하고 복잡한 것은 배제
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
48
익스트림 프로그래밍의 철학
 Kent Beck, 1990년대 초반
 가볍고도 효율적이며 낮은 위험도를 가진
 유연하면서도 예측 가능한 방법을 궁리
 1996년 다임 클라이슬러 프로젝트에 적용
 소프트웨어 제작을 운전에 비유
 조금씩 핸들을 돌려 궤도를 수정하는 것
 수많은 변화와 수정
 철학
 의사소통
 단순성
 피드백
 용기
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
49
주요 개념과 방법












계획 세우기 - 우선순위와 기술 사항을 고려하여 범위를 결정
작은 릴리스 - 짧은 사이클로 작은 릴리스를 반복하여 개발
메타포 - 시스템 전체에 대하여 은유적인 접근
단순한 설계 - 최대한 설계를 단순하게 유지
지속적인 테스트 - 개발과 동시에 단위 테스트를 병행
리팩토링 - 코드의 품질을 지속적으로 개선
페어 프로그래밍 - 가장 좋은 구현 방법과 전략을 고민
코드를 공유 - 누구나 코드를 수정하고 집단적인 소유로 여긴다
지속적인 통합 - 개발한 것을 즉시에 또는 매일 통합, 빌드
40시간 작업 - 초과근무를 줄이고 계획적으로 작업
현장 고객 - 고객이 개발 사이트에 상주하며 참여
코딩 표준 - 표준에 맞추어 코딩
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
50
스토리 카드
 사용자 스토리
 요구를 높은 수준으로 정의한 것
 개발하는 데 드는 노력을 예측할 수 있는 충분한 정보를 줌
 사례
 학생이 월 정기 승차권을 온라인으로 구입한다.
 정기 승차권을 신용카드로 지불한다.
 교수가 학생의 성적을 입력한다.
 학생이 성적증명서를 신청한다.
 학생이 이번 학기 신청한 강의의 시간표를 출력한다.
 성적증명서는 표준 브라우저에 온라인으로 준비된다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
51
스토리 카드의 사례
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
52
페어 프로그래밍
 두 명이 한 조가 되어 같은 컴퓨터를 사용하면서 개발
 한 사람이 코딩할 때 다른 사람은 어떻게 테스트 할 것인지 궁리
 장점
 혼자 하는 것보다 원리에 충실
 더욱 일에 몰입하여 더 좋은 설계와 코드를 작성할 수 있음
 작업이 활기차고 중단을 막게 됨
 문제를 더 잘 해결. 견고한 설계
 멘토링, 결속력이 강해짐
 단점
 실력 차이가 많은 경우 실증이 날 수도 있음
 부담이 될 수도 있음
 생산성을 정확히 확인하기가 어려움
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
53
생명 주기
 반복적인 작업
 스토리 작성, 릴리스 계획을 반복
 인수 테스트와 작은 릴리스를 배출
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
54
지속적인 테스트와 통합
 사용자에게 데모보다는 실행되는 코드를 빨리 안겨주자는 철학
 프로그램이 끝나는 대로 시험하고 이를 통합
 JUnit
 테스트 케이스를 Java 언어로 작성하여 클래스를 코딩할 때 끼워 넣는
식의 시험 방법
package com.sample
import junit.framework.TestCase
public class TC_Account extends TestCase {
public TC_Account(String arg0) {
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
}
public void testDeposit() {
Account account = new Account();
assertEquals("Account should start with no funds.", 0,
account.balance());
}
protected void tearDown() throws Exception {
super.tearDown();
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
}
}
55
JUnit을 이용한 테스트
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
56
11.5 관점 지향 프로그래밍
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
57
AOP의 목표와 장점
 AOP의 목표
 분산된 기능을 모듈로 선언하는 관점을 생성하는데 초점
 AOP의 장점
 제어구조가 엉키는 일이 적게 된다.
 코드의 크기가 줄어든다.
 애플리케이션의 유지보수가 쉬워진다.
 디버깅, 리팩토링, 수정이 쉬워진다.
 객체지향 프로그래밍의 클래스 라이브러리와 같이 애스펙트 라이브러
리를 만들어 재사용할 수 있다.
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
58
OOP의 문제점(사례)
 객체지향 애플리케이션
 관점 1: 시스템은 모든 상품의 도매가격을 보관하여야 한다.
 관점 2: 가격에 대한 변화가 기록되어야 한다.
public abstract class Product {
private real price;
product () {
price = 0.0;
}
public void putPrice(real p) {
price = p;
}
public int getPrice() {
return price;
}
}
public class Logger {
private OutputStream ostream;
Logger() {
// open log file
}
void writeLog(String value) {
// write value to log file
}
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
59
가격 변동 저장
public abstract class Product {
private real price;
Logger loggerObject;
product () {
price = 0.0;
loggerObject = new Logger();
}
public void putPrice(real p) {
loggerObject.writeLog("Changed Price from" + price + "
to " + p);
price = p;
}
public int getPrice() {
return price;
}
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
60
횡단과 AOP
 시스템의 요구가 하나의 객체에 캡슐화 되어 있지 않고 여러 객체
에 퍼져 널려있는 현상
 예: Product 클래스
 타이밍 정보나 인증, 영구 데이터 저장과 같은 것을 추가한다면
Product 안에 추가됨
 AOP
 호스트 언어에 맞는 관점의 분리를 허용
 다른 컴포넌트를 횡단하는 관심사를 기술할 수 있는 메커니즘을 제공
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
61
AOP의 도구
 애스펙트
 관심사를 정의할 수 있는 문법적 단위, 컴포넌트 언어
 하나의 컴포넌트에서 다른 컴포넌트에 있는 기능을 호출하는 횡단을 기술할 수
있는 언어
define aspect Logging{
Logger loggingObject = new Logger();
when calling set*(talkng one parameter) {
loggingObject.writeLog("Called set method");
}
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
62
AOP의 도구
 직조
 컴포넌트 언어와 애스팩트와의 통합
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
63
주요 구문
 조인 포인트
 관심사가 주 프로그램의 어디에 횡단할 것인지를 나타내는 위치
 예: 메소드의 호출, 생성자의 호출, 예외 처리 등
 사례
 데이터베이스 안에 있는 모든 SQL 실행을 기록
 트랜젝션 컴포넌트 클래스 안에 updateTable()이라는 메소드를 만들
어 모든 변경을 처리
 애스펙트 - 타임스탬프를 기록하고 성공을 알림
 조인포인트 public String DBTrans.updateTable(string)
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
64
포인트 컷
 AOP 언어에게 언제 조인 포인트가 매치될 것인지를 알려주는 구문
 예
 특정 객체가 다른 객체에게 호출할 때
 동일한 객체가 호출 될 때
call(public String DBTrand.updateTables(String))
 포인트 컷
 조인트 포인트로 지정하는 문장을 그루핑
Pointcut updateTable() :
call(public String DBTrans.updateTables(String))
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
65
어드바이스
 포인트 컷이 활성화 되면 해당되는 어드바이스 코드가 실행됨
 위치
 before
 around
 after
before(String s) : updateTables(s) {
System.out.println("Passed parameter - " + s);
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
66
애스펙트
 조인 포인트, 포인트 컷, 어드바이스의 캡슐화
public aspect TableAspect {
pointcut updateTable(String s);
call (public String DBTrans.updateTables(String) &&
args(s);
before(String s) : updateTable(s) {
System.out.println("Passed parameter - " + s);
}
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
67
AspectJ
 Xerox의 Palo Alto 연구소의 연구 결과
 목표
 Java 언어를 위한 애스펙트 정의 기능을 제공
public class Simple {
private String name;
public String getName() {
return name;
}
public static void main(String args[]) {
Simple simple = new Simple();
System.out.println(simple.getName());
}
}
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
68
AspectJ
public aspect SimpleAspect {
pointcut nsmePC() : call (public String getName());
before() : MatchAllgetName() {
System.out.println(thisJoinPoint.getSingnature());
}
}
 ajc 컴파일러
 애스펙트 고유의 구문을 컴파일 하여 바이트 코드로 만듦
 직조하기 쉬운 형태
 애스펙트 코드는 클래스로 변환되고 AOP 고유의 문장은 Java 언어로
바뀜
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
69
11.6 웹 서비스와 SOA
 오랜 동안 투자한 정보 시스템을 계속 효과적으로 이용하는 방법
 웹 서비스
 웹을 기반으로 한 서비스 통신 방식
 Jini 기술에 의하여 소개된 서비스 개념을 채택하고 XML과 같은 기술
을 이용하여 웹에 서비스를 제공하도록 구현한 것
 SOA
 웹과 같은 네트워크 상에서 서비스를 사용하여 소프트웨어 애플리케이
션을 구성할 수 있게 하는 아키텍처 스타일
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
70
SOA 개요
 소프트웨어 컴포넌트들 사이에 느슨한 결합을 이용하여 애플리케
이션을 구성하는 방법
 IT 인프라에 있는 애플리케이션으로 새로운 서비스를 만들 수 있게
함
 잘 정의된 비즈니스 기능을 구현한 서비스를 이용 다양한 애플리케
이션을 구성할 수 있게 함
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
71
SOA의 장점
 서비스는 구현 기술에 관계없이 잘 정의된 인터페이스를 가진 소프
트웨어 컴포넌트
 서비스는 내부 함축적이고 느슨하게 결합되어 있음
 서비스는 동적으로 발견될 수 있음
 복합 서비스는 다른 서비스를 모아서 만들 수 있음
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
72
SOA 패러다임
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
73
웹 서비스를 이용한 SOA 구현
 UDDI – 플랫폼에 무관한 XML 기반의 레지스트리
 WSDL – XML기반의 서비스 정의 명세
 SOAP – 네트워크 상에서 XML 기반의 메시지를 교환하기 위한 프
로토콜
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
74
SOA를 이루는 층
최은만 저, 소프트웨어 공학(4차 개정판), 정익사
75