[경찰간부후보생 소프트웨어공학] 24년 1회차
경찰간부후보생 소프트웨어공학 기출문제

24년 1회차

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

1 / 1
A4정답 포함
경찰간부후보생 소프트웨어공학 기출문제모두CBT · moducbt.com

24년 1회차

총 40문항 · 객관식 · 정답·해설 포함
문제 1
다음 보기에서 소프트웨어공학이 등장하게 된 배경으로 올바른 것을 모두 고른 것은?
가. 소프트웨어 개발 인력 공급 과잉
나. 소프트웨어 개발 기간의 지연 및 개발 비용의 증가
다. 하드웨어 컴퓨터의 발전 속도 저하
라. 소프트웨어 유지보수의 어려움
1가, 나
2가, 다
3나, 다
4나, 라
정답 및 해설

소프트웨어공학이 등장한 배경은 개발 기간 지연·비용 증가와 유지보수의 어려움이다.

1960년대 후반 소프트웨어 규모와 복잡도가 커지면서 일정·예산 초과, 품질 저하, 유지보수 부담이 누적된 이른바 소프트웨어 위기가 체계적인 공학적 접근을 요구하게 되었다.

  • 개발 인력은 공급 과잉이 아니라 수요에 비해 부족했던 것이 위기의 한 원인이었다.
  • 하드웨어는 빠르게 발전했고, 이를 소프트웨어 생산성이 따라가지 못한 것이 문제였으므로 하드웨어 발전 속도 저하는 배경이 아니다.
문제 2
다음과 같은 특징을 갖고 있는 방법론으로 가장 올바른 것은?
가. 기업 업무 중심, 자료 중심, 도형 중심의 접근
나. 프로젝트계획, 개발운영 단계의 명확한 구조 기반 제시
다. CASE 도구 등 정보시스템 개발의 자동화 지향
라. 고객 지향적, 최신 정보 기술의 능동적 수용
1컴포넌트 기반 방법론
2정보공학 방법론
3객체지향 방법론
4애자일 방법론
정답 및 해설

제시된 특징을 가진 방법론은 정보공학 방법론이다.

정보공학 방법론은 기업 전체의 정보 전략 계획부터 분석·설계·구축까지 데이터 중심으로 단계를 구조화하고, ERD 등 도형 중심 표기와 CASE 도구를 활용한 개발 자동화를 지향한다.

  • 컴포넌트 기반 방법론은 재사용 가능한 컴포넌트를 조립해 개발하는 데 초점이 있다.
  • 객체지향 방법론은 데이터와 기능을 묶은 객체를 중심으로 모델링하며 자료 중심 접근과 구별된다.
  • 애자일 방법론은 문서와 단계 구조보다 짧은 반복과 변화 대응을 중시하므로 명확한 단계 구조 제시와 맞지 않는다.
문제 3
다음 보기에서 소프트웨어개발 프로세스와 방법론의 차이점으로 올바르지 않은 것을 모두 고른 것은?
가. 프로세스는 소프트웨어 각 작업을 어떻게 수행하느냐를 정의한 것이다.
나. 방법론은 소프트웨어개발 조직이 자유로이 선택할 수 있으며 프로세스의 구현이라고 생각할 수 있다.
다. 방법론은 개발 패러다임에 의해 좌우되지 않는다.
라. 소프트웨어 프로세스는 방법론에 따라 결정된다.
1가, 나
2가, 다
3가, 다, 라
4나, 다, 라
정답 및 해설

옳지 않은 서술은 가, 다, 라이다.

프로세스는 소프트웨어 개발에서 무엇을 해야 하는지 작업과 순서를 정의한 틀이고, 방법론은 그 작업을 어떻게 수행할지 구체화한 것으로 프로세스의 구현에 해당한다.

  • 가: 작업을 어떻게 수행하는지 정의하는 것은 방법론이므로 틀렸다.
  • 나: 방법론은 조직이 상황에 맞게 선택할 수 있는 프로세스의 구현이므로 옳다.
  • 다: 방법론은 구조적·정보공학·객체지향처럼 개발 패러다임에 따라 달라지므로 틀렸다.
  • 라: 방법론이 프로세스를 구현하는 관계이므로, 프로세스가 방법론에 따라 결정된다는 설명은 틀렸다.
문제 4
다음 중 소프트웨어개발 계획 단계에서 도출해야 할 중요한 2가지 요소로 가장 올바른 것은?
1비용과 일정
2시간과 일정
3자원과 도구
4비용과 자원
정답 및 해설

계획 단계에서 도출해야 할 핵심 요소는 비용과 일정이다.

프로젝트 계획은 규모를 추정해 그로부터 소요 비용과 개발 일정을 산정하는 것이 중심이며, 인력·자원 배분과 도구 선택은 이 두 값을 바탕으로 정해진다.

  • 시간과 일정은 사실상 같은 범주로 비용 측면이 빠져 있다.
  • 자원과 도구는 비용·일정이 산정된 뒤 결정되는 부수적 요소이다.
  • 비용과 자원 조합에는 계획의 또 다른 축인 일정이 빠져 있다.
문제 5
소프트웨어 개발 방법 중 UP(Unified Process) 개발 단계에 관련된 것으로 가장 올바르지 않은 것은?
1도입 단계(Inception phase)는 고객과의 커뮤니케이션을 통해 소프트웨어에 대한 비즈니스적 요구사항을 확인하고 개략적인 시스템 구조를 제안, 기초를 수립한다.
2정련 단계(Elaboration phase)는 도입 단계에서 도출된 예비 유스케이스를 구체화하며 구조 표현을 모델에 따라 확장한다.
3구축 단계(Construction phase)는 유스케이스에 따르는 소프트웨어 컴포넌트를 개발하고 각 컴포넌트의 단위 테스트를 설계 및 수행한다.
4전이 단계(Transition phase)는 사용자에게 전달하기 전 내부 테스트의 마지막 단계로써 통합 소프트웨어의 기능 검증 및 다음 단계에서의 사용자 피드백을 실시하기 위한 준비를 수행한다.
정답 및 해설

옳지 않은 설명은 전이 단계를 사용자 전달 전 내부 테스트의 마지막 단계로 본 내용이다.

전이 단계는 완성된 소프트웨어를 사용자 환경에 배포하고 베타 테스트와 사용자 피드백을 반영하는 단계로, 내부 테스트가 아니라 사용자에게 넘겨주는 과정이다.

  • 도입 단계는 비즈니스 요구사항과 범위를 확인하고 개략적 아키텍처를 제안한다.
  • 정련 단계는 예비 유스케이스를 구체화하고 아키텍처 모델을 확장·확정한다.
  • 구축 단계는 유스케이스에 따라 컴포넌트를 개발하고 단위 테스트를 수행한다.
문제 6
애자일 소프트웨어 개발 방법에 관련된 설명으로 가장 올바르지 않은 것은?
1XP(eXtreme Programming)에서 고객은 개발팀의 일부이고 다른 팀원들과 시나리오에 대해 토론한다.
2스크럼(Scrum) 프로세스는 계략적인 계획과 구조설계, 스프린트(Sprint) 사이클, 프로젝트 마감 단계를 가진다.
3적응적 소프트웨어 개발(ASD, Adaptive Software Development)은 추측(Speculation), 분할(Decomposition), 학습(Learning) 세 가지 단계의 생명주기를 정의하였다.
4소프트웨어의 요구사항은 프로젝트 수행 중에 변화할 수 있으며, 고객의 요구사항에 적극 대응하여 반영 개발한다.
정답 및 해설

옳지 않은 설명은 적응적 소프트웨어 개발(ASD)의 생명주기에 분할 단계를 넣은 내용이다.

ASD의 생명주기는 추측(Speculation)·협업(Collaboration)·학습(Learning) 세 단계로 구성되며, 분할(Decomposition) 단계는 없다.

  • XP는 고객이 개발팀에 상주하며 사용자 스토리와 시나리오를 함께 논의한다.
  • 스크럼은 개략적 계획과 아키텍처 설계, 반복되는 스프린트 사이클, 프로젝트 마감 단계로 진행된다.
  • 애자일은 요구사항 변화를 전제로 하고 고객 요구에 적극 대응해 반영한다.
문제 7
다음 중 기능 점수(Function Point) 산출을 위한 항목으로 올바른 서술을 모두 고른 것은?
가. 외부 입력(External Input) : 내부 파일의 내용에 영향을 주는 사용자 데이터 또는 제어입력을 트랜잭션 단위로 카운트한다.
나. 외부 조회(External Inquiry) : 계산 통계 그래프 최종 보고서 등 소프트웨어 외부 출력되는 데이터 제공을 카운트한다.
다. 내부 논리 파일(Internal Logical File) : 소프트웨어에 의해 생성, 사용, 관리되는 파일을 포함, 시스템에 존재하는 사용자 데이터 및 제어 정보 그룹을 카운트한다.
라. 외부 인터페이스 파일(External Interface File) : 소프트웨어 시스템 사이에 전달되거나 공유된 파일을 카운트한다.
1가, 다
2가, 다, 라
3나, 다, 라
4가, 나, 다, 라
정답 및 해설

옳은 서술은 외부 입력, 내부 논리 파일, 외부 인터페이스 파일에 대한 설명이다.

나 항목이 설명한 계산·통계·그래프·보고서처럼 가공된 데이터를 밖으로 내보내는 것은 외부 출력(EO)이고, 외부 조회(EQ)는 가공 없이 입력에 대한 단순 조회 결과를 돌려주는 트랜잭션이다.

  • 외부 입력은 내부 파일을 변경하는 사용자 데이터·제어 입력을 트랜잭션 단위로 센다.
  • 내부 논리 파일은 시스템 내부에서 생성·유지·관리되는 논리적 데이터 그룹이다.
  • 외부 인터페이스 파일은 다른 시스템이 관리하며 이 시스템이 참조·공유하는 데이터 그룹이다.
문제 8
다음 보기 중 COCOMO 모델의 프로젝트 유형을 모두 고른 것은?
가. 조직형(Organic)
나. 반분리형(Semi-detached)
다. 혼합형(Mixed)
라. 내장형(Embedded)
1가,다
2나,다,라
3가,나,라
4가,나,다,라
정답 및 해설

COCOMO의 프로젝트 유형은 조직형·반분리형·내장형 세 가지이다.

조직형(Organic)은 소규모 일반 업무용, 반분리형(Semi-detached)은 중간 규모, 내장형(Embedded)은 하드웨어와 밀접한 대규모 시스템으로 규모와 복잡도에 따라 구분한다.

혼합형(Mixed)은 COCOMO의 프로젝트 유형에 없다.

문제 9
다음은 어떤 소프트웨어 프로젝트를 구성하는 선행 작업과 소요기간을 계획한 표이다. 하지만 실제 작업에서 T4의 소요기간이 3일 추가되어 5일이 되었다. 이로 인하여 이 프로젝트가 지연된 총 일수는?
작업T1T2T3T4T5T6T7T8T9종료
계획소요
기간(일)
14323434
선행작업---T1
T2
T2
T3
T3
T4
T4
T5
T1
T5
T6
T7
T8
T9
1지연없음
21일
32일
43일
정답 및 해설

T4가 3일 늘어난 결과 프로젝트는 2일 지연된다.

계획 기준 가장 빠른 완료 시각: T1=1, T2=4, T3=3, T4=4+2=6, T5=4+3=7, T6=6+4=10, T7=7+3=10, T8=7+4=11 이므로 T9는 11일째에 시작한다.

T4가 5일이 되면 T4=4+5=9, T6=9+4=13, T7=9+3=12, T8=11 이 되어 T9는 13일째에 시작한다.

T9 시작이 11일에서 13일로 밀리므로 여유 1일을 제외한 2일만큼 전체 일정이 늦어진다.

문제 10
Java 프로그래밍 언어에서 특정 클래스 X의 속성에는 접근 수식자를 명기하지 않거나 private, public, protected로 선언할 수 있다. 다음 중 이에 대한 서술로 가장 올바르지 않은 것은?
1접근 범위는 private, protected, 수식자를 명기하지 않음, public 순으로 확대된다.
2protected로 선언하였을 경우 X로부터 상속받은 다른 패키지의 클래스에서 접근 가능하다.
3private로 선언하였을 경우 동일 패키지의 동일 클래스에서 접근 가능하다.
4public으로 선언하였을 경우 다른 패키지의 클래스에서 접근 가능하다.
정답 및 해설

