[7급 국가직 소프트웨어공학] 22년 1회차
7급 국가직 소프트웨어공학 기출문제

22년 1회차

총 25문항 · 객관식 · A4 약 1장

1 / 1
A4정답 포함
7급 국가직 소프트웨어공학 기출문제모두CBT · moducbt.com

22년 1회차

총 25문항 · 객관식 · 정답·해설 포함
문제 1
소프트웨어 프로젝트에서 수행 작업에 대한 설명으로 옳지 않은 것은?
1프로그래밍은 소프트웨어 공학의 모든 작업을 통합하는 작업이다.
2설계 작업은 요구사항을 어떻게 구현할지 결정하는 과정으로 서브 시스템 분할, 상세 설계, 인터페이스 설계 및 자료 저장 방식 등의 작업으로 구성된다.
3모델링 작업은 시스템의 기능, 동작 및 구성을 추상화 형태로 표현해 가는 과정으로 사용 사례 모델링, 정․동적 모델링이 있다.
4테스트 작업은 개별 코드를 테스트하기 위한 단위 테스트, 이를 연결하여 제대로 작동하는지 확인하는 통합 테스트 및 빌드(build)한 시스템의 기능이 원하는 대로 작동하는지 확인하는 시스템 테스트 작업 등이 있다.
문제 2
다음 설명에 해당하는 프로젝트 범위 관리 프로세스는?
○ 주요 프로젝트 인도물을 더 작고 관리 가능한 구성 요소로 나누는 작업이다.
○ WBS(Work Breakdown Structure)를 도구로 사용하고, WBS 체계에 따른 계층 구조와 최하위 항목인 작업 패키지가 결과로 산출된다.
1범위 기획
2범위 정의
3범위 검증
4범위 변경 통제
정답 및 해설

인도물을 작은 구성 요소로 나누고 WBS를 산출하는 프로세스는 범위 정의이다.

범위 관리는 범위 기획 → 범위 정의 → 범위 검증 → 범위 변경 통제 순으로 진행되며, 범위 정의 단계에서 WBS와 최하위 작업 패키지가 만들어진다.

  • 범위 기획: 범위를 어떻게 정의·검증·통제할지 계획하고 범위 기술서를 준비하는 단계이다.
  • 범위 검증: 완성된 인도물을 이해관계자가 공식적으로 인수(승인)하는 단계이다.
  • 범위 변경 통제: 범위 변경 요청을 검토·승인하고 기준선 변경을 관리하는 단계이다.
문제 3
다음 설명에 해당하는 것으로 옳은 것은?
○ 프로젝트 진행의 중요한 상태를 정의한다.
○ 프로젝트나 프로덕트가 특정 상태에 이르렀는지 나타낸다.
○ 계속되는 개발 또는 유지보수 작업의 기준이 된다.
○ 형상 항목에 대한 변경을 제어하는 메커니즘이다.
1VCS(Version Control System)
2Baseline
3CMMI(Capability Maturity Model Integration)
4CI(Continuous Integration)
정답 및 해설

설명은 베이스라인(Baseline)에 해당한다.

베이스라인은 공식 검토·합의를 거친 형상 항목의 기준 시점으로, 이후 변경은 공식 변경 통제 절차를 거쳐야만 반영된다. 따라서 진행 상태의 이정표이자 후속 작업의 기준이 된다.

  • VCS: 소스·문서의 이력과 버전을 저장·관리하는 도구로, 기준 상태를 정의하는 개념 자체는 아니다.
  • CMMI: 조직 프로세스의 성숙도를 평가·개선하는 모델이다.
  • CI: 개발자의 변경을 자주 통합하고 자동 빌드·테스트하는 실천법이다.
문제 4
소프트웨어의 품질 속성에 대한 설명으로 옳지 않은 것은?
1신뢰성 - 요구된 기능을 실행하여 정확하고 일관성 있는 결과를 생성하는 속성
2효율성 - 요구된 기능을 최소의 시간과 자원을 사용하여 결과를 생성하는 속성
3모듈성 - 컴포넌트의 통합이나 조정을 쉽게 만드는 속성
4상호운용성 - 소프트웨어가 여러 운영 환경 및 플랫폼에서 실행될 수 있도록 변형이 가능한 속성
정답 및 해설

여러 운영 환경·플랫폼에서 실행되도록 변형 가능한 속성은 상호운용성이 아니라 이식성이다.

상호운용성은 다른 시스템·소프트웨어와 정보를 교환하고 함께 동작하는 능력을 뜻한다.

  • 신뢰성: 요구 기능을 정확하고 일관되게 수행하는 속성으로 옳은 설명이다.
  • 효율성: 최소의 시간·자원으로 결과를 내는 속성으로 옳은 설명이다.
  • 모듈성: 컴포넌트 단위로 나뉘어 통합·조정·변경을 쉽게 하는 속성으로 옳은 설명이다.
문제 5
유스케이스 명세서를 구성하는 항목에 대한 설명으로 옳지 않은 것은?
1개요는 유스케이스가 제공하는 기능을 나타낸 것으로, 그 기능을 사용하는 사용자 액터까지 표현해야 한다.
2이벤트 흐름(시나리오)은 유스케이스 기능에 대한 액터와 시스템 간의 대화로, 문자나 순차 다이어그램을 사용해 표현한다.
3기능 요구사항은 성능, 신뢰성, 보안성, 가용성 등 여러 요구 품질 요소를 나타낸다.
4후행 조건은 유스케이스의 수행 완료 후에 만족되어야 하는 조건으로 상태나 수치의 바뀐 모습을 명확하고 구체적으로 기술해야 한다.
정답 및 해설

성능·신뢰성·보안성·가용성 같은 품질 요소는 기능 요구사항이 아니라 비기능 요구사항이다.

유스케이스 명세서의 기능 요구사항은 시스템이 수행해야 할 동작(무엇을 하는가)을 기술한다.

  • 개요: 유스케이스가 제공하는 기능과 이를 사용하는 액터를 요약한다.
  • 이벤트 흐름: 액터와 시스템 간 대화를 문장이나 순차 다이어그램으로 표현한다.
  • 후행 조건: 수행 완료 후 만족해야 할 상태·수치 변화를 구체적으로 기술한다.
문제 6
ISO/IEC 9126 모델에 대한 품질 특성 요소로 잘못 짝 지은 것은?
1신뢰성 요소 - 성숙성, 결함허용성, 회복성
2유지보수성 요소 - 분석성, 변경성, 안정성
3기능성 요소 - 적용성, 설치용이성, 부합성
4사용성 요소 - 이해성, 학습용이성, 운영성
정답 및 해설

적응성·설치용이성은 기능성이 아니라 이식성의 부특성이므로 기능성과의 짝이 잘못되었다.

ISO/IEC 9126의 기능성 부특성은 적합성, 정확성, 상호운용성, 보안성, 준수성이다.

  • 신뢰성: 성숙성, 결함허용성, 회복성으로 옳게 짝지어졌다.
  • 유지보수성: 분석성, 변경성, 안정성은 시험성과 함께 유지보수성의 부특성이므로 옳게 짝지어졌다.
  • 사용성: 이해성, 학습용이성, 운영성으로 옳게 짝지어졌다.
문제 7
유스케이스 다이어그램에 대한 설명으로 옳지 않은 것은?
1시스템 외부의 액터들은 서로 관계를 형성하지 않는다.
2시스템과 상호작용하는 외부 시스템은 액터로 표현한다.
3유스케이스들의 공통 호출 서비스는 <<include>> 관계로 유스케이스를 구성한다.
4유스케이스들의 선택적 서비스는 <<extend>> 관계로 유스케이스를 구성한다.
정답 및 해설

