Ⅰ. 요구사항 확인

Chapter 02 소프트웨어 개발방법론

(1) 현행 시스템 파악

  • 구성/기능/인터페이스 파악 → 아키텍처 및 소프트웨어 구성 파악 → 하드웨어 및 네트워크 구성 파악

    • 구성 현황 파악 : 주요 업무를 처리하는 기간 업무와 지원 업무로 구분하여 파악

    • 기능 현황 파악 : 단위 업무 시스템이 현재 제공하고 있는 기능을 파악

    • 인터페이스 파악 : 다른 시스템과 주고받는 데이터의 종류, 형식, 프로토콜, 연계유형, 주기를 파악

    • 아키텍쳐 파악 : 계층별 기술 스택을 최상위 수준에서 파악

    • 소프트웨어 파악 : 소프트웨어의 제품명, 용도, 라이선스 적용 방식 및 라이선스 수 파악

    • 하드웨어 파악 : 서버의 위치 및 사양, 수량, 이중화 구현 여부 등을 파악

    • 네트워크 파악 : 어떤 네트워크 장비를 사용하여 구성되어있는지 파악

(2) 소프트웨어 아키텍처

  • 소프트웨어 아키텍처 프레임워크 : 소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 내용 및 이들간의 관계를 제공하는 아키텍처 기술 표준

    • 아키텍처 명세서 : 이해관계자들의 관점에 맞추어 작성하며 개별 뷰, 뷰 개괄 문서, 인터페이스 명세 등이 있음
    • 이해관계자 : 시스템 개발과 관련도니 모든 사람과 조직
    • 관심사 : 사용자, 유지보수자, 개발자 입장으로 나뉨
    • 관점 : 개별 뷰를 개발할 때 토대가 되는 패턴이나 양식
    • 뷰 : 서로 관련 있는 관심사들의 집합이라는 관점에서 전체 시스템을 표현
    • 근거 : 아키텍처 결정 근거(회의나 보고 결과)
    • 목표 : 환경 안에서 한 명 이상의 이해관계자들이 의도하는 시스템의 목적, 사용, 운영 방법
    • 환경 : 시스템에 영향을 주는 요인
    • 시스템 : 각 앱의 서브 시스템, 시스템 집합, 제품군 등의 구현체
  • 소프트웨어 아키텍처 4+1 뷰

    • 고객의 요구사항을 정리해 놓은 시나리오를 4개의 관점에서 바라보는 소프트웨어적인 접근방법으로 주로 유스케이스를 사용한다
    • 논리 뷰, 구현 뷰, 프로세스 뷰, 배포 뷰(4) + 유스케이스 뷰(1) 로 구성된다
    • 계측화 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 브로커 패턴, 모델-뷰-컨트롤러 등으로 나뉨
  • 소프트웨어 아키텍처 비용 평가 모델

    • 아키텍처 접근법이 품질 속성에 미치는 영향을 판단, 아키텍처의 적합성을 평가하는 모델로 SAAM, ATAM, CBAM, ADR, ARID 등의 모델이 있다
  • 디자인 패턴

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

    • 개발의 효율성, 유지보수성, 운용성이 높아지며 프로그램의 최적화에 도움이 된다

    • 패턴의 이름, 문제 및 배경, 솔루션, 사례, 결과, 샘플 코드 등으로 구성되어 있다

    • 디자인 패턴의 유형은 목적(생성, 구조, 행위) 과 범위(클래스, 객체)로 구성된다

    • 디자인 패턴의 종류
      생성 패턴

      • Builder : 복잡한 인스턴스를 조립하여 만드는 구조로 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리
      • Prototype : 처음부터 원형을 만들어놓고 복사 후 필요한 부분만 수정하여 사용하는 패턴
      • Factory Method : 상위 클래스의 인터페이스를 하위 클래스에서 인스턴스를 생성하도록 하는 방식
      • Abstract Factory : 제공된 API를 사용하여 생성된 클래스를 Concrete Product 클래스에서 구체적으로 구현하는 패턴
      • Singleton : 한 클래스에 한 객체만 존재하도록 제한하는 패턴

      구조 패턴

      • Bridge : 기능 계층과 구현 계층을 연계하고 구현부에서 추상화된 부분을 독립적으로 확장할 수 있는 디자인 패턴
      • Decorator : 기존에 구현된 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로 유연하게 확장 가능한 패턴
      • Facade : 단순한 인터페이스를 사용해 결합도를 낮추고 시스템 구조 파악을 쉽게 하는 패턴
      • Flyweight : 클래스의 경량화를 목적으로 하는 디자인 패턴
      • Proxy : 대리 객체를 사용해 메모리 용량을 절약하고 정보 은닉의 역할도 수행하는 디자인 패턴
      • Composite : 객체들을 트리 구조로 구성하여 복합 객체와 단일 객체를 모두 동일하게 다루도록 하는 패턴
      • Adapter : 상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴

      행위 패턴

      • Mediator : 객체지향 설계에서 중재자를 두고 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해 주는 디자인 패턴
      • Interpreter : 언어의 구문을 나누어 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
      • Iterator : 내부 구조를 노출하지 않고 복잡한 객체의 원소를 순차적으로 순회 접근 가능하게 해주는 행위 패턴
      • Template Method : 상위 클래스에선 추상 메서드로 기능의 골격을, 하위 클래스에선 세부 처리를 구체화 하는 방식의 디자인 패턴
      • Observer : 객체의 상태 변화에 따라 다른 객체의 상태도 연동되는 일대다 의존 디자인 패턴
      • State : 객체 상태를 캡슐화하여 클래스화하여 참조케 하는 방식의 디자인 패턴
      • Visitor : 각 클래스 데이터 구조에서 처리기능을 분리, 별도의 클래스를 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
      • Command : 재사용성이 높은 클래스를 설계하는 패턴으로 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 디자인 패턴
      • Strategy : 알고리즘을 하나의 클래스로 캡슐화하고 필요할 때서로 교환해서 사용할 수 있게 하는 패턴
      • Memento : 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴으로 ‘작업취소(Undo)’를 요청 할 수 있다
      • Chain of Responsibility : 한 요청을 2개 이상의 객체에서 처리하도록 하는 디자인 패턴

