Search

소프트웨어 설계

대분류
자격증
소분류
정보처리기사
유형
1과목
과목
1과목
최종 편집 일시
2024/10/27 15:36
생성 일시
2024/04/08 05:54
14 more properties
목차

소프트웨어

소프트웨어의 특징

상품성 : 소프트웨어를 개발하면 상품이 되어 판매가 됨.
복잡성 : 개발 과정이 복잡하고 관리가 어려움.
변경 가능성 : 프로그램을 일부 수정하여 업그레이드 및 오류 수정 등 가능.
복제성 : 복제가 용이해 쉽게 복사, 유통이 가능함.

시스템

기본 요소
입력, 처리, 출력, 제어, 피드백

소프트웨어 위기의 원인

하드웨어 비용을 초과하는 개발 비용의 증가
개발 기간의 지연
개발 인력 부족 및 인건비 상승
성능 및 신뢰성 부족
유지보수의 어려움에 따른 엄청난 비용

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

현대적인 프로그래밍 기술을 적용해야 함.
신뢰성이 높아야 함.
사용의 편리성과 유지보수성이 높아야 함.
지속적인 검증 시행을 해야 함.

소프트웨어 재공학

장점
개발 시간 및 비용 감수
품질 향상
생산성 향상
신뢰성 향상
구축 방법에 대한 지식의 공유
프로젝트 실패 위험 감소
목표
소프트웨어의 유지보수성 향상
복잡한 시스템을 다루는 방법 구현
다른 뷰의 생성
잃어버린 정보의 복구 및 제거
재사용을 수월하게 하며 소프웨어의 수명 연장
과정
분석(Analysis) → 구성(Restructuring) → 역공학(Re-verse Engineering) → 이식(Migration)

유지 보수 유형

수정(Corrective Maintenance) : 오류를 수정
적응(Adaptive Maintenance) : 외부 환경의 변화에 적응하기 위한 수정
완전(Perfective Maintenance) : 기능이나 성능 향상을 위해 수정
예방(Preventive Maintenance) : 이해성과 유지보수성의 개선을 위한 수정 : 재공학

역공학

다시 쓰기 위한 거
소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 과정
재문서화

CASE

소프트 엔지니어링을 도와주는 자동화 도구

CASE가 제공하는 기능

개발 신속, 오류 수정 쉬워 소프트웨어 품질 향상
소프트웨어 생명주기의 전체 단계 연결 - 자동화시켜 주는 통합된 도구 제공 기술
소프트웨어 시스템의 문서화 및 명세화를 위한 그래픽 기능 제공
소프트웨어 개발 단계의 표준화 기할 수 있으며 자료 흐름도 작성 기능 제공
모델들 사이의 모순 검사 기능을 제공하며 다양한 소프트웨어 개발 모형 지원
원천 기술 : 구조적 기법, 프로토타이핑 기술, 정보 저장소 기술

CASE 장점

소프트웨어 개발 비용 절약 → 소프트웨어 생산성 향상
품질 향상
유지보수 간편, 재사용성 향상98

CASE 분류

상위(Upper) CASE : 요구 분석, 설계 단계 지원
하위(Lower) CASE : 소스 코드 작성, 테스트, 문서화 과정 지원
통합(Integrate) CASE : 소프트웨어 개발 주기 전체 과정 지원

요구사항 분석을 위한 CASE 도구

SADT : SoftTech사 - 블록 다이어그램을 채택한 자동화 도구
REM : TRW사
RSL : 요구사항 기술 언어
REVS : 요구사항 분석기
PSI / PSA
TAGS

소프트웨어 개발 방론

소프트웨어 생명주기(Life Cycle)

타당성 검토 → 개발 계획 → 요구사항 분석 → 설계 → 구현 → 테스트 → 운용 → 유지보수

폭포수 모형(Waterfall Model)

소규모 프로젝트에 적합
고전

나선형 모형(Spiral Model)

계획 수립 → 위험 분석 → 개발 및 검증 → 고객 평가

하향식과 상향식 설계

하향식 설계 : 뿌리부터 시작하여 하위 기능들로 나눠 가면서 설계하는 방식
상향식 설계 : 기본 컴포넌트를 먼저 설계한 다음 이것을 사용하는 상위 수준 컴포넌트 설계 방식

프로토타입 모형

실제 개발될 시스템의 견본(Prototype)을 미리 만들어 최종 결과물을 예측하는 모형

HIPO(Hierarchy Input Process Output)

계층적 입력 처리 출력
폭포수 모델과 비슷함.
하향식 소프트웨어 개발을 위한 문서화 도구
총체적(Overview Diagram), 세부적 다이어그램(Detail Diagram)으로 구성
가시적 도표를 사용 - 보기 쉽고 이해하기 쉬우며 유지보수 쉽다.

V-모델

폭포수 모형에 시스템 검증과 테스트 작업을 강조한 모델
HIPO에 테스트를 추가한 모델

에자일(Agile) 개발 방법론

고객과의 협업에 초점 두고 개발하는 방법론
목표대로 만들어졌느냐 만 중요 - 결과
종류
익스트림프로그램, 린, DSDM, FDD, Crystal, ASD, DAD

에자일 선언문

고객하고 제대로 소통해서 고객이 원하는 거 만들어주는 것

XP

빠르게 양질의 소프트웨어를 만드는 것
핵심 가치
소통(Communication)
단순성(Simplicity) : 배제
Feedback
용기(Courage)
존중(Respect)

XP Process

