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 | 운영체제 | B | 80 |
[결과]
과목이름 | 최소점수 | 최대점수 |
---|---|---|
컴퓨터과학 | 85 | 95 |
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의 튜플을 반환
- 셀렉트(Select)
Q. 다음 중 헝가리안 표기법(Hungarian Case)에 대해서 서술하시오.
헝가리안 표기법은 식별자 표기 시 접두어에 자료형을 붙이는 표기법이다.
- 식별자 표기법은 다음과 같다.
- 카멜 표기법(Camel Case)
- 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫글자는 대문자로 지정하는 표기법
- 예: inputFunction
- 스네이크 표기법(Snake Case)
- 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더 바를 넣는 표기법
- 예: input_function
- 파스칼 표기법(Pascal Case)
- 식별자 표기 시에 여러 단어가 이러지면 각 단어의 첫글자는 대문자로 지정하는 표기법
- InputFunction
- 헝가리안 표기법(Hungarian Case)
- 식별자 표기 시 두어에 자료형을 붙이는 방법
- 식별자 표기 시 int형일 경우 n, char형일 경우 c, 문자열일 경우 sz를 붙임
- nScore → 정수형
- 카멜 표기법(Camel Case)
Q. 테스트의 종류 중, 동치분할 테스트, 경계값 분석 테스트 등의 종류가 있는 테스트 기법을 쓰시오.
블랙박스 테스트(명세 기반 테스트)
- 블랙박스 테스트, 명세 기반 테스트(기능 위주)
- 동적 테스트(프로그램을 실제로 실행하며 오류를 찾는 테스트 방법), 단위 테스트
- 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로 기능 테스트라고 불림
- 사용자의 요구사항 명세를 보면서 테스트함
- 주로 구현된 기능을 테스트함
- 소프트웨어 인터페이스를 통해 실시됨
- 동치 분할 검사, 동등 분할 기법 Equivalence Partitioning Testing
- 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법
- 입력조건에 유효 값, 무효 값을 균등하게 하여 테스트 케이스를 설계하는 방법
- 데이터 영역에 가까운 값이 아닌 영역 내에 있는 일반 값들로 테스트
- 경계값 분석 Boundary Value Analysis
- 입력 자료에만 치중한 동치 분할 기법을 보완한 기법
- 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법
- 원인-효과 그래프 검사 Cause-Effect Graphing Testing
- 입력 데이터 간의 관계와 출력에 영향을 미치는 영향을 분석해서 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
- 오류 예측 검사, 데이터 확인 검사 Error Guessing
- 과거의 경험이나 확인자의 감각으로 테스트하는 기법으로, 다른 블랙박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법
- 비교 검사 Comparison Testing
- 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법
- 동치 분할 검사, 동등 분할 기법 Equivalence Partitioning Testing
- 화이트박스 테스트, 구조 기반 테스트(복잡도 위주)
- 화이트박스 테스트는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법임
- 화이트박스 테스트는 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용됨
- 모듈 안의 작동을 직접 관찰함
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행됨
- 프로그램의 제어 구조에 따라 선택, 반복등의 분기점 부분들을 수행함으로써 논리적 경로를 제어함
- 기초 경로 검사 Base Path Testing
- 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
- 제어 구조 검사 Control Structure Testing
- 조건 검사 Condition Testing
- 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
- 루프 검사 Loop Testing
- 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 데이터 흐름 검사 Data Flow Testing
- 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
- 조건 검사 Condition Testing
- 기초 경로 검사 Base Path 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)
- 검색을 빠르게 하기 위한 데이터 구조
- 도메인(Domain)
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)
- 그룹 내부는 허브 앤 스포크 방식을 이용하고, 그룹 간에는 메시지 버스 방식을 사용하는 통합 방식
- 포인트 투 포인트(Point-to-Point)
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 컬럼명; |