자격증/정보처리기사

[정보처리기사 #1] 요구사항 확인

승요나라 2024. 4. 15. 23:23

* 교재의 각 세션은 중요도에 따라 A, B, C, D 로 등급이 분류되어 있습니다.

* 해당 포스팅은 아래 교재의 A, B 등급을 골라 재정리한 내용입니다.

 

(2023 교재 기준)

A : 매 시험마다 꼭 나올 것으로 예상되는 부분

B : 두 번 시험 보면 한 번은 꼭 나올 것으로 예상되는 부분

C : 세 번 시험 보면 한 번은 꼭 나올 것으로 예상되는 부분

D : 출제 범위에는 포함되지만 아직 출제되지 않은 부분

 

정보처리기사 실기 [2023 시나공]

 

 

 

 

* ⭐ : 교재가 필요한 내용

[[B]] 소프트웨어 생명 주기

소프트웨어 생명 주기 (Software Life Cycle)

: 소프트웨어를 개발하기 위한 설계, 운용, 유지보수 등의 과정을 각 단계별로 나눈 것

 

폭포수 모형 (Waterfall Model)

: 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후 다음 단계를 진행

- 가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명 주기 모형

- 고전적 생명 주기 모형

- 각 단계 후에는 결과물이 명확하게 산출되어야 함

 

프로토타입 모형 (Prototype Model, 원형 모형)

: 실제 개발될 소프트웨어의 견본품(Prototype)을 만들어 최종 결과물을 예측

 

나선형 모형 (Spiral Model, 점진적 모형)

: 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발

- 보헴(Boehm)이 제안

- 폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형

- 누락되거나 추가된 요구사항을 첨가할 수 있음

- 유지보수 과정 필요 X

 

애자일 모형 (Agile Model)

: 민접한, 기민한; 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하며 개발

- 폭포수 모형과 대조적

- 대표적인 개발 모형

  • 스크럼 (Scrum)
  • XP (eXtreme Programming)
  • 칸반 (Kanban)
  • Lean
  • 기능 중심 개발 (FDD; Feature Driven Development)

- 애자일 개발의 4가지 핵심 가치

  • 프로세스, 도구 < 개인, 상호작용
  • 방대한 문서 < 실행되는 SW
  • 계약 협상 < 고객과 협업
  • 계획 따르기 < 변화에 반응

 

소프트웨어 공학 (SE; Software Engineering)

: 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문

- 소프트웨어 공학의 기본 원칙

  1. 현대적인 프로그래밍 기술을 계속적으로 적용해야 한다.
  2. 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 한다.
  3. 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 한다.

 

 

[[B]] XP(eXtreme Programming) 기법

: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법

- 빠르게 개발하는 것이 목적

- 릴리즈 기간을 짧게 반복함

 

XP의 5가지 핵심 가치

의단용존피

  • 의사소통 (Communication)
  • 단순성 (Simplicity)
  • 용기 (Courage)
  • 존중 (Respect)
  • 피드백 (Feedback)

 

XP 개발 프로세스

  1. 릴리즈 계획 수립 (Release Planning) : 부분 혹은 전체 개발 완료 시점에 대한 일정을 수립하는 것
  2. 이터레이션 (Iteration, 주기) : 실제 개발 작업을 진행하는 과정, 보통 1~3주 기간
  3. 승인 검사 (Acceptance Test, 인수 테스트) : 부분 완료 제품이 구현되면 수행하는 테스트
  4. 소규모 릴리즈 (Small Release) : 요구사항에 유연하게 대응할 수 있도록 릴리즈의 규모를 축소한 것

 

XP의 주요 실천 방법 (Practice)

  • Pair Programming (짝 프로그래밍) : 다른 사람과 함께 프로그래밍을 수행
  • Collective Ownership (공동 코드 소유) : 개발 코드에 대한 권한과 책임을 공동으로 소유
  • Test-Driven Development (테스트 주도 개발) : 실제 코드 작성 전에 테스트 케이스를 먼저 작성하여 자신이 무엇을 해야할지를 정확히 파악함
  • Whole Team (전체 팀) : 개발에 참여하는 모든 구성원(고객 포함)들은 각자 자신의 역할이 있고, 역할에 대한 책임을 가져야 함
  • Continuous Integration (계속적인 통합) : 코드는 하나의 작업이 마무리될 때마다 지속적으로 통합
  • Refactoring (리팩토링) : 기능의 변경 없이 시스템을 재구성 (목적: 프로그램을 쉽게 이해, 쉽게 수정하여 빠르게 개발할 수 있도록 하기 위해서)
  • Small Releases (소규모 릴리즈) : 릴리즈 기간을 짧게 반복

 

 

[[A]] 요구사항 정의

요구사항

: 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한 제약조건

 

요구사항의 유형

  • 기능 요구사항 (Functional requirements) :기능, 수행
  • 비기능 요구사항 (Non-functional requirements) : 품질, 제약사항 (성능 포함)
  • 사용자 요구사항 (User requirements) : 사용자 관점
  • 시스템 요구사항 (System requirements) : 개발자 관점 (== 소프트웨어 요구사항)

 

 

[[B]] 요구사항 개발 프로세스

: 개발 대상에 대한 요구사항을 체계적으로 도출하고 분석한 후 명세서에 정리한 다음 확인 및 검증하는 일련의 구조화된 활동

- 요구사항 개발 프로세스가 진행되기 전 타당성 조사가 선행되어야 함

- 요구사항 개발은 요구공학(Requirement Engineering)의 한 요소임

 

도분명확

  1. 도출 (Elicitation)
  2. 분석 (Analysis)
  3. 명세 (Specification)
  4. 확인 (Validation)

 

요구사항 도출 (Requirement Elicitation, 요구사항 수집)

: 시스템 개발에 관련된 사람들이 서로 의견을 교환하여 요구사항을 어떻게 수집할 것인지를 식별하고 이해하는 과정

- 개발자와 고객 사이의 관계가 만들어지고 이해관계자(Stakeholder)가 식별됨

- 소프트웨어 개발 생명 주기(SDLC) 동안 지속적으로 반복됨

 

요구사항을 도출하는 주요 기법

: 청취와 인터뷰, 설문, 브레인스토밍, 워크샵, 프로토타이핑, 유스케이스

 

요구사항 분석 (Requirement Analysis)

: 사용자의 요구사항 중 모호하여 이해되지 않는 부분을 발견하고 걸러내기 위한 과정

- 요구사항의 타당성을 조사하고 비용과 일정에 대한 제약을 설정함

- 서로 상충되는 요구사항이 있으면 이를 중재하는 과정임

 

요구사항 분석에 사용되는 대표 도구

  • 자료 흐름도 (DFD)
  • 자료 사전 (DD)

 

요구사항 명세 (Requirement Specification)

: 분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것

- 기능 요구사항을 빠짐없이 기술함

- 비기능 요구사항은 필요한 것만 기술함

- 구체적인 명세를 위해 소단위 명세서(Mini-Spec)가 사용될 수 있음

 

요구사항 확인 (Requirement Validation, 요구사항 검증)

: 요구사항 명세서가 정확하고 완전하게 작성되었는지 검토하는 활동

- 이해관계자들이 검토해야 함

- 요구사항 관리 도구를 이용하여 요구사항 정의 문서들에 대해 형상 관리(SCM)를 수행함

 

요구공 (Requirements Engineering)

: 요구사항을 정의하고, 분석 및 관리하는 프로세스를 연구하는 학문

- 요구사항 변경의 원인과 처리 방법을 이해하고 요구사항 관리 프로세스의 품질을 개선하여 소프트웨어 프로젝트 실패를 최소화하는 것을 목표로 함

 

요구사항 명세 기법 (정형 VS 비정형)

구분 정형 명세 기법 비정형 명세 기법
기법 수학적 원리 기반, 모델 기반 상태/기능/객체 중심
작성 방법 수학적 기호, 정형화된 표기법 자연어 기반 서술, 다이어그램
특징 - 정확, 간결하게 표현
- 일관성 O
- 표기법이 어려워 사용자가 이해하기 어려움
- 자연어 사용으로 인해 일관성 X
- 해석이 달라질 수 있음
- 내용의 이해가 쉬워 의사소통이 용이함
종류 VDM, Z, Petri0net, CSP 등 FSM, Decision Table, ER모델링, State Chart(SADT) 등

 

 

[[B]] 요구사항 분석 (Requirement Analysis)

: 소프트웨어 개발의 실질적인 첫 단계, 사용자의 요구사항을 이해하고 문서화하는 활동

- 사용자 요구의 타당성을 조사하고 비용과 일정에 대한 제약을 설정함

- 사용자의 요구를 정확하게 추출하여 목표를 정함

 

구조적 분석 기법

: 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 기법

- 도형 중심의 분석용 도구와 분석 절차를 이용하여 사용자의 요구사항을 파악하고 문서화함

- 하향식 방법

- 분석의 중복을 배제할 수 있음

 

주요 구조적 분석 기법 도구

  • 자료 흐름도 (DFD)
  • 자료 사전 (DD)
  • 소단위 명세서 (Mini-Spec.)
  • 개체 관계도 (ERD)
  • 상태 전이도 (STD)
  • 제어 명세서

 

자료 흐름도 (DFD; Data Flow Diagram) == 자료 흐름 그래프, 버블 차트

: 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법

 

자료 흐름도 기본 기호

  • 프로세스 (Process) : 원 또는 모서리가 둥근 사각형
  • 자료 흐름 (Data Flow) : 화살표
  • 자료 저장소 (Data Store) : 양 옆이 뚫린 사각형 또는 한쪽 옆이 뚫린 사각형
  • 단말 (Terminator) : 직사각형 또는 겹쳐진 직사각형들

 

자료 사전 (DD; Data Dictionary)

: 자료 흐름도에 있는 자료를 정의하고 기록한 것

- 데이터를 설명하는 데이터

  (== 데이터의 데이터, 메타 데이터(Meta Data))

 

자료 사전에서 사용되는 표기 기호

  • = : 자료의 정의 (is composed of)
  • + : 자료의 연결 (and)
  • ( ) : 자료의 생략 (Optional)
  • [ ] : 자료의 선택 (or)
  • { } : 자료의 반복 (Iteration of)
  • * * : 자료의 설명=주석 (Comment)

 

 

[[B]] UML (Unified Modeling Language) 의 개요

UML은 시스템 개발 과정에서 의사소통이 원활하게 이루어지도록 표준화(unified)한 대표적인 객체지향 모델링 언어이다.

- Rumbaugh(OMT), Booch, Jacobson 등의 객체지향 방법론의 장점을 통합함

- OMG (Object Management Group) 에서 표준으로 지정함

 

UML의 구성 요소 (사관다)

  • 사물 (Things) : 다이어그램 안에서 관계가 형성될 수 있는 대상들
  • 관계 (Relationship) : 사물과 사물 사이의 연관성을 표현하는 것
  • 다이어그램 (Diagram) : 사물과 관계를 도형으로 표현한 것

 

사물 (Things) 의 종류

  • 구조 사물 (Structural Things) : 개념적, 물리적 요소를 표현 (클래스, 유스케이스, 컴포넌트, 인터페이스, 노드 등)
  • 행동 사물 (Behavioral Things) : 시간과 공간에 따른 요소들의 행위를 표현 (상호작용, 상태 머신 등)
  • 그룹 사물 (Grouping Things) : 요소들을 그룹으로 묶어서 표현 (패키지)
  • 주해 사물 (Annotation Things) : 부가적인 설명, 제약조건 등을 표현 (노트)

 

 

[[A]] UML - 관계 (Relationship) ⭐

관계의 종류 (연집포일의실, AACGDR)

 

연관 (Association) 관계

: 2개 이상의 사물이 서로 관련되어 있는 관계

- 사물 사이를 실선으로 연결하여 표현

- 방향성은 화살표로 표현

- 양방향 관계의 경우 화살표를 생략하고 실선으로만 연결

- 다중도를 선 위에 표기

  (다중도 : 연관에 참여하는 객체의 개수)

 

ex) 사람이 집을 소유한다. (= 집 쪽에 화살표)

 

 

