포스트

2020 3회

Q. 리팩토링의 목적에 대해서 서술하시오.

리팩토링의 목적에는 복잡한 코드의 단순화, 소스의 가독성을 위해 유지보수성 향상, 생산성 향상, 품질 향상이 있다.

  • 리팩토링은 소프트웨어 모듈의 외부적 기능은 수정하지 않고 내부적으로 구조, 관계 등을 단순화하여 소프트웨어의 유지보수성을 향상시키는 기법이다.
  • 리팩토리의 목적은 다음과 같다.
    • 유지보수성 향상
      • 복잡한 코드의 단순화, 소스의 가독성 향상
    • 유연한 시스템
      • 소프트웨어 요구사항 변경에 유연한 대응
    • 생산성 향상
      • 정제 및 최적화된 소스의 재사용
    • 품질 향상
      • 소프트웨어 오류발견이 용이하여 품질향상

Q. 다음은 C언어 소스코드이다. 출력 결과를 쓰시오.

0

1
2
3
4
5
6
7
8
9
#include <stdio.h>
void main() {
	int i=0, c=0;
	while(i < 10) {
		i++;
		c*=i;	
	}
	printf("%d", c);
}
  • c는 이미 0이므로 어떤 값을 곱해도 0이 된다.

Q. 대표적인 내부 라우팅 프로토콜로 다익스트라 알고리즘을 이용한 대규모 네트워크에 적합한 링크 상태 라우팅 프로토콜로도 불리는 라우팅 프로토콜은 무엇인가?

OSPF(Open Shortest Path First)

  • 대표적인 내부 라우팅 프로토콜로 다익스트라 알고리즘을 이용한 대규모 네트워크에 적합한 링크 상태 라우팅 프로토콜로 불리는 라우팅 프로토콜은 OSPF이다.
  • OSPF의 특징은 다음과 같다.
    • 다익스트라 알고리즘 사용
      • 다익스트라 알고리즘을 사용하는 내부 라우팅 프로토콜
      • 링크 상태 라우팅 기반 메트릭 정보를 한 지역(Area) 내 모든 라우터에 변경이 발생했을 때만 보내(Flooding)고 라우팅 테이블을 구성∙계산
    • 라우팅 메트릭 지정
      • 최소 지연, 최대 처리량 등 관리자가 라우팅 메트릭 지정
    • AS 분할 사용
      • 자치 시스템을 지역(Area)으로 나누어 라우팅을 효과적으로 관리
    • 홉 카운트 무제한
      • 홉 카운트에 제한이 없다.

Q. 형상 통제를 설명하시오.

형상 통제는 형상 항목의 버전 관리를 위해서 변경 여부와 변경 활동을 통제하는 활동이다.

  • 형상 통제는 형상 항목의 형상 관리를 위해 형상통제위원회(CCB)를 운영하며, 소프트웨어 변경의 요구, 평가, 승인이 이루어진다.
  • 형상 관리의 절차는 다음과 같다.
    • 형상 식별
      • 형상 관리 대상을 정의 및 식별하는 활동
      • 추적성 부여를 위해 ID와 관리번호를 부여
      • 변경 관련 이슈 발생 시 ID와 관리번호를 이용하여 추적
    • 형상 통제
      • 형상 항복의 버전 관리를 위한 형상통제위원회 운영
      • 변경 요구 관리, 변경제어, 형상 관리 등 통제 지원
      • 베이스라인에 대한 관리 및 형상 통제 수행 가능
    • 형상 감사
      • 소프트웨어 베이스라인의 무결성 평가
      • 베이스라인 변경 시 요구사항과 일치 여부 검토
    • 형상 기록
      • 소프트웨어 형상 및 변경관리에 대한 각종 수행결과를 기록
      • 형상결과 보고서 작성

Q. 심리학자 톰 마릴은 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인하며, 도착하지 않았을 경우 메시지를 재전송하는 일련의 방법을 ‘기술적 은어’를 뜻하는 ()이라는 용어로 정의했다. () 안에 들어갈 용어를 쓰시오.

프로토콜(Protocol)

  • 프로토콜은 서로 다른 시스템이나 기기들 간의 데이터 교환을 원활히 하기 위한 표준화된 통신규약이다.
  • 심리학자 톰 마릴은 심리학자 톰 마릴은 컴퓨터가 메시지를 전달하고, 메시지가 제대로 도착했는지 확인하며, 도착하지 않았을 경우 메시지를 재전송하는 일련의 방법을 ‘기술적 은어’로 프로토콜이라고 정의했다.
  • 통신을 위해 프로토콜이 가져야 하는 일반적인 기능에는 데이터 처리 기능, 제어 기능, 관리적 기능이 있다.

