자격증 요약/정보처리기사

[23년 1회 2과목] 정보처리기사 필기 문제 풀이

문성 2026. 1. 21. 19:37

 

제2과목: 소프트웨어 개발 (21~40번)

정보처리기사 필기 기출문제
24년 3회 1과목 2과목 3과목 4과목 5과목
24년 2회 1과목 2과목 3과목 4과목 5과목
24년 1회 1과목 2과목 3과목 4과목 5과목
23년 3회 1과목 2과목 3과목 4과목 5과목
23년 2회 1과목 2과목 3과목 4과목 5과목
23년 1회 1과목 2과목 3과목 4과목 5과목

21. 공학적으로 잘된 소프트웨어(Well Engineered Software)의 설명 중 틀린 것은?

① 소프트웨어는 유지보수가 용이해야 한다.

② 소프트웨어는 신뢰성이 높아야 한다.

③ 소프트웨어는 사용자 수준에 무관하게 일관된 인터페이스를 제공해야 한다.

④ 소프트웨어는 충분한 테스팅을 거쳐야 한다.

공학적으로 잘 설계된 소프트웨어 (Well Engineered Software)
소프트웨어 공학의 궁극적인 목표는 최소의 비용으로 고품질의 소프트웨어를 개발하는 것

핵심 4대 특징
유지보수성 (Maintainability): 소프트웨어는 변화하는 사용자의 요구사항을 수용할 수 있도록 수정이 쉬워야 합니다.
신뢰성 (Reliability): 장애가 발생하지 않아야 하며, 물리적/심리적 위해를 가하지 않아야 합니다. (정확성, 보안성 포함)
효율성 (Efficiency): 메모리, CPU 등 시스템 자원을 낭비하지 않고 최적화하여 사용해야 합니다.
적절한 사용자 인터페이스 (Appropriate UI): 사용자가 쓰기 편해야 하며, 사용자의 숙련도에 따라 유연하게 대응해야 합니다

답: 3번
모든 사용자에게 일률적으로 똑같은 인터페이스를 강요하는 것이 아니라, 사용자의 숙련도나 요구에 따라 적절하고 유연한 인터페이스를 제공해야 합니다.
예를 들어, 초보자에게는 친절한 안내 위주의 인터페이스를, 전문가에게는 빠른 조작이 가능한 단축키나 명령어 위주의 인터페이스를 제공하는 것이 더 공학적으로 우수한 설계입니다.
 

22. 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목으로 거리가 먼 것은?

정확성

② 무결성

③ 사용성

④ 간결성

소프트웨어 품질측정 (개발자 관점)
 - 정확성
 - 신뢰성
 - 효율성
 - 무결성
 - 유연성
 - 이식성

답: 4번
사용성은 사용자 입장
 

23. 소프트웨어 공학에서 워크스루(Walkthrough)에 대한 설명으로 틀린 것은?

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

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

③ 인스펙션(Inspection)과 동일한 의미를 가진다.

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

요구사항 검증 방법
요구사항 검토 : 요구사항 명세서의 오류 확인 및 표준 준수 등의 결함 여부를 검토 담당자들이 수작업으로 분석
 - 동료 검토 : 요구사항 명세서 작성자가 명세서 내용을 직접 설명하고 동료들이 이를 들으면서 결함을 발견하는 형태
 - 워크 스루 : 작성자가 요구사항 명세서를 미리 배포하여 사전 검토한 후에 짧은 검토 회의를 통해 결함을 발견하는 형태
 - 인스펙션 : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견하는 형태

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

테스트 설계 : 요구사항은 테스트할 수 있도록 작성되어야 하며, 이를 위해 테스트 케이스를 생성하여 이후에 요구사항이 현실적으로 테스트 가능한지를 검토

CASE 도구 활용 : 일관성 분석을 통해 요구사항 변경사항의 추적 및 분석, 관리하고, 표준 준수 여부를 확인

※워크스루 vs 인스펙션
워크스루
주체 : 개발자(작성자)가 직접 주관
특징 : 비정식적, 단순 검토, 교육 및 공유
참가자 : 개발자 및 동료 전문가
난이도 : 비교적 가볍고 자유로움