집합 (Aggregation) 관계

: 하나의 사물이 다른 사물에 포함되어 있는 관계

- 포함하는 쪽(전체, Whole)과 포함되는 쪽(부분, Part)은 서로 독립적

- 포함되는 쪽(부분, Part)에서 포함하는 쪽(전체, Whole)으로 속이 빈 마름모를 연결하여 표현

 

ex) 컴퓨터는 프린터를 포함한다 (= Whole(컴퓨터) 쪽에 빈 마름모)

 

 

포함 (Composition) 관계

: 집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계

- 포함하는 쪽(전체, Whole)과 포함되는 쪽(부분, Part)은 서로 독립될 수 없고 생명주기를 함께 함

  (Part가 Whole에게 종속되는 관계)

- 포함되는 쪽(부분, Part)에서 포함하는 쪽(전체, Whole)으로 속이 채워진 마름모를 연결하여 표현

 

ex) 키는 문에 종속되는 관계 (= Whole(문) 쪽에 채워진 마름모)

 

 

일반화 (Generalization) 관계

: 하나의 사물이 다른 사물에 비해 더 일반적이거나 구체적인 관계

- 보다 일반적인 개념을 상위(부모), 보다 구체적인 개념을 하위(자식)라고 부름

- 구체적(하위)인 사물에서 일반적(상위)인 사물 쪽으로 속이 빈 화살표를 연결하여 표현

 

