정보처리기사 필기

정보처리기사 필기 정리(소프트웨어 개발)

도사원 2023. 2. 7. 17:11

모듈

소프트웨어 구조를 이루며, 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위

하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합

서로 모여 하나의 완전한 프로그램으로 만들어 질 수 있다.

 

코딩 구현단계 작업절차

요구사항 분석(시스템의 목표를 정함 / 구현가능한지 판단 / 요구사항 명세서)

-> 설계(구체적 설계)

-> 구현(시스템 구현 / 코팅 / 1.작업계획 2.코팅 3.컴파일 4.테스트)

-> 테스트(소프트웨어 오류 탐지 및 수정 / 테스트 계획서 / 테스트 결과서)

-> 유지보수

 

정렬 알고리즘

선택 정렬(Selection Sort) : 정렬되지 않은 인덱스의 맨 앞에서부터 이를 포함한 그 이후의 배열 값 중 가장

작은 값을 찾고 그의 값을 현재 인덱스 값과 바꿔준다. O(N^2)

 

삽입 정렬(Insertion Sort) : 현재 위치에서 그 이하의 배열들을 비교하여 자신이 들어갈 위치를 찾아 그 위치에

삽입하는 배열 알고리즘 O(N^2)

 

버블 정렬(Bubble Sort) : 매번 연속된 두 개 인덱스를 비교하여, 정한 기준의 값을 뒤로 넘겨 정렬하는 방법 O(N^2)

 

합병 정렬(Merge Sort) : 큰 문제를 반으로 쪼개 문제를 해결해 나가는 방식 O(Nlog2N)

 

퀵 정렬(Quick Sort) : (피벗)pivot point 라고 기준이 되는 값을 하나 설정, 이 값을 기준으로 작은 값은 왼쪽,

큰 값은 오른쪽으로 옮기는 방식

 

힙 정렬(Heap Sort) : 최대 힙 트리나 최소 힙 트리를 구성하여 정렬하는 방식

 

쉘 정렬(Shell Sort) : 삽입정렬의 문제점을 해결하기 위해 등장

입력으로 들어온 배열을 간격이라고 하는 일정한 기준에 따라 분류

 

전위식 (Prefix) 후위식 (Postfix) 중위표기법

전위식 : 연산자를 먼저 표시하고 연산에 필요한 피 연산자를 나중에 표기하는 방법

중위표기법 : 연산자를 두 피연산자 사이에 표기하는 방법

후위식 : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법


* 스택을 이용하는 방법

1. 숫자, 문자가 나오면 그대로 출력

2. 연산자 나오면 스택에 저장

3. ) ‘닫는괄호 나오면 최근에 저장된 순으로 스택에 저장되있던 연산자 출력

PUSH : 스택에 데이터 추가 / POP : 스택의 맨 위에 데이터 반환

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

Underfolw:스택공간에 데이터가 없는데 프로그램에서 스택에서 데이터를 꺼내려고하는 경우 언너플로우가 일어나며 프로그램오류

 

자료구조

선형구조 : 하나의 자료 뒤에 하나의 자료가 존재하는 것

데이터가 연속적으로 연결되어 있는 모양으로 구성하는 방법

포인터 등을 사용하여 자료를 연결하면 그 결과가 자료에 일직선상에 표시되거나 하나의 원상에 표시되는 구조

선형리스트(배열, 레코드)

-연결리스트

-스택(Stack) “쌓다라는 의미로 데이터를 차곡차곡 쌓아 올린 형태의 자료구조 /

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

-(Queue) “선입선출 먼저 들어온 것이 먼저 나가는 구조 (FIFO  First In First Out)

-데크

비선형구조 : 하나의 자료 뒤에 여러개의 자료가 존재할 수 있다/ 계층적 구조, 1:n n:n

트리 (일반트리/ 이진트리) : 사이클이 이루지 않도록 구성한 그래프 형태 / 부모와 자식계층 구조명확

-그래프 (방향그래프 / 무방향그래프) : 사이클을 이루도록 구성, 순환

파일구조 직접파일

-순차파일

-색인 순차 파일

 

 

 디지털 저작권 관리(DRM)