Q. TCP/IP에서 오류가 발생하면 () 메시지를 보내서 오류가 발생했음을 알린다. () 안에 들어갈 용어를 쓰시오.

ICMP(Internet Control Message Protocol)

  • ICMP는 IP 패킷을 처리할 때 발생하는 문제를 알려주는 프로토콜로, 메시지 형식은 8바이트의 헤더와 가변 길이의 데이터 영역으로 분리되어 있다.
  • 수신지 도달 불가 메시지는 수신지 또는 서비스에 도달할 수 없는 호스트를 통지하는 데 사용한다.
  • ICMP 프로토콜을 사용해서 ping 유틸리티의 구현을 통해 오류가 발생했음을 알리는 기능을 수행한다.

Q. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.

1234561, 124567 또는 1234567, 124561

이미지

  • 결정 커버리지는 (각 분기의)결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과를 수행해야 하기 때문에 첫 번째 분기문도 참, 거짓이 한 번씩 와야 하고, 두 번째 분기도 참, 거짓이 한 번씩 와야 한다.

Q. 다음 조건을 만족하면서 과목별 점수의 평균이 90 이상인 과목이름, 최소점수, 최대점수를 구하는 SQL문을 작성하시오.

1
2
3
4
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름
HAVING AVG(점수) >= 90;
  • 대소문자를 구분하지 않는다.
  • WHERE 구문을 사용하지 않는다.
  • GROUP BY, HAVING 구문을 반드시 사용한다.
  • 세미콜론(;)은 생략 가능하다.
  • 별칭(AS)를 사용해야 한다.

[성적]

과목코드과목이름학점점수
1000컴퓨터과학A+95
2000운영체제B+85
1000컴퓨터과학B+85
2000운영체제B80

[결과]

과목이름최소점수최대점수
컴퓨터과학8595

Q. 학생 테이블에서 이름이 민수인 튜플을 삭제하는 SQL 문을 작성하시오.

1
DELETE FROM 학생 WHERE 이름 = '민수';

이미지


Q. 릴레이션 A, B가 있을 때 릴레이션 B 조건에 맞는 것들만 릴레이션 A에서 튜플을 꺼내 프로젝션하는 관계 대수의 기호는 무엇인가?

÷

  • 순수 관계 연산자는 다음과 같다.
  • 셀렉트(σ) / 프로젝트(π) / 조인(⋈) / 디비전(÷)
    • 셀렉트(Select)
      • σ 조건(R)
      • 릴레이션 R에서 조건을 만족하는 튜플 반환
    • 프로젝트(Project)
      • π속성리스트(R)
      • 릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플 반환
      • 연산 결과에 중복 발생 시 중복 제거
    • 조인(Join)
      • R ⋈ S
      • 공통 속성을 이용해 R과 S의 튜플들을 연결해 만들어진 튜플 반환
    • 디비전(Division)
      • R ÷ S
      • 릴레이션 S의 모든 튜플과 관련 있는 R의 튜플을 반환

Q. 다음 중 헝가리안 표기법(Hungarian Case)에 대해서 서술하시오.

헝가리안 표기법은 식별자 표기 시 접두어에 자료형을 붙이는 표기법이다.

  • 식별자 표기법은 다음과 같다.
    • 카멜 표기법(Camel Case)
      • 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫글자는 대문자로 지정하는 표기법
      • 예: inputFunction
    • 스네이크 표기법(Snake Case)
      • 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더 바를 넣는 표기법
      • 예: input_function
    • 파스칼 표기법(Pascal Case)
      • 식별자 표기 시에 여러 단어가 이러지면 각 단어의 첫글자는 대문자로 지정하는 표기법
      • InputFunction
    • 헝가리안 표기법(Hungarian Case)
      • 식별자 표기 시 두어에 자료형을 붙이는 방법
      • 식별자 표기 시 int형일 경우 n, char형일 경우 c, 문자열일 경우 sz를 붙임
      • nScore → 정수형

Q. 테스트의 종류 중, 동치분할 테스트, 경계값 분석 테스트 등의 종류가 있는 테스트 기법을 쓰시오.