ex) 아메리카노와 에스프레소는 커피 (= 커피가 상위(부모), 아메리카노/에스프레소가 하위(자식))

 

 

의존 (Dependency) 관계

: 연관 관계와 같이 사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계

- 하나의 사물과 다른 사물이 소유 관계는 아니지만 사물의 변화가 다른 사물에도 영향을 미치는 관계임

- 영향을 주는 사물(이용자)이 영향을 받는 사물(제공자) 쪽으로 점선 화살표를 연결하여 표현

 

ex) 등급에 따라 할인율이 결정된다 (= 할인율(제공자) 쪽에 점선 화살표)

 

 

실체화 (Realization) 관계

: 사물이 할 수 있거나 해야 하는 기능으로, 서로를 그룹화 할 수 있는 관계

- 사물에서 기능 쪽으로 속이 빈 점선 화살표를 연결하여 표현

 

ex) 비행기는 날 수 있고 새도 날 수 있으므로 비행기와 새는 날 수 있다는 행위로 그룹화할 수 있다 (= 날 수 있다(기능) 쪽에 화살표)

 

 

[[A]] UML - 다이어그램

- 여러 관점에서 시스템을 가시화한 뷰(View)를 제공함으로써 의사소통에 도움을 줌

- 정적 모델링에서는 : 주로 구조적 다이어그램 사용 (정구)

- 동적 모델링에서는 : 주로 행위 다이어그램 사용 (동행)

 

구조적 (Structural) 다이어그램 종류 (정구)

종류 내용
클래스 다이어그램
(Class Diagram)
클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현
체 다이어그램
(Object Diagram)
- 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현
- 럼바우(Rumbaugh) 객체지향 분석 기법에서 객체 모델링에 활용됨
포넌트 다이어그램
(Component Diagram)
- 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현
- 구현 단계에서 사용됨
치 다이어그램
(Deployment Diagram)
- 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
- 구현 단계에서 사용됨
복합체 구조 다이어그램
(Composite Structure Diagram)
클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
패키지 다이어그램
(Package Diagram)
유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현

 

행위 (Behavioral) 다이어그램 종류 (동행)

종류 내용
유스케이스 다이어그램
(Use Case Diagram)
- 사용자의 요구를 분석하는 것으로, 기능 모델링 작업에 사용함
- 사용자(Actor)와 사용 사례(Use Case)로 구성됨
순차 다이어그램
(Sequence Diagram)
상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현
커뮤니케이션 다이어그램
(Communication Diagram)
동작에 참여하는 객체들이 주고받는 메시지와 객체들 간의 연관 관계를 표현
태 다이어그램
(State Diagram)
- 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현
- 럼바우(Rumbaugh) 객체지향 분석 기법에서 적 모델링에 활용됨
활동 다이어그램
(Activity Diagram)
시스템이 어떤 기능을 수행했는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현
상호작용 개요 다이어그램
(Interaction Overview Diagram)
상호작용 다이어그램 간의 제어 흐름을 표현
타이밍 다이어그램
(Timing Diagram)
객체 상태 변화와 시간 제약을 명시적으로 표현

 

  • 럼바우 : 객 (구조적), 상 (행위)
  • 구현 단계에서 사용 : 컴, 배 (둘 다 구조적)

 

