본문 바로가기
정보처리기사/[이전] 실기 기출

정보처리기사 정처기 | 실기 1 요구사항 확인 | 소프트웨어 개발 방법론, 현행 시스템 분석, 요구사항 확인 | 단원별 정리

by YUNI Heo 2023. 3. 8.
반응형

 

✅ 핵심 키워드

애자일 방법론

  • 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론이다.

 

객체 지향 분석(OOA, Object Oriented Analysis)

  • 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계를 정의하여 모델링하는 기법이다.

 

디자인 패턴

  • 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다.

 

요구사항 분석

  • 도출된 요구사항 간 상충을 해결하고 소프트웨어의 범위를 파악하여 외부 환경과 상호 작용하는 것을 분석하는 과정이다.

 

소프트웨어 아키텍처(Software Architecture)

  • 시스템에 대한 기본 조직 체계로 시스템을 이루는 구성요소와 구성요소들 사이의 관계, 구성요소와 주변 환경들과의 관계 및 시스템의 진화와 설계를 지배하는 원칙이다.

 

✅ 1. 소프트웨어 개발 방법론

💡 소프트웨어 개발 방법론

소프트웨어 생명주기(SDLC, Software Development Life Cycle)

  • SDLC 모델 프로세스 [요설구테유]
    • 구사항 분석: 기능 요구사항, 비기능 요구사항
    • : 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계
    • : 인터페이스 개발, 자료구조 개발, 오류처리
    • 스트: 단위 테스트, 통합테스트, 시스템 테스트, 인수 테스트
    • 지보수: 예방, 완전, 교정, 적응, 유지보수
  • SDLC 모델 종류 [폭프나반]
    • 포수 모델(Waterfall model)
    • 로토타이핑 모델(Prototyping Model)
    • 선형 모델(Spiral Model): 획 및 정의 → 험 분석 → 발 → 객 평가 [계위개고]
    • 복적 모델(Iteration Model)

소프트웨어 개발방법론(Software Development Methodology) [구정객컴 애제]

  • 조적 방법론(Structured Development)
  • 보공학 방법론(Information Engineering Development)
  • 체지향 방법론(Object-Oriented Development)
    • 객체지향 구성요소 [클객 메 메인속]
    • 개체지향 기법 [캡상다추정관]
    • 계체지향 설계 원칙
  • 포넌트 기반 방법론(CBD, Component Based Development)
  • 자일 방법론(Agile Development)
    • XP, eXtreme Programming: 5가지 가치 [용단의 피존] 기(Courage), 순성(Simplicity), 사소통(Communication), 드백(Feedback),중(Respect)
    • 린(Lean)
    • 스크럼(SCRUM)
  • 품 계열 방법론(Product Line Development)

 

 

💡 프로젝트 관리

  • 프로젝트 계획: 프로젝트 목적, 범위, 일정, 예산, 인력 등을 계획
  • 위험 관리: 프로젝트 진행 중 발생할 수 있는 위험을 사전에 파악하고 대비책 수립
  • 품질 관리: 프로젝트 결과물의 품질을 보장하기 위해 계획, 검증, 테스트, 문서화 등의 작업 수행
  • 인력 관리: 인력을 효율적으로 배치하고 관리하여 프로젝트 일정과 품질을 유지하는 것을 목표로 함
  • 커뮤니케이션 관리: 프로젝트에 참여하는 모든 이해관계자 간의 원활한 소통과 정보 공유를 위해 계획 및 실행

 

💡 기출

[단답형] 2020년 2회

절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론으로, 개발 기간이 짧고 신속하며, 워터폴에 대비되는 방법론으로 최근 회사에서 각광받는 방법론 무엇인가?

  • 애자일 (Agile)

 