인스펙션
주체 : 별도의 중재자가 주관
특징 : 정식적, 엄격한 절차와 체크리스트 존재
참가자 : 중재자, 작성자, 검토자 등 전문가 집단
난이도 : 워크스루를 더 정형화하고 발전시킨 형태

답: 3번
워크스루와 인스펙션은 다르다.
 

24. 순서가 A, B, C, D로 정해진 입력 자료를 스택에 입력하였다가 출력할 때, 가능한 출력 순서의 결과가 아닌 것은?

① A, B, C, D

② D, A, B, C

③ A, B, D, C

④ B, C, D, A

스택은 후입선출(LIFO, Last-In First-OUT)
입력 순서가 A → B → C → D 로 고정되어 있을 때.
① D, C, B, A : 차례대로 Pop하면 나온다.
② B, C, D, A : A,B Push → B Pop → C Push → C Pop → D Puch → D Pop → A Pop
 C, B, A, D : A,B,C Push 후 차례대로 Pop → D Push, Pop
④ D, B, C, A : D가 먼저 출려고디려면, A,B,C,D가 순서대로 Push 되어야 하므로 D다음에 B가 올 수 없다.

답: 2번
 

25. 다음 트리의 차수(Degree)와 단말 노드(Terminal Node)의 수는?

① 차수: 4, 단말 노드 : 4

② 차수: 2, 단말 노드 : 4

③ 차수: 4, 단말 노드 : 8

④ 차수: 2, 단말 노드 : 8

차수(디그리)는 노드들 중 가장 많은 수 → 차수(디그리)는 2개(C,E)
(※ C와 E에서 뻗어나온 가지의 수가 2개이므로 차수가 2개가된다. C와 E 2개라서 2개가 아님)
단말노드는 자식이 하나도 없는 노드 → 4개(D,G,H,F)

트리
예.
 
노드(Node) : 트리의 기본 요소로서 자료 항목과 다른 항목에 대한 가지를 합친 것
 - 예: A, B, C, D, E, F, G, H, I, J, K, L, M
근 노드(Root Node) : 트리의 맨 위에 있는 노드
 - 예: A
디그리(Degree, 차수) : 각 노드에서 뻗어 나온 가지의 수
 - 예: A=3, B-2, C=1, D=3
단말 노드(Terminal Node, 잎 노드(Leat Node)) : 자식이 하나도 없는 노드
 - 예: K, L, F, G, M, I, J
자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드들
 - 예: D의 자식 노드 = H, I, J
부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드들
 - 예: H의 형제 노드 = I, J
형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들
 - 예: H의 형제 노드 = I, J
트리의 디그리 : 노드들이 디그리 중에서 가장 많은 수
 - 예: 노드 A나 D가 3개의 디그리를 가지므로 앞 트리의 디그리는 3이다.

계산 공식
노드와 간선의 관계 : 트리 내의 총 노드 수가 N개라면, 간선의 수는 항상 'N-1'개
이진 트리 : 모든 노드의 차수가 2이하인 트리

답: 2번
 

26. 다음 Postfix로 표현된 연산식의 연산 결과로 옳은 것은?

3 4 * 5 6 * +

① 35

② 42

③ 81

④ 360

수식의 표기법
전위 표기법 (PreFix) : 연산자 → Left → Right, +AB
 - 오른쪽에서 왼쪽으로 읽기
중위 표기법 (InFix) : Left → 연산자 → Right, A+B
후위 표기법 (PostFix) : Left → Right → 연산자, AB+
 - 왼쪽에서 오른쪽으로 읽기

※계산
3 4 * 5 6 * +
(3*4) 5 6 * +
12 5 6 * +

12 5 6 * +
12 (5*6) +
12 30 +

12 30 +
12+30
42

답: 2번
 

27. 테스트와 디버그의 목적으로 옳은 것은?

① 테스트는 오류를 찾는 작업이고 디버깅은 오류를 수정하는 작업이다.

② 테스트는 오류를 수정하는 작업이고 디버깅은 오류를 찾는 작업이다.

