요구사항 정의
요구사항은 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한 제약조건 등을 나타냄.
- 소프트웨어 개발이나 유지 보수 과정에서 필요한 기준과 근거 제공
- 개발하려는 소프트웨어 전반적 내용을 확인할 수 있게 하여 개발에 참여하는 이해관계자들 간 의사소통을 원활히 하는데 도움을 줌.
- 요구사항이 제대로 정의되어야 과정의 목표와 계획 수립 가능
기능 요구사항
- 시스템이 무엇을 하는지, 어떤 기능을 하는지
- 시스템의 입력이나 출력으로 무엇이 포함되어야 하고, 어떤 데이터를 저장하거나 연산을 수행해야 하는지
- 시스템이 반드시 수행해야 하는 기능
- 사용자가 시스템을 통해 제공받길 원하는 기능
비기능 요구사항
- 시스템 장비 구성 요구사항
- 성능 요구사항
- 인터페이스 요구사항
- 데이터 요구사항
- 테스트 요구사항
- 보안 여구사항
- 품질 요구사항
- 제약사항
- 프로젝트 관리 요구사항
- 프로젝트 지원 요구사항
사용자 요구사항
- 사용자 관점에서 본 시스템이 제공해야 할 요구사항
시스템 요구사항 (소프트웨어 요구사항)
- 개발자 관점에서 본 시스템 전체가 사용자와 다른 시스템에 제공해야 할 요구사항
요구사항 개발 프로세스
- 도출(Elicitation)
- 요구사항이 어딨고, 어떻게 수집할 것인지 식별하고 이해하는 과정
- 인터뷰, 설문, 브레인스토밍, 워크샵, 프로토타이핑, 유스케이스
- 분석(Analysis)
- 요구사항 중 명확하지 않거나 이해되지 않는 부분을 발견하고 이를 걸러내기 위한 과정
- 기법
- 요구사항 분류 (Requirements Classification)
- 개념 모델링 (Conceptual Modeling)
- 요구사항을 개념적으로 표현한 것을 모델, 이러한 모델을 만드는 과정이 모델링.
- 유스케이스 다이어그램, 데이터흐름 모델, 상태 모델, 목표 기반 모델, 사용자 인터랙션, 객체 모델, 데이터 모델 등..
- 표기는 주로 UML(Unifield Modeling Language 통합 모델링 언어) 사용
- 요구사항 할당 (Allocation)
- 요구사항을 만족시키기 위한 구성 요소를 식별하는 것
- 요구사항 협상 (Negotiation)
- 요구사항이 서로 충돌될 경우 적절히 해결하는 과정
- 우선순위를 부여하면 도움
- 정형 분석 (Formal Analysis)
- 구문(Syntax)과 의미(Semantics)를 갖는 정형화된 언어를 이용해 요구사항을 수학적 기호로 표현한 후 이를 분석하는 과정.
- 분석 단계 중 마지막 단계에서 이뤄짐.
- 명세(Specification)
- 요구사항을 체계적으로 분석 후 승인될 수 있도록 문서화하는 것
- 확인(Validation)
- 요구사항 명세서가 정확하고 완전히 작성됐는지 검토하는 활동
- 기법
- 요구사항 검토(Reviews)
- 문서화된 요구사항을 훑어보며 확인하는 것
- 프로토타이핑(Prototyping)
- 초기 도출된 요구사항을 토대로 프로토타입(Prototype)을 만든 후 대상 시스템 개발이 진행되는 동안 도출되는 요구사항을 반영하며 지속적으로 프로토타입을 재작성하는 것.
- 장점
- 빠르게 제작 가능. 반복된 제작을 통해 발전된 결과물 도출 가능
- 최종 시스템 완성 전 추가/변경 요구사항이나 아이디어 등에 대한 피드백 가능
- 이해하기 쉬워 사용자/개발자 혹은 개발자/개발자 사이의 원활한 의사소통 가능
- 개발될 시스템 사용에 대한 문제점을 시스템 완성 전 식별 가능
- 프로토타입이 개선될수록 변동 가능한 요구사항들 감소
- 단점
- 사용자의 관심이 핵심에서 벗어나 프로토타입에 집중될 수 있음
- 개발 대상의 일부만을 대상으로 프로토타입이 제작된 경우, 대상 범위를 잘못 이해해 사용성이 과대평가될 수 있음
- 지속적이고 반복적인 프로토타입의 개선으로 인한 비용 부담
- 모델 검증(Model Verification)
- 요구사항 분석 단계에서 개발된 모델이 요구사항을 충족시키는지 검증하는 것.
- 분석 도구를 사용해 확인하는 정적 분석을 수행하는 것이 유용
- 인수 테스트(Acceptance Tests)
- 사용자가 실제로 사용될 환경에서 요구사항들이 모두 충족되는지 사용자 입장에서 확인하는 과정
- 사용자 인수 테스트, 운영상 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파 검사, 베타 검사
- 요구사항 검토(Reviews)
UML
시스템 개발 과정에서 개발자와 고객 또는 개발자 간 의사소통이 원활히 이뤄지도록 표준화한 대표적 객체지향 모델링 언어
사물
모델을 구성하는 가장 중요한 기본 요소.
- 구조 사물(Structural Things)
- 시스템의 개념적, 물리적 요소 표현
- 클래스, 유스케이스, 컴포넌트, 노드 등
- 행동 사물(Behavioral Things)
- 시간과 공간에 따른 요소들의 행위 표현
- 상호작용, 상태 머신 등
- 그룹 사물
- 요소들을 그룹으로 묶어 표현
- 패키지
- 주해 사물 (Annotation Things)
- 부가적 설명이나 제약조건 표현
- 노트
관계
다중도
- 1 : 1개의 객체가 연관
- n : n개의 객체가 연관
- 0..1 : 연관된 객체가 없거나 1개
- 0..* 또는 * : 연관된 객체가 없거나 다수
- 1..* : 연관된 객체가 적어도 1개 이상
- n..* : 연관된 객체가 적어도 n개 이상
- n..m : 연관된 객체가 최소 n개에서 최대 m개이다.
연관(Association) 관계
2개 이상의 사물이 서로 관련되어 있음을 표현
ex)
1 1
사람────>집
사람이 집 소유. 사람은 자기가 소유하는 집을 알지만 집은 누구에 의해 자신이 소유되는지 모름
사람 쪽에 표기된 다중도가 1이므로 집은 한 사람에 의해서만 소유될 수 있음
집 쪽에 표기된 다중도가 1이므로 사람은 집을 한 채만 소유할 수 있음
ex2)
1..* 1..*
선생님────학생
선생님과 학생은 서로 관계가 있음. (누구의 소유 관계 x)
선생님은 적어도 한 명 이상의 학생으로부터 관계가 있다.(가르친다.)
학생은 적어도 한 명 이상의 선생님으로부터 관계가 있다.(배운다.)
집합(Aggregation) 관계
하나의 사물이 다른 사물에 포함되어 있는 관계.
ex)
컴퓨터◇────프린터
프린터는 컴퓨터에 연결해 사용할 수 있으며, 다른 컴퓨터에 연결해서 사용할 수도 있다.
포함(Compostion) 관계
집합 관계의 특수한 형태. 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계
ex)
문◆────열쇠
문을 열 수 있는 키는 하나이다. 해당 키로 다른 문은 열 수 없으며, 문이 없어지면 키도 더 이상 필요하지 않다.
일반화(Generalization) 관계
하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 표현
ex)
동물
◁ ▷
/ \ (실선으로 표현)
사자 호랑이
동물에는 사자와 호랑이가 있다.
의존(Dependency) 관계
사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 고나계
ex)
등급--------->할인율 (점선으로 표현)
등급이 높으면 할인율을 적용, 낮으면 적용하지 않는다.
실체화(Realization) 관계
사물이 할 수 있거나 해야 하는 기능(행위, 인터페이스)으로 서로를 그룹화 할 수 있는 관계
ex)
날 수 있는
◁ ▷
/ \ (점선으로 표현)
/ \
/ \
비행기 새
다이어그램(Diagram)
사물의 관계를 도형으로 표현.
정적 모델링
- 사용자가 요구한 기능을 구현하는데 필요한 자료들의 논리적 구조를 표현한 것.
- 구조적 다이어그램을 사용하여 표현
- 클래스 다이어그램
- 클래스와 클래스가 갖는 속성, 클래스 사이 관계 표현
- 시스템 구조 파악, 구조상 문제점 도출 가능
- UML을 이용한 대표적 정적 모델링
클래스 다이어그램 - 구성 요소
- 클래스
- 클래스 이름, 속성, 오퍼레이션 3개 구획으로 표현. 그 중 속성과 오퍼레이션은 생략 가능
- 속성 : 클래스의 상태나 정보 표현
- 일반 형식 : [접근 제어자] 속성명 : 자료형 [다중성(배열)][=초기값] (대괄호내 값은 생략 가능)
- 접근 제어자
- public : +
- private : -
- protected : #
- package ~
- 접근 제어자
- 일반 형식 : [접근 제어자] 속성명 : 자료형 [다중성(배열)][=초기값] (대괄호내 값은 생략 가능)
- 오퍼레이션 : 클래스가 수행할 수 있는 동작. 함수라고도 한다.
- 일반 형식 : [접근제어자] 오퍼레이션명(매개변수1 : 자료형1, 매개변수 2 : 자료형 2, ...) : 반환자료형
- 제약조건 : 속성에 입력될 값에 대한 제약조건이나 오퍼레이션 수행 전후 지정해야 할 조건
- 관계 : 클래스와 클래스 사이 연관성 표현 (UML에서 학습한 관계와 같다.)
- 클래스
- 객체 다이어그램
- 클래스에 속한 객체들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이 고나계로 표현
- 컴포넌트 다이어그램
- 컴포넌트 간의 관계나 컴포넌트 간 인터페이스 표현. 구현 단계에서 사용
- 배치 다이어그램(Deployment)
- 물리적 요소들의 위치 표현. 구현 단계에서 사용
- 복합체 구조 다이어그램(Compositive Structure)
- 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
- 패키지 다이어그램
- 유스케이스나 클래스 등 모델 요소들을 그룹화한 패키지들의 관계 표현
- 클래스 다이어그램
동적 모델링
- 시스템의 내부 구성요소들의 상태가 시간의 흐름에 따라 변화하는 과정과 변화하는 과정에서 발생하는 상호 작용을 표현한 것
- 행위 다이어그램을 사용하여 표현
- 유스케이스 다이어그램
- 사용자의 요구를 분석하는 것. 기능 모델링(사용자 요구사항을 분석해 개발될 시스템이 갖춰야 할 기능을 정리 후 사용자와 정리된 내용을 공유하기 위해 표현하는 것) 작업에 사용
- User와 Use Case로 구성되며 Use Case간 여러 형태의 관계로 이뤄짐
유스케이스 다이어그램 - 구성 요소
- 시스템 범위 : 시스템 내부에서 수행되는 기능들을 외부 시스템과 구분하기 위한 범위
- 액터
- 시스템과 상호작용을 하는 모든 외부 요소.
- 주액터
- 시스템을 사용함으로써 이득을 얻는 대상
- 부액터
- 주액터의 목적 달성을 위해 시스템에 서비스를 제공하는 외부 시스템
- 유스케이스
- 사용자가 보는 관점에서 시스템이 액터에게 제공하는 서비스 또는 기능
- 더 이상 분할되지 않는 기능의 단위
- 액터에 의해 수행되며, 액터가 관찰할 수 있는 결과 산출
- 유스케이스 명세서
- 유스케이스 안에서 액터와 시스템 간 상호 작용 과정을 글로 자세히 표현한 것.
- 각 유스케이스 명세서에 작성된 사건 흐름을 참고해 활동 다이어그램 작성
- 관계
- 액터 - 유스케이스, 유스케이스 - 유스케이스간 나타날 수 있다.
- 포함 관계
- 두 개 이상의 유스케이스에 공통적으로 적용되는 기능을 별도로 분리해 새로운 유스케이스로 만든 경우, 원래의 유스케이스와 새롭게 분리된 유스케이스와의 관계
- 확장 관계
- 유스케이스가 특정 조건에 부합돼 유스케이스의 기능이 확장될 때 원래의 유스케이스와 확장된 유스케이스간의 관계
- 일반화 관계
- 유사한 액터나 유스케이스를 하나의 그룹으로 묶고 싶을 때 그보다 일반적인 액터나 유스케이스를 만ㄷ르어 이들을 연결하여 표현하는 관계
- 시퀀스 다이어그램
- 시스템이나 객체들이 주고받는 메시지 표현
시퀀스 다이어그램 - 구성 요소
- 액터 : 시스템으로부터 서비스를 요청하는 외부 요소
- 객체 : 메시지를 주고받는 주체
- 라이프라인 : 객체가 메모리에 존재한느 기간
- 활성 상자 : 객체가 메시지를 주고받으며 구동되고 있음을 표현
- 메시지
- 객체가 상호 작용을 위해 주고받는 메시지.
- 종류
의미 : 동기
기능 : 메시지를 보낸 후 결과가 반환될 때까지 기다린다. 의미 : 비동기
기능 : 메시지를 보낸 후 결과가 반환될 때까지 기다리지 않고 다른 작업을 수행함. 의미 : 생성
기능 : 메시지를 받는 새로운 객체 생성 의미 : 응답
기능 : 동기 메시지에 대한 수행 결과
- 객체 소멸 : 해당 객체가 더 이상 메모리에 존재하지 않음을 의미
- 프레임 : 다이어그램 전체 또는 일부를 묶어 표현
- 커뮤니케이션 다이어그램
- 객체들이 주고받는 메시지뿐만 아니라 객체들 간 연관까지 표현\
커뮤니케이션 다이어그램 - 액터 : 시스템으로부터 서비스를 요청하는 외부 요소
- 객체 : 메시지를 주고받는 주체
- 링크 : 객체들 간의 관계를 표현하는 데 사용
- 메시지 : 객체가 상호 작용을 위해 주고받는 메시지. 시퀀스 다이어그램에서와 동일하다.
- 상태 다이어그램
- 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 상호 작용에 따라 상태가 어떻게 변화하는지 표현
상태 다이어그램 - 구성 요소
- 상태 : 객체의 상태 표현
- 시작 상태 : 상태 시작 표현
- 종료 상태 : 상태 종료 표현
- 상태 전환 : 상태 사이의 흐름.
- 이벤트 : 상태에 변화를 주는 현상
- 프레임 : 상태 다이어그램 범위 표현
- 상태 : 객체의 상태 표현
- 활동 다이어그램
- 어떤 기능을 수행하는지 객체 처리 로직이나 조건에 따른 처리 흐름을 순서에 따라 표현
활동 다이어그램 - 구성요소
- 액션 / 액티비티 : 액션은 더 이상 분해될 수 없는 단일 작업, 액티비티는 몇 개의 액션으로 분리될 수 있는 작업.
- 제어 흐름 : 실행의 흐름 표현
- 노드
- 시작 노드
- 액션이나 액티비티가 시작됨을 의미
- 종료 노드
- 액티비티 안의 모든 흘므이 종료됨을 의미
- 조건 노드
- 조건에 따라 제어의 흐름이 분리됨을 표현
- 병합 노드
- 여러 경로의 흐름이 하나로 합쳐짐을 표현
- ※ 조건 노드와 병합 노드 둘 다 마름모로 표현. 들어오는 제어 흐름이 하나면 조건, 여러 개면 병합.
- 포크 노드
- 액티비티의 흐름이 분리되어 수행됨을 표현
- 조인 노드
- 액티비티의 흐름이 다시 합쳐짐을 표현
- ※ 포크 노드와 조인 노드 둘 다 굵은 선으로 표현. 들어오는 액티비티 흐름이 하나면 포크, 여러 개면 조인
- 시작 노드
- 스윔레인 : 액티비티 수행 담당 주체 구분
- 상호작용 개요 다이어그램(Interaction Overview)
- 상호작용 다이어그램 간 제어 흐름 표현
- 타이밍 다이어그램
- 객체 상태 변화와 시간 제약을 명시적으로 표현
- 유스케이스 다이어그램
'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글
6장 화면 설계 (0) | 2021.07.02 |
---|---|
5장 서버 프로그램 구현 (0) | 2021.06.29 |
4장 통합 구현 (0) | 2021.06.27 |
3장 데이터 입*출력 구현 (0) | 2021.06.27 |
1장 프로그래밍 언어 활용 (0) | 2021.06.14 |