클리어링 하우스(Clearing House) : 저작권에 대한 사용권한, 라이선스 발급, 사용량에 따른 결제 관리 등을 수행하는 곳

콘텐츠 제공자(Contents Provider) : 콘텐츠를 제공하는 저작권자

패키저(Packeager) : 콘텐츠를 메타데이터와 함께 배포 가능한 형태로 묶어 암호화 하는 프로그램

콘텐츠 분배자(Contenst Distributor) : 암호화된 콘텐츠를 유통하는 곳이나 사람

콘텐츠 소비자(Customer) : 콘텐츠를 구매해서 사용하는 주체

DRM 컨트롤러 : 배포된 콘텐츠의 이용 권한을 통제하는 프로그램

보안 컨테이너(Security Container) : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치

 

테스트

단위테스트 (Unit Test) : 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트

통합테스트 (Integration Test) : 모듈을 통합하는 과정에서 모듈간의 호환성을 확인하기 위해 수행되는 테스트

시스템테스트 (System Test) : 완전한 시스템에 대해 수행하는 테스트 기능적 비기능적 요구사항을 만족하는지 확인

인수테스트 (Acceptance Test) : 실제환경에서 사용자가 참여하는 테스트 요구분석명세서에 나타난

                                                   사항을 모두 충족하는지

시스템이 예상대로 동작하는지 사용자의 관점에서 확인

 

화이트박스 테스트 / 블랙박스 테스트

화이트박스 테스트 : 모듈의 원시 코드를 오픈시킨 상태에서 원시코드의 논리적인 모든 경로 테스트

설계된 절차에 초점을 둔 구조적 테스트 (테스트 과정의 초기에 적용)

모듈안의 작동을 직접관찰

모든 문장을 한번 이상 실행

종류  기초경로검사 (Base Path Testing)

        - 제어구조검사 (Control Structure Testing)

                                : 조건검사(Condition Testing) - 논리적 조건을 테스트

                                  루프검사(Loop Testing) - 반복 구조에 초점을 맞춰 실시하는 테스트

                                 데이터 흐름 검사(Data Flow Testing) - 변수의 정의와 변수사용 위치에 초잠을 맞춰 실시

 

블랙박스 테스트 : 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 기능테스트

사용자의 요구사항 명세를 보면서 테스트, 구현된 기능을 테스트

인터페이스에서 실시되는 테스트 / 부정확하거나 누락된 기능, 인터페이스 오류, 자료구조나 외부

데이터베이스 접근에 따른 오류, 행위나 성능오류, 초기화와 종류 오류 발견, 테스트 과정의 후반부 적용

종류  동치 분할 검사(Equivalence Partitioning Testing) 입력 자료에 초점 / 동등분할 기법

            경계 값 분석(Boundary Value Analusis) 입력 조건의 경계 값을 테스트 케이스로 선정

            원인 효과 그래프 검사 (Cause-Effect Graphing Testing)

            오류 예측 검사 (Error Guessing) 과거의 경험이나 확인자의 감각으로 테스트, 데이터 확인 검사

             비교검사(Comparis On Testing) 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트

 

검증검사

1. 형상검사 : 구성요소, 목록, 유지보수를 위한 모든 사항이 표현되었는가를 검사

2. 알파검사 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 검사기법

사용자와 개발자가 함께 확인하며 기록

3. 베타검사 : 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 기법

주기적으로 개발자에게 보고

 

소스코드 품질 분석 도구

정적분석도구 : pmd, cppcheck, sonarQube, checkStyle, ccm, cobertuna

동적분석도구 : Avalanche, Valgrind

 

이진 검색 알고리즘

 

형상관리

소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것

형상관리 구조 : 형상식별(Configuration Identification) : 형상관리의 대상이 무엇인지 식별

형상제어(Configuration Control) : 형상 항복의 버전과 변경에 대한 판단을 내리는 것

형상감사(Comfiguration Audit) : 요구대로 형상항목의 변경이 제대로 이뤄졌는지 살펴보는 것

형상상태보고(Configuration Status Accounting) : 변경된 형상 항목을 관계된 사람들에게 알리는 것

형상관리 도구 : CVS , SVN , Git, Perforce

 

해싱 함수

임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수

