정보처리기사

[정보처리기사 실기 기출] 2020년 3회

juble 2024. 9. 28. 17:02

01. 형상 통제에 대해 간략히 설명하시오.

: 소프트웨어 형상 변경 요청을 검토하고 승인하여 현재의 베이스라인에 반영될 수 있도록 통제

 

* 형상 통제

  • 형상에 대한 변경 요청이 있을 경우 변경 여부와 변경 활동을 통제하는 것을 말한다. 
  • 변경된 요구사항에 대한 타당성을 검토하여 변경을 실행(변경관리)하고, 그에 따라 변경된 산출물에 대한 버전관리를 수행하는 것이 형상 통제의 주요 활동이다. 
  • 즉, 형상 통제는 소프트웨어 형상 변경 요청을 검토 승인하여 현재의 베이스라인(Base-line)에 반영될 수 있도록 통제하는 것을 의미한다. 

 


02. 다음은 EAI 구축 유형에 대한 설명이다. ①, ②에 해당하는 유형을 쓰시오.

유형 설명
( ① ) - 중간에 미들웨어를 두지 않고 각 애플리케이션 간 직접 연결
- 솔루션 구매 없이 통합, 상대적 저렴하게 통합 가능
- 변경, 재사용 어려움
( ② ) - 단일 접점이 허브 시스템을 통해 데이터를 전송하는 중앙 집중적 방식
- 모든 데이터 전송 보장, 확장 및 유지보수 용이
- 허브 장애 시 전체 영향 
 
: ① point to point , ② hub&spoke

 

* EAI(Enterprise Application Integration)

  • 기업에서 운영되는 서로 다른 플랫폼 및 애플리케이션들 간의 정보 전달, 연계, 통합을 가능하게 해주는 솔루션이다. 
  • EAI 구축 유형
유형 설명
point 
to
point
- 중간에 미들웨어를 두지 않고 각 애플리케이션 간 직접 연결
- 솔루션 구매 없이 통합, 상대적 저렴하게 통합 가능
- 변경, 재사용 어려움
hub
&
spoke
- 단일 접점이 허브 시스템을 통해 데이터를 전송하는 중앙 집중적 방식
- 모든 데이터 전송 보장, 확장 및 유지보수 용이
- 허브 장애 시 전체 영향 
Message
Bus
(ESB 방식)
- 애플리케이션 사이 미들웨어(버스)를 두어 처리
- 미들웨어를 통한 통합
- 어댑터가 각 시스템과 버스를 두어 연결하므로 뛰어난 확장성, 대용량 처리 가능
Hybriid - 유연한 통합 작업이 가능
- 표준 통합 기술, 데이터 병목 현상 최소화

 


03. UI(User Interface) 설계 원칙 중 직관성에 대해 간략히 서술하시오.

: 누구나 쉽게 이해하고 사용할 수 있어야 한다.
: 사용자가 기능을 쉽게 파악할 수 있도록 해야 한다.

 

* UI 설계 원칙

  • 직관성 : 화면의 버튼, 항목, 입력란 등 누구나 쉽게 이해하고 사용할 수 있어야 한다. 
  • 유효성 : 사용자의 목적을 정확히 달성할 수 있도록 유용하고 효과적이어야 한다. 
  • 학습성 : 사용자가 쉽게 배우고 익힐 수 있어야 한다. 
  • 유연성 : 사용자의 요구를 최대한 수용하면서 오류를 최소화해야 한다. 

 


04. 다음 제어 흐름 그래프에 대한 분기 커버리지(Branch Coverage)를 수행하는 경우의 테스트 케이스 경로를 7단계와 6단계로 나눠서 순서대로 나열하시오.

7단계 : 1 → 2 → 3 → 4 → 5 → 6 → 1   or   1 → 2 → 3 → 4 → 5 → 6 → 7
6단계 :  1 → 2 → 4 → 5 → 6 → 7   or    1 → 2 → 4 → 5 → 6 → 1

 