옳지 않은 서술은 접근 범위가 private, protected, 수식자 생략, public 순으로 확대된다는 내용이다.

Java의 접근 범위는 private < 수식자 생략(default) < protected < public 순으로 넓어지며, default는 같은 패키지까지, protected는 같은 패키지에 더해 다른 패키지의 하위 클래스까지 허용한다.

  • protected 멤버는 다른 패키지에 있어도 X를 상속한 클래스에서 접근할 수 있다.
  • private 멤버는 선언된 그 클래스 내부에서만 접근할 수 있다.
  • public 멤버는 다른 패키지의 어떤 클래스에서도 접근할 수 있다.
문제 11
다음 보기에서 소프트웨어 비용 산출에 있어 하향식 산정 방법으로 가장 올바른 것을 모두 고른 것은?
가. 원시코드 라인(LOC) 수 산정기법
나. 델파이 산정기법
다. COCOMO 산정기법
라. 기능점수 산정기법
마. 전문가 판단 산정기법
1가, 나
2나, 마
3나, 라, 마
4다, 라, 마
정답 및 해설

하향식 산정 방법은 델파이 기법과 전문가 판단 기법이다.

하향식 산정은 과거 경험이 있는 전문가가 프로젝트 전체 비용을 먼저 추정하는 방식이고, 상향식 산정은 작업 단위나 규모 지표를 세부적으로 측정해 합산하는 방식이다.

  • LOC 기법은 원시 코드 라인 수를 추정해 비용을 계산하는 상향식 기법이다.
  • COCOMO는 LOC 기반 규모에 수식을 적용하는 상향식 기법이다.
  • 기능점수 기법은 기능 요소를 세어 규모를 산출하는 상향식 기법이다.
문제 12
다음 CMMi 소프트웨어 프로세스 개선 방식 중에서 단계적(Staged) 모델의 특징으로 가장 올바른 핵심 내용들을 모두 고른 것은?
가. 소프트웨어 CMM모델에 적합하며 1부터 5까지의 성숙도 수준을 할당한다.
나. 프로세스의 개선은 모델의 낮은 수준에서 높은 수준으로 이동하여 달성한다.
다. 조직간 비교를 가능하게 하는 단일 등급 체계를 제공한다.
라. 자신의 필요와 요구사항에 따라 조직을 개선하기 위한 프로세스를 선택할 수 있다.
마. 소프트웨어 SPICE 모델에 적합하며 24개의 프로세스 영역으로 분류한다.
1가, 나, 다
2가, 다, 라
3가, 나, 다, 라
4나, 다, 라, 마
정답 및 해설

단계적(Staged) 모델의 특징은 가, 나, 다이다.

단계적 모델은 조직 전체에 1~5 성숙도 수준을 부여해 낮은 수준에서 높은 수준으로 차례로 올라가며 개선하고, 단일 등급으로 조직 간 비교가 가능하다.

  • 개선할 프로세스 영역을 조직이 필요에 따라 선택하는 것은 연속적(Continuous) 모델의 특징이다.
  • SPICE와 유사하게 프로세스 영역별 능력 수준을 평가하는 방식 역시 연속적 모델에 해당한다.
문제 13
고장 간 평균 시간(MTBF, Mean Time Between Failures)이 250시간이고 평균 수리 시간(MTTR, Mean Time To Repair)이 40시간인 소프트웨어를 개선하여 평균 수리 시간은 유지하였으나, 평균 가동 시간(MTTF, Mean Time To Failure)은 380시간으로 개선하였다. 개선 전과 개선 후의 각각의 가용성(Availability)은? (단, 소수점 이하에서 반올림한다)
184%, 90%
286%, 90%
384%, 89%
486%, 89%
정답 및 해설

가용성은 개선 전 84%, 개선 후 90%이다.

가용성 = 가동 시간 / 전체 시간이며, MTBF는 MTTF와 MTTR의 합이다.
A=MTTFMTTF+MTTR=MTTFMTBFA=\dfrac{MTTF}{MTTF+MTTR}=\dfrac{MTTF}{MTBF}

개선 전: MTTF = 250 − 40 = 210시간
A=210250=0.84A=\dfrac{210}{250}=0.84 → 84%

개선 후: MTTF = 380시간, MTTR = 40시간
A=380380+40≈0.905A=\dfrac{380}{380+40}\approx 0.905 → 반올림하여 90%

문제 14
소프트웨어 요구추출 방법과 그 특징에 대한 설명으로 가장 올바르지 않은 것은?
1관찰 - 사용자의 업무를 관찰하여 메모
2인터뷰 - 당사자를 만나 준비된 질문, 대답 및 경청
3브레인스토밍 - 이해당사자들이 다양한 아이디어 토론
4유스케이스 분석 - 시스템의 내부 기능 파악
정답 및 해설

옳지 않은 설명은 유스케이스 분석이 시스템의 내부 기능을 파악한다는 내용이다.

유스케이스 분석은 액터와 시스템 사이의 상호작용을 사용자(외부) 관점에서 기술해 시스템이 제공할 기능을 도출하는 방법으로, 내부 구현을 다루지 않는다.

  • 관찰은 사용자의 실제 업무 수행을 지켜보며 기록하는 방법이다.
  • 인터뷰는 이해관계자를 직접 만나 준비된 질문으로 요구를 듣는 방법이다.
  • 브레인스토밍은 이해관계자들이 자유롭게 아이디어를 내고 토론하는 방법이다.
문제 15
ISO/IEC 25010 소프트웨어 품질 특성 설명으로 가장 올바르지 않은 것은?
1ISO/IEC 25010으로 개정하는데 ISO/IEC 14598 표준안이 포함되었다.
2기존 ISO/IEC 9126에서 추가된 주특성은 보안성, 호환성이다.
3주특성에 따른 부특성도 27개에서 31개로 증가하였다.
4기존 ISO/IEC 9126의 주특성이 6개에서 8개로 증가하였다.
정답 및 해설

옳지 않은 설명은 ISO/IEC 25010으로 개정하면서 ISO/IEC 14598이 포함되었다는 내용이다.

ISO/IEC 9126(품질 모델)과 14598(평가 절차)을 통합·정비한 것은 ISO/IEC 25000 SQuaRE 시리즈이며, 25010은 그중 9126의 품질 모델을 대체한 품질 모델 표준이다.

  • 25010에서는 보안성과 호환성이 새로운 주특성으로 추가되었다.
  • 주특성은 기존 6개에서 8개로 늘었다.
  • 주특성 확대와 함께 부특성도 세분화되어 그 수가 늘었다.
문제 16
다음 보기에서 컴포넌트 기반 개발방법론에 대한 설명으로 올바른 것을 모두 고른 것은?
가. 기존 방법론에 비해 소프트웨어 개발 기간을 단축시킨다.
나. 컴포넌트 통합을 위해 표준 인터페이스가 제공되므로 미들웨어를 지원하지 않는다.
다. 컴포넌트는 개발자에게 다른 컴포넌트 및 모듈들과 상호작용하기 위해 인터페이스를 제공한다.
라. COTS(Component Off-The-Shelf)는 외부에서 구입하는 상용컴포넌트이다.
1가, 라
2가, 나, 다
3가, 다, 라
4나, 다, 라
정답 및 해설

컴포넌트 기반 개발방법론(CBD)에 대한 옳은 설명은 가, 다, 라이다.

CBD는 검증된 컴포넌트를 재사용·조립하므로 개발 기간이 단축되며, 컴포넌트는 인터페이스를 통해 다른 컴포넌트·모듈과 상호작용하고, 외부에서 구입하는 상용 컴포넌트(COTS)도 활용한다.

나는 틀렸다. 컴포넌트 통합은 CORBA, EJB, COM/DCOM 같은 미들웨어의 지원을 받아 이루어진다.

문제 17
다음 중 기능적 요구사항과 비기능적 요구사항을 가장 올바르게 분류한 것은?
가. 사용자 인터페이스의 버튼은 하단 중앙에 위치한다.
나. 검색 버튼을 누르면 결과는 3초 이내 표시된다.
다. 보안성에 대한 요구 사양을 만족시켜야 한다.
라. 사용자 입력값에 대한 범위와 단위를 설정한다.
마. 사용자의 권한에 따른 분류를 설정하여 구분한다.
바. 가용성(Availability)은 최소 90% 이상을 보장한다.
기능적 요구사항 / 비기능적 요구사항
1기능적 요구사항: 가, 나, 라 / 비기능적 요구사항: 다, 마, 바
2기능적 요구사항: 가, 라, 마 / 비기능적 요구사항: 나, 다, 바
3기능적 요구사항: 나, 다, 마 / 비기능적 요구사항: 가, 라, 바
4기능적 요구사항: 다, 라, 마 / 비기능적 요구사항: 가, 나, 바
정답 및 해설

올바른 분류는 기능적 요구사항이 가, 라, 마, 비기능적 요구사항이 나, 다, 바이다.

비기능적 요구사항은 시스템이 무엇을 하느냐가 아니라 어떤 품질 수준으로 동작하느냐에 관한 제약으로, 응답 시간(성능)·보안성·가용성이 대표적이다.

  • 3초 이내 결과 표시는 성능 요구이므로 기능적 요구사항으로 분류한 조합은 틀렸다.
  • 보안성 요구 사양 만족은 품질 특성이므로 기능적 요구사항으로 분류한 조합은 틀렸다.
  • 입력값의 범위·단위 설정과 권한별 분류 설정은 시스템이 수행할 기능이므로 비기능적 요구사항에 넣은 조합은 틀렸다.
문제 18
다음 중 모델링에 관련된 올바른 설명을 모두 고른 것은?
가. 절차 중심 방법은 데이터의 구조와 이를 이용한 함수들의 집합으로 구성된다.
나. 객체 지향 방법은 객체에 데이터와 이에 대한 함수를 모아 놓은 것이다.
다. 클래스는 각각의 개체들이 갖는 속성과 연산을 정의하는 템플릿이다.
라. 캡슐화는 정보은닉(Information hiding)으로 오퍼레이션과 속성을 외부에 노출되지 않게 할 수 있다.
마. 다중 상속(Multiple inheritance)은 여러 클래스의 메소드를 상속할 수 있는 기능으로, 객체지향 언어의 핵심 요소이다.
바. 다형성(Polymorphism)은 동일한 명칭의 메소드로 여러 클래스에 정의하여 객체에 따라 다른 처리를 가능하게 한다.
1가, 나, 다, 라
2나, 다, 라, 마, 바
3나, 라, 마, 바
4가, 나, 다, 라, 바
정답 및 해설

모델링에 관한 옳은 설명은 가, 나, 다, 라, 바이다.

마는 틀렸다. 다중 상속은 이름 충돌 등 복잡성 문제로 Java처럼 지원하지 않는 언어도 많아 객체지향의 핵심 요소로 보지 않으며, 핵심 요소는 캡슐화·상속·다형성·추상화이다.

  • 절차 중심 방법은 데이터 구조와 이를 처리하는 함수의 집합으로 구성된다.
  • 객체 지향 방법은 객체 안에 데이터와 그 데이터를 다루는 함수를 함께 묶는다.
  • 클래스는 객체들이 공통으로 갖는 속성과 연산을 정의한 템플릿이다.
  • 캡슐화와 정보은닉으로 속성·오퍼레이션을 외부에 감출 수 있고, 다형성은 같은 이름의 메소드가 객체에 따라 다르게 동작하게 한다.
문제 19
다음 중 설계원칙에 대한 올바른 설명을 모두 고른 것은?
가. 단일 책임(Single responsibility) 원칙은 한 클래스는 하나의 책임을 갖도록 설계함을 의미한다.
나. 리스코프 치환(Liskov substitution) 원칙은 상위 클래스가 사용된 곳을 상속받은 하위 클래스로 대체하여도 문제가 발생하지 않도록 하는 것이다.
다. 개방 폐쇄(Open-closed) 원칙은 클래스의 공통 기본기능을 변경하지 않도록 하면서 새로운 기능은 확장 사용하는 것이다.
라. 인터페이스 분리(Interface segregation) 원칙은 서로 다른 성격의 인터페이스를 분리, 클라이언트 쪽에서 여러 인터페이스를 갖도록 하는 것이다.
마. 의존 관계 역전(Dependency inversion) 원칙은 추상 클래스(Abstraction class)가 저수준의 구체적 클래스에 의존하도록 설계하는 원칙을 의미한다.
1가, 나, 다, 라
2가, 나, 다
3가, 나. 라, 마
4가, 다, 라
정답 및 해설