[해설]

  • 개발 과정에서 사람 중심으로 팀원들이 함께 협력하여 목표를 달성하는 것을 강조한다.
  • 요구사항 변경이나 개발 중 문제 발생 시, 빠르게 대처하며 변화에 유연하게 대응한다.
  • 빠르게 개발을 하기 위해 불필요한 절차나 문서를 최소화하여 개발 프로세스를 경량화한다.
  • 작은 단위로 개발하고 반복적으로 개발을 진행하므로 개발 기간이 짧고 빠르다.
  • 전통적인 워터폴 방법론에 비해 요구사항 변경이나 문제 발생 시 대처하기 쉽고 유연하게 대응한다.
  • 최근 기업에서는 빠른 개발과 변화에 대응할 수 있는 애자일 방법론을 적용하여 개발 프로세스를 진행한다.

[단답형] 2020년 1회

LoC(Line of Code)가 30,000라인이고, 개발자가 5명이며, 개발자가 월평균 300라인을 개발한다. 이때 프로젝트 개발 기간과 계산식을 쓰시오.

  • 프로젝트 개발 기간: 20개월
  • 계산식: 30,000라인 / (300라인 * 5명) = 20개월

 

[해설] 

  • LoC(Line of Code): 소프트웨어 코드 라인 수를 측정하는 지표로, 프로젝트의 규모나 복잡도를 평가한다.
  • 개발자 수: 프로젝트 개발에 참여하는 인원수이다.
  • 월평균 개발량: 개발자 한 명이 1개월 동안 평균적으로 개발할 수 있는 코드 라인 수이다.
  • 프로젝트 개발 기간: 프로젝트를 완료하기 위해 필요한 총 개발 기간이다.

[단답형] 2021년 2회

럼바우 데이터 모델링 중에서 아래에서 설명하는 모델링 유형을 보기에서 골라서 쓰시오. (Operation, Sequence, Information, Transaction, Functional, Dynamic, Architecture, Cause-Effect, Constraint, Rebuilding, Duration)

  1. 프로세서들의 자료 흐름을 중심으로 처리 과정을 표현하는 모델링으로 자료 흐름도(DFD)를 활용하여 표현한다. Functional 모델링
  2. 시간의 흐름에 따라 객체들 사이의 제어 흐름, 동작 순서 등의 동적인 행위를 표현하는 모델링으로 상태 다이어그램을 활용하여 표현한다. Dynamic 모델링
  3. 시스템에서 요구하는 객체를 찾고 객체 간의 관계를 정의하여 ER 다이어그램을 만드는 과정까지의 모델링으로 객체 다이어그램을 활용하여 표현한다. Information, Object 모델링

 

[해설]

  • Operation 모델링: 시스템의 기능적인 요소를 추출하여 표현한다.
  • Sequence 모델링: 데이터 처리의 순서나 시간적 흐름을 표현한다.
  • Transaction 모델링: 시스템에서 발생하는 모든 트랜잭션을 표현한다.
  • Architecture 모델링: 시스템의 물리적인 구조와 구성 요소들 간의 관계를 표현한다.
  • Cause-Effect 모델링: 시스템 내에서 원인과 결과의 관계를 표현한다.
  • Constraint 모델링: 시스템 내에서 제약 조건과 제한 사항을 표현한다.
  • Rebuilding 모델링: 객체 다이어그램을 사용하여 시스템에서 요구하는 객체를 찾고 객체 간의 관계를 정의하여 ER 다이어그램을 만드는 과정을 표현한다.
  • Duration 모델링: 시스템에서 발생하는 모든 활동과 이에 소요되는 시간을 표현한다.

[단답형] 2022년 2회

객체 지향 설계 원칙 중 다음에서 설명하는 원칙을 보기에서 찾아서 쓰시오. (SRP, OCP, LSP, ISP, DIP)

  • 객체 설계 시 특정 기능에 대한 인터페이스는 그 기능과 상관없는 부분이 변해도 영향을 받지 않아야 한다는 원칙이다. 예를 들어, 복합기에 대한 객체가 있고 프린터, 복사기, 스캐닝 기능을 사용하는 사용자가 각각 있다고 하면 프린터 기능 인터페이스는 복사기나 스캐닝 기능이 변하여도 프린터 기능을 사용하는 데에는 문제가 없어야 한다.
  • 인터페이스 분리의 원칙 (ISP, Interface Segregation Principle)

 