User Story
Spike : 요구사항, 잠재적 솔루션을 고려하기 위해 작성하는 간단한 프로그램
User Stories : 사용자 요구사항을 간단한 시나리오로 표현
Release Planning : 부분 기능 완료 제품 제공
Iteration : 새로운 요구사항 삽입 단계
Acceptance Test : 테스트 단계
Small Realease : 실제 수행 단계

XP 12가지 실천사항

FIne Scale Feed-back
Pair Program-ming (짝 프로그래밍)
Planning Game
Test Driven Develop-ment
Whole Team
Continuous Process
Continuous Integration
Design Imporvement
Small Releases
Shared Understand-ing
Coding Standards
Collective Code Ownership
Simple Design
System Metaphor
Programmer Welfare
Sustainable Pace

효과적인 프로젝트 관리 3대 요소 3P

사람 - 인적 자원
문제 - 문제 인식
프로세스 - 작업 계획

SCRUM

요구사항 파악 빠르게 개발
스프린트 반복 주기 2~4주
기본 원리
스프린트 단위 개발
30일 반복 - 고정
잘 드러나야 함
시간을 지켜져야하며 Product 백로그에 기록
일일 스크럼
팀 역할
제품 책임자
기능 목록 작성
우선순위 갱신
신규 항목 추가
스프린트 임무 수행
이후 팀 운영 관여 X
스크럼 마스터
업무 배분만 함
소멸 차트에 기록
개발 과정에서 지원
스크럼 팀
5~9명 구성
작업 단위로 기능 분류
요구사항 사용자 스토리 도출, 구현
일정 속도를 추정한 뒤 제품 책임자에게 전달, 시연
매일 진행상황 점검

현행 시스템 분석

현행 시스템

1.
1단계(시스템 구성 파악 - 시스템 기능 파악 - 시스템 인터페이스 현황 파악) 어떻게 운영되고 있는지
2.
2단계(아키텍처 파악 - 소프트웨어 구성 파악)
3.
3단계(시스템 하드웨어 현황 파악 - 네트워크 구성 파악)

시스템 아키텍처

시스템의 전체 구조, 행위, 행위 원리를 나타내며, 시스템이 어떻게 작동하는지 설명하는 틀
시스템 내의 상위 시스템과 하위 시스템이 상호 작용하는지에 대한 동작 원리와 구성을 표현한 것
시스템 아키텍처 소프트웨어 아키텍처 → 소프트웨어 상세 설계

시스템 구성 파악

기간 업무(핵심)와 지원 업무(따로) 구분 - 문서화

시스템 기능 파악

각각의 기능을 구분하여 계층형으로 표시

인터페이스 현황 파악

단위 업무 시스템이 타 단위 업무 시스템과의 연계 명시

EAI(기업 애플리케이션 통합)

다양한 소프트웨어 통합 계획, 방법 및 도구

FEP(전위 처리기)

전 처리기
시간을 줄여주는 프로그램

소프트웨어 구성 파악

라이선스 수량 파악 중요

하드웨어 구성 파악

컴퓨터 사양

플랫폼

기반 시설
소프트웨어를 만들기 위한 기반
특성 분석 항목
응답 시간(Response Time)
가용성(Availablility)
사용률(Utilization)
성능 특성 분석 방법
기능 테스트
사용자 인터뷰
문서 점검

현행 시스템의 OS

분석 항목 : 현재 정보 시스템의 OS 종류와 버전, 패치 일자, 백업 주기 분석
고려 사항 : 가용성, 성능, 기술 지원, 주변기기, 구축 비용(TCO - 총비용)
메모리 누수

오픈소스 라이선스 종류

GNU : Linux
GNU GPLv1 : 소스 코드 공개 X, 바이너리만 배포 금지
BSD : 공개 하지 않아도 되는 상용 소프트웨어에서도 사용 가능
Apache 2.0 : HADOOP - 대량 데이터 처리 기술

DBMS

종속성과 중복성의 문제 해결하기 위해 제안된 시스템
분석 시 고려사항
가용성
성능
기술 지원
상호 호환성
구축 비용

요구사항 개발

요구공학(Requirements Engineering)

자료 흐름도, 자료 사전 - 소단위 명세서 활용
소프트웨어 개발 시 사용자의 요구를 정확히 반영한 시스템 개발을 위한 구조화된 활동 집합
목적
의사소통 수단 제공
누락 방지, 상호 이해 오류 등의 제거로 경제성 제공
개발 비용 및 시간 절약
비용과 일정에 대한 제약 설정과 타당성 조사, 요구사항 정의 문서화 등 수행
베이스라인(기준선)
요구공학(개발) 프로세스

SWEBOK(소프트웨어 공학 지식 체계)에 따른 요구사항 개발 프로세스

요구사항 도출(추출)

도출 기법 : 고객 발표, 문서 조사, 설문, 업무 절차 및 양식 조사, 브레인스토밍, 워크숍, 프로토타이핑, 인터뷰, BPR, RFP

요구사항 분석

요구 분석을 위한 기법
사용자 의견 청취
각종 문서 분석과 중재
관찰 및 모델 작성 기술
설문 조사를 통한 의견 수렴
요구사항 분석 수행 단게
문제 인식
전개
평가와 종합
검토
문서화

요구사항 분류

