본문 바로가기
License

[정보처리기사필기] 2과목 소프트웨어 개발 기출문제 해설 요약정리

by prinha 2023. 5. 6.
반응형

 

소프트웨어 테스트의 기본원칙

- 결함 집중

파레토 법칙이 좌우한다

애플리케이션의 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재한다

결함은 발생한 모듈에서 계속 추가로 발생할 가능성이 높다

 

- 살충제 패러독스

동일한 테스트 케이스로 반복 실행하면 더이상 새로운 결함을 발견할 수 없으므로 

주지적으로 테스트케이스를 점검하고 개선해야 한다

 

- 오류 부재의 궤변

사용자의 요구사항을 만족하지 못한다면 오류를 발견하고 제거하더라도 품질이 높다고 할 수 없다

 

 

단위 테스트(Unit Test) -> 테스트 코드가 독립적이어야함(상호작용 X)

구현 단계에서 각 개별 모듈의 개발을 완료한 후 개발자가 명세서의 내용대로 정확히 구현되었는지 테스트

모듈 내부의 구조를 구체적으로 볼 수 있는 구조적 테스트를 주로 시행

테스트할 모듈을 호출하는 모듈도 있고, 테스트할 모듈이 호출하는 모듈도 있음

상위 모듈의 역할을 하는 모듈을 테스트 드라이버라 하고 그 역할이 테스트할 모듈을 호출하는 것

필요한 데이터를 인자를 통해 넘겨주고 테스트가 완료된 후 결과 값을 받는 역할을 함

-> 명세기반 테스트, 구조 기반 테스트

 

 

단위 테스트 도구

CppUnit : C++용

JUnit : JAVA용

HttpUnit : 웹브라우저 없이 웹사이트 테스트를 수행하는 오픈 소스 소프트웨어 테스트 프레임워크

 

통합 테스트(Integration Test)

시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것(상호작용)

모듈 간의 인터페이스와 시스템의 동작이 정상적으로 잘되고 있는지를 빨리 파악하고자 할 때는 상향식 < 하향식

테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈을 테스트 스텁(Stub)이라고 함

 

상향식 통합 테스트(Bottom Up Integration Test)

프로그램의 하위 모듈에서 상위 모듈 방향으로 통합

하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터 필요

가장 하위 단계의 모듈부터 수행되므로 스텁은 불필요

 

하향식 통합 테스트(Top Down Integration Test)

상위 모듈에서 하위 모듈 방향으로 통합 -> 테스트스텁필요

깊이 우선 통합법, 넓이 우선 통합법 사용

초기부터 사용자에게 시스템 구조를 보여줌

 

깊이우선탐색(DFS)

이름 그대로 최대한 깊이 탐색한 후 더이상 탐색할 것이 없으면 형제 노드를 검색

 

- 상향식 설계에서는 최하위 수준에서 각각의 모듈을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사한다

- 상향식 설계에서는 인터페이스가 성립되어 있지 않을 때 기능 추가가 어렵다

- 하향식 설계에서는 통합 검사시 이미 인터페이스가 정의되어 있어서 통합이 간단하다- 하향식 설계에서 레벨이 낮은 데이터 구조의 세부 사항은 설계초기 단계에서 필요하다

 

-> 스터브와 드라이버는 통합 테스트시 사용되는 것

테스트 스텁(Test Stub)

제어 모듈이 호출하는 하위 모듈의 역할, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈(통합테스트)

하향식 테스트에 사용되는 테스트용 임시 모듈

 

테스트 드라이버(Test Driver)

단위 테스트에서 테스트의 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에서 필요함

상향식 테스트에서 사용되는 테스트 가동기

 

테스트 슈트(Test suites)

테스트 대상 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합

 

테스트 케이스(Test Case)

구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지 확인하기 위해 설계된

입력값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서

테스트의 목표 및 테스트 방법을 결정하고 테스트 케이스를 작성해야 함

프로그램에 결함이 있더라도 입력에 대해 정상적인 결과를 낼 수 있기 때문에 결함을 검사할 수 있는 테스트 케이스를 찾는 것이 중요함