스테레오 타입 (Stereotype)

: UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하는 것

- 길러멧(Guilemet)이라고 부르는 겹화살괄호(<< >>) 사이에 표현할 형태를 기술함

 

주로 표현되는 형태

표현 형태 의미
<< include >> 연결된 다른 UML 요소에 대해 포함 관계에 있는 경우
<< extends >> 연결된 다른 UML 요소에 대해 확장 관계에 있는 경우
<< interface >> 인터페이스를 정의하는 경우
<< exception >> 예외를 정의하는 경우
<< constructor >> 생성자 역할을 수행하는 경우

 

 

[[A]] 클래스 (Class) 다이어그램

정적 모델링

: 사용자가 요구한 기능을 구현하는데 필요한 자료들의 논리적인 구조를 표현한 것

- 시스템에 의해 처리되거나 생성될 객체들 사이에 어떤 관련이 있는지를 구조적인 관점(View)에서 표현함

- 정적 모델링은 객체(Object)들을 클래스(Class)로 추상화하여 표현함

- UML을 이용한 정적 모델링의 대표적인 것이 클래스 다이어그램

 

클래스 (Class) 다이어그램

: 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현한 것

- 시스템을 구성하는 요소에 대해 이해할 수 있는 구조적 다이어그램

- 시스템 구성 요소를 문서화하는 데 사용됨

 

클래스 (Class) 다이어그램의 구성 요소

구성 요소 표현 방법 내용
클래스 (Class) 3등분된 사각형
- 클래스명
- 속성 (Attribute)
- 오퍼레이션 (Operation)
- 각각의 객체들이 갖는 속성과 오퍼레이션(동작)을 표현한 것
- 일반적으로 3개의 구획(Compartment)으로 나눠 클래스의 이름, 속성, 오퍼레이션을 표기함
- 속성 (Attribute) : 클래스의 상태나 정보를 표현
- 오퍼레이션 (Operation) : 클래스가 수행할 수 있는 동작으로, 함수(메소드, Method)라고도 함
제약조건 한 쪽이 접힌 페이지 모양 - 속성에 입력될 값에 대한 제약조건이나 오퍼레이션 수행 전후에 지정해야 할 조건이 있다면 이를 적음
- 클래스 안에 제약조건을 기술할 때는 중괄호{ } 를 이용함
관계
(Relationships)
* 연집포일의 - 관계는 클래스와 클래스 사이의 연관성을 표현함
- 클래스 다이어그램에 표현하는 관계에는 '실체화' 관계를 제외한 '연집포일의' 관계가 있음

 

연관 클래스

: 연관 관계에 있는 두 클래스에 추가적으로 표현해야 할 속성이나 오퍼레이션이 있는 경우 생성하는 클래스

- 두 클래스의 연관 관계를 나타내는 선의 가운데로부터 점선을 연관 클래스로 이어 표시함

- 연관 클래스의 이름은 연관 관계의 이름을 이용해 지정함

 

ex) 팀이 경기에 참여하는 상황에서, '참여하다'라는 연관 관계에 대한 연관 클래스를 만들 수 있음

 

 

[[B]] 순차 (Sequence) 다이어그램

동적 모델링

: 시스템의 내부 구성 요소들의 상태 변화 과정과 과정에서 발생하는 상호 작용을 표현한 것

- 시스템 내부 구성 요소들 간에 이루어지는 동작이라는 관점(View)에서 표현함

- 시스템이 실행될 때 구성 요소들 간의 메시지 호출, 즉 오퍼레이션을 통한 상호 작용에 초점을 둠

 

동적 모델링의 종류

  • 순차 다이어그램
  • 커뮤니케이션 다이어그램
  • 상태 다이어그램

 

순차 (Sequence) 다이어그램

: 시스템이나 객체들이 메시지를 주고받으며 상호 작용하는 과정을 그림으로 표현한 것

- 시스템이나 객체들의 상호 작용 과정에서 주고받는 메시지를 표현함

- 각 동작에 참여하는 시스템이나 객체들의 수행 기간을 확인할 수 있음

- 클래스 내부에 있는 객체들을 기본 단위로 하여 그들의 상호 작용을 표현함

 

순차 (Sequence) 다이어그램의 구성 요소

구성 요소 표현 방법 의미
액터 (Actor) 사람 모양 시스템으로부터 서비스를 요청하는 외부 요소로, 사람이나 외부 시스템
객체 (Object) 사각형 메시지를 주고받는 주체
생명선 (Lifeline) 점선 - 객체가 메모리에 존재하는 기간으로, 객체 아래쪽에 점선을 그어 표현
- 객체 소멸(X)이 표시된 기간까지 존재함
실행 상자
(Active Box, 활성 상자)
점선 위 길쭉 네모 객체가 메시지를 주고받으며 구동되고 있음을 표현
메시지 (Message) 화살표 & 메시지 객체가 상호 작용을 위해 주고받는 메시지
객체 소멸 엑스(X) 기호 해당 객체가 더이상 메모리에 존재하지 않음을 표현
프레임 (Frame) 제목이 달린 큰 사각형 다이어그램의 전체 또는 일부를 묶어 표현한 것

 

 