액터끼리도 일반화(상속) 관계를 맺을 수 있으므로 액터들이 서로 관계를 형성하지 않는다는 설명은 옳지 않다.

예를 들어 일반 회원 액터를 특수화한 우수 회원 액터처럼 공통 역할을 상위 액터로 묶어 표현한다.

  • 외부 시스템: 시스템과 상호작용하는 외부 시스템도 액터로 표현한다.
  • include 관계: 여러 유스케이스가 공통으로 반드시 호출하는 기능을 분리할 때 쓴다.
  • extend 관계: 특정 조건에서만 수행되는 선택적 기능을 확장으로 표현할 때 쓴다.
문제 8
MVC(Model-View-Controller) 패턴에 대한 설명으로 옳지 않은 것은?
1뷰는 사용자에게 처리 로직의 결과를 보여준다.
2컨트롤러는 사용자의 요청을 받아 모델에 보낸다.
3모델은 데이터를 관리하며 변경이 일어나면 뷰에게 통지한다.
4사용자 인터페이스가 변경되면 모델에 영향을 준다.
정답 및 해설

MVC는 화면과 데이터를 분리하므로 사용자 인터페이스(뷰)가 바뀌어도 모델은 영향을 받지 않는다.

이 관심사 분리 덕분에 같은 모델에 여러 뷰를 붙이거나 뷰만 교체할 수 있다.

  • 뷰: 모델의 처리 결과를 사용자에게 보여준다.
  • 컨트롤러: 사용자 요청을 받아 모델에 전달하고 흐름을 제어한다.
  • 모델: 데이터와 비즈니스 로직을 관리하고 변경 시 뷰에 통지한다.
문제 9
다음 클래스 다이어그램을 파이썬 코드로 표현한 것이다. (가) ~ (라)에 들어갈 내용으로 옳은 것은?
class (가):
def __init__(self, name, price):
self.name = name
self.price = price

def (나)(self):
print("{}'s price = {}".format(self.name,
self.price))

class (다)((가)):
def __init__(self, name, price):
Food.__init__(self, name, price)

def (라)(self):
print("{}".format(self.name))
(가) (나) (다) (라)
1Food / show / Korean / showname
2Korean / showname / Food / show
3Food / showname / Korean / show
4Korean / show / Food / showname
정답 및 해설

클래스 다이어그램에서 Food 가 부모 클래스, Korean 이 Food 를 상속한 자식 클래스이므로 (가) Food, (나) show, (다) Korean, (라) showname 이 들어간다.

Food 는 name·price 속성과 show() 연산을 가지며, 코드에서 이름과 가격을 함께 출력하는 메서드가 show 이다. Korean 은 속이 빈 삼각형 화살표(일반화)로 Food 를 가리키므로 파이썬에서는 class Korean(Food) 로 표현하고, 생성자에서 Food.__init__ 을 호출한다. Korean 에만 있는 showname() 이 이름만 출력하는 메서드이다.

  • Korean·showname·Food·show 구성: 상속 방향이 거꾸로이고 두 메서드의 위치도 뒤바뀌어, 자식 생성자의 Food.__init__ 호출과 맞지 않는다.
  • Food·showname·Korean·show 구성: 부모에 showname, 자식에 show 를 두는 것이라 다이어그램의 연산 배치와 반대이다.
  • Korean·show·Food·showname 구성: 메서드 이름은 맞지만 Korean 이 부모가 되어 상속 방향이 반대이다.
문제 10
다음 클래스 다이어그램과 관련이 있는 디자인 패턴은?

1데코레이터(Decorator) 패턴
2메멘토(Memento) 패턴
3어댑터(Adapter) 패턴
4빌더(Builder) 패턴
정답 및 해설

이 구조는 데코레이터(Decorator) 패턴이다.

Line 은 Display 를 상속하면서 동시에 Display 객체를 집약(속이 빈 마름모)으로 참조한다. 즉 같은 타입을 상속하면서 그 타입을 감싸는 장식자이며, TextDisplay 는 실제 구성요소, SingleLine·DoubleLine 은 구체 장식자로서 기능을 겹겹이 덧붙일 수 있다.

  • 메멘토 패턴: 객체의 내부 상태를 저장해 두었다가 복원하는 행위 패턴으로 Originator·Memento·Caretaker 구조이다.
  • 어댑터 패턴: 호환되지 않는 인터페이스를 변환하는 구조로, 감싸는 대상과 같은 타입을 상속하지 않는다.
  • 빌더 패턴: 복잡한 객체의 생성 과정을 단계별로 분리하는 생성 패턴이다.
문제 11
화이트박스 테스트만을 모두 고르면?
ㄱ. 제어 흐름 테스팅
ㄴ. 경로 테스팅
ㄷ. 상태기반 테스팅
ㄹ. 원인 결과 그래프
1ㄱ, ㄴ
2ㄱ, ㄷ
3ㄴ, ㄷ
4ㄴ, ㄹ
정답 및 해설

화이트박스 테스트는 제어 흐름 테스팅과 경로 테스팅이다.

화이트박스 기법은 코드 내부 구조(제어 흐름·경로)를 근거로, 블랙박스 기법은 명세(입출력·상태)를 근거로 테스트 케이스를 만든다.

  • 제어 흐름 테스팅: 제어 흐름 그래프의 문장·분기를 덮도록 설계하는 화이트박스 기법이다.
  • 경로 테스팅: 기초 경로 등 실행 경로를 기준으로 하는 화이트박스 기법이다.
  • 상태기반 테스팅: 명세의 상태 전이도를 근거로 하는 블랙박스 기법이다.
  • 원인 결과 그래프: 입력 조건(원인)과 출력(결과)의 논리 관계를 근거로 하는 블랙박스 기법이다.
문제 12
다음 Yourdon/DeMarco 표기법에 따라서 자료 흐름도로 표현하였을 때 옳은 것은?
판매자가 음식을 등록하여 등록음식 데이터베이스에 저장한 후에, 고객이 음식을 주문하면, 고객에게 영수증이 발급되고, 판매자에게 판매정보가 전달된다.

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

옳은 자료 흐름도는 판매자·고객을 사각형(외부 개체), 음식등록·음식구매를 원(프로세스), 등록음식을 평행한 두 선(자료 저장소)으로 그린 것이다.

Yourdon/DeMarco 표기법에서 프로세스는 원, 외부 개체(터미네이터)는 사각형, 자료 저장소는 위아래 두 줄의 평행선, 자료 흐름은 이름 붙은 화살표로 나타낸다.

  • 등록음식을 사각형으로 그린 도식: 자료 저장소를 외부 개체 기호로 표현해 틀렸다.
  • 판매자·고객을 평행선으로 그린 도식: 외부 개체를 자료 저장소 기호로 표현해 틀렸다.
  • 판매자·고객을 원, 음식등록·음식구매를 사각형으로 그린 도식: 외부 개체와 프로세스의 기호가 서로 뒤바뀌었다.
문제 13
객체지향 프로그램의 품질 측정 방법으로 옳지 않은 것은?
1클래스 당 가중치를 갖는 메소드
2사이클로매틱 복잡성
3상속 트리의 깊이
4메소드의 응집 결핍
정답 및 해설

사이클로매틱 복잡성은 절차적 코드의 제어 흐름 복잡도 척도로, 객체지향 전용 품질 척도(CK 메트릭)에 속하지 않는다.