[해설]

  • 단일 책임의 원칙 (SRP, Single Responsibility Principle): 클래스는 단 하나의 책임을 가진다.
  • 개방 폐쇄 원칙 (OCP, Open-Closed Principle): 확장에는 열려 있으나 변경에는 닫혀 있다.
  • 리스코프 치환의 원칙 (LSP, Liskov Substitution Principle): 자식 클래스는 언제나 부모 클래스의 역할을 대체할 수 있다.
  • 인터페이스 분리의 원칙 (ISP, Interface Segregation Principle): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않는다.
  • 의존성 역전의 원칙 (DIP, Dependency Inversion Principle): 추상화에 의존한다.

 

✅ 2. 현행 시스템 분석

💡 현행 시스템 파악

  • 시스템의 기능과 역할을 파악한다.
  • 시스템 내의 하드웨어, 소프트웨어, 네트워크 등을 파악한다.
  • 시스템의 데이터 흐름과 데이터의 종류, 데이터베이스 등을 파악한다.
  • 시스템 내의 사용자 인터페이스(UI)와 사용자 경험(UX) 등을 파악한다.
  • 시스템의 보안과 데이터 무결성 등을 파악한다.
  • 시스템의 문제점과 개선 방안 등을 파악한다.
  • 시스템의 운영 및 유지보수 과정 등을 파악한다.
  • 시스템의 기술적 제약 사항과 요구 사항 등을 파악한다.
  • 시스템의 비즈니스 요구 사항과 프로세스 등을 파악한다.
  • 시스템의 이전 변경 이력과 이전 유지보수 내역 등을 파악한다.

 

💡 개발 기술 환경 정의

  • 개발하는 시스템의 특성에 맞게 개발 언어와 프레임워크 등을 선택한다.
  • 개발하는 시스템이 동작하는 플랫폼(운영체제, 웹 서버 등)을 선택하고 설정한다.
  • 데이터베이스 관리 시스템(DBMS)을 선택하고 데이터베이스 설계를 수행한다.
  • 개발 도구와 개발 환경을 선택하고 설정한다.
  • 개발에 필요한 라이브러리와 모듈 등을 선택하고 적용한다.
  • 개발하는 시스템의 성능 및 안정성을 고려하여 서버 구성 및 설정을 수행한다.
  • 개발에 필요한 테스트 환경을 구축하고 테스트 방법을 정의한다.
  • 형상 관리 시스템을 선택하고 개발 소스코드의 버전 관리를 수행한다.
  • 소프트웨어 개발 방법론과 개발 프로세스 등을 결정하고 적용한다.
  • 개발 환경 설정 및 관리에 대한 문서화를 수행한다.

 

💡 기출

[단답형] 2020년 2회

Linux 운영체제 위에서 구동하며 휴대폰 전화를 비롯한 휴대용 장치를 위한 운영체제와 미들웨어, 사용자 인터페이스 그리고 표준 응용 프로그램(웹 브라우저, 이메일 클라이언트. 단문 메시지 서비스(SMS), MMS) 등을 포함하고 있는 소프트웨어 스택이자 리눅스 모바일 운영체제로 개발자들이 자바와 코틀린 언어로 응용 프로그램을 작성할 수 있게 했고, 컴파일된 바이트코드를 구동할 수 있는 런타임 라이브러리를 제공하는 운영체제는 무엇인지 쓰시오.

  • 안드로이드(Android)

 

[해설]