기술 내용에 따른 분류 : 기능/비기능 요구사항
기능적 : 실제로 어떻게 동작하는지 관점
비기능적 : 성능, 보안, 품질, 안정성 등 보조적
기술 관점 및 대상에 따른 분류 : 시스템/사용자 요구사항
요구사항 분류 기준
구분 후 우선순위 여부 확인
요구사항 명세
명세 기법
정형 명세
기법 : 수학적/모델링
종류 : Z, VDM, Petri-Net, LOTOS, CSP, CCS
장점 : 시스템 요구 특성 적확하고 명세가 간결하게 명세할 수 있음.
단점 : 낮은 이해도, 이해관계자의 부담 가중
비정형 명세
기법 : 상태/기능/객체 중심 명세, 자연어
종류 : FSM, Decision Table, ER, State Chart(SADT), UseCase, 사용자 기반
장점 : 명세 작성 이해 용이, 의사전달 방법 다양성
단점 : 불충분한 명세 기능, 모호성
명세 속성
정확성
명확성
완전성
일관성
수정 용이성
추적성

요구사항 확인

형상 관리
형상 단위 : 애플리케이션 개발 단계에서 도출되는 프로그램, 문서, 데이터 등의 모든 자료
모든 자료의 변경을 관리함으로써 애플리케이션 버전 관리 등을 하는 활동
완전한지 검증
요구사항 관리 도구 필요성
비용 편익 분석, 요구사항 변경의 추적/영향평가

요구사항 할당

정형 분석

오해 최소화, 마지막 단계

요구사항 확인 기법

프로토타이핑
추가 요구사항 지속 재작성 과정
절차
1.
요구사항 분석 단계
2.
프로토타입 설계 단계
3.
프로토타입 개발 단계
4.
고객 평가 단계
5.
프로토타입 정제 단계
6.
완제품 생산 단계
품질 저하, 비용 발생, 빠르게 제작 가능, 유용한 피드백 제공
모델 검증
정적 분석 : 검증을 위한 분석 도구
동적 분석 : 직접 실행
요구사항 검토
인수 테스트
확인 단계
종류 : 계약 인수 테스트, 규정 인수 테스트, 알파 검사, 베타검사, 사용자 인수 테스트, 운영 인수 테스트

UML

개념 모델링

요구 사항을 이해하기 쉽도록 실 세계의 상황을 단순화하여 개념적으로 표현한 것(모델)을 생성해 나가는 과정
종류 : Use Case Diagram, Data flow Model, State Model, Goal-Based Model, User Interactions, Object Model, Data Model

UML

범용 모델링 언어
럼바우를 사용

럼바우 객체지향 분석 기법

1.
객체 모델링(OMT)
== 정보 모델링
정적 구조 생성
객체 다이어그램
2.
동적 모델링
상태 다이어그램
3.
기능 모델링
자료 흐름도

UML 특성

비주얼화
소프트웨어 구성 요소 간의 관계 및 상호작용 시각화
문서화
소프트웨어 생명주기의 중요한 작업을 추적하고 문서화
명세화
단순 표기법이 아닌 구현에 필요한 개발적 요소 및 기능에 대한 명세 제공
구축
객체지향 언어로 매핑될 수 있다.

UML 관점

기능적 관점
사용자 측면에서 본 소프트웨어 기능 - 사용 사례 모델링
Use Case Diagram
정적 관점
소프트웨어 내부의 구성요소 사이의 구조적 관계
Class Diagram
동적 관점
시스템의 내부 동작
Sequences/State/Activity Diagram

UML 기본 구성

사물
객체지향 모델 구성 기본 요소
객체 간의 관계 형성 대상
관계
객체 간의 연관성 표현
다이어그램
객체의 관계 도식화
View 제공

스테레오 타입

스테레오 타입 객체 표현 사용 기호 : 길러멧(Guilemet) <<>>

UML 접근 제어자

Public +
Private -
Protected #
Package ~

연관 관계 다중성 표현

1 : 1 개체 연결
* or 0..* : 0이거나 그 이상 객체 연결
1..* : 1이거나 1이상 객체 여
0..1 : 0이거나 1 객체 연결
1, 3, 6 : 1이거나 3이거나 6 객체 연결
n : n개 객체 연결
n..* : n이거나 n개 이상 객체 연

UML 다이어그램의 분류

구조적(Structural) 다이어그램
정적, 구조 표현을 위한 다이어그램
클래스(Class) 다이어그램 : 정적 구조 표현
객체(Object) 다이어그램
복합체 구조(Composite Structure) 다이어그램
배치(Deployment) 다이어그램 : 물리 구조
컴포넌트 다이어그램
패키지 다이어그램
행위 다이어그램
동적 표현을 위한 다이어그램
유스케이스 다이어그램 : 사용자 관점
활동 다이어 그램 : 업무 처리, 연산 수행
상태 머신 다이어그램 : 생명주기
콜라보레이션 다이어그램
상호작용 다이어그램
순차(Sequence Diagram) 다이어그램
생명선, 통로, 상호작용, 발생, 실행, 상태 불변, 상호작용, 메시지, 활성, 객체, Actor
상호작용 개요 다이어그램
통신 다이어그램 : 관계
타이밍 다이어그램 : 시간 제약

클래스 다이어그램

객체 간의 관계 추상화 모델을 논리적 구조 표현

UML 관계 표현

단방향 연관 관계 : →
양방향 연관 관계 : —
의존 관계 : - - →
일반화 관계 : —(상속 관계)
집합/포함 관계 : —◆ (클래스 사이 전체나 부분이 같은)
: —◇
실체화 관계 : - - -

UML 관계

연관 : 관련
의존 : 필요
일반화 : 상속
집합 : 전체-부분
포함
실체화

Use Case Diagram

