본문 바로가기

스터디스터디/정처기

[실기] 소프트웨어공학(1/3)

최초 작성일: 2024-10-06

최종 작성일: 2024-10-06

목표 : 정처기 합격 및 CS 지식 쌓기

 

 

소프트웨어 구축 (6~7문제)

데이터 베이스 (3~4문제)

 

1.    소프트웨어 공학

(1)   정의

소프트웨어 위기를 극복하고 품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문

2.    소프트웨어 공학의 3R

(1)   역공학(Reverse)

(2)   재공학 (re) : 분석 -> 재구성 -> 역공학(문서를 만들어) -> 이관

(3)   재사용 : 함수와 객체, 컴포넌트, 애플리케이션 재사용, 생성중심(추상화), 합성(블록을 끼워맞춰)중심

(함수-> 컴푸넌트 -> 애플리케이션)

3.    소프트웨어 개발 단계

계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수(수정, 향상, 예방, 적응 보수)

4.    소프트웨어 개발 방법론

(1)   개념 : 소프트웨어 개발에 필요한 과정(절차, 방법, 산출물, 기법, 도구)들을 체계적으로 정리한 것

(2)   종류

구조적 방법론  : 하향식 (구조를 만들어서 함수를 만들음), 절차 지향

정보공학 방법론 : 회사에 있는 데이터 활용

객체지향 개발 방법론 : 상향식

CBD(Component Based Development) 방법론 : 합성론, 컴포넌트를 사서 끼워넣어

애자일 방법론 : 빨리 빨리

5.    소프트웨어 개발 모델

(1)   폭포수 모델 : 선형, 역으로 거슬러올라갈 수 없음, 순차적

(2)   프로토타이핑 모델: 시제품

(3)   나선형 모델 : 위험 분석 (계획 -> 위험분석 -> 공학적 개발 -> 평가), 점진적, 반복

(4)   RAD(RAPID) :케이스 도구 이용 (상위-분석,설계를 도와주는/하위- 개발, 통합 케이스-상하위 다합해서, 형상관리 등)

(5)   V모형: 폭포수 모델에 맞춰 테스트에 집중하는 것 (단위-정적/동적-> 통합-상향식_드라이버/하향식_스텁/빅뱅테스트 -> 시스템-실제운영하는 환경,기능/비기능테스트 -> 인수 테스트-알파_개발자,베타_개발자 뺴고)

(6)   4세대 기법

6.    애자일 방법론

(1)   개념 : 신속하고 반복적인 작업을 통해 지속적으로 작동 가능한 소프트웨어를 개발하는 방식이다

(2)   애자일 선언문

공정과 도구보다는 개인과 상호작용을

포괄적인 문서보다 작동하는 소프트웨어

계약 협상보다 고객과의 협력을

계획에 따르기 보다는 변화에 대응

(3)   종류

XP : 의사소통, 용기, 피드백,. 존중, 단순성 ( 의 피존 용 단)

스크럼: 스프린트, 백로그

크리스털: 규모에 따른 방법론 제공

FDD: 기능 주도 개발

ASD: 합동 애플리케이션 개발

: 도요타 린 시스템

(4)   XP 12가지 실천사항

짝 프로그래밍

계획 세우기

테스트 기반 개발

고객 상주

지속적인 통합

코드 개선

작은 릴리즈

코딩 표준

공동 코드 소유

간단한 디자인

시스템 메타포어(전체적인 설계를 있어야 )

작업 시간 준수

7.    IT 서비스 관리

(1)   SLM(서비스 레벨) : 서비스 수준을 정량적으로 측정하고 실적을 평가하여 미흡한 부분을 개선하는 관리 활동 -> 관리

(2)   SLA(서비스 레벨 어그리먼트) : 소프트웨어 수요자와 공급자간에 서비스 수준을 명시적으로 정의한 문서