CK 메트릭은 WMC, DIT, NOC, CBO, RFC, LCOM의 여섯 가지로 클래스 구조·상속·결합·응집을 측정한다.

  • 클래스 당 가중치를 갖는 메소드(WMC): 클래스 메소드 복잡도의 합으로 CK 메트릭이다.
  • 상속 트리의 깊이(DIT): 클래스의 상속 계층 깊이로 CK 메트릭이다.
  • 메소드의 응집 결핍(LCOM): 메소드 간 응집 부족 정도로 CK 메트릭이다.
문제 14
소프트웨어의 요구 사항 수집 및 기술에 대한 설명으로 옳지 않은 것은?
1사용자의 요구 사항을 구체적으로 파악하기 위해 소프트웨어의 일부 기능을 빠르게 구현한 프로토타입을 이용한다.
2소프트웨어 사용 관련자들이 브레인스토밍을 통해 다양한 요구 사항을 도출한다.
3현재 시스템의 문제를 파악하기 위해 관련 직원으로부터 시스템의 문제점을 파악하고 자료를 수집한다.
4수집한 요구 사항은 프로그래밍 언어를 이용해서 구체적으로 기술한다.
정답 및 해설

수집한 요구사항은 프로그래밍 언어가 아니라 자연어·모델링 표기(UML 등)로 기술한다.

요구사항 명세는 고객·사용자도 이해하고 검토할 수 있어야 하며, 구현 방법(어떻게)이 아닌 시스템이 할 일(무엇을)을 담아야 한다.

  • 프로토타입: 일부 기능을 빠르게 구현해 요구를 구체화하는 도출 기법이다.
  • 브레인스토밍: 이해관계자가 모여 다양한 요구를 끌어내는 도출 기법이다.
  • 현행 시스템 조사: 관련 직원 인터뷰·자료 수집으로 문제점을 파악하는 도출 기법이다.
문제 15
소프트웨어 생명주기에 대한 설명으로 옳지 않은 것은?
1소프트웨어 개발방법론의 바탕이 된다.
2일반적으로 정의단계, 개발단계, 유지보수 단계로 구분된다.
3프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격이 된다.
4개발단계에서 시간과 비용이 가장 많이 든다.
정답 및 해설

생명주기 중 시간과 비용이 가장 많이 드는 단계는 개발단계가 아니라 유지보수 단계이다.

소프트웨어는 운영 기간 동안 수정·적응·개선이 계속되므로 전체 비용에서 유지보수 비중이 가장 크다.

  • 개발방법론의 바탕: 방법론은 생명주기 모델을 기반으로 활동과 산출물을 정의한다.
  • 단계 구분: 일반적으로 정의–개발–유지보수 단계로 나눈다.
  • 계획의 골격: 단계별 활동이 비용 산정과 개발 계획 수립의 기준이 된다.
문제 16
평가 점수에 따른 성적을 아래 표와 같이 부여하는 소프트웨어를 제작하여 경곗값 분석 기법으로 테스트할 때, 테스트 케이스는 몇 개인가? (단, 평가 점수는 정수이다)
평가 점수등급
90점 이상부터 100점 이하A
80점 이상부터 90점 미만B
70점 이상부터 80점 미만C
60점 이상부터 70점 미만D
0점 이상부터 60점 미만F
110
215
318
420
정답 및 해설

경곗값마다 경계 바로 아래·경계·바로 위 값을 고르면 테스트 케이스는 18개이다.

등급이 바뀌는 경계점은 0, 60, 70, 80, 90, 100의 6개이고, 점수가 정수이므로 각 경계점에서 3개씩 고른다.

-1, 0, 1 / 59, 60, 61 / 69, 70, 71 / 79, 80, 81 / 89, 90, 91 / 99, 100, 101
6×3=186 \times 3 = 18

문제 17
다음 디자인 패턴들을 GoF(Gang of Fours) 패턴 분류에 따라 구분하였을 때, 생성 패턴, 구조 패턴, 행위 패턴의 개수를 순서대로 바르게 나열한 것은?
○ Abstract Factory ○ Adapter ○ Bridge
○ Builder ○ Composite ○ Decorator
○ Iterator ○ Mediator ○ Observer
○ Prototype ○ Proxy ○ Singleton
○ Strategy ○ Visitor
생성 패턴 구조 패턴 행위 패턴
13 / 5 / 6
24 / 5 / 5
35 / 3 / 6
46 / 4 / 4
정답 및 해설

생성 패턴 4개, 구조 패턴 5개, 행위 패턴 5개이다.

  • 생성 패턴: Abstract Factory, Builder, Prototype, Singleton
  • 구조 패턴: Adapter, Bridge, Composite, Decorator, Proxy
  • 행위 패턴: Iterator, Mediator, Observer, Strategy, Visitor

생성은 객체 생성 방식, 구조는 클래스·객체의 조합, 행위는 객체 간 상호작용과 책임 분배를 다룬다.

문제 18
SPICE(Software Process Improvement and Capability dEtermination) 모델은 소프트웨어 개발 프로세스를 구성하는 각 프로세스 영역의 달성 수준(또는 능력)을 측정하는 레벨을 제시한다. 레벨과 그 레벨의 측정 관점을 짝 지은 것으로 옳지 않은 것은?
1수행단계 - 해당 프로세스의 목적은 달성하지만 계획되거나 추적되지 않는다.
2관리단계 - 표준으로 정의된 프로세스를 사용하여 계획되고 관리한다.
3예측단계 - 표준 프로세스 능력을 정량적으로 측정, 이해, 관리할 수 있어 품질의 정량적 관리가 가능하다.
4최적화 단계 - 프로세스가 지속적으로 개선되고 최적화된다.
정답 및 해설

표준으로 정의된 프로세스를 사용하는 것은 관리단계가 아니라 확립단계의 특징이다.

SPICE 능력 수준은 불완전 → 수행 → 관리 → 확립 → 예측 → 최적화 순이며, 관리단계는 프로세스가 계획·추적·관리되고 산출물이 통제되는 수준이다.

  • 수행단계: 프로세스 목적은 달성하지만 계획·추적은 이루어지지 않는다.
  • 예측단계: 프로세스를 정량적으로 측정·관리해 결과를 예측할 수 있다.
  • 최적화 단계: 프로세스가 지속적으로 개선·최적화된다.
문제 19
다음 클래스 다이어그램은 객체지향 설계에서 클래스를 설계할 때의 원칙 가운데 하나를 적용한 사례이다. 설계 원칙으로 옳은 것은?
‘학과평균점수’ 클래스의 역할은 한 대학의 학과별 기말 고사 평균 점수를 계산하기 위한 것이다. <보기 1>은 클래스 설계의 해당 원칙을 적용하기 전의 다이어그램이고, <보기 2>는 해당 원칙을 적용한 이후의 다이어그램이다.
<보기 1>

<보기 2>

1개방 폐쇄의 원칙
2의존 관계 역전의 원칙
3인터페이스 분리의 원칙
4단일 책임 원칙
정답 및 해설

적용된 설계 원칙은 개방 폐쇄의 원칙(OCP)이다.

적용 전에는 학과평균점수 클래스 안에 학과마다 메서드가 나열되어 있어 학과가 늘 때마다 이 클래스를 고쳐야 한다. 적용 후에는 학과라는 상위 타입에 평균계산()을 두고 학과별 하위 클래스가 이를 구현하므로, 새 학과는 기존 코드 수정 없이 하위 클래스 추가로 확장된다.

  • 의존 관계 역전의 원칙: 상위 모듈과 하위 모듈이 모두 추상에 의존하게 하는 원칙으로, 이 사례가 보여 주는 핵심인 수정 없는 확장과는 초점이 다르다.
  • 인터페이스 분리의 원칙: 비대한 인터페이스를 클라이언트별로 쪼개는 원칙인데, 여기서는 인터페이스를 나누지 않았다.
  • 단일 책임 원칙: 한 클래스가 하나의 책임만 갖게 하는 원칙으로, 적용 전 클래스도 평균 계산이라는 한 역할만 맡고 있었다.