③ 둘 다 소프트웨어의 오류를 찾는 작업으로 오류 수정은 하지 않는다.

④ 둘 다 소프트웨어 오류의 발견, 수정과 무관하다.

테스트와 디버깅의 목적
테스트(Test)
 - 소프트웨어에 결함(Fault)이 있는지 확인하고, 프로그램이 의도한 대로 작동하는지 검사하는 과정
 - 즉, "오류가 있음을 증명"하여 오류를 찾는 것이 주된 목적입니다.

디버깅(Debugging)
 - 테스트를 통해 발견된 오류의 원인을 찾고 이를 수정(Fixing)하는 과정
 - 프로그램의 잘못된 부분을 바로잡아 정상적으로 동작하게 만드는 것이 목적입니다.

답: 1번
 

28. DRM(Digital Rights Management)과 관련한 설명으로 틀린 것은?

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

② 디지털 미디어의 생명 주기 동안 발생하는 사용 권한 관리, 과금, 유통 단계를 관리하는 기술로도 볼 수 있다.

③ 클리어링 하우스(Clearing House)는 사용자에게 콘텐츠 라이선스를 발급하고 권한을 부여해주는 시스템을 말한다.

④ 원본을 안전하게 유통하기 위한 전자적 보안은 고려하지 않기 때문에 불법 유통과 복제의 방지는 불가능하다.

디지털 저작권 관리(DRM, Digital Right Management) :저작권자가 배포한 디지털 콘텐츠가 저작권자가 의도한 용도로만 사용되도록 디지털 콘텐츠의 생성, 유통, 이용까지의 전 과정에 걸쳐 사용되는 디지털 콘텐츠 관리 및 보호 기술
 - 원본 콘텐츠가 아날로그인 경우에는 디지털로 변환한 후 패키저(Packager)에 의해 DRM 패키징을 수행한다.
 - 콘텐츠의 크기에 따라 음원이나 문서와 같이 크기가 작은 경우에는 사용자가 콘텐츠를 요청하는 시점에서 실시간으로 패키징을 수행하고, 크기가 큰 경우에는 미리 패키징을 수행한 후 배포한다.
 - 패키징을 수행하면 콘텐츠에는 암호화된 저작권자의 전자서명이 포함되고 저작권자가 설정한 라이선스 정보가 클리어링 하우스에 등록된다.
 - 사용자가 콘텐츠를 사용하기 위해서는 클리어링 하우스에 등록된 라이선스 정보를 통해 사용자 인증과 콘텐츠 사용 권한 소유 여부를 확인받아야 한다.
 - 종량제 방식을 적용한 소프트웨어의 경우 클리어링 하우스를 통해 서비스의 실제 사용량을 측정하여 이용한 만큼의 요금을 부과한다.

디지털 저작권 관리(DRM) 구성요소
 - 클리어링 하우스 (Clearing House) : 저작권에 대한 사용 권한, 라이선스 발급, 암호화된 키 관리, 사용량에 따른 결제 관리 등을 수행
 - 콘텐츠 제공자 (Contents Provider) : 콘텐츠를 제공하는 저작권자
 - 패키저 (Packager) : 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램
 - 콘텐츠 분배자 (Contents Distributor) : 암호화된 콘텐츠를 유통하는 곳이나 사람
 - 콘텐츠 소비자 (Customer) : 콘텐츠를 구매해서 사용하는 주체
 - DRM 컨트롤러 (DRM Controller) : 배포된 콘텐츠의 이용 권한을 통제하는 프로그램
 - 보안 컨테이너 (Security Container) : 콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치

디지털 저작권 관리(DRM)의 기술 요소
 - 암호화 (Encryption) : 콘텐츠 및 라이선스를 암호화하고 전자 서명을 할 수 있는 기술
 - 키 관리 (Key Management) : 콘텐츠를 암호화한 키에 대한 저장 및 분배 기술
 - 암호화 파일 생성 (Packager) : 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술
 - 식별 기술 (Identification) : 콘텐츠에 대한 식별 체계 표현 기술
 - 저작권 표현 (Right Expression) : 라이선스의 내용 표현 기술
 - 정책 관리 (Policy Management) : 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술
 - 크랙 방지 (Tamper Resistance) : 크랙에 의한 콘텐츠 사용 방지 기술
 - 인증 (Authentication) : 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술