(3)   ITSM(Information Technology Service Management) : 최종 사용자를 위한 it 서비스를 구현, 전달, 관리하는 일련의 정책과 관행

(4)   ITIL(IT Infrastructure Library) : IT 서비스를 쉽게 제공하고 관리할 수 있는 가이드 또는 프레임 워크

 

 

1.    프로젝트 관리

(1)   개념 : 특정한 목적을 달성하기 위해 한정된 기간, 예산, 자원을 활용하여 사용자가 만족할 만한 제품이나 서비스를 개발하도록 하는 기술적, 관리적 활동

(2)   프로젝트 핵심 관리 대상(3P) : 사람, 문제, 프로세스

(3)   PMBOK (Project Management Body of knowledge)

PMI에서 제작한 프로젝트 관리 프로세스 및 지식 체계

PMBOK 5단계 프로세스 그룹

1단계 : 프로젝트 착수

2단계 : 프로젝트 계획

3단계 : 프로젝트 실행

4단계 : 프로젝트 통제

5단계 : 프로젝트 종료

2.    개발 비용 산정

(1)   소프트웨어 개발 비용 계획

개발에 필요한 인원, 자원, 기간 등을 고려하여 소프트웨어의 규모를 파악하고 이를 바탕으로 필요한 비용을 산정한다

(2)   하향식 산정 기법(TOP-DOWN_

전문가 판단 기법, 델파이 기법

(3)   상향식 산정 기법(BOTTOM-UP)

원시 코드 라인수 (LoC) 기법

-추정 LoC: (낙관치 + (4*중간치) +비관치)/6

개발 단계별 노력 (EFFORT PER TASK) 기법

-LoC 기법을 확장

(4)   수학적 기법

COCOMO 기법 (라인수 기반)

-조직형(Organic, 5만 라인 이하), 반분리형(Semidetached,30만 라인 이하), 내장형(embedded,30만 라인 이상)

Putnam 기법

-Ralyleigh-Norden곡선 이용, SLM( 자동화 추정 기구 이용)

기능점수기법(FP, Functional Point)

-내부 논리 파일(ILF), 외부 연계 파일(EIF)

-외부 입력(EI), 외부 출력(EO), 외부 조회(EQ))

-ESTIMACS (자동화 추적 기구)

3. 개발 일정 산정

(1) 소프트웨어 개발 일정 계획

소프트웨어 개발을 위해 필요한 작업을 정의하고, 이들 작업의 우선순위를 설정하여 전체 프로젝트 일정 계획을 수립한다

-작업순서

작업 분해 (WBS)

CPM 네트워크 작성 ( 전후 관계를 고려해서 CPM 네트워크 작성)

최소 소요기간 계산

소요 Man-Month(m/m) 및 기간 산정 후 CPM 수정

간트 차트로 표현

 

1.    현행 시스템 분석

(1)   현행 시스템 파악

1)    파악의 정의

기존 시스템의 기능, 성능 그리고 문제점을 이해하고 평가하기 위한 과정

(2)   플랫폼 기능 분석

1)    정의 : 다양한 응용프로그램, 서비스 또는 기능이 구축되거나 실행되는 기반 또는 환경

2)    기능 : 연결 기능, 비용감소 기능, 브랜드 신뢰 기능, 커뮤니티 형성

(3)   플랫폼 기능 분석

CPND (Content Platform Network Device)

Contents : 텍스트, 이미지, 오디오, 비디오 등

Platform : 웹 사이트, 애플리케이션 등

Network : 통신 시스템

Device : 스마트 폰, 컴퓨터, 태블릿 등

(4)   현행 시스템 분석

운영체제 분석

네트워크 분석

DBMS 분석

미들웨어 분석

(5)   미들웨어 종류

원격 프로시저 호출 (Remote procedure call) : 기존에 있는 프로시저 재활용