[[B]] 패키지 (Package) 다이어그램

: 유스케이스나 클래스 등의 요소들을 그룹화한 패키지 간의 의존 관계를 표현한 것

- 패키지는 또 다른 패키지의 요소가 될 수 있음

- 대규모 시스템에서 주요 요소 간의 종속성을 파악하는 데 사용함

 

패키지 (Package) 다이어그램의 구성 요소

구성 요소 표현 방법 의미
패키지
(Package)
작은 네모가 올라간 큰 네모 -객체들을 그룹화한 것
- 단순 표기법 : 패키지 안에 패키지 이름만 표현
- 확장 표기법 : 패키지 안에 요소까지 표현
객체
(Object)
사각형 유스케이스, 클래스, 인터페이스, 테이블 등 패키지에 포함될 수 있는 다양한 요소들
의존 관계
(Dependency)
점선 화살표 - 패키지와 패키지, 패키지와 객체 간을 점선 화살표로 연결하여 표현
- 스테레오타입을 이용해 의존 관계를 구체적으로 표현할 수 있음
- 의존 관계의 표현 형태는 사용자가 임의로 작성할 수 있으며, 대표적으로 import와 access가 사용됨
    << import >> : 패키지에 포함된 객체들을 직접 가져와서 이용하는 관계
    << access >> : 인터페이스를 통해 패키지 내의 객체에 접근하여 이용하는 관계

 

 

[[C]] 소프트웨어 개발 방법론

: 소프트웨어 개발, 유지보수 등에 필요한 수행 방법과 각종 기법 및 도구를 체계적으로 정리하여 표준화한 것

- 소프트웨어 개발 방법론의 목적은 소프트웨어 생산성과 품질 향상이다.

 

주요 소프트웨어 개발 방법론

  • 구조적 방법론
  • 정보공학 방법론
  • 객체지향 방법론
  • 컴포넌트 기반(CBD) 방법론
  • 제품 계열 방법론
  • 애자일 방법론

 

구조적 방법론

: 사용자의 요구사항을 파악하여 문서화하는 처리(Process) 중심의 방법론

- 1960년대까지 가장 많이 적용되었던 소프트웨어 개발 방법론임

- 쉬운 이해 및 검증이 가능한 프로그램 코드를 생성하는 것이 목적

- 복잡한 문제를 다루기 위해 분할과 정복 (Divide and Conquer) 원리를 적용함

 

구조적 방법론의 개발 절차

  1. 타당성 검토 단계
  2. 계획 단계
  3. 요구사항 단계
  4. 설계 단계
  5. 구현 단계
  6. 시험 단계
  7. 운용/유지보수 단계

 

정보공학 방법론

: 정보 시스템의 개발을 위해 계획, 분석, 설계, 구축에 정형화된 기법들을 통합 및 적용하는 자료(Data) 중심의 방법론

- 정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합함

 

정보공학 방법론의 개발 절차

  1. 정보 전략 계획 수립 단계
  2. 업무 영역 분석 단계
  3. 업무 시스템 설계 단계
  4. 업무 시스템 구축 단계

 

객체지향 방법론

: 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계의 부품을 조립하듯이 객체들을 조립해서 소프트웨어를 구현하는 방법론

- 객체지향 방법론은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택됨

- 객체지향 방법론의 구성 요소 : 객체, 클래스, 메시지 등

- 객체지향 방법론의 기본 원칙 : 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등

 

객체지향 방법론의 개발 절차

  1. 요구분석 단계
  2. 설계 단계
  3. 구현 단계
  4. 테스트 및 검증 단계
  5. 인도 단계

 

컴포넌트 기반 (CBD; Component Based Design) 방법론

: 기존의 컴포넌트조합하여 새로운 애플리케이션을 만드는 방법론

- 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 있음

- 새로운 기능을 추가하는 것이 간단하여 확장성이 보장됨

- 유지 보수 비용을 최소화하고 생산성 및 품질을 향상시킬 수 있음

 

컴포넌트 기반 방법론의 개발 절차

  1. 개발 준비 단계
  2. 분석 단계
  3. 설계 단계
  4. 구현 단계
  5. 테스트 단계
  6. 전개 단계
  7. 인도 단계

 

제품 계열 방법론

: 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론

- 임베디드 소프트웨어를 만드는데 적합함

- 제품 계열 방법론은 영역공학과 응용공학으로 구분됨

  (영역공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역)

  (응용공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역)

 

 

[[B]] S/W 공학의 발전적 추세

소프트웨어 재사용 (Software Reuse)

: 이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것

- 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법

- 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용함

 

소프트웨어 재사용 방법

  • 합성 중심 (Composition-Based) : 소프트웨어 부품, 즉 블록을 만들어서 끼워 맞춰 소프트웨어를 완성시키는 방법 (= 블록 구성 방법)
  • 생성 중심 (Generation-Based) : 추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법 (= 패턴 구성 방법)

 

소프트웨어 재공학 (Software Reengineering)

: 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것

- 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하기 때문에 유지보수의 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법

- 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시킴

 

소프트웨어 재공학의 이점

  • 소프트웨어의 품질 향상
  • 소프트웨어의 생산성 증가
  • 소프트웨어의 수명 연장
  • 소프트웨어의 오류 감소

 

CASE (Computer Aided Software Engineering)

