* 교재의 각 세션은 중요도에 따라 A, B, C, D 로 등급이 분류되어 있습니다.
* 해당 포스팅은 아래 교재의 A, B 등급을 골라 재정리한 내용입니다.
(2023 교재 기준)
A : 매 시험마다 꼭 나올 것으로 예상되는 부분
B : 두 번 시험 보면 한 번은 꼭 나올 것으로 예상되는 부분
C : 세 번 시험 보면 한 번은 꼭 나올 것으로 예상되는 부분
D : 출제 범위에는 포함되지만 아직 출제되지 않은 부분
* ⭐ : 교재가 필요한 내용
[[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)
: 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문
- 소프트웨어 공학의 기본 원칙
- 현대적인 프로그래밍 기술을 계속적으로 적용해야 한다.
- 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 한다.
- 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 한다.
[[B]] XP(eXtreme Programming) 기법
: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
- 빠르게 개발하는 것이 목적
- 릴리즈 기간을 짧게 반복함
XP의 5가지 핵심 가치
의단용존피
- 의사소통 (Communication)
- 단순성 (Simplicity)
- 용기 (Courage)
- 존중 (Respect)
- 피드백 (Feedback)
XP 개발 프로세스
- 릴리즈 계획 수립 (Release Planning) : 부분 혹은 전체 개발 완료 시점에 대한 일정을 수립하는 것
- 이터레이션 (Iteration, 주기) : 실제 개발 작업을 진행하는 과정, 보통 1~3주 기간
- 승인 검사 (Acceptance Test, 인수 테스트) : 부분 완료 제품이 구현되면 수행하는 테스트
- 소규모 릴리즈 (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)의 한 요소임
도분명확
- 도출 (Elicitation)
- 분석 (Analysis)
- 명세 (Specification)
- 확인 (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) 원리를 적용함
구조적 방법론의 개발 절차
- 타당성 검토 단계
- 계획 단계
- 요구사항 단계
- 설계 단계
- 구현 단계
- 시험 단계
- 운용/유지보수 단계
정보공학 방법론
: 정보 시스템의 개발을 위해 계획, 분석, 설계, 구축에 정형화된 기법들을 통합 및 적용하는 자료(Data) 중심의 방법론
- 정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합함
정보공학 방법론의 개발 절차
- 정보 전략 계획 수립 단계
- 업무 영역 분석 단계
- 업무 시스템 설계 단계
- 업무 시스템 구축 단계
객체지향 방법론
: 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계의 부품을 조립하듯이 객체들을 조립해서 소프트웨어를 구현하는 방법론
- 객체지향 방법론은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택됨
- 객체지향 방법론의 구성 요소 : 객체, 클래스, 메시지 등
- 객체지향 방법론의 기본 원칙 : 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등
객체지향 방법론의 개발 절차
- 요구분석 단계
- 설계 단계
- 구현 단계
- 테스트 및 검증 단계
- 인도 단계
컴포넌트 기반 (CBD; Component Based Design) 방법론
: 기존의 컴포넌트를 조합하여 새로운 애플리케이션을 만드는 방법론
- 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 있음
- 새로운 기능을 추가하는 것이 간단하여 확장성이 보장됨
- 유지 보수 비용을 최소화하고 생산성 및 품질을 향상시킬 수 있음
컴포넌트 기반 방법론의 개발 절차
- 개발 준비 단계
- 분석 단계
- 설계 단계
- 구현 단계
- 테스트 단계
- 전개 단계
- 인도 단계
제품 계열 방법론
: 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
- 임베디드 소프트웨어를 만드는데 적합함
- 제품 계열 방법론은 영역공학과 응용공학으로 구분됨
(영역공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역)
(응용공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역)
[[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) 기법
: 소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법
- 측정이 용이하고 이해하기 쉬워 가장 많이 사용됨
- 예측치를 이용하여 생산성, 노력, 개발 기간 등의 비용을 산정함
* 비관치 : 가장 많이 측정된 코드 라인 수
* 낙관치 : 가장 적게 측정된 코드 라인 수
* 기대치 : 측정된 모든코드 라인 수의 평균
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) |
개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킴 |
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사 #6] 화면 설계 (0) | 2024.04.23 |
---|---|
[정보처리기사 #5] 인터페이스 구현 (2) | 2024.04.23 |
[정보처리기사 #4] 서버 프로그램 구현 (0) | 2024.04.19 |
[정보처리기사 #3] 통합 구현 (0) | 2024.04.19 |
[정보처리기사 #2] 데이터 입/출력 구현 (0) | 2024.04.17 |