자격증

[정보처리기사] 1과목 소프트웨어 설계 핵심정리

SeungbeomKim 2024. 2. 7. 01:05

1과목 소프트웨어 설계

 

소프트웨어 공학의 기본 원칙

  • 기술을 계속적으로 적용, 지속적으로 검증, 명확한 기록을 유지

 

폭포수 모형

  • 이전 단계로 돌아갈 수 없다는 전제하에 각 단계를 확실하게 매듭짓고 다음 단계를 진행하는 개발 방법론, 보헴이 제시한 고전적 생명 주기 모형(요구사항 반영 어려움)

 

나선형 모형

  • 점진적으로 완벽한 소프트웨어를 개발하는 것
  • 계획 수립 → 위험 분석 → 개발 및 검증 → 고객 평가

 

애자일 모형의 주요 방법론

  • 스크럼, XP, 기능 중심 개발, 칸반, Lean

 

애자일 개발 4가지 핵심 가치

  • 개인과 상호작용에 더 가치를 둠
  • SW에 가치
  • 고객과 협업에 가치를 둠
  • 변화에 반응하는 것에 더 가치를 둠

 

XP의 핵심 가치

  • 의사소통, 단순성, 용기, 존중, 피드백

 

주요 비기능 요구사항

  • 성능, 보안, 품질, 제약사항, 인터페이스

 

요구사항 개발 프로세스

  • 도출 → 분석 → 명세 → 확인

 

요구사항 분석

  • 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화하는 활동
  • 소프트웨어 개발의 실제적인 첫 단계
  • 사용자 요구의 타당성을 조사하고 비용과 일정에 대한 제약 설정
  • 목표를 정하고 해결방식을 결정

자료 흐름도의 구성요소

 

자료 사전의 표기 기호

  • =: 정의, +: 연결, (): 생략, [ | ]:선택, {}: 반복, * *: 설명

 

HIPO

  • 하향식 소프트웨어 개발을 위한 문서화 도구
  • 기호 도표 등을 사용해서 보기 쉽고 이해하기도 쉽다.
  • 기능과 자료의 의존관계를 동시에 표현

 

UML

  • 의사소통이 원활하게 이루어지도록 표준화한 객체지향 모델링 언어
  • 구성요소: 사물, 관계, 다이어그램

 

UML의 주요 관계

  • 일반화: 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 표현
  • 의존: 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계를 표현
  • 실체화: 사물이 할 수 있거나 해야하는 기능으로 서로를 그룹화 할 수 있는 관계를 표현

 

구조적 다이어그램 종류

  • 클래스, 객체, 컴포넌트, 배치, 복합체 구조, 패키지

 

행위 다이어그램 종류

  • 유스케이스, 순차, 커뮤니케이션, 상태, 활동, 상호작용 개요, 타이밍

 

스테레오 타입

  • UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하기 위해 사용, 겹화살괄호(<<>>)

 

유스케이스 다이어그램 - Actor

  • 시스템과 상호작용하는 모든 외부 요소, 주액터: 사람, 부액터: 조직이나 기관

 

순차 다이어그램 구성요소

  • 액터, 객체, 생명선, 실행 상자, 메시지

 

사용자 인터페이스의 특징

  • 편리성과 가독성을 높여줌, 작업시간 단축, 이해도를 높여줌, 사용자 중심으로 설계

 

사용자 인터페이스의 특징

  • CLI(텍스트 형식), GUI(마우스로 선택하여 작업 수행), NUI(사용자의 말이나 행동으로 기기 조작)

 

사용자 인터페이스의 기본 원칙

  • 직관성(누구나 쉽게 이해하고 사용), 유효성(목적을 정확하고 완벽하게 달성), 학습성(누구나 쉽게 배우고 익혀야함)

 

목업

  • 실제 화면과 더 유사하게 만든 정적인 형태, 실제로 구현 X

 

ISO/IEC 9126 품질 특성

  • 기능성, 신뢰성, 사용성, 이식성

 

소프트웨어 아키텍처 설계 과정

  • 설계 목표 설정 → 시스템 타입 결정 → 아키텍쳐 패턴 적용 → 서브시스템 구체화 → 검토

 

모듈화

  • 기능의 분리가 가능하여 인터페이스가 단순해짐
  • 효율적인 관리 가능
  • 오류의 파급효과 방지
  • 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈간의 통합 비용이 많이 듦

 

추상화

  • 과정, 데이터, 제어

 

정보 은닉

  • 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기능
  • 모듈을 독립적으로 수행, 수정, 시험, 유지보수가 용이, private(은닉)

 

파이프 - 필터 패턴

  • 시스템의 처리 결과물을 파이프를 통해 전달받아 처리한후, 그 결과를 다시 파이프를 통해 다음 시스템으로 넘겨줌
  • 데이터 변환으로 인한 오버헤드 발생

 

mvc 패턴(Model-View-Controller)

  • 모델: 서브시스템의 핵심 기능과 데이터 보관
  • 뷰: 사용자에게 정보 표시
  • 컨트롤러: 사용자로부터 입력된 변경 요청을 처리하기 위해 모델에게 명령을 보냄

 