종류 : 제산법, 제곱법, 폴딩법, 기수변환법, 대수적 코딩법, 계수분석법(숫자분석법), 무작위법

 

트리 운행법

전위 순회 (Preorder) : 부모노드(root) -> 왼쪽 자식 노드(left) -> 오른쪽 자식 노드(right)

중위 순회 (Inorder) : 왼쪽 자식 노드(left) -> 부모노드(root) -> 오른쪽 자식 노드(right)

후위 순회 (Postorder) : 왼쪽 자식 노드(left) -> 오른쪽 자식 노드(right) -> 부모노드(root)

 

인터페이스 구현 검증 도구

종류 : xUnit, STAF, FitNesse, NTAF, Selenium, watir

 

스키마

데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것 (데이터의 개체, 속성, 관계에 대한 정의)

외부스키마 : 사용자 관점의 스키마, 사용자 뷰

개념스키마 : 기관/ 조직체(회사)관점의 스키마, 전체 뷰 , 데이터베이스의 전체적 논리적 구조

내부스키마 : 시스템 프로그래머 / 설계자 관점의 스키마 / 저장장치 / 계층상 물리적 저장장치와 가장 밀접

 

테스트 용어(케이스, 시나리오, 오라클, 데이터)

테스트 케이스 : SW가 사용자 요구사항을 정확하게 준수했는지 확인하기 위해 설계된 입력 값, 실행조건, 기대 결과

등으로 구성된 테스트 항목에 대한 명세서

테스트 시나리오 : 테스트 케이스를 적용하는 순서에 따라 여러개의 테스트 케이스들을 묶은 집합

테스트 오라클 : 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법

결과를 판단하기 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인

 

클린코드 작성 원칙

가독성 : 누군든지 코드를 쉽게 읽을 수 있도록 작성

단순성 : 코드를 간단하게 작성

의존성 : 배제코드가 다른 모듈에 미치는 영향 최소화

중복성 : 최소화 코드의 중복최소화

추상화

 

빌드 자동화 도구

빌드 : 소스코드 파일들을 컴파일한 후 여러개의 모듈을 묶어 실행 파일로 만드는 과정이며, 이러한 빌드를

포함하여 테스트 및 배포를 자동화하는 도구를 빌드 자동화 도구라고 한다.

애자일 환경에서는 하나의 작업이 마무리 될 때마다 모듈단위로 나눠서 개발된 코드들을 지속적으로 통합하는데

이런한 지속적인 통합(Continuous Integration) 개발환경에서 빌드 자동화 도구는 유용하게 사용

빌드 자동화 도구 : Ant, Make, Maven, Gradle, Jenkins

 

 

하향식 통합 검사, 상향식 통합 검사

하향식 통합 검사 : 상위 모듈에서 하위 모듈 방향으로 통합하여 검사

종속모듈  스텁(Stub)로 대체

*스텁 -> 테스트 대상 모듈이 호출하는 하위 모듈의 역할을 한다.

제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구

깊이 우선, 넓이 우선

모듈이 통합될 때마다 검사 실시

새로운 오류가 생기지 않음을 보증하기 위해 회귀 검사 실시

상향식 통합 검사 : 하위 모듈에서 상위 모듈 방향으로 통합하여 검사

하위모듈들은 클러스터(Cluster)로 결합

검사 사례 입출력 조정을 위해 드라이버(Driver) 작성

*드라이버 ->시험 대상 모듈을 호출하는 간이 소프트웨어

필요에 따라 매개변수를 전달하고 모듈을 수행한 후의 결과를 보여줄 수 있다

상향식 통합 테스트에서 사용

클러스터 검사

드라이버 제거 후 클러스터는 프로그램 구조의 상위로 이동하여 결합

 

소프트웨어 프로젝트 관리

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

효과적인 프로젝트 관리를 위한 3P(사람/문제/프로세스)

 

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

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

품질과 생산성을 높이기 위한 방법

프로젝트 문서공유

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

 

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

소프트웨어의 위기를 유지보수의 생산성으로 해결하는 방법

분석(Analysis) : 명세서를 확인하고 소프트웨어의 동작을 이해하고 재공학 대상을 선정하는 활동

