정보처리기사 필기 - 4과목 소프트웨어 공학


2장 소프트웨어 프로젝트 관리


117 프로젝트 관리의 개요


① 프로젝트 관리의 개념


· 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동

· 프로젝트 관리는 소프트웨어 개발 계획을 세우고 분석, 설계, 구현 등의 작업을 통제하는 것으로 소프트웨어 생명 주기의 전 과정에 걸쳐 진행됨

· 소프트웨어 프로젝트를 성공적으로 수행하기 위해서는 수행할 작업의 범위, 필요한 자원, 수행 업무, 이정표, 비용 추진 일정들을 알아야 함


※ 프로젝트 관리는 제한된 시간과 비용으로 좋은 품질의 시스템을 개발하여 고객에게 제공함


② 프로젝트 관리 대상


· 계획 관리 : 프로젝트 계획, 비용 산정, 일정 계획, 조직 계획

· 품질 관리 : 품질 통제, 품질 보증

· 위험 관리 : 위험 식별, 위험 분석 및 평가, 위험 관리 계획, 위험 감시 및 조치


※ 효과적인 프로젝트 관리를 위한 3P(3대 요소)

· 사람(People) : 프로젝트 관리에서 가장 기본이 되는 인적 자원

· 문제(Problem) : 사용자 입장에서 문제를 분석하여 인식함

· 프로세스(Process) : 소프트웨어 개발에 필요한 전체적인 작업 계획 및 구조(Framework)


③ 프로젝트 관리의 구성 단계


[그림 1] 프로젝트 관리의 구성 단계

① 프로젝트 계획 수립

· 프로젝트의 목적을 기술하고, 이를 달성하기 위해 필요한 업무와 성취해야 할 일들을 결정

· 프로젝트를 정의하고 프로젝트 일정 계획, 소요 자원 예측, 위험 평가, 프로젝트에 대한 승인 얻어냄

② 프로젝트 가동

· 프로젝트가 수행될 환경을 구성학 프로젝트에 참여할 인력을 교육시킴

· 프로젝트를 진행할 조직을 구성하고 각 팀원을 선발함

③ 프로젝트 통제

· 계획 대비 프로젝트의 척도를 점검하고, 변경 사항을 승인하는 등의 작업 수행

(척도 : 시스템, 컴포넌트(구성 요소) 또는 프로세스가 요구된 속성을 어느 정도 만족하는 가에 대한 수량적인 측정치)

· 프로젝트 전 기간 동안 수행됨

프로젝트 종료

· 수행 결과의 완전성을 점검하고 프로젝트 종료 



118 프로젝트 계획 수립


① 프로젝트 계획 수립의 개요


프로젝트 계획은 프로젝트가 수행되기 전에 소프트웨어 개발 영역 결정, 필요한 자원, 비용, 일정 등을 예측하는 작업

· 관리자가 자원, 비용, 일정 등을 합리적으로 예측할 수 있도록 프로젝트 틀(Framework)를 제공

· 프로젝트 계획 수립을 통해 소프트웨어 개발 과정에서 발생할 수 있는 여러 가지 위험성을 최소화할 수 있음

· 프로젝트 계획 수립 후에는 시스템 정의서와 프로젝트 계획서가 산출됨

· 프로젝트 계획에 따라 소프트웨어의 품질이 결정되므로, 계획 단계에서 프로젝트 관리자의 임무는 매우 중요함


※ 시스템 정의서에 포함되는 내용 : 문제 기술, 시스템 정당화, 프로젝트 목표, 제약 사항, 추진 전략 등

프로젝트 계획서에 포함되는 내용 : 생명 주기 모델, 기본 일정, 예산, 팀의 구성, 관리 기준, 완료 조건 등


② 시스템 개발 영역(Scope, 범위) 결정


· 프로젝트 계획 수립의 첫 번째 임무로, 개발될 소프트웨어의 영역을 결정

· 소프트웨어의 개발 영역을 결정하는 주요 요소에는 처리될 데이터와 소프트웨어에 대한 기능, 성능, 제약 조건, 인터페이스 및 신뢰도 등


※ 제약 조건 : 외부 하드웨어, 가용 메모리, 다른 시스템들에 의해 소프트웨어에 가해진 제한 사항

※ 인터페이스에 포함되는 사항

· 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 프로세서나 하드웨어

· 운영체제, 서브루틴 패키지와 같이 새로운 소프트웨어에 연결되어야 하는 소프트웨어

· 키보드나 기타 I/O 장치들을 통하여 소프트웨어를 사용하는 사람

· 순서적인 연산에 의해 소프트웨어를 실행하는 절차 


③ 자원 추산


소프트웨어 개발에 필요한 자원을 예측하는 것


 인적 자원

 · 소프트웨어 프로젝트에 필요한 인원수 및 조직 결정

 · 소프트웨어 개발 영역을 평가하고, 개발을 수행하는 데 필요한 기술들을 선택함으로써 인적 자원 예측이 시작됨

 재사용 소프트웨어 자

 재사용을 원하는 소프트웨어의 컴포넌트(구성 요소) 결정

 환경 자원

 소프트웨어 개발에 필요한 하드웨어와 소프트웨어 환경을 의미하는 것으로, 하드웨어와 소프트웨어가 필요한 시기 결정


④ 소프트웨어 프로젝트 추산


소프트웨어 프로젝트 추산은 프로젝트 수행에 필요한 비용을 예측하는 것으로 신뢰할 만한 비용을 예측하기 위해서 다음과 같은 방법 사용

· 프로젝트 관리의 후반가지 프로젝트 예측을 가능한 한 연기함

· 이미 수행된 유사 프로젝트 참고

· 프로젝트를 상대적으로 잘게 분리하여 예측하는 분해 기법 사용

· 하나 이상의 경험적 예측(실험) 모델을 활용

· 자동화 도구를 도입하여 활용


프로젝트 계획 수립 시 고려사항


· 프로젝트 복잡도

· 프로젝트 규모

· 구조적 불확실성의 정도

· 과거 정보의 가용성

· 위험성



119 소프트웨어 프로젝트 추산


① 소프트웨어 프로젝트 추산의 개요


소프프웨어 프로젝트 추산은 프로젝트를 수행하는 데 필요한 소프트웨어의 ·간접적인 비용을 예측하는 작업


· 소프트웨어 공학 분야 중에서 가장 어렵고 오차 발생이 심한 작업

· 소프트웨어 개발 단계에서 확인되지 않거나 고려하지 못한 요소들이 많기 때문에 정확한 비용을 예측하기는 어려움

· 소프트웨어의 측정 요소

 직접 측정 요소

 노력, LOC(원시 코드 라인 수), 투입 인원, 문서수 등

 간접 측정 요소

 생산성, 복잡성, 효율성, 품질, 신뢰성, 유지 보수성 등


② 프로젝트 비용 결정 요소


프로젝트 요소

어떤 소프트웨어를 개발할 것인가에 따라 비용이 달라질 수 있음

· 제품의 복잡도 : 소프트웨어의 종류(응용·유틸리티·시스템 소프트웨어 등)에 따라

· 시스템의 크기 : 소프트웨어의 규모(대형·소형 소프트웨어)에 따라

· 요구되는 신뢰도 : 신뢰도는 프로그램이 일정한 기간 내에 주어진 조건하에서 필요한 기능을 수행하는 정도를 의미


자원 요소

소프트웨어 개발에 필요한 각종 자원들의 투자정도에 따라 비용이 달라질 수 있음

· 인적 자원 : 관리자, 개발자의 능력 혹은 자질

· 하드웨어 자원 : 개발 장비나 워드프로세서, 프린터와 같은 보조 장비

· 소프트웨어 자원 : 언어 분석기, 문서화 도구, 요구 분석기 등과 같은 개발 지원 도구


생산성 요소

· 개발자의 능력: 전문 분야에 대한 지식, 유사 분야에 대한 경험, 응용 분야에 대한 이해도, 책임감, 창의력 등

· 개발 기간 : 소프트웨어를 개발하는 기간



120 비용 산정 기법


① 하향식 비용 산정 기법


과거의 유사한 경험을 바탕으로 전문 지식이 많은 개발자들이 참여한 회의를 통해 비용을 산정하는 비과학적인 방법

· 프로젝트 전체 비용을 산정한 후 각 작업별로 비용을 세분화함

· 하향식 비용 산정 기법에는 전문가 감정 기법, 델파이 기법 등이 있음


전문가 감정 기법

조직 내에 경험이 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법

· 가장 편리하고 신속하게 비용 산정 가능, 의뢰자로부터 믿음을 얻을 수 있음

· 새로운 프로젝트에는 과거의 프로젝트와 다른 요소들이 있다는 것을 간과할 수 있음

· 새로운 프로젝트와 유사한 프로젝트에 대한 경험이 없을 수 있음

· 개인적이고 주관적일 수 있음


델파이 기법

전문가 감정 기법의 주관적인 편견을 보완하기 위해 많은 전문가의 의견을 종합하여 산정하는 기법

· 전문가들의 편견이나 분위기에 지배되지 않도록 한 명의 조정자와 여러 전문가로 구성됨

· 비용 산정 순서

① 조정자는 각 비용 산정 요원에게 시스템 정의서와 산정한 비용 내역을 기록할 서식 제공

② 산정 요원들은 정의서를 분석하여 익명으로 그들 나름대로의 비용 산정

③ 조정자는 산정 요원들의 반응을 요약하여 배포함

④ 산정 요원들은 이전에 산정한 결과를 이용하여 다시 익명으로 산정

⑤ 요원들 간의 의견이 거의 일치할 때까지 이 과정을 반복


② 상향식 비용 산정 기법


상향식 비용 산정 기법은 프로젝트의 세부적인 작업 단위별로 비용을 산정한 후 집계하여 전체 비용을 산정하는 방법

· 상향식 비용 산정 기법에는 LOC(원시 코드 라인 수) 기법, 개발 단계별 인월수 기법, 수학적 산정 기법


LOC(원시 코드 라인 수) 기법

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

※ 비관치 : 가장 많이 측정된 코드 라인 수 / 낙관치 : 가장 적게 측정된 코드 라인 수 / 기대치 : 측정된 모든 코드 라인의 평균

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

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


예측치 = (a+4m+b)/6 (단, a:낙관치, b:비관치, c:기대치(중간치))


· 산정 공식

- 노력(인월) = 개발 기간 × 투입 인원

= LOC / 1인당 월 평균 생산 코드 라인 수

- 개발 비용 = 노력(인월) × 단위 비용(1인당 월평균 인권비)

- 개발 기간 = 노력(인월) / 투입 인원

- 생산성 = LOC / 노력(인월)


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

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

· LOC 기법보다 더 정확함



121 수학적 산정 기법


① 수학적 산정 기법의 개요


· 수학적 산정 기법은 상향식 비용 산정 기법을 경험적 추정 모형, 실험적 추정 모형이라고도 하며, 개발 비용 산정의 자동화를 목표로 함

· 수학적 산정 기법에는 COCOMO 모형, Putnam 모형, 기능 점수(FP) 모형 등이 있으며 각 모형에서는 지정된 공식을 사용하여 비용 산정

· 비용을 자동으로 산정하기 위해 사용되는 공식은 과거 유사한 프로젝트를 기반으로하여 경험적으로 유도된 것


② COCOMO 모형 개요


COCOMO(COnstructive COst MOdel) 모형은 보헴(Boehm)이 제안한 것으로 원시 프로그램의 규모인 LOC에 의한 비용 산정 기법

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

· 비용 견적의 강도 분석 및 비용 견적의 유연성이 높아 소프트웨어 개발비 견적에 널리 통용되고 있음