요소
시스템 경계(Boundary)
액터(Actor)
유스케이스(Use Case)
접속 관계(communication Association)
사용 관계(Uses Association)
확장 관계(Extends Association)
작성 단계
1.
액터식별
2.
Use Case 식별
3.
관계 정의
4.
Use Case 구조

소프트웨어 아키텍처

ISO/IEC 9126 모델

소프트웨어 품질 특성과 평가를 위한 국제 표준
내외부 품질 : 기능성(Functionality), 신뢰성(Reliability), 사용성(Usability), 효율성(Efficiency), 유지보수성, 이식성
사용 품질 : 효과성, 생산성, 안전성, 만족도
외부지표
내부지표

ISO/IEC 25010

UI 표준을 위한 환경 분석

사용자 경향 분석
기존/현존 UI 경향 숙지 - 현재 UI 단점 작성
사용자 요구사항 파악, 쉽게 이해 가능한 기능 위주로 기술 영역을 정의
기능 및 설계 분석
기능 조작성 분석
오류방지 분석
최소한 조작으로 업무 처리 가능한 형태 분석
UI 정보 전달력 확인
요구사항 요소
데이터 요구
기능 요구
제품, 서비스 품질
제약 사항

정황 시나리오 작성

개발하는 서비스 초기 모양 상상 단계
사용자 관점
낙관적 상황
육하원칙
간단명료, 하나의 시나리오 통합

UI 표준 및 지침

UI 분야

표현
정보 제공, 전달
기능

특징

만족도 직접 영향
편리, 가독, 동선의 축약

UI 개발 시스템이 가져야 할 기능

사용자 입력의 검증
에러 처리, 에러 메시지 처리
도움과 프롬프트 제공

UI 설계

설계 원칙
직관성 : 누구나 쉽게 이해하고 사용할 수 있도록
유효성 : 유용하고 효과적
학습성 : 쉽게 배우고 익히게
유연성 : 오류 최소화
설계 지침
사용자 중심
일관성
단순성
가시성
표준화
접근성
결과 예측 가능
명확성
오류 발생 해결

UI 표준

최소한의 요소 및 배치 규칙 등을 의미
한국형 웹 콘텐츠 접근성 지침 2.1 4가지 원칙
인식의 용이성
운용의 용이성
이해의 용이성
견고성

UX(사용자 경험)

사용자가 제품을 대상으로 직/간접적으로 사용하면서 느끼고 생각하게 되는 지각과 반응, 행동 등의 모든 경험
영향을 주는 요소 : 성능, 시간
모바일 사용자 설계 고려사항
대상, 환경, 목적, 빈도 등 고려
직관적 파악 가능
입력 최소화, 자동 완성 기능
되돌림 기능 제공
모바일 서비스 특성에 적합한 디자인 제공

UI 설계

UI 설계 단계

문제 정의
사용자 모델 정의
작업 분석
컴퓨터 오브젝트 및 기능 정의
사용자 인터페이스 정의
디자인 평가 : 평가 방법론
GOMS : 인간이 어떤 행위를 할지 예측하여 문제를 해결하는 데 필요한 소요 시간, 학습 시간 등을 평가하기 위한 기법
Heuristics : 논리적 근거가 아닌 어림짐작을 통해 답을 도출해 내는 방법

UI 상세 설계 단계

1.
UI 메뉴 구조 설계
2.
내/외부 화면과 폼 설계
3.
UI 검토 수행

UI 상세 설계 - 시나리오 작성 원칙

구체적 작성
Flowchart 표기법
UI요소, 상호작용(Interaction)을 일반적인 규칙 정의
상호작용의 흐름 및 순서, 분기, 조건, 루프를 명시
예외 상황에 관한 사례 정의, UI 시나리오 규칙 지정
기능별 상세 기능 시나리오 정의, UI 일반 규칙 지킴
시나리오 문서의 작성 요건
완전성, 일관성, 이해성, 가독성, 수정 용이성, 추적 용이성

UI 요구사항 정의

시스템 구조
사이트맵
프로세스 정의
화면 설계

UI 설계 도움 주는 도구들

와이어 프레임(Wire Frame)
파워포인트, 키노트, Sketch, Balsamiq, 카카오 오븐
목업(Mockup) > 와이어 프레임
카카오 오븐, Power Mockup, Balsamiq
프로토타입(Prototype) > 목업
상호작용
스토리보드(Storyboard)
사용자, 작업, 인터페이스 간 상호작용 시각화

UI 프로토타입

도출된 요구사항을 토대로 프로토타입(시제품)을 제작하여 대상 시스템과 비교하면서 개발 중에 도출되는 추가 요구사항을 지속해서 재작성하는 과정

감성 공학 접근 방법

1류(의미 미분법) : 인간 감각, 감성
2류 : 1류의 기본틀, 감성 어휘 수집 전단계에서 평가자들의 생활 양식 추가
3류 : 1류의 감성 어휘 대신 감각 척도로 감성 표

HCI

인간과 컴퓨터의 상호작용

감성 공학 요소 기술

기초, 구현, 응용

소프트웨어 설계

소프트웨어 설계 모델링

최종 제작할 소프트웨어의 청사진을 만드는 것

설계 기본 원리

분할과 정복, 추상화, 단계적 분해, 모듈화, 정보 은닉

소프트웨어 설계 분류

상위 설계 : 아키텍처 설계 - 데이터 설계 - 인터페이스 정의 - 사용자 인터페이스 설계
하위 설계 : 모듈 설계 - 자료구조 설계 - 알고리즘 설계
하위 설계 방법
절차 기반(Procedure-Oriented)
자료 위주(Data-Oriented)
객체 지향(Object-Oriented)