문제 20
다음 Java 코드에서 생략된 부분을 고려하지 않고 명시된 부분만으로 UML 클래스 다이어그램을 작성하였을 때, 다이어그램에 나타나지 않는 관계는?
class Person { ... }
class Work { ... }
interface PublicService {
public void doWork(Work work);
}
class Official extends Person implements PublicService {
public void sayHello() { ... }
public void doWork(Work work) { ... }
...
}

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

다이어그램에 나타나지 않는 관계는 속이 빈 마름모가 달린 실선, 즉 집약(aggregation)이다.

코드에는 Work 를 필드로 보관하는 등 전체-부분 관계가 없다. Work 는 doWork 메서드의 매개변수로만 쓰이므로 의존 관계로 그려진다.

  • 점선 열린 화살표(의존): Official·PublicService 가 doWork(Work work) 의 매개변수로 Work 를 사용하므로 나타난다.
  • 점선 빈 삼각형 화살표(실체화): Official 이 PublicService 인터페이스를 implements 하므로 나타난다.
  • 실선 빈 삼각형 화살표(일반화): Official 이 Person 을 extends 하므로 나타난다.
문제 21
화이트박스 테스트 커버리지에 대한 설명으로 옳은 것은?
1문장 커버리지는 입력 데이터가 미리 정의한 유형에 적합한지를 검증하는 방법이다.
2동일한 프로그램에 대해 분기 커버리지를 달성하면 조건 커버리지를 달성한다.
3동일한 프로그램에 대해 조건 커버리지를 달성하면 분기 커버리지를 달성한다.
4동일한 프로그램에 대해 수정조건분기 커버리지(Modified Condition Decision Coverage, MCDC)를 달성하면 조건 커버리지를 달성한다.
정답 및 해설

MC/DC를 달성하면 각 조건이 참·거짓을 모두 취하므로 조건 커버리지도 달성된다.

MC/DC는 조건 커버리지와 분기 커버리지를 모두 포함하면서, 각 조건이 독립적으로 결정 결과에 영향을 주는지까지 확인한다.

  • 문장 커버리지: 모든 문장을 한 번 이상 실행하는 기준이며, 입력 유형 적합성 검증과는 무관하다.
  • 분기 → 조건: 분기 결과만 참·거짓을 덮어도 개별 조건이 모든 값을 취하지 않을 수 있다.
  • 조건 → 분기: 개별 조건이 참·거짓을 모두 취해도 전체 결정이 한쪽 결과만 나올 수 있다.
문제 22
소프트웨어 개발 프로젝트 수행을 위한 설명으로 옳은 것은?
1소프트웨어 기능의 정확성을 검증하기 위해 기능 점수 방법을 적용한다.
2소프트웨어 개발 요구 사항의 변경에 효과적으로 대응하기 위해 폭포수 모형을 적용한다.
3소프트웨어 개발 프로젝트의 비용을 예측하기 위해 COCOMO 방법을 적용한다.
4소프트웨어 개발 프로젝트 일정을 계획하기 위해 CMMI 방법을 적용한다.
정답 및 해설

프로젝트 비용을 예측하는 데 쓰는 것은 COCOMO이다.

COCOMO는 예상 코드 규모(KLOC)와 보정 계수로 노력(MM)·기간·비용을 추정하는 모델이다.

  • 기능 점수: 기능의 정확성 검증이 아니라 소프트웨어 규모·비용 산정 기법이다.
  • 폭포수 모형: 단계를 순차 진행하므로 요구 변경 대응에 취약하다.
  • CMMI: 일정 계획 기법이 아니라 조직 프로세스 성숙도 평가·개선 모델이다.
문제 23
다음 입력 인자가 가질 수 있는 값들이 <표 1>과 같이 주어져 있을 때, 페어와이즈(pairwise) 테스트를 수행하고자 한다. 페어와이즈 테스트를 위한 인자 조합이 <표 2>와 같다고 할 때, (가) ~ (라)에 들어갈 내용으로 옳은 것은?
<표 1>
인자
ABC
값A1B1C1
A2B2C2
A3
<표 2>
ABC
A1B1C1
A1B2C2
A2(가)C1
A2(나)C2
A3(다)C1
A3(라)C2
(가) (나) (다) (라)
1B1 / B2 / B1 / B2
2B1 / B1 / B2 / B2
3B1 / B2 / B2 / B1
4B2 / B2 / B1 / B1
정답 및 해설

(가)~(라)에는 B1, B2, B2, B1이 들어가야 모든 인자 쌍이 한 번 이상 나타난다.

A–B 쌍을 위해 A2와 A3는 각각 B1·B2를 한 번씩 가져야 하고, 기존 행에 B1–C1, B2–C2만 있으므로 B1–C2, B2–C1을 추가로 덮어야 한다.

  • (가) B1, (나) B2: A2–B1, A2–B2를 덮는다.
  • (다) B2: A3–B2와 B2–C1을 덮는다.
  • (라) B1: A3–B1과 B1–C2를 덮는다.

B1, B2, B1, B2 순으로 넣으면 B1–C2, B2–C1 쌍이 빠지고, 같은 A에 같은 B를 두 번 넣으면 A–B 쌍이 빠진다.

문제 24
소프트웨어의 총 개발 기간은 16개월이며, 처음 6명의 개발 인력이 100 % 투입되었다. 개발지연으로 11개월 시작 시점에 3명 중 2명은 100 %, 1명은 50 %를 추가 투입하여 개발이 완료되었다. 이 소프트웨어 개발에 투입된 총 MM(Man-Month)은?
1111 MM
2112 MM
3113 MM
4114 MM
정답 및 해설

총 투입 공수는 111 MM이다.

기존 인력: 6명이 16개월 전부 투입
6×16=96 MM6 \times 16 = 96\ \mathrm{MM}

추가 인력: 11개월 시작부터 16개월까지 6개월 투입
(2×1+1×0.5)×6=15 MM(2 \times 1 + 1 \times 0.5) \times 6 = 15\ \mathrm{MM}

96+15=111 MM96 + 15 = 111\ \mathrm{MM}

문제 25
다음은 모듈을 구성하는 코드의 일부이다. 두 함수 A( )와 B( ) 사이에 형성되는 결합으로 옳은 것은? (단, ...은 생략된 코드이며, 해당 코드는 고려하지 않는다)
int A(){
int a;
...
B(a);
...
}
int B(int x){
...
if(x > 0)
/* send data */
else
/* receive data */
}
1내용 결합
2자료 결합
3스탬프 결합
4제어 결합
정답 및 해설

A가 넘긴 값 x가 B의 실행 흐름(송신/수신)을 결정하므로 제어 결합이다.

제어 결합은 한 모듈이 다른 모듈의 내부 논리 흐름을 제어하는 플래그를 전달하는 결합으로, 호출하는 쪽이 피호출 모듈의 내부 동작을 알아야 한다.

  • 내용 결합: 다른 모듈의 내부 데이터나 코드를 직접 참조·변경하는 결합이다.
  • 자료 결합: 계산에 필요한 단순 데이터만 전달할 뿐 흐름을 제어하지 않는 결합이다.
  • 스탬프 결합: 배열·구조체 같은 자료 구조 전체를 전달하는 결합이다.
