2020년 5급 공채 기술 2차 소프트웨어공학
문제 4개 · 100점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.
제1문 (20점)
다음 요구사항을 읽고 물음에 답하시오. (총 20점)
전염병에 대한 다양한 정보의 효과적 관리와 대국민 정보제공 서비스를 위하여 전염병 정보시스템을 구축하고자 한다. 이 시스템은 전자정부 프레임워크를 사용해서 개발하여야 한다. 시스템의 사용자는 관리자와 일반 사용자로 구성되며, 일반 사용자 중 원하는 경우 회원가입을 통해 회원이 될 수 있다. 회원가입을 위해 외부의 실명인증 시스템을 통해 실명인증을 수행한다. 실명인증에 사용되는 일반 사용자의 개인정보는 외부에 유출되지 않도록 해야 한다.
관리자는 시스템의 전염병 정보관리 및 분류체계관리, 회원관리를 할 수 있다. 전염병 정보에 대한 조회 및 검색은 관리자뿐만 아니라 회원과 회원이 아닌 일반 사용자도 사용할 수 있으며, 초보자도 쉽게 사용할 수 있도록 사용자 인터페이스(User Interface)를 구성해야 한다. 전염병 정보 조회는 전염병 목록 조회를 하거나 검색을 통해 해당 전염병에 대한 상세 정보를 조회할 수 있다. 검색은 검색어 입력을 통해 제공되며 평균 1.5초 이내 응답시간이 보장되어야 한다.
관리자는 시스템의 전염병 정보관리 및 분류체계관리, 회원관리를 할 수 있다. 전염병 정보에 대한 조회 및 검색은 관리자뿐만 아니라 회원과 회원이 아닌 일반 사용자도 사용할 수 있으며, 초보자도 쉽게 사용할 수 있도록 사용자 인터페이스(User Interface)를 구성해야 한다. 전염병 정보 조회는 전염병 목록 조회를 하거나 검색을 통해 해당 전염병에 대한 상세 정보를 조회할 수 있다. 검색은 검색어 입력을 통해 제공되며 평균 1.5초 이내 응답시간이 보장되어야 한다.
- (1) 위의 요구사항 중 비기능적 요구사항을 찾으시오. (5점)
- (2) Use Case Diagram을 작성하시오. (15점)
제2문 (35점)
다음은 GoF(Gang of Four) 설계 패턴 중 하나를 적용한 클래스 다이어그램이다. 물음에 답하시오. (총 35점)
[그림]
[그림]
- (1) 위 클래스 다이어그램이 나타내고 있는 설계 패턴의 이름을 쓰시오.(단, 해당 패턴은 행위(Behavior) 목적을 가진 것으로 가정한다) (5점)
- (2) 1)의 패턴의 특성을 설명할 수 있는 예시를 객체 다이어그램으로 표현하고, 그 패턴의 장점을 간략히 설명하시오. (5점)
- (3) 위 클래스 다이어그램을 확장하여 각 게임 캐릭터(GameCharacter)가 검(Sword), 도끼(Axe), 활(Bow) 등의 무기(Weapon)를 중복해서 장착할 수 있다. 예를 들어 어떤 King 객체는 검 2개, 활 1개를 가지고 있다. 어떤 Soldier 객체는 무기를 하나도 가지지 않고, 또 다른 King 객체는 도끼 3개, 활 2개를 가지고 있다. 해당 설계를 위해 장식자(Decorator) 패턴을 적용한 결과를 클래스 다이어그램으로 나타내시오. (15점)
- (4) 3)의 결과를 기반으로 다음과 같은 객체를 만들어내는 코드를 C++ 혹은 Java 언어로 표현하시오. (10점)○검 1개를 가지고 있는 King 객체
○도끼 1개, 활 1개, 검 2개를 가지고 있는 Soldier 객체
제3문 (25점)
UML 상태(State Machine) 다이어그램에 관한 다음 물음에 답하시오. (총 25점)
- (1) A와 같이 동작하는 도어락 설계를 위한 미완성 상태 다이어그램 B를 완성하시오. (15점)
A <입력 버튼> <이벤트(trigger event)>
○Digit(d):숫자버튼을 누른 이벤트
(d는 해당 버튼의 숫자 정수값)
○Star():* 버튼을 누른 이벤트
<효과(effect)>
○Unlock():잠금 해제
○Fail():실패[그림] <도어락 동작>
○초기상태에서 시작
○비밀번호를 정확히 입력하고 * 버튼을 누르면 Unlock()을 실행하고 종료상태로 전이
○비밀번호의 길이 또는 숫자가 일치하지 않는 경우 * 버튼을 누르면 Fail()을 실행하고 종료상태로 전이
<사용하는 변수>
○key[]:비밀번호가 저장되어 있는 정수 배열(읽기전용)
○key.length:비밀번호 배열 길이(읽기전용)예: key[]={1, 2, 3, 4}일 때 key.length는 4
○n:숫자버튼을 누른 횟수(읽기와 쓰기 가능)
<사용하는 연산>
○대입연산(=), 산술연산(+, - 등), 비교연산(==, != 등), 배열원소 접근(예: key[n]) 등 필요한 연산은 Java 문법을 이용함예: key[]={1, 2, 3, 4}일 때 key.length는 4 B [그림] - (2) 시작상태에서 종료상태에 도달하는 모든 경우의 과정을 기술하시오. (10점)
[그림]
제4문 (20점)
다음 프로그램을 테스트 하고자 한다. 물음에 답하시오. (총 20점)
void func(BOOL a, BOOL b, BOOL c) {
1: if (a) print("A");
2: if (b) print("B");
3: if (c) print("C");
}
1: if (a) print("A");
2: if (b) print("B");
3: if (c) print("C");
}
- (1) 문장 커버리지(Statement Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)
- (2) 분기 커버리지(Branch Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)
- (3) 흐름 그래프(Flow Graph)를 작성하시오. (5점)
- (4) 경로 커버리지(Path Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)