* 제어 흐름 그래프 : 노드(node)와 간선(dege)으로 제어(실행) 흐름을 표시한 흐름도

* 결정 커버리지(Decision Coverage) = 분기 커버리지(Branch Coverage)

  • IEEE 표준 단위 테스팅의 표준으로 지정된 최소 커버리지로 분기 커버리지는 문장 커버리지를 충분히 포함
  • 화이트박스 테스트 수행 시 시험 대상의 전체 분기 중 각 분기는 테스트에 의해 실행된 것을 측정
  • 프로그램 내의 모든 결정 포인트(분기에 대해 모든 가능한 결과(참, 거짓))를 최소 한 번씩은 실행하는 테스트
결정 커버리지 답(1) 7단계 답(2) 6단계
결정 포인트 X > Y RESULT > 0 X > Y RESULT > 0
방법 1 YES YES NO NO
 1 → 2 → 3 → 4 → 5 → 6 → 1  1 → 2 → 4 → 5 → 6 → 7
방법 2 YES NO NO YES
 1 → 2 → 3 → 4 → 5 → 6 → 7  1 → 2 → 4 → 5 → 6 → 1

* 코드 커버리지(Code Coverage)

  • 구문 커버리지 : 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
  • 조건 커버리지 : 결정 포인트 내의 모든 개별 조건식에 대해 수행하는 테스트 커버리지
  • 결정 커버리지 : 결정 포인트 내의 모든 분기문에 대해 수행하는 테스트 커버리지를 말한다. 
  • 조건/결정 커버리지 : 결정포인트 T/F, 개별조건식 T/F를 가져야 한다. 
  • 변경/조건 커버리지 : 모든 결정 포인트 내의 개별 조건식은 적어도 한 번 T, F를 가져야 한다. 
  • 다중 조건 커버리지 : 결정 포인트 내 모든 개별 조건식의 가능한 조합을 100% 보장해야 한다. 

 


05. 소프트웨어 테스트 기법 중 소프트웨어의 기능이 완전히 작동하는 것을 입증하는 테스트로, 동치분할/경계값 분석을 이용하여 테스트 하는 기법을 쓰시오.

: 블랙박스 테스트

 

* 블랙박스 테스트

  • 동등 분할 기법 : 입력 자료에 초점을 맞춰 테스트 케이스를 만들어 검사하는 방법
  • 경곗값 분석 : 입력 조건의 경계값을 테스트 케이스로 선정하는 방법
  • 원인-효과 그래프 검사 : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법 
  • 오류 예측 검사 : 과거의 경험이나 테스터의 감각으로 테스트 하는 기법
  • 비교 검사 : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법 

 


06. <학생> 테이블에 '주소' 컬럼을 추가하는 SQL문을 완성하는 빈 칸 ①, ②에 알맞은 예약어를 쓰시오.

( ① ) TABLE 학생 ( ② ) 주소 VARCHAR(20);
: ① ALTER , ② ADD

 

* ALTER

  • 속성 추가 : ALTER TABLE [테이블명] ADD [속성명][데이터타입];
  • 속성 변경 : ALTER TABLE [테이블명] MODIFY [속성명][데이터타입];
  • 속성 삭제 : ALTER TABLE [테이블명] DROP [속성명];

 


07. <성적> 테이블을 대상으로 아래 <요구사항>을 적용하여 결과를 출력하는 SQL문을 작성하시오.

<성적> 테이블

학번 과목 번호 과목 이름 학점 점수
A100 101 데이터베이스 A 95
A101 201 자료구조 B 80
A102 101 데이터베이스 A 99
A103 201 자료구조 B 88
A104 201 자료구조 C 79
 
 
<요구사항>
  1. <성적> 테이블에서 과목별 평균 점수가 90점 이상인 과목이름, 최소 점수, 최대 점수를 출력하시오.
  2. WHERE 구문은 하지 않는다.
  3. GROUP BY, HAVING을 이용한다.
  4. 최소 점수, 최대 점수 별칭을 위해 AS문을 이용한다.
  5. 명령문의 종결 문자인 세미콜론(;)은 생략 가능합니다.