7급 국가직 소프트웨어공학 기출문제모두CBT · moducbt.com
22년 1회차
총 25문항 · 객관식 · 정답·해설 포함
문제 1
소프트웨어 프로젝트에서 수행 작업에 대한 설명으로 옳지 않은 것은?
1프로그래밍은 소프트웨어 공학의 모든 작업을 통합하는 작업이다.
2설계 작업은 요구사항을 어떻게 구현할지 결정하는 과정으로 서브 시스템 분할, 상세 설계, 인터페이스 설계 및 자료 저장 방식 등의 작업으로 구성된다.
3모델링 작업은 시스템의 기능, 동작 및 구성을 추상화 형태로 표현해 가는 과정으로 사용 사례 모델링, 정․동적 모델링이 있다.
4테스트 작업은 개별 코드를 테스트하기 위한 단위 테스트, 이를 연결하여 제대로 작동하는지 확인하는 통합 테스트 및 빌드(build)한 시스템의 기능이 원하는 대로 작동하는지 확인하는 시스템 테스트 작업 등이 있다.
문제 2
다음 설명에 해당하는 프로젝트 범위 관리 프로세스는?
○ 주요 프로젝트 인도물을 더 작고 관리 가능한 구성 요소로 나누는 작업이다.
○ WBS(Work Breakdown Structure)를 도구로 사용하고, WBS 체계에 따른 계층 구조와 최하위 항목인 작업 패키지가 결과로 산출된다.
1범위 기획
2범위 정의
3범위 검증
4범위 변경 통제
정답 및 해설

인도물을 작은 구성 요소로 나누고 WBS를 산출하는 프로세스는 범위 정의이다.

범위 관리는 범위 기획 → 범위 정의 → 범위 검증 → 범위 변경 통제 순으로 진행되며, 범위 정의 단계에서 WBS와 최하위 작업 패키지가 만들어진다.

  • 범위 기획: 범위를 어떻게 정의·검증·통제할지 계획하고 범위 기술서를 준비하는 단계이다.
  • 범위 검증: 완성된 인도물을 이해관계자가 공식적으로 인수(승인)하는 단계이다.
  • 범위 변경 통제: 범위 변경 요청을 검토·승인하고 기준선 변경을 관리하는 단계이다.
문제 3
다음 설명에 해당하는 것으로 옳은 것은?
○ 프로젝트 진행의 중요한 상태를 정의한다.
○ 프로젝트나 프로덕트가 특정 상태에 이르렀는지 나타낸다.
○ 계속되는 개발 또는 유지보수 작업의 기준이 된다.
○ 형상 항목에 대한 변경을 제어하는 메커니즘이다.
1VCS(Version Control System)
2Baseline
3CMMI(Capability Maturity Model Integration)
4CI(Continuous Integration)
정답 및 해설

설명은 베이스라인(Baseline)에 해당한다.

베이스라인은 공식 검토·합의를 거친 형상 항목의 기준 시점으로, 이후 변경은 공식 변경 통제 절차를 거쳐야만 반영된다. 따라서 진행 상태의 이정표이자 후속 작업의 기준이 된다.

  • VCS: 소스·문서의 이력과 버전을 저장·관리하는 도구로, 기준 상태를 정의하는 개념 자체는 아니다.
  • CMMI: 조직 프로세스의 성숙도를 평가·개선하는 모델이다.
  • CI: 개발자의 변경을 자주 통합하고 자동 빌드·테스트하는 실천법이다.
문제 4
소프트웨어의 품질 속성에 대한 설명으로 옳지 않은 것은?
1신뢰성 - 요구된 기능을 실행하여 정확하고 일관성 있는 결과를 생성하는 속성
2효율성 - 요구된 기능을 최소의 시간과 자원을 사용하여 결과를 생성하는 속성
3모듈성 - 컴포넌트의 통합이나 조정을 쉽게 만드는 속성
4상호운용성 - 소프트웨어가 여러 운영 환경 및 플랫폼에서 실행될 수 있도록 변형이 가능한 속성
정답 및 해설

여러 운영 환경·플랫폼에서 실행되도록 변형 가능한 속성은 상호운용성이 아니라 이식성이다.

상호운용성은 다른 시스템·소프트웨어와 정보를 교환하고 함께 동작하는 능력을 뜻한다.

  • 신뢰성: 요구 기능을 정확하고 일관되게 수행하는 속성으로 옳은 설명이다.
  • 효율성: 최소의 시간·자원으로 결과를 내는 속성으로 옳은 설명이다.
  • 모듈성: 컴포넌트 단위로 나뉘어 통합·조정·변경을 쉽게 하는 속성으로 옳은 설명이다.
문제 5
유스케이스 명세서를 구성하는 항목에 대한 설명으로 옳지 않은 것은?
1개요는 유스케이스가 제공하는 기능을 나타낸 것으로, 그 기능을 사용하는 사용자 액터까지 표현해야 한다.
2이벤트 흐름(시나리오)은 유스케이스 기능에 대한 액터와 시스템 간의 대화로, 문자나 순차 다이어그램을 사용해 표현한다.
3기능 요구사항은 성능, 신뢰성, 보안성, 가용성 등 여러 요구 품질 요소를 나타낸다.
4후행 조건은 유스케이스의 수행 완료 후에 만족되어야 하는 조건으로 상태나 수치의 바뀐 모습을 명확하고 구체적으로 기술해야 한다.
정답 및 해설

성능·신뢰성·보안성·가용성 같은 품질 요소는 기능 요구사항이 아니라 비기능 요구사항이다.

유스케이스 명세서의 기능 요구사항은 시스템이 수행해야 할 동작(무엇을 하는가)을 기술한다.

  • 개요: 유스케이스가 제공하는 기능과 이를 사용하는 액터를 요약한다.
  • 이벤트 흐름: 액터와 시스템 간 대화를 문장이나 순차 다이어그램으로 표현한다.
  • 후행 조건: 수행 완료 후 만족해야 할 상태·수치 변화를 구체적으로 기술한다.
문제 6
ISO/IEC 9126 모델에 대한 품질 특성 요소로 잘못 짝 지은 것은?
1신뢰성 요소 - 성숙성, 결함허용성, 회복성
2유지보수성 요소 - 분석성, 변경성, 안정성
3기능성 요소 - 적용성, 설치용이성, 부합성
4사용성 요소 - 이해성, 학습용이성, 운영성
정답 및 해설

적응성·설치용이성은 기능성이 아니라 이식성의 부특성이므로 기능성과의 짝이 잘못되었다.

ISO/IEC 9126의 기능성 부특성은 적합성, 정확성, 상호운용성, 보안성, 준수성이다.

  • 신뢰성: 성숙성, 결함허용성, 회복성으로 옳게 짝지어졌다.
  • 유지보수성: 분석성, 변경성, 안정성은 시험성과 함께 유지보수성의 부특성이므로 옳게 짝지어졌다.
  • 사용성: 이해성, 학습용이성, 운영성으로 옳게 짝지어졌다.
문제 7
유스케이스 다이어그램에 대한 설명으로 옳지 않은 것은?
1시스템 외부의 액터들은 서로 관계를 형성하지 않는다.
2시스템과 상호작용하는 외부 시스템은 액터로 표현한다.
3유스케이스들의 공통 호출 서비스는 <<include>> 관계로 유스케이스를 구성한다.
4유스케이스들의 선택적 서비스는 <<extend>> 관계로 유스케이스를 구성한다.
정답 및 해설