설계원칙에 대한 옳은 설명은 가, 나, 다, 라이다.

마는 틀렸다. 의존 관계 역전 원칙은 고수준 모듈과 저수준 모듈이 모두 추상화에 의존해야 하며, 추상화가 구체적 클래스에 의존해서는 안 된다는 원칙이다.

  • 단일 책임 원칙은 한 클래스가 하나의 책임만 갖도록 한다.
  • 리스코프 치환 원칙은 상위 타입 자리에 하위 타입을 넣어도 프로그램이 올바르게 동작해야 한다는 원칙이다.
  • 개방 폐쇄 원칙은 기존 코드는 수정하지 않고 확장으로 새 기능을 추가하도록 한다.
  • 인터페이스 분리 원칙은 범용 인터페이스 하나 대신 클라이언트별로 분리된 작은 인터페이스를 쓰도록 한다.
문제 20
다음 소프트웨어 모듈에 관련된 내용에서 결합도가 약한 것으로부터 강해지는 순서로 가장 올바르게 나열한 것은?
가. 전역 변수 데이터를 모듈간 공유한다.
나. 모듈의 호출에서 레코드나 배열, 구조체의 전달이 이루어진다.
다. 모듈의 호출에서 매개변수를 통한 값의 전달이 이루어진다.
라. 호출하는 모듈의 매개변수 값으로 호출되는 모듈의 내부 제어 흐름이 결정된다.
마. 호출하는 모듈이 호출되는 모듈의 내부 데이터 값을 수정한다.
1다 → 라 → 나 → 마 → 가
2다 → 나 → 라 → 마 → 가
3다 → 라 → 나 → 가 → 마
4다 → 나 → 라 → 가 → 마
정답 및 해설

결합도가 약한 것부터 나열하면 다 → 나 → 라 → 가 → 마이다.

결합도는 자료 < 스탬프 < 제어 < 외부 < 공통 < 내용 순으로 강해진다.

  • 다: 매개변수로 값만 전달하는 자료 결합도로 가장 약하다.
  • 나: 레코드·배열·구조체를 전달하는 스탬프 결합도이다.
  • 라: 전달한 값으로 상대 모듈의 내부 제어 흐름을 결정하는 제어 결합도이다.
  • 가: 전역 변수를 공유하는 공통 결합도이다.
  • 마: 다른 모듈의 내부 데이터를 직접 수정하는 내용 결합도로 가장 강하다.
문제 21
소프트웨어 개발을 위한 SDLC(Software Development Life Cycle)의 요구사항 분석 단계에서 작성하는 산출물 중 가장 올바르지 않은 것은?
1사용자 스토리(User story)
2프로세스 분해 다이어그램(Process decomposition diagram)
3유스케이스 다이어그램(Use case diagram)
4데이터 플로우 다이어그램(Data flow diagram)
정답 및 해설

요구사항 분석 단계의 산출물로 보기 어려운 것은 프로세스 분해 다이어그램이다.

요구사항 분석 단계에서는 사용자가 시스템에서 무엇을 원하는지를 사용자·외부 관점에서 표현하는 산출물을 만든다. 프로세스 분해 다이어그램은 시스템 기능을 상위에서 하위로 계층적으로 쪼개 처리 단위를 구조화하는 도구로, 이 문항에서는 요구 분석보다 설계 쪽 산출물로 본다.

  • 사용자 스토리는 애자일에서 사용자 관점의 요구를 짧은 문장으로 기술한 요구사항 산출물이다.
  • 유스케이스 다이어그램은 액터와 시스템의 상호작용으로 기능 요구사항을 표현한다.
  • 데이터 플로우 다이어그램은 구조적 분석에서 자료의 흐름과 처리를 모델링하는 대표적 분석 도구이다.
문제 22
다음 C프로그램의 함수 TaxDeduct()에서 나타나는 응집에 대한 설명으로 가장 올바른 것은?
int TaxDeduct(int ftype, int n)
{
int i;
i = 0;
switch (ftype) {
case 1: // 미성년 부양가족 인원당 200,000 공제
i = n * 200000;
break;
case 2: // 출산 특별공제 신생아당 1,000,000 공제
i = n * 1000000;
break;
case 3: // 미혼청년공제 500,000 n 해당없음
i = 500000;
break;
}
i = i + 50000; // 공통기본공제 50,000 추가
return i;
}
1순차적 응집
2논리적 응집
3시간적 응집
4절차적 응집
정답 및 해설

TaxDeduct()는 논리적 응집을 보인다.

매개변수 ftype 값에 따라 switch 문으로 미성년 부양가족·출산·미혼청년 공제처럼 유사한 성격의 서로 다른 처리 중 하나를 골라 수행하므로, 논리적으로 비슷한 기능을 한 모듈에 모아 둔 형태이다.

  • 순차적 응집은 한 처리의 출력이 다음 처리의 입력으로 이어지는 경우이다.
  • 시간적 응집은 초기화처럼 같은 시점에 실행될 처리들을 모은 경우이다.
  • 절차적 응집은 정해진 순서에 따라 여러 처리를 차례로 수행하는 경우이다.
문제 23
소프트웨어 테스트에 대한 설명으로 가장 올바르지 않은 것은?
1테스트 오라클은 테스트 결과의 판단 기준이다.
2휴리스틱 오라클은 모든 임의의 입력값에 대한 발생 오류의 결과를 제공하는 방법이다.
3상태 기반 테스트는 상태와 전이(State & transition)를 중점적으로 테스트하는 방법이다.
4테스트 하니스는 일부 기능만 테스트하기 위하여 소프트웨어를 변경하는 방법이다.
정답 및 해설

옳지 않은 설명은 휴리스틱 오라클이 모든 임의 입력값에 대한 결과를 제공한다는 내용이다.

모든 입력값에 대해 기대 결과를 제공하는 것은 참(True) 오라클이고, 휴리스틱 오라클은 특정 입력값에만 올바른 결과를 제공하고 나머지는 추정(휴리스틱)으로 처리한다.

  • 테스트 오라클은 테스트 결과가 맞는지 판단하는 기준이다.
  • 상태 기반 테스트는 상태와 상태 전이를 중심으로 테스트 케이스를 설계한다.
  • 테스트 하니스는 드라이버·스텁 등을 갖춰 소프트웨어의 일부만 떼어 테스트할 수 있게 하는 환경이다.
문제 24
구조적 분석과 설계에서 많이 활용되는 자료 흐름도(Data flow diagram)의 구성 요소로 가장 올바르지 않은 것은?
1데이터 저장소(Data store)
2외부 엔터티(External entity)
3프로세스(Process)
4의사결정(Decision)
정답 및 해설

자료 흐름도의 구성 요소가 아닌 것은 의사결정(Decision)이다.

자료 흐름도는 프로세스, 자료 흐름, 자료 저장소, 외부 엔터티(단말)로 구성되며, 제어 흐름을 다루지 않으므로 조건 분기 기호가 없다.

  • 데이터 저장소는 자료가 보관되는 곳을 나타내는 구성 요소이다.
  • 외부 엔터티는 시스템 밖에서 자료를 주고받는 대상을 나타낸다.
  • 프로세스는 입력 자료를 출력 자료로 변환하는 처리를 나타낸다.

의사결정 기호는 순서도나 활동 다이어그램에서 쓰인다.

문제 25
다음 보기에서 소프트웨어개발 분석, 설계 단계 중 같은 단계에서 사용되는 다이어그램들을 모두 고른 것은?
가. 자료 흐름도 - 시퀀스 다이어그램
나. 자료 흐름도 - 유스케이스 다이어그램
다. 구조적 도표 - 클래스 다이어그램
라. 구조적 도표 - 유스케이스 다이어그램
1가, 나
2나, 다
3가, 나, 다
4나, 다, 라
정답 및 해설

같은 단계에서 사용되는 짝은 나, 다이다.

자료 흐름도와 유스케이스 다이어그램은 분석 단계, 구조적 도표(구조도)와 클래스 다이어그램은 설계 단계에서 쓰여 각각 같은 단계에 속한다.

  • 가: 자료 흐름도는 분석 단계, 시퀀스 다이어그램은 객체 간 메시지를 구체화하는 설계 단계 도구이다.
  • 라: 구조적 도표는 설계 단계, 유스케이스 다이어그램은 분석 단계 도구이다.
문제 26
다음 보기에서 소프트웨어 아키텍쳐 MVC의 특징을 모두 고른 것은?
가. 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있다.
나. 컴포넌트의 결합이 강해 다른 부분에 영향을 주지 않고 수정할 수 없다.
다. 하나의 모델을 위하여 다수의 다른 뷰를 쉽게 제공할 수 있다.
라. 응용프로그램은 모델-뷰-컨트롤러 세 가지 구성 요소로 이루어진다.
1가, 나
2가, 다
3가, 나, 다
4가, 다, 라
정답 및 해설

MVC의 특징은 가, 다, 라이다.

MVC는 애플리케이션을 모델·뷰·컨트롤러로 나누어 비즈니스 로직과 사용자 인터페이스를 분리하므로, 한쪽을 고쳐도 다른 쪽에 영향이 적고 하나의 모델에 여러 뷰를 붙일 수 있다.

나는 틀렸다. MVC는 구성 요소 간 결합을 느슨하게 하려는 구조이다.

문제 27
다음 보기에서 객체간의 상호 작용을 설명하고 있는 동적 UML다이어그램을 모두 고른 것은?
가. 시퀀스 다이어그램
나. 배치 다이어그램
다. 타이밍 다이어그램
라. 유스케이스 다이어그램
1가, 나
2가, 다
3가, 나, 다
4가, 다, 라
정답 및 해설

동적 UML 다이어그램은 가, 다, 라이다.

UML 2에서 시퀀스·타이밍 다이어그램은 상호작용 다이어그램이고, 유스케이스 다이어그램도 액터와 시스템의 상호작용을 다루는 행위(동적) 다이어그램에 속한다.

나는 틀렸다. 배치 다이어그램은 노드와 산출물의 물리적 배치를 나타내는 구조(정적) 다이어그램이다.

문제 28
시퀀스 다이어그램(Sequence diagram)에 대한 설명으로 가장 올바르지 않은 것은?
1유스케이스에 관련된 추가 객체(Participating object)를 찾을 수 있다.
2다이어그램은 객체, 메시지, 활성막대, 프레임 등으로 구성된다.
3시스템의 동작을 정형화하고 객체들의 메시지 교환을 울타리 형태로 시각화한다.
4제어 흐름, 동기화, 병렬 수행 등의 기능을 분석할 수 있다.
정답 및 해설

옳지 않은 설명은 시퀀스 다이어그램으로 제어 흐름·동기화·병렬 수행을 분석한다는 내용이다.

시퀀스 다이어그램은 객체 간 메시지 교환을 시간 순서로 보여 주는 데 초점이 있고, 제어 흐름과 동기화·병렬 처리를 분석하는 것은 활동 다이어그램의 주된 용도이다.

  • 유스케이스 시나리오를 시퀀스로 그리다 보면 참여하는 객체를 추가로 찾을 수 있다.
  • 객체(생명선), 메시지, 활성 막대, 프레임 등으로 구성된다.
  • 객체들의 생명선이 나란히 서고 그 사이로 메시지가 오가는 울타리 형태로 동작을 시각화한다.
문제 29
다음 중 유지보수에 대한 서술로 가장 올바르지 않은 것은?
1수정 유지보수(Corrective maintenance) : 소프트웨어 설치 후에 발견된 결함을 수정하여 바로잡기 위해서 하는 유지보수
2적응 유지보수(Adaptive maintenance) : 소프트웨어 설치 후에 이루어지는 환경 변화에 대응하기 위하여 실시하는 유지보수
3완전 유지보수(Perfective maintenance) : 소프트웨어 설치 후에 다양한 대상 시스템에 동작성을 시험, 완전성을 확인하기 위하여 실시하는 유지보수
4예방 유지보수(Preventive maintenance) : 시스템의 결함을 예방하며 잠재적 문제점을 보완하기 위하여 실시하는 유지보수
정답 및 해설