· 같은 규모의 프로그램이라도 그 성격에 따라 비용이 다르게 산정됨

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


③ COCOMO의 소프트웨어 개발 유형


소프트웨어 개발 유형은 소프트웨어의 복잡도 혹은 원시 프로그램의 규모에 따라 조직형, 반분리형, 내장형으로 분류됨


· 조직형(Organic Model)

- 조직형은 기관 내부에서 개발된 중·소 규모의 소프트웨어로 일괄 자료 처리나 과학 기술 계산용, 비즈니스 자료 처리용으로 5만(50KDSI)라인 이하의 소프트웨어를 개발하는 유형

※ KDSI(Kilo Delivered Source Instruction) : 전체 라인 수를 1,000라인 단위로 묶은 것으로 KLOC(Kilo LOC)와 같은 의미

- 사무 처리용, 업무용, 과학용 응용 소프트웨어 개발에 적합

- 비용 산정 공식

노력(MM) = 2.4 × (KDSI)1.05    개발기간(TDEV) = 2.5 × (MM)0.38


· 반분리형(Semi-Detached Model)

- 반분리형은 조직형과 내장형의 중간형으로 트랜잭션 처리 시스템이나 운영체제, 데이터베이스 관리 시스템 등의 30만(300KDSI) 라인 이하의 소프트웨어를 개발하는 유형

- 컴파일러, 인터프리터와 같은 유틸리티 개발에 적합

- 비용 산정 공식

노력(MM) = 3.0 × (KDSI)1.12    개발기간(TDEV) = 2.5 × (MM)0.35


· 내장형(Embedded Model)

- 내장형은 최대형 규모의 트랜잭션 처리 시스템이나 운영체제 등의 30만(300KDSI) 라인 이상의 소프트웨어를 개발하는 유형

- 신호기 제어 시스템, 미사일 유도 시스템, 실시간 처리 시스템 등의 시스템 프로그램 개발에 적합

- 비용 산정 공식

노력(MM) = 3.6 × (KDSI)1.20     개발기간(TDEV) = 2.5 × (MM)0.32


④ COCOMO 모형의 종류


COCOMO는 비용 산정 단계 및 적용 변수의 구체화 정도에 따라 기본, 중간, 발전형으로 구분


· 기본(Basic)형 COCOMO

기본형 COCOMO는 소프트웨어의 크기(생산 코드 라인 수)와 개발 유형만을 이용하여 비용을 산정하는 모형

- 산정 공식

▶ 개발 노력(Effort, MM, PM) = a × (KDSI)b

▶ 개발 기간(TDEV) = c × (MM)d

▶ 적정 투입 인원(FPS) = MM / TDEV

▶ 인적 비용(COST) = MM × 1인당 월평균 급여


· 중간(Intermediate)형 COCOMO

중간형 COCOMO는 기본형의 공식을 토대로 사용하나, 다음 4가지 특성의 15가지 요인에 의해 비용을 산정하는 모형

- 제품의 특성 : 요구되는 신뢰도, 데이터베이스 크기, 제품의 복잡도

- 컴퓨터의 특성 : 수행 시간의 제한, 기억장소의 제한, 가상 기계의 안정성, Turn Around Time

- 개발 요원의 특성 : 분석가의 능력, 개발 분야의 경험, 가상 기계의 경험, 프로그래머의 능력, 프로그래밍 언어의 경험

- 프로젝트 특성 : 소프트웨어도구의 이용, 프로젝트 개발 일정, 최신 프로그래밍 기법의 이용

- 산정 공식

▶ 개발 노력(MM) = 기본 COCOMO의 MM × 요인별 노력 승수

▶ 개발 기간(TDEV) = c × (MM)d

▶ 적정 투입 인원(FPS) = MM / TDEV

▶ 인적 비용(COST) = MM × 1인당 월평균 급여


· 발전(Detailed)형 COCOMO

발전형 COCOMO는 중간형을 보완하여 만들어진 방법으로 개발 공정별로 보다 자세하고 정확하게 노력을 산출하여 비용을 산정하는 모형

- 소프트웨어 환경과 구성 요소가 사전에 정의되어 있어야 하며, 개발 과정의 후반부에 주로 적용

- 산정 공식 : 중간형 산정 공식을 그대로 사용하되, 노력 승수를 다음과 같이 적용하여 산정

노력 승수 = 개발 공정별 노력 승수 × 개발 공정별 가중치


⑤ Putnam 모형


Putnam 모형은 소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 가정해주는 모형


· Putnam이 제안한 것으로 생명 주기 예측 모형이라고도 함

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

· 대형 프로젝트의 노력 분포 산정에 이용되는 기법

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

· 산정 공식

개발 노력(MM) = L/ (CK· Td4)

(L : 원시 코드 라인 수, Td : 개발 기간, CK : 환경 상수(빈약 환경=2,000, 좋은 환경=8,000, 최적 환경=12,000))


⑥ 기능 점수(FP) 모형


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


기능점수(FP) = 총 기능 점수 × [0.65 + (0.1 × 총 영향도)]


· 최근에 유용성과 간편성으로 비용 산정 기법 가운데 최선의 평가 받고 있음

· 기능별 가중치

소프트웨어 기능 증대 요인

 가중치

 단순

 보통

 복잡

 자료 입력(입력 양식)

 3

 4

 6

 정보 출력(출력 보고서)

 4

 5

 7

 명령어(사용자 질의수)

 3

 4

 5

 데이터 파일

 7

 10

 15

 필요한 외부 루틴과의 인터페이스

 5

 7

 10


※ 자동화 추정 도구

· SLIM : Rayleigh - Norden 곡선과 Putnam 예측 모델을 기초로 하여 개발된 자동화 추정 도구

· ESTIMACS : 다양한 프로젝트와 개인별 요소를 수용하도록 FP 모형을 기초로 하여 개발된 자동화 추정 도구



122 프로젝트 일정 계획


① 개요


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


· 소프트웨어 개발 기간의 지연을 방지하고 프로젝트가 계획대로 진행되도록 일정을 계획

· 계획된 일정은 프로젝트의 진행을 관리하는 데 기초 자료가 됨

· 계획된 일정과 프로젝트의 진행도를 비교하여 차질이 있을 경우 여러 조치를 통해 조정 가능

· 프로젝트 일정 계획을 위해서는 WBS, PERT/CPM, 간트 차트 등이 사용됨


② 기본 원칙


· 분할 : 프로젝트는 관리 가능한 여러 개의 작업들로 분할되어야 함

· 상호 의존성 : 분할된 각 작업들 간에 어떤 관계가 있는지 상호 의존성이 결정되어야 함

· 시간 할당 : 각 직업에 시간을 할당해야 함

· 노력 확인 : 소프트웨어 개발에 참여할 팀원들에 맞게 시간이 할당되었는지 확인해야 함

· 책임성 : 계획된 작업은 특정 팀에게 할당되어야 함

· 정의된 산출물·이정표 : 각 작업들은 정의된 산출물과 이정표를 가지고 있어야 함


③ 사람-노력 관계와 노력 분배


사람-노력 관계

· 소규모의 개발 프로젝트에서는 한 사람이 요구사항을 분석하고 설계, 코딩, 테스트까지 수행 가능

· 프로젝트 크기가 증가할수록 더 많은 사람들이 참여해야 함

· 프로젝트 진행중에 새로운 인력을 투입할 경우 작업 적응 기간과 부작용으로 인해 일정을 더욱 지연시키고, 프로젝트에 혼란을 가져오게 됨

※ Brooks의 법칙 : 프로젝트 진행주엥 새로운 인력을 투입하면 일정이 더 지연됨


노력 분배

· 예측된 노력을 각 개발 과정에 분배할 때는 40-20-40 규칙으 권장하며, 이는 분석과 설계에 40%, 코딩에 20%, 테스트에 40%를 분배

· 일반적으로 노력은 요구 분석이 10~25%, 설계가 20~25%, 코딩이 15~25%, 테스팅과 디버깅이 30~40%를 차지함


④ WBS(Work Breakdown Structure, 업무 분류 구조)


WBS는 개발 프로젝트를 여러 개의 작은 관리 단위로 분할하여 계층적으로 기술한 업무 구조


· 일정 계획의 첫 단계에서 작업을 분할할 때 사용되는 방법

· 계획 관리 단계에서 일정 계획과 인력 계획, 비용 산정의 기준이 됨

· 프로젝트 진행중에 발생하는 모든 작업을 알 수 있음

· 제품의 계층 구조 또는 프로세스의 계층 구조로 나타냄


⑤ PERT/CPM의 개요


PERT/CPM 네트워크는 프로젝트의 지연을 방지하고 계획대로 진행되게 하기 위한 일정을 계획하는 것으로, 대단위 계획의 조직적인 추진을 위해 자원의 제약하에 비용을 적게 사용하면서 초단시간 내 계획 완성을 위한 프로젝트 일정 방법


·  프로젝트 개발 기간을 결정하는 임계 경로를 제공(임계경로 : 하나의 제품을 개발하기 위한 여러 경로 중 제품이 완성되기까지, 가장 많은 기간을 소요하는 경로)

· 통계적 모델을 적용해서 개별 작업에 대한 가장 근접한 시간을 측정하는 기준이 됨

· 각 작업에 대한 시작 시간을 정의하여 작업들 간의 경계 시간을 계산할 수 있게 함


※ PERT와 CPM 모두 일정 관리를 위해 개발된 기법으로 PERT는 주로 소요 시간 예측이 어려운 경우, CPM은 소요 시간이 확실한 경우에 이용※ PERT/CPM 네트워크를 통해 계산될 수 있는 경계 시간들

· 모든 선행 작업들이 가능한 한 최단시간 내에 완성될 때 한 작업이 시작될 수 있는 가장 빠른 시간

· 최소의 프로젝트 완료 시간이 지연되기 전에 자업 개시를 위한 가장 늦은 시간

· 가장 빠른 완료 시간 : 가장 빠른 개시 시각과 작업 기간의 합

· 가장 늦은 완료 시간 : 가장 늦은 개시 시각과 작업 기간의 합

· 총 자유 시간 : 네트워크 임계 경로를 일정대로 유지하기 위해 작업에 허용된 잉여 시간의 양인 전체 여유 시간


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


PERT는 프로젝트에 필요한 전체 작업의 상호 관계를 표시하는 네트워크로 각 작업별로 낙관적인 경우, 가능성이 있는 경우, 비관적인 경우로 나누어 각 단계별 종료 시기를 결정하는 방법


· 과거에 경험이 없어서 소요 기간 예측이 어려운 소프트웨어에서 사용

· 노드와 간선으로 구성되며 원 노드에는 작업을, 간선(화살표)에는 낙관치, 기대치, 비관치를 표시

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

· 작업 예측치를 계산하는 PERT 공식


작업 예측치 = (비관치+4×기대치+낙관치/6)    평방 편차 = [(비관치-낙관치)/6]2


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


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


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

· 원형 노드가 각 작업을 의미하며 각 작업 이름과 소요 기간을 표시하고, 박스 노드는 이정표를 의미하며 박스 노드 위에는 예상 완료 시간을 표시

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

· 각 작업의 순서와 의존 관계, 어느 작업이 동시에 수행될 수 있는지를 한눈에 볼 수 있음

· 경영층의 과학적인 의사 결정을 지원하며, 효과적인 프로젝트의 통제를 가능하게 해줌


※ CPM 네트워크를 사용한 일정 계획의 순서

① 프로젝트의 규모 추정

② 각 단계에서 필요한 작업들을 분할

③ 각 작업의 상호 의존 관계를 CPM 네트워크로 나타냄

④ 일정 계획을 간트 차트로 나타냄


⑧ 간트 차트(Gantt Chart)


