OOAD: Object Oriented Analysis Design
성공하는 소프트웨어 프로젝트를 위해서 분석 및 설계를 한다.
Q. 성공하는 소프트웨어란?
Answer.
1. 클라이언트가 원하는 것, 일반 사용자가 원하는 것을 만들 수 있어야 한다.
2. 개발 기간 안에 완성하고 경제적으로 만들어야 한다.
3. 업데이트에 대해 민첩하게 대응할 수 있어야 한다. (소스 코드가 변경에 용이)
소프트웨어 공학
소프트웨어 프로젝트의 Analysis -> Design -> Implementation에 대해 다루는 학문
Analysis(분석): 사용자가 원하는 것이 무엇인지 파악하기
Design(설계): 어떻게 만들지를 표현하는 도면 그리기
Implementation(구현): 실제로 구현하기
Design의 효과: 클라이언트에게 보여주면서 요구사항을 정확하게 캐치할 수 있다. 개발자 입장에서 앞으로의 개발 방향도 알 수 있다.
ex) Paper Prototyping
소프트웨어 개발에 필요한 것
표기법(Notation)이 있고 절차(Process)가 있고 개발 도구(Tool)이 있어야 한다.
-> 프로그래밍 언어 혹은 분석 설계 언어가 있고 알고리즘이 있고 IDE가 있어야 한다.
UML
(그래픽으로 보여주는) 분석 설계 언어
-> 분석(사용자가 원하는 것이 무엇인지), 설계(어떻게 만들지)에 대한 정보를 나타내는 언어
ex) 유즈케이스 다이어그램, 시퀀스 다이어그램, 클래스 다이어그램
소프트웨어 개발 과정
- 요구사항 분석
주어진 문제를 파악하고 이해한다. - 설계
어떤 함수가 필요한지, 어떤 절차가 필요한지 고민한다. - 구현과 단위 테스팅
복잡한 문제에 대해서는 비슷한 과정을 반복(Iterative)하고 하나씩 풀면서(Incrementatal) 문제를 해결한다. 이후 각각 테스트한다. - 통합 및 테스팅
나눠서 구현한 문제들을 통합하고 평가한다.
프로그램이 더 복잡해지면?
1. 주어진 문제를 러프하게 이해하기
2. 주어진 문제를 여러 문제들로 나누기
3. 각각의 문제에 대해 (요구사항 분석, 설계, 구현과 단위 테스팅, 통합 및 테스팅)을 진행
RUP (Rational Unified Process)
Iterative하고 Incremental한 문제에 대한 프로세스
시간은 네 단계(phase)로 나눠진다.
- Inception
요구사항을 분석하고 정리한다. 프로그램 컨셉을 선정한다.
ex) 햅틱 폰은 ‘진동을 이용한 터치 피드백’을 컨셉으로 선정하였다.
요구사항을 정리할 때는 Use case model을 이용한다. - Elaboration
분석 및 설계를 세밀하게 한다.
2-1. Architectural Design이 Top level인 경우
어떤 기능이 필요한지를 결정함
ex) 스마트폰은 ‘멀티미디어 기능’, ‘그래픽 기능’, ‘블루투스 기능’, ‘음성 통화 기능’, ‘웹 브라우저 기능’ 등이 필요하다.
2-2. Architectural Design이 Subsystem level인 경우
어떤 엔진이 필요한지를 결정함
ex) 웹 브라우저 기능에는 ‘Necko’, ‘GTK’ 등의 엔진이 필요하다.
2-3. Architectural Design이 Modul level인 경우
어떤 클래스가 필요한지를 결정함
ex) ‘Necko’ 엔진에는 A,B,C 클래스들이 필요하다. (Class Diagram)
API Design: 클래스를 소스 코드화하기 전에 클래스 내용을 정의하는 것
(필드의 이름과 역할, 메소드의 이름과 역할 등) - Construction
코딩, 테스팅, 디버깅을 한다. - Transition
사용자의 테스팅 및 유지보수를 한다.