5급 공채 2차

2020년 5급 공채 기술 2차 소프트웨어공학

문제 4개 · 100점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.

제1문 (20점)

다음 요구사항을 읽고 물음에 답하시오. (총 20점)
전염병에 대한 다양한 정보의 효과적 관리와 대국민 정보제공 서비스를 위하여 전염병 정보시스템을 구축하고자 한다. 이 시스템은 전자정부 프레임워크를 사용해서 개발하여야 한다. 시스템의 사용자는 관리자와 일반 사용자로 구성되며, 일반 사용자 중 원하는 경우 회원가입을 통해 회원이 될 수 있다. 회원가입을 위해 외부의 실명인증 시스템을 통해 실명인증을 수행한다. 실명인증에 사용되는 일반 사용자의 개인정보는 외부에 유출되지 않도록 해야 한다.
관리자는 시스템의 전염병 정보관리 및 분류체계관리, 회원관리를 할 수 있다. 전염병 정보에 대한 조회 및 검색은 관리자뿐만 아니라 회원과 회원이 아닌 일반 사용자도 사용할 수 있으며, 초보자도 쉽게 사용할 수 있도록 사용자 인터페이스(User Interface)를 구성해야 한다. 전염병 정보 조회는 전염병 목록 조회를 하거나 검색을 통해 해당 전염병에 대한 상세 정보를 조회할 수 있다. 검색은 검색어 입력을 통해 제공되며 평균 1.5초 이내 응답시간이 보장되어야 한다.
  1. (1) 위의 요구사항 중 비기능적 요구사항을 찾으시오. (5점)
  2. (2) Use Case Diagram을 작성하시오. (15점)

제2문 (35점)

다음은 GoF(Gang of Four) 설계 패턴 중 하나를 적용한 클래스 다이어그램이다. 물음에 답하시오. (총 35점)
[그림]
  1. (1) 위 클래스 다이어그램이 나타내고 있는 설계 패턴의 이름을 쓰시오.(단, 해당 패턴은 행위(Behavior) 목적을 가진 것으로 가정한다) (5점)
  2. (2) 1)의 패턴의 특성을 설명할 수 있는 예시를 객체 다이어그램으로 표현하고, 그 패턴의 장점을 간략히 설명하시오. (5점)
  3. (3) 위 클래스 다이어그램을 확장하여 각 게임 캐릭터(GameCharacter)가 검(Sword), 도끼(Axe), 활(Bow) 등의 무기(Weapon)를 중복해서 장착할 수 있다. 예를 들어 어떤 King 객체는 검 2개, 활 1개를 가지고 있다. 어떤 Soldier 객체는 무기를 하나도 가지지 않고, 또 다른 King 객체는 도끼 3개, 활 2개를 가지고 있다. 해당 설계를 위해 장식자(Decorator) 패턴을 적용한 결과를 클래스 다이어그램으로 나타내시오. (15점)
  4. (4) 3)의 결과를 기반으로 다음과 같은 객체를 만들어내는 코드를 C++ 혹은 Java 언어로 표현하시오. (10점)
    ○검 1개를 가지고 있는 King 객체
    ○도끼 1개, 활 1개, 검 2개를 가지고 있는 Soldier 객체

제3문 (25점)

UML 상태(State Machine) 다이어그램에 관한 다음 물음에 답하시오. (총 25점)
  1. (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. (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. (1) 문장 커버리지(Statement Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)
  2. (2) 분기 커버리지(Branch Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)
  3. (3) 흐름 그래프(Flow Graph)를 작성하시오. (5점)
  4. (4) 경로 커버리지(Path Coverage)를 만족하는 최소의 테스트 케이스를 제시하시오. (5점)