저번 포스팅인 요구사항 확인(1) 부분을 다시 읽어보니 너무 장황하게 쓴 것 같은 느낌을 받았다.. 그래서 이번에는 최대한 깔끔하고 보기 쉽게 작성하려한다.
요구사항은 크게 기능과 비기능으로 구분할 수 있다.
유형 | 내용 |
---|---|
1. 기능 요구사항 (Funtional requirements) | - 시스템이 무엇을 하는지, 어떤 기능을 하는지에 대한 사항 - 시스템이 반드시 수행해야 하는 기능 |
2. 비기능 요구사항 (Non-Funtional requirements) | - 시스템 장비 구성 요구사항 : 하드웨어, 소프트웨어, 네트워크 등 - 성능 요구사항 : 처리 속도 및 시간, 처리량, 동적/정적 적용량, 가용성 등 - 인터페이스 요구사항 : 사용자와 인터페이스에 대한 요구사항 - 데이터 요구사항 : 데이터를 구축하기 위해 필요한 요구사항 - 테스트 요구사항 : 제대로 운영되는지를 테스트하고 점검하기 위한 요구사항 - 보안 요구사항 : 데이터, 기능, 운영 접근을 통제하기 위한 요구사항 - 품질 요구사항 : 관리가 필요한 품질 항목, 평가 대상에 대한 요구사항으로 가용성, 정합성, 상호 호환성, 대응성, 신뢰성, 사용성, 유지관리성, 이식성, 확장성, 보안성 등으로 구분하여 기술 - 제약사항 : 설계, 구축 운영과 관련한 제약조건 - 프로젝트 관리 요구사항 : 프로젝트에 원활한 수행을 위한 방법에 대한 요구사항 - 프로젝트 지원 요구사항 : 원활한 수행을 위한 지원 사항이나 방안에 대한 요구사항 |
3. 사용자 요구사항 (User requirements) | - 시스템이 무엇을 하는지, 어떤 기능을 하는지에 대한 사항 - 시스템이 반드시 수행해야 하는 기능 |
4. 시스템 요구사항 (System requirements) | - 시스템이 무엇을 하는지, 어떤 기능을 하는지에 대한 사항 - 시스템이 반드시 수행해야 하는 기능 |
💡가용성
사용하고자 할 때 언제라도 사용할 수 있는 정도
💡정합성
데이터의 값이 서로 모순 없이 일관되게 일치
💡상호 호환성
다른 소프트웨어와 정보를 교환할 수 있는 정도
💡대응성
발생한 상황에 대처하는 정도
💡이식성
다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정될 수 있는 정도
💡확장성
규모나 범위를 넓힐 수 있는 정도
요구사항은 도출 ➜ 분석 ➜ 명세 ➜ 확인 과정을 거치는데, 각 단계에서 무엇을 수행하는지 살펴보자.
1. 요구사항 도출 (Requirement Elicitation, 요구사항 수집)
서로의 의견이 어디에 있는지, 어떻게 수집할 것인지 식별하고 이해하는 과정이다.
💡유스케이스
사용자의 요구사항을 기능 단위로 표현하는 것
2. 요구사항 분석(Requirement Analysis)
요구사항 중 명확하지 않거나 모호한 부분은 걸러내기 위한 과정
💡자료 흐름도 (DFD: Data Flow Diagram)
요구사항 분석에서 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법
💡자료 사전 (DD: Data Dictionary)
자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것
자세한 내용은 '7. 요구사항 분석' 부분에서 다룰 예정이다.
3. 요구사항 명세 (Requirement Analysis)
요구사항 명세는 명확하지 않거나 모호해 이해되지 않는 부분을 발견하고 걸러내기 위한 과정
구분 | 정형 명세 기법 | 비정형 명세 기법 |
---|---|---|
기법 | 수학적 원리, 모델 기반 | 상태/기능/객체 중심 |
작성방법 | 수학적 기호, 정형화된 표기법 | 일반 명사, 동사 등의 자연어 기반 또는 다이어그램으로 작성 |
특징 | - 요구사항을 정확하고 간결하게 표현 - 결과가 작성자에 관계없이 일관성이 있으므로 완전성 검증 가능 - 표기법이 어려워 사용자가 이해하기 어려움 | - 자연어 사용 으로 결과가 작성자에 따라 다를 수 있어 일관성이 떨어짐, 해석 달라짐 - 내용 이해가 쉬워 의사소통이 용이 |
종류 | VDM, Z, Petri-net, CSP 등 | FSM, Decision Table, ER모델링, State Chart(SADT) 등 |
4. 요구사항 확인(Requierment Validation, 요구사항 검증)
개발 자원을 요구사항에 할당하기 전, 명세서가 정확하고 완전하게 작성되었는지 검토하는 활동
💡 형상 관리(SCM: Software Confi-guration Management)
소프트웨어의 개발 과정에서 만들어지는 형상들의 변경 사항을 관리하는 일려의 활동
소프트웨어 개발의 실제적인 첫 단계로 사용자의 요구사항을 이해하고 문서화(명세화)하는 활동
자료의 흐름과 처리를 중심으로 하는 방법
💡 하향식 방법
소프트웨어의 기능을 전체적인 수준에서 상세 수준까지 위에서 아래로 단계별로 분리하여 모델링하는 것
요구사항 분석에서 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법 (자료 흐름 그래프, 버블 차트라고도 함)
💡 자료의 흐름
각 절차에 따라 컴퓨터 기반의 시스템 내부를 흘러다니는데, 이를 자료의 흐름이라 함
자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것
이처럼 데이터를 설명하는 데이터를 데이터의 데이터 또는 메타 데이터(Meta Data)라고 함
기호 | 의미 |
---|---|
= | 자료의 정의: is composed of |
+ | 자료의 연결: and |
( ) | 자료의 생략: Optional |
[ | ] | 자료의 선택: or |
{ } | 자료의 반복: Iteration of |
* * | 자료의 설명: Commant |
요구사항을 자동으로 분석하고, 명세서를 기술하도록 개발된 도구를 의미한다.
요구사항 분석을 위한 자동화 도구 종류 : SADT, SREM, ASL/PSA, TAGS, EPOS 등이 있다.
1. SADT (Structured Analysis and Design Technique)
2. SREM (Software Requirements Engineering Methodology) = RSL/REVS
💡 SRL(Requirement StateMent Language)
요소, 속성, 관계, 구조들을 기술하는 요구사항 기술 언어
💡 REVS(REquirement Engineering and Validation System)
RSL로 기술된 요구사항들을 자동으로 분석하여 명세서 출력하는 분석기
3. PSL/PSA
💡 PSL (Problem Statement Language)
문제 / 요구사항 기술 언어
💡 PSA (Problem Statement Analyzer)
PSL로 기술한 요구사항을 자동으로 분석하여 보고서를 출력하는 분석기
4. TAGS(Technology for Automated Generation of Systems)
시스템의 분석 및 설계나 문서화할 때 사용되는 기법 (입력, 처리, 출력 기능)
HIPO CHart의 종류
1. 가시적 도표(도식 목차, Visual Table of Contents)
시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도
2. 총체적 도표(총관도표, 개요도표, Overview Diagram)
프로그램을 구성하는 기능을 기술
입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표
3. 세부적 도표(상세 도표, Detail Diagram)
총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술
시스템 분석, 설계, 구현 등 개발과정에서 개발자와 고객 또는 개발자 상호간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어
💡 모델링 언어
우리가 만들고자 하는 것을 시각적으로 표현할 수 있는 표기법, 도구 등을 의미
1. 사물(Things)
사물에는 구조 사물, 행동 사물, 그룹 사물, 주해 사물이 있다.
사물 | 내용 | 예 |
---|---|---|
구조 사물 Structural Things | 시스템의 개념적, 물리적 요소 표현 | Class, Use Case, Component, Node 등 |
행동 사물 Behavioral Things | 시간과 공간에 따른 요소들의 행위 표현 | Interaction(상호작용), State Machine 등 |
그룹 사물 Grouping Things | 요소들을 그룹으로 묶어서 표현 | Package |
주해 사물 Annotation Things | 부가적인 설명이나 제약조건 등을 표현 | Note |
💡 Component
문서, 소스코드, 파일, 라이브러리 등과 같은 모듈화된 자원으로 재사용이 가능함
2. 관계(Relationships)
관계에는 연관 관계, 집합 관계, 집합 관계, 일반화 관계, 의존 관계, 실체화 관계 등이 있다.
✅ 연관 관계 (Association)
✅ 집합 관계 (Aggregation)
✅ 포함 관계 (Composition)
✅ 일반화 관계 (Generalization)
✅ 의존 관계 (Dependency)
✅ 실체화 관계 (Realization)
✅ 구조적 다이어그램 (Structural) - 정적 모델링
다이어그램 | 내용 |
---|---|
클래스 다이어그램 Class Diagram | - 클래스와 클래스가 가지고 있는 속성, 클래스 사이의 관계를 표현함 - 시스템 구조를 파악하고 문제점 도출 가능 |
객체 다이어그램 Object Diagram | - 클래스에 속한 사물들, 즉 인스턴스를 특정 시점의 객체와 객체 사이의 관계로 표현 - 럼바우 객체지향 분석 기법에서 객체 모델링에 활용 됨 |
컴포넌트 다이어그램 Component Diagram | - 실제 구현 모델인 컴포넌트 간의 관계, 인터페이스를 표현 - 구현 단계에서 사용 |
배치 다이어그램 Deployment Diagram | - 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현 - 노드와 의사소통(통신) 경로를 표현 - 구현 단계에서 사용 |
복합체 구조 다이어그램 Composite Structure Diagram | - 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현 |
패키지 다이어그램 Package Diagram | - 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현 |
✅ 행위 다이어그램 (Behavioral) - 동적 모델링
다이어그램 | 내용 |
---|---|
유스케이스 다이어그램 Use Case Diagram | - 사용자의 요구 분석, 기능 모델링 작업에 사용 - 사용자와 사용 사례로 구성(여러 형태의 관계로 이루어짐) |
순차 다이어그램 Sequence Diagram | - 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현 |
커뮤니케이션 다이어그램 Communication Diagram | - 순차 다이어그램과 같이 동작에 참여하는 객체들이 주고받는 메시지를 표현하는데, 뿐만 아니라 객체들 간의 연관까지 표현 |
상태 다이어그램 State Diagram | - 변화 혹은 상호작용에 따라 객체가 어떻게 변화하는지 표현 -럼바우 객체지향 분석 기법에서 동적 모델링에 활용 |
활동 다이어그램 Activity Diagram | - 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현 |
상호작용 개요 다이어그램 Interaction Overview Diagram | - 상호작용 다이어그램 간의 제어 흐름을 표현 |
타이밍 다이어그램 Timing Diagram | - 객체 상태 변화와 시간 제약을 명시적으로 표현 |
UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하기 위해 사용
유스케이스 다이어그램, 클래스 다이어그램, 순차 다이어그램에 대해 알아보겠다.
개발될 시스템과 관련된 외부 요소들, 즉 사용자와 다른 외부 시스템들이 개발될 시스템을 이용해 수행할 수 있는 기능을 사용자의 관점에서 표현한 것
유스케이스 다이어그램 구성요소
1. 시스템 / 시스템 범위(System/System Scope)
시스템 내부에서 수행되는 기능들을 외부 시스템과 구분하기 위해 내부 유스케이스들을 사각형으로 묶어 시스템의 범위를 표현함
2. 액터(Actor)
시스템과 상호작용하는 모든 외부 요소 (사람, 외부 시스템 등)
주액터) 시스템을 사용함으로써 이득을 얻는 대상(사람)
부액터) 주액터의 목적 달성을 위해 서비스 제공하는 외부시스템(조직, 기관)
3. 유스케이스(Use Case)
사용자가 보는 관점에서 시스템이 액터에게 제공하는 서비스 또는 기능을 표현
4. 관계(Relationship)
유스케이스 다이어그램에서의 관계는 액터와 유스케이스, 유스케이스와 유스케이스 사이에서 나타날 수 있으며, 연관 관계, 포함 관계, 확장 관계, 일반화 관계를 표현할 수 있음
💡 포함 관계
두 개 이상의 유스케이스에 공통적으로 적용되는 기능을 별도로 분리하여 새로운 유스케이스로 만든 경우, 새롭게 분리된 유스케이스와 관계를 포함 관계라고 함
💡 확장 관계
유스케이스가 특정 조건에 부합되 기능이 확장 될 때 그 관계를 확장 관계라고 한다.
시스템을 구성하는 클래스, 클래스의 특성인 속성과 오퍼레이션, 속성과 오퍼레이션에 대한 제약조건, 클래스 사이의 관계를 표현한 것이다.
클래스 다이어그램 구성요소
1. 클래스(Class)
- 각각의 객체들이 갖는 속성과 오퍼레이션(동작)을 표현함
- 일반적으로 3개의 구획(Compartment)으로 나눠 클래스의 이름, 속성, 오퍼레이션을 표기함
- 속성: 클래스의 상태나 정보 표현
- 오퍼레이션 : 클래스가 수행할 수 있는 동작으로, 함수라고도 함
2. 제약조건
속성에 입력될 값에 대한 제약 조건이나 오퍼레이션 수행 전후에 지정해야 할 조건이 있다면 이를 적음
3. 관계(Relationship)
클래스와 클래스 사이의 연관성을 표현
클래스 다이어그램을 표현하는 관계에는 연관 관계, 집합 관계, 포함 관계, 일반화 관계, 의존 관계가 있음
💡 접근제어자
- public ➜ +
- private ➜ -
- protected ➜ #
- package ➜ ~
시스템이나 객체들이 메시지를 주고받으며 시간의 흐름에 따라 상호 작용하는 과정을 액터, 객체 메시지 등의 요소를 사용해 그림으로 표현한 것
순차 다이어그램 구성요소
1. 액터(Actor)
시스템으로부터 서비스를 요청하는 외부 요소(사람, 외부 시스템)
2. 객체(Object)
메시지를 주고받는 주체
3. 생명선(Lifeline)
객체 메모리에 존재하는 기간, 객체 아래쪽에 점선을 그어 표현
4. 실행 상자(Active Box)
객체가 메시지를 주고받으며 구동되고 있음을 표현
5. 메시지(Message)
객체가 상호 작용을 위해 주고받는 메시지
지금까지 1과목 소프트웨어 설계 에서 1장인 요구사항 확인에 대해 정리해봤다.
나는 지금 2과목을 공부중인데 정리하는 건 생각보다 오래 걸려서 아직 1과목에 1장이다..
이 글을 볼 수도 있는 블로그 이용자들이 다시 봤을 때 정리하면서 볼 수 있게 하고싶은데 (그래도 정리하면서 나한테는 도움이 된다...ㅎ) 생각보다 너무 어렵고 시간도 오래 걸리는 것 같다.
... 마무리
다음엔 2장 화면 설계로 돌아오게따!