간트 차트는 프로젝트의 각 작업들이 언제 시작하고 언제 종료되는지에 대한 작업 일정을 막대 도표를 이용하여 표시하는 프로제트 일정표로, 시간선차트라고도 함


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

· 사용자와의 문제점이나 예산의 초과 지출 등도 관리 가능

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

· 다양한 형태로 변경하여 사용 가능

· 작업 경로는 표시할 수 없으며, 계획의 변화에 대한 적응성이 약함

· 계획 수립 또는 수정 때 주관적 수치에 기울어지기 쉬움

· 간트 차트는 이정표, 작업 일정, 작업 기간, 산출물로 구성되어 있음

· 수평 막대의 길이는 각 작업의 기간을 나타냄



123 프로젝트 조직 구성 계획


① 프로젝트 조직 구성 계획


· 프로젝트 조직 구성 계획은 프로젝트를 수행하기 위해 참여하는 각 구성원들의 역할을 할당하고 서로 어떤 방법을 통해 협력할 것인가를 정의하는 것

· 프로젝트를 완성하기 위해서는 프로젝트 단위로 팀을 구성하여 수행함

· 프로젝트 수행 기간, 작업의 특성, 팀 구성원 사이의 의사 교류 횟수에 의해팀 구성 방법이 달라질 수 있음

· 프로젝트 팀 구성은 의사 결정권이 누구에게 있느냐에 따라 분산형 팀 구성, 중앙 집중형 팀 구성, 계층적 팀 구성으로 나눌 수 있음


② 분산형 팀 구성


분산형 팀 구성은 팀원 모두가 의사 결정에 참여하는 비이기적인 구성 방식으로, 민주주의식 팀 구성이라고도 함


· 의사 결정을 민주주의식으로 하여 팀 구성원의 참여도와 작업 만족도를 높이고 이직률을 낮게 함

· 팀 구성원 각자가 서로의 일을 검토하고 다른 구성원이 일한 결과에 대하여 같은 그룹의 일원으로서 책임을 짐

· 여러 사람이 의사를 교류하므로 복잡하고 이해되지 않는 문제가 많은 장기 프로젝트 개발에 적합

· 링 모양의 구조를 가지며 이는 모든 구성원이 동등한 레벨에 있음을 보여줌

· 팀 구성 방법 중 가장 많은 의사 소통 경로를 갖는 구조

의사 소통 경로의 수 = n(n-1)/2

· 다양한 의사 교류오 인해 의사 결정 시간이 늦어지고, 개개인의 생산성 및 책임감이 낮아질 수 있음


③ 중앙 집중형 팀 구성


중앙 집중형 팀 구성은 한 관리자가 의사 결정을 하고 팀 구성원들은 그 결정에 따르는 구성 방식으로, 책임 프로그래머 팀 구성이라고 함


· 프로젝트 수행에 따른 모든 권한과 책임을 한 명의 관리자(책임(고급) 프로그래머)에게 위임하고, 기술 및 관리 지원을 위해 인력을 투입하는 형태

· 책임 프로그래머에 따라 의사 결정이 이루어지기 때문에 의사 결정이 빠르고, 의사 교환 경로를 줄일 수 있음

· 한 사람에 의해 통제할 수 있는 비교적 소규모 프로젝트에 적합

· 프로젝트의 성공은 책임 프로그래머의 능력에 달려 있음

· 중앙 집중형 팀 구성에서 각 구성원의 역할

 구성원

 역할

 책임(고급) 프로그래머

 요구 분석 및 설계, 중요한 기술적 판단, 프로그래머에게 작업 지시 및 배분 등

 프로그래머

 책임 프로그래머의 지시에 따른 원시 코드 작성, 테스트, 디버깅, 문서 작성 등

 프로그램 사서

 프로그램 리스트, 설계 문서, 테스트 계획 등을 관리

 보조 프로그래머

 책임 프로그래머의 업무 지원, 여러 가지 기술적인 문제에 대한 자문, 사용자와 품질 보증 담당자 등의 섭외, 책임 프로그래머 감독하에 분석, 설계, 구현 담당


④ 계층적 팀 구성


계층적 팀 구성은 분산형 팀 구성과 중앙 집중형 팀 구성을 혼합한 형태로, 혼합형 팀 구성이라고 함


· 5~7명의 초급 프로그래머를 작은 그룹으로 만들어 각 그룹을 고급 프로그래머가 관리하게 함

· 경험자와 초보자를 구별함

· 프로젝트 리더와 고급 프로그래머에게 지휘 권한을 부여하고, 의사 교환은 초급 프로그래머와 고급 프로그래머로 분산함

· 기술 인력이 관리를 담당하게 되어 좋은 기술력을 사장시킬 수 있으며, 기술 인력이 업무 관리 능력을 갖춰야 한다는 단점이 있음



124 소프트웨어 품질 보증


① 소프트웨어 품질과 품질 관리


· 소프트웨어 품질(Quality) : 주어진 요구사항을 만족시키는 능력을 갖추고 있는 소프트웨어의 측적 가능한 기능 및 특성을 의미

 설계 품질

 설계자가 한 품목을 위해 규정한 특성

 일치 품질

 설계 내용이 개발 과정에서 지켜지는 정도


· 소프트웨어 품질 관리(Quality Control) : 주어진 요구사항에 맞는 소프트웨어를 개발하기 위해 소프트웨어 개발의 전 과정 동안에 이루어지는 모든 활동과 그 활동의 결과로 생산되는 산출물에 대한 품질을 통제하고 보증하기 위한 작업


② 품질 표준(목표)


· 품질 표준(목표)은 명확하게 정의된 소프트웨어의 특성을 의미하며, 소프트웨어의 품질을 평가하는 기준 항목으로 사용됨


 구분

 품질 표준

 의미

 소프트웨어 운영 특성

 정확성

 사용자의 요구 기능을 충족시키는 정도

 신뢰성

 정확하고 일관된 결과를 얻기 위해 요구된 기능을 오류 없이 수행하는 정도

 효율성

 요구되는 기능을 수행하기 위한 필요한 자원의 소요 정도로, 소프트웨어가 자원을 쓸데없이 낭비하지 않아야 함

 무결성

 허용되지 않는 사용이나 자료의 변경을 제어하는 정도

 사용 용이성

 사용에 필요한 노력을 최소화하고 쉽게 사용할 수 있는 정도로, 소프트웨어는 적절한 사용자 인터페이스와 문서를 가지고 있어야 함

 소프트웨어 변경 수용 능력

 유지보수성

 변경 및 오류 사항의 교정에 대한 노력을 최소화하는 정도로, 사용자의 기능 변경의 필요성을 만족하기 위하여 소프트웨어를 진화하는 것이 가능해야 함

 유연성

 소프트웨어를 얼마만큼 쉽게 수정할 수 있는가 하는 정도

 시험 역량

 의도된 기능이 수행되도록 보장하기 위해 프로그램을 시험할 수 있는 정도

 소프트웨어 적응 능력

 이식성

 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정될 수 있는 정도

 재사용성

 전체나 일부 소프트웨어를 다른 목적으로 사용할 수 있는가 하는 정도

 상호 운용성

 다른 소프트웨어와 정보를 교환할 수 있는 정도


③ 소프트웨어 품질 보증(SQA; Software Quality Assurance)


· 소프트웨어 품질 보증은 어떠한 소프트웨어가 이미 설정된 요구사항과 일치하는가를 확인하는 데 필요한 개발 단계 전체에 걸친 계획적이고 체계적인 작업

· 소프트웨어 품질 보증 활동은 소프트웨어 개발 초기에 소프트웨어의 특성과 요구사항을 철저히 파악하여 품질 목표를 설정하고, 개발 단계에서는 정형 기술 검토를 통하여 품질 목표의 충족 여부를 점검하며, 개발 후에는 디버깅과 시험 과정을 거침

 

④ 정형 기술 검토의 개요(FTR; Formal Technicla Review)


· 정형 기술 검토는 가장 일반적인 검토 방법으로 소프트웨어 기술자들에 의해 수행되는 소프트웨어 품질 보증 활동

· 정형 기술 검토 유형에는 검토 회의, 겸열 등이 있으며 이는 모두 회의 형태로 수행됨


목적

· 검토중인 소프트웨어가 해당 요구사항과 일치하는지를 검증

· 소프트웨어가 미리 정해진 표준에 따라 표현되고 있는지를 확인하고, 기능과 로직에 오류가 있는지 확인·발견

· 소프트웨어가 균일한 방식으로 개발되도록

· 프로젝트를 보다 용이하게 관리하도록


⑤ 정형 기술 검토의 지침 사항


· 제품의 검토에만 집중

· 의제를 제한하여 진행

· 논쟁과 반박을 제한

· 문제 영역을 명확히 표현

· 해결책이나 개선책에 대해서는 논하지 말라

· 참가자의 수를 제한하고 사전 준비를 강요

· 검토될 확률이 있는 각 제품에 대한 체크 리스트를 개발

· 자원과 시간 일정을 할당

· 모든 검토자들을 위해 의미있는 훈련을 행하라

· 검토자들은 사전에 작성한 메모를 공유

· 검토의 과정과 결과를 재검토


⑥ 정형 기술 검토 유형


검토 회의(Walkthrough)

· 소프트웨어 개발의 각 단계에서는 개척하는 기술 평가 회의로, 소프트웨어 구성 요소와 같은 작은 단위를 검토하는 것

· 오류의 조기 검출을 목적으로 하며 발견된 오류는 문서화

· 검출된 오류는 검토 회의 기간 동안에 해결하지 않고 미뤄 두었다가 검토 회의 후에 해결

· 3~5명이 검토에 참여해야 하며 검토 회의 시간은 두 시간 이내로 해야 함

· 검토를 위한 자료를 미리 배포하여 검토하도록 하며, 미리 검토하는 시간은 2시간 이내


검열(Inspections, 심사)

· 검토 회의를 발전시킨 형태로, 소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하며 이를 개선시키는데 사용

· 검열 팀은 관련 분야에 대해 훈련을 받은 1~4명의 요원으로 구성되며, 검열자는 검열 항목에 대한 체크 리스트를 이용해 작업 수행



125 소프트웨어의 신뢰성과 가용성


① 소프트웨어의 신뢰성과 가용성


· 신뢰성 : 프로그램이 주어진 환경에서 주어진 시간 동안 오류 없이 작동활 확률

· 소프트웨어의 품질을 평가하는 다른 품질 표준과는 달리 과거의 자료와 개발상의 자료를 이용하여 측정과 예측 가능

· 하드웨어 신뢰성 측정의 기본 이론을 근거로 측정

· 가용성(신뢰도)는 한 프로그램이 주어진 시점에서 요구사항에 따라 운영되는 확률


② 신뢰성과 가용성 측정


· 소프트웨어의 간단한 신뢰성 측정은 MRBF 이용

· 가용성(신뢰도) 측정 : 시스템의 총 운용 시간 중 정상적으로 가동된 시간의 비율



126 위험 관리


① 위럼 관리(Risk Analysis)


위험 관리는 프로젝트 추진 과정에서 예상되는 각종 돌발 상황(위험)을 미리 예상하고 이에 적절한 대책을 수립하는 일련의 활동


· 위험은 불확실성과 손실을 내재하고 있는데, 위험 관리는 이러한 위험의 불확실성을 감소시키고 손실에 대비하는 작업

· 위험을 식별한 후 발생 확률을 산정하고, 그 영향을 추산하여 해당 위험에 대비하는 비상 계획을 마련

· 취험 관리의 절차는 위험 식별, 위험 분석 및 평가, 위험 관리 계획, 위험 감시 및 조치 순


② 위험의 범주