옳지 않은 서술은 완전 유지보수를 동작성 시험과 완전성 확인으로 설명한 내용이다.

완전(완전화) 유지보수는 사용자의 요구에 따라 새 기능 추가나 성능 개선을 하는 유지보수로, 유지보수 활동 중 비중이 가장 크다.

  • 수정 유지보수는 운영 중 발견된 결함을 고친다.
  • 적응 유지보수는 하드웨어·운영체제 등 환경 변화에 맞춰 수정한다.
  • 예방 유지보수는 잠재적 문제를 미리 찾아 보완한다.
문제 30
소프트웨어 인수테스트에 대한 설명으로 가장 올바르지 않은 것은?
1인수테스트는 크게 알파테스트와 베타테스트로 구분한다.
2알파테스트는 인수자가 설치될 인수시스템 환경에서 테스트한다.
3베타테스트는 인수자가 다양한 외부 컴퓨팅 환경에서 테스트한다.
4소프트웨어 사용자가 시험하는 매우 현실적인 테스트이다.
정답 및 해설

옳지 않은 설명은 알파테스트를 인수자가 설치될 인수시스템 환경에서 수행한다고 한 내용이다.

알파테스트는 사용자가 개발자의 환경(개발 장소)에서 개발자와 함께 수행하는 통제된 테스트이고, 실제 사용 환경에서 개발자 없이 수행하는 것은 베타테스트이다.

  • 인수테스트는 크게 알파테스트와 베타테스트로 나뉜다.
  • 베타테스트는 다수 사용자가 각자의 실제 환경에서 수행한다.
  • 인수테스트는 실제 사용자가 참여하는 현실적인 테스트이다.
문제 31
다음 보기에서 설명하는 테스트의 종류로 가장 올바른 것은?
시스템을 변경한 후 변경된 부분이 기존 시스템에 부작용을 일으키지 않는지를 조사하기 위해 이미 사용한 테스트 케이스를 재사용하여 실행하는 테스트
1스트레스(Stress) 테스트
2신뢰성(Reliability) 테스트
3회귀(Regression) 테스트
4인수(Acceptance) 테스트
정답 및 해설

설명하는 테스트는 회귀(Regression) 테스트이다.

회귀 테스트는 수정·변경 후 기존 기능에 새로운 오류(부작용)가 생기지 않았는지 확인하기 위해 이전 테스트 케이스를 다시 실행한다.

  • 스트레스 테스트는 한계를 넘는 부하를 가해 시스템의 견딤과 복구를 확인한다.
  • 신뢰성 테스트는 일정 기간 고장 없이 동작하는지를 확인한다.
  • 인수 테스트는 사용자가 요구사항 충족 여부를 확인해 인수를 결정한다.
문제 32
다음 소프트웨어 테스트 중 분류가 나머지와 다른 것은?
1직교 배열(Orthogonal array) 테스트
2자료 흐름(Data flow) 테스트
3페어와이즈 조합(Pairwise combination) 테스트
4결정 테이블(Decision table) 테스트
정답 및 해설

분류가 다른 것은 자료 흐름 테스트이다.

자료 흐름 테스트는 프로그램 내부에서 변수의 정의와 사용 위치를 추적하는 화이트박스 테스트이고, 나머지는 내부 구조를 보지 않고 입력 조합으로 케이스를 설계하는 블랙박스 테스트이다.

  • 직교 배열 테스트는 직교 배열표로 입력 조합을 균형 있게 줄이는 블랙박스 기법이다.
  • 페어와이즈 조합 테스트는 모든 변수 쌍의 조합을 최소 한 번씩 포함하는 블랙박스 기법이다.
  • 결정 테이블 테스트는 조건과 행동의 조합을 표로 정리해 케이스를 만드는 블랙박스 기법이다.
문제 33
다음 보기에서 소프트웨어 통합 테스트 방법으로 올바른 것을 모두 고른 것은?
가. 상향식(Bottom up) 통합 테스트
나. 연쇄식(Threads) 통합 테스트
다. 스모크(Smoke) 테스트
라. 스트레스(Stress) 테스트
마. 빅뱅(Big bang) 테스트
1가, 나, 다
2가, 다, 라
3가, 나, 다, 라
4가, 나, 다, 마
정답 및 해설

통합 테스트 방법은 상향식, 연쇄식, 스모크, 빅뱅이다.

통합 테스트는 모듈을 결합하면서 인터페이스 오류를 찾는 단계로, 한꺼번에 결합하는 빅뱅, 하위 모듈부터 결합하는 상향식, 기능 흐름(스레드) 단위로 결합하는 연쇄식, 빌드마다 핵심 기능을 빠르게 확인하는 스모크 테스트가 이에 쓰인다.

스트레스 테스트는 통합 방법이 아니라 과부하 상황을 점검하는 시스템 테스트의 한 종류이다.

문제 34
소프트웨어의 검증(Verification)과 확인(Validation)에 대한 설명으로 가장 올바른 것은?
1확인은 사용자 관점에서 설계명세서들을 점검하는 작업이다.
2검증과 확인은 모두 계획단계에서 명세서를 점검하는 작업이다.
3확인은 사용자 관점에서 발주자와 합의한 요구사항들을 점검하는 작업이다.
4검증은 개발자 관점에서 계획서를 점검하는 작업이다.
정답 및 해설

옳은 설명은 확인(Validation)이 사용자 관점에서 발주자와 합의한 요구사항을 점검하는 작업이라는 내용이다.

검증은 개발자 관점에서 제품을 올바르게 만들고 있는지(각 단계 산출물이 명세에 맞는지)를, 확인은 사용자 관점에서 올바른 제품을 만들었는지(요구사항을 충족하는지)를 점검한다.

  • 설계명세서와의 일치를 점검하는 것은 확인이 아니라 검증의 성격이다.
  • 검증과 확인은 계획 단계만이 아니라 개발 전 과정에 걸쳐 수행된다.
  • 검증은 계획서가 아니라 각 단계 산출물이 명세에 맞게 만들어졌는지를 점검한다.
문제 35
다음은 소프트웨어 개발에서 사용자 요구사항 개발 프로세스들이다. 순서대로 가장 올바르게 나열한 것은?
가. 요구사항 분석
나. 요구사항 검증
다. 요구사항 도출
라. 요구사항 명세
1다 - 가 - 라 - 나
2라 - 가 - 다 - 나
3다 - 라 - 가 - 나
4라 - 가 - 나 - 다
정답 및 해설

요구사항 개발 순서는 도출 → 분석 → 명세 → 검증이다.

먼저 이해관계자로부터 요구를 도출하고, 이를 분석해 충돌·누락을 정리한 뒤, 문서로 명세하고, 마지막으로 명세가 올바르고 완전한지 검증한다.

  • 명세를 맨 앞에 두는 순서는 무엇을 적을지 정해지기 전에 문서화하는 셈이라 틀렸다.
  • 분석을 명세 뒤에 두는 순서는 정리되지 않은 요구를 문서화하게 되어 틀렸다.
문제 36
역공학 관련 설명으로 가장 올바르지 않은 것은?
1코드만 남아있고 관련 문서가 존재하지 않을 때 적용하는 기술이다.
2역공학 도구가 필요하다.
3추출한 문서를 기반으로 시스템을 개선, 변경하는 작업이다.
4소스코드를 분석하여 이해하기 쉬운 다이어그램으로 변환한다.
정답 및 해설

옳지 않은 설명은 추출한 문서를 기반으로 시스템을 개선·변경하는 작업이라는 내용이다.

역공학은 기존 코드에서 설계 정보와 문서를 추출·복원해 이해하는 데까지이며, 이를 바탕으로 시스템을 개선·변경하는 것은 재구조화·재공학의 영역이다.

  • 문서 없이 코드만 남은 레거시 시스템을 이해할 때 주로 적용한다.
  • 코드 분석을 위해 역공학 도구가 필요하다.
  • 소스 코드를 분석해 구조도·다이어그램 등 이해하기 쉬운 형태로 변환한다.
문제 37
코드 스멜의 설명으로 가장 올바르지 않은 것은?
1명확히 주석문 처리가 되어 있는 프로그램
2중복된 로직을 가진 프로그램
3복잡한 조건문이 포함된 프로그램
4읽기 어려운 프로그램
정답 및 해설

코드 스멜이 아닌 것은 주석이 명확히 처리된 프로그램이다.

코드 스멜은 당장 오류는 아니지만 리팩터링이 필요함을 알려 주는 코드의 나쁜 징후로, 명확한 주석은 오히려 이해를 돕는 요소이다.

  • 중복된 로직은 대표적인 코드 스멜이다.
  • 복잡한 조건문은 분기 단순화나 다형성 적용이 필요한 스멜이다.
  • 읽기 어려운 코드는 유지보수성을 떨어뜨리는 스멜이다.
문제 38
소프트웨어 아키텍처 스타일에 대한 설명으로 가장 올바르게 짝지어진 것은?
1데이터 저장소(Repository): 사용자 인터페이스와 데이터 처리 로직을 독립적으로 분리하여 변경 영향을 줄인다.
2파이프 필터(Pipe and filter): 제어 대상이 되는 컴포넌트는 컨트롤러에 이벤트를 보내고 처리 명령을 받는다.
3클라이언트-서버: 클라이언트는 서버에 네트워크를 통한 서비스를 요청하고, 서버는 결과를 전송한다.
4계층형: 디스패처에 의해 트랜잭션을 하나씩 읽어 내용에 따라서 필요 처리로 연쇄된다.
정답 및 해설

올바르게 짝지어진 것은 클라이언트-서버 스타일이다.

클라이언트-서버 스타일은 클라이언트가 네트워크로 서비스를 요청하고 서버가 처리 결과를 돌려주는 구조이다.

  • 데이터 저장소 스타일은 여러 컴포넌트가 중앙의 공유 데이터를 읽고 쓰는 구조이며, UI와 처리 로직 분리는 MVC의 특징이다.
  • 파이프 필터 스타일은 데이터 스트림이 필터를 차례로 거치며 변환되는 구조로, 컨트롤러와 이벤트를 주고받는 구조가 아니다.
  • 계층형 스타일은 기능을 계층으로 나누어 각 계층이 바로 아래 계층의 서비스만 이용하는 구조로, 디스패처가 트랜잭션을 분배하는 구조가 아니다.
문제 39
다음 중 디자인 패턴(Design pattern)유형이 올바르게 분류되지 않은 것은?
1Command – Observer – Visitor – Iterator – Template method
2Bridge – Proxy – Facade – Adapter – Decorator
3Builder – Factory method – Prototype – Singleton – Abstract factory
4Flyweight – Composite – Memento – State – Mediator
정답 및 해설

올바르게 분류되지 않은 묶음은 Flyweight – Composite – Memento – State – Mediator이다.

이 묶음에서 Flyweight와 Composite는 구조 패턴이고, Memento·State·Mediator는 행위 패턴이어서 유형이 섞여 있다.

  • Command, Observer, Visitor, Iterator, Template method는 모두 행위 패턴이다.
  • Bridge, Proxy, Facade, Adapter, Decorator는 모두 구조 패턴이다.
  • Builder, Factory method, Prototype, Singleton, Abstract factory는 모두 생성 패턴이다.
문제 40
다음 내용에 부합하는 것으로 가장 올바른 것은?
- 전체 시스템을 여러 작은 단위 서비스로 분할한다.
- 단위 서비스는 독립적으로 실행 가능하다.
- 각 서비스의 유지보수와 배포는 개별적으로 처리 가능하다.
- 시스템 전체를 단일 서비스로 구성하는 모놀리식(Monolithic)과 상반된 방법이다.
1MSA(Microservice Architecture)
2ROA(Resource Oriented Architecture)
3MDA(Model Driven Architecture)
4Data-flow architecture
정답 및 해설

제시된 내용에 부합하는 것은 MSA(Microservice Architecture)이다.

MSA는 시스템을 독립 실행·배포가 가능한 작은 서비스 단위로 나누는 아키텍처로, 전체를 하나로 묶는 모놀리식과 대비된다.

  • ROA는 자원을 URI로 식별하고 REST 방식으로 다루는 자원 중심 아키텍처이다.
  • MDA는 플랫폼 독립 모델에서 코드를 생성하는 모델 중심 개발 방식이다.
  • Data-flow 아키텍처는 데이터가 처리 단계를 따라 흐르며 변환되는 구조이다.