테스트 케이스 실행이 통과되었는지 실패하였는지 판단하기 위한 기준을 테스트 오라클(Test Oracle)이라고 함

 

테스트 케이스 자동 생성 도구를 이용하여 테스트 데이터를 찾는 방법

- 입력 도메인 분석

- 랜덤 테스트

- 자료 흐름도

 

시스템 테스트의 종류

요구사항, 무결성, 부피, 메모리, 성능, 신뢰성, 부하, 수락, 회복, 안전, 구조, 회귀, 병행 등 (50개 이상)

- 강도(Stress) : 과다 정보량을 부과하여 시스템이 정상적으로 작동되는지 테스트

- 회복(Recovery) : 시스템에 고의로 실패를 유도하고, 시스템이 정상적으로 복귀하는지 테스트

- 성능(Performance) : 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 테스트

- 안전(Security) : 부당하고 불법적인 침입을 시도하여 보안시스템이 침투를 잘 막아내는지 테스트

 

디지털 저작권 관리(DRM) 구성 요소

- 컨텐츠 제공자 

- 컨텐츠 분배자 : 암호화된 컨텐츠 제공

- 패키저 : 컨텐츠를 메타 데이터와 함께 배포 가능한 단위로 묶는 기능

- 보안 컨테이너 : 원본을 안전하게 유통하기 위한 전자적 보안 장치

- DRM 컨트롤러 : 배포된 컨텐츠의 이용 권한을 통제

- 클리어링 하우스 : 소비자와 유통업자 사이에 발생하는 거래에 대해 디지털 저작권 라이센싱을 중개하고 라이센스 발급을 수행하는 장소


알고리즘

주어진 작업을 수행하는 컴퓨터 명령어를 순서대로 나열한 것

검색(Search)은 정렬이 되지 않은 데이터 혹은 정렬이 된 데이터 중에서 키값에 해당되는 데이터를 찾는 알고리즘

정렬(Sorting)은 흩어져있는 데이터를 키값을 이용하여 순서대로 열거하는 알고리즘

 

선형 검색(Linear Search)

처음부터 끝까지 하나씩 순서대로 비교하여 원하는 값을 찾아내는 검색

 

이진 검색(Binary Search) 

low, middle, high 값을 사용하여 찾고자 핟는 데이터를 중앙에 위치한 중간값과 비교하는 방법

데이터 목록은 반드시 오름차순으로 정렬되어 있어야함(전제조건)

1. 배열의 중간 값을 찾음

2. 중간 값과 검색 값을 비교

2-1. 중간 값이 검색 값과 같으면 끝

2-2. 중간 값보다 검색 값이 크면 오른쪽 구간 탐색

2-3. 중간 값보다 검색 값이 작으면 왼쪽 구간 탐색

3. 값을 찾거나 간격이 비어있을 때까지 반복 

 

 

정렬 : 선택, 삽입, 버블, 병합, 쉘, 퀵, 힙, 버킷

 

선택 정렬(Selection Sorting) -> 큐를 이용하여 정렬

배열 내에서 최소값을 찾은 다음 정렬되지 않은 맨 앞 값과 교환을 하며 정렬을 해나가는 방법

정렬 시간 복잡도 모두 O(n^2)

 

삽입 정렬(Insert Sorting)

한 개의 값을 추출한 다음 앞쪽으로 비교해 본인의 자리를 알맞게 찾아가게끔 하는 정렬 방법

정렬 시간 복잡도 최상 O(n)

정렬 시간 복잡도 평균과 최악 O(n^2)

 

힙정렬(Heap Sorting)

정렬할 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬

완전 이진트리로 입력자료의 레코드를 구성한다

정렬 시간 복잡도 평균 O(nlog2n)

정렬 시간 복잡도 최악 O(nlogn)

 

버블 정렬(Bubble Sorting)

첫 위치부터 시작해서 오른쪽 값과 비교하여 정렬하는 방법

정렬 시간 복잡도 모두 O(n^2)

PASS1 -> 첫 버블 정렬이 끝난 상태

9,6,7,3,5 -> 6,7,3,5,9

 

병합 정렬