: 소프트웨어 개발 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것

- 객체지향 시스템, 구조적 시스템 등 다양한 시스템에서 활용되는 자동화 도구(CASE Tool)임

- 소프트웨어 생명 주기의 전체 단계를 연결하고 자동화하는 통합된 도구를 제공함

- 소프트웨어 개발 도구와 방법론이 결합되었으며, 정형화된 구조 및 방법을 소프트웨어 개발에 적용하여 생산성 향상을 구현함

 

CASE의 주요 기능

  • 소프트웨어 생명 주기 전 단계의 연결
  • 다양한 소프트웨어 개발 모형 지원
  • 그래픽 지원

 

 

[[A]] 비용 산정 기법 - 상향식 ⭐

상향식 비용 산정 기법

: 세부적인 작업 단위별로 비용을 산정한 후 집계하여 전체 비용을 산정하는 방법

 

주요 상향식 비용 산정 기법

  • LOC (원시 코드 라인 수) 기법
  • 개발 단계별 인월수 기법
  • 수학적 산정 기법

 

LOC (원시 코드 라인 수, source Line Of Code) 기법

: 소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법

- 측정이 용이하고 이해하기 쉬워 가장 많이 사용됨

- 예측치를 이용하여 생산성, 노력, 개발 기간 등의 비용을 산정함

 

LOC 기법

* 비관치 : 가장 많이 측정된 코드 라인 수

* 낙관치 : 가장 적게 측정된 코드 라인 수

* 기대치 : 측정된 모든코드 라인 수의 평균

 

4m = 4*기대치

 

산정 공식 (LOC 기법에 의한)

  • 노력(인월) = 개발 기간 X 투입 인원 = LOC / 1인당 월평균 생산 코드 라인 수 (노는기투 는L나평(평균생산코드라인))
  • 개발 비용 = 노력(인월) X 단위 비용(1인당 월평균 인건비) (비는노단(평균인건비))
  • 개발 기간 = 노력(인월) / 투입 인원 (기는노나투)
  • 생산성 = LOC / 노력(인월) (생은L나노)

 

개발 단계별 인월수 (Effort Per Task) 기법

: LOC 기법을 보완하기 위한 기법으로, 각 기능을 구현시키는 데 필요한 노력을 생명 주기의 각 단계별로 산정함

- LOC 기법보다 더 정확함

 

 

[[B]] 수학적 산정 기법

: 상향식 비용 산정 기법으로, 경험적 추정 모형, 실험적 추정 모형이라고도 함

- 개발 비용 산정의 자동화를 목표로 함

- 비용의 자동산정을 위해 사용되는 공식은 과거의 유사한 프로젝트를 기반으로 유도된 것임

 

주요 수학적 산정 기법

  • COCOMO 모형
  • Putnam 모형
  • 기능 점수 (FP) 모형

 

COCOMO (COnstructive COst MOdel) 모형

: 원시 프로그램의 규모인 LOC(원시 코드 라인 수)에 의한 비용 산정 기법임

- 개발할 소프트웨어의 규모(LOC)를 예측한 후 이를 소프트웨어 종류에 따라 다르게 책정되는 비용 산정 방정식에 대입하여 비용을 산정함

- 비용 산정 결과는 프로젝트를 완성하는 데 필요한 노력(Man-Month)으로 나타남

- 보헴(Boehm)이 제안함

 

COCOMO의 소프트웨어 개발 유형

유형 특징
조직형
(Organic Mode)
- 기관 내부에서 개발된 중/소 규모의 소프트웨어
- 일괄 자료 처리나 과학기술 계산용, 비즈니스 자료 처리용 등의 5만(50KDSI) 라인 이하의 소프트웨어를 개발하는 유형
- 사무 처리용, 업무용, 과학용 응용 소프트웨어 개발에 적합함
반분리형
(Semi-Detached Mode)
- 조직형과 내장형의 중간형 소프트웨어
- 트랜잭션 처리 시스템이나 운영체제, 데이터베이스 관리 시스템 등의 30만(300KDSI) 라인 이하의 소프트웨어를 개발하는유형
- 컴파일러, 인터프리터와 같은 유틸리티 개발에 적합함
내장형
(Embedded Mode)
- 초대형 규모의 소프트웨어
- 트랜잭션 처리 시스템이나 운영체제 등의 30만(300KDSI) 라인 이상의 소프트웨어를 개발하는 유형
- 신호기 제어 시스템, 미사일 유도 시스템, 실시간 처리 시스템 등의 시스템 프로그램개발에 적합함

 

COCOMO 모형의 종류

종류 특징
기본형 (Basic)
COCOMO
소프트웨어의 크기와 개발 유형만을 이용하여 비용 산정
중간형 (Intermediate)
COCOMO
기본형 COCOMO의 공식을 토대로 사용하나, 다음 4가지 특성에 의해 비용을 산정함
- 제품의 특성
- 컴퓨터의 특성
- 개발 요원의 특성
- 프로젝트 특성
발전형 (Detailed)
COCOMO
- 중간형 COCOMO를 보완하여 만들어진 모형
- 개발 공정별로 보다 자세하고 정확하게 노력을 산출하여 비용 산정
- 소프트웨어 환경과 구성 요소가 사전에 정의되어 있어야 하며, 개발 과정의 후반부에 주로 적용됨

 

Putnam 모형 (푸트남 모형)

: 소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 예상하는 모형

- 푸트남(Putnam)이 제안한 것으로, 생명 주기 예측 모형이라고도 함