· 프로젝트 위험 : 프로젝트 계획을 위협하는 것으로, 일정이 지연되고 비용이 증가

· 기술 위험 : 소프트웨어의 품질이나 시기를 위협하는 것으로, 구현이 어려워지거나 불가능하게 됨

· 비즈니스 위험 : 소프트웨어의 생존 가능성을 위협하는 것으로, 원치 않는 제품이나 전략에 맞지 않는 제품 등을 개발


③ 위험의 종류


· 소프트웨어 개발 시 일반적인 위험 요소에는 인력 부족, 예산 관리, 일정 관리, 사용자 요구사항 변경등이 있으며, 이중 가장 대표적인 위험 요소는 사용자 요구사항 변경

위험의 종류(Charette에 의해 제안)

· 알려진 위험 : 프로젝트 계획서, 기술적 환경, 정보 등에 의해 발견될 수 있는 위험

· 예측 가능한 위험 : 과거 경험으로부터 예측할 수 있는 위험

· 예측 불가능한 위험 : 사전 예측이 매우 어려운 위험


④ 위험 식별(Risk Identification)


알려지거나 예측 가능한 위험 요소를 파악하는 작업으로, 위험 항목 점검 목록을 작성하여 활용


 위험 분석 및 평가


· 위험 분석은 프로젝트에 내재한 위험 요소를 인식하고 그 영향을 분석하는 활동으로, 위험 추산 작업을 통해 수행됨

· 가능한 모든 위험 요소와 영향을 분석하여 의사 결정에 반영

· 위험 요소에 대해 효과적이지 못한 관리는 프로젝트를 실패하는 결과도 가져올 수 있음

· 위험 추산을 위해 위험표를 작성하여 활용 


⑥ 위험 관리 계획


위험을 예방하고 위험 발생 시 대책을 준비하여 문서화하는 작업


위험 감시 및 조치


위험 내용을 항상 감시하고 실제 발생 시 조치하는 것으로 다음과 같은 전략 사용


· 위험 회피 : 위험 관리에 대한 최상의 전략으로 위험이 발생될 것을 예상하고 회피하는 것

· 위험 감시 : 위험 요소 징후들에 대하여 계속적으로 인지하는 것

· 위험 관리 및 비상 계획 수립 : 위험 회피 전략이 실패할 경우 위험에 대해 관리하고 대비책과 비상 계획을 세움



127 소프트웨어 형상 관리


① 형상 관리


형상 관리(SCM; Software Configuration Management)는 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동

· 소프트웨어 변경의 원인을 아아내고 제어하며 적절히 변경되고 있는지 확인하여 해당 담당자에게 통보하는 작업

· 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동으로, 유지보수 단계에서도 수행됨

· 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 함


② 소프트웨어 형상 항목(SCI; Software Configuration Item)


· 시스템 명세서

· 소프트웨어 프로젝트 계획서

· 소프트웨어 요구사항 명세와 실행 가능한 프로토타입

· 예비 사용자 매뉴얼

· 설계 명세서

· 원시 코드 목록

· 테스트 계획, 절차, 시험 사례, 결과

· 운영과 설피에 필요한 매뉴얼

· 실행 프로그램

· 데이터베이스 기술서 : 스키마, 파일 구조, 초기 내용

· 구축된 사용자 매뉴얼

· 유지 보수 문서 : 변경 요청서, 변경 처리 보고서

· 소프트웨어 공학을 위한 표준과 절차


③ 형상 관리 기능


· 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업

· 버전 제어 : 소프트웨어 처리 시 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구를 결합시키는 작업

· 변경 제어 : 식별된 형상 항목의 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정하는 작업

· 형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업

· 형상 상태 보고 : 형상의 식별, 통제, 감사 자업의 결과를 기록·관리하고 보고서를 작성하는 작업




출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 4과목 소프트웨어 공학


1장 소프트웨어 공학의 개요


112 소프트웨어와 시스템


① 소프트웨어의 개요


· 소프트웨어는 하드웨어를 동작시켜 사용자가 작업을 편하게 수행하도록 하는 프로그램과 자료구조 등을 총칭

· 소프트웨어는 프로그램 자체뿐만 아니라 프로그램의 개발, 운용 및 유지보수에 관련된 모든 문서와 정보를 포함 


※ 프로그램 : 작업 실행 시 요구되는 기능과 성능을 제공해주는 명령어들의 집합

※ 자료구조 : 기억공간 내에서 자료 표현이나 처리 방법, 자료 간의 관계 등을 나타내는 것



② 소프트웨어의 특징


· 상품성 : 개발된 소프트웨어는 상품화되어 판매됨

· 견고성 : 일부 수정으로 소프트웨어 전체에 영향을 줄 수 있음

· 복잡성 : 개발 과정이 복잡하고 비표준화되어 이해와 관리가 어려움

· 순응성 : 사용자의 요구나 환경 변화에 적절히 변경할 수 있음

· 비가시성 : 소프트웨어의 구조가 외관으로 나타나지 않고, 코드 속에 숨어 있음

· 비마모성 : 사용에 의해 마모되거나 소멸되지 않음

· 비제조성 : 하드웨어처럼 제작되지 않고 논리적인 절차에 맞게 개발됨

· 비과학성 : 소프트웨어 개발 자체는 수학적이거나 과학적인 것이 아니라 조직, 인력, 시간, 비용, 절차 등이 중심이 됨


③ 소프트웨어의 분류


· 기능에 의한 분류 : 소프트웨어의 기능에 따라 분류 → 시스템 소프트웨어와 응용소프트웨어

· 사용 분야에 의한 분류 : 소프트웨어가 사용되는 분야에 따라 분류 → 프로그래밍용, 문서 작성용, 통신용, 분산 처리용, 멀티미디어용, 소프트웨어 개발용, 인공지능용

· 개발 과정의 성격에 따른 분류 : 소프트웨어가 개발되는 과정의 성격에 따라 분류 → 프로토타입, 프로젝트 산출물, 패키지

· 정보처리 방법에 따른 분류 : 정보를 처리하는 방법에 따라 분류 → 일괄 처리 소프트웨어, 온라인 소프트웨어, 실시간 소프트웨어


※ 개발 과정의 성격에 따른 분류

· 프로토타입(Prototype) : 사용자의 요구 사항을 정확히 분석하고 쉽게 이해할 수 있도록 지원하는 견본품, 시제품

· 프로젝트(Project) 산출물 : 아직 상품화되지 않은 연구 과정에서 생산된 소프트웨어

· 패키지(Package) : 소프트웨어 개발이나 업무 처리를 지원하기 위해서 개발된 상품형 소프트웨어


④ 시스템


시스템은 공통의 목적이나 목표를 달성하기 위하여 여러 가지 상호 관련된 요소들을 유기적으로 결합한 것


· 소프트웨어는 독립적으로 존재할 수 없으므로 컴퓨터를 기반으로 하는 여러 시스템과 관련을 맺어 상호 동작함

· 시스템의 구성 요소

[그림 1] 시스템 구성 요소

· 입력(Input) : 처리 방법, 처리할 데이터, 조건을 시스템에 투입하는 것

· 처리(Process) : 입력된 데이터를 처리 방법과 조건에 따라 처리하는 것

· 출력(Output) : 처리된 결과를 시스템에서 산출하는 것

· 제어(Control) : 자료를 입력하여 출력될 때까지의 처리 과정이 올바르게 진행되는지 감독하는 것

· 피드백(FeedBack) : 출력된 결과가 예쩡된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리하는 것

⑤ 소프트웨어 위기의 원인


소프트웨어 위기는 여러 가지 원이에 의해 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생함을 의미


· 소프트웨어의 특징에 대한 이해 부족 : 물리적이지 않고 논리적인 소프트웨어의 특징을 이해 못함

· 소프트웨어의 관리 부재 : 소프트웨어에 대한 관리를 소홀히 하여 효율적인 자원 통제가 이루어지지 못함

· 프로그래밍에만 치중 : 소프트웨어의 품질이나 유지보수는 고려하지 않고, 프로그래밍만 잘하려고 집착함으로써 다양하고 복잡해지는 소프트웨어의 요구사항을 처리하지 못함


⑥ 소프트웨어 위기의 결과


· 개발 인력의 부족과 그로 인한 인건비 상승

· 성능 및 신뢰성 부족

· 개발 기간 지연 및 개발 비용 증가

· 유지보수가 어렵고, 이에 따른 비용 증가

· 소프트웨어의 생산성 저하

· 소프트웨어의 품질 저하



113 소프트웨어 공학 


① 소프트웨어 공학의 개념


· 소프트웨어 공학은 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문이며 여러 가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상이 목적

· 소프트웨어 공학은 다음과 같이 여러 형태로 정의 가능

- IEEE의 소프트웨어 공학 표준 용어사전 : 소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한 체계적인 접근 방안

- Fairley : 지정된 비용과 기간 내에 소프트웨어를 체계적으로 생산하고 유지보수하는 데 관려된 기술적이고 관리적인 원리

- Boehm : 과학적인 지식을 소프트웨어 설계와 제작에 응용하는 것이며 이를 개발, 운용, 유지보수하는 데 필요한 문서 작성 과정

· 소프트웨어 공학은 제품을 단지 생산하는 것이 아니라 가장 경제적인 방법으로 양질의 제품을 생산하는 것

· 소프트웨어 공학은 안정적이며 효율적으로 작동하는 소프트웨어를 생산하고, 유지보수 활동을 체계적이고 경제적으로 수행하기 위해 계층화 기술 사용


② 계층화 기술


계층화 기술은 관리자가 소프트웨어 개발 과정을 제어하고, 기술진이 고품질의 소프트웨어를 구축할 수 있도록 하는 기술을 의미하며, 계층화 기술에는 도구, 방법, 절차가 있음

[그림 2] 계층화 기술

· 도구(Tool) : 절차와 방법을 자동 또는 반자동으로 처리하는 기능을 제공하는 것으로, 대표적으로 CASE(Computer Aided Software Engineering)를 사용

· 방법(Method) : 소프트웨어를 구축하는 기술적인 방법을 제공

· 절차(Process) : 소프트웨어 공학의 기반이되는 것으로, 소프트웨어 개발에 사용되는 개발 방법과 도구가 사용되는 순서

계층화 기술들을 결합시켜 합리적이고 적절한 방법으로 소프트웨어를 개발하고 유지시키는 역할


③ 소프트웨어 공학의 기본 원치


· 현대적인 프로그래밍 기술을 계속적으로 적용해야 함

· 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 함

· 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 함


④ 소프트웨어 공학의 발전



⑤ 소프트웨어의 품질과 생산성


소프트웨어의 품질

소프트웨어의 품질은 주어진 요구사항을 만족시키는 능력을 갖추고 있는 소프트웨어의 측정 가능한 기능 및 특성을  의미하며, 좋은 품질의 소프트웨어는 다음과 같은 특성을 갖음

· 사용자가 요구하는 대로 동작해야 함

· 하드웨어 자원을 효율적으로 이용할 수 있어야 함

· 일정 시간 내에 주어진 조건하에서 원하는 기능을 실행할 수 있어야 함

· 애매모호함이 없이 처리 절차에 맞게 수행되어 정확하게 결과가 산출되어야 함

· 소프트웨어의 개발, 유지보수 등이 초기 예상 비용 이내에서 수행되어야 함

· 적당한 사용자 인터페이스 제공으로 사용하기가 편리해야 함

· 유지보수가 용이하고 신뢰성이 높아야 함

· 잠재적인 에러가 최소화되어야 함

· 소프트웨어의 사용법, 구조의 설명, 성능, 기능 등이 이해하기 쉬워야 함

· 실행 속도가 빠르고, 기억 용량을 적게 차지해야 함