분할 정복에 기반한 알고리즘으로 리스트를 1 이하인 상태까지 절반으로 자른 다음 재귀적으로 합병정렬을 이용해서

전체적인 리스트를 합병하는 정렬 과정

O(nlogn)

n(n-1)/2 = O(n^2)

 

워크스루(Walkthrough)

요구사항 명세서 작성자를 포함하여 사전 검토한 후 짧은 검토 회의 를 통해 결함을 발견

단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행해 보는 것

사용사례를 확장하여 명세하거나 설계 다이어그램, 원시코드, 테스트 케이스 등에 적용할 수 있음

복잡한 알고리즘 또는 반복, 실시간 동작, 병행처리 같은 기능이나 동작을 이해하려고 할 때 유용함

 

인스펙션(Inspection)

요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견

프로그램을 수행시켜보는 것 대신에 읽어보고 눈으로 확인하는 방법으로 볼 수 있다

코드 품질 향상 기법 중 하나이다

정적 테스트에 가깝다

결함과 함께 코딩 표준 준수 여부, 효율성 등의 다른 품질 이슈를 검사하기도 한다

계획 -> 사전교육 -> 준비 -> 인스펙션 회의 -> 수정 -> 후속조치 

 

형상관리(Software Configuration Management)

소프트웨어 개발과정에서 소프트웨어의 변경사항을 관리하기 위해 개발된 일련의 활동

형상 관리를 통해 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있다

(GIT, CVS, Subversion)

 

[형상 식별 -> 형상 통제 -> 형상 감사 -> 형상 기록/보고]

형상 식별 : 형상 관리 계획을 근거로 형상관리의 대상이 무엇인지 식별하는 과정이다

형상 통제 : 소프트웨어 형상 변경 제안을 검토, 반영하도록 통제하는 것 (승인이 있어야함, 즉시X)

형상 감사 : 형상 관리 계획대로 형상관리가 진행되고 있는지, 형상 항목의 변경이 요구 사항에 맞게 제대로 이뤄졌는지 살펴보는 활동이다

형상 기록/보고 : 개발 상태에 대한 보고서를 제공하는 것으로, 베이스라인 산출물에 변경과 처리 과정에서의 변경을 모두 기록

저장소 : 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳

가져오기(import) :  버전 관리가 되고 있지 않은 아무것도 없는 저장소에 처음으로 파일을 복사

체크아웃 : 프로그램을 수정하기 위해 저장소에서 파일을 받아옴, 소스파일과 함께 버전 관리를 위한 파일들을 받아 옴

체크인 : 체크아웃한 파일의 수정을 완료한 후 저장소의 파일 새로운 버전의 파일로 갱신

커밋 : 체크인을 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌을 알리고 diff도구를 이용해 수정한 후 갱신 완료

동기화 : 저장소에 있는 최신 버전으로 로컬을 동기화

 

소프트웨어 버전 관리도구 방식

- 분산 저장소 방식

버전관리 자료가 원격저장소와 로컬저장소에 함께 저장되어 관리된다

로컬 저장소에서 버전관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용해 작업할 수 있다

대표적인 버전관리 도구로 GIt이있다

 

- 공유 폴더 방식

로컬 컴퓨터의 공유 폴더에 저장되어 관리

공유폴더의 파일을 로컬pc로 복사 후 이상 유무 확인

 

- 클라이언트/서버 방식

중앙 시스템(서버)에 저장되어 관리되는 방식

모든 버전관리는 서버에서 진행하며 서버에 문제가 생기면 개발자 협업 및 버전관리 작업 중단

 

복호화 

디코딩, 부호화된 데이터를 부호화되기전 형태로 바꾸어 사람이 읽을 수 있도록 되돌림

 

크랙

소프트웨어를 수정하여 소프트웨어를 크랙하는 사람, 원하지않는 기능들, 수정 방식(복사 보호, 조작 보호)을 비활성화하거나 제거하는 일

 

객체지향 개념을 활용한 소프트웨어 구현과 관련된 설명

- 객체란 필요한 자료 구조와 실행되는 함수들을 가진 하나의 독립된 존재이다