액터끼리도 일반화(상속) 관계를 맺을 수 있으므로 액터들이 서로 관계를 형성하지 않는다는 설명은 옳지 않다.

예를 들어 일반 회원 액터를 특수화한 우수 회원 액터처럼 공통 역할을 상위 액터로 묶어 표현한다.

  • 외부 시스템: 시스템과 상호작용하는 외부 시스템도 액터로 표현한다.
  • include 관계: 여러 유스케이스가 공통으로 반드시 호출하는 기능을 분리할 때 쓴다.
  • extend 관계: 특정 조건에서만 수행되는 선택적 기능을 확장으로 표현할 때 쓴다.
문제 8
MVC(Model-View-Controller) 패턴에 대한 설명으로 옳지 않은 것은?
1뷰는 사용자에게 처리 로직의 결과를 보여준다.
2컨트롤러는 사용자의 요청을 받아 모델에 보낸다.
3모델은 데이터를 관리하며 변경이 일어나면 뷰에게 통지한다.
4사용자 인터페이스가 변경되면 모델에 영향을 준다.
정답 및 해설

MVC는 화면과 데이터를 분리하므로 사용자 인터페이스(뷰)가 바뀌어도 모델은 영향을 받지 않는다.

이 관심사 분리 덕분에 같은 모델에 여러 뷰를 붙이거나 뷰만 교체할 수 있다.

  • 뷰: 모델의 처리 결과를 사용자에게 보여준다.
  • 컨트롤러: 사용자 요청을 받아 모델에 전달하고 흐름을 제어한다.
  • 모델: 데이터와 비즈니스 로직을 관리하고 변경 시 뷰에 통지한다.
문제 9
다음 클래스 다이어그램을 파이썬 코드로 표현한 것이다. (가) ~ (라)에 들어갈 내용으로 옳은 것은?
class (가):
def __init__(self, name, price):
self.name = name
self.price = price

def (나)(self):
print("{}'s price = {}".format(self.name,
self.price))

class (다)((가)):
def __init__(self, name, price):
Food.__init__(self, name, price)

def (라)(self):
print("{}".format(self.name))
(가) (나) (다) (라)
1Food / show / Korean / showname
2Korean / showname / Food / show
3Food / showname / Korean / show
4Korean / show / Food / showname
정답 및 해설

클래스 다이어그램에서 Food 가 부모 클래스, Korean 이 Food 를 상속한 자식 클래스이므로 (가) Food, (나) show, (다) Korean, (라) showname 이 들어간다.

Food 는 name·price 속성과 show() 연산을 가지며, 코드에서 이름과 가격을 함께 출력하는 메서드가 show 이다. Korean 은 속이 빈 삼각형 화살표(일반화)로 Food 를 가리키므로 파이썬에서는 class Korean(Food) 로 표현하고, 생성자에서 Food.__init__ 을 호출한다. Korean 에만 있는 showname() 이 이름만 출력하는 메서드이다.

  • Korean·showname·Food·show 구성: 상속 방향이 거꾸로이고 두 메서드의 위치도 뒤바뀌어, 자식 생성자의 Food.__init__ 호출과 맞지 않는다.
  • Food·showname·Korean·show 구성: 부모에 showname, 자식에 show 를 두는 것이라 다이어그램의 연산 배치와 반대이다.
  • Korean·show·Food·showname 구성: 메서드 이름은 맞지만 Korean 이 부모가 되어 상속 방향이 반대이다.
문제 10
다음 클래스 다이어그램과 관련이 있는 디자인 패턴은?

1데코레이터(Decorator) 패턴
2메멘토(Memento) 패턴
3어댑터(Adapter) 패턴
4빌더(Builder) 패턴
정답 및 해설

이 구조는 데코레이터(Decorator) 패턴이다.

Line 은 Display 를 상속하면서 동시에 Display 객체를 집약(속이 빈 마름모)으로 참조한다. 즉 같은 타입을 상속하면서 그 타입을 감싸는 장식자이며, TextDisplay 는 실제 구성요소, SingleLine·DoubleLine 은 구체 장식자로서 기능을 겹겹이 덧붙일 수 있다.

  • 메멘토 패턴: 객체의 내부 상태를 저장해 두었다가 복원하는 행위 패턴으로 Originator·Memento·Caretaker 구조이다.
  • 어댑터 패턴: 호환되지 않는 인터페이스를 변환하는 구조로, 감싸는 대상과 같은 타입을 상속하지 않는다.
  • 빌더 패턴: 복잡한 객체의 생성 과정을 단계별로 분리하는 생성 패턴이다.
문제 11
화이트박스 테스트만을 모두 고르면?
ㄱ. 제어 흐름 테스팅
ㄴ. 경로 테스팅
ㄷ. 상태기반 테스팅
ㄹ. 원인 결과 그래프
1ㄱ, ㄴ
2ㄱ, ㄷ
3ㄴ, ㄷ
4ㄴ, ㄹ
정답 및 해설

화이트박스 테스트는 제어 흐름 테스팅과 경로 테스팅이다.

화이트박스 기법은 코드 내부 구조(제어 흐름·경로)를 근거로, 블랙박스 기법은 명세(입출력·상태)를 근거로 테스트 케이스를 만든다.

  • 제어 흐름 테스팅: 제어 흐름 그래프의 문장·분기를 덮도록 설계하는 화이트박스 기법이다.
  • 경로 테스팅: 기초 경로 등 실행 경로를 기준으로 하는 화이트박스 기법이다.
  • 상태기반 테스팅: 명세의 상태 전이도를 근거로 하는 블랙박스 기법이다.
  • 원인 결과 그래프: 입력 조건(원인)과 출력(결과)의 논리 관계를 근거로 하는 블랙박스 기법이다.
문제 12
다음 Yourdon/DeMarco 표기법에 따라서 자료 흐름도로 표현하였을 때 옳은 것은?
판매자가 음식을 등록하여 등록음식 데이터베이스에 저장한 후에, 고객이 음식을 주문하면, 고객에게 영수증이 발급되고, 판매자에게 판매정보가 전달된다.

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

옳은 자료 흐름도는 판매자·고객을 사각형(외부 개체), 음식등록·음식구매를 원(프로세스), 등록음식을 평행한 두 선(자료 저장소)으로 그린 것이다.

Yourdon/DeMarco 표기법에서 프로세스는 원, 외부 개체(터미네이터)는 사각형, 자료 저장소는 위아래 두 줄의 평행선, 자료 흐름은 이름 붙은 화살표로 나타낸다.

  • 등록음식을 사각형으로 그린 도식: 자료 저장소를 외부 개체 기호로 표현해 틀렸다.
  • 판매자·고객을 평행선으로 그린 도식: 외부 개체를 자료 저장소 기호로 표현해 틀렸다.
  • 판매자·고객을 원, 음식등록·음식구매를 사각형으로 그린 도식: 외부 개체와 프로세스의 기호가 서로 뒤바뀌었다.
문제 13
객체지향 프로그램의 품질 측정 방법으로 옳지 않은 것은?
1클래스 당 가중치를 갖는 메소드
2사이클로매틱 복잡성
3상속 트리의 깊이
4메소드의 응집 결핍
정답 및 해설

사이클로매틱 복잡성은 절차적 코드의 제어 흐름 복잡도 척도로, 객체지향 전용 품질 척도(CK 메트릭)에 속하지 않는다.

CK 메트릭은 WMC, DIT, NOC, CBO, RFC, LCOM의 여섯 가지로 클래스 구조·상속·결합·응집을 측정한다.

  • 클래스 당 가중치를 갖는 메소드(WMC): 클래스 메소드 복잡도의 합으로 CK 메트릭이다.
  • 상속 트리의 깊이(DIT): 클래스의 상속 계층 깊이로 CK 메트릭이다.
  • 메소드의 응집 결핍(LCOM): 메소드 간 응집 부족 정도로 CK 메트릭이다.