답: 4번
DRM의 존재 이유 자체가 '불법 유통과 복제를 방지'하여 저작권자의 권익을 보호하는 것
 

29. 소프트웨어 형상 관리에서 관리 항목에 포함되지 않는 것은?

① 프로젝트 요구 분석서

② 소스 코드

③ 운영 및 설치 지침서

④ 프로젝트 개발 비용

형상 관리 (SCM) : 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동
 - 소프트웨어 변경의 원인을 알아내고 제어하며, 적절히 변경되고 있는지 확인하여 해당 담당자에게 통보한다.
 - 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동이며, 유지보수 단계에서도 수행된다.
 - 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 한다.
 - 관리 항목에는 소스 코드뿐만 아니라 각종 정의서, 지침서, 분석서 등이 포함된다.
 - 형상 관리를 통해 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있다.
 - 대표적인 형상 관리 도구 : Git, CVS, Subversion

형상 관리의 중요성
 - 지속적인 소프트웨어의 변경 사항을 체계적으로 추적하고 통제할 수 있다.
 - 제품 소프트웨어에 대한 무절제한 변경을 방지할 수 있다. (불필요한 사용자의 소스 수정 제한)
 - 제품 소프트웨어에서 발견된 버그나 수정 사항을 추적할 수 있다.
 - 소프트웨어는 형태가 없어 가시성이 결핍되므로 진행 정도를 확인하기 위한 기준으로 사용될 수 있다.
 - 소프트웨어의 배포본을 효율적으로 관리할 수 있다.
 - 소프트웨어를 여러 명의 개발자가 동시에 개발할 수 있다.

형상 관리 기능
형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여(식별)하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 제어하는 작업
버전 제어 : 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구를 결합시키는 작업
형상 통제(변경 관리) : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정하는 작업
 - 변경 요구를 '즉시' 수용하는 것이 아니라, 형상 통제 위원회의 심의를 거쳐 변경의 타당성을 검토한 후 승인된 변경 사항만 반영
형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
형상 기록(상태 보고) : 형상의 식별, 통제, 감사 작업의 결과를 기록, 관리하고 보고서를 작성하는 작업
대표적인 형상 관리 도구 : Git, CVS, Subversion 

답: 3번
 - 형상 관리는 소프트웨어 개발 과정에서 발생하는 변경 사항을 체계적으로 추적하고 통제하여 가시성과 추적성을 확보하는 활동
 -  이는 제품의 품질 향상과 유지보수 효율성을 목적으로 하지, 프로젝트의 전체적인 '개발 비용' 자체를 직접적으로 관리(예: 예산 책정, 인건비 정산 등)하는 활동은 아닙니다.
 -  비용 관리는 프로젝트 관리의 영역입니다.
 

30. 다음과 같이 레코드가 구성되어 있을 때, 이진 검색 방법으로 14를 찾을 경우 비교되는 횟수는?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

① 2

② 3

③ 4

④ 5

이진 검색 : 전체 목록의 중간값을 찾아, 찾고자 하는 값과 비교하며 범위를 절반씩 줄여나가는 방식
※중간값 찾기 (첫 값 + 끝 값)/2

1회차 :
중간값 찾기 : (1+15)/2 = 8
크기 비교 : 8과 14 비교 → 8 < 14 
결과 : 8보다 큰 오른쪽 범위로 이동 = 9~15

2회차 : 
중간값 찾기 : (9+15)/2 = 12
크기 비교 : 12와 14 비교 → 12 < 14 
결과 : 12보다 큰 오른쪽 범위로 이동 = 13~15

3회차 : 
중간값 찾기 : (13+15)/2 = 14
크기 비교 : 14와 14 비교 → 14 = 14 
결과 : 값이 일치하므로 검색 종료

답: 2번
비교횟수 3회
 