소프트웨어의 생산성

소프트웨어의 생산성은 투입된 비용, 노력 등에 대한 생산량을 의미하는 것으로, 생산성에 영향을 미치는 요소는 다음과 같음

· 개발자의 능력

· 원할한 의사 전달

· 프로젝트의 복잡도와 성격

· 기술 수준

· 관리 기술



114 소프트웨어 생명 주기


① 소프트웨어 생명 주기의 개요


· 소프트웨어 생명 주기는 소프트웨어 개발 방법론의 바탕이 되는 것으로 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것

· 소프트웨어 생명 주기는 소프트웨어 개발 단계와 각 단계별 주요 활동, 활동의 결과에 대한 산출물로 표현하며, 소프트웨어 수명 주기라고도 함

· 소프트웨어 생명 주기의 역할

- 프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격이 됨

- 프로젝트 진행 방향을 명확하게 파악하게 함

- 용어 및 기술의 표준화를 가능하게 함

- 프로젝트 관리를 용이하게 함

- 여러 소프트웨어 간에 상호 일관성을 유지하게 함


② 일반적인 소프트웨어 생명 주기


정의 단계 → 개발 단계 → 유지보수 단계


정의단계

· '무엇'을 처리하는 소프트웨어를 개발할 것인지를 정의하는 단계로,관리자와 사용자가 가장 많이 참여하는 단계

- 타당성 검토 단계 : 개발할 소프트웨어가 법적, 경제적, 기술적으로 실현 가능성이 있는지를 조사하는 단계

- 개발 계획 단계 : 소프트웨어 개발에 사용될 자원과 비용을 측정하는 단계

- 요구사항 분석 단계 : 사용자가 요구한 문제를 보다 상세하고 정확히 분석하는 단계


개발 단계

· '어떻게'에 초점을 두고 실제적으로 소프트웨어를 개발하는 단계

- 설계 단계 : 소프트웨어의 구조, 알고리즘, 자료 구조 등을 작성하는 단계로, 프로그램 설계용 언어나 자연 언어 또는 도표로 표현

에러가 가장 많이 발생하는 단계

- 구현 단계 : 설계 단계에서 작성된 문서를 기초로 하여 코딩하고 번역하는 단계

- 테스트 단계 : 구현된 소프트웨어에 내재되어 있는 오류를 찾아주는 단계


유지보수 단계

· 소프트웨어를 직접 운용하며, '변경'에 초점을 두고 여러 환경 변화에 따라 소프트웨어를 적응 및 유지시키는 단계

· 소프트웨어 생명 주기 단계 중에서 시간과 비용이 가장 많이 듬



115 소프트웨어 생명 주기 모형1


① 소프트웨어 생명 주기의 개요


· 소프트웨어 생명 주기를 표현하는 형태를 소프트웨어 생명 주기 모형이라고 하며, 소프트웨어 프로세스 모형 또는 소프트웨어 공학 패러다임

· 개발자는 문제의 유형이나 개발 방법 등에 따라 특정 모형을 선택하여 사용할 수도 있고, 개별적인 모형을 사용할 수도 있음

· 일반적으로 사용되는 소프트웨어 생명 주기 모형에는 폭포수 모형, 프로토타입 모형, 나선형 모형, 4세대 모형 등이 있음


② 폭포수 모형


폭포수 모형은 폭포에서 한번 떨어진 물은 거슬러 올라갈 수 없듯이 소프트웨어 개발도 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하며 이전 단계로 넘어갈 수 없는 방식


· 폭포수 모형은 소프트웨어 공학에서 가장 오래되고 가장 폭넓게 사용된 전통적인 소프트웨어 생명 주기 모형으로, 고전적 생명 주기 모형이라고도 함

· 소프트웨어 개발 과정의 앞 단계가 끝나야만 다음 단계로 넘어갈 수 있는 선형 순차적 모형

· 제품의 일부가 될 매뉴얼을 작성해야 함

· 다음 단계를 수행하기 위해 각 단계가 끝난 후에는 결과물이 정확하게 산출되어야 함

· 두 개 이상의 과정이 병행하여 수행되지 않음


개발 순서

타당성 검토 → 계획 → 요구 분석 → 설계 → 구현(코딩) → 시험(검사) → 유지보수


장점

· 모형의 적용 경험과 성공 사례가 많음

· 단계별 정의가 분명하고, 전체 공조의 이해가 용이함

· 단계별 산출물이 정확하여 개발 공정의 기준점을 잘 제시함

단점

· 개발 과정중에 발생하는 새로운 요구나 경험을 반영하기 어려우므로 처음부터 사용자들이 모든 요구사항들을 명확하게 제시해야 함

· 단계별로 오류 없이 다음 단계로 진행해야 하는데 현실적으로 오류 없이 다음 단계로 진행하기는 어려움

· 개발된 프로그램을 업무에 운용할 대 검출되지 않은 오류로 인하여 사용자들이 큰 인내심을 가져야 함


③ 프로토타입 모형


프로토타입 모형은 사용자의 요구 사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형

· 시제품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발

· 시스템의 일부 혹은 시스템의 모형을 만드는 과정으로서 요구된 소프트웨어를 구현하는데, 이는 추후 구현 단계에서 사용될 골격 코드가 됨

· 소프트웨어의 개발이 완료된 시점에서 오류가 발견되는 폭포수 모형의 단점을 보완하기 위한 모형

· 프로토타입은 요구 분석 단계에서 사용하게 되며, 프로토타입의 평가가 끝나고 개발이 승인되면 다른 모형을 이용하여 본격적으로 개발이 이루어짐

· 소프트웨어 생명주기에서 유지보수가 없어지고, 개발 단계 안에서 유지보수가 이루어지는 것으로 볼 수 있음


개발 순서


[그림 3] 프로토타입 모형 개발 순서


장점

· 요구사항을 충실히 반영하며, 요구사항의 변경이 용이

· 최종 결과물이 만들어지기 전에 의뢰자가 최종 결과물의 일부 또는 모형을 볼 수 있음

· 프로토타입은 의뢰자나 개발자 모두에게 공동의 참조 모델을 제공


단점

· 미리 제작된 소프트웨어를 사용할 경우 실제 소프트웨어와의 차이가 발생할 수 있어 사용자에게 혼란을 줄 수 있음

· 단기간에 제작해야 하기 때문에 비효율적인 언어나 알고리즘을 사용할 수 있음



116 소프트웨어 생명 주기2


① 나선형 모형


나선형 모형은 보헴이 제안한 것으로, 폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형


· 나선형을 따라 돌듯이 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로(프로토타입을 지속적으로 발전시켜) 완벽한 최종 소프트웨어를 개발하는 것으로, 점진적 모델

· 소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 함


개발 순서

① 계획 및 정의(Planing) : 개발 목적, 제약 조건 등을 설정

② 위험 분석(Risk Analysis) : 위험 요소를 분석하고, 기능 선택의 우선순위를 지정

③ 공학적 개발(Engineering) : 개선된 한 단계 높은 수준의 프로토타입을 개발

④ 고객 평가(Customer Evaluation) : 개발된 결과(프로토타입)을 평가


·단점

· 가장 현실적인 모형으로, 대규모 프로젝트나 큰 시스템에 적합

· 점진적으로 개발 과정이 반복되므로 누락되거나 추가된 요구사항 첨가 가능하고 정밀하며 유지보수 과정이 필요 없음

· 위험 분석 단계에서 기술과 관리의 위험 요소들을 하나씩 제거해 나감으로서 완성도 높은 소프트웨어를 만들 수 있음

· 위험성 평가에 크게 의존하기 때문에 이를 발견하지 않으면 반드시 문제가 발생함

· 비교적 최신 기법이므로 폭포수 모형이나 프로토타입 모형보다 널리 사용되지 않음


② 4GT 모형


4GT 모형은 사용자와 개발자가 쉽게 접근하고 사용할 수 있는 4세대 언어를 이용하여 개발자가 조사한 요구사항 명세서로부터 원시 코드를 자동으로 생성할 수 있게 해주는 모형


· 설계 단계를 축소하고, 요구 분석 단계에서 구현 단계로 전환할 수 있는 비절차적 모형


개발 순서

요구사항 수집 → 설계 전략 → 4세대 언어를 이용한 구현 → 제품화


·단점

· 설계 단계 단축 가능

· 4세대 언어를 사용하므로 원시 코드를 자동으로 생성함

· 중·소형 소프트웨어 개발에 사용하면 개발 시간이 감소되지만 대규모 소프트웨어 개발에서는 자동화로 인해 단축된 시간보다 분석, 설계 단계 등에서 더 많은 시간을 필요로 함




출처 : 2017 시나공 정보처리기사 필기

정보처리기사 필기 - 1과목 데이터베이스


5장 자료 구조의 기본


030 자료 구조의 개념


① 자료 구조의 정의


- 효율적인 프로그램을 작성할 때 가장 우선적인 고려사항은 저장공간의 효율성과 실행시간의 신속성

- 자료구조는 프로그램에서 사용하기 위한 자료를 기억장치의 공간 내에 저장하는 방법과 저장된 그룹 내에 존재하는 자료 간의 관계, 처리 방법 등을 연구 분석하는 것

· 자료 구조는 자료의 표현과 그것과 관련된 연산

· 자료 구조는 일련의 자료들을 조직하고 구조화하는 것

· 어떠한 자료 구조에서도 필요한 모든 연산들을 처리하는 것이 가능

· 자료 구조에 따라 프로그램 실행시간이 달라짐


② 자료 구조의 분류


[그림 1] 자료 구조 분류



③ 자료 구조의 이용


· 정렬(Sort) : 기억장치 내의 자료를 일정한 순서에 의해 나열하는 것

· 검색(Search) : 기억장치 내의 자료를 찾는 것 

· 파일 편성 : 자료를 기억 매체에 저장할 때의 파일 구조

· 인덱스 : 파일에서 특정 자료를 빠르게 찾기 위한 색인표



031 리스트


① 선형 리스트(Linear List)


· 선형 리스트는 배열과 같이 연속되는 기억장소에 저장되는 리스트

· 연접 리스트 또는 축자구조라고도 함

· 선형 리스트의 대표적인 구조 : 배열(Array)


특징

· 가장 간단한 자료 구조

· 접근 속도 빠름

· 중간에 자료를 삽입하기 위해서는 연속된 빈 공간 있어야 함

· 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋음

· 자료의 개수가 n개일 때 삽입 시의 평균 이동 횟수는 (n+1)/2이고, 삭제 시에는 (n-1)/2

· 삽입, 삭제 시 자료의 이동이 필요하기 때문에 작업이 번거로움


② 연결 리스트(Linked List)


연결 리스트는 자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조


연결 리스트의 특징

· 노드의 삽입, 삭제 작업이 용이

· 기억공간이 연속적으로 놓여 있지 않아도 저장이 가능

· 연결을 위한 링크(포인터)부분이 필요하기 때문에 순차 리스트에 비해 기억공간 이용 효율이 좋지 않음

· 연결을 위한 포인터를 찾는 시간이 필요하기 때문에 접근 속도 느림

· 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘듦

· 희소 행렬을 링크드 리스트로 표현하면 기억장소가 절약됨

· 트리를 표현할 때 가장 적합한 자료 구조


※ 노드(Node)

 Data 부분

 Link 부분

자료를 저장하는 데이터 부분과 다음 노드를 가리키는 포인터인 링크 부분으로 구성된 기억공간


※ 포인터(Pointer)

현재의 위치에서 다음 노드의 위치를 알려주는 요소

· 프런트 포인터 : 리스트를 구성하는 최초의 노드 위치를 가리키는 요소