- 시간에 따른 함수로 표현되는 Rayleigh-Norden 곡선의 노력 분포도를 기초로 함

- 대형 프로젝트의 노력 분포 산정에 이용됨

- 개발 기간이 늘어날수록 프로젝트 적용 인원의 노력이 감소함

 

기능 점수 (FP; Function Point) 모형

: 소프트웨어의 기능을 증대시키는 요인별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능 점수를 산출하며, 총 기능 점수와 영향도를 이용하여 기능 점수(FP)를 구한 후 이를 이용해서 비용을 산정하는 기법

- 알브레히트(Albrecht)가 제안함

 

소프트웨어 기능 증대 요인

  • 자료 입력(입력 양식)
  • 정보 출력(출력 보고서)
  • 명령어(사용자 질의수)
  • 데이터 파일
  • 필요한 외부 루틴과의 인터페이스

 

비용 산정 자동화 추정 도구

SLIM Rayleigh-Norden곡선Putnam 예측 모델을 기초로 하여 개발된 자동화 추정 도구
ESTIMACS 다양한 프로젝트와 개인별 요소를 수용하도록 FP 모형을 기초로 하여 개발된 자동화 추정 도구

 

 

[[B]] 프로젝트 일정 (Scheduling) 계획

: 프로젝트의 프로세스를 이루는 소작업을 파악하고 예측된 노력을 각 소작업에 분배하여 소작업의 순서와 일정을 정하는 것

- 프로젝트 일정 계획에 사용되는 기능 : WBS, PERT/CPM, 간트 차트 등

 

PERT (Program Evaluation and Review Technique, 프로그램 평가 및 검토 기술)

: 프로젝트에 필요한 전체 작업의 상호 관계를 표시하는 네트워크

- 각 작업별로 다음과 같이 단계를 나누어 종료시기를 결정함

  • 낙관적인 경우
  • 가능성이 있는 경우
  • 비관적인 경우

- 개발 경험이 없어 소요 기간 예측이 어려운 프로젝트 일정 계획에 사용함

- 노드와 간선으로 구성되며 원 노드에는 작업을, 간선에는 낙관치, 기대치, 비관치를 표시함

- 결정 경로, 작업에 대한 경계 시간, 작업 간의 상호 관련성 등을 알 수 있음

 

작업 예측치 계산 공식

 

 

CPM (Critical Path Method, 임계 경로 기법)

: 프로젝트 완성에 필요한 작업을 나열하고 작업에 필요한 소요 기간을 예측하는데 사용하는 기법

- 노드와 간선으로 구성된 네트워크로 노드는 작업을, 간선은 작업 사이의 전후 의존 관계를 나타냄

- 원형 노드는 각각의 작업을 의미하며, 작업 이름과 소요 기간을 표시함

- 박스 노드는 이정표를 의미하며, 이정표 이름과 예상 완료 시간을 표시함

- 간선을 나타내는 화살표의 흐름에 따라 각 작업이 진행되며, 전 작업이 완료되어야 다음 작업을 진행할 수 있음

- 굵은 선임계 경로, 즉 최장 경로임

 

간트 차트

: 프로젝트의 작업 일정을 막대 도표를 이용하여 표시하는 프로젝트 일정표

- 시간선(Time-Line) 차트라고도 함

- 중간 목표 미달성 시 그 이유와 기간을 예측할 수 있게 함

- 사용자와의 문제점이나 예산의 초과 지출 등도 관리할 수 있게 함

- 자원 배치와 인원 계획에 유용하게 사용됨

- 이정표, 작업 일정, 작업 기간, 산출물로 구성되어 있음

- 수평 막대의 길이는 각 작업(Task)의 기간을 나타냄

 

 

[[B]] 소프트웨어 개발 표준

: 소프트웨어 개발 단계에서 수행하는 품질 관리에 사용되는 국제 표준

 

주요 소프트웨어 개발 표준

  • ISO/IEC 12207
  • CMMI (능력 성숙도 통합 모델)
  • SPICE (소프트웨어 처리 개선 및 능력 평가 기준)

 

ISO/IEC 12207

: ISO (국제표준화기구) 에서 만든 표준 소프트웨어 생명 주기 프로세스

- 소프트웨어의 개발, 운영, 유지보수 등을 체계적으로 관리하기 위한 소프트웨어 생명 주기 표준을 제공함

 

ISO/IEC 12207 구분

기본 생명 주기 프로세스 획득, 공급, 개발, 운영, 유지보수 프로세스
지원 생명 주기 프로세스 품질 보증, 검증, 확인, 활동 검토, 감사, 문서화, 형상 관리, 문제 해결 프로세스
조직 생명 주기 프로세스 관리, 기반 구조, 훈련, 개선 프로세스

 

CMMI (Capability Maturity Model Integration, 능력 성숙도 통합 모델)

: 소프트웨어 개발 조직의 업무 능력 및 조직의 성숙도를 평가하는 모델

- 미국 카네기멜론 대학교의 소프트웨어 공학연구소(SEI)에서 개발함

 

CMMI의 소프트웨어 프로세스 성숙도 (초관정정최)

단계 프로세스 특징
초기 (Initial) 정의된 프로세스 없음 작업자 능력에 따라 성공 여부 결정
관리 (Managed) 규칙화된 프로세스 특정한 프로젝트 내의 프로세스 정의 및 수행
 정의 (Defined) 표준화된 프로세스 조직의 표준 프로세스를 활용하여 업무 수행