소프트웨어 설계 대상

구조 모델링
기능적 관점
정적
행위 모델링
상호작용
동적

소프트웨어 설계 방법

구조적 설계
Coad/Yourdon
자료 중심 설계
Jackson Warner-Orr
객체지향 설계
Yourdon, Sheller/Meller, Rumbaugh, Boach

소프트웨어 구조도

Fan-in : 상위 모듈 수
Fan-out : 하위 모듈 수
Depth : 깊이
Width : 같은 등급
Super ordinate : 다른 모듈 제어
Sub ordinate : 제어 당하는 모듈
Fan-in이 높은 경우
재사용 측면에서 잘된 설계
단일 장애 발생을 방지하기 위해 중점 관리 필요
단일 장애 발생 가능성 있음.
Fan-out이 높은 경우
불필요한 타 모듈 호출 여부 확인
단순 설계 가능 여부 검토
복잡도 최적화를 위한 조건
Fan-in을 높이고 Fan-out은 낮추도록 설계

코드 설계

코드 : 데이터의 사용 목적에 따라 식별하고 분류, 배열하기 위해 사용하는 숫자, 문자 혹은 기호
코드 설계 순서
1.
코드 대상 선정
2.
코드화 목적 명확화
3.
코드 부여 대상 수 확인
4.
사용 범위 결정
5.
사용 기간 결정
6.
코드화 대상의 특성 분석
7.
코드 부여 방식 결정
8.
코드의 문서화
코드의 기능
기본적 기능
표준화 기능
간소화 기능
3대 기능
분류 기능
식별 기능
배열 기능
부가적 기능
연상 기능
암호화 기능
오류 검출 기능
코드 설계 목적 및 특성
고유성
분류 편리성
배열의 효율성
간결성
유지보수 편리성
코드의 독립성
코드의 편의성
추가/삭제 편리성

코드의 종류

순차(Sequence) 코드
확장성 좋고, 단순, 기억 쉬움.
항목 수 적고, 변경 적은 자료 적합, 기억 공간 낭비 적음.
웅통성 낮음.
블록 코드
기계 처리 어려움. 여유 코드는 코드 낭비 요인
그룹 분류식 코드
여유 부분이 있어 자료 추가 쉽게 처리 가능 but 자릿수 길어질 수 있음.
10진 분류 코드
도서 분류 코드 사용
표의 숫자 코드
의미가 있는 코드(수치있음)
같은 코드 반복 사용
연상 코드
품목 명칭 일부
전자제품
코드의 오류 종류
필사(Transcription) 오류
1234 → 1237
전위(Transposition) 오류
1234 → 1243
이중(Double Transposition) 오류
1234 → 2143
생략(Missing) 오류
1234 → 123
추가(Addition) 오류
1234 → 12345
임의(Random) 오류 (2가지 이상 오류 결합)
1234 → 21345

구조적 개발 방법론

구조적 분석
자료의 흐름, 처리를 중심으로 한 요구분석 방법
정형화된 분석 절차
문서화하는 체계적 분석 방법
자료흐름도, 자료사전, 소단위 명세 사용
하향식, 시스템 분할 가능
자료 흐름도
버블 차트, 자료 흐름 그래프
작성 원칙
자료 보존
최소 자료 입력
독립성
지속성
순차 처리
구성요소
소단위 명세서
세분화된 자료 흐름도에서 최하위 단계 프로세스 처리 절차
== 프로세스 명세서
자료흐름도(DFD) 지원하기 위해 작성

구조적 언어, 의사 결정 나무, 의사 결정표

구조적 언어 : 자연어 일부분, 제한/한정된 명세서 작성에 이용
의사 결정 나무 : 현재 상황과 목표와의 상호 관련성을 나무의 가지를 이용해 표현한 것.
의사 결정표 : 복잡한 의사결정 논리를 기술하는데 사용, 자료 처리 분야에서 이용

자료 사전(DD : Data Dictionary)

시스템과 관련된 모든 자료의 명세와 자료 속성을 파악 할 수 있도록 조직화된 도표
표기법
A = B : 자료의 정의
~로 구성되어 있다 (is compose of)
A + B : 자료의 연결
그리고(and, along with)
( A ) : 자료의 생략
생략 가능한 자료(optional)
[ A | B ] : 자료의 선택
다중 택일(selection), 또는(or)
{ 3 }n : 자료의 반복(iteration of)

자료 사전의 역할

자료 흐름도에 기술한 모든 자료의 정의를 기술한 문서
하향식 분할 원칙에 맞추어 구성 요소 재정의

자료 사전에서 기술해야 할 자료

자료 흐름을 구성하는 자료 항목
자료 저장소를 구성하는 자료 항목
자료에 대한 의미
자료 원소의 단위 및 값 등

모듈

모듈

전체 프로그램에서 어떠한 기능을 수행할 수 있는 실행 코드 의미
재사용 가능 - 자체적 컴파일 가능
기간 노동력 절감
모듈의 독립성은 결합도와 응집도에 의해 측정
= 서브루틴 = 서브 시스템 = 작업 단위
기능적 독립성 : 각 모듈의 기능이 서로 다른 모듈과의 과도한 상호작용을 회피함으로서 이루어지는 것

결합도(Coupling)

