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
'자격증' 카테고리의 다른 글
[정보처리기사 실기] 2020년도 기출 내용 정리 (2) | 2024.04.26 |
---|---|
[정보처리기사] 5과목 정보시스템 구축 관리 핵심정리 (1) | 2024.02.08 |
[정보처리기사] 3과목 데이터베이스 구축 핵심정리 (1) | 2024.02.08 |
[정보처리기사] 2과목 소프트웨어 개발 핵심정리 (0) | 2024.02.08 |
[sqld] sqld 합격 후기 및 공부법(노랭이, 개념 및 이론 공부, 기출분석, 마지막 최종 정리, 시험 후기) (0) | 2023.06.13 |