경찰간부후보생 소프트웨어공학 기출문제모두CBT · moducbt.com
24년 1회차
총 40문항 · 객관식 · 정답·해설 포함
문제 1
다음 보기에서 소프트웨어공학이 등장하게 된 배경으로 올바른 것을 모두 고른 것은?
가. 소프트웨어 개발 인력 공급 과잉
나. 소프트웨어 개발 기간의 지연 및 개발 비용의 증가
다. 하드웨어 컴퓨터의 발전 속도 저하
라. 소프트웨어 유지보수의 어려움
1가, 나
2가, 다
3나, 다
4나, 라
정답 및 해설

소프트웨어공학이 등장한 배경은 개발 기간 지연·비용 증가와 유지보수의 어려움이다.

1960년대 후반 소프트웨어 규모와 복잡도가 커지면서 일정·예산 초과, 품질 저하, 유지보수 부담이 누적된 이른바 소프트웨어 위기가 체계적인 공학적 접근을 요구하게 되었다.

  • 개발 인력은 공급 과잉이 아니라 수요에 비해 부족했던 것이 위기의 한 원인이었다.
  • 하드웨어는 빠르게 발전했고, 이를 소프트웨어 생산성이 따라가지 못한 것이 문제였으므로 하드웨어 발전 속도 저하는 배경이 아니다.
문제 2
다음과 같은 특징을 갖고 있는 방법론으로 가장 올바른 것은?
가. 기업 업무 중심, 자료 중심, 도형 중심의 접근
나. 프로젝트계획, 개발운영 단계의 명확한 구조 기반 제시
다. CASE 도구 등 정보시스템 개발의 자동화 지향
라. 고객 지향적, 최신 정보 기술의 능동적 수용
1컴포넌트 기반 방법론
2정보공학 방법론
3객체지향 방법론
4애자일 방법론
정답 및 해설

제시된 특징을 가진 방법론은 정보공학 방법론이다.

정보공학 방법론은 기업 전체의 정보 전략 계획부터 분석·설계·구축까지 데이터 중심으로 단계를 구조화하고, ERD 등 도형 중심 표기와 CASE 도구를 활용한 개발 자동화를 지향한다.

  • 컴포넌트 기반 방법론은 재사용 가능한 컴포넌트를 조립해 개발하는 데 초점이 있다.
  • 객체지향 방법론은 데이터와 기능을 묶은 객체를 중심으로 모델링하며 자료 중심 접근과 구별된다.
  • 애자일 방법론은 문서와 단계 구조보다 짧은 반복과 변화 대응을 중시하므로 명확한 단계 구조 제시와 맞지 않는다.
문제 3
다음 보기에서 소프트웨어개발 프로세스와 방법론의 차이점으로 올바르지 않은 것을 모두 고른 것은?
가. 프로세스는 소프트웨어 각 작업을 어떻게 수행하느냐를 정의한 것이다.
나. 방법론은 소프트웨어개발 조직이 자유로이 선택할 수 있으며 프로세스의 구현이라고 생각할 수 있다.
다. 방법론은 개발 패러다임에 의해 좌우되지 않는다.
라. 소프트웨어 프로세스는 방법론에 따라 결정된다.
1가, 나
2가, 다
3가, 다, 라
4나, 다, 라
정답 및 해설

옳지 않은 서술은 가, 다, 라이다.

프로세스는 소프트웨어 개발에서 무엇을 해야 하는지 작업과 순서를 정의한 틀이고, 방법론은 그 작업을 어떻게 수행할지 구체화한 것으로 프로세스의 구현에 해당한다.

  • 가: 작업을 어떻게 수행하는지 정의하는 것은 방법론이므로 틀렸다.
  • 나: 방법론은 조직이 상황에 맞게 선택할 수 있는 프로세스의 구현이므로 옳다.
  • 다: 방법론은 구조적·정보공학·객체지향처럼 개발 패러다임에 따라 달라지므로 틀렸다.
  • 라: 방법론이 프로세스를 구현하는 관계이므로, 프로세스가 방법론에 따라 결정된다는 설명은 틀렸다.
문제 4
다음 중 소프트웨어개발 계획 단계에서 도출해야 할 중요한 2가지 요소로 가장 올바른 것은?
1비용과 일정
2시간과 일정
3자원과 도구
4비용과 자원
정답 및 해설

계획 단계에서 도출해야 할 핵심 요소는 비용과 일정이다.

프로젝트 계획은 규모를 추정해 그로부터 소요 비용과 개발 일정을 산정하는 것이 중심이며, 인력·자원 배분과 도구 선택은 이 두 값을 바탕으로 정해진다.

  • 시간과 일정은 사실상 같은 범주로 비용 측면이 빠져 있다.
  • 자원과 도구는 비용·일정이 산정된 뒤 결정되는 부수적 요소이다.
  • 비용과 자원 조합에는 계획의 또 다른 축인 일정이 빠져 있다.
문제 5
소프트웨어 개발 방법 중 UP(Unified Process) 개발 단계에 관련된 것으로 가장 올바르지 않은 것은?
1도입 단계(Inception phase)는 고객과의 커뮤니케이션을 통해 소프트웨어에 대한 비즈니스적 요구사항을 확인하고 개략적인 시스템 구조를 제안, 기초를 수립한다.
2정련 단계(Elaboration phase)는 도입 단계에서 도출된 예비 유스케이스를 구체화하며 구조 표현을 모델에 따라 확장한다.
3구축 단계(Construction phase)는 유스케이스에 따르는 소프트웨어 컴포넌트를 개발하고 각 컴포넌트의 단위 테스트를 설계 및 수행한다.
4전이 단계(Transition phase)는 사용자에게 전달하기 전 내부 테스트의 마지막 단계로써 통합 소프트웨어의 기능 검증 및 다음 단계에서의 사용자 피드백을 실시하기 위한 준비를 수행한다.
정답 및 해설

옳지 않은 설명은 전이 단계를 사용자 전달 전 내부 테스트의 마지막 단계로 본 내용이다.

전이 단계는 완성된 소프트웨어를 사용자 환경에 배포하고 베타 테스트와 사용자 피드백을 반영하는 단계로, 내부 테스트가 아니라 사용자에게 넘겨주는 과정이다.

  • 도입 단계는 비즈니스 요구사항과 범위를 확인하고 개략적 아키텍처를 제안한다.
  • 정련 단계는 예비 유스케이스를 구체화하고 아키텍처 모델을 확장·확정한다.
  • 구축 단계는 유스케이스에 따라 컴포넌트를 개발하고 단위 테스트를 수행한다.
문제 6
애자일 소프트웨어 개발 방법에 관련된 설명으로 가장 올바르지 않은 것은?
1XP(eXtreme Programming)에서 고객은 개발팀의 일부이고 다른 팀원들과 시나리오에 대해 토론한다.
2스크럼(Scrum) 프로세스는 계략적인 계획과 구조설계, 스프린트(Sprint) 사이클, 프로젝트 마감 단계를 가진다.
3적응적 소프트웨어 개발(ASD, Adaptive Software Development)은 추측(Speculation), 분할(Decomposition), 학습(Learning) 세 가지 단계의 생명주기를 정의하였다.
4소프트웨어의 요구사항은 프로젝트 수행 중에 변화할 수 있으며, 고객의 요구사항에 적극 대응하여 반영 개발한다.
정답 및 해설

옳지 않은 설명은 적응적 소프트웨어 개발(ASD)의 생명주기에 분할 단계를 넣은 내용이다.

ASD의 생명주기는 추측(Speculation)·협업(Collaboration)·학습(Learning) 세 단계로 구성되며, 분할(Decomposition) 단계는 없다.

  • XP는 고객이 개발팀에 상주하며 사용자 스토리와 시나리오를 함께 논의한다.
  • 스크럼은 개략적 계획과 아키텍처 설계, 반복되는 스프린트 사이클, 프로젝트 마감 단계로 진행된다.
  • 애자일은 요구사항 변화를 전제로 하고 고객 요구에 적극 대응해 반영한다.
문제 7
다음 중 기능 점수(Function Point) 산출을 위한 항목으로 올바른 서술을 모두 고른 것은?
가. 외부 입력(External Input) : 내부 파일의 내용에 영향을 주는 사용자 데이터 또는 제어입력을 트랜잭션 단위로 카운트한다.
나. 외부 조회(External Inquiry) : 계산 통계 그래프 최종 보고서 등 소프트웨어 외부 출력되는 데이터 제공을 카운트한다.
다. 내부 논리 파일(Internal Logical File) : 소프트웨어에 의해 생성, 사용, 관리되는 파일을 포함, 시스템에 존재하는 사용자 데이터 및 제어 정보 그룹을 카운트한다.
라. 외부 인터페이스 파일(External Interface File) : 소프트웨어 시스템 사이에 전달되거나 공유된 파일을 카운트한다.
1가, 다
2가, 다, 라
3나, 다, 라
4가, 나, 다, 라
정답 및 해설

옳은 서술은 외부 입력, 내부 논리 파일, 외부 인터페이스 파일에 대한 설명이다.

나 항목이 설명한 계산·통계·그래프·보고서처럼 가공된 데이터를 밖으로 내보내는 것은 외부 출력(EO)이고, 외부 조회(EQ)는 가공 없이 입력에 대한 단순 조회 결과를 돌려주는 트랜잭션이다.

  • 외부 입력은 내부 파일을 변경하는 사용자 데이터·제어 입력을 트랜잭션 단위로 센다.
  • 내부 논리 파일은 시스템 내부에서 생성·유지·관리되는 논리적 데이터 그룹이다.
  • 외부 인터페이스 파일은 다른 시스템이 관리하며 이 시스템이 참조·공유하는 데이터 그룹이다.
문제 8
다음 보기 중 COCOMO 모델의 프로젝트 유형을 모두 고른 것은?
가. 조직형(Organic)
나. 반분리형(Semi-detached)
다. 혼합형(Mixed)
라. 내장형(Embedded)
1가,다
2나,다,라
3가,나,라
4가,나,다,라
정답 및 해설

COCOMO의 프로젝트 유형은 조직형·반분리형·내장형 세 가지이다.

조직형(Organic)은 소규모 일반 업무용, 반분리형(Semi-detached)은 중간 규모, 내장형(Embedded)은 하드웨어와 밀접한 대규모 시스템으로 규모와 복잡도에 따라 구분한다.

혼합형(Mixed)은 COCOMO의 프로젝트 유형에 없다.

문제 9
다음은 어떤 소프트웨어 프로젝트를 구성하는 선행 작업과 소요기간을 계획한 표이다. 하지만 실제 작업에서 T4의 소요기간이 3일 추가되어 5일이 되었다. 이로 인하여 이 프로젝트가 지연된 총 일수는?
작업T1T2T3T4T5T6T7T8T9종료
계획소요
기간(일)
14323434
선행작업---T1
T2
T2
T3
T3
T4
T4
T5
T1
T5
T6
T7
T8
T9
1지연없음
21일
32일
43일
정답 및 해설

T4가 3일 늘어난 결과 프로젝트는 2일 지연된다.

계획 기준 가장 빠른 완료 시각: T1=1, T2=4, T3=3, T4=4+2=6, T5=4+3=7, T6=6+4=10, T7=7+3=10, T8=7+4=11 이므로 T9는 11일째에 시작한다.

T4가 5일이 되면 T4=4+5=9, T6=9+4=13, T7=9+3=12, T8=11 이 되어 T9는 13일째에 시작한다.

T9 시작이 11일에서 13일로 밀리므로 여유 1일을 제외한 2일만큼 전체 일정이 늦어진다.

문제 10
Java 프로그래밍 언어에서 특정 클래스 X의 속성에는 접근 수식자를 명기하지 않거나 private, public, protected로 선언할 수 있다. 다음 중 이에 대한 서술로 가장 올바르지 않은 것은?
1접근 범위는 private, protected, 수식자를 명기하지 않음, public 순으로 확대된다.
2protected로 선언하였을 경우 X로부터 상속받은 다른 패키지의 클래스에서 접근 가능하다.
3private로 선언하였을 경우 동일 패키지의 동일 클래스에서 접근 가능하다.
4public으로 선언하였을 경우 다른 패키지의 클래스에서 접근 가능하다.
정답 및 해설