(3) 현행 시스템 분석서 작성 및 검토

  • 현행 시스템 관련 자료 수집 → 수집 자료의 분석 → 분석한 결과를 기반으로 산출물 작성 → 산출물에 대한 검토 수행

(4) 개발 기술 환경 정의

  • 운영체제 시스템 분석
  • 네트워크 시스템 분석
    • OSI 7계층(응용, 표현, 세션, 전송, 네트워크, 데이터 링크, 물리 계층)
  • DBMS 시스템 분석
  • 미들웨어 시스템 분석
  • 오픈소스 사용 시 고려 사항
    • 라이선의 종류, 사용자 수, 기술의 지속 가능성 등을 고려

기출문제

  1. 다음 보기가 설명하는 패턴을 쓰시오
1
2
3
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고
자동으로 내용이 갱신되는 방법으로 일대다의 의존성을 가지며
상호작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

Observer Pattern

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

안드로이드

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

행위

예상문제

  1. 소프트웨어 아키텍처에 대해서 서술하시오.

여러 가지 소프트웨어 구성요소와 그 구성요소가 가진 특성 중에서 외부에 드러나는 특성, 그리고 구성요소 간의 관계를 표현하는 시스템의 구조나 구조체

  1. 4+1 뷰 중 다음 설명에 해당하는 뷰가 무엇인지 쓰시오.
1
2
3
- 시스템의 비기능적인 속성으로서 자원의 효율적인 사용, 병행 실행, 비동기,
이벤트 처리 등을 표현한 뷰
- 개발자, 시스템 통합자 관점

프로세스 뷰

  1. 시스템을 계층으로 구분하여 구성하는 패턴으로 서로 마주 보는 두 개의 계층 사이에서만 상호작용이 이루어지는 패턴은 무엇인가?

계층화 패턴

  1. MVC 패턴에 대해 서술하시오.

대화형 애플리케이션을 모델, 뷰, 컨트롤러 3개의 서브 시스템으로 구조화하는 패턴

  1. 디자인 패턴에 대해서 서술하시오.

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

  1. 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하고, 한 클래스에 한 객체만 존재하도록 제한하는 디자인 패턴은 무엇인가?

싱글톤 패턴

  1. 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식으로, 상위 클래스에서는 인스턴스를 만드는 방법만 결정하고, 하위 클래스에서 그 데이터의 생성을 책임지고 조작하는 함수들을 오버로딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴은 무엇인가?

팩토리 메서드 패턴

  1. 알고리즘 군을 정의하고 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴으로, 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 디자인 패턴은 무엇인가?

전략 패턴

  1. 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴으로 일반적으로 상위 클래스(추상 클래스)에는 추상 메서드를 통해 기능의 골격을 제공하고, 하위 클래스(구체 클래스) 메서드에는 세부 처리를 구체화하는 방식으로 사용하며 코드 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 디자인 패턴은 무엇인가?

템플릿 패턴

Comment and share

Ⅰ. 요구사항 확인

Chapter 01 소프트웨어 개발방법론