· 널 포인터 : 0또는 ∧, \0으로 표시하며, 마지막 노드의 링크 부분에 일반적으로 사용하는 것으로, 다음 노드가 없음을 나타내는 포인터

※ 희소 행렬

희소 행렬은 행렬의 요소 중 많은 항들이 0으로 되어 있는 형태로, 기억장소를 절약하기 위해 링크드 리스트를 이용하여 저장


연결 리스트의 종류

· 단순 연결 리스트

· 단순 환상 연결 리스트

· 이중 연결 리스트

· 이중 환상 연결 리스트



032 스택(Stack)


① 스택의 개념


· 스택은 리스트 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조

· 스택은 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO; Last In First Out) 방식으로 자료 처리

· TOP

- Stack으로 할당된 기억공간에서 가장 마지막으로 삽입된 자료가 기억된 위치를 가리키는 요소

- 스택 포인터(SP, Stack Pointer)라고도 함

·Bottom : 스택의 가장 밑바닥


② 자료의 삽입(Push)


 Top = Top +1

 If Top > M Then

Overflow

 Else

X(Top) ← Item

 스택 포인터(Top)를 1 증가시킴
 스택 포인터가 스택의 크기보다 크면 Overflow
 

 그렇지 않으면 Item이 가지고 있는 값을 스택의

 Top위치에 삽입


· M : 스택의 크기

· Top : 스택 포인터

· X : 스택의 이름

· Overflow : 스택으로 할당받은 메모리 부분의 마지막 주소가 M번지라고 할 때, Top Pointer의 값이 M보다 커지만 스택의 모든 기억장소가 꽉 채워져 있는 상태이므로 더 이상 자료를 삽입할 수 없어 Overflow 발생시킴


③ 자료의 삭제(Pop Up)


 If Top = 0 Then

Underflow

 Else

Item ← X(Top)

Top = Top - 1

 스택 포인터가 0이면 스택의 바닥이므로 더 이상 삭제할 자료가 없으므로

 Underflow를 처리함

 그렇지 않으면

 Top 위치에 있는 값을 Item으로 옮기고

 스택 포인터를 1 감소시킴


※ Stack에 기억되어 있는 자료를 삭제시킬 때는 제일 먼저 삭제할 자료가 있는지 앖는지부터 확인해야 함

· Underflow : Top Pointer가 주소 0을 가지고 있다면 스택에는 삭제할 자료가 없으므로 Underflow를 발생시킴


※ Overflow : 꽉 채워져 있는 상태로 더 이상 자료를 삽입할 수 없는 상태

   Underflow : 자료가 없어서 자료를 제거할 수 없는 상태


④ Stack의 응용 분야


· 부 프로그램 호출 시 복귀주소를 저장할 때

· 함수 호출의 순서 제어

· 인터럽트가 발생하여 복귀주소를 저장할 때

· 후위 표기법(Postfix Notation)으로 표현된 수식을 연산할 때

· 0 주소지정방식 명령어의 자료 저장소

· 재귀(Recursive) 프로그램의 순서 제어

· 컴파일러를 이용한 언어 변역 시



033 큐(Queue)와 데크(Deque)


① 큐(Queue)


· 선형 리스트의 한쪽에서는 삽입 작업이 이루어지고 다른 한쪽에서는 삭제 작업이 이루어지도록 구성한 자료 구조

· 가장 먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO; First In First Out) 방식으로 처리

· 시작과 끝을 표시하는 두 개의 포인터 있음

· 프런트(F, Front) 포인터

- 가장 먼저 삽입된 자료의 기억 공간을 가리키는 포인터

- 삭제 작업할 때 사용

· 리어(R, Rear) 포인터

- 가장 마지막에 삽입된 자료가 위치한 기억장소를 가리키는 포인터

- 삽입 작업할 때 사용

· Queue의 응용분야

- 청구 업무나 택시 정거장처럼 서비스 순서를 기다리는 등의 대기 행렬의 처리에 사용

- 운영체제의 작업 스케줄리에 사용


② 데크(Deque)


· 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료 구조

· Double Ended Queue

· Stack과 Queue의 장점만 따서 구성한 것

· 입력이 한쪽에서만 발생하고 출력은 양쪽에서 일어날 수 있는 입력 제한과, 입력은 양쪽에서 일어나고 출력은 한 곳에서만 이루어지는 출련 제한있음

· 입력 제한 데크 : Scroll

· 출력 제한 데크 : Shelf



034 트리(Tree)


① 트리의 정의


· 트리는 정점(노드)과 선분을 이용하여 사이클을 이루지 않도록 구성한 Graph의 특수한 형태

· 가족 계보(족보), 연산 수식, 회사 조직 구조도, 히프(Heap) 등을 표현하기에 적합


② 트리 관련 용어


[그림 2] 트리


· 노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지를 합친 것

· 근 노드(Root Node) : 트리의 맨 위에 있는 노드

· 디그리(Degree) : 각 노드에서 뻗어나온 가지의 수

· 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드, 즉 Degree가 0인 노드

· 비단말 노드(Non-Terminal Node) :자식이 하나라도 있는 노드, 즉 Degree가 0이 아닌 노드

· 조상 노드(Ancestors Node) : 임의의 노드에서 근 노드에 이르는 경로상에 있는 노드들

· 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드

· 부모 노드(Parent Node) : 어떤 노드 연결된 이전 레벨의 노드

· 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들

· Level : 근 노드의 Level을 1로 가정한 후 어떤 Level이 L이면 자식 노드는 L+1

· 깊이(Depth, Height) : Tree에서 노드가 가질 수 있는 최대의 레벨

· 숲(Forest) : 여러 개의 트리가 모여 있는 것

· 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수



035 이진 트리


이진 트리는 차수(Degree)가 2 이하인 노드들로 구성된 트리, 즉 자식이 둘 이하인 노드들로만 구성된 트리


① 이진트리의 특성


· 이진 트리의 레벨 i에서 최대 노드의 수 :  2n-1

· 이진 트리에서 Terminal Node수가 n0, 차수가 2인 노드 수가 n2라 할 때 n0n+ 1



② 이진 트리의 종류


정이진 트리(Full Binary Tree)

- 정이진 트리는 깊이(Depth)가 k일 때 전체 노드의 수가 2k-1개의 노드이고, 레벨 i마다 2i-1개의 노드들로 꽉 찬 트리를 말함


전이진 트리(Complete Binary Tree)

· 전이진 트리는 노드의 개수가 n개일 때, 정이진 트리의 각 노드에 붙인 1~n의 일련번호와 1:1 대응되는 트리를 말함

· 중간에 빈 부분이 있으면 전이진 트리 될 수 없음


사향 이진 트리(Skewed Binary Tree)

· 사향 이진 트리는 루트 노드로부터 왼쪽 또는 오른쪽으로만 기울어진 트리, 즉 왼쪽 또는 오른쪽 자식이 없는 노드들로만 구성된 트리를 말함

· 왼쪽 사향 이진 트리 : 오른쪽 자식이 없는 노드들로만 구성된 트리

· 오른쪽 사향 이진 트리 : 왼쪽 자식이 없는 노드들로만 구성된 트리



036 이진 트리의 운행법(Traversal)


· 트리를 구성하는 각 노드들을 찾아가는 방법 :  운행법

· 이진 트리를 운행하는 방법은 산술식의 표기법과 연관성 가짐


① 트리의 운행법


· Preorder 운행 : Root → Left → Right 순으로 운행

· Inorder 운행 : Left → Root → Right 순으로 운행

· Postorder 운행 : Left → Right → Root 순으로 운행


② 수식의 표기법


산술식을 계산하기 위해 기억공간에 기억시키는 방법으로 이진 트리를 많이 사용함

이진 트리로 만들어진 수식을 인오더, 프리오더, 포스트오더로 운행하면 각각 중위(Infix), 전위(Prefix), 후위(Postfix) 표기법이 됨


· 전위 표기법(PreFix) : 연산자 → Left → Right, +AB

· 중위 표기법(InFix) : Left → 연산자 → Right, A+B

· 후위 표기법(PostFix) : Left → Right → 연산자, AB+


Infix 표기를 Postfix나 Prefix로 바꾸기

· Postfix나 Prefix는 스택을 이용하여 처리하므로 Infix는 Postfix나 Prefix로 바꾸어 처리


Postfix나 Prefix로 표기된 수식을 Infix로 바꾸기

· Postfix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 뒤로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨

· Prefix는 Infix 표기법에서 연산자를 해당 피연산자 두 개의 앞으로 이동한 것이므로 연산자를 다시 해당 피연산자 두 개의 가운데로 옮기면 됨


③ 스레드 이진 트리(Threaded Binary Tree)


· 스레드 이진 트리는 이진 트리에서 발생하는 널 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 고안된 트리

· 이진 트리를 이중 연결 리스트로 표현할 때 임의의 노드에 대한 자식 노드가 없는 부분의 링크 포인터로 Nil Pointer를 기억시키게 됨

· 스레드 이진 트리 표현 방법

- 어떤 노드의 왼쪽 링크 포인터가 Nil이면 그 노드의 직전에 검사된 노드를 가리키는 포인터로 사용하고, 오른쪽 링크 포인터가 Nil이면 그 노드의 직후에 검사될 노드를 가리키는 포인터로 사용

- 해당 노드의 직전, 직후 노드는 트리 운행법에 따라 방문한 노드의 순서대로 결정



037 그래프


① 그래프의 정의


· 그래프 G는 정점 V와 간선 E의 두 집합으로 이루어짐

· 통신망(Network), 교통망, 이항관계, 연립방정식, 유기화학 구조식, 무향선분 해법등에 응용됨

· Tree는 사이클이 없는 Graph


② 용어 정리


Loop : 한 정점에서 그 자신에 이어지는 간선 Loop


차수(Degree)

· 무방향 그래프 : 한 정점에 연결된 간선의 수

· 방향 그래프

- 진입 차수(Indegree) : 한 정점에 도착하는 방향 간선의 수

- 진출 차수(Outdegree) : 한 정점에서 출발하는 방향 간선의 수

- 차수(Degree) : 진입 차수 + 진출 차수


경로 : 임의의 정점에서 다른 정점으로 이르는 길

· 경로 길이(Path Length) : 경로상에 있는 간선들의 수

· 단순 경로 : 한 경로상에 있는 모든 간선이 서로 다를 떄의 경로, 즉 같은 간선을 두 번 이상 지나지 않는 경로

· 기본 경로 : 한 경로상에 있는 모든 정점이 유일할 때의 경로, 즉 같은 정점을 두 번 이상 지나지 않는 경로

· 사이클 : 같은 정점에서 시작과 끝이 이루어지는 경로

· 최대 사이클 : 사이클을 이루는 경로 중 최대 경로 길이


연결 요소 : 무방향 그래프에서의 최대 연결 서브 그래프


강력 연결 요소 : 방향 그래프에서 두 정점 사이의 간선이 양방향으로 서로 강력하게 연결되어 있는 요소, 즉 두 정점 사이에 방향 사이클이 이루어지는 요소


③ 인접행렬을 이용한 그래프의 표현 방법


④ 특수 그래프


최소 비용 신장 트리

· 최소 비용 신장 트리는 가중치가 가장 작은 간선들을 사이클을 이루지 않도록 연결시켜 만든 그래프


간선 작업 네트워크

· 간선 작업 네트워크는 프로젝트를 해결하기 위해 수행되는 작업 순서를 나타내는 방향 그래프

· 간선은 작업과 작업시간을 나타내고, 정점이 공정을 나타냄

· 임계 경로 : 최장 길이를 갖는 경로



038 정렬(Sort)의 개요


정렬은 파일을 구성하는 각 레코드를 특정 키 항목을 기준으로 오름차순 또는 내림차순으로 재배열하는 작엄