옳지 않은 서술은 접근 범위가 private, protected, 수식자 생략, public 순으로 확대된다는 내용이다.

Java의 접근 범위는 private < 수식자 생략(default) < protected < public 순으로 넓어지며, default는 같은 패키지까지, protected는 같은 패키지에 더해 다른 패키지의 하위 클래스까지 허용한다.

  • protected 멤버는 다른 패키지에 있어도 X를 상속한 클래스에서 접근할 수 있다.
  • private 멤버는 선언된 그 클래스 내부에서만 접근할 수 있다.
  • public 멤버는 다른 패키지의 어떤 클래스에서도 접근할 수 있다.
문제 11
다음 보기에서 소프트웨어 비용 산출에 있어 하향식 산정 방법으로 가장 올바른 것을 모두 고른 것은?
가. 원시코드 라인(LOC) 수 산정기법
나. 델파이 산정기법
다. COCOMO 산정기법
라. 기능점수 산정기법
마. 전문가 판단 산정기법
1가, 나
2나, 마
3나, 라, 마
4다, 라, 마
정답 및 해설

하향식 산정 방법은 델파이 기법과 전문가 판단 기법이다.

하향식 산정은 과거 경험이 있는 전문가가 프로젝트 전체 비용을 먼저 추정하는 방식이고, 상향식 산정은 작업 단위나 규모 지표를 세부적으로 측정해 합산하는 방식이다.

  • LOC 기법은 원시 코드 라인 수를 추정해 비용을 계산하는 상향식 기법이다.
  • COCOMO는 LOC 기반 규모에 수식을 적용하는 상향식 기법이다.
  • 기능점수 기법은 기능 요소를 세어 규모를 산출하는 상향식 기법이다.
문제 12
다음 CMMi 소프트웨어 프로세스 개선 방식 중에서 단계적(Staged) 모델의 특징으로 가장 올바른 핵심 내용들을 모두 고른 것은?
가. 소프트웨어 CMM모델에 적합하며 1부터 5까지의 성숙도 수준을 할당한다.
나. 프로세스의 개선은 모델의 낮은 수준에서 높은 수준으로 이동하여 달성한다.
다. 조직간 비교를 가능하게 하는 단일 등급 체계를 제공한다.
라. 자신의 필요와 요구사항에 따라 조직을 개선하기 위한 프로세스를 선택할 수 있다.
마. 소프트웨어 SPICE 모델에 적합하며 24개의 프로세스 영역으로 분류한다.
1가, 나, 다
2가, 다, 라
3가, 나, 다, 라
4나, 다, 라, 마
정답 및 해설

단계적(Staged) 모델의 특징은 가, 나, 다이다.

단계적 모델은 조직 전체에 1~5 성숙도 수준을 부여해 낮은 수준에서 높은 수준으로 차례로 올라가며 개선하고, 단일 등급으로 조직 간 비교가 가능하다.

  • 개선할 프로세스 영역을 조직이 필요에 따라 선택하는 것은 연속적(Continuous) 모델의 특징이다.
  • SPICE와 유사하게 프로세스 영역별 능력 수준을 평가하는 방식 역시 연속적 모델에 해당한다.
문제 13
고장 간 평균 시간(MTBF, Mean Time Between Failures)이 250시간이고 평균 수리 시간(MTTR, Mean Time To Repair)이 40시간인 소프트웨어를 개선하여 평균 수리 시간은 유지하였으나, 평균 가동 시간(MTTF, Mean Time To Failure)은 380시간으로 개선하였다. 개선 전과 개선 후의 각각의 가용성(Availability)은? (단, 소수점 이하에서 반올림한다)
184%, 90%
286%, 90%
384%, 89%
486%, 89%
정답 및 해설

가용성은 개선 전 84%, 개선 후 90%이다.

가용성 = 가동 시간 / 전체 시간이며, MTBF는 MTTF와 MTTR의 합이다.
A=MTTFMTTF+MTTR=MTTFMTBFA=\dfrac{MTTF}{MTTF+MTTR}=\dfrac{MTTF}{MTBF}

개선 전: MTTF = 250 − 40 = 210시간
A=210250=0.84A=\dfrac{210}{250}=0.84 → 84%

개선 후: MTTF = 380시간, MTTR = 40시간
A=380380+40≈0.905A=\dfrac{380}{380+40}\approx 0.905 → 반올림하여 90%

문제 14
소프트웨어 요구추출 방법과 그 특징에 대한 설명으로 가장 올바르지 않은 것은?
1관찰 - 사용자의 업무를 관찰하여 메모
2인터뷰 - 당사자를 만나 준비된 질문, 대답 및 경청
3브레인스토밍 - 이해당사자들이 다양한 아이디어 토론
4유스케이스 분석 - 시스템의 내부 기능 파악
정답 및 해설

옳지 않은 설명은 유스케이스 분석이 시스템의 내부 기능을 파악한다는 내용이다.

유스케이스 분석은 액터와 시스템 사이의 상호작용을 사용자(외부) 관점에서 기술해 시스템이 제공할 기능을 도출하는 방법으로, 내부 구현을 다루지 않는다.

  • 관찰은 사용자의 실제 업무 수행을 지켜보며 기록하는 방법이다.
  • 인터뷰는 이해관계자를 직접 만나 준비된 질문으로 요구를 듣는 방법이다.
  • 브레인스토밍은 이해관계자들이 자유롭게 아이디어를 내고 토론하는 방법이다.
문제 15
ISO/IEC 25010 소프트웨어 품질 특성 설명으로 가장 올바르지 않은 것은?
1ISO/IEC 25010으로 개정하는데 ISO/IEC 14598 표준안이 포함되었다.
2기존 ISO/IEC 9126에서 추가된 주특성은 보안성, 호환성이다.
3주특성에 따른 부특성도 27개에서 31개로 증가하였다.
4기존 ISO/IEC 9126의 주특성이 6개에서 8개로 증가하였다.
정답 및 해설

옳지 않은 설명은 ISO/IEC 25010으로 개정하면서 ISO/IEC 14598이 포함되었다는 내용이다.

ISO/IEC 9126(품질 모델)과 14598(평가 절차)을 통합·정비한 것은 ISO/IEC 25000 SQuaRE 시리즈이며, 25010은 그중 9126의 품질 모델을 대체한 품질 모델 표준이다.

  • 25010에서는 보안성과 호환성이 새로운 주특성으로 추가되었다.
  • 주특성은 기존 6개에서 8개로 늘었다.
  • 주특성 확대와 함께 부특성도 세분화되어 그 수가 늘었다.
문제 16
다음 보기에서 컴포넌트 기반 개발방법론에 대한 설명으로 올바른 것을 모두 고른 것은?
가. 기존 방법론에 비해 소프트웨어 개발 기간을 단축시킨다.
나. 컴포넌트 통합을 위해 표준 인터페이스가 제공되므로 미들웨어를 지원하지 않는다.
다. 컴포넌트는 개발자에게 다른 컴포넌트 및 모듈들과 상호작용하기 위해 인터페이스를 제공한다.
라. COTS(Component Off-The-Shelf)는 외부에서 구입하는 상용컴포넌트이다.
1가, 라
2가, 나, 다
3가, 다, 라
4나, 다, 라
정답 및 해설

컴포넌트 기반 개발방법론(CBD)에 대한 옳은 설명은 가, 다, 라이다.

CBD는 검증된 컴포넌트를 재사용·조립하므로 개발 기간이 단축되며, 컴포넌트는 인터페이스를 통해 다른 컴포넌트·모듈과 상호작용하고, 외부에서 구입하는 상용 컴포넌트(COTS)도 활용한다.

나는 틀렸다. 컴포넌트 통합은 CORBA, EJB, COM/DCOM 같은 미들웨어의 지원을 받아 이루어진다.

문제 17
다음 중 기능적 요구사항과 비기능적 요구사항을 가장 올바르게 분류한 것은?
가. 사용자 인터페이스의 버튼은 하단 중앙에 위치한다.
나. 검색 버튼을 누르면 결과는 3초 이내 표시된다.
다. 보안성에 대한 요구 사양을 만족시켜야 한다.
라. 사용자 입력값에 대한 범위와 단위를 설정한다.
마. 사용자의 권한에 따른 분류를 설정하여 구분한다.
바. 가용성(Availability)은 최소 90% 이상을 보장한다.
기능적 요구사항 / 비기능적 요구사항
1기능적 요구사항: 가, 나, 라 / 비기능적 요구사항: 다, 마, 바
2기능적 요구사항: 가, 라, 마 / 비기능적 요구사항: 나, 다, 바
3기능적 요구사항: 나, 다, 마 / 비기능적 요구사항: 가, 라, 바
4기능적 요구사항: 다, 라, 마 / 비기능적 요구사항: 가, 나, 바
정답 및 해설

올바른 분류는 기능적 요구사항이 가, 라, 마, 비기능적 요구사항이 나, 다, 바이다.

비기능적 요구사항은 시스템이 무엇을 하느냐가 아니라 어떤 품질 수준으로 동작하느냐에 관한 제약으로, 응답 시간(성능)·보안성·가용성이 대표적이다.

  • 3초 이내 결과 표시는 성능 요구이므로 기능적 요구사항으로 분류한 조합은 틀렸다.
  • 보안성 요구 사양 만족은 품질 특성이므로 기능적 요구사항으로 분류한 조합은 틀렸다.
  • 입력값의 범위·단위 설정과 권한별 분류 설정은 시스템이 수행할 기능이므로 비기능적 요구사항에 넣은 조합은 틀렸다.
문제 18
다음 중 모델링에 관련된 올바른 설명을 모두 고른 것은?
가. 절차 중심 방법은 데이터의 구조와 이를 이용한 함수들의 집합으로 구성된다.
나. 객체 지향 방법은 객체에 데이터와 이에 대한 함수를 모아 놓은 것이다.
다. 클래스는 각각의 개체들이 갖는 속성과 연산을 정의하는 템플릿이다.
라. 캡슐화는 정보은닉(Information hiding)으로 오퍼레이션과 속성을 외부에 노출되지 않게 할 수 있다.
마. 다중 상속(Multiple inheritance)은 여러 클래스의 메소드를 상속할 수 있는 기능으로, 객체지향 언어의 핵심 요소이다.
바. 다형성(Polymorphism)은 동일한 명칭의 메소드로 여러 클래스에 정의하여 객체에 따라 다른 처리를 가능하게 한다.
1가, 나, 다, 라
2나, 다, 라, 마, 바
3나, 라, 마, 바
4가, 나, 다, 라, 바
정답 및 해설

모델링에 관한 옳은 설명은 가, 나, 다, 라, 바이다.

마는 틀렸다. 다중 상속은 이름 충돌 등 복잡성 문제로 Java처럼 지원하지 않는 언어도 많아 객체지향의 핵심 요소로 보지 않으며, 핵심 요소는 캡슐화·상속·다형성·추상화이다.

  • 절차 중심 방법은 데이터 구조와 이를 처리하는 함수의 집합으로 구성된다.
  • 객체 지향 방법은 객체 안에 데이터와 그 데이터를 다루는 함수를 함께 묶는다.
  • 클래스는 객체들이 공통으로 갖는 속성과 연산을 정의한 템플릿이다.
  • 캡슐화와 정보은닉으로 속성·오퍼레이션을 외부에 감출 수 있고, 다형성은 같은 이름의 메소드가 객체에 따라 다르게 동작하게 한다.
문제 19
다음 중 설계원칙에 대한 올바른 설명을 모두 고른 것은?
가. 단일 책임(Single responsibility) 원칙은 한 클래스는 하나의 책임을 갖도록 설계함을 의미한다.
나. 리스코프 치환(Liskov substitution) 원칙은 상위 클래스가 사용된 곳을 상속받은 하위 클래스로 대체하여도 문제가 발생하지 않도록 하는 것이다.
다. 개방 폐쇄(Open-closed) 원칙은 클래스의 공통 기본기능을 변경하지 않도록 하면서 새로운 기능은 확장 사용하는 것이다.
라. 인터페이스 분리(Interface segregation) 원칙은 서로 다른 성격의 인터페이스를 분리, 클라이언트 쪽에서 여러 인터페이스를 갖도록 하는 것이다.
마. 의존 관계 역전(Dependency inversion) 원칙은 추상 클래스(Abstraction class)가 저수준의 구체적 클래스에 의존하도록 설계하는 원칙을 의미한다.
1가, 나, 다, 라
2가, 나, 다
3가, 나. 라, 마
4가, 다, 라
정답 및 해설