31. 빌드 자동화 도구에 대한 설명으로 틀린 것은?

① Gradle은 실행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행한다.

② 빌드 자동화 도구는 지속적인 통합 개발 환경에서 유용하게 활용된다.

③ 빌드 자동화 도구에는 Ant, Gradle, Jenkins 등이 있다.

④ Jenkins는 Groovy를 기반으로 한 오픈 소스로 안드로이드 앱 개발 환경에서 사용된다.

빌드 자동화 도구 : 빌드란 소스 코드 파일들을 컴파일한 후 여러 개의 모듈을 묶어 실행 파일로 만드는 과정이며, 이러한 빌드를 포함하여 테스트 및 배포를 자동화하는 도구

빌드 자동화 도구 종류
Make : UNIX 계열의 운영체제에서 주로 사용하는 컴파일 및 자동화 도구
Ant : XML 기반의 빌드 스크립트 사용, 절차가 복잡하고 스크립트가 길어질 수 있다는 단점
Maven : XML 기반이지만, Ant의 단점을 보완하여 의존성 관리 기능을 ㅈ공
Jenkins : JAVA기반의 오픈소스 형태, 가장 많이 사용
Gradle : Groovy를 기반으로 한 오픈 소스 형태, 안드로이드 앱 개발 환경에서 사용

답: 4번
Gradle 에 대한 설명이다.
 

32. 화이트박스 테스트와 관련한 설명으로 틀린 것은?

① 화이트박스 테스트의 이해를 위해 논리 흐름도(Logic-Flow Diagram)를 이용할 수 있다.

② 테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾는 동적 테스트(Dynamic Test)에 해당한다.

③ 프로그램의 구조를 고려하지 않기 때문에 테스트 케이스는 프로그램 또는 모듈의 요구나 명세를 기초로 결정한다.

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

테스트 케이스 : 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서로, 명세 기반 테스트의 설계 산출물에 해당한다.
 → 입력 값(테스트 데이터), 실행 조건(테스트 조건), 기대 결과(예상 결과)

블랙박스 테스트 : 소프트웨어의 내부 구조나 코드를 보지 않고, 사용자 요구사항 명세서를 보면서 기능이 정확히 수행되는지 테스트하는 기법

블랙박스 테스트 종류
동치(동등) 분할 검사 (Equivalence Partitioning Testing)
경계값 분석 (Boundary Value Analysis)
원인-효과 그래프 검사 (Cause-Effect Graphing Testing)
오류 예측 검사 (Error Guessing)
비교 검사 (Comparison Testing)

화이트박스 테스트 : 프로그램의 내부 로직(소스 코드) 직접 보면서 모든 논리적 경로를 테스트합니다

화이트박스 테스트 종류
기초 경로 검사 (Base Path Testing) : 제어 흐름 그래프에서 시작부터 끝까지 가는 독립적인 경로, 싸이클(반복)이 포함될 수 밖에 없음
제어 구조 검사 
 - 조건 검사 (Condition Testing)
 - 루프 검사 (Loop Testing)
 - 데이터 흐림 검사 (Data Flow Testing)

화이트박스 테스트의 검증 기준
문장 (Statement) 검증 기준
 - 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설꼐

분기
 (Branch) 검증 기준(결정 (Decision) 검증 기준)
 - 소스 코드의 모든 조건문에 대해 조건이 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계

조건
 (Condition) 검증 기준
 - 소스 코드의 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계

분기
/조건 (Branch/Condition) 기준
 - 분기 검증 기준과 조건 검증 기준을 모두 만족하는 설계로, 조건문 True인 경우와 False인 경우에 따라 조건 검증 기준의 입력 데이터를 구분하는 테스트 케이스 설계


답: 3번
 

33. 알파, 베타 테스트와 가장 밀접한 연관이 있는 테스트 단계는?

① 단위 테스트

② 인수 테스트

③ 통합 테스트

④ 시스템 테스트


인수 테스트
알파 테스트
 - 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법
 - 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록함