① 정렬 방식

    정렬은 크게 주기억장치에서 이루어지는 내부 정렬과 보조기억장치에서 이루어지는 외부 정렬로 구분됨


내부정렬

· 선택법 : 히프 정렬

· 삽입법 : 삽입 정렬, 쉘 정렬

· 교환법 : 버블 정렬, 선택 정렬, 퀵 정렬

· 병합법(합병법) : 2-Way Merge Sort

· 분배법(분산법) : 기수 정렬(Radix Sort)


외부 정렬

· 밸런스 병합 정렬

· 캐스케이드 병합 정렬

· 폴리파즈 병합 정렬

· 오실레이팅 병합 정렬


② 정렬 알고리즘 선택 시 고려 사항


· 데이터의 양

· 초기 데이터의 배열 상태

· 키 값들의 분포 상태

· 소용공간 및 작업 시간

· 사용 컴퓨터 시스템의 특성



039 내부 정렬


① 삽입 정렬(Insert Sort)


삽입 정렬은 가장 간단한 정렬 방식으로 이미 순서화된 파이렝 샐운 하나의 레코드를 순서에 맞게 삽입시켜 정렬

· 두 번째 키와 첫 번째 키를 비교해 순서대로 나열(1회전)하고, 이어서 세 번째 키를 첫 번째, 두 번째 키와 비교해 순서대로 나열(2회전)하고, 계속해서 n번째 키를 앞의 n-1개의 키와 비교하여 알맞은 순서에 삽입하여 정렬하는 방식


② 쉘 정렬(Shell Sort)


쉘 정렬은 삽입 정렬을 확장한 개념

· 입력 파일을 어떤 매개변수(h)의 값으로 서브파일을 구성하고, 각 서브파일을 Insertion 정렬 방식으로 순서 배열하는 과정을 반복하는 정렬 방식, 즉 임의의 레코드 키와 h만큼 떨어진 곳의 레코드를 비교하여 순서화되어 있지 않으면 서로 교환하는 것을 반복하는 정렬 방식

· 입력 파일이 부분적으로 정렬되어 있는 경우에 유리한 방식


③ 선택 정렬(Selection Sort)


선택 정렬은 n개의 레코드 중에서 최소값을 찾아 첫 번재 레코드 위치에 놓고, 나머지 (n-1)개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식


④ 버블 정렬(Bubble Sort)


· 버블 정렬은 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식

· 계속 정렬 여부를 플래그 비트(f)로 결정


⑤ 퀵 정렬(Quick Sort)


퀵 정렬은 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법으로 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식

· 정렬 방식 중에서 가장 빠른 방식이며, 프로그램에서 되부름을 이용하기 때문에 스택(Stack) 필요


⑥ 힙 정렬(Heap Sort)


힙 정렬은 전이진 트리를 이용한 정렬 방식

· 구성된 전이진 트리를 Heap Tree로 변환하여 정렬


⑦ 2-Way 합병 정렬(Merge Sort)


2-Way Merge Sort는 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 합병하는 정렬방식

· 두 개의 키들을 한 쌍으로 하여 각 싸엥 대하여 순서 정함

· 순서대로 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브리스트로 만듦

· 위 과정에서 정렬된 서브리스트들을 하나의 정렬된 파일이 될 때가지 반복


⑧ 기수 정렬(Radix Sort) = Bucket Sort


기수 정렬은 Queue를 이용하여 자릿수별로 정렬하는 방식

· 레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배하였다가 버킷의 순서대로 레코드를 꺼내어 정렬



040 검색(Search)


검색은 컴퓨터를 이용해서 기억공간에 보관중인 특정 레코드를 찾아내는 작업


① 선형 검색(Linear Search)


·  선형 검색은 순서화되어 있지 않은 파일에서 순차적으로 검색하는 방식으로, 찾고자 하는 Key 값을 첫 번재 레코드 Key 값부터 차례로 비교하여 검색하는 방식

· 순차 검색

· 프로그램 작성이 가장 쉬움


② 제어 검색(Control Search)


· 제어 검색은 반드시 순서화된 파일이어야 검색 가능

· 한 번의 비교 동작이 끝난 후 비교 대상이 된 레코드를 다음에 비교할 대상을 선택하는 기준으로 이용하여 검색하는 방식


이분 검색(이진 검색, Binary Search
)

· 이분 검색은 전체 파일을 두 개의 서브파일로 분리해 가면서 Key 레코드를 검색하는 방식

· 찾고자 하는 Key 값을 파일의 중간 레코드 Key 값과 비교하면서 검색하는 방식

· 비교 회수를 거듭할 대마다 검색 대상이 되는 데이터 수가 절반으로 줄어듦으로 탐색 효율이 좋고 탐색 시간이 적게 소요됨

· 중간 레코드 번호 M=(F+L)/2(단, F:첫 번째 레코드 번호, L:마지막 레코드 번호)


피보나치 검색(Fibonacci Search)

· 피보나치 검색은 피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색하는 방식

· 이분 검색에는 중간 레코드 번호를 계산하기 위해서 나눗셈이 필요하지만 피보나치 검색은 가감산만을 이용하기 때문에 효율이 우수


보간 검색(Interpolation Search)

· 보간 검색은 찾으려는 레코드가 있음직한 부분의 키를 택하여 거맥하는 방식

· 선정 레코드 번호 = (찾으려는 키 값(추측)-최소키 값) / (최대키 값 - 최소키 값) × 레코드 수

· 찾으려는 레코드 근처에서부터 찾아가기 때문에 검색시간이 빠르지만, 예측을 해야하므로 실제로는 프로그래밍이 불가능함


블록 검색(Block Search)

· 블록 검색을 위해서는 파일을 구성하는 레코드들을 다음과 같이 구성해 놓아야 함

-파일을 구성하는 레코드들을 여러 개의 Block으로 분할하여 Block 단위는 순서화시키고, Block 내의 자료는 순서화와 관계없이 저장시킴

- Index 부분을 두어, 각 Block마다 최대 레코드 키 값을 가지는 레코드 번호를 저장시킴

· 인덱스를 이용하여 찾고자 하는 레코드가 어느 Block에 속하는지 검색한 후, 해당 Block 내에서는 선형 검색을 함


이진 트리 검색(Binary Tree Search)

· 이진 트리 검색은 파일을 이진 검색 트리로 구성하여 검색하는 방식

· 검색 과정

① 찾고자 하는 레코드 Key 값 X가 이진 검색 트리에 존재하는지 조사하려면 먼저 Root Node와 비교

② 만약 X가 Root Node의 Key 값보다 작으면 왼쪽 Subtree로 검색을 계속하고, 크면 오른쪽 Subtree로 검색을 계속하고, 같으면 검색종료

③ i가 0인 경우 검색에 실패한 경우. 즉, X가 임의의 노드 값과 같지 않아서 왼쪽 또는 오른쪽 자식을 찾아가기 위해 그 노드의 L.L 또는 R.L 포인터를 i에 기억시켰을 때, i에 기억시킨 포인터 값이 Nill Pointer인 경우 찾고자 하는 레코드가 없기 대문



041 검색 - 해싱(Hashing)


① 해싱의 개요


해싱은 Hash Table이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식

· 해싱은 DAM(직접 접근) 파일을 구성할 때 사용되며, 접근 속도는 빠르나 기억공간이 많이 요구됨

· 다른 방식에 비해 검색 속도가 가장 빠름

· 삽입, 삭제 작업의 빈도가 많을 때 유리한 방식

· 키-주소 변환 방법이라고도 부름


해시 테이블(Hash Table, 해시표)

· 해시 테이블은 레코드를 한 개 이상 보관할 수 있는 Bucket들로 구성된 기억공간으로, 보조기억장치에 구성할 수도 있고 주기억장치에 구성할 수도 있음


[그림 3] 해시 테이블  * n크기의 3개의 슬롯으로 구성된 버킷을 가진 해시표

· 버킷(Bucket) : 하나의 주소를 갖는 파일의 한 구역을 의미하며, 버킷의 크기는 같은 주소에 포함될 수 있는 레코드 수

· 흘록(Slot) : 한 개의 레코드를 저장할 수 있는 공간으로 n개의 슬롯이 모여 하나의 버킷을 형성

· Collision(충돌 현상) : 서로 다른 두 개 이상의 레코드가 같은 주소를 갖는 현상

· Synonym : 충돌로 인해 같은 Home Address를 갖는 레코드들의 집합

· Overflow : 계산된 Home Address의 Bucket 내에 저장할 기억공간이 없는 상태로, Bucket을 구성하는 Slot이 여러 개일 때 Collision은 발생해도 Overflow는 발생하지 않을 수 있음


② 해싱 함수(Hashing Function)


제산법

제산(Division)법은 레코드 키(K)를 해시표의 크기보다 큰 수 중에서 가장 작은 소수(Prime, Q)로 나눈 나머지를 홈 주소로 삼는 방식

h(K) = K mod Q


제곱법

제곱(Mid-Square)법은 레코드 키 값(K)을 제곱한 후 그 중간 부분의 값을 홈 주소로 삼는 방식


폴딩법

폴딩(Folding)법은 레코드 키 값(K)을 여러 부분으로 나눈 후 각 부분의 값을 더하거나 XOR(배타적 논리합)한 값을 홈 주소로 삼는 방식

· Shift Folding : 각 부분의 값들을 왼쪽 또는 오른쪽 끝자리에 맞추어서 계산

· Fold Boundary : 경계 지점을 접었을 때 마주치는 자리 그대로 계산


기수(Radix) 변환법

기수 변환법은 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수는 절단하고, 이를 다시 주소 범위에 맞게 조정하는 방법


대수적 코딩법

대수적 코딩법은 키 값을 이루고 있는 각 자리의 비트 수를 한 다항식의 계수로 간주하고, 이 다항식을 해시표의 크기에 의해 정의된 다항식으로 나누어 얻은 나머지 다항식의 계수를 홈 주소로 삼는 방식


계수 분석법(숫자 분석법)

계수 분석법은 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 택해서 홈 주소로 삼는 방식


무작위법

무작위법은 난수를 발생시켜 나온 값을 홈 주소로 삼는 방식


③ Overflow 해결 방법


Collision이 발생했을 때 그 버킷에 저장할 Slot이 없으면 Overflow가 되는데, 이것을 해결하기 위해서는 다음과 같은 방법 필요


개방 주소법(Open Addressing)

선형 방법이락도 하는데, Collision이 발생했을 때 순차적으로 그 다음 빈 버킷을 찾아 저장하는 방법


폐쇄 주소법(Close Addressing)

Overflow된 레코드들을 별도의 Overflow 영역에 저장하고 Chain(Pointer)으로 홈 버킷에 연결

· Direct Chaining : 해시표 내의 빈 자리에 Overflow 레코드 보관

· Indirect Chaining : 해시표와는 별도의 기억공간에 Overflow 레코드 보관


재해싱(Rehashing)

Collision이 발생하면 새로운 해싱 함수로 새로운 홈 주소를 구하는 방식 



042 인덱스 구조


① 인덱스의 개념


인덱스는 데이터 레코드를 빠르게 접근하기 위해서 구성하는 것으로 다음과 같은 특징이 있음

· 인덱스는 데이터가 저장된 물리적 구조와 밀접한 관계가 있음

· 인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공

· 인덱스를 통해서 파일의 레코드에 대한 액세스를 빠르게 수행 가능

· 레코드의 삽입과 삭제가 수시로 일어나는 경우에는 인덱스의 개수를 최소로 하는 것이 효율적


② m-원 검색 트리(m-Way Search Tree)