문제 14
소프트웨어의 요구 사항 수집 및 기술에 대한 설명으로 옳지 않은 것은?
1사용자의 요구 사항을 구체적으로 파악하기 위해 소프트웨어의 일부 기능을 빠르게 구현한 프로토타입을 이용한다.
2소프트웨어 사용 관련자들이 브레인스토밍을 통해 다양한 요구 사항을 도출한다.
3현재 시스템의 문제를 파악하기 위해 관련 직원으로부터 시스템의 문제점을 파악하고 자료를 수집한다.
4수집한 요구 사항은 프로그래밍 언어를 이용해서 구체적으로 기술한다.
정답 및 해설

수집한 요구사항은 프로그래밍 언어가 아니라 자연어·모델링 표기(UML 등)로 기술한다.

요구사항 명세는 고객·사용자도 이해하고 검토할 수 있어야 하며, 구현 방법(어떻게)이 아닌 시스템이 할 일(무엇을)을 담아야 한다.

  • 프로토타입: 일부 기능을 빠르게 구현해 요구를 구체화하는 도출 기법이다.
  • 브레인스토밍: 이해관계자가 모여 다양한 요구를 끌어내는 도출 기법이다.
  • 현행 시스템 조사: 관련 직원 인터뷰·자료 수집으로 문제점을 파악하는 도출 기법이다.
문제 15
소프트웨어 생명주기에 대한 설명으로 옳지 않은 것은?
1소프트웨어 개발방법론의 바탕이 된다.
2일반적으로 정의단계, 개발단계, 유지보수 단계로 구분된다.
3프로젝트 비용 산정과 개발 계획을 수립할 수 있는 기본 골격이 된다.
4개발단계에서 시간과 비용이 가장 많이 든다.
정답 및 해설

생명주기 중 시간과 비용이 가장 많이 드는 단계는 개발단계가 아니라 유지보수 단계이다.

소프트웨어는 운영 기간 동안 수정·적응·개선이 계속되므로 전체 비용에서 유지보수 비중이 가장 크다.

  • 개발방법론의 바탕: 방법론은 생명주기 모델을 기반으로 활동과 산출물을 정의한다.
  • 단계 구분: 일반적으로 정의–개발–유지보수 단계로 나눈다.
  • 계획의 골격: 단계별 활동이 비용 산정과 개발 계획 수립의 기준이 된다.
문제 16
평가 점수에 따른 성적을 아래 표와 같이 부여하는 소프트웨어를 제작하여 경곗값 분석 기법으로 테스트할 때, 테스트 케이스는 몇 개인가? (단, 평가 점수는 정수이다)
평가 점수등급
90점 이상부터 100점 이하A
80점 이상부터 90점 미만B
70점 이상부터 80점 미만C
60점 이상부터 70점 미만D
0점 이상부터 60점 미만F
110
215
318
420
정답 및 해설

경곗값마다 경계 바로 아래·경계·바로 위 값을 고르면 테스트 케이스는 18개이다.

등급이 바뀌는 경계점은 0, 60, 70, 80, 90, 100의 6개이고, 점수가 정수이므로 각 경계점에서 3개씩 고른다.

-1, 0, 1 / 59, 60, 61 / 69, 70, 71 / 79, 80, 81 / 89, 90, 91 / 99, 100, 101
6×3=186 \times 3 = 18

문제 17
다음 디자인 패턴들을 GoF(Gang of Fours) 패턴 분류에 따라 구분하였을 때, 생성 패턴, 구조 패턴, 행위 패턴의 개수를 순서대로 바르게 나열한 것은?
○ Abstract Factory ○ Adapter ○ Bridge
○ Builder ○ Composite ○ Decorator
○ Iterator ○ Mediator ○ Observer
○ Prototype ○ Proxy ○ Singleton
○ Strategy ○ Visitor
생성 패턴 구조 패턴 행위 패턴
13 / 5 / 6
24 / 5 / 5
35 / 3 / 6
46 / 4 / 4
정답 및 해설

생성 패턴 4개, 구조 패턴 5개, 행위 패턴 5개이다.

  • 생성 패턴: Abstract Factory, Builder, Prototype, Singleton
  • 구조 패턴: Adapter, Bridge, Composite, Decorator, Proxy
  • 행위 패턴: Iterator, Mediator, Observer, Strategy, Visitor

생성은 객체 생성 방식, 구조는 클래스·객체의 조합, 행위는 객체 간 상호작용과 책임 분배를 다룬다.

문제 18
SPICE(Software Process Improvement and Capability dEtermination) 모델은 소프트웨어 개발 프로세스를 구성하는 각 프로세스 영역의 달성 수준(또는 능력)을 측정하는 레벨을 제시한다. 레벨과 그 레벨의 측정 관점을 짝 지은 것으로 옳지 않은 것은?
1수행단계 - 해당 프로세스의 목적은 달성하지만 계획되거나 추적되지 않는다.
2관리단계 - 표준으로 정의된 프로세스를 사용하여 계획되고 관리한다.
3예측단계 - 표준 프로세스 능력을 정량적으로 측정, 이해, 관리할 수 있어 품질의 정량적 관리가 가능하다.
4최적화 단계 - 프로세스가 지속적으로 개선되고 최적화된다.
정답 및 해설

표준으로 정의된 프로세스를 사용하는 것은 관리단계가 아니라 확립단계의 특징이다.

SPICE 능력 수준은 불완전 → 수행 → 관리 → 확립 → 예측 → 최적화 순이며, 관리단계는 프로세스가 계획·추적·관리되고 산출물이 통제되는 수준이다.

  • 수행단계: 프로세스 목적은 달성하지만 계획·추적은 이루어지지 않는다.
  • 예측단계: 프로세스를 정량적으로 측정·관리해 결과를 예측할 수 있다.
  • 최적화 단계: 프로세스가 지속적으로 개선·최적화된다.
문제 19
다음 클래스 다이어그램은 객체지향 설계에서 클래스를 설계할 때의 원칙 가운데 하나를 적용한 사례이다. 설계 원칙으로 옳은 것은?
‘학과평균점수’ 클래스의 역할은 한 대학의 학과별 기말 고사 평균 점수를 계산하기 위한 것이다. <보기 1>은 클래스 설계의 해당 원칙을 적용하기 전의 다이어그램이고, <보기 2>는 해당 원칙을 적용한 이후의 다이어그램이다.
<보기 1>

<보기 2>

1개방 폐쇄의 원칙
2의존 관계 역전의 원칙
3인터페이스 분리의 원칙
4단일 책임 원칙
정답 및 해설

적용된 설계 원칙은 개방 폐쇄의 원칙(OCP)이다.

적용 전에는 학과평균점수 클래스 안에 학과마다 메서드가 나열되어 있어 학과가 늘 때마다 이 클래스를 고쳐야 한다. 적용 후에는 학과라는 상위 타입에 평균계산()을 두고 학과별 하위 클래스가 이를 구현하므로, 새 학과는 기존 코드 수정 없이 하위 클래스 추가로 확장된다.

  • 의존 관계 역전의 원칙: 상위 모듈과 하위 모듈이 모두 추상에 의존하게 하는 원칙으로, 이 사례가 보여 주는 핵심인 수정 없는 확장과는 초점이 다르다.
  • 인터페이스 분리의 원칙: 비대한 인터페이스를 클라이언트별로 쪼개는 원칙인데, 여기서는 인터페이스를 나누지 않았다.
  • 단일 책임 원칙: 한 클래스가 하나의 책임만 갖게 하는 원칙으로, 적용 전 클래스도 평균 계산이라는 한 역할만 맡고 있었다.