안드로이드(Android)

  • 리눅스 운영체제에서 동작한다.
  • 휴대폰 전화를 비롯한 휴대용 장치를 위한 운영체제와 미들웨어, 사용자 인터페이스, 표준 응용 프로그램 등을 포함하는 소프트웨어 스택이다.
  • 개발자들은 자바와 코틀린 언어로 응용 프로그램을 작성한다.
  • 컴파일된 바이트코드를 구동할 수 있는 런타임 라이브러리를 제공한다.
  • 표준 응용 프로그램에는 웹 브라우저, 이메일 클라이언트, 단문 메시지 서비스(SMS), MMS 등이 있다.
  • 오픈소스 소프트웨어입니다.
  • 애플리케이션은 구글 플레이 스토어에서 배포됩니다.
  • 다양한 기기와 하드웨어에 대한 지원을 제공하며, 다양한 종류의 애플리케이션을 개발한다.
  • Google이 개발하였으며, 현재는 Google의 자회사인 Alphabet Inc.가 관리한다.

[단답형] 2020년 4회

목적에 따른 디자인 패턴의 유형에는 생성, 구조, ( ) 이/가 있다. 괄호 안에 알맞은 유형을 쓰시오.

  • 행위

 

[해설]

생구행성, 조, 

  •  패턴: 객체를 생성하는 방법과 관련된 문제를 해결하는 데 사용되며 추상 팩토리 패턴, 빌더 패턴, 팩토리 메서드 패턴이 있다.
  •  패턴: 객체들의 구조를 설계하는 데 사용되며 어댑터 패턴, 브릿지 패턴, 데코레이터 패턴이 있다.
  •  패턴: 객체들이 상호작용하는 방법을 설계하는 데 사용되며 커맨드 패턴, 옵저버 패턴, 스테이트 패턴이 있다.

[단답형] 2021년 3회

디자인 패턴의 종류 중 ( ) 패턴은 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당한다. 괄호 안에 알맞은 패턴을 영어로 쓰시오.

  • Factory Method

 

[해설]

Factory Method

  •  패턴
  • 객체를 생성하는 패턴으로, 객체를 생성하는 부분을 서브 클래스에서 구현한다.
  • 객체 생성에 대한 책임을 서브 클래스로 분리하여, 객체 생성을 캡슐화하고, 객체 간 결합도를 낮춘다.
  • 팩토리 클래스를 사용하여 객체 생성을 추상화하고, 클라이언트 코드가 구체적인 객체 타입을 알 필요 없이 객체를 생성한다.
  • 코드의 유연성과 확장성이 높아지며, 코드의 중복을 줄인다.
  • 추상 팩토리 패턴과 함께 사용될 수 있으며, 객체 생성과 관련된 복잡한 로직을 캡슐화한다.
  • 자주 사용되는 디자인 패턴 중 하나이며, 많은 프레임워크와 라이브러리에서 활용한다.
  • 객체 생성을 다루기 때문에 객체 지향 프로그래밍에서 매우 중요한 개념이다.

[단답형] 2022년 3회

( ) 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴이다. 괄호 안에 들어갈 디자인 패턴의 유형을 쓰시오.

  • 브릿지(Bridge)

 

[해설]

브릿지(Bridge)

  •  패턴
  • 추상화와 구현 부분을 별도의 클래스로 분리하여, 각각 독립적으로 변형한다.
  • 추상화와 구현 부분을 느슨하게 결합하여 유연하게 확장한다.
  • 구성요소
    • 추상화(Abstraction): 인터페이스 역할을 하며, 클라이언트 코드가 추상화된 인터페이스를 통해 구현 객체에 접근한다.
    • 구현(Implementor): 추상화 인터페이스를 구현하는 역할을 하며, 추상화와 구현이 분리되어 서로 독립적으로 변형한다.
    • 리팩터링(Refined Abstraction): 추상화를 상속받아 추상화의 인터페이스를 수정한다.
    • 구현 확장(Concrete Implementor): 구현을 상속받아 구현의 인터페이스를 확장한다.

[단답형] 2021년 2회