메시지 지향 미들웨어(message oriented middleware : 모아 두다가 일괄 처리

ORB(object request broker) : 브로커 역할

DB 접속 미들웨어  : JDBC

TP 모니터(transaction processing monitor): 트랜잭션(하나의 일처리 단위) 모니터링

웹 어플리케이션 서버(WAS): 동적인 웹 기능 ( 게시판, 항상 글이 올라옴)

엔터프라이즈 서비스 버스(Enterprise service bus) : 여러 개를 묶어서 하나의 버스 형태 (구독, 이벤트 즉 공지를 띄어놓으면 그걸 받아볼 수 있는 것)

 

 

2.    요구 공학

(1)   요구공학 개념 : 소프트웨어의 요구사항을 식별, 분석, 문서화하고 이를 관리하는 과정

(2)   요구공학의 필요성: 품질 개선, 리스크 감소, 비용 절감, 효율적인 프로젝트 관리, 사용자와 개발자간의 소통 개선

(3)   요구사항 개발 프로세스(도분명확)

1)    요구사항 도출(Elicitation): 인터뷰, 설문조사, 브레인스토밍, 워크샵, 직접 관찰 등 다양한 방법을 통해 수행한다

2)    요구사항 분석(analysis) : 수집된 요구사항 중에서 불완전하거나 모호하며, 중복되거나 충돌하는 부분을 식별하여 수정한다/ 업무환경과 상호작용 파악(도메인 분석)/ DFD(데이터 흐름),Data Dictionary, Mini-Spec, ERD, STD(상태전이도) -> 구조적인 측면/ UML(Unified Modeling Language) -> 객체 지향

*DFD, DD, Mini-Spec, ERD, STD 관련 그림 확인 필요

3)    요구사항 명세(Specification)

분석된 요구사항은 명세서 형태로 정리한다

-정형 명세: 수학, 논리학

-비정형 명세: 자연어, 그림 중심

-기능 요구사항, 비기능 요구사항 분류

4)    요구사항 확인 및 검증

분석가가 요구사항을 이해했는지 확인

요구사항 문서가 일관성 있고 완전한지 검증

(4)   요구사항 분석 도구

1)    HIPO(Hierachical Input Process Output)

개념 : 하향식 소프트웨어 개발을 위한 문서화 도구

2)    구성 요소 : 주요 프로세스, 하위 프로세스, 입력/출력

3)    HIPO 차트 종류 : 가시적 도표(전반적인 그림, 입출력 없음 사이트 맵), 총체적 도표(입출력), 세부적 도표(총체적 도표의 상세화)

 

3.    요구사항 분석 모델링

(1)   개념 : 복잡한 시스템을 이해하고 효과적으로 개발하기 위해 간단한 모델로 표현하는 과정

(2)   구분

기능적 모델링: 사용자 관점에서 시스템의 기능을 표현/ 사용 사례 다이어그램, 액티비티 다이어그램 등

정적 모델링 : 시스템의 구조를 클래스 단위로 표현/ 클래스 다이어 그램

동적 모델링 : 시스템의 상호작용 및 동작을 표현/ 순서 다이어그램, 상태 다이어그램, 커뮤니케이션 다이어그램 등

(3)   구조적 분석 도구

자료 흐름도 (DFD ,Data Flow Diagram) : 자료의 흐름

자료 사전 (DD, Data Dictionary) : 자료들을 세부적으로 표현 ( 예를 들어 회월은 아이디, 패스워트 등을 포함)

소단위 명세서 (mini specification) : 하나의 기능을 세부적으로

개체 관계도( ERD, Entity Relationship Diagram) : 개체, 속성, 개체 간 관계

상태 전이도( STD, State Transaction Diagram) : 상태의 변경사항을 그림으로 표현

(4)   객체 지향 분석 모델

1)    객체지향 분석 : 사용자 요구사항을 객체지향적 관점에서 분석하고 모델링 한다

2)    객체 지향 분석 방법론