베타 테스트
 - 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법으로 필드 테스팅이라고도 불림
 - 실업무를 가지고 사용자가 직접 테스트하는 것으로, 개발자에 의해 제어되지 않은 상태에서 테스트가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고함

시스템 테스트
기능적 요구사항
비기능적 요구사항

통합 테스트
하향식 통합테스트 - 테스트 스텁
상향식 통합테스트 - 드라이버

단위 테스트

답: 2번
 

34. 다음 중 테스트 오라클에 대한 설명으로 옳지 않은 것은?

① 샘플링 오라클 : 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클이다.

② 토탈 오라클 : 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클이다.

③ 휴리스틱 오라클 : 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클이다.

④ 일관성 검사 오라클 : 애플리케이션의 변경이 있을 경우 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클이다.

테스트 오라클 (Test Oracle) : 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법 및 활동을 말함
 - 테스트 오라클은 결과를 판단하기 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인한다.
 - 모든 입력값에 대해 일일이 정답을 만들어 두는 것은 비효율적이기 때문에 상황에 맞는 오라클을 선택적으로 사용해야 함
  → 모든 테스트 케이스에 대해 기대 결과를 생성하는 것이 현실적으로 불가능
 - 테스트 자동화 도구와 결합하여 실행 결과 비교 및 분석을 자동화하는 데 핵심적인 역할을 함.

테스트 오라클의 종류
(True) 오라클
 - 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클로, 발생된 모든 오류를 검출할 수 있음
 - 수학적 기법를 이용하여 결과값을 산출해 낼 수 있음

샘플링
(Sampling) 오라클
 - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클

추정
(휴리스틱, Heuristic) 오라클
 -샘플링 오라클을 개선한 오라클로, 특정 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하고, 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클

일관성
 검사(Consistent) 오라클
 - 애플리케이션의 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인하는 오라클

답: 2번
 

35. EAI(Enterprise Application Integration)의 구축 유형으로 옳지 않은 것은?

① Tree

② Message Bus

③ Hub & Spoke

④ Point-to-Point

EAI (Enterprise Application Integration)
기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션

EAI 구축 유형
Point-to-Point
 - 가장 기본적인 애플리케이션 통합 방식으로, 애플리케이션을 1:1로 연결함
 - 변경 및 재사용이 어려움

Hub & Spoke
 - 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
 - 확장 및 유지보수가 용이
 - 허브 장애 발생 시 시스템 전체에 영향을 미침

Message Bus (ESB 방식)
 - 애플리케이션 사이에 미들웨어를 두어 처리하는 방식
 - 확장성이 뛰어나며 대용량 처리가 가능함

Hybrid
 - Hub & Spoke 와 Message Bus의 혼합 방식
 - 그룹 내에서는 Hub & Spoke 방식을, 그룹 간에는 Message Bus 방식을 사용함
 - 필요한 경우 한 가지 방식으로 EAI 구현이 가능함
 - 데이터 병목 현상을 최소화할 수 있음

답: 1번
 

36. 다음 트리를 Preorder 운행법으로 운행할 경우 다섯 번째로 탐색되는 것은?

① C ② E ③ G ④ H

A 1 2
A BD 2
A BD C3F
A BD C EGH F

트리 순회(★)

※ 서브 트리를 하나의 노드로 생각할 수 있도록 그림과 같이 서브트리 단위로 묶는다.
※ A = Root
전위 (Pre-order): Root → 왼쪽 → 오른쪽
 - 1단계 : A 1 3
 - 2단계 : A B2E 3
 - 3단계 : A B DHI E 3
 - 4단계 : A B DHI E CFG (최종)

중위 (In-order): 왼쪽 → Root → 오른쪽
 - 1단계 : 1 A 3
 - 2단계 : 2BE A 3
 - 3단계 : HDI BE A 3
 - 4단계 : HDI BE A FCG

후위 (Post-order): 왼쪽 → 오른쪽 → Root
 - 1단계 : 1 3 A
 - 2단계 : 2EB 3 A
 - 3단계 : HID EB 3 A
 - 4단계 : HID EB FGC A

답: 2번
 