(1) 소프트웨어 생명주기 모델

  • 요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수
  • 폭포수 모델(순차적), 프로토타이핑 모델(프로토타입), 나선형 모델(절차 반복적), 반복적 모델(병행적) 등이 있음

(2) 개발방법론

  • 구조적 방법론 : 기능에 따라 나누어 개발하고 통합하는 분할정복식 접근방법

  • 정보공학 방법론 : 개발주기를 이용해 대형 프로젝트를 수행하는 방법

  • 객체지향 방법론 : ‘객체’ 단위로 시스템을 분석 및 설계

  • 컴포넌트 기반 방법론 : 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 응용 프로그램을 작성하는 방법으로 확장성이 용이하며 소프트웨어의 재사용이 가능

  • 애자일 방법론 : 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 경량 개발방법론으로 이터레이션 주기(분석→디자인→개발→테스트를 반복)를 통해 개발됨

    • 대표적인 애자일 방법론의 유형 : XP, Lean, 스크럼 등
  • XP(eXtreme Programming) : 용기, 단순성, 의사소통, 피드백, 존중의 5가지 가치를 가지며 짝프로그래밍을 포함한 12가지 기본 원리로 구성됨

  • 스크럼 : 매일 정해진 시간·장소에서 개발팀을 위한 프로젝트 관리 중심 방법론

    • 백로그, 스프린트, 스크럼 미팅, 스크럼 마스터, 스프린트 회고, 번 다운 차트
  • Lean : Just In Time, 칸반 보드를 사용함

(3) 비용산정, 일정관리 모형

  • 하향식, 상향식 산정방법
  • Lines of Code(LoC) 모형 : 낙관치, 중간치, 비관치를 측정하여 비용을 산정
  • Man Month 모형 : LoC / 프로그래머의 월간 생산성, Man Month / 프로젝트 인력 = 프로젝트 기간
  • COCOMO 모형
    • 조직형 : 5만라인 이하의 소프트웨어 개발에 적용
    • 반 분리형 : 30만라인 이하의 소프트웨어 개발에 적용
    • 임베디드형 : 30만라인 이상의 소프트웨어 개발에 적용
  • 푸트남 모형 : 단계별로 요구할 인력의 분포를 가정
  • 기능점수 모형 : 요인별 가중치를 합산하고 총 기능의 점수를 계산하여 비용을 산정 (기능점수 = 총 기능점수 x (0.65 + (0.1 총 영향도)))
  • 일정관리 모델에는 주 공정법, PERT, 중요 연쇄 프로젝트 관리가 있다

기출문제

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

애자일 방법론

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

프로젝트 개발 기간 : Man Month = LoC / 월간 생산성 = 30,000 / 300 = 100개월
프로젝트 기간 = 100 개월 / 5 명 = 20개월

예상문제

  1. 소프트웨어 생명주기 모델에 대해 서술하시오

시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차로 시스템이 개발될 때부터 운용과 유지보수를 거쳐 생애를 마칠 때 까지의 작업 프로세스를 모델화 한 것

  1. 소프트웨어 생명주기 모델 중에서 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계는 무엇인가?

설계 단계

  1. 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델은 무엇인가?

폭포수 모델

  1. 전체 시스템을 기능에 따라 나누어 개발하고 이를 통합하는 분할과 정복 접근 방식의 방법론은 무엇인가?

구조적 방법론

  1. TDD에 대해서 설명하시오

테스트를 기반으로 한 개발 방식으로 작성해야 하는 프로그램에 대한 테스트를 먼저 수행하고 이 테스트를 통과할 수 있도록 코드를 작성하는 것

  1. XP 12가지 가치 중 매일 여러 번씩 소프트웨어를 통합하고 빌드해야 한다는 원리는 무엇인가?

지속적인 통합

  1. 애자일 방법론 중에서 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론은 무엇인가?

스크럼 기법

  1. 델파이 기법에 대해 서술하시오

전문가의 경험적 지식을 통한 문제 해결 및 미래 예측을 위한 기법

  1. 요구 기능을 증가시키는 인자별로 가중치를 부여하고 요인별 가중치를 합산하여 총 기능 점수를 계산하고 비용을 산정하는 방식은 무엇인가?

기능 점수 방식

  1. 일의 순서를 계획적으로 정리하기 위한 수렴 기법으로 비관치, 중간치, 낙관치의 3점 추정방식을 통해 일정을 관리하는 기법은 무엇인가?

PERT

  1. CPM 네트워크가 다음과 같을 때 임계 경로의 소요기일은 얼마인가?

14일

  1. LoC가 50,000라인, 개발자 10명, 월평균 250라인을 개발한다면 Man Month는 얼마인가?

50,000 / 250 = 200

Comment and share

  • page 1 of 1

Harry Kim

author.bio


author.job