설계원칙에 대한 옳은 설명은 가, 나, 다, 라이다.

마는 틀렸다. 의존 관계 역전 원칙은 고수준 모듈과 저수준 모듈이 모두 추상화에 의존해야 하며, 추상화가 구체적 클래스에 의존해서는 안 된다는 원칙이다.

  • 단일 책임 원칙은 한 클래스가 하나의 책임만 갖도록 한다.
  • 리스코프 치환 원칙은 상위 타입 자리에 하위 타입을 넣어도 프로그램이 올바르게 동작해야 한다는 원칙이다.
  • 개방 폐쇄 원칙은 기존 코드는 수정하지 않고 확장으로 새 기능을 추가하도록 한다.
  • 인터페이스 분리 원칙은 범용 인터페이스 하나 대신 클라이언트별로 분리된 작은 인터페이스를 쓰도록 한다.
문제 20
다음 소프트웨어 모듈에 관련된 내용에서 결합도가 약한 것으로부터 강해지는 순서로 가장 올바르게 나열한 것은?
가. 전역 변수 데이터를 모듈간 공유한다.
나. 모듈의 호출에서 레코드나 배열, 구조체의 전달이 이루어진다.
다. 모듈의 호출에서 매개변수를 통한 값의 전달이 이루어진다.
라. 호출하는 모듈의 매개변수 값으로 호출되는 모듈의 내부 제어 흐름이 결정된다.
마. 호출하는 모듈이 호출되는 모듈의 내부 데이터 값을 수정한다.
1다 → 라 → 나 → 마 → 가
2다 → 나 → 라 → 마 → 가
3다 → 라 → 나 → 가 → 마
4다 → 나 → 라 → 가 → 마
정답 및 해설

결합도가 약한 것부터 나열하면 다 → 나 → 라 → 가 → 마이다.

결합도는 자료 < 스탬프 < 제어 < 외부 < 공통 < 내용 순으로 강해진다.

  • 다: 매개변수로 값만 전달하는 자료 결합도로 가장 약하다.
  • 나: 레코드·배열·구조체를 전달하는 스탬프 결합도이다.
  • 라: 전달한 값으로 상대 모듈의 내부 제어 흐름을 결정하는 제어 결합도이다.
  • 가: 전역 변수를 공유하는 공통 결합도이다.
  • 마: 다른 모듈의 내부 데이터를 직접 수정하는 내용 결합도로 가장 강하다.
문제 21
소프트웨어 개발을 위한 SDLC(Software Development Life Cycle)의 요구사항 분석 단계에서 작성하는 산출물 중 가장 올바르지 않은 것은?
1사용자 스토리(User story)
2프로세스 분해 다이어그램(Process decomposition diagram)
3유스케이스 다이어그램(Use case diagram)
4데이터 플로우 다이어그램(Data flow diagram)
정답 및 해설

요구사항 분석 단계의 산출물로 보기 어려운 것은 프로세스 분해 다이어그램이다.

요구사항 분석 단계에서는 사용자가 시스템에서 무엇을 원하는지를 사용자·외부 관점에서 표현하는 산출물을 만든다. 프로세스 분해 다이어그램은 시스템 기능을 상위에서 하위로 계층적으로 쪼개 처리 단위를 구조화하는 도구로, 이 문항에서는 요구 분석보다 설계 쪽 산출물로 본다.

  • 사용자 스토리는 애자일에서 사용자 관점의 요구를 짧은 문장으로 기술한 요구사항 산출물이다.
  • 유스케이스 다이어그램은 액터와 시스템의 상호작용으로 기능 요구사항을 표현한다.
  • 데이터 플로우 다이어그램은 구조적 분석에서 자료의 흐름과 처리를 모델링하는 대표적 분석 도구이다.
문제 22
다음 C프로그램의 함수 TaxDeduct()에서 나타나는 응집에 대한 설명으로 가장 올바른 것은?
int TaxDeduct(int ftype, int n)
{
int i;
i = 0;
switch (ftype) {
case 1: // 미성년 부양가족 인원당 200,000 공제
i = n * 200000;
break;
case 2: // 출산 특별공제 신생아당 1,000,000 공제
i = n * 1000000;
break;
case 3: // 미혼청년공제 500,000 n 해당없음
i = 500000;
break;
}
i = i + 50000; // 공통기본공제 50,000 추가
return i;
}
1순차적 응집
2논리적 응집
3시간적 응집
4절차적 응집
정답 및 해설

TaxDeduct()는 논리적 응집을 보인다.

매개변수 ftype 값에 따라 switch 문으로 미성년 부양가족·출산·미혼청년 공제처럼 유사한 성격의 서로 다른 처리 중 하나를 골라 수행하므로, 논리적으로 비슷한 기능을 한 모듈에 모아 둔 형태이다.

  • 순차적 응집은 한 처리의 출력이 다음 처리의 입력으로 이어지는 경우이다.
  • 시간적 응집은 초기화처럼 같은 시점에 실행될 처리들을 모은 경우이다.
  • 절차적 응집은 정해진 순서에 따라 여러 처리를 차례로 수행하는 경우이다.
문제 23
소프트웨어 테스트에 대한 설명으로 가장 올바르지 않은 것은?
1테스트 오라클은 테스트 결과의 판단 기준이다.
2휴리스틱 오라클은 모든 임의의 입력값에 대한 발생 오류의 결과를 제공하는 방법이다.
3상태 기반 테스트는 상태와 전이(State & transition)를 중점적으로 테스트하는 방법이다.
4테스트 하니스는 일부 기능만 테스트하기 위하여 소프트웨어를 변경하는 방법이다.
정답 및 해설

옳지 않은 설명은 휴리스틱 오라클이 모든 임의 입력값에 대한 결과를 제공한다는 내용이다.

모든 입력값에 대해 기대 결과를 제공하는 것은 참(True) 오라클이고, 휴리스틱 오라클은 특정 입력값에만 올바른 결과를 제공하고 나머지는 추정(휴리스틱)으로 처리한다.

  • 테스트 오라클은 테스트 결과가 맞는지 판단하는 기준이다.
  • 상태 기반 테스트는 상태와 상태 전이를 중심으로 테스트 케이스를 설계한다.
  • 테스트 하니스는 드라이버·스텁 등을 갖춰 소프트웨어의 일부만 떼어 테스트할 수 있게 하는 환경이다.
문제 24
구조적 분석과 설계에서 많이 활용되는 자료 흐름도(Data flow diagram)의 구성 요소로 가장 올바르지 않은 것은?
1데이터 저장소(Data store)
2외부 엔터티(External entity)
3프로세스(Process)
4의사결정(Decision)
정답 및 해설

자료 흐름도의 구성 요소가 아닌 것은 의사결정(Decision)이다.

자료 흐름도는 프로세스, 자료 흐름, 자료 저장소, 외부 엔터티(단말)로 구성되며, 제어 흐름을 다루지 않으므로 조건 분기 기호가 없다.

  • 데이터 저장소는 자료가 보관되는 곳을 나타내는 구성 요소이다.
  • 외부 엔터티는 시스템 밖에서 자료를 주고받는 대상을 나타낸다.
  • 프로세스는 입력 자료를 출력 자료로 변환하는 처리를 나타낸다.

의사결정 기호는 순서도나 활동 다이어그램에서 쓰인다.

문제 25
다음 보기에서 소프트웨어개발 분석, 설계 단계 중 같은 단계에서 사용되는 다이어그램들을 모두 고른 것은?
가. 자료 흐름도 - 시퀀스 다이어그램
나. 자료 흐름도 - 유스케이스 다이어그램
다. 구조적 도표 - 클래스 다이어그램
라. 구조적 도표 - 유스케이스 다이어그램
1가, 나
2나, 다
3가, 나, 다
4나, 다, 라
정답 및 해설

같은 단계에서 사용되는 짝은 나, 다이다.

자료 흐름도와 유스케이스 다이어그램은 분석 단계, 구조적 도표(구조도)와 클래스 다이어그램은 설계 단계에서 쓰여 각각 같은 단계에 속한다.

  • 가: 자료 흐름도는 분석 단계, 시퀀스 다이어그램은 객체 간 메시지를 구체화하는 설계 단계 도구이다.
  • 라: 구조적 도표는 설계 단계, 유스케이스 다이어그램은 분석 단계 도구이다.
문제 26
다음 보기에서 소프트웨어 아키텍쳐 MVC의 특징을 모두 고른 것은?
가. 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있다.
나. 컴포넌트의 결합이 강해 다른 부분에 영향을 주지 않고 수정할 수 없다.
다. 하나의 모델을 위하여 다수의 다른 뷰를 쉽게 제공할 수 있다.
라. 응용프로그램은 모델-뷰-컨트롤러 세 가지 구성 요소로 이루어진다.
1가, 나
2가, 다
3가, 나, 다
4가, 다, 라
정답 및 해설

MVC의 특징은 가, 다, 라이다.

MVC는 애플리케이션을 모델·뷰·컨트롤러로 나누어 비즈니스 로직과 사용자 인터페이스를 분리하므로, 한쪽을 고쳐도 다른 쪽에 영향이 적고 하나의 모델에 여러 뷰를 붙일 수 있다.

나는 틀렸다. MVC는 구성 요소 간 결합을 느슨하게 하려는 구조이다.

문제 27
다음 보기에서 객체간의 상호 작용을 설명하고 있는 동적 UML다이어그램을 모두 고른 것은?
가. 시퀀스 다이어그램
나. 배치 다이어그램
다. 타이밍 다이어그램
라. 유스케이스 다이어그램
1가, 나
2가, 다
3가, 나, 다
4가, 다, 라
정답 및 해설

동적 UML 다이어그램은 가, 다, 라이다.

UML 2에서 시퀀스·타이밍 다이어그램은 상호작용 다이어그램이고, 유스케이스 다이어그램도 액터와 시스템의 상호작용을 다루는 행위(동적) 다이어그램에 속한다.

나는 틀렸다. 배치 다이어그램은 노드와 산출물의 물리적 배치를 나타내는 구조(정적) 다이어그램이다.

문제 28
시퀀스 다이어그램(Sequence diagram)에 대한 설명으로 가장 올바르지 않은 것은?
1유스케이스에 관련된 추가 객체(Participating object)를 찾을 수 있다.
2다이어그램은 객체, 메시지, 활성막대, 프레임 등으로 구성된다.
3시스템의 동작을 정형화하고 객체들의 메시지 교환을 울타리 형태로 시각화한다.
4제어 흐름, 동기화, 병렬 수행 등의 기능을 분석할 수 있다.
정답 및 해설

옳지 않은 설명은 시퀀스 다이어그램으로 제어 흐름·동기화·병렬 수행을 분석한다는 내용이다.

시퀀스 다이어그램은 객체 간 메시지 교환을 시간 순서로 보여 주는 데 초점이 있고, 제어 흐름과 동기화·병렬 처리를 분석하는 것은 활동 다이어그램의 주된 용도이다.

  • 유스케이스 시나리오를 시퀀스로 그리다 보면 참여하는 객체를 추가로 찾을 수 있다.
  • 객체(생명선), 메시지, 활성 막대, 프레임 등으로 구성된다.
  • 객체들의 생명선이 나란히 서고 그 사이로 메시지가 오가는 울타리 형태로 동작을 시각화한다.
문제 29
다음 중 유지보수에 대한 서술로 가장 올바르지 않은 것은?
1수정 유지보수(Corrective maintenance) : 소프트웨어 설치 후에 발견된 결함을 수정하여 바로잡기 위해서 하는 유지보수
2적응 유지보수(Adaptive maintenance) : 소프트웨어 설치 후에 이루어지는 환경 변화에 대응하기 위하여 실시하는 유지보수
3완전 유지보수(Perfective maintenance) : 소프트웨어 설치 후에 다양한 대상 시스템에 동작성을 시험, 완전성을 확인하기 위하여 실시하는 유지보수
4예방 유지보수(Preventive maintenance) : 시스템의 결함을 예방하며 잠재적 문제점을 보완하기 위하여 실시하는 유지보수
정답 및 해설

