[7급 국가직 소프트웨어공학] 25년 1회차 기출문제 정답·해설 페이지

[7급 국가직 소프트웨어공학] 25년 1회차
    1[7급 국가직 소프트웨어공학] 25년 1회차
    다음 중 응집도(cohesion)가 가장 높은 것은?
    1
    절차적(procedural) 응집도
    2
    시간적(temporal) 응집도
    3
    기능적(functional) 응집도
    4
    논리적(logical) 응집도
    해설

    보기 중 응집도가 가장 높은 것은 기능적 응집도이다.

    응집도 강도는 기능적 > 순차적 > 교환(통신)적 > 절차적 > 시간적 > 논리적 > 우연적 순이며, 기능적 응집도는 모듈 내부 요소가 단일 기능 수행을 위해 모인 경우다.

    • 절차적 응집도: 정해진 수행 순서에 따라 묶였을 뿐이라 기능적보다 약하다.
    • 시간적 응집도: 초기화처럼 같은 시점에 실행된다는 이유로 묶인 경우로 더 약하다.
    • 논리적 응집도: 유사한 성격의 처리를 한 모듈에 모아 플래그로 골라 쓰는 형태로, 우연적 다음으로 약하다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    2[7급 국가직 소프트웨어공학] 25년 1회차
    다음은 웹사이트 회원가입 양식에 나이를 입력하는 텍스트 박스의 요구사항이다. 경곗값 분석 기법을 이용해 테스트 케이스를 작성할 경우, 입력값의 집합으로 옳은 것은?
    회원의 나이를 입력하는 텍스트 박스에는 0세 이상, 120세 이하의 값만 입력해야 한다.
    1
    0, 60, 120
    2
    -10, 0, 120, 130
    3
    0, 1, 2, 118, 119, 120
    4
    -1, 0, 1, 119, 120, 121
    해설

    경곗값 분석 결과는 -1, 0, 1, 119, 120, 121이다.

    경곗값 분석은 유효 범위의 경계와 그 바로 안팎 값을 시험한다. 하한 0의 바로 아래·경계·바로 위(-1, 0, 1), 상한 120의 바로 아래·경계·바로 위(119, 120, 121)를 고른다.

    • 0, 60, 120: 범위 밖 값이 없고 60은 경계와 무관한 대표값이라 동등 분할에 가깝다.
    • -10, 0, 120, 130: 경계 바로 옆이 아닌 임의의 범위 밖 값을 써서 경계 인접 오류를 잡지 못한다.
    • 0, 1, 2, 118, 119, 120: 모두 유효 범위 안의 값이라 무효 경계값(-1, 121)이 빠졌다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    3[7급 국가직 소프트웨어공학] 25년 1회차
    다음 소프트웨어 개발 방법론과 모델링 도구를 바르게 연결한 것은?
    (가) 정보공학 방법론
    (나) 구조적 방법론
    (다) 객체지향 방법론
    A. 유스케이스 다이어그램(Usecase Diagram)
    B. E-R 다이어그램(E-R Diagram)
    C. 자료 흐름도(Data Flow Diagram)
    (가) (나) (다)
    1
    A B C
    2
    A C B
    3
    B C A
    4
    C B A
    해설

    바른 연결은 (가) E-R 다이어그램, (나) 자료 흐름도, (다) 유스케이스 다이어그램이다.

    정보공학 방법론은 데이터 중심이라 개체·관계를 E-R 다이어그램으로 표현하고, 구조적 방법론은 기능(프로세스) 중심이라 자료 흐름도로 분석한다. 객체지향 방법론은 UML을 쓰며 요구사항을 유스케이스 다이어그램으로 모델링한다.

    • A B C 연결: 정보공학에 유스케이스, 구조적에 E-R, 객체지향에 자료 흐름도를 붙여 세 방법론이 모두 어긋난다.
    • A C B 연결: 구조적-자료 흐름도는 맞지만 정보공학과 객체지향의 도구가 서로 뒤바뀌었다.
    • C B A 연결: 객체지향-유스케이스는 맞지만 정보공학과 구조적 방법론의 도구가 서로 뒤바뀌었다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    4[7급 국가직 소프트웨어공학] 25년 1회차
    다음 코드에 대해 조건 커버리지를 100 % 만족하는 테스트 케이스 집합은? (단, 단축연산(short-circuit evaluation)은 수행하지 않는다)
    if(a > 5 && b == 0)
    printf("첫 번째 조건 충족\n");
    if(a == 3 || b < 0)
    printf("두 번째 조건 충족\n");
    1
    {(a = 2, b = 0), (a = 2, b = 1)}
    2
    {(a = 3, b = 0), (a = 4, b = -2)}
    3
    {(a = 6, b = 0), (a = 2, b = 1)}
    4
    {(a = 6, b = 0), (a = 3, b = -1)}
    해설

    조건 커버리지를 만족하는 집합은 {(a=6, b=0), (a=3, b=-1)}이다.

    조건 커버리지는 각 개별 조건(a>5, b==0, a==3, b<0)이 참과 거짓을 모두 한 번 이상 가져야 한다. (6, 0)은 a>5·b==0이 참, a==3·b<0이 거짓이고, (3, -1)은 정확히 반대라 네 조건 모두 양쪽 값을 얻는다.

    • {(2, 0), (2, 1)}: a>5와 a==3, b<0이 한 번도 참이 되지 않는다.
    • {(3, 0), (4, -2)}: a>5가 한 번도 참이 되지 않는다.
    • {(6, 0), (2, 1)}: 두 번째 if의 a==3과 b<0이 모두 참이 되지 않는다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    5[7급 국가직 소프트웨어공학] 25년 1회차
    V 모델의 단계에서 (가) ~ (라)에 들어갈 내용을 바르게 연결한 것은?
    A. 모듈 설계
    B. 시스템 테스트
    C. 아키텍처 설계
    D. 통합 테스트
    (가) (나) (다) (라)
    문제 이미지
    1
    A B C D
    2
    A C B D
    3
    C A B D
    4
    C A D B
    해설

    V 모델에서 (가)는 아키텍처 설계, (나)는 모듈 설계, (다)는 통합 테스트, (라)는 시스템 테스트이므로 C, A, D, B 순서의 연결이 옳다.

    V 모델은 왼쪽 개발 단계와 오른쪽 검증 단계가 같은 높이끼리 짝을 이룬다. 그림에서 모듈 설계↔단위 테스트, 아키텍처 설계↔통합 테스트, 요구분석↔시스템 테스트로 대응하고 마지막에 인수 및 설치가 온다. 설계는 큰 단위에서 작은 단위로 내려가고, 검증은 작은 단위에서 큰 단위로 올라간다.

    • A B C D 연결: 요구분석 바로 다음은 전체 구조를 정하는 아키텍처 설계이며, 시스템 테스트는 왼쪽 설계 자리에 올 수 없다.
    • A C B D 연결: 모듈 설계와 아키텍처 설계의 순서가 뒤바뀌었고, 시스템 테스트가 통합 테스트보다 먼저 온다.
    • C A B D 연결: 단위 테스트 → 통합 테스트 → 시스템 테스트 순으로 검증 범위가 넓어지므로 시스템 테스트가 통합 테스트보다 앞설 수 없다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    6[7급 국가직 소프트웨어공학] 25년 1회차
    다음은 클래스 다이어그램을 Java 코드로 구현한 것이다. (가) ~ (다)에 들어갈 내용을 바르게 연결한 것은?
    class Lecture extends ( (나) ) {
    public Lecture() {}
    }
    class Study {
    public Study() {}
    }
    (가) (나) (다)
    문제 이미지
    1
    Study Study Lecture
    2
    Study Lecture Lecture
    3
    Lecture Study Study
    4
    Lecture Lecture Study
    해설

    (가)는 Study, (나)는 Study, (다)는 Lecture이다.

    클래스 다이어그램에서 속이 빈 삼각형 화살표는 일반화(상속) 관계이며, 화살표가 가리키는 위쪽 (가)가 부모 클래스, 아래쪽 (다)가 자식 클래스이다. 코드에서 Study는 아무것도 상속하지 않으므로 부모이고, Lecture가 extends 로 Study를 상속하므로 (나)에도 Study가 들어간다.

    • Study, Lecture, Lecture 연결: (나)가 Lecture이면 클래스가 자기 자신을 상속하게 되어 불가능하다.
    • Lecture, Study, Study 연결: 부모와 자식이 뒤바뀐 것으로, 상속받는 쪽은 extends 를 쓴 Lecture이다.
    • Lecture, Lecture, Study 연결: 자기 자신 상속이 되고 부모·자식도 뒤바뀌었다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    7[7급 국가직 소프트웨어공학] 25년 1회차
    다음 파이썬 코드에서 문장 커버리지를 100% 만족하는 (가) ~ (다)에 들어갈 경로를 바르게 연결한 것은? (단, 단축연산은 수행하지 않는다)
    (1) a = int(input('종료 숫자? '))
    (2) sum = 0
    (3) i = 1
    (4) while i <= a:
    (5) if i % 2 == 0:
    (6) sum += i
    (7) i += 1
    (8) print('{}까지 짝수합은 {}'.format(a, sum))
    (1) - (2) - (3) - (4) - (5) - (가) - (나) - (다) - (8)
    (가) (나) (다)
    1
    (6) (7) (5)
    2
    (6) (7) (4)
    3
    (7) (4) (6)
    4
    (7) (4) (7)
    해설

    모든 문장을 지나는 경로는 5행 다음 6행 → 7행 → 4행을 거쳐 8행으로 가는 것이다.

    문장 커버리지를 만족하려면 경로에 6행(sum += i)이 반드시 포함되어야 한다. 제어 흐름상 5행의 if가 참이면 6행, 이어 7행, 반복문 끝에서 while 조건(4행)으로 되돌아가고 거짓이면 8행으로 나간다.

    • 6행 → 7행 → 5행: 7행 다음에는 while 조건 검사(4행)로 가야 하며 5행으로 바로 갈 수 없다.
    • 7행 → 4행 → 6행: 4행에서 6행으로 가는 흐름이 없고, 반드시 5행의 if를 거쳐야 한다.
    • 7행 → 4행 → 7행: 4행에서 7행으로 바로 갈 수 없으며 6행이 실행되지 않아 문장 커버리지도 충족하지 못한다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    8[7급 국가직 소프트웨어공학] 25년 1회차
    객체 지향 설계 원칙에 대한 설명으로 옳지 않은 것은?
    1
    단일 책임(single-responsibility)의 원칙: 클래스를 변경해야 하는 이유는 오직 하나여야 한다.
    2
    개방 폐쇄(open-closed)의 원칙: 모듈은 수정에는 열려 있어야 하고 확장에는 닫혀 있어야 한다.
    3
    리스코프 대체(Liskov substitution)의 원칙: 상위 클래스의 객체는 자신의 하위 클래스로 대체할 수 있어야 한다.
    4
    의존 관계 역전(dependency inversion)의 원칙: 클라이언트는 구체적인 클래스가 아닌 추상 클래스에 의존해야 한다.
    해설

    옳지 않은 설명은 개방 폐쇄 원칙을 거꾸로 서술한 것이다.

    개방 폐쇄 원칙은 모듈이 확장에는 열려 있고 수정에는 닫혀 있어야 한다는 원칙으로, 기존 코드를 고치지 않고 기능을 추가할 수 있게 설계하라는 뜻이다.

    • 단일 책임 원칙: 클래스는 하나의 책임만 가져 변경 이유가 하나뿐이어야 한다는 설명은 옳다.
    • 리스코프 대체 원칙: 상위 타입 객체 자리에 하위 타입 객체를 넣어도 프로그램이 올바르게 동작해야 한다는 설명은 옳다.
    • 의존 관계 역전 원칙: 구체 클래스가 아닌 추상(인터페이스)에 의존해야 한다는 설명은 옳다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    9[7급 국가직 소프트웨어공학] 25년 1회차
    (가)에 해당하는 시암 치댐버(Shyam R. Chidamber)와 크리스 캐머러(Chris F. Kemerer)의 객체지향 설계 척도는?
    ( (가) ) =Cm1+Cm2+⋯+Cmn= C_{m1} + C_{m2} + \dots + C_{mn}
    단, CmiC_{mi}(i=1, 2, ..., n)는 클래스 C에 있는 메소드의 복잡도이다.
    1
    NOC(Number Of Children)
    2
    WMC(Weighted Methods per Class)
    3
    CBO(Coupling Between Object classes)
    4
    LCOM(Lack of Cohesion in Methods)
    해설

    클래스 내 메소드 복잡도의 합으로 정의되는 척도는 WMC(Weighted Methods per Class)이다.

    WMC는 클래스에 정의된 각 메소드의 복잡도를 모두 더한 값으로, 값이 클수록 클래스 구현·유지보수 노력이 크고 재사용성이 낮다고 본다.

    • NOC: 클래스의 직계 하위 클래스 수를 센다.
    • CBO: 해당 클래스와 결합된 다른 클래스의 수를 센다.
    • LCOM: 메소드들이 인스턴스 변수를 공유하지 않는 정도, 즉 응집도 결여를 잰다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    10[7급 국가직 소프트웨어공학] 25년 1회차
    시험 운영 중인 보안관제 시스템이 다음 표와 같이 운영되면서 정상 가동 중에 고장이 발생하였을 때, 시스템의 가용성(availability)은?
    가동1고장1가동2고장2가동3고장3가동4
    시간(h)124921035
    1
    0.2
    2
    0.25
    3
    0.8
    4
    0.9
    해설

    시스템의 가용성은 0.8이다.

    가용성은 전체 시간 중 가동 시간의 비율이다.
    A=UpUp+DownA = \dfrac{\mathrm{Up}}{\mathrm{Up} + \mathrm{Down}}

    가동 시간 합은 12+9+10+5=36 h12 + 9 + 10 + 5 = 36\,\mathrm{h}, 고장 시간 합은 4+2+3=9 h4 + 2 + 3 = 9\,\mathrm{h}이다.
    A=3636+9=3645=0.8A = \dfrac{36}{36 + 9} = \dfrac{36}{45} = 0.8

    • 0.2는 고장 시간 비율(9/45)로, 가용성의 반대 개념인 비가용 비율이다.
    • 0.25는 고장 시간을 가동 시간으로 나눈 값(9/36)이라 가용성 정의와 다르다.
    • 0.9는 가동·고장 시간을 잘못 합산해야 나오는 값으로 표의 수치와 맞지 않는다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    11[7급 국가직 소프트웨어공학] 25년 1회차
    다음과 같이 Java 코드를 변경하였을 때 적용된 기법은?
    void select(int num)
    {
    System.out.println("1. 한국어, 2. 영어");
    if(num == 1)
    System.out.println("한국어");
    else
    System.out.println("영어");
    }
    ⇩
    void select(int num)
    {
    System.out.println("1. 한국어, 2. 영어");
    lang(num);
    }
    void lang(int i)
    {
    if(i == 1)
    System.out.println("한국어");
    else
    System.out.println("영어");
    }
    1
    리팩토링(refactoring)
    2
    재사용(reuse)
    3
    순공학(forward engineering)
    4
    역공학(reverse engineering)
    해설

    적용된 기법은 리팩토링이다.

    프로그램의 외부 동작(출력 결과)은 그대로 두고, 조건 출력 부분을 별도 메소드로 뽑아내는 메소드 추출로 내부 구조만 개선했다.

    • 재사용: 이미 만들어진 컴포넌트·코드를 다른 곳에서 다시 활용하는 것으로, 구조 개선과는 다르다.
    • 순공학: 요구·설계에서 출발해 구현으로 내려가는 일반적인 개발 방향을 말한다.
    • 역공학: 기존 코드에서 설계·명세 같은 상위 수준 정보를 추출하는 활동이다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    12[7급 국가직 소프트웨어공학] 25년 1회차
    다음과 같은 조건으로 소프트웨어 개발 프로젝트를 수행할 때, 계약 기간 내에 프로젝트를 성공적으로 수행하기 위해 필요한 최소 기간은?
    프로젝트 명재고관리 시스템 개발
    추정 소스 코드 라인 수65,000 LOC
    개발자 1인당 월평균 생산성
    (LOC/MM)
    초급자1,000중급자1,500
    현재 투입 가능 개발자 수
    (명)
    초급자4중급자2
    1
    7개월
    2
    8개월
    3
    9개월
    4
    10개월
    해설

    필요한 최소 기간은 10개월이다.

    월 생산량 = 초급 4명 × 1,000 + 중급 2명 × 1,500
    4×1000+2×1500=7000 LOC/month4 \times 1000 + 2 \times 1500 = 7000\,\mathrm{LOC/month}

    기간 = 총 LOC ÷ 월 생산량
    650007000≈9.29\dfrac{65000}{7000} \approx 9.29

    9개월로는 63,000 LOC만 개발되어 부족하므로 올림하여 10개월이 필요하다.

    • 7개월·8개월: 각각 49,000·56,000 LOC로 목표에 크게 못 미친다.
    • 9개월: 63,000 LOC로 2,000 LOC가 남는다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    13[7급 국가직 소프트웨어공학] 25년 1회차
    다음 설명에 해당하는 소프트웨어 형상 관리 활동은?
    ○ 형상 관리 계획서에 따라 변경 관리 프로세스가 진행되었는지 평가한다.
    ○ 형상 항목의 변경이 요구사항에 맞게 이루어졌는지 확인한다.
    1
    형상 통제(configuration control)
    2
    형상 식별(configuration identification)
    3
    형상 감사 및 검토(configuration audits and reviews)
    4
    형상 상태 보고(configuration status accounting)
    해설

    설명에 해당하는 활동은 형상 감사 및 검토이다.

    형상 감사는 변경이 계획서의 절차대로 진행되었는지, 변경 결과가 요구사항에 맞는지 검증·확인하는 활동이다.

    • 형상 통제: 변경 요청을 검토·승인하고 기준선에 반영하도록 통제하는 활동이다.
    • 형상 식별: 관리 대상 형상 항목을 정하고 식별자를 부여하는 활동이다.
    • 형상 상태 보고: 형상 항목의 변경 이력과 현재 상태를 기록·보고하는 활동이다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    14[7급 국가직 소프트웨어공학] 25년 1회차
    프로토타입 모델에 대한 설명으로 옳지 않은 것은?
    1
    프로토타입을 통해 새로운 요구사항을 발견할 수 있다.
    2
    시스템 개발 최종 종료 단계에서만 오류를 탐지할 수 있다.
    3
    사용자가 초기 프로토타입을 최종 완성된 소프트웨어로 오인할 수 있다.
    4
    개발자 입장에서 프로토타이핑 과정을 관리·통제하기 어렵다.
    해설

    옳지 않은 설명은 최종 종료 단계에서만 오류를 탐지할 수 있다는 것이다.

    프로토타입 모델은 시제품을 일찍 만들어 사용자 피드백을 받으므로 개발 초기부터 요구 오류를 발견할 수 있다. 막바지에야 결과를 확인하는 것은 폭포수 모델의 단점이다.

    • 프로토타입을 보며 사용자가 새로운 요구사항을 발견할 수 있다는 설명은 장점으로 옳다.
    • 사용자가 시제품을 완성품으로 오인할 수 있다는 설명은 대표적 단점으로 옳다.
    • 반복 수정이 이어져 관리·통제가 어렵다는 설명도 단점으로 옳다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    15[7급 국가직 소프트웨어공학] 25년 1회차
    SPICE(ISO/IEC 15504) 모델에서 정의한 프로세스 성숙도 수준에 속하지 않은 것은?
    1
    수행(performed) 단계
    2
    관리(managed) 단계
    3
    정의(defined) 단계
    4
    최적화(optimizing) 단계
    해설

    SPICE 성숙도 수준에 속하지 않는 것은 정의(defined) 단계이다.

    SPICE의 능력 수준은 불완전(incomplete), 수행(performed), 관리(managed), 확립(established), 예측(predictable), 최적화(optimizing)의 6단계다. '정의' 단계는 CMMI 단계적 표현의 명칭이다.

    • 수행 단계: 프로세스 목적을 달성하는 수준으로 SPICE에 있다.
    • 관리 단계: 프로세스를 계획·관리하는 수준으로 SPICE에 있다.
    • 최적화 단계: 프로세스를 지속적으로 개선하는 최상위 수준으로 SPICE에 있다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    16[7급 국가직 소프트웨어공학] 25년 1회차
    다음 Java 코드의 실행 결과는?
    class Car {
    public void type() {
    System.out.println("Car");
    }
    }

    class Truck extends Car {
    public void type() {
    System.out.println("Truck");
    }
    }

    class Campingcar extends Truck {
    public void type() {
    super.type();
    System.out.println("Camping car");
    }
    }

    public class Main {
    public static void main(String[] args) {
    Car c = new Campingcar();
    c.type();
    }
    }
    1
    Car
    2
    Camping car
    3
    Car
    Truck
    4
    Truck
    Camping car
    해설

    실행 결과는 Truck 다음 줄에 Camping car가 출력된다.

    참조형이 Car여도 실제 객체가 Campingcar이므로 동적 바인딩에 따라 Campingcar의 type()이 호출된다. 그 안의 super.type()은 바로 위 부모인 Truck의 type()을 호출해 Truck을 출력하고, 이어서 Camping car를 출력한다.

    • Car만 출력: 참조 타입 기준으로 메소드가 선택된다고 착각한 결과다.
    • Camping car만 출력: super.type() 호출을 빠뜨린 결과다.
    • Car와 Truck 출력: Car의 type()은 하위 클래스에서 재정의되어 호출되지 않으며, Campingcar 자신의 출력도 빠졌다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    17[7급 국가직 소프트웨어공학] 25년 1회차
    순환 복잡도(cyclomatic complexity)가 4인 Java 코드는?
    1
    int max(int x, int y) {
    int m = 0;
    if(x > y)
    m = x;
    else
    m = y;
    return m;
    }
    2
    int bonus(int base) {
    int x = 0;
    if(base > 2000)
    x = 3000;
    else if(base > 1000)
    x = 2000;
    else
    x = 1000;
    return x;
    }
    3
    int calculate(int x, int y) {
    while(x != y) {
    if(x > y)
    x -= y;
    else
    y -= x;
    }
    return x;
    }
    4
    int penalty(int speed) {
    int money = 0;
    if(speed > 200) {
    if(speed < 150)
    money = 50;
    else {
    money = 30;
    if(speed <= 100)
    money = 0;
    }
    }
    return money;
    }
    해설

    순환 복잡도가 4인 코드는 penalty 메소드이다.

    순환 복잡도는 결정(조건) 수 + 1로 구할 수 있다. penalty에는 speed>200, speed<150, speed<=100의 if가 3개 있으므로 3 + 1 = 4이다.

    • max: if 하나뿐이라 복잡도는 2이다.
    • bonus: if와 else if 두 결정이라 복잡도는 3이다.
    • calculate: while과 if 두 결정이라 복잡도는 3이다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    18[7급 국가직 소프트웨어공학] 25년 1회차
    다음 파이썬 코드에 적용한 디자인 패턴은?
    class Greeting(object):
    def say(self):
    kor = Korea()
    kor.kor_hi()

    jan = Japan()
    jan.jan_hi()

    chn = China()
    chn.ch_hi()

    class Korea(object):
    def kor_hi(self):
    print("안녕하세요\n")

    class Japan(object):
    def jan_hi(self):
    print("곤니찌와\n")

    class China(object):
    def ch_hi(self):
    print("니하오마\n")

    class Hello(object):
    def sayhello(self):
    sh = Greeting()
    sh.say()


    insa = Hello()
    insa.sayhello()
    1
    브릿지(bridge)
    2
    어댑터(adapter)
    3
    퍼사드(facade)
    4
    컴포지트(composite)
    해설

    적용된 디자인 패턴은 퍼사드(facade)이다.

    Hello는 Korea·Japan·China를 직접 다루지 않고 Greeting의 say() 하나만 호출한다. 여러 하위 클래스를 감싸 단순한 통합 인터페이스를 제공하는 것이 퍼사드의 특징이다.

    • 브릿지: 추상화와 구현을 분리해 각각 독립적으로 확장하게 하는 패턴으로, 추상-구현 계층 분리가 코드에 없다.
    • 어댑터: 호환되지 않는 인터페이스를 변환해 맞춰 주는 패턴으로, 인터페이스 변환이 없다.
    • 컴포지트: 객체를 트리 구조로 구성해 부분과 전체를 동일하게 다루는 패턴으로, 계층 구조가 없다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    19[7급 국가직 소프트웨어공학] 25년 1회차
    다음 파이썬 코드에 해당하는 결합도(coupling)는?
    a = 0
    b = 0

    def getinput():
    c = int(input("숫자 입력? "))
    return c

    def getadd():
    c = a + b
    return c

    def main():
    global a
    global b
    a = getinput()
    b = getinput()
    c = getadd()
    print("{} + {} = {}".format(a, b, c))

    main()
    1
    스탬프(stamp) 결합도
    2
    제어(control) 결합도
    3
    공통(common) 결합도
    4
    내용(content) 결합도
    해설

    코드의 결합도는 공통(common) 결합도이다.

    main()과 getadd()가 매개변수 없이 전역 변수 a, b를 함께 읽고 쓰며 데이터를 주고받는다. 이처럼 공유 전역 데이터 영역을 참조하는 것이 공통 결합도다.

    • 스탬프 결합도: 자료구조(레코드·객체) 전체를 매개변수로 넘기는 경우로, 이 코드에는 매개변수 전달이 없다.
    • 제어 결합도: 플래그 같은 제어 정보를 넘겨 상대 모듈의 흐름을 바꾸는 경우로, 해당 사항이 없다.
    • 내용 결합도: 다른 모듈의 내부 코드나 지역 데이터를 직접 참조·변경하는 경우로, 이 코드는 전역 변수만 공유한다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    20[7급 국가직 소프트웨어공학] 25년 1회차
    다음 세부 품질 요소를 모두 포함하는 ISO/IEC 9126의 소프트웨어 품질 특성은?
    ○ 보안성
    ○ 준수성
    ○ 상호운용성
    ○ 정확성
    ○ 적합성
    1
    신뢰성(reliability)
    2
    기능성(functionality)
    3
    사용성(usability)
    4
    안정성(stability)
    해설

    제시된 세부 특성을 모두 포함하는 품질 특성은 기능성(functionality)이다.

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

    • 신뢰성: 성숙성·결함 허용성·회복성 등을 부특성으로 가진다.
    • 사용성: 이해성·학습성·운용성 등을 부특성으로 가진다.
    • 안정성: ISO/IEC 9126의 주 품질 특성이 아니며, 유지보수성의 부특성 명칭으로 쓰인다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    21[7급 국가직 소프트웨어공학] 25년 1회차
    WBS(work breakdown structure)에 대한 설명으로 옳지 않은 것은?
    1
    프로젝트를 다수의 구성 요소로 분할하여 계층적으로 기술한 업무 구조이다.
    2
    프로젝트 수행 과정에서 요구되는 자원의 단위와 단가 정보를 작성한다.
    3
    구성 요소를 산출물 중심으로 작성하거나 프로세스 중심으로 작성할 수 있다.
    4
    프로젝트 전체 범위를 정의하고 프로젝트 계획과 관리를 위한 자료로 사용된다.
    해설

    옳지 않은 설명은 자원의 단위와 단가 정보를 작성한다는 것이다.

    WBS는 프로젝트 범위를 작업 단위로 분해한 계층 구조일 뿐이며, 자원 단가와 비용은 WBS를 바탕으로 이후 원가 산정·예산 수립 단계에서 작성한다.

    • 프로젝트를 구성 요소로 나누어 계층적으로 기술한 구조라는 설명은 옳다.
    • 산출물 중심 또는 프로세스 중심으로 작성할 수 있다는 설명은 옳다.
    • 전체 범위를 정의하고 계획·관리의 기초 자료로 쓴다는 설명은 옳다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    22[7급 국가직 소프트웨어공학] 25년 1회차
    기능점수(function point)에 대한 설명으로 옳지 않은 것은?
    1
    기능점수의 기준이 되는 소프트웨어 기능은 데이터 측면의 기능과 트랜잭션 측면의 기능으로 구분된다.
    2
    기능점수는 소프트웨어 개발 이전에 업무량을 측정할 수 있으며 소프트웨어 개발에 사용하는 언어와는 무관하다.
    3
    기능점수 측정 대상 유형은 내부 논리파일, 내부 연계파일, 외부 입력, 외부 출력, 외부 조회이다.
    4
    기능점수 방법은 소프트웨어 개발, 유지관리 및 재개발을 위한 비용을 산정하는 데 사용한다.
    해설

    옳지 않은 설명은 측정 유형에 내부 연계파일이 있다고 한 것이다.

    기능점수 측정 유형은 데이터 기능인 내부 논리파일(ILF)·외부 연계파일(EIF)과 트랜잭션 기능인 외부 입력(EI)·외부 출력(EO)·외부 조회(EQ)의 5가지다.

    • 소프트웨어 기능을 데이터 기능과 트랜잭션 기능으로 구분한다는 설명은 옳다.
    • 개발 전 사용자 관점에서 측정하며 개발 언어와 무관하다는 설명은 옳다.
    • 개발·유지관리·재개발 비용 산정에 사용한다는 설명은 옳다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    23[7급 국가직 소프트웨어공학] 25년 1회차
    다음 CPM 네트워크의 각 노드가 작업명과 작업에 소요되는 예상 기간을 나타낼 때, 프로젝트를 완성하는 데 예상되는 최단 기간은?
    문제 이미지
    1
    21일
    2
    24일
    3
    28일
    4
    30일
    해설

    프로젝트 최단 완료 기간은 가장 긴 경로인 임계 경로 A→C→G→F→J의 합인 30일이다.

    각 작업의 가장 빠른 종료 시점(선행 작업 종료 최댓값 + 자기 기간)을 앞에서부터 구한다.
    A 5, B 5+4=9, C 5+7=12, D 9+6=15, E max(9,12)+8=20, G 12+2=14
    F max(9,12,14)+8=22, H max(15,20)+5=25, I max(20,25)+4=29, J max(22,14)+8=30

    종료 작업 I(29일)와 J(30일) 중 늦은 쪽이 프로젝트 완료 시점이 되며, 임계 경로 기간 합은 5+7+2+8+8=30이다.

    • 21일: A→B→E→I 경로의 합으로, 더 긴 경로를 무시한 값이다.
    • 24일: A→B→D→H→I 경로의 합으로, 역시 임계 경로가 아니다.
    • 28일: A→C→F→J 경로의 합으로, G를 거쳐 F로 가는 더 긴 경로(30일)를 놓친 값이다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    24[7급 국가직 소프트웨어공학] 25년 1회차
    UML 설계의 4+1 View 모델에 대한 설명으로 옳은 것은?
    1
    논리적 관점은 시스템의 기능을 설명하기 위해 클래스 다이어그램이나 시퀀스 다이어그램을 사용한다.
    2
    개발 관점은 시스템이 사용자에게 제공하는 기능에 주목하며, 유스케이스 다이어그램이나 상태 다이어그램을 사용한다.
    3
    물리적 관점은 시스템이 어떻게 개발되는지에 대한 관점이며, 클래스 다이어그램이나 유스케이스 다이어그램을 사용한다.
    4
    프로세스 관점은 시스템에 필요한 하드웨어 환경을 나타내며, 배치 다이어그램이나 클래스 다이어그램을 사용한다.
    해설

    옳은 설명은 논리적 관점이 클래스·시퀀스 다이어그램으로 시스템 기능을 설명한다는 것이다.

    4+1 View에서 논리 뷰는 최종 사용자에게 제공할 기능을 객체 구조와 상호작용으로 표현하며, +1인 유스케이스(시나리오) 뷰가 나머지 네 뷰를 묶는다.

    • 개발 관점: 사용자 기능이 아니라 소프트웨어 모듈·패키지 구성을 다루며 컴포넌트·패키지 다이어그램을 쓴다.
    • 물리적 관점: 개발 방식이 아니라 소프트웨어가 하드웨어 노드에 어떻게 배치되는지를 다루며 배치 다이어그램을 쓴다.
    • 프로세스 관점: 하드웨어 환경이 아니라 실행 시 동시성·프로세스 간 상호작용을 다루며 활동·시퀀스 다이어그램을 쓴다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.
    25[7급 국가직 소프트웨어공학] 25년 1회차
    다음 코드에서 제시된 설계 원칙은?
    class Gongmuwon {
    private String name;
    private String dept;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public void setDept(String dept) {
    this.dept = dept;
    }
    }
    1
    캡슐화
    2
    다형성
    3
    상속
    4
    추상화
    해설

    코드에 제시된 설계 원칙은 캡슐화이다.

    필드 name·dept를 private으로 숨기고 public getter·setter 메소드로만 접근하게 하여 정보 은닉을 구현했다.

    • 다형성: 같은 메시지에 객체별로 다르게 동작하는 성질로, 오버라이딩·오버로딩이 코드에 없다.
    • 상속: 상위 클래스의 속성·메소드를 물려받는 것으로, extends 관계가 없다.
    • 추상화: 공통 특성을 뽑아 추상 클래스·인터페이스로 정의하는 것으로, 해당 구조가 없다.

    오류나 개정된 내용이 보이면 알려주세요

    메모
    아직 메모가 없어요. 위 버튼으로 첫 메모를 남겨보세요.

[7급 국가직 소프트웨어공학] 25년 1회차 시험지 PDF 다운로드·인쇄 →

[7급 국가직 소프트웨어공학] 25년 1회차 정답과 해설은 무료인가요?

이 페이지의 25문항 정답과 해설은 로그인 없이 무료로 볼 수 있습니다. 무제한 풀이·실전 모의고사·PDF 출력·전자책 다운로드는 베이직 플랜에 포함됩니다.

이 회차를 CBT 로 직접 풀어볼 수 있나요?

7급 국가직 소프트웨어공학 기출문제 암기장에서 이 회차를 회차별·랜덤으로 풀고 오답노트에 자동으로 모을 수 있습니다. 7급 국가직 소프트웨어공학 기출문제 풀러 가기 →

시험지 PDF 나 전자책으로도 볼 수 있나요?

이 회차의 인쇄용 시험지 PDF 페이지에서 시험지를 받을 수 있습니다. 시험지 PDF 받기 →

[7급 국가직 소프트웨어공학] 25년 1회차 문항별 상세 페이지 전체 보기