정량적 관리
(Quantitatively Managed)
예측 가능한 프로세스 프로젝트를 정량적으로 관리 및 통제
최적화 (Optimizing) 지속적 개선 프로세스 프로세스 역량 향상을 위해 지속적인 프로세스 개선

 

SPICE (Software Process Improvement and Capability dEtermination)

: 소프트웨어의 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가 및 개선하는 국제 표준

- 공식 명칭은 ISO/IEC 15504

 

SPICE의 구성

범주 특징
고객-공급자
(Customer-Supplier)
프로세스
- 소프트웨어를 개발하여 고객에게 전달하는 것을 지원하고, 소프트웨어의 정확한 운용 및 사용을 위한 프로세스로 구성됨
- 구성 요소 : 인수, 공급, 요구 도출, 운영
- 프로세스 수 : 10개
공학
(Engineering)
프로세스
- 시스템과 소프트웨어 제품의 명세화, 구현, 유지보수를 하는데 사용되는 프로세스로 구성됨
- 구성 요소 : 개발, 소프트웨어 유지보수
- 프로세스 수 : 9개
지원
(Support)
프로세스
- 소프트웨어 생명 주기에서 다른 프로세스에 의해 이용되는 프로세스로 구성됨
- 구성 요소 : 문서화, 형상, 품질 보증, 검증, 확인, 리뷰, 감사, 품질 문제 해결
- 프로세스 수 : 8개
관리
(Management)
프로세스
- 소프트웨어 생명 주기에서 프로젝트 관리자에 의해 사용되는 프로세스로 구성됨
- 구성 요소 : 관리, 프로젝트 관리, 품질 및 위험 관리
- 프로세스 수 : 4개
조직
(Organization)
프로세스
- 조직의 업무 목적 수립과 조직의 업무 목표 달성을 위한 프로세스로 구성됨
- 구성 요소 : 조직 배치, 개선 활동 프로세스, 인력 관리, 기반 관리, 측정 도구, 재사용
- 프로세스 수 : 9개

 

SPICE의 프로세스 수행 능력 단계

단계 특징
불완전 (Incomplete) 프로세스가 구현되지 않았거나 목적을 달성하지 못한 단계
수행 (Performed) 프로세스가 수행되고 목적이 달성된 단계
관리 (Managed) 정의된 자원의 한도 내에서 그 프로세스가 작업 산출물을 인도하는 단계
확립 (Established) 소프트웨어 공학 원칙에 기반하여 정의된 프로세스가 수행되는 단계
예측 (Predictable) 프로세스가 목적 달성을 위해 통제되고, 양적인 측정을 통해서 일관되게 수행되는 단계
최적화 (Optimizing) 프로세스 수행을 최적화하고, 지속적인 개선을 통해 업무 목적을 만족시키는 단계

 

 

[[B]] 소프트웨어 개발 프레임워크

: 소프트웨어 개발에 공통적으로 사용되는 구성 요소와 아키텍처를 일반화하여 제공해주는 반제품 형태의 소프트웨어 시스템

- 선행 사업자의 기술에 의존하지 않는 표준화된 개발 기반으로 인해 사업자 종속성이 해소됨

 

* 반제품 : 원제품의 재료로 사용되기 위해 원료를 가공하여 만든 중간 제품

 

소프트웨어 개발 프레임워크의 주요 기능

  • 예외 처리
  • 트랜잭션 처리
  • 메모리 공유
  • 데이터 소스 관리
  • 서비스 관리
  • 쿼리 서비스
  • 로깅 서비스
  • 사용자 인증 서비스

 

소프트웨어 개발 프레임워크의 종류

  • 스프링 프레임워크
  • 전자정부 프레임워크
  • 닷넷 프레임워크

 

스프링 프레임워크 (Spring Framework)

: 자바 플랫폼을 위한 오픈 소스 경량형 애플리케이션 프레임워크

- 동적인 웹 사이트의 개발을 위해 다양한 서비스를 제공함

- 전자정부 표준 프레임워크의 기반 기술로 사용되고 있음

 

전자정부 프레임워크

: 대한민국의 공공부문 정보화 사업 시 정보 시스템의 구축을 지원하기 위해 필요한 기능 및 아키텍처를 제공하는 프레임워크

- 개발 프레임워크의 표준 정립으로 응용 소프트웨어의 표준화, 품질 및 재사용성의 향상을 목적으로 함

- 오픈 소스 기반의 범용화를 이룰 수 있음

- 공개된 기술을 활용함으로써 특정 업체의 종속성을 배제하고 사업별 공통 컴포넌트의 중복 개발을 방지함

 

닷넷 프레임워크 (.NET Framework)

: Windows 프로그램의 개발 및 실행 환경을 제공하는 프레임워크

- Microsoft 사에서 통합 인터넷 전략을 위해 개발함

- 코드 실행을 관리하는 CLR(Common Language Runtime, 공용 언어 런타임)이라는 이름의 가상머신 상에서 작동함

 

소프트웨어 개발 프레임워크의 특성 (모재확역)

특성 내용
모듈화
(Modularity)
- 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상시킴
- 프레임워크는 개발 표준에 의한 모듈화로 인해 유지 보수가 용이
재사용성
(Reuseability)
프레임워크는 재사용 가능한 모듈들을 제공함으로써 예산 절감, 생산성 향상, 품질 보증이 가능함
확장성
(Extensibility)
프레임워크는 다형성(Polymorphism)을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능함
제어의 역흐름
(Inversion of Control)
개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킴