럼바우(Rumgaugh) : 객체 모델링(객체 다이어그램), 동적 모델링(상태 다이어그램), 기능 모델링(DFD, 어떤 기능 수행)

럼바우 객동기에 사셨음

부치 방법 : 미시적 및 거시적 개발 프로세스

제이콥습 : 유즈 케이스를 중심으로 한 분석 방법

코드와 요오든 : E-R 다이어그램을 사용

Wirfs -Brock 방법: 분석과 설계의 구분 없음

 

 

소프트웨어 설계

(1)   개념 : 요구사항 명세서를 바탕으로 소프트웨어의 구체적인 설계서를 작성하는 단계

(2)   설계의 종류

1)    상위 설계 : 아키텍처, 데이터, 인터페이스 정의, 사용자 인터페이스 설계

2)    하위 설계 : 모듈, 자료구조, 알고리즘

3)    협약에 의한 설계 : 선행 조건, 결과 조건, 불변 조건

(3)   소프트웨어 설계의 원리

1)    분할과 정복

2)    추상화 : 과정, 데이터, 제어

3)    단계적 분해 : 설계 할 때 사용

4)    모듈화

5)    정보은닉 : 캡슐화

6)    결합도와 응집도

설계 모델링

(1)   개념: 소프트웨어의 구조와 기능을 그래픽적으로 표현한 것

(2)   유형

1)    구조 모델링 : uml 정적 다이어그램(클래스 다이어그램)

2)    행위 모델링 : uml 동적 다이어그램(use case 다이어그램)

소프트웨어 아키텍처

(1)   개념 : 소프트웨어의 기본구조로 시스템의 컴포넌트와 이들 간의 관계를 기술한다

(2)   4+1

논리뷰: 시스템의 기능적 요구사항

구현 뷰: 모듈의 구성과 개발자의 관점을 반영

프로세스 뷰 : 프로그램 실행 시의 시스템을 표현

배치 뷰 : 시스템의 물리적 배치

유스케이스 뷰 : 아키텍처 설계 및 검증을 주도

 

소프트웨어 아키텍처 패턴

(1)   개념 : 재사용 가능한 소프트웨어 아키텍처의 해결책으로 공통적인 설계 문제에 대한 일반적인 접근방법 제시

(2)   소프트웨어 아키텍처 패턴 종류

1)    계층화 패턴 : osi 7 계측

2)    클라이언트-서버 패턴 : 클라이언트가 어떤 서버에 요청, 일반적

3)    마스터-슬레이브 패턴 : 마스터가 단순한 일을 할당하면 슬레이브가 일을 하는 것, 마스터가 분산하는 것

4)    파이프-필터 패턴 : 파이프 처럼 일 처리 완료 하면 옆으로 넘기는 것

5)    브로커 패턴

6)    피어투 피어 : 컴퓨터간 연계

7)    이벤트-버스 패턴 : 이벤트가 발생시 버스를 통해 전달

8)    모델--컨트롤러 패턴(mvc pattern) :소스단위에서 model(데이터), view(화면), controller(처리)로 분리

9)    블랙보드 패턴 : 알려지지 않은 문제점 해결

10)  인터프리터 패턴 : 특정 언어

UML(Unified Modeling Language)

(1)   개념 : 소프트웨어 시스템을 시각화 및 문서화하고, 소프트웨어 시스템의 구조와 동작을 명세하는 표준화된 모델링 언어

(2)   특징 : 가시화 언어, 명세화 언어, 구축언어, 문서화 언어

(3)   구성 요소

1)    사물(things)  : 구조 사물, 행동 사물(상태를 어떻게 표현), 그룹 사물, 주해 사물(주석)

2)    관계

일반화 관계(generalization) : 상속관계

연관 관계(association) : 관련된 관계

의존 관계 : 짧은 시간만 사용하는 관계