서로 다른 모듈 간의 상호 의존도 - 기능적인 연관 정도
결합도가 낮을 수록 좋음. - 모듈 독립성 향상, 유지보수 작업 쉬움.
자료 결합도가 설계 품질이 가장 좋음.
종류 (결합도 약한 순으로)
자료 결합도
자료 요소로만 구성
영향 X
스탬프 결합도
같은 자료 구조 조회
인터페이스로 전달되는 경우와 관계
제어 결합도
제어 신호 이용 통신
외부 결합도
외부 선언 변수 참조 관계
공통 결합도
공통 자료 영역 사용
내용 결합도
내부로 침투해서 조회하도록 설계

응집도(Cohesion)

얼마나 관련되어 있는지의 정도
응집도가 강할수록 좋음. - 필요한 요소들로만 구성
종류 (응집도 강한 순으로)
기능적 응집도
순차적 응집도
교환적 응집도
절차적 응집도
시간적 응집도
논리적 응집도
우연적 응집도

모듈 설계 특징

복잡도 중복 피하고 줄이기
계층적 자료 조직 제시 필요
모듈의 크기가 작을수록 개수 증가, 통합 비용 증가
모듈의 크기가 클 수록 단위 모듈 개발 비용 증가
모듈 독립성을 높이기. - 오류발견 해결 쉬어

모듈과 컴포넌트

모듈
스스로 동작가능한 명령의 집합
인터페이스
컴포넌트
독립적인 업무 or 기능 수행 모듈 - 교체 가능 부품
모듈의 소스 코드 레벨 재활용으로 인한 한계성 극복
인터페이스를 통해 연결

모듈 분할 특징

모듈 분할 시 영향을 주는 설계 형태
추상화(Abstraction)
모듈화(Modularity)
정보 은폐(Information Hiding)
복잡도(Complexity)
시스템 구조(System Structure)

재사용

검증된 기능을 파악하여 재구성하는 것
응집도는 높게, 결합도는 낮게

재사용 규모에 따른 구분

함수와 객체 : 클래스와 메소드 단위
컴포넌트 : 자체 수정 없이 인터페이스를 통해 컴포넌트 단위로 재사
애플리케이션 : 공통 업무 처리 가능하게 구현된 애플리케이션 공유

공통 모듈

재사용 범위에 따른 분류
함수와 객체 재사용
컴포넌트 재사용
애플리케이션 재사용

공통 모듈 - 명세 기법

정확성(Correctness)
명확성(명료성, Clarity)
완전성(Completeness)
일관성(Consistency)
추적성(Traceability)

모듈 명세화 도구

흐름도(Flowchart)
N-S 도표(Nassi-Schneiderman Chart)
순차, 선택, 반복의 구조를 사각형으로 도식화
제어 논리 구조
순차(연속, Sequence)
선택 및 다중 선택(If~Then~Else, Case)
반복(Repeat~Until, While, For)
주로 박스다이어그램 사용
의사 코드(Pseudo Code)
의사 결정표(Decision Table)
의사 결정도(Decision Diagram)
PDL(Program Design Language)
상태 전이도(State Transition Diagram)
행위도(Action Diagram)

소프트웨어 아키텍처

개요

요구사항을 기반으로 개발 대상 소프트웨어의 기본틀(뼈대)을 만드는 것
유기적 집합
역할 : 설계 및 구현을 위한 구조적/비구조적인 틀(Frame)을 제공
Structure Frame : 시스템 개발을 위하여 결정된 컴포넌트 구조 모델
Non Structure Frame : 해당 구조 모델 이외 다른 아키텍처 설계의 결정들

소프트웨어 아키텍처 시스템 품질 속성

성능, 사용 운용성, 보안성, 시험 용이성, 가용성, 변경 용이성, 사용성

소프트웨어 아키텍처 특징

간략성
추상화
가시성
복잡도 관리 종류
과정 추상화
데이터 추상화
제어 추상화

아키텍처 프레임워크 구성 요소

프레임워크(FrameWork) : 복잡한 소프트웨어 문제를 해결하거나 서술하는데 필요한 기본 구조를 제공함으로써 재사용이 가능하게 해준다.
요소
Architecture Description(AD)
아키텍처를 기록하기 위한 산출물
하나의 AD는 System의 하나 이상의 View로 구성
이해관계자(Stakeholder)
소프트웨어 시스템 개발에 관련된 모든 사람과 조직 의미
고객, 개발자, 프로젝트 관리자 등을 포함
관심사(Concerns)
같은 시스템에 대해 서로 다른 이해관계자의 의견
관점(Viewpoint)
서로 다른 역할이나 책임으로 시스템이나 산출물에 대한 서로 다른 관점
뷰(View)
이해관계자들과 이들이 가지는 생각이나 견해로부터 전체 시스템을 표현한다.

소프트웨어 아키텍처 4+1 View Model

UML이 정의 되면서 4+1이 됌
5계층
Logical View(분석 및 설계)
Implementation View(프로그래머)
Process View(시스템 통합자)
Deployment View(시스템 엔지니어)
Use Case View(사용자)

소프트웨어 아키텍처 설계 원리

단순성
효율성
분할, 계층화
추상화
모듈화

소프트웨어 아키텍처 평가 방법론의 종류

SAAM, ATAM, CBAM, ARID

소프트웨어 아키텍처 패턴

아키텍처 패턴

종류 : Layered, Client-Server, Mater-Slave, Pipe-Filter, Broker, Peer to Peer, Event- Bus, MVC(Model VIew Controller), Blackboard, Interperter
장점 : 개발 시간 단축, 고품질, 안정적, 의사소통 간편, 유지보수 유리
아키텍처 패턴 = 아키텍처 스타일 = 표준 아키텍처

계층(Layered) 패턴