메시지(Message)

  • 객체에게 어떤 행위를 하도록 지시하는 명령, 요구사항
  • 객체들간에 상호작용을 하는데 사용되는 수단

 

클래스(Class)

  • 공통된 속성과 행위를 갖는 객체의 집합
  • 클래스에 속한 각각의 객체를 인스턴스라고 함
  • 객체지향 프로그램에서 데이터를 추상화하는 단위

 

캡슐화(Encapsulation)

  • 데이터와 데이터를 처리하는 함수를 하나로 묶는 것, 파급효과가 적고 인터페이스가 단순화되고 재사용이 용이

 

상속(Inheritance)

  • 상위클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

 

다형성(Polymorphism)

  • 오버로딩: 인수를 받는 자료형과 개수를 달리
  • 오버라이딩: 메소드의 이름은 같지만, 메소드안의 실행 코드를 달리하는 것

 

객체지향 분석 방법론

  • E-R 다이어그램 사용
  • 객체식별, 구조식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 기법

 

럼바우의 분석 기법

  • 객체 모델링(정보 모델링)
  • 동적 모델링(상태 다이어그램)
  • 기능 모델링(자료 흐름도를 이용하여 자료 흐름 표현)

 

객체지향 설계 원칙

  • SRP, OCP, LSP, ISP, DIP

 

모듈

  • 모듈화를 통해 분리된 시스템의 기능
  • 단독 컴파일 가능, 재사용, 다른 모듈에서 접근 가능

 

결합도의 정의 (약함 → 강함)

  • 자료 결합도 → 스탬프 결합도 → 제어 결합도 → 외부 결합도 → 공통 결합도 → 내용 결합도

 

결합도의 종류

  • 자료(자료 요소), 스탬프(자료 구조), 제어(제어 신호), 외부, 공통(공통 데이터 영역), 내용(내부 자료)

 

응집도의 정도(약함 → 강함)

  • 우연적 → 논리적 → 시간적 → 절차적 → 교환적 → 순차적 → 기능적

 

주요 응집도

  • 절차적(기능을 순차적으로 수행), 시간적(특정 시간), 우연적 (관련없는 요소)

 

팬인, 팬아웃

  • 팬인: 어떤 모듈을 제어하는 모듈의 수 (화살표 받는 것)
  • 팬아웃: 어떤 모듈에 의해 제어되는 모듈의 수 (화살표 얻는 것)

NS차트

  • 도형을 이용한 표현방법
  • 제어 논리 구조 표현
  • GOTO, 화살표, 시각적으로 명확히 식별
  • 이해하기 쉽고, 코드변환 용이

 

재사용

  • 이미 개발된 기능을 새로운 시스템이나 기능 개발에 사용할 수 있는 정도
  • 함수와 객체, 컴포넌트, 애플리케이션

 

효과적인 모듈 설계 방안

  • 결합도는 줄이고 응집도를 높임
  • 복잡도와 중복성을 줄이고
  • 일관성 유지
  • 모듈의 기능은 지나치게 제한적 X
  • 유지보수가 용이해야 함

 

주요 코드

  • 순차 코드: 차례로 일련번호 부여
  • 표의 숫자 코드: 물리적 수치를 적용

 

디자인 패턴

  • 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미
  • 생성 패턴, 구조 패턴, 행위 패턴

 

생성 패턴

  • 추상 팩토리: 추상적으로 표현
  • 빌더: 조합하여 객체 생성
  • 팩토리 메서드: 객체 생성을 서브 클래스에서 처리하도록 분리, 가상 생성자 패턴
  • 프로토타입: 원본 객체 복제
  • 싱글톤: 동시에 참조 X

 

구조 패턴

  • 어댑터: 인터페이스 재사용
  • 브리지: 확장할 수 있도록 구성
  • 컴포지트: 복합객체와 단일객체를 구분 X
  • 데코레이터: 부가적인 기능 추가를 위해 다른 객체들을 덧붙이는 방식으로 구현
  • 퍼싸드: 더 상위에 인터페이스 구성
  • 플라이웨이트: 가능한 한 인스턴스를 공유해서 사용하므로써 메모리 절약
  • 프록시: 객체 사이에서 인터페이스 역할 수행

 

행위 패턴

  • 책임 연쇄(처리하지 못하면 다음 객체로 넘어감)
  • 커맨드(요청에 필요한 정보 저장)
  • 인터프리터(언어에 문법 표현)
  • 반복자(동일한 인터페이스 사용)

 

요구사항 검증

  • 동료검토(작성자가 명세서 내용을 직접 설명)
  • 워크스루(명세서를 사전 검토)
  • 인스펙션(검토 전문가들이 결함 발견)
  • 동료검토, 워크스루: 비공식적인 검토 방법, 인스펙션: 공식적인 검토 방법

 

미들웨어

  • 서로 다른 기종 간 연결
  • 다양한 서비스 제공
  • 위치 투명성 제공
  • 내부 동작을 확인하려면 응용 소프트웨어 사용

 

미들웨어 종류

  • DB, RPC, MOM, TP-Monitor, ORB, WAS