소프트웨어 설계 · 오답노트
2025년 1회
소프트웨어 공학에서 워크스루(Walkthrough)에 대한 설명으로 틀린 것은?
핵심 해설
워크스루(Walkthrough)는 개발자가 작성한 산출물을 동료들과 함께 검토하는 비공식(informal) 검토 기법이다. 검토 자료를 회의 전에 미리 배포해 사전 검토한 뒤 짧은 회의를 열어 오류를 조기에 발견하며, 간단한 테스트 케이스를 가지고 사람이 직접 코드나 설계를 따라가 보는 방식으로 진행한다. 이에 비해 인스펙션(Inspection)은 작성자를 제외한 전문 검토 그룹이 체크리스트와 정해진 역할(중재자, 판독자, 기록자 등)에 따라 산출물을 조사하는 공식적(formal) 검토이며, 결함 기록과 후속 조치까지 절차화되어 있다. 따라서 워크스루와 인스펙션은 형식성과 참여자 구성이 다른 별개의 기법이다.
보기별 해설
정리
애자일 방법론에 해당하지 않는 것은?
핵심 해설
애자일(Agile)은 짧은 반복 주기로 동작하는 소프트웨어를 만들며 변화에 대응하는 개발 철학이며, 이를 구체화한 실천 방법론에는 익스트림 프로그래밍(XP), 스크럼(Scrum), 기능 중심 개발(FDD), 칸반(Kanban), 린(Lean), 크리스탈(Crystal), ASD, DSDM 등이 있다. 이들은 모두 반복적 개발, 고객 참여, 자기 조직화된 팀 같은 애자일 가치를 공유한다. 반면 '개발 및 검증'은 특정 방법론의 이름이 아니라 개발 생명주기 안의 활동 단계를 가리키는 일반 표현이므로 애자일 방법론에 해당하지 않는다.
보기별 해설
정리
익스트림 프로그래밍에 대한 설명으로 틀린 것은?
핵심 해설
익스트림 프로그래밍(XP, eXtreme Programming)은 켄트 벡이 제안한 애자일 방법론으로, 요구 변화가 잦고 불확실한 소규모 프로젝트에 적합하다. 의사소통·단순성·피드백·용기·존중의 5가지 가치를 바탕으로 짧은 릴리즈, 페어 프로그래밍, 테스트 주도 개발, 리팩토링, 지속적 통합, 공동 코드 소유 같은 구체적 실천 항목을 정의하며, 방대한 문서보다 동작하는 소스 코드를 중시한다. 반면 구조적 방법론은 1970~80년대의 절차 지향 개발 방법론으로 DFD·자료 사전 같은 도구를 사용하는 전통적 접근이므로 XP와는 계보가 전혀 다르다.
보기별 해설
정리
럼바우(Rumbaugh) 분석 기법에서 정보 모델링이라고도 하며시스, 템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 다이어그램을 표시하는 모델링은?
핵심 해설
럼바우(Rumbaugh)의 OMT(Object Modeling Technique)는 분석을 객체 모델링, 동적 모델링, 기능 모델링의 세 단계로 나눈다. 이 중 객체 모델링(Object Modeling)은 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산을 식별하고 객체들 사이의 관계를 규정해 객체 다이어그램으로 표현한다. 동적 모델링은 상태 다이어그램으로 시간 흐름에 따른 상태 변화와 제어 흐름을, 기능 모델링은 자료 흐름도(DFD)로 데이터 값의 변환 과정을 표현한다. 따라서 문제의 조건에 해당하는 것은 객체(Object) 모델링이다.
보기별 해설
정리
설계 기법 중 하향식 설계 방법과 상향식 설계 방법에 대한 비교 설명으로 가장 옳지 않은 것은?
핵심 해설
하향식(Top-down) 설계는 시스템의 최상위 기능부터 정의하고 이를 점차 하위 모듈로 분할해 내려가는 방식이고, 상향식(Bottom-up) 설계는 최하위의 구체적인 모듈을 먼저 만들고 이를 결합해 상위 기능을 구성하는 방식이다. 하향식은 상위에서 하위로 내려가며 인터페이스가 먼저 정의되므로 통합이 수월하지만, 낮은 레벨의 데이터 구조 세부 사항은 설계 후반에 결정하므로 초기 단계에서는 필요하지 않다. 반대로 상향식은 상위 인터페이스가 아직 확정되지 않은 상태에서 모듈을 만들기 때문에, 나중에 기능을 추가하거나 통합할 때 인터페이스 불일치가 생겨 오히려 어려워진다.
보기별 해설
정리
요구사항 명세에 대한 설명으로 틀린 것은?
핵심 해설
요구사항 명세(Specification)는 도출·분석된 요구사항을 체계적인 문서와 모델로 정리하는 활동이다. 명세서는 기능 요구사항을 빠짐없이 완전하고 명확하게 기술해야 하고, 요구사항의 출처와 반영 위치를 되짚을 수 있는 추적성(Traceability)을 갖춰야 하며, 검증 가능성과 일관성도 요구된다. 표기 방식은 자연어로 서술하는 비정형 명세와 수학적 원리·모델을 사용하는 정형 명세(Z, VDM, Petri-net 등)로 나뉜다. 1~3번은 각각 명세의 정의, 완전성·명확성, 추적성을 정확히 기술한 옳은 설명이고, 공식 정답은 4번이다. 다만 자료 사전(DD)은 구조적 분석에서 자료 흐름도의 자료 항목을 정의하는 표기 도구로 요구사항 명세에 실제로 사용될 수 있어, 4번 서술 자체는 사실로서 옳다. 원본 시험지를 대조한 결과 보기 4번은 '사용될 수 있다'로 인쇄되어 있으며 부정어 누락 등 인쇄·추출상의 오류는 없었다. 따라서 이 문항은 출제 의도상 결함이 있는 것으로 보인다.
보기별 해설
정리
바람직한 소프트웨어 설계 지침이 아닌 것은?
핵심 해설
좋은 모듈 설계의 핵심 지침은 결합도(Coupling)를 낮추고 응집도(Cohesion)를 높여 모듈의 독립성을 확보하는 것이다. 또한 복잡도와 중복을 줄이고 일관된 구조를 유지하며, 제어 흐름은 하나의 입구와 하나의 출구를 갖도록 해 이해와 검증을 쉽게 만든다. 모듈의 크기는 무조건 작을수록 좋은 것이 아니라 적당해야 하는데, 지나치게 잘게 나누면 모듈 수와 호출 관계가 늘어 인터페이스 비용과 결합도가 커지고 오히려 복잡해진다. 따라서 크기를 최소화해 병행성 수준을 높이자는 것은 바람직한 설계 지침이 아니다.
보기별 해설
정리
UML(Unified Modeling Language)에 대한 설명 중 틀린 것은?
핵심 해설
UML 다이어그램은 사용자 관점의 기능 모델(유스케이스 다이어그램), 시스템 구조를 나타내는 정적 모델(클래스·객체·컴포넌트 다이어그램), 시스템의 동작을 나타내는 동적 모델(시퀀스·상태·활동 다이어그램)로 나눌 수 있다. 이 가운데 시퀀스 다이어그램(Sequence Diagram)은 객체들 사이에 오가는 메시지를 시간 순서에 따라 배열해 상호작용을 표현하고, 상태 다이어그램(State Diagram)은 하나의 객체가 가지는 상태와 사건에 의한 상태 전이를 표현한다. 즉 두 다이어그램의 역할이 서로 뒤바뀌어 서술된 항목이 틀린 설명이다.
보기별 해설
정리
코드 설계에서 일정한 일련번호를 부여하는 방식의 코드는?
핵심 해설
코드는 자료의 식별·분류·집계를 쉽게 하기 위해 부여하는 기호이며, 부여 방식에 따라 여러 유형으로 나뉜다. 순차 코드(Sequence Code)는 자료의 발생 순서나 정해진 일정 기준에 따라 1, 2, 3…처럼 일련번호를 차례로 붙이는 가장 단순한 코드이다. 이 밖에 일정 기준으로 구간을 나누어 번호를 할당하는 블록 코드, 대상의 명칭을 연상시키는 문자·기호를 쓰는 연상 코드, 대상의 물리적 수치를 그대로 코드에 반영하는 표의 숫자 코드 등이 있다. 문제에서 말하는 '일정한 일련번호를 부여하는 방식'은 순차 코드에 해당한다.
보기별 해설
정리
시스템의 구성 요소로 볼 수 없는 것은?
핵심 해설
시스템(System)은 공동의 목표를 위해 여러 요소가 유기적으로 결합된 집합체이며, 기본 구성 요소는 입력(Input), 처리(Process), 출력(Output), 제어(Control), 피드백(Feedback) 다섯 가지이다. 입력은 자료를 받아들이고, 처리는 이를 목적에 맞게 변환하며, 출력은 결과를 내보낸다. 제어는 각 단계가 올바르게 수행되는지 감시·조정하고, 피드백은 출력 결과를 다시 입력 쪽으로 되돌려 시스템을 개선하게 한다. 유지보수(Maintenance)는 소프트웨어 생명주기의 한 단계일 뿐 시스템의 구성 요소가 아니다.
보기별 해설
정리
파이프 필터 형태의 소프트웨어 아키텍처에 대한 설명으로 옳은 것은?
핵심 해설
파이프-필터(Pipe-Filter) 아키텍처는 데이터를 변환하는 처리 단위인 필터(Filter)와, 필터 사이에서 데이터를 전달하는 통로인 파이프(Pipe)로 구성된다. 각 필터는 앞 단계에서 넘어온 데이터를 받아 처리한 뒤 결과를 다음 필터로 넘기며, 이 과정이 순차적으로 반복되어 최종 결과가 만들어진다. 필터끼리 상태를 공유하지 않으므로 필터의 재사용과 교체·추가가 쉽고 병렬 처리에도 유리하며, UNIX의 셸 파이프라인이나 컴파일러 처리 단계가 대표적인 예이다.
보기별 해설
정리
데이터 흐름도(DFD)의 구성 요소에 포함되지 않는 것은?
핵심 해설
자료 흐름도(DFD, Data Flow Diagram)는 자료가 어떤 처리를 거쳐 어디로 흐르는지를 도형으로 표현한 구조적 분석 도구이다. 구성 요소는 자료를 변환하는 처리(Process, 원 또는 둥근 사각형), 자료의 이동 경로인 자료 흐름(Data Flow, 화살표), 자료가 보관되는 자료 저장소(Data Store, 두 줄의 평행선), 그리고 시스템 외부의 자료 발생·소멸 지점인 단말(Terminator, 사각형) 네 가지이다. 자료 사전(Data Dictionary)은 DFD에 나타난 자료 항목의 구성과 의미를 별도로 정의하는 보조 명세 도구이므로 DFD 자체의 구성 요소가 아니다.
보기별 해설
정리
사용자 인터페이스의 설계 지침에 대한 설명으로 옳지 않은 것은?
핵심 해설
사용자 인터페이스(UI) 설계는 사용자가 쉽고 정확하게 목적을 달성하도록 돕는 것이 목표이며, 직관성·유효성·학습성·유연성이라는 원칙 위에서 일관성, 예측 가능성, 단순성, 오류 최소화 같은 지침을 따른다. 특히 화면에 지나치게 많은 기능을 담고 조작 방법을 여러 갈래로 늘리면 사용자가 혼란을 겪고 학습 부담과 조작 오류가 커진다. 따라서 UI는 기능을 최대한 넣는 방향이 아니라, 꼭 필요한 기능을 단순하고 일관된 방식으로 제공하는 방향으로 설계해야 한다.
보기별 해설
정리
UI 설계 원칙에서 누구나 쉽게 이해하고 사용할 수 있어야 한다는 것은?
핵심 해설
UI 설계 원칙은 직관성, 유효성, 학습성, 유연성 네 가지이다. 직관성(Intuitiveness)은 누구나 별도의 설명이나 학습 없이 화면을 보고 바로 이해하고 쉽게 사용할 수 있어야 한다는 원칙으로, 쉬운 사용성과 일관된 화면 구성이 세부 지침이다. 유효성은 사용자의 목적을 정확하고 완전하게 달성하게 하는 것, 학습성은 초보자도 쉽게 배우고 익힐 수 있게 하는 것, 유연성은 사용자의 다양한 요구를 수용하고 오류를 최소화·복구하게 하는 것을 뜻한다.
보기별 해설
정리
디자인 패턴 사용의 장단점에 대한 설명으로 거리가 먼 것은?
핵심 해설
디자인 패턴은 반복적으로 나타나는 설계 문제에 대한 검증된 해결책을 정형화한 것으로, 설계 재사용을 통해 개발자 간 의사소통과 구조 파악을 쉽게 하고 객체지향 설계·구현의 생산성과 유지보수성을 높인다. 그러나 패턴을 익히고 상황에 맞게 적용하려면 학습 시간과 설계 검토가 필요하고, 단순한 문제에 패턴을 적용하면 클래스 수가 늘어 구조가 오히려 복잡해진다. 즉 디자인 패턴은 장기적인 재사용 효과가 크지만 초기 투자 비용과 개발 시간은 오히려 늘어나는 것이 일반적이므로, 이를 절약된다고 본 설명은 옳지 않다.
보기별 해설
정리
UML에서 시퀀스 다이어그램의 구성 항목에 해당하지 않는 것은?
핵심 해설
시퀀스 다이어그램(Sequence Diagram)은 객체들이 시간 순서에 따라 주고받는 메시지를 표현하는 UML 행위 다이어그램이다. 구성 항목은 상호작용에 참여하는 액터(Actor)와 객체(Object), 객체의 존속 기간을 나타내는 수직 점선인 생명선(Lifeline), 객체가 실제로 동작 중인 구간을 나타내는 가는 직사각형인 실행(Activation, 활성 구간), 그리고 객체 사이의 요청·응답을 나타내는 메시지(Message)이다. 반면 확장(extend)은 유스케이스 다이어그램에서 유스케이스 사이의 선택적 확장 관계를 나타내는 개념이므로 시퀀스 다이어그램의 구성 항목이 아니다.
보기별 해설
정리
소프트웨어 설계에서 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미하는 것은?
핵심 해설
설계 단계는 시스템 전체 구조를 정하는 상위 설계(아키텍처 설계)와 코드 작성 수준까지 구체화하는 하위 설계(상세 설계)로 나뉜다. 하위 설계에서 각 모듈의 세부 역할과 모듈 간 인터페이스를 구현 수준으로 정할 때 참조할 수 있는 전형적인 해결 방식이나 예제를 디자인 패턴(Design Pattern)이라 한다. 디자인 패턴은 반복해서 등장하는 설계 문제에 대해 검증된 구조를 이름과 함께 정형화한 것으로, GoF는 이를 생성·구조·행위 세 가지 목적으로 분류했다.
보기별 해설
정리
소프트웨어 모델링과 관련한 설명으로 틀린 것은?
핵심 해설
소프트웨어 모델링은 개발할 시스템을 추상화한 모델로 표현해 이해와 의사소통을 돕는 활동이다. 구조적 방법론에서는 DFD, 자료 사전(DD), 소단위 명세서 등으로 요구사항을 표현하고, 객체지향 방법론에서는 UML 표기법을 사용한다. 모델링 작업들은 서로 독립적으로 진행되는 것이 아니라 긴밀히 연결되어, 앞선 모델의 결과가 뒤따르는 모델의 입력이 되고 서로 일관성을 유지해야 한다. 예를 들어 유스케이스 모델에서 도출된 개념이 클래스 다이어그램과 시퀀스 다이어그램에 그대로 반영되므로, 결과물이 다른 모델링에 영향을 줄 수 없다는 설명은 틀렸다.
보기별 해설
정리
UML 모델에서 사용하는 구조적 다이어그램에 속하지 않은 것은?
핵심 해설
UML 다이어그램은 시스템의 정적 구성을 나타내는 구조(Structural) 다이어그램과 동적 동작을 나타내는 행위(Behavioral) 다이어그램으로 나뉜다. 구조 다이어그램에는 클래스, 객체, 컴포넌트, 배치(Deployment), 복합체 구조, 패키지 다이어그램 여섯 가지가 속하고, 행위 다이어그램에는 유스케이스, 시퀀스, 커뮤니케이션, 상태, 활동, 타이밍 다이어그램이 속한다. 상태 다이어그램(State Diagram)은 하나의 객체가 사건에 따라 상태를 어떻게 바꾸는지를 표현하므로 행위 다이어그램이며, 따라서 구조 다이어그램에 속하지 않는다.
보기별 해설
정리
객체 지향 개념 중 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미하는 것은?
핵심 해설
객체지향에서 클래스(Class)는 공통된 속성과 연산을 가진 하나 이상의 유사한 객체들을 묶어 하나의 공통 특성으로 정의한 데이터 추상화 단위이다. 즉 클래스는 객체를 만들어 내기 위한 틀이자 객체의 타입이며, 클래스를 실체화해 메모리에 생성한 개별 객체를 인스턴스(Instance)라 한다. 유사한 객체들의 공통점을 추출해 표현한다는 문제의 조건에 해당하는 것은 클래스이다.