블랙박스 테스트(명세 기반 테스트)

  • 블랙박스 테스트, 명세 기반 테스트(기능 위주)
    • 동적 테스트(프로그램을 실제로 실행하며 오류를 찾는 테스트 방법), 단위 테스트
    • 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로 기능 테스트라고 불림
    • 사용자의 요구사항 명세를 보면서 테스트함
    • 주로 구현된 기능을 테스트함
    • 소프트웨어 인터페이스를 통해 실시됨
      • 동치 분할 검사, 동등 분할 기법 Equivalence Partitioning Testing
        • 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법
        • 입력조건에 유효 값, 무효 값을 균등하게 하여 테스트 케이스를 설계하는 방법
        • 데이터 영역에 가까운 값이 아닌 영역 내에 있는 일반 값들로 테스트
      • 경계값 분석 Boundary Value Analysis
        • 입력 자료에만 치중한 동치 분할 기법을 보완한 기법
        • 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
      • 원인-효과 그래프 검사 Cause-Effect Graphing Testing
        • 입력 데이터 간의 관계와 출력에 영향을 미치는 영향을 분석해서 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
      • 오류 예측 검사, 데이터 확인 검사 Error Guessing
        • 과거의 경험이나 확인자의 감각으로 테스트하는 기법으로, 다른 블랙박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법
      • 비교 검사 Comparison Testing
        • 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
  • 화이트박스 테스트, 구조 기반 테스트(복잡도 위주)
    • 화이트박스 테스트는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법임
    • 화이트박스 테스트는 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용됨
    • 모듈 안의 작동을 직접 관찰함
    • 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행됨
    • 프로그램의 제어 구조에 따라 선택, 반복등의 분기점 부분들을 수행함으로써 논리적 경로를 제어함
      • 기초 경로 검사 Base Path Testing
        • 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
      • 제어 구조 검사 Control Structure Testing
        • 조건 검사 Condition Testing
          • 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
        • 루프 검사 Loop Testing
          • 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
        • 데이터 흐름 검사 Data Flow Testing
          • 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법

Q. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

234

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <studio.h>
int r1(){
	return 4;
}
int r10(){
	return (30+r1());
}
int r100(){
	return (200+r10());
}
int main(){
	printf("%d\n", r100());
    return 0;
}

Q. DB스키마에 대해서 서술하시오.

DB 스키마는 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조이다.

  • 스키마는 데이터 정의어(DDL)의 대상이 되는 객체로서, DDL의 대상은 다음과 같다.
    • 도메인(Domain)
      • 하나의 속성이 가질 수 있는 원자값들의 집합
      • 속성의 데이터 타입과 크기, 제약조건 등의 정보
    • 스키마(Schema)
      • 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조
      • 스키마는 외부/개념/내부 3계층으로 구성되어 있음
      • 외부 스키마(External Schema)
        • 사용자나 개발자 관점에서 필요로 하는 데이터베이스의 논리적 구조
        • 사용자 뷰를 나타냄
        • 서브 스키마로 불림
      • 개념 스키마(Conceptual Schema)
        • 데이터베이스의 전체적인 논리적 구조
        • 전체적인 뷰를 나타냄
        • 개체 간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의
      • 내부 스키마(Internal Schema)
        • 물리적 저장장치의 관점에서 보는 데이터베이스 구조
        • 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 표현
    • 테이블(Table)
      • 데이터 저장 공간
    • 뷰(View)
      • 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
    • 인덱스(Index)
      • 검색을 빠르게 하기 위한 데이터 구조

Q. 다음은 자바 코드이다. 출력 결과를 쓰시오.

Vehicle name: Spark

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
abstract class Vehicle {
	private String name;
	abstract public String getName(String val);
	public String getName() {
		return "Vehicle name:" + name;
	}
	public void setName(String val) {
		name = val;
	}
}
class Car extends Vehicle {
	public Car(String val){
		setName(val);
	}
	public String getName(String val){
		return "Car name : " + val;
	}
	public String getName(byte val[]){
		return "Car name : " + val;
	}
}