실체화 관계 : 추상 메서드를 오버라이딩 (위에서 틀만 만들고 실제로 기능을 하위클래스에서 구현), 점선으로 표현

집합관계-집약관계(aggregation): 부분객체는 독립적

집합관계-합성관계(composition): 부분객체는 의존적(밀접한 연관관계)

3)    다이어그램

1)    구조 다이어그램 : 클래스, 객체, 컴포넌트, 배치, 복합체구조, 패키지 다이어그램

2)    행위 다이어그램(구조의 상태가 변경되는 것을 표현) : 유스케이스, 순차, 커뮤니케이션, 상태, 활동, 상호작용, 타이밍 다이어그램

 

UI 설계

1)    개념: 컴퓨터, 웹 사이트, 시스템 등의 정보기기와 사용자 간의 상호작용을 가능하게 하는 매개체 이다

2)    UX 개념 : 사용자가 UI를 통해 경험하는 모든 것을 포함한다

3)    UI 유형 : CLI, GUI, NUI(Natural User Interface), OUI(Organic User Interface모든것들이 매개체가 됨),VUI(voice user interface),ARU(augmented reality user interface)

4)    요구사항 구분

1)    기능적 요구사항 : 시스템이 제공해야하는 기능에 대한 요구사항

2)    비기능적 요구사항 : 사용성, 효율성, 신뢰성, 유지보수성, 재사용성 등 품질에 관한 요구사항

5)    UI 설계 원칙

원칙 설명
직관성 누구나 쉽게 이해하고 사용할 수 있어야 한다
유효성 사용자의 목적을 정확하게 달성해야한다
학습성 누구나 쉽게 배우고 익힐 수 있어야한다
유연성 사용자의 요구사항을 최대한 수용하며, 오류를 최소화해야한다

 

6)    UI 설계 도구

와이어프레임(기획자+디자이너), 스토리보드, 프로토타입(시제품), 목업(정적인 요소), 유스케이스

 

 

감성공학

(1)   개념 : 인간의 감성을 물리적 설계 요소로 번역하고 구현하는 기술

(2)   제품과 관련된 인간의 감성 : 감각적 감성, 기능적 감성, 문화적 감성

(3)   감성공학의 접근 방법 : 1류 접근 방법 : 디자인 요소와 연결 / 2류 접근 방법: 문화적 감성을 반영 / 3류 접근 방법: 감성을 정량화

화면 레이아웃 구성

(1)   레이아웃의 개념: 특정 공간에 여러 구성요소를 보기 좋고 효과적으로 배치하는 작업

(2)   레이아웃 개발 구분 : HTML5(구조), CSS(디자인), JS(동적)

*AJAX :JS AJAX를 이용해 백엔드에서 개발한 API를 이용하여 화면에 뿌려줌

(3) JS 프레임 워크

Ajax: 비동기적인(요청에 대한 응답을 받기 전에 다른 행위 가능) 웹 애플리케이션 제작

 

UI 관련 용어

웹 표준: WWW에서 사용 하는 공식 표준

웹 호환성: 다양한 환경에서도 웹 서비스가 동일하게 작동하는 능력

웹 접근성: 장애인과 비 장애인 모두가 웹 사이트를 이용 장차법

반응형 웹: 화면 크기에 맞춰 내용을 적절하게 표시

인포그래픽: 정보와 그래픽을 결합

브랜드 아이덴티티: 특정 브랜드의 가치와 의미

내비게이션: 정보를 탐색하고 접근하는 메뉴

아코디언 : 확장, 축소 패널

플레이스 홀더 : 입력 필드에서 예시나 안내 문구

필터링: 데이터를 제외

입력 폼: 웹 서버로 전송할 수 있게 하는 웹 페이지의 부분

입력 필드 : 사용자가 데이터를 입력하는 요소

썸네일 : 작은 이미지

레이블: 입력 폼의 각 입력 필드를 식별

대체 텍스트: 이미지 대신 제공되는 텍스트