2021년 국가직7급 · 실전모드
0/25 응답
경과
⏱ 0:00
1. 다음 특징을 가지는 소프트웨어 개발 방법론은? ○ 리팩토링(refactoring) ○ 사용자 스토리(user story) ○ 소규모 릴리즈(small release) ○ 짝 프로그래밍(pair programming) ○ 테스트 우선 개발(test-first development)
2. 다음 상황에 가장 적합한 소프트웨어 아키텍처 패턴은? ○ 데이터 관리 컴포넌트, 인터랙션 제어 컴포넌트, 화면 관리 컴포넌트를 분리 ○ 하나의 데이터를 다양한 그래프로 보여 줄 수 있는 데스크탑 응용 프로그램 개발 ○ 데이터베이스 연동 부분과 사용자 웹 화면 제공 부분으로 나눈 웹 기반 응용 프로그램 개발
3. LOC(Lines Of Code) 기법에 의해 예측된 프로젝트의 총라인 수가 80,000 LOC이고, 투입 개발자 수는 8명, 개발자 1인당 월평균 생산성이 500 LOC일 경우, 개발에 소요되는 시간은?
4. 사용자 요구분석 명세서의 바람직한 특성으로 옳지 않은 것은?
5. 아키텍처의 4 + 1 관점에 대한 설명으로 옳지 않은 것은?
6. 다음 자바 코드에 나타난 것과 같이 동일한 이름의 메시지로 다른 구현을 호출할 수 있는 객체 지향 개념은? Animal a; a = new Dog( ); a.makeSound( ); // “멍멍” 출력함 a = new Cat( ); a.makeSound( ); // “야옹” 출력함
7. 다음 제어흐름 그래프에 대한 순환 복잡도(cyclomatic complexity)는?
8. 다음 유스케이스 다이어그램에 대한 설명으로 옳지 않은 것은?
9. 다음 설명에 해당하는 아키텍처는? 네트워크의 어떠한 노드라도 주어진 연산을 수행할 수 있는 비중앙집중적인(decentralized) 아키텍처로, 서버와 클라이언트의 구분이 없다. 별도의 중앙 서버 없이 사용자의 PC 사이에서 파일을 주고받기 위한 파일 공유 네트워크 등이 이에 해당한다.
10. 다음 자바 코드에서 오류가 발생하는 문장은? abstract class Shape { public void paint() { draw(); } abstract public void draw(); } abstract class Circle extends Shape { public int radius; public Circle(int radius) { this.radius = radius; } double getArea() { return (3.14 * radius * radius); } } public class NamedCircle extends Circle { String name; public NamedCircle(int radius, String name) { super(radius); this.name = name; } public void draw() { System.out.println("반지름이 " + radius + "인 원을 그리다."); } public static void main(String[] args) { Shape s; s = new Shape(); NamedCircle w = new NamedCircle(5, "Ring"); System.out.println(w.getArea()); w.draw(); } }
11. 코드 인스펙션(code inspection)에 대한 설명으로 옳지 않은 것은?
12. 다음 설명과 용어를 바르게 연결한 것은? (가) 코드만 남아있고 관련 문서가 없을 때, 프로그램을 분석하여 프로그램 구조, 자료 구조, 모듈 사이의 관계 등 상세한 설계 정보를 추출함 (나) 겉으로 보이는 동작이나 외부 행위를 바꾸지 않고 소프트웨어 내부 구조를 바꾸며 점진적으로 설계를 향상시키는 기법 (다) 기존 시스템을 이해하여 새로운 기능을 추가하거나 성능을 향상시키는 등의 새로운 형태로 변경하는 것으로, 단순히 설계정보를 끌어내는 것뿐만 아니라 이 정보를 사용하여 보다 나은 시스템을 만드는 것
13. UML 다이어그램에 대한 설명으로 옳지 않은 것은?
14. 바람직한 설계에 대한 설명으로 옳지 않은 것은?
15. 요구사항 명세 기법 중 자연어 기반 비정형 명세에 대한 설명으로 옳은 것만을 모두 고르면? ㄱ. 표현이 모호할 수 있고, 해석이 다를 수 있다. ㄴ. 수학적 증명 기술을 이용하여 완전성을 검증할 수 있다. ㄷ. 자연어를 기반으로 작성하기 때문에 쉽게 작성할 수 있다.
16. 다음 설명에 해당하는 코드 악취(code smell)는? 수정할 때마다 관련된 여러 클래스에서 수많은 자잘한 변경을 해야 하는 상황이 발생하여 여러 클래스를 동시에 수정해야 하는 상황
17. 다음 소스 코드와 테스트 입력을 사용한 테스트 커버리지 설명으로 옳지 않은 것은? (단, 단축연산(short-circuit evaluation)은 수행하지 않는다) 문장 번호 소스 코드 테스트 입력 1 2 3 4 void temp(int x, int y) { if(x < 0 && y >= 0) printf("%d",y); if(x >= 0) printf("%d",x); } T = {t1:(x=-2, y=3), t2:(x=2, y=0)}
18. UML 시퀀스 다이어그램에서 사용되지 않는 것은?
19. 다음 테스트 주도 개발(TDD)의 단계를 순서대로 바르게 나열한 것은? (가) 무엇을 테스트할 것인지 생각한다. (나) 테스트를 통과하도록 소스 코드를 작성한다. (다) 테스트 코드를 작성한다. (라) 소스 코드와 테스트 코드를 리팩토링한다. (마) 구현해야 할 소스 코드가 남아 있으면 위의 단계를 반복한다.
20. 다음 상황에 적합한 디자인 패턴은? 슈팅 모바일 게임을 개발하는데, 이 게임은 사용자가 화면을 터치하면 게임 캐릭터가 사용자가 터치한 곳으로 무기를 발사해 적을 공격하는 기능이 있다. 이는 세부적으로 ‘사용자 터치 인식→터치 한 방향으로 캐릭터를 회전→무기를 겨누는 동작 실행 → 무기 발사’순서로 실행되는 단계를 가지며, 각 단계별 동작은 별도 클래스의 메서드로 구현된다. 따라서 캐릭터 무기 발사를 구현하기 위해서는 클라이언트 코드가 각각의 클래스와 내부 메서드 사용 방법을 알아야 한다. 이 문제를 해결하기 위해 클라이언트 코드에게는 위의 복잡한 메서드 호출 과정을 숨기고, 위 과정을 대신 수행하는 높은 레벨의 인터페이스를 제공하고자 한다.
21. 다음 코드에 대해 기본 경로(basis path) 테스트를 수행할 때, 모든 독립적인 경로가 최소한 한 번은 실행되는 테스트 입력 집합은? int max(int a, int b, int c) { int result = a; if (b > result) result = b; if (c > result) result = c; return result; }
22. 다음 클래스 다이어그램에 대한 설명으로 옳은 것은?
23. 다음은 IFPUG에서 정의한 기능점수 산정 절차이다. (가) ~(라)에 해당하는 것을 A ~ D에서 바르게 연결한 것은? A. 계산 범위 및 애플리케이션 경계 식별 B. 기능점수 측정 유형 결정 C. 미조정 기능점수 계산 D. 조정 인자 계산
24. 다음은 ‘갑’ 프로젝트의 계획 단계에서 수립한 CPM(critical path method) 네트워크의 작업 목록표이다. ‘갑’ 프로젝트 완료에 필요한 최소 시간은? 작업 선행작업 소요기간(일) A D 15 B A, D, E 10 C E 15 D - 5 E - 10 F A, B 20 G B, C 15
25. UML 시퀀스 다이어그램의 결합 프레그먼트(combined fragment) 에서 사용하는 인터랙션 오퍼레이터에 대한 설명으로 옳은 것은?