- JAVA에서 정보은닉(Information Hiding)을 표기할 때 private의 의미는 외부에서 내부로 접근하지 못하도록 하는 접근금지이다

- 상속(Inheritance)은 개별 클래스를 상속 관계로 묶음으로써 클래스 간의 체계화된 전체 구조를 파악하기 쉽다는 장점이 있다

- 같은 클래스에 속하는 개개의 객체이자 하나의 클래스에서 생성된 객체를 인스턴스(Instance)라고 한다

 

DRM(Digital Rights Management)

디지털 컨텐츠와 디바이스의 사용을 제한하기 위해 하드웨어 제조업자, 저작권자, 출판업자 등이 사용할 수 있는 접근 제어 기술

디지털 미디어의 생명 주기 동안 발생하는 사용권한관리, 과금, 유통 단계등을 관리하는 기술

안전하게 유통하기 위한 전자적 보안도 고려함 -> 불법 유통, 복제의 방지

 

클리어링 하우스(Clearing House)

사용자에게 컨텐츠 라이센스를 발급하고 권한을 부여해주는 시스템

 

위험 모니터링

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

 

RCS(Revision Control System)

다수의 사용자가 동시에 파일 수정을 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구

다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있음

CVS와 차이점은 소스파일의 수정을 한 사람만으로 제한함

 

RPC(Remote Procedure Call)

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행할 수 있게 해주는 프로세스간 통신

 

 

- 화이트박스 : 내부 구조와 동작을 검사하는 테스트방식(소프트웨어의 내부 구조 테스트)

                           문장검증, 선택검증, 경로검증, 조건검증

- 블랙박스 : 내부 구조나 작동원리를 모르는 상태에서 입력에 따른 출력을 테스트

                       경계값 분석, 기능 테스트, 프로그램 구조 고려 X

 

화이트박스 테스트

화이트박스의 이해를 위해 논리흐름도(Logic-Flow Diagram)를 이용할 수 있음 -> 모듈의 논리적인 구조를 체계적으로 점검

테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트에 해당함

테스트 데이터를 선택하기 위하여 검증기준(Test Coverage)을 정함

프로그램의 구조를 고려함 (<- 프로그램의 구조를 고려하지 않는 것은 블랙박스 테스트)

검증 기준 : 문장, 분기 검증 기준

 

화이트박스 테스트 종류

- 기초(기본) 경로 검사 -> 싸이클을 최대 한번만 지나야한다

- 조건 검사

- 루프 검사

- 데이터 흐름 검사

 

블랙박스 테스트 종류 - 프로그램 구조를 고려하지 않는다

- 동치(동등)분할 검사

- 경계값 분석

- 원인-효과 검사

- 오류 예측 검사

- 비교검사

 

리팩토링(Refactoring)

코드의 구조 재조정

소프트웨어를 보다 쉽게 이해할 수 있고 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화없이 내부 구조 변경

-> 리팩토링과 유지보수는 다른 개념

유지보수(Renewal)

설계관련(Architecting)

명세서(Specification)

 

IDE(Integrated Development Environment) 도구의 각 기능

- Coding : 프로그래밍 언어를 가지고 컴퓨터 프로그램을 작성할 수 있는 환경 제공

- Compile : 주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 기능(고급언어->저급언어)

- Debugging : 프로그램에서 발견되는 버그를 찾아 수정할 수 있는 기능

- Deployment : 소프트웨어를 최종 사용자에게 전달하기 위한 기능

 

클린 코드(Clean Code) 작성 원칙

- 추상화 : 상위클래스를 통해 프로그램 특성만 간략하게 나타내고, 상세 내용은 하위 클래스에 구현한다

- 의존성 : 다른 모듈에 미치는 영향을 최소화한다

- 가독성 : 누구든지 읽기 쉽게 코드를 작성한다

- 중복성 : 중복을 최소화할 수 잇는 코드를 작성한다

 

Migration

소프트웨어 재공학의 주요 활동 중 기본 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환하는 작업

 

Analysis

기존 소프트웨어를 분석하여 재공학 대상을 선정하는 것

 

소스코드 정적 분석(Static Analysis)

- 소스코드를 실행시키지 않고 분석한다