37. 다음 초기 자료에 대하여 삽입 정렬(Insertion Sort)을 이용하여 오름차순 정렬할 경우 1회전 후의 결과는?

초기 자료: 8, 3, 4, 9, 7

 

① 3, 4, 8, 7, 9

② 3, 4, 9, 7, 8

③ 7, 8, 3, 4, 9

④ 3, 8, 4, 9, 7

8,3,4,9,7
(1회전) 8,3,4,9,7 → 3,8,4,9,7

삽입 정렬 (Insert Sort) : 이미 정렬된 부분과 비교하여 자기 위치를 찾아 삽입 (2번째 요소부터 시작)
예. 8,5,6,2,4
(1회전) 8,5,6,2,4 → 5,8,6,2,4 : 두 번째 값을 첫 번째 값과 비교하여 5를 첫 번째 자리에 삽입하고 8을 한 칸 뒤로 이동
(2회전) 5,8,6,2,4 → 5,6,8,2,4 : 세 번째 값을 첫 번째, 두 번째 값과 비교하여 6을 8자리에 삽입하고 8을 한칸 뒤로 이동
(3회전) 5,6,8,2,4 → 2,5,6,8,4 : 네 번째 값 2를 처음부터 비교하여 맨 처음에 삽입하고 나머지를 한 칸씩 뒤로 이동
(4회전) 2,5,6,8,4 → 2,4,5,6,8 : 다섯 번째 값 4를 처음부터 비교하여 5자리에 삽입하고 나머지를 한 칸씩 뒤로 이동

선택 정렬 (Selection Sort) : 최솟값을 찾아 맨 앞으로 보냄
예. 8,5,6,2,4
(1회전) 8,5,6,2,4 → 8,5,6,2,4 → 2,5,6,8,4 : 첫 번째부터 마지막 값 중 최소값 2를 찾아 첫 번째 값 8과 위치를 교환
(2회전) 2,5,6,8,4 → 2,5,6,8,4 → 2,4,6,8,5 : 두 번째부터 마지막 값 중 최소값 4를 찾아 두 번째 값 5와 위치를 교환
(3회전) 2,4,6,8,5 → 2,4,6,8,5 → 2,4,5,8,6 : 세 번째부터 마지막 값 중 최소값 5를 찾아 세 번째 값 6과 위치를 교환
(4회전) 2,4,5,8,6 → 2,4,5,8,6 → 2,4,5,6,8 : 네 번째부터 마지막 값 중 최소값 6을 찾아 네 번째 값 8과 위치를 교환

버블 정렬 (Bubble Sort) : 인접한 두 원소를 비교하여 교환. (가장 큰 값이 맨 뒤로 밀려남)
예. 8,5,6,2,4
(1회전) 8,5,6,2,4 → 5,6,8,2,4 → 5,6,2,8,4 → 5,6,2,4,8
(2회전) 5,6,2,4,8 → 5,2,6,4,8 → 5,2,4,6,8
(3회전) 2,5,4,6,8 → 2,4,5,6,8
(4회전) 2,4,5,6,8

답: 4번
 

38. 다음 중 단위 테스트 도구로 사용될 수 없는 것은?

① CppUnit

② JUnit

③ HttpUnit

④ IgpUnit

주요 단위 테스트 도구(xUnit)
JUnit: Java용 (가장 빈출)
CppUnit: C++용
NUnit: .Net용
PyUnit: Python용
DUnit: Delphi용
HttpUnit: 웹 애플리케이션 테스트용

답: 4번
IgpUnit 는 정보처리기사 시험이나 실제 소프트웨어 개발 현장에서 사용되는 표준적인 단위 테스트 도구가 아님
 

39. 소프트웨어 재공학이 소프트웨어의 재개발에 비해 갖는 장점으로 거리가 먼 것은?

① 위험부담 감소

② 비용 절감

③ 시스템 명세의 오류억제

④ 개발 시간의 증가