디자인 패턴 중 ( ) 패턴은 반복적을 사용되는 객체들의 상호 작용을 패턴화 한 것으로 클래스나 객체들이 상호 작용하는 방법, 알고리즘 등과 관련된 패턴이다. Inerpreter, Observer, Command, Iterator, Strategy, Visitor 등의 예시가 있다. 괄호 안에 들어갈 용어를 쓰시오.

  • 행위(Behavioral)

 

[해설]

 패턴

  • 객체들의 상호작용과 관련된 패턴으로, 객체들이 상호작용하는 방법을 설계한다.
  • 객체들 간의 상호작용을 유연하고 재사용 가능하게 한다.
  • 객체 지향 프로그래밍에서 중요한 개념이며, 코드의 재사용성과 유연성을 향상한다.
  • 커맨드 패턴, 옵저버 패턴, 스테이트 패턴 등이 있다.
    • 커맨드 패턴(Command Pattern): 요청을 객체의 형태로 캡슐화하여, 요청을 대기열에 저장하거나 로깅하거나, 요청의 취소 가능 여부를 지원한다.
    • 옵저버 패턴(Observer Pattern): 객체의 상태 변화를 관찰하고, 상태 변화에 따른 처리를 구현한다.
    • 스테이트 패턴(State Pattern): 객체의 상태에 따른 행위를 구현하는 패턴으로, 상태를 객체로 캡슐화하여 객체가 상태를 변경할 때마다 적절한 행위를 수행한다.

[단답형] 2022년 3회

( ) 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 개체들에 연락이 가고 자동으로 내용이 갱신되는 방법으로 일대 다의 의존성을 가지며 상호작요한느 개체 사이에서는 가능하면 느슨하게 결합하는 디자인 패턴이다.

  • 옵저버(Observer)

 

[해설]

옵저버 패턴(Observer Pattern)

  •  패턴
  • 객체의 상태 변화를 관찰하고, 상태 변화에 따른 처리를 구현한다.
  • 일대다(one-to-many) 관계를 갖는 객체들 간의 상호작용을 구현한다.
  • 객체들 간의 상호작용을 간결하고 유연하게 구현할 수 있으며, 이벤트 기반 시스템에서 자주 사용한다.
  • 구성요소로
    • 주체(Subject): 상태를 관찰할 대상이며, 상태가 변화하면 옵저버에게 알린다.
    • 옵저버(Observer): 상태 변화를 관찰하고, 상태 변화에 따른 처리를 구현한다.
    • 구독(Subscribe): 주체에게 옵저버를 등록한다.
    • 해지(Unsubscribe): 주체에게 등록된 옵저버를 제거한다.

[단답형] 2020년 2회

다음 보기가 설명하는 패턴을 쓰시오. (영문 Full-Name으로 작성하시오)

  • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방법으로 일대다 의존성을 가지는 디자인 패턴과 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.
  • Observer Pattern

 

[해설]

  •  패턴
  • Template Method Pattern: 알고리즘의 구조를 정의하고, 일부 단계를 서브클래스에서 구현한다.
  • 커맨드 패턴(Command Pattern): 요청을 객체의 형태로 캡슐화하여, 요청을 대기열에 저장하거나 로깅하거나, 요청의 취소 가능 여부를 지원한다.
  • 스테이트 패턴(State Pattern): 객체의 상태에 따른 행위를 구현하는 패턴으로, 상태를 객체로 캡슐화하여 객체가 상태를 변경할 때마다 적절한 행위를 수행한다.
  • Strategy Pattern: 알고리즘을 캡슐화하여 상황에 맞게 교환해서 사용한다.
  • Interpreter Pattern: 언어나 문법 규칙을 클래스 화하여 주어진 텍스트를 해석한다.
  • Chain of Responsibility Pattern: 요청을 처리할 수 있는 객체를 연결하여 체인 형태로 만들고, 체인을 따라가며 처리한다.
  • Visitor Pattern: 객체 구조와 기능을 분리하여 기능을 추가한다.

 