재구성(Resturcturing) : 소프트웨어 기능을 변경하지 않고 소프트웨어 형태에 맞게 수정하는 활동

역공학(Recerse Engineering) : 기존 소프트웨어를 분석하여 소프트웨어 개발과 데이터 처리 과정을

                                                 분석하고 설계정보를 재발견하거나 다시 만드는 작업

이식(Migration) : 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있게 변환하는 작업

 

 

소프트웨어 패키징

모듈별로 생성한 실행 파일들을 하나로 합쳐 설치 파일을 만드는 것

사용자 중심 패키징

소프트웨어의 유지보수를 위해 모듈화 하여 패키징 진행

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

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

 

외계인 코드 (Alien Code)

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

 

 

테이터 포맷(표현형식)

정보(데이터)를 주고 받는 과정에서 목적에 맞게 다양한 방식으로 표현

일반 text데이터 : 비정형 데이터

CSV : 별도의 구분 기호로 데이터를 구분하여 표시

XML : 웹페이지를 만드는 HTML을 획기적으로 개선하여 만든 언어

JSON : 속성, 값으로 데이터 표현

YAML : 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식, 구성파일에 자주 사용되는 데이터 직렬화 언어

 

 

ISO / IEC 25000

국제 표준화 기구 (ISO)에서 제정한 S/W 품질평가를 위한 S/W 품질 평가 통합 모델 표준

소프트웨어 개발 공정 각 단계에서 산출되는 제품이 사용자 요구를 만족하는지 검증하기 위해 품질 측정과

평가를 위한 모델, 측정기법, 평가방안에 대한 통합합 국제 표준

소프트웨어 품질평가 모델인 ISO 9126와 소프트웨어 평가 절차 모델 ISO 14598을 통합

SQuaRE(Software Product Quality Requirements and Evaluation)

 

코드 인스펙션

소스 코드를 대상으로 자동화된 도구를 통해 수행하는 정적분석 기법

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

코드 품질 향상 기법 중 하나

동적 테스트로 발견할 수 없는 종류의 결함들을 발견할 수 있다

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

장애보다는 결함을 발견하는 것이 주안점

 

Risk Analysis(위험도분석)

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

시키기 위하여 위험 요소를 사전에 예측, 대비하는 모든 기술과 활동을 포함

 

테스트

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

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

성능 : 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간내에 처리하는 업무량, 사용자 요구에

       시스템이 반응하는 속도 등을 테스트

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

 

깊이 우선 탐색(DFS)

최대한 깊이 탐색한 이후 더 이상 탐색할 것이 없다면 이전으로 돌아가 탐색을 이어가는 것

 

사용자 매뉴얼 준비 절차

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

 

소프트웨어 테스트 검증(Verification) / 확인(Validation)

검증 : 소프트웨어가 요구사항에 부합하게 구현되었음을 보장하는 활동

확인 : 소프트웨어가 고객의 의도에 따라 구현되었음을 보장하는 활동

 

결함(Failure)

소프트웨어 개발 활동을 수행함에 있어서 시스템이 고장을 일으키게 하며, 오류가 있는 경우 발생하는 것

 

최악의 경우에서 검색 시간 복잡도

이진 탐색 트리 : O(n)

AVL 트리 : O(log n)

2-3트리 : O(log 3n)

레드 블랙 트리 : O(log n)

 

패키저

콘텐츠를 메타 데이터와 함께 배포 가능한 단위로 묶는 기능

 

소프트웨어 품질목표

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

신뢰성(Reliability) : 요구된 기능을 오류없이 수행하는 정도

효율성(Efficiency) : 요구된 기능을 수행하기 위한 시스템능력과 필요한 자원의 소요정도

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

무결성(Integrity) : 허용되지 않은 사용이나 자료의 변경을 제어하는 정도

유용성(Usablilty) : 쉽게 사용할 수 있는 정도

유연성(Flexibility) : 새로운 요구사항에 맞게 얼마만큼 쉽게 수정할 수 있는지의 정도

재사용성(Reusability) : 이미 만들어진 프로그램을 다른 목적으로 사용할 수 있는지의 정도

상호운용상(Interoperability) : 다른 소프트웨어와 정보를 교환할 수 있는 정도