· 이진 검색 트리에서는 한 노드가 한 개의 키와 두 개의 Subtree를 갖는 반면 m 원 검색 트리는 한 노드가 최대 m-1개의 키와 m개의 Subtree를 갖도록 구성됨

· m-원 트리 구조는 키 값의 일부분이 동일한 문자열이나 숫자로 구성된 자료를 표현하는 데 효율적

· 이진 검색 트리에 비해 트리 높이가 얕아져 특정 노드의 검색시간 감소

· 삽입, 삭제시 트리 균형을 유지하기 위항 복잡한 연산이 필요해지는 단점이 있음


③ B-트리


B-트리는 Index를 구성하는 방법으로 가장 많이 사용하는 균형된 m원 검색 트리


B-트리의 특징

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· Root는 Leaf가 아닌 이상 적어도 두 개의 Subtree를 가짐

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 함

· 탐색, 추가, 삭제는 루트로부터 시작함

· 삽입과 삭제를 하여도 데이터 구조의 균형을 유지해야 함


④ B+-트리


B+-트리는 B 트리의 변형으로 Leaf가 아닌 노드로 된 인덱스 세트와 리프 노드로만 구성된 순차 데이터 세트로 구성

· 인덱스 세트에 있는 키 값을 리프 노드에 있는 키 값을 찾아갈 수 있는 경로로만 제공됨

· 인덱스 세트에 있는 모든 키 값이 리프 노드에 다시 나타나므로 리프 노드만을 이용한 순차 처리가 가능

· B+-트리는 B-트리의 추가, 삭제 시 발생하는 노드의 분열과 합병 연산 과정을 줄일 수 있는 트리 구조


B+-트리의 특징

· 0, 2 또는 m/2에서 m개 사이의 Subtree를 갖음

· Root와 Leaf를 제외한 모든 노드는 최소 m/2, 최대 m개인 Subtree를 갖음

· 모든 Leaf는 같은 Level에 있음

· Leaf가 아닌 노드의 키 값 수는 그 노드의 Subtree 수보다 한 개 적으며, 각 Leaf Node수는 최소 m/2-1개, 최대 m-1개의 키 값들을 갖음

· 한 노드 안에 있는 키 값들은 오름차순을 유지해야 하며 리스트로 연결된 리프 노드는 데이터 파일의 순차 세트를 나타냄


⑤ 트라이(Tri) 색인


트라이 색인은 탐색을 위한 키 값을 직접 표현하지 않고 키를 구성하는 문자나 숫자 자체의 순서로 키 값을 구성하는 구조

· 키 값이 문자열 또는 숫자일 경우 일련의 키 값드렝 대해 일부분이 같은 문자나 숫자로 구성되었을 때 적합

· 가변 길이의 키 값을 효과적으로 나타낼 수 있음

· 삽입 및 삭제 시 노드의 분열과 병합이 없음

· 트라이의 차수는 키 값을 표현하기 위해 사용하는 문자의 수에 의해 결정됨

· 키 값의 분포를 미리 예측할 수 있다면 기억장소 절약 가능

· 트라이의 크기는 나타내려고 하는 키 값의 기수와 키 필드 길이에 의해 결정됨



043 파일 편성


① 순차 파일(Sequential File) = 순서 파일


순차 파일은 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순차적으로 기록하는 방식

· 급여 관리 등과 같이 변동 사항이 크지 않고 기간별로 일괄 처리르 주로 하는 경우에 적합

· 주로 순차 접근이 가능한 자기 테이프에서 사용


순차 파일의 장점

· 기록 밀도가 높아 기억공간을 효율적으로 사용 가능

· 매체 변환이 쉬워 어떠한 매체에도 적용 가능

· 레코드가 키 순서대로 편성되어 취급이 용이

· 레코드를 기록할 때 사용한 키 순서대로 레코드를 처리하는 경우, 다른 편성법보다 처리 속도가 빠름


순차 파일의 단점

· 파일에 새로운 레코드를 삽입하거나 삭제하는 경우 파일 재구성을 위해 전체를 복사해야 하므로 시간이 많이 소요됨

· 데이터 검색 시 처음부터 순차적으로 검색하기 때문에 검색 효율이 낮고, 시간 및 응답 시간이 느림


② 색인 순차 파일(Indexed Sequential File)


색인 순차 파일은 순차 처리와 랜덤 처리가 모두 가능핟록 레코드들을 키 값 순으로 정렬시켜 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식

· 색인을 이용한 순차적인 접근 방법을 제공하여 ISAM이라고 함

· 레코드를 참조할 때 색인을 탐색한 후 색인이 가리키는 포인터(주소)를 사용하여 직접 참조할 수 있음

· 일반적으로 자기 디스크에 많이 사용되며, 자기 테이프에서는 사용할 수 없음


색인 순차 파일의 구성

색인 순차 파일은 기본 구역, 색인 구역, 오버플로 구역으로 구성됨

· 기본 구역(Prime Area) : 실제 레코드들을 기록하는 부분으로 각 레코드는 키 값순으로 저장됨

· 색인 구역(Index Area) : 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분

- 트랙 색인 구역

· 기본 구역의 한 트랙 상에 기록되어 있는 데이터 레코드 중의 최대키 값과 주소가 기록되는 색인으로, 한 실린더당 하나씩 만들어짐

· 처리할 레코드가 실제로 어느 트랙에 기록되어 있는지를 판별할 수 있게 함

- 실린더 색인 구역

· 각 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록되는 색인으로, 한 파일당 하나씩 만들어짐

- 마스터 색인 구역

· 실린더 색인 구역의 정보가 많으 경우 그것을 일정한 크기의 블록으로 구성하는데, 이대 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는지를 기록하는 색인


· 오버플로 구역(Overflow Area) : 기본 구역에 빈 공간이 없어서 새로운 레코드의 사빕이 불가능할 때를 대비하여 예비적으로 확보해 둔 부분

- 실린더 오버플로 구역

· 각 실린더마다 만들어지는 오버플로 구역으로, 해당 실린더의 기본 구역에서 오버플로된 데이터를 기록

- 독립 오버플로 구역

· 실린더 오버플로 구역에 더 이상 오버플로된 데이터를 기록할 수 없을 때 사용하는 예비 공간으로, 시린더 오버플로 구역과는 별도로 만들어짐


색인 순차 파일의 장점

· 순차 처리와 랜덤 처리가 모두 간으하므로, 목적에 따라 융통성 있게 처리할 수 있음

· 효율적인 검색이 가능하고 레코드의 삽입, 삭제, 갱신이 용이

· 레코드를 추가 및 삽입하는 경우, 파일 전체를 복사할 필요가 없음


색인 순차 파일의 단점

· 색인 구역과 오버플로 구역을 구성하기 위한 추가 기억공간이 필요함

· 파일 사용중 오버플로 레코드가 많아지면 파일을 재편성해야 함

· 파일이 정렬되어 있어야 하므로 추가, 삭제가 많으면 효율이 떨어짐

· 색인을 이용한 액세스를 하기 때문에 액세스 시간이 랜덤 편성 파일보다 느림


※ 정적 인덱스와 동적 인덱스

· 정적 인덱스 

- 정적 인덱스는 데이터 파일에 레코드가 삽입되거나 삭제되어도 인덱스의 구조가 변경하지 않고 내용만 변하는 구조로, 정적 인덱스를 사용하는 대표적인 파일 : ISAM


· 동적 인덱스

- 동적 인덱스는 인덱스 파일이나 데이터 파일을 블록으로 구성하고 각 블록에는 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해 두는 인덱스 방법으로, 동적 인덱스를 사용하는 대표적인 파일 :  VSAM

- 블록에 레코드가 가득차면 동적으로 분열되고, 일정 수의 레코드가 유지되지 않는 블록은 합병됨


③ VSAM 파일


VSAM(Virtual Storage Access Method) 파일은 동적 인덱스 방법을 이용한 색인 순차 파일


· VSAM 파일은 제어 구간, 제어 구역, 순차 세트, 인덱스 세트로 구성됨

- 제어 구간(Control Interval) : 데이터 레코드가 저장되는 부분

- 제어 구역(Control Area) : 몇 개의 제어 구간을 모아 놓은 것

- 순차 세트(Sequence Set) : 제어 구역에 대한 인덱스를 저장한 것

- 인덱스 세트(Index Set) : 순차 세트의 상위 인덱스

· VSAM 파일은 기본 구역과 오버플로 구역을 구분하지 않음

· 레코드를 삭제하면 그 공간을 재사용 가능

· 제어 구간에 가변 길이 레코드를 쉽게 수용 가능


④ 직접 파일(Direct File)


직접 파일은 파일을 구성하는 레코드를 특정 순서 없이 임의의 물리적 저장공간에 기록하는 것으로, 랜덤 파일, DAM 파일이라고도 함


· 레코드에 특정 기준으로 키가 할당되며, 해시 함수를 이용하여 이 키에 대한 보조기억장치의 물리적 상대 레코드 주소를 계산한 후 해당하는 주소에 레코드를 저장

· 레코드는 해시 함수에 의해 계산된 물리적 주소를 통해 접근 가능

· 임의 접근이 가능한 자기 디스크나 자기 드럼을 사용


직접 파일의 장점

· 직접 접근 기억장치(DASD)의 물리적 주소를 통하여 파일의 각 레코드에 직접 접근하거나 기록할 수 있으며, 접근 및 기록의 순서에는 제약이 없음

· 접근 시간이 바르고 레코드의 삽입, 삭제, 갱신이 용이

· 어떤 레코드라도 평균 접근 시간 내에 검색이 가능


직접 파일의 단점

· 레코드의 주소 변환 과정이 필요하며, 이 과정으로 인해 시간이 소요됨

· 기억공간의 효율이 저하될 수 있음

· 기억장치의 물리적 구조에 대한 지식이 필요하고, 프로그래밍 작업이 복잡함

· 충돌 발생할 염려 있으므로, 이를 위한 기억공간의 확보가 필요함


⑤ 역 파일(Inverted File)


역 파일은 특정 항목을 여러 개의 색인으로 만들어 항목별 특성에 맞게 작업할 수 있도록 한 파일로, 다중 키 파일에 속함


· 하나 또는 몇 개의 색인값을 결합하여 레코드의 주소 결정 가능

· 각 응용마다 적합한 색인을 별도로 구현 가능

· 새로운 레코드를 파일 중간에 삽입하기 쉽고, 검색 속도가 빠름

· 데이터 파일에 접근하지 않아 질의 응답 시간이 줄어들고, 처리가 비교적 쉬움

· 질의를 만족하는 레코드 검색 시 한 번씩만 접근하면 됨

· 색인의 각 항목들의 길이가 가변적


⑥ 다중 리스트 파일(Multi-List File)


다중 리스트 파일은 다중 키 파일의 한 종류로, 각 키에 대하여 색인을 만든 다음 각 데이터 레코드들 간에 다중 리스트를 구축하여 구성한 파일


· 색인은 동일한 키 값을 갖는 데이터 레코드 중 하나의 레코드에 대한 포인터만을 갖고, 후속 데이터는 포인터로 추적하도록 구성

· 색인의 각 항목들의 길이가 고정적이므로 관리가 용이하며 수정, 삭제, 전체 검색이 효율적 


다중 링 파일(Multi-Ring File)


다음 링 파일은 같은 특성을 가질 레코드들을 일련의 포인터로 연결하여 구성한 것


· 같은 항목값을 가진 레코드들을 한꺼번에 처리하는 데 효ㅘ적

· 기억 장소가 절약되고, 자료의 중복성을 배제 할 수 있음

· 레코드 형식이 다른 경우에도 처리가 가능




출처 : 2017 시나공 정보처리기사 필기


+ Recent posts