N-tier 패턴
4계층
Presentation Layer = UI 계층(UI Layer)
Application Layer = 서비스 계층(Service Layer)
Business Logic Layer = 도메인 계층(Domain Layer)
Data Access Layer = 영속 계층(Persistence Layer)

MVC(Model View Controller) 패턴

Model : 핵심 기능 + 데이터
View : 정보 표시 (다수 뷰 가능)
Controller : 사용자 입력 처리

클라이언트 서버(Client Server) 패턴

하나의 서버, 다수의 클라이언트
여러 컴포넌트에 걸쳐 데이터와 데이터를 처리하는 앱에 적합
은행에서 주로 사용

파이프 필터(Pipe-Filters)

데이터 흐름(Data Stream)을 생성하고 처리하는 시스템을 위한 구조
데이터 흐름 : 데이터 송/수신이나 처리의 연속적 흐름
필터는 파이프를 통해 받은 데이터를 변경시키고 그 결과를 파이프로 전송
각 처리 과정은 필터 컴포넌트에서 이루어짐
처리되는 데이터는 파이프를 통해 흐름 - 버퍼링, 동기화 목적 사용 가능

Peer To Peer

분산 컴퓨팅 앱 구축시 유연성 제공

브로커(Brocker)

메시지 브로커 소프트웨어에 활용
분산 시스템에 주로 사용

블랙보드(Black Board)

음성인식, 신호해석 등에 활용

이벤트 버스(Event-BUs)

이벤트 생성(소스)
이벤트 수행(리스너)
이벤트 통로(채널)
채널 관리(버스)

인터프리터(Interpreter)

특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용

객체지향 설계

구조적 프로그래밍

프로그램 이해, 디버깅 작업이 쉽다.
GOTO(분기) 문은 사용 X
구조적 프로그래밍의 기본 구조
순차(Sequence) 구조
선택(Selection) 구조
반복(Iteration) 구조

절차적 프로그래밍(Procedural Programming)

함수 기반 프로그래밍(C, Basic)

객체지향(Object Oriented)분석

현실 세계의 대상 체인 개체(Entity)를 속성(Attribute)과 메소드(Method)로 결합하여 객체(Object)로 표현(모델링)하는 것
기능이 아닌 개체 대상
JavaScript가 대표적

객체지향 구성 요소

Class
속성 + 행위를 정의한 것 - 일반적인 Type 의미
기본 사용자 정의 데이터 형 - 데이터 추상화 단위
구조적 기법의 단위 테스트(Unit Test)와 같은 개념
상위 클래스(부모 클래스, Super Class), 하위 클래스(자식 클래스, Sub Class)로 나뉨.
Class = 틀 = Type
Object
데이터와 함수를 묶어 캡슐화하는 대상이 됌.
Class에 속한 Instance
Intance : 같은 클래스에 속한 각각의 객체
Object = 실체 = 변수 = Instance
Message
Object 간에 서로 주고받는 통신 의미

객체지향의 5가지 특징

캡슐화(Encapsulation)
서로 관련성이 높은 데이터, 기능을 묶는 기법
결합도가 낮아져 재사용성 상승.
정보은닉 통해 메시지 교환 시 인터페이스 단순화
변경 발생 시 오류 파급 효과가 적음.
정보 은닉(Information Hiding)
객체 내부 속성과 메소드를 숨기고 공개된 인터페이스를 통해서만 메시지를 주고 받을 수 있도록 하는 것을 의미
예기치 못한 Side Effect를 줄이기 위해 사용
추상화(Abstraction)
시스템 내 공통 성질을 추출한 뒤 추상 클래스를 설정하는 기법
종류 : 기능 추상화, 제어 추상화, 자료 추상화
상속성(Inheritance)
상위 클래스의 모든 속성, 연산을 하위 클래스가 재정의 없이 물려받아 사용하는 것
상위 : 추상적 성질, 자식 : 구체적 성질
다중 상속 : 다수의 상위에서 속성과 연산을 물려받는 것
다형성(Polymorphism)
객체가 다양한 모양을 가지는 성질
속성이나 변수가 서로 다른 클래스에 속하는 객체 지칭 가능 성질
오버로딩(같은 이름 순서 재사용)
오버라이딩(재정의) - 상속, 덮어쓰기

객체지향 기법의 관계성

is member of : 연관성(Association), 참조 및 이용 관계
is part of, part whole : 집단화(Aggregation), 객체 간의 구조적인 집약 관계
is a : 상속과 비슷, 일반화(Generalization), 특수화(Specialization), 클래스 간의 개념적 포함 관계

객체지향 설계 원칙(SOLID)

단일 책임의 원칙(SRP : Single Responsibility Principle) : 단일 목적
개방 - 폐쇄의 원칙(OCP : Open Closed Principle) : 확장 개방, 수정 페쇄
리스코프치환 원칙(LSP : Liskov Substitution Principle) - 상속
인터페이스 분리 원칙(ISP : Interface Segregation Principle) : 의존X
의존 역전 원칙(DIP : Dependency Inversion Principle)

객체지향 개발 방법론

Booch : OOD(Object OrientedDesign)
OOSE(Object Oriented SW Engineering) : Use Case 접근 방법
OMT(Rum-baugh)
구성
객체지향 분석
시스템 설계
오브젝트 설계/구현
모델링 기법
객체 모델링
동적 모델링
기능 모델링
Coad, Your-don 방법
E-R 다이어그램 사용

클래스 설계

객체 상태 변화 모델링 필수

클래스 인터페이스