public class Soojebi {
	public Static void main(String[] args) {
	Vehicle obj = new Car("Spark");
	System.out.print(obj.getName());
	}
}
  • setName은 Vehicle 클래스에 있으므로 Vehicle 클래스의 setName 메서드에 “Spark” 값을 전달한다.
  • setName 함수에서 매개변수로 받은 “Spark”를 name이라는 변수에 저장한다.
  • main 함수에 있는 System.out.print(obj.getName());을 실행하게 되는데, getName에 파라미터가 없으므로 부모 클래스의 getName() 메서드를 실행하게 되고, Vehicle의 getName에 있는 “Vehicle name: ” + name;을 반환받는다.
  • 여기서 name은 이미 new Car(”Spark”)라는 생성자에 의해서 “Spark”라는 값이 대입이 되었기 때문에 getName에서는 “Vehicle name: ” + “Spark” 즉, “Vehicle name: Spark”를 받게 된다.
  • getName에서 반환받은 “Vehicle name: Spark”를 System.out.println 함수를 이용하여 출력하게 된다.

Q. UI 설계 원칙 중 직관성에 대해서 쓰시오.

직관성은 누구나 쉽게 이해하고, 사용할 수 있어야 하고 쉬운 검색, 쉬운 사용성, 일관성의 부특성을 가지고 있는 UI 설계 웥칙이다.

  • UI 설계 원칙은 다음과 같다.
설계 원칙설명
직관성(Intuitiveness)누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 함
유효성(Efficiency)정확하고 완벽하게 사용자의 목표를 달성될 수 있도록 제작
학습성(Learnability)초보와 숙련자 모두가 쉽게 배우고 사용할 수 있게 제작
유연성(Flexibility)사용자의 인터랙션을 최대한 포용하고, 실수를 방지할 수 있도록 제작

Q. 다음은 자바 코드이다. 출력 결과를 쓰시오.

30

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Soojebi {
	public static void main(String[] args) {
	int i=0;
	int sum=0;
	while (i<10) { 
		i++;
		if(i%2 == 1)
			continue;
		sum += i;
	}
	System.out.println(sum);
	}
}
  • i가 2, 4, 6, 8, 10일 때 sum += i;를 실행하게 되므로 2+4+6+8+10=30이 출력된다.

Q. EAI 유형에는 메세지 버스(Message bus), 하이브리드(Hybrid), (   ①  ), (   ②   ) 4가지가 있다.

포인트 투 포인트(Point to Point), 허브 앤 스포크(Hub & Spoke)

  • EAI(기업 내외부 정보시스템 통합)의 구축 유형은 다음과 같다. [포허메하]
    • 포인트 투 포인트(Point-to-Point)
      • 가장 기초적인 애플리케이션 통합방법으로 1 : 1 단순 통합방법
    • 허브 앤 스포크(Hub & Spoke)
      • 단일한 접점의 허브시스템을 통해 데이터를 전송하는 중앙 집중 방식
      • 허브 장애 시 전체 장애 발생
    • 메세지 버스(Message Bus)
      • 애플리케이션 사이 미들웨어(버스)를 두어 연계하는 미들웨어 통합 방식
      • 뛰어난 확장성과 대용량 데이터 처리 가능
    • 하이브리드(Hybrid)
      • 그룹 내부는 허브 앤 스포크 방식을 이용하고, 그룹 간에는 메시지 버스 방식을 사용하는 통합 방식

Q. C++에서 생성자란 무엇인지 쓰시오.

생성자는 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드이다.

  • 생성자는 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는 데 필요한 설정이 필요한 경우 사용한다.
  • C++, 자바에서는 클래스 명과 동일한 메서드 명을 가지고, 반환 값이 없다.
  • 파이썬에서는 _init_이라는 메서드 명을 사용하고, 첫 번째 매개변수로 self를 적어주며, 반환 값이 없다.
    • C++에서 사용하는 생성자
    1
    2
    3
    4
    5
    6
    
      class 클래스명 {
      public:
      	클래스명(데이터_타입 변수명, ...) {
      		명령어;
      	}
      };
    
    • 자바에서 사용하는 생성자
    1
    2
    3
    4
    5
    
      public class 클래스명 {
      	public 클래스명(데이터_타입 변수명, ...) {
      		명령어;
      	}
      }
    
    • 파이썬에서 사용하는 생성자
    1
    2
    3
    
      class 클래스명:
      	def __init__(self, 변수명, ...) :
      		명령어
    

Q. 학생 테이블에 주소 속성을 추가하는 SQL문을 작성하시오.

ALTER, ADD

(  ①  ) TABLE 학생  (  ②  ) 주소 VARCHAR(20);

  • ALTER는 테이블에 필요한 컬럼을 추가하는 문법이다.
  • ALTER 테이블 관련 문법은 다음과 같다.
구분문법
컬럼 추가ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];
컬럼 수정ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건];
컬럼 삭제ALTER TABLE 테이블명 DROP 컬럼명;
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.