- 코드에 있는 오류나 잠재적인 오류를 찾아내기 위한 활동이다

- 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있다

-  하드웨어적 방법 X 

 

Restructuring

기존 소프트웨어를 향상시키기 위하여 코드를 재구성 하는 작업 (기능과 외적 동작은 변하지 않음)

 

Reverse Engineering

기존 소프트웨어를 분석하여 소스코드를 얻어내는 작업

 

프로그램 언어 선택 시 고려해야할 사항

- 개발 정보시스템의 특성

- 사용자의 요구사항

- 컴파일러의 가용성

- 친밀감

- 언어의 능력

- 처리의 효율성

- 프로그램 구조

- 프로그램의 길이

 

소프트웨어 패키징(Software Packging)

- 모듈별로 생선한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것

- 소비자 중심으로 진행한다

- 신규 및 변경 개발소스를 식별하고, 이를 모듈화하여 상용제품으로 패키징한다

- 고객의 편의성을 위해 메뉴얼 및 버전관리를 지속적으로 한다

- 범용 환경에서 사용이 가능하도록 일반적인 배포 형태로 패키징을 진행한다

 

-> 소프트웨어의 최종 소비자는 End User이기 때문에 End User의 요구사항을 최대한으로 반영해서 개발해야한다

    사용자 수준에 무관하게 X -> End User의 수준에 맞게 직관적이고 사용하기 쉽게 설계, 개발되어야 한다

 

Alien Code

아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 프로그램 소스 코드 

 

소프트웨어 품질 목표

정확성, 신뢰성, 효율성, 무결성, 유지보수 용이성, 사용 용이성, 이식성, 상호 운용성, 유연성, 재사용성

- 이식성(Portability) : 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정될 수 있는 능력

- 효율성(Efficiency) : 최소의 작업으로 요구되는 기능을 수행하는 정도

- 사용 용이성(Usability) : 소프트웨어를 쉽게 사용할 수 있는 정도

- 정확성(Correctness) : 사용자의 요구사항을 충족시키는 정도

 

소프트웨어를 재사용함으로써 얻을 수 있는 장점

- 프로젝트 문서 공유(시스템 구축 방법에 대한 지식 공유)

- 소프트웨어 품질 생산성 향상

- 개발 시간과 비용 단축

- 프로젝트 실패 위험 감소

 

소프트웨어를 재사용함으로써 얻을 수 있는 단점

- 재사용할 소프트웨어 선정이 필요함

- 시스템에 공통적으로 사용되는 요소를 발견해야함

- 프로그램의 표준화 부족

- 새로운 개발 방법론의 도입이 어려움

- 재사용을 위한 관리 및 지원 부족

- 기존 소프트웨어에 재사용 소트웨어를 추가하기가 어려움

 

[인터페이스 구현 검증 도구]

xUnit, STAF, Fitnesse, NTAF, Sekebuynm watir

 

[인터페이스 간의 통신을 위해 이용되는 데이터 포맷]

- JSON(JavaScript Object Notation)

인터페이스 구현시 사용하는 기술로 속성-값(Attribute-Value Pairs)으로 이루어진 

데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포

AJAX에서 많이 사용하고 XML을 대체하는 주요 데이터 포맷

언어 독립형 데이터 포맷으로 다양한 프로그래밍 언어에서 이용중

 

- XML(Extensible Markup Language)

html의 단점을 보완한 인터넷 언어, SGML의 복잡한 단점을 개선한 특수한 목적을 가진 마크업 언어

 

- AJAX(Asynchronous Javascript and XML)

자바스크립트를 사용하여 웹 서버와 클라이언트 간의 비동기적으로 xml데이터를 교환하고 조작하기위한 웹 기술

 

- REST(Representational State Transfer)

웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재,상태 정보를 표준화된 HTTP메소드로 주고받는 웹 아키텍처(리소스,메소드,메시지)

HTTP URI를 통해 자원을 명시하고, HTTP메소드(POST,GET,PUT,DELETE)를 통해 해당 자원에 대한 생성, 조회, 갱신, 삭제 등의

명령을 적용할 수 있는 분산 하이퍼미디어 시스템을 위한 아키텍처이다

 

 