개발자 분류
클래스 구현
클래스 사용
클래스 확정

협약에 의한 설계(Design by Contract) 3가지 타입

선행 조건
결과 조건
불변 조건

디자인 패턴

디자인 패턴 장단점

장점
개발자 간 원활한 의사소통 지원
소프트웨어 구조 파악이 쉬움
재사용을 통한 개발 시간 단축
설계 변경 요청에 대한 유연한 대처 가능
객체지향 설계 및 구현의 생산성을 높이는 데 적합
단점
객체지향 설계/구현 위주 사용
초기 투자 비용 부담

디자인 패턴 구성

필수 요소
패턴의 이름 : 패턴 부를 때 사용하는 이름과 패턴의 유형
문제 및 배경
해법 : 패턴을 이루는 요소들, 관계, 협동 과정
결과 : 패턴을 사용하면 얻게 되는 이점이나 영향
추가 요소
알려진 사례
샘플 코드
원리, 정당성, 근거

GoF(Gangs of Four) 디자인 패턴

객체지향 설계 단계 중 재사용에 관한 유용한 설계를 디자인 패턴화 했다.
에릭 감마, 리처드 헬름, 랄프 존슨, 존 브리시데스가 제안.
분류
생성 패턴
객체 생성
객체 생성과 참조 과정 추상화
Factory Method
상위 클래스 - 객체 생성
하위 클래스 - 인스턴스 생성
Virtual-Constructor 패턴
Singleton
전역 변수 사용X - 객체 하나 생성
생성 객체 어디서든 참조
Prototype
prototyped 우선 생성 ⇒ 인스턴스 복제 사용 구조
객체 생성
비용 많이 소요 되는 경우 주로 사용
Builder
인스턴스 조립 조합 객체 생성
Abstraction Factory(추상 팩토리)
연관, 의존적 객체들 조합 인터페이스 제공 패턴
관련된 서브 클래스 그룹 동시 교체 가능
구조 패턴
Adapter
기존 구현 클래스에 기능 발생 시 기존 클래스 재사용 결합 역할
Bridge
연결 - 분리 - 변형 패턴
행위 패턴
반복적 사용 객체 상호작용 패턴화
클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의
Mediator
객체 간의 통제와 지시의 역할을 하는 중재자를 두어 목표 달성
== Virtual-Constructor 패턴

인터페이스 요구사항

요구사항 구성, 내/외부 인터페이스 이름, 연계 대상 시스템, 연계 범위 및 내용, 연계 방식, 송신 데이터, 인터페이스 주기, 기타 고려사항
분류
기능적 요구사항
비기능적 요구사항
분석 절차
1.
요구 명세 작성
2.
자료 준비
3.
명세 파악 - 요구사항 구분
4.
완성도 높인다.
5.
이해관계자 공유
검증 절차
1.
검토 계획 수립
2.
검토, 오류 수정
3.
베이스 라인 설정

인터페이스 요구사항 검증 방법

프로토타이핑
테스트 설계
CASE 도구 활용
Computer Aid Software Engineering
요구사항 검토
동료 검토
워크스루
검토회의 전 명세서 배포 → 짦은 검토 회의 → 결함 발견
인스펙션

인터페이스 대상 식별

Interface System Process

송신 시스템 중계 시스템 수신 시스템

인터페이스 시스템 구성

송신 시스템
연계할 데이터를 테이블, 파일 형태로 생성 후 전송하는 시스템
중계 시스템
송/수신 시스템 사이에서 데이터 상태를 모니터링하는 시스템
수신 시스템
데이털르 변환하여 DB에 저장하거나 에 활용할 수 있도록 지원하는 시스템

인터페이스 데이터 표준

표준 형식 정의 사용
공통부
인터페이스 표준 항목 포함
개별부
송/수신 시스템에서 업무 처리에 필요한 데이터 포함
종료부
전송 데이터 끝 표시 문자 포함
전문 공통부(고정크기)
전문 길이 10Byte
시스템 공통 246Byte
거래 공통 256Byte
전문 개별부(가변크기)
데이터 nByte
전문 종료부
전문 종료 2Byte

인터페이스 내/외부 송수신 방식

직접 연계 방식
솔루션 사용X
간접 연계 방식
솔루션 사용O

인터페이스 연계 기술

DB Link
DB Link 객체 이용
직접 참조 연계
DB Connection
WAS → DB Connection Pool 생성
API/Open API
Application Programming Interface 이용
JDBC
JDBC 드라이
Hyper Link
Socket
서버에서 통신을 위한 소켓 생성
클라이언트 통신 요청 시 클라이언트와 연결하는 방식
Web Service
WSDL, UDDI, SOAP
연계 솔루션

시스템 연계 기술

API
WSDL
UDDI
XML
SOAP

미들 웨어

미들웨어 솔루션 정의

클라이언트와 서버 간의 통신을 담당하는 시스템 소프트웨어
표준화 연결 도와주는 소프트웨어
일관성 제공
다목적 소프트웨어

미들웨어 유형

데이터 베이스
TP-Monitor
트랜잭션 감지 미들웨어
ORB
객체지향 미들웨어
RPC
원격 로컬 프로시저처럼 호출
MOM
데이터베이스 시스템 데이터 동기화
WAS
일반 웹서버와 구별
HTTP를 통한 앱 수행 미들웨어
객체 트랜잭션 모니터

미들웨어 솔루션 분류

DB 미들웨어
ODBC, IDAP, DRDA, OLEDB
통신 미들웨어
RPC, DCE, MOM, ORB, OTM