옳지 않은 서술은 완전 유지보수를 동작성 시험과 완전성 확인으로 설명한 내용이다.

완전(완전화) 유지보수는 사용자의 요구에 따라 새 기능 추가나 성능 개선을 하는 유지보수로, 유지보수 활동 중 비중이 가장 크다.

  • 수정 유지보수는 운영 중 발견된 결함을 고친다.
  • 적응 유지보수는 하드웨어·운영체제 등 환경 변화에 맞춰 수정한다.
  • 예방 유지보수는 잠재적 문제를 미리 찾아 보완한다.
문제 30
소프트웨어 인수테스트에 대한 설명으로 가장 올바르지 않은 것은?
1인수테스트는 크게 알파테스트와 베타테스트로 구분한다.
2알파테스트는 인수자가 설치될 인수시스템 환경에서 테스트한다.
3베타테스트는 인수자가 다양한 외부 컴퓨팅 환경에서 테스트한다.
4소프트웨어 사용자가 시험하는 매우 현실적인 테스트이다.
정답 및 해설

옳지 않은 설명은 알파테스트를 인수자가 설치될 인수시스템 환경에서 수행한다고 한 내용이다.

알파테스트는 사용자가 개발자의 환경(개발 장소)에서 개발자와 함께 수행하는 통제된 테스트이고, 실제 사용 환경에서 개발자 없이 수행하는 것은 베타테스트이다.

  • 인수테스트는 크게 알파테스트와 베타테스트로 나뉜다.
  • 베타테스트는 다수 사용자가 각자의 실제 환경에서 수행한다.
  • 인수테스트는 실제 사용자가 참여하는 현실적인 테스트이다.
문제 31
다음 보기에서 설명하는 테스트의 종류로 가장 올바른 것은?
시스템을 변경한 후 변경된 부분이 기존 시스템에 부작용을 일으키지 않는지를 조사하기 위해 이미 사용한 테스트 케이스를 재사용하여 실행하는 테스트
1스트레스(Stress) 테스트
2신뢰성(Reliability) 테스트
3회귀(Regression) 테스트
4인수(Acceptance) 테스트
정답 및 해설

설명하는 테스트는 회귀(Regression) 테스트이다.

회귀 테스트는 수정·변경 후 기존 기능에 새로운 오류(부작용)가 생기지 않았는지 확인하기 위해 이전 테스트 케이스를 다시 실행한다.

  • 스트레스 테스트는 한계를 넘는 부하를 가해 시스템의 견딤과 복구를 확인한다.
  • 신뢰성 테스트는 일정 기간 고장 없이 동작하는지를 확인한다.
  • 인수 테스트는 사용자가 요구사항 충족 여부를 확인해 인수를 결정한다.
문제 32
다음 소프트웨어 테스트 중 분류가 나머지와 다른 것은?
1직교 배열(Orthogonal array) 테스트
2자료 흐름(Data flow) 테스트
3페어와이즈 조합(Pairwise combination) 테스트
4결정 테이블(Decision table) 테스트
정답 및 해설

분류가 다른 것은 자료 흐름 테스트이다.

자료 흐름 테스트는 프로그램 내부에서 변수의 정의와 사용 위치를 추적하는 화이트박스 테스트이고, 나머지는 내부 구조를 보지 않고 입력 조합으로 케이스를 설계하는 블랙박스 테스트이다.

  • 직교 배열 테스트는 직교 배열표로 입력 조합을 균형 있게 줄이는 블랙박스 기법이다.
  • 페어와이즈 조합 테스트는 모든 변수 쌍의 조합을 최소 한 번씩 포함하는 블랙박스 기법이다.
  • 결정 테이블 테스트는 조건과 행동의 조합을 표로 정리해 케이스를 만드는 블랙박스 기법이다.
문제 33
다음 보기에서 소프트웨어 통합 테스트 방법으로 올바른 것을 모두 고른 것은?
가. 상향식(Bottom up) 통합 테스트
나. 연쇄식(Threads) 통합 테스트
다. 스모크(Smoke) 테스트
라. 스트레스(Stress) 테스트
마. 빅뱅(Big bang) 테스트
1가, 나, 다
2가, 다, 라
3가, 나, 다, 라
4가, 나, 다, 마
정답 및 해설

통합 테스트 방법은 상향식, 연쇄식, 스모크, 빅뱅이다.

통합 테스트는 모듈을 결합하면서 인터페이스 오류를 찾는 단계로, 한꺼번에 결합하는 빅뱅, 하위 모듈부터 결합하는 상향식, 기능 흐름(스레드) 단위로 결합하는 연쇄식, 빌드마다 핵심 기능을 빠르게 확인하는 스모크 테스트가 이에 쓰인다.

스트레스 테스트는 통합 방법이 아니라 과부하 상황을 점검하는 시스템 테스트의 한 종류이다.

문제 34
소프트웨어의 검증(Verification)과 확인(Validation)에 대한 설명으로 가장 올바른 것은?
1확인은 사용자 관점에서 설계명세서들을 점검하는 작업이다.
2검증과 확인은 모두 계획단계에서 명세서를 점검하는 작업이다.
3확인은 사용자 관점에서 발주자와 합의한 요구사항들을 점검하는 작업이다.
4검증은 개발자 관점에서 계획서를 점검하는 작업이다.
정답 및 해설

옳은 설명은 확인(Validation)이 사용자 관점에서 발주자와 합의한 요구사항을 점검하는 작업이라는 내용이다.

검증은 개발자 관점에서 제품을 올바르게 만들고 있는지(각 단계 산출물이 명세에 맞는지)를, 확인은 사용자 관점에서 올바른 제품을 만들었는지(요구사항을 충족하는지)를 점검한다.

  • 설계명세서와의 일치를 점검하는 것은 확인이 아니라 검증의 성격이다.
  • 검증과 확인은 계획 단계만이 아니라 개발 전 과정에 걸쳐 수행된다.
  • 검증은 계획서가 아니라 각 단계 산출물이 명세에 맞게 만들어졌는지를 점검한다.
문제 35
다음은 소프트웨어 개발에서 사용자 요구사항 개발 프로세스들이다. 순서대로 가장 올바르게 나열한 것은?
가. 요구사항 분석
나. 요구사항 검증
다. 요구사항 도출
라. 요구사항 명세
1다 - 가 - 라 - 나
2라 - 가 - 다 - 나
3다 - 라 - 가 - 나
4라 - 가 - 나 - 다
정답 및 해설

요구사항 개발 순서는 도출 → 분석 → 명세 → 검증이다.

먼저 이해관계자로부터 요구를 도출하고, 이를 분석해 충돌·누락을 정리한 뒤, 문서로 명세하고, 마지막으로 명세가 올바르고 완전한지 검증한다.

  • 명세를 맨 앞에 두는 순서는 무엇을 적을지 정해지기 전에 문서화하는 셈이라 틀렸다.
  • 분석을 명세 뒤에 두는 순서는 정리되지 않은 요구를 문서화하게 되어 틀렸다.
문제 36
역공학 관련 설명으로 가장 올바르지 않은 것은?
1코드만 남아있고 관련 문서가 존재하지 않을 때 적용하는 기술이다.
2역공학 도구가 필요하다.
3추출한 문서를 기반으로 시스템을 개선, 변경하는 작업이다.
4소스코드를 분석하여 이해하기 쉬운 다이어그램으로 변환한다.
정답 및 해설

옳지 않은 설명은 추출한 문서를 기반으로 시스템을 개선·변경하는 작업이라는 내용이다.

역공학은 기존 코드에서 설계 정보와 문서를 추출·복원해 이해하는 데까지이며, 이를 바탕으로 시스템을 개선·변경하는 것은 재구조화·재공학의 영역이다.

  • 문서 없이 코드만 남은 레거시 시스템을 이해할 때 주로 적용한다.
  • 코드 분석을 위해 역공학 도구가 필요하다.
  • 소스 코드를 분석해 구조도·다이어그램 등 이해하기 쉬운 형태로 변환한다.
문제 37
코드 스멜의 설명으로 가장 올바르지 않은 것은?
1명확히 주석문 처리가 되어 있는 프로그램
2중복된 로직을 가진 프로그램
3복잡한 조건문이 포함된 프로그램
4읽기 어려운 프로그램
정답 및 해설

코드 스멜이 아닌 것은 주석이 명확히 처리된 프로그램이다.

코드 스멜은 당장 오류는 아니지만 리팩터링이 필요함을 알려 주는 코드의 나쁜 징후로, 명확한 주석은 오히려 이해를 돕는 요소이다.

  • 중복된 로직은 대표적인 코드 스멜이다.
  • 복잡한 조건문은 분기 단순화나 다형성 적용이 필요한 스멜이다.
  • 읽기 어려운 코드는 유지보수성을 떨어뜨리는 스멜이다.
문제 38
소프트웨어 아키텍처 스타일에 대한 설명으로 가장 올바르게 짝지어진 것은?
1데이터 저장소(Repository): 사용자 인터페이스와 데이터 처리 로직을 독립적으로 분리하여 변경 영향을 줄인다.
2파이프 필터(Pipe and filter): 제어 대상이 되는 컴포넌트는 컨트롤러에 이벤트를 보내고 처리 명령을 받는다.
3클라이언트-서버: 클라이언트는 서버에 네트워크를 통한 서비스를 요청하고, 서버는 결과를 전송한다.
4계층형: 디스패처에 의해 트랜잭션을 하나씩 읽어 내용에 따라서 필요 처리로 연쇄된다.
정답 및 해설

올바르게 짝지어진 것은 클라이언트-서버 스타일이다.

클라이언트-서버 스타일은 클라이언트가 네트워크로 서비스를 요청하고 서버가 처리 결과를 돌려주는 구조이다.

  • 데이터 저장소 스타일은 여러 컴포넌트가 중앙의 공유 데이터를 읽고 쓰는 구조이며, UI와 처리 로직 분리는 MVC의 특징이다.
  • 파이프 필터 스타일은 데이터 스트림이 필터를 차례로 거치며 변환되는 구조로, 컨트롤러와 이벤트를 주고받는 구조가 아니다.
  • 계층형 스타일은 기능을 계층으로 나누어 각 계층이 바로 아래 계층의 서비스만 이용하는 구조로, 디스패처가 트랜잭션을 분배하는 구조가 아니다.
문제 39
다음 중 디자인 패턴(Design pattern)유형이 올바르게 분류되지 않은 것은?
1Command – Observer – Visitor – Iterator – Template method
2Bridge – Proxy – Facade – Adapter – Decorator
3Builder – Factory method – Prototype – Singleton – Abstract factory
4Flyweight – Composite – Memento – State – Mediator
정답 및 해설

올바르게 분류되지 않은 묶음은 Flyweight – Composite – Memento – State – Mediator이다.

이 묶음에서 Flyweight와 Composite는 구조 패턴이고, Memento·State·Mediator는 행위 패턴이어서 유형이 섞여 있다.

  • Command, Observer, Visitor, Iterator, Template method는 모두 행위 패턴이다.
  • Bridge, Proxy, Facade, Adapter, Decorator는 모두 구조 패턴이다.
  • Builder, Factory method, Prototype, Singleton, Abstract factory는 모두 생성 패턴이다.
문제 40
다음 내용에 부합하는 것으로 가장 올바른 것은?
- 전체 시스템을 여러 작은 단위 서비스로 분할한다.
- 단위 서비스는 독립적으로 실행 가능하다.
- 각 서비스의 유지보수와 배포는 개별적으로 처리 가능하다.
- 시스템 전체를 단일 서비스로 구성하는 모놀리식(Monolithic)과 상반된 방법이다.
1MSA(Microservice Architecture)
2ROA(Resource Oriented Architecture)
3MDA(Model Driven Architecture)
4Data-flow architecture
정답 및 해설

제시된 내용에 부합하는 것은 MSA(Microservice Architecture)이다.

MSA는 시스템을 독립 실행·배포가 가능한 작은 서비스 단위로 나누는 아키텍처로, 전체를 하나로 묶는 모놀리식과 대비된다.

  • ROA는 자원을 URI로 식별하고 REST 방식으로 다루는 자원 중심 아키텍처이다.
  • MDA는 플랫폼 독립 모델에서 코드를 생성하는 모델 중심 개발 방식이다.
  • Data-flow 아키텍처는 데이터가 처리 단계를 따라 흐르며 변환되는 구조이다.