소프트웨어 재공학 : 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
 - 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술
 - 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법
 - 기존 소프트웨어의 기능을 개조하거나 개선하므로, 예방 유지보수 측면에서 소프트웨어 위기를 해결하는 방법
 - 소프트웨어 재공학도 자동화된 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함
 - 소프트웨어의 수명이 연장되고, 소프트웨어 기술이 향상될 뿐만 아니라 소프트웨어의 개발 기간도 단축
 - 소프트웨어에서 발생할 수 있는 오류가 줄어들고, 비용이 절감  시스템 명세의 오류 억제

답: 4번
 

40. 알고리즘 설계 기법으로 거리가 먼 것은?

① Divide and Conquer

② Greedy

③ Static Block

④ Backtracking

알고리즘 설계 기법
분할 정복 (Divide and Conquer)
 - 큰 문제를 작은 문제로 쪼개어 해결한 뒤, 다시 합쳐서 원래 문제의 답을 찾는 방식입니다.
 - 특징: 문제를 나눌 때 보통 **재귀(Recursion)**를 사용합니다.
 - 핵심 키워드: 하향식(Top-down) 접근, 재귀적 분할.
 - 대표 예시: 퀵 정렬(Quick Sort), 합병 정렬(Merge Sort), 이진 탐색(Binary Search).

동적 계획법 (Dynamic Programming, DP)
 - 작은 문제의 해를 메모리에 저장해 두었다가(Memoization), 큰 문제를 풀 때 가져다 쓰는 방식입니다.
 - 특징: 분할 정복과 비슷해 보이지만, **"중복되는 작은 문제들"**이 발생할 때 이를 저장하여 연산 횟수를 줄이는 것이 핵심입니다.
 - 핵심 키워드: 메모이제이션(Memoization), 상향식(Bottom-up) 또는 하향식(Top-down) 가능.
 - 대표 예시: 피보나치 수열, 최단 경로 알고리즘(Floyd-Warshall), 0/1 배낭 문제(Knapsack).

탐욕법 (Greedy Method)
 - 매 순간마다 지금 당장 최선인 것만 선택해 나가는 방식입니다.
 - 특징: 선택 당시에는 최적이지만, 최종 결과가 반드시 최적이라는 보장은 없습니다. 하지만 속도가 매우 빠릅니다.
 - 핵심 키워드: 국부적인 최적해, 속도 빠름.
 - 대표 예시: 거스름돈 문제(동전 개수 최소화), 최소 비용 신장 트리(Kruskal, Prim 알고리즘), 허프만 코딩.

백트래킹 (Backtracking, 퇴각 검색)
 - 해를 찾아가는 도중 막히면 다시 뒤로 돌아가서 다른 경로를 찾는 방식입니다.
 - 특징: 모든 가능성을 시도해 보지만, 가망이 없는 경로는 미리 포기(Pruning, 가지치기)하여 효율을 높입니다.
 - 핵심 키워드: 가지치기(Pruning), 깊이 우선 탐색(DFS) 기반.
 - 대표 예시: N-Queen 문제, 미로 찾기, 기사 여행 문제.

분기 한정법 (Branch and Bound)
 - 백트래킹과 유사하지만, 주로 최적화 문제를 풀 때 사용하며 하한값/상한값을 계산하여 탐색 범위를 줄입니다.
 - 특징: 주로 너비 우선 탐색(BFS)을 기반으로 하며, 최적의 해를 더 빨리 찾기 위해 사용합니다.
 - 핵심 키워드: BFS 기반, 하한선(Lower Bound).
 - 대표 예시: 외판원 문제(TSP).

답: 3번
Static Block : 이는 알고리즘 설계 기법이 아니라, Java와 같은 객체지향 프로그래밍 언어에서 클래스가 로딩될 때 딱 한 번 실행되는 코드 블록을 의미하는 프로그래밍 문법 용어입니다.

정보처리기사 필기 기출문제
24년 3회 1과목 2과목 3과목 4과목 5과목
24년 2회 1과목 2과목 3과목 4과목 5과목
24년 1회 1과목 2과목 3과목 4과목 5과목
23년 3회 1과목 2과목 3과목 4과목 5과목
23년 2회 1과목 2과목 3과목 4과목 5과목
23년 1회 1과목 2과목 3과목 4과목 5과목