✅ 3. 요구사항 확인

💡 요구사항

  • 사용자가 소프트웨어에 대해 기대하는 기능이나 성능, 제약사항이다.
  • 소프트웨어 개발 프로젝트의 시작점이며, 소프트웨어 제품이 만족해야 할 최소한의 조건이다.
  • 사용자, 고객, 시스템 아키텍트, 개발자 등 다양한 이해관계자들 간의 의사소통 도구이다.
  • 소프트웨어 개발의 초기 단계에서 정의되어야 하며, 변경이나 추가 요구사항은 소프트웨어 개발 생명주기의 다른 단계에서도 계속해서 반영한다.
  • 요구사항을 잘 정의하고 관리하는 것은 소프트웨어 개발 프로젝트의 성패를 좌우한다.
  • 구분
    • 기능적 요구사항: 소프트웨어가 제공해야 할 기능에 대한 요구사항이다.
    • 비기능적 요구사항: 소프트웨어가 제공해야 할 성능, 안전성, 보안, 확장성 등에 대한 요구사항이다.

 

💡 요구사항의 시스템화 타당성 분석

  • 소프트웨어 개발에서 요구사항을 실제로 구현 가능한 시스템으로 변환 가능한지 분석하는 과정이다.
  • 소프트웨어 개발에서 요구사항의 정확성과 유용성을 보장하며, 최종적으로 고객의 만족도와 제품 품질을 향상한다.
  • 요구사항의 완전성, 일관성, 명확성, 추적성 등을 검토한다.
    • 완전성: 모든 요구사항이 포함되었는지, 빠짐없이 기술되었는지를 검토한다.
    • 일관성: 서로 다른 요구사항들이 상호모순적인지, 모순되는 부분이 있는지를 검토한다.
    • 명확성: 요구사항이 불명확하지 않고, 명확하게 기술되었는지를 검토한다.
    • 추적성: 요구사항이 변경될 경우 그 변경 내용이 추적 가능한지를 검토한다.

 

💡 기출

[단답형] 2021년 1회

( ) 요구사항은 시스템이 제공하는 기능, 서비스에 대한 요구사항이다. 괄호에 안에 들어갈 내용을 쓰시오.

  • 기능적

 

[해설]

기능적 요구사항

  • 소프트웨어가 제공해야 할 기능에 대한 요구사항이다.
  • 사용자가 소프트웨어를 사용하는 과정에서 필요한 기능들을 정의하며, 기능의 목적과 범위 등을 명확하게 정의한다.
  • 소프트웨어가 어떻게 동작해야 하는지에 대한 설명을 포함하며, 이를 구현하기 위한 요구사항들을 상세하게 명세한다.
  • 소프트웨어의 성공적인 개발 및 유지보수를 위해 중요한 역할을 한다.
  • 테스트 계획, 설계, 코딩, 테스트 및 문서화 등 개발 생명주기 전반에 걸쳐 사용한다.

[단답형] 2021년 1회

( ) 요구사항은 시스템이 수행하는 기능 이외의 사항, 시스템 구축에 대한 제약사항에 관한 요구사항이다. 괄호에 안에 들어갈 내용을 쓰시오.

  • 비기능적

 

[해설]

  • 소프트웨어가 제공해야 할 성능, 안전성, 보안, 확장성 등에 대한 요구사항이다.
  • 소프트웨어가 제공하는 기능 외에도 중요한 역할이다.
  • 소프트웨어가 효과적으로 작동하기 위한 조건을 명시하며, 성능, 안전성, 보안 등을 보장하기 위한 조치를 명시한다.
  • 기능적 요구사항과 함께 고려되어야 하며, 기능적 요구사항만큼 중요한 역할이다.
  • 소프트웨어 개발과 운영에서의 성공과 실패를 좌우하는 중요한 요소이다.
반응형