: SELECT 과목이름, MIN(점수) AS 최소점수 , MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90

 

* SELECT(검색문)

SELECT (DISTINCT) 속성_이름
FROM 테이블_이름
(WHERE 조건)
(GROUP BY 속성_이름
    (HAVING 그룹조건))
(ORDER BY 속성_이름 (ASC/DESC))
  • DISTINCT : 검색 결과에 중복되는 값이 있는 경우 한 번만 표현하도록 하는 옵션이며, 생략 시 중복된 값이 모두 표시된다. 
  • HAVING 그룹조건 : GROUP BY에 의해 그룹으로 분류를 한 후 조건을 제시할 때 사용된다. 
  • ASC : 오름차순(작은 값에서 큰 값)으로 정렬할 때 사용되는 옵션이다. 기본 옵션이다. 
  • DESC : 내림차순(큰 값에서 작은 값)으로 정렬할 때 사용되는 옵션이다. 

08. <학생> 테이블에서 이름이 '민수'인 학생 튜플을 삭제하는 SQL문을 작성하시오. (단, 다음의 요구사항을 참고하여 작성하시오.)

<요구사항>
  1. 이름 속성의 데이터는 문자형이다. 문자형 데이터는 작은 따옴표(')로 표시하시오.
  2. SQL명령문은 대/소문자를 구분하지 않는다.
  3. SQL명령문의 종결 문자인 세미콜론(;)은 생략 가능합니다.
: DELETE FROM 학생 WHERE 이름='민수';

 

* DELETE(삭제문)

DELETE FROM 테이블_이름
(WHERE 조건);
  • 테이블의 자료(행)을 삭제할 경우 사용하는 명령문이다. 
  • WHERE 절의 조건에 맞는 행만 삭제되며, WHERE절이 생랸된 경우 모든 행이 삭제되어 빈 테이블이 된다. 

 


09. 데이터베이스 스키마(Schema)에 대해 간략히 서술하시오.

: 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술하고 정의한 것이다.

 

* 데이터베이스 구조(스키마)

스키마의 구조
  • 스키마는 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술·정의한 것을 말하며, 스킴(Scheme)이라고도 한다. 
  • 스키마의 종류
    • 내부 스키마(Internal Schema) : 물리적 저장 장치 관점(기계 관점)에서 본 데이터베이스의 물리적 구조
    • 개념 스키마(conceptual Schema) : 논리적 관점(사용자 관점에서 본 전체적인 데이터 구조
    • 외부 스키마(External Schema) : 전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조를 말하며, 서브 스키마라고도 함  

 


10. 다음에서 설명하는 관계 대수 연산의 기호를 쓰시오

릴레이션 A에서 릴레이션 B의 모든 조건을 만족하는 튜플을 제외한 후 프로젝션하는 연산자이다.
: DIVISION(÷)

 

* 관계 대수(Relational Algebra) : 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적인 방법 

구분 연산자 기호 의미
순수
관계
연산자
Select σ 조건에 맞는 튜플을 구하는 수평적 연산
Project π 속성 리스트로 주어진 속성만 구하는 수직적 연산
Join 공통 속성을 기준으로 두 릴레이션을 합하여 새로운 릴레이션을 만드는 연산
Division ÷ 두 릴레이션 A, B에 대해 B 릴레이션의 모든 조건을 만족하는 튜플들을 릴레이션 A에서 분리해 내어 프로젝션하는 연산
일반
집합
연산자
합집합 두 릴레이션의 튜플의 합집합을 구하는 연산
교집합 두 릴레이션의 튜플의 교집합을 구하는 연산
차집합 - 두 릴레이션의 튜플의 차집합을 구하는 연산
교차곱 × 두 릴레이션의 튜플들의 교차곱(순서쌍)을 구하는 연산

 

 


11. 다음 설명에 해당하는 라우팅 프로토콜을 쓰시오.

  • 최단 경로 탐색에 다익스트라 알고리즘기반 방식 사용
  • 최적 경로 선택을 위해 흡수, 대역폭, 지연시간 등을 고려
  • 링크상태 변화시에만 라우팅정보전
: OSPF

 

* OSPF(Open Shortest Path First protocol)

  • 링크 상태 라우팅 프로토콜로 IP 패킷에서 프로토콜 번호 89번을 사용하여 라우팅 정보를 전송하여 안정되고 다양한 기능으로 가장 많이 사용되는 IGP(Interior Gateway Protocol, 내부 라우팅 프로토콜)이다. 
  • OSPF 라우터는 자신의 경로 테이블에 대한 정보를 LSA라는 자료구조를 통하여 주기적으로 혹은 라우터의 상태가 변화되었을 때 전송한다. 
  • 라우터 간에 변경된 최소한의 부분만을 교환하므로 망의 효율을 저하시키지 않는다. 
  • 도메인 내의 라우팅 프로토콜로서 RIP가 가지고 있는 여러 단점을 해결하고 있다. RIP(Routing Information Protocol)의 경우 홉 카운트가 15로 제한되어 있지만 OSPF는 이런 제한이 없다.  

* 라우팅 영역에 따른 분류 

IGP
(Interior Gateway Protocol)
- AS(Autonomous System) 내부 라우터 간 
- RIP, OSPF, IGRP
EGP
(Exterior Gateway Protocol)
- AS(Autonomous System) 외부 라우터 상호간
- EGP, BGP 

 


12. 인터넷 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공하는 프로토콜을 무엇이라고 하는지 영문 약어로 쓰시오.

: ICMP

 

* ICMP(Internet Control Message Protocol)

  • 송신측의 상황과 목적지 노드의 상황을 진단하는 프로토콜이다. 
  • IP 프로토콜에서 오류 보고와 오류 수정 기능, 호스트와 관리 질의를 위한 제어 메시지를 관리를 하는 인터넷 계층(네트워크 계층) 프로토콜이다. 메시지는 하위 계층으로 가기 전에 IP 프로토콜 데이터그램 내에 캡슐화된다. 
  • 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려주는 프로토콜이다. 
  • ICMP를 사용하는 명령어는 Ping, Tracert, Echo 등이 있다. 

* OSI 7 참조 모델

OSI 7 단위 주요 장비 TCP / IP  
응용 계층 메시지 게이트웨이 응용 계층 telnet, FTP, HTTP, POP, SMTP
DHCP, SNMP, DNS
표현 계층
세션 계층
전송 계층 세그먼트, 데이터그램 전송 계층 TCP, UDP
네트워크 계층  패킷 라우터 인터넷 계층 IP, ARP, RARP, ICMP, IGMP
데이터링크 계층 프레임 브리지, 스위치 링크 계층 Ethernet, IEEE 802
물리 계층 비트 허브, 리피터

 


13. 헝가리안 표기법에 대해 간략히 설명하시오.

: 프로그래밍 언어에서 변수 및 함수의 인자 이름 앞에 데이터 타입을 명시하는 코딩 규칙

 

* 헝가리안 표기법

  • 컴퓨터 프로그래밍의 변수명, 함수명 등의 식별자 일믕르 작성할 때 데이터 타입의 정보를 이름 접두어로 지정하는 코딩의 규칙이다. 
  • 예를 들어 인덱스 역할을 하는 int형 변수명을 iNum으로 문자열 변수명을 strName으로 이름을 지정하는 표기법이다. 

14. 리팩토링(Refactoring)의 목적에 대해 간략히 설명하시오.

: 성능향상을 위해 결과의 변경 없이 코드의 구조를 재조정한다.

 

* 리팩토링(Refactoring)

  • 오류를 제거하고 새로운 기능을 추가하는 것이 아니라 결과의 변경 없이 프로그램 소스의 구조를 재조정하는 것이다. 
  • 단순히 코딩 스타일만 개선하는 것이 아니라 성능과 코드의 구조를 개선하는 과정을 의미한다. 
  • 리팩토링의 목적은 가독성을 높이고 유지보수의 편리성을 높이는 것이다. 
  • 리팩토링을 통해 소프트웨어를 쉽게 이해할 수 있고 버그를 빨리 찾을 수 있다. 
  • 리팩토링은 프로그램을 빨리 작성할 수 있도록 도와준다. 
  • 리팩토링의 목적은 겉으로 보이는 소프트웨어의 기능을 변경하지 않고 내부 구조만 변경하여 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것이다.  
  • 리팩토링은 Delete(제거), Extract(추출), Move(이동), Merge(병합), Replace(전환) 등의 방법을 통해 프로그램을 보다 최적의 상태로 만들기 위해 수행한다. 
  • 리팩토링은 소프트웨어의 디자인을 개선하기 위해 수행한다. 

15. 빈 칸 안에 공통으로 들어갈 가장 적합한 용어를 쓰시오.

심리학자 톰 마릴은 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인하며, 도착하지 않았을 경우 메시지를 재전송하는 일련의 방법을 가리켜 '기술적 은어'라는 뜻으로 (      )(이)라 불렀다.
: 프로토콜

 

* 프로토콜(Protocol)

  • 둘 이상의 컴퓨터 사이에 데이터 전송을 할 수 있도록 미리 정보의 송·수신 측에서 정해둔 통신 규칙이다. 
  • 프로토콜의 기본 요소는 구문, 의미, 타이밍이다. 
구문(Syntax) 전송 데이터의 형식, 부호화, 신호 레벨 등을 규정함
의미(Semantic) 전송 제어와 오류 관리를 위한 제어 정보를 포함함
타이밍(Timing) 두 개체 간에 통신 속도를 조정하거나 메세지의 전송 및 순서도에 대한 특성을 가리킴

 


16. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

void main() {
  int i = 0, c = 0;
  while (i<10)){
    i++;
    c *= i;
  }
  printf("%d", c);
}
 
: 0 (c=c*i)

 

  • 변수 i가 변수 c에 누승 계산되는 프로그램으로 변수 i의 값은 1부터 10까지의 정수이며 변수 c에 누적되어 곱해지게 된다. 
  • 누승 변수 c의 초깃값은 일반적으로 1로 설정되어야 정확한 누승 처리가 이루어진다. 
  • 하지만 위 문제의 경우 c=0으로 누승 변수에 초깃값이 0이었기 때문에 1부터 10까지 곱하더라도 결과는 0이 출력된다. 

17. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

int r1(){
  return 4;
}
int r10(){
  return (30 + r1());
}
int r100(){
  return (200 + r10());
}
void main(){
  printf("%d", r100(());
}
 
: 234 (200+30+4)

 

  • 해당 문제는 C언어의 사용자 정의 함수를 정의한 후 호출 후 반환까지의 제어의 순서를 평가하기 위한 문제이다. 
  • C언어 프로그램의 실행의 순서는 main() 함수부터 시작을 한다.
  • 위 프로그램의 함수의 호출 순서는 main() → r100()  → r10()  → r1() 순으로 연쇄적으로 호출이 이루어지고 반환문인 return문에 의해 반환값과 함께 제어가 최종 main() 함수에서 종료된다.  

 


18. 다음은 JAVA로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

public static void main(String[] args) {
  int i = 0;
  int sum = 0;
  while ( i < 10 ) {
    i++;
    if( i % 2 == 1 ) 
      countinue;
    sum += i;
  }
  System.out.print(sum);
}
 
: 30 (2+4+6+8+10)

 

해당 프로그램은 1부터 10까지의 정수 중에서 2로 나눈 나머지가 1이 아닌 즉, 2의 배수인 짝수를 변수 sum에 누적하여 더하는 프로그램이다. 

 


19. 다음은 JAVA로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

abstract class Vehicle {
  String name;
  public Vehicle(String val){
    this.name = val;
  }
  public String getName(){
    return "Vehicle name = " + name;
  }
}
class Car extends Vehicle {
  private String name;
  public Car(String val){ // 생성자
    name = super.name = val;
  }
  public String getName(String val){ // 오버로딩
    return "Car name = " + val;
  }
  public String getName(byte val[]){  // 오버로딩
    return "Car name = " + val;
  }
}

Vehicle obj = new Car("Spark");
System.out.println(obj.getName());
 
: Vehicle name = Spark

 

  • Vehicle 클래스는 추상 메소드를 포함하는 추상 클래스로 상속 상황에서의 부모 클래스로 정의되어 있으며, Car 클래스는 Vehicle 클래스를 상속받는 자식 클래스이며 부모의 추상 메소드를 오버라이딩하여 정의되었다. 
  • main() 메소드에서는 new Car("Spark");를 통해 자식 객체를 생성한 후, 매개변수 "Spark"를 갖는 자식 생성자를 자동호출하였다. public Car(String val) 생성자에서는 super(val);를 통해 부모의 매개변수 생성자를 통해 name 멤버의 값을 "Spark"로 초기화하였다. 
  • 생성된 자식 객체는 부모 클래스의 형으로 형 변환되는 업 캐스팅(Up-casting)을 묵시적으로 수행하였다. obj.getName()을 통해 호출하면 상속받은 public String getName()를 호출하게 되어 메소드 내부의 "Vehicle name : "+name의 반환문을 수행하게 된다. 문자열 결합에 의해 "Vehicle name : Spark" 문자열 상수가 반환된 후 main() 메소드 내에서 출력되며 프로그램이 종료된다. 

 


20. C++에서 생성자(Constructor)에 대해 간략히 설명하시오.

: 생성자는 객체 생성 시 자동으로 호출되는 메서드로 멤버를 초기화하는 목적으로 주로 사용된다.

 

생성자
(Constructor)
  • 클래스의 객체가 인스턴스화될 때 자동으로 호출되는 멤버함수이다. 
  • 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는 데 필요한 사전 설정하는 기능을 한다. 
  • 생성자의 특징
    • 객체 생성 시 최초 한 번만 자동호출된다. 
    • 생성자의 이름은 클래스 이름과 같다. 
    • 반환형(Return type)은 선언되지 않는다. 
    • 오버로딩(Overloading)이 가능하다. 
    • 매개변수의 디폴트 값을 설정 가능하다. 
    • 정의하지 않으면 기본 생성자를 제공한다. 
소멸자
(Destructor)
  • 객체가 소멸될 때 자동으로 호출되는 멤버함수이다. 
  • 소멸자는 동적 메모리(Heap Memory)에 생성된 객체를 제거하기 위한 작업 수행 시 활용한다. 
  • 소멸자의 특징
    • 객체 소멸 시 최초 한 번만 자동호출된다. 
    • 소멸자의 이름은 ~클래스 이름과 같다. 
    • 반환형(Return type)은 선언되지 않는다. 
    • 오버로딩(Overloading) 불가능하며 클래스에 단 하나 존재한다. 
    • 정의하지 않으면 기본 소멸자를 제공한다. 

 


해설은 유투브 흥달쌤 강의와, 이기적 실기 기본서를 참고하였습니다 :)

https://youtu.be/eBu65lFAyjo?si=vpKhDJzjRu7lQK-M

728x90
반응형