NS-Chart (Nassi-Scchneiderman Chart)

논리의 기술에 중점을 두고 도형을 이용한 프로그램 설계도

이해하기 쉽고 코드 변환이 용이하다

연속, 선택, 반복 등의 제어 논리 구조를 표현한다

3가지 기본구조만으로 논리를 표현(표준화 가능)

Flow Chart의 최대 단점인 화살표가 표시되지 않음

기본구조의 입구와 출구는 각 하나씩

전체적인 알고리즘을 일목요연하게 볼 수 있음

 

ISO/IEC 25000 (소프트웨어 품질 관련 국제 표준)

소프트웨어 품질 평가를 위한 소프트웨어 품질평가 통합모델 표준이다

System and Software Quality Requirements and Evaluation으로 줄여서 SQuaRE라고도 한다

기존 소프트웨어 품질 평가 모델과 소프트웨어 평가 절차 모델인 ISO/IEC 9126과 ISO/IEC 12119, ISO/IEC 14598을 통합하였다

- 2500n : 개요 및 품질관리

- 2501n : 품질모델

- 2502n : 품질측정

- 2503n : 품질요구

- 2504n : 품질평가

- 2505n : 확장분야

 

Risk Analysis

프로젝트에 내재된 위험 요소를 인식하고 그 영향을 분석하여 이를 관리하는 활동

프로젝트를 성공시키기 위해 위험 요소를 사전에 예측, 대비하는 모든 기술과 활동

 

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

프로젝트를 일정 기일 내에 완성시키고 해당 계획이 원가의 최소값에 의해 보증되는 등의 최적 스케줄을 구하는 관리 방법

네트워크를 중심의 논리적 구성, 시간과 비용 문제를 취급

 

Work Breakdown Structure(업무 분업 구조)

성과 목표 완전 달성을 위한 프로그램

산업 관리 간접 부문의 기술 혁신형 업무-목표를 설정하여 소정 기간, 자원 내에서 달성하는 형태의 업무를 효과적으로 수행하기 위한 방법

 

Waterfall Model(폭포수 모델)

소프트웨어 개발 생명주기에 기반하고 있는 개발 기법 중 하나로 각 개발 단계를 확실히 매듭 짓고 다음 단계로 넘어간다

한번 떨어지면 다시 거슬러 올라갈 수 없는 폭포수를 의미함

 

소프트웨어 사용자 메뉴얼 작성절차

작성 지침 정의 -> 사용자 메뉴얼 구성 요소 정의 -> 구성 요소별 내용 작성 - > 사용자 메뉴얼 검토

(설치와 사용에 필요한 제반 절차 및 환경 등 전체 내용을 포함하는 메뉴얼을 작성해야함)

 

소프트웨어 테스트에서의 검증(Verification)과 확인(Validation)

- 검증은 소프트웨어 개발 과정을 테스트하는 것(개발자)이고, 확인은 소프트웨어 결과를 테스트하는 것(사용자)이다

- 소프트웨어 테스트에서 검증과 확인을 구별하면 찾고자 하는 결함 유형을 명확하게 하는 데 도움이 된다

- 검증은 작업 제품이 요구 명세의 기능, 비기능 요구 사항을 얼마나 잘 준수하는지 측정하는 작업이다

 

EAI(Enterprise Application Integration)

기업 내 상호 연동이 가능하게 해주는 솔루션

비즈니스 간 통합 및 연계성을 증대시켜 각 시스템 간의 확장성을 높여줌

 

구축유형

1. Point-to-Point

가장 기본적인 애플리케이션 통합 방식으로 1:1로 연결, 변경 및 재사용이 어려움

 

2. Hub & Spoke

단일 접점인 허브를 통해 데이터를 전송하는 중앙 집중형 방식으로

확장 및 유지 보수가 용이하지만 허브에 장애 발생시 시스템 전체에 영향

 

3. Message Bus (ESB방식)

애플리케이션 사이에 미들웨어를 두어 처리하는 방식으로 확장성이 뛰어나며 대용량 처리가 가능하다

 

4. Hybrid