문제 20
다음 Java 코드에서 생략된 부분을 고려하지 않고 명시된 부분만으로 UML 클래스 다이어그램을 작성하였을 때, 다이어그램에 나타나지 않는 관계는?
class Person { ... }
class Work { ... }
interface PublicService {
public void doWork(Work work);
}
class Official extends Person implements PublicService {
public void sayHello() { ... }
public void doWork(Work work) { ... }
...
}

1[그림]
2[그림]
3[그림]
4[그림]
정답 및 해설

다이어그램에 나타나지 않는 관계는 속이 빈 마름모가 달린 실선, 즉 집약(aggregation)이다.

코드에는 Work 를 필드로 보관하는 등 전체-부분 관계가 없다. Work 는 doWork 메서드의 매개변수로만 쓰이므로 의존 관계로 그려진다.

  • 점선 열린 화살표(의존): Official·PublicService 가 doWork(Work work) 의 매개변수로 Work 를 사용하므로 나타난다.
  • 점선 빈 삼각형 화살표(실체화): Official 이 PublicService 인터페이스를 implements 하므로 나타난다.
  • 실선 빈 삼각형 화살표(일반화): Official 이 Person 을 extends 하므로 나타난다.
문제 21
화이트박스 테스트 커버리지에 대한 설명으로 옳은 것은?
1문장 커버리지는 입력 데이터가 미리 정의한 유형에 적합한지를 검증하는 방법이다.
2동일한 프로그램에 대해 분기 커버리지를 달성하면 조건 커버리지를 달성한다.
3동일한 프로그램에 대해 조건 커버리지를 달성하면 분기 커버리지를 달성한다.
4동일한 프로그램에 대해 수정조건분기 커버리지(Modified Condition Decision Coverage, MCDC)를 달성하면 조건 커버리지를 달성한다.
정답 및 해설

MC/DC를 달성하면 각 조건이 참·거짓을 모두 취하므로 조건 커버리지도 달성된다.

MC/DC는 조건 커버리지와 분기 커버리지를 모두 포함하면서, 각 조건이 독립적으로 결정 결과에 영향을 주는지까지 확인한다.

  • 문장 커버리지: 모든 문장을 한 번 이상 실행하는 기준이며, 입력 유형 적합성 검증과는 무관하다.
  • 분기 → 조건: 분기 결과만 참·거짓을 덮어도 개별 조건이 모든 값을 취하지 않을 수 있다.
  • 조건 → 분기: 개별 조건이 참·거짓을 모두 취해도 전체 결정이 한쪽 결과만 나올 수 있다.
문제 22
소프트웨어 개발 프로젝트 수행을 위한 설명으로 옳은 것은?
1소프트웨어 기능의 정확성을 검증하기 위해 기능 점수 방법을 적용한다.
2소프트웨어 개발 요구 사항의 변경에 효과적으로 대응하기 위해 폭포수 모형을 적용한다.
3소프트웨어 개발 프로젝트의 비용을 예측하기 위해 COCOMO 방법을 적용한다.
4소프트웨어 개발 프로젝트 일정을 계획하기 위해 CMMI 방법을 적용한다.
정답 및 해설

프로젝트 비용을 예측하는 데 쓰는 것은 COCOMO이다.

COCOMO는 예상 코드 규모(KLOC)와 보정 계수로 노력(MM)·기간·비용을 추정하는 모델이다.

  • 기능 점수: 기능의 정확성 검증이 아니라 소프트웨어 규모·비용 산정 기법이다.
  • 폭포수 모형: 단계를 순차 진행하므로 요구 변경 대응에 취약하다.
  • CMMI: 일정 계획 기법이 아니라 조직 프로세스 성숙도 평가·개선 모델이다.
문제 23
다음 입력 인자가 가질 수 있는 값들이 <표 1>과 같이 주어져 있을 때, 페어와이즈(pairwise) 테스트를 수행하고자 한다. 페어와이즈 테스트를 위한 인자 조합이 <표 2>와 같다고 할 때, (가) ~ (라)에 들어갈 내용으로 옳은 것은?
<표 1>
인자
ABC
값A1B1C1
A2B2C2
A3
<표 2>
ABC
A1B1C1
A1B2C2
A2(가)C1
A2(나)C2
A3(다)C1
A3(라)C2
(가) (나) (다) (라)
1B1 / B2 / B1 / B2
2B1 / B1 / B2 / B2
3B1 / B2 / B2 / B1
4B2 / B2 / B1 / B1
정답 및 해설

(가)~(라)에는 B1, B2, B2, B1이 들어가야 모든 인자 쌍이 한 번 이상 나타난다.

A–B 쌍을 위해 A2와 A3는 각각 B1·B2를 한 번씩 가져야 하고, 기존 행에 B1–C1, B2–C2만 있으므로 B1–C2, B2–C1을 추가로 덮어야 한다.

  • (가) B1, (나) B2: A2–B1, A2–B2를 덮는다.
  • (다) B2: A3–B2와 B2–C1을 덮는다.
  • (라) B1: A3–B1과 B1–C2를 덮는다.

B1, B2, B1, B2 순으로 넣으면 B1–C2, B2–C1 쌍이 빠지고, 같은 A에 같은 B를 두 번 넣으면 A–B 쌍이 빠진다.

문제 24
소프트웨어의 총 개발 기간은 16개월이며, 처음 6명의 개발 인력이 100 % 투입되었다. 개발지연으로 11개월 시작 시점에 3명 중 2명은 100 %, 1명은 50 %를 추가 투입하여 개발이 완료되었다. 이 소프트웨어 개발에 투입된 총 MM(Man-Month)은?
1111 MM
2112 MM
3113 MM
4114 MM
정답 및 해설

총 투입 공수는 111 MM이다.

기존 인력: 6명이 16개월 전부 투입
6×16=96 MM6 \times 16 = 96\ \mathrm{MM}

추가 인력: 11개월 시작부터 16개월까지 6개월 투입
(2×1+1×0.5)×6=15 MM(2 \times 1 + 1 \times 0.5) \times 6 = 15\ \mathrm{MM}

96+15=111 MM96 + 15 = 111\ \mathrm{MM}

문제 25
다음은 모듈을 구성하는 코드의 일부이다. 두 함수 A( )와 B( ) 사이에 형성되는 결합으로 옳은 것은? (단, ...은 생략된 코드이며, 해당 코드는 고려하지 않는다)
int A(){
int a;
...
B(a);
...
}
int B(int x){
...
if(x > 0)
/* send data */
else
/* receive data */
}
1내용 결합
2자료 결합
3스탬프 결합
4제어 결합
정답 및 해설

A가 넘긴 값 x가 B의 실행 흐름(송신/수신)을 결정하므로 제어 결합이다.

제어 결합은 한 모듈이 다른 모듈의 내부 논리 흐름을 제어하는 플래그를 전달하는 결합으로, 호출하는 쪽이 피호출 모듈의 내부 동작을 알아야 한다.

  • 내용 결합: 다른 모듈의 내부 데이터나 코드를 직접 참조·변경하는 결합이다.
  • 자료 결합: 계산에 필요한 단순 데이터만 전달할 뿐 흐름을 제어하지 않는 결합이다.
  • 스탬프 결합: 배열·구조체 같은 자료 구조 전체를 전달하는 결합이다.