그룹 내에서는 Hub&Spoke방식, 그룹간에는 Message방식 사용 -> 데이터 병목 현상 최소화

 

 

테스트와 디버그

Testing -> Error 발생(Bug발견) -> Error 수정(Debugging) -> Retesting


Tree구조

1개 이상의 유한한 개수의 노드의 집합

루트노드와 0개 이상의 겹치지 않는 하위 나무 구조들의 집합으로 이루어짐

node(or vertex)와 edge(or link)로 표현됨

 

path : edge에 의해 연결된 node들의 집합

root node : 최상위의 node

parent(부모), children(자식), siblin(형제), grandparent(조부모), ancestor(조상)

: 기준이 되는 것의 바로 직계 상위 node를 부모, 바로 아래층의 node를 자식, 같은 부모를 둔 node들을 형제,

  부모의 부모를 조부모, 직계 상위 노드들은 조상

leaf(잎) : 자식이 없는 node

subtree : 큰 tree에 속한작은 tree

node의 degree : 하위 subtree의 개수

node의 level : root node 부터 최하위 node까지의 중첩되지 path의 node 개수

 

Binary Tree(이진트리)

모든 내부 node들이 둘 이하의 자식 노드를 갖는 나무

노드가 하나도 없는 공집합이거나 루트노드를 기준으로 왼쪽 이진트리, 오른쪽 이진트리로 이루어진 집합

 

Complete Binary Tree(완전이진트리)

가장 마지막 레벨을 제외한 모든 노드들이 꽉 차있고 마지막 레벨은 왼쪽부터 마지막 노드까지 빈틈이 없음

 

Full Binary Tree(포화이진트리)

마지막 레벨까지 완전히 꽉 차 있는 트리

 

이진트리순회(Tree Traverse)

 

- 전위순회(Preorder) : root -> left -> right (루트를 먼저 방문)

   0->1->3->7->8->4->9->10->2->5->11->6

- 중위순회(Inorder) : left -> root -> right (왼쪽 하위 트리 방문 후 루트 방문)

  7->3->8->1->9->4->10->0->11->5->2->6

- 후위순회(Postorder) : left -> right -> root (하위트리 모두 방문 후 루트 방문)

  7->8->3->9->10->4->1->11->5->6->2->0

- 층별순회(Level Order) : 위쪽 노드들부터 아래방향으로 차례로 방문) -> 노드의 순서대로

  0->1->2->3->4->5->6->7->8->9->10->11

 

 

Stack = LIFO

인터럽트 처리, 서브루틴 호출 작업 등에 응용된다

 

스택의 삭제 알고리즘 (Top:스택포인터, S:스택의이름)

If Top = 0 Then
	Overflow
Else {
	remove S(Top)
    Top = Top - 1
}

- Overflow

스택 공간이 가득찼을 때 하나의 데이터를 더 넣으려고 하는 경우, 스택 오버플로우가 일어나고 프로그램에 오류 발생

- Underflow

스택 공간에 데이터가 없는데 프로그램에서 데이터를 꺼내려고 하는 경우, 스택 언더플로우가 일어나고 프로그램에 오류 발생

 

Queue = FIFO

순서 리스트의 뒤에서 노드가 삽입되며 앞에서 노드가 제거된다

 

Deque

선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조이다

 

선형구조 : 스택, 큐, 데크, 리스트

비선형구조 : 트리, 그래프

파일구조 : 순차파일, 색인파일, 직접파일


https://prinha.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC%ED%95%84%EA%B8%B0-3%EA%B3%BC%EB%AA%A9-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-%ED%95%B4%EC%84%A4-%EC%9A%94%EC%95%BD%EC%A0%95%EB%A6%AC1

 

[정보처리기사필기] 3과목 데이터베이스 구축 기출문제 해설 요약정리1

데이터베이스 정규화 (Normalization) 테이블 간의 중복된 데이터를 허용하지 않는 것으로 무결성(Integrity)을 유지할 수 있으며 DB 저장 용량을 줄일 수 있음 테이블을 분해하는 정규화의 단계가 정의

prinha.tistory.com


자료 및 출처

1. 정보처리기사 필기 기출

반응형