잡다한 배똥월드

728x90

 

 

 

1. 소프트웨어 패키징의 형상 관리 (SCM: Software Configuration Management)

  • 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발의 일련의 활동
  • 소프트웨어 변경의 원인을 알아내고 제어 => 적절히 변경되고 있는지 확인하며 담당자에게 통보
  • 소프트웨어 개발의 전 단계에 적용되는 활동 => 유지보수 단계에서도 수행
  • 목적 : 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것
  • 관리 항목 : 소스 코드, 프로젝트 계획, 분석서, 설계서, 프로그램, 테스트 케이스 등
  • 가시성과 추적성 보장 => 생산성, 품질을 높임
  • 대표적인 형상 관리 도구 : Git, CVS, Subversion 등

 

 

 

 

2. 형상 관리의 중요성

  • 소프트웨어 변경 사항을 체계적으로 추적하고 통제할 수 있음
  • 무절제한 변경을 방지할 수 있음
  • 버그나 수정 사항을 추적할 수 있음
  • 진행 정도를 확인하기 위한 기준으로 사용될 수 있음
  • 배포본을 효율적으로 관리할 수 있음
  • 여러 명의 개발자가 동시에 개발할 수 있음

 

 

 

 

3. 형상 관리 기능

  • 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업
  • 버전 제어 : 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업
  • 형상 통제(변경 관리) : 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
  • 형상 감사 : 기준성의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
  • 형상 기록(상태 보고) : 형상의 식별, 통제, 감사 작업의 결과를 기록 · 관리하고 보고서를 작성하는 작업

 

 

 

 

4. 소프트웨어의 버전 등록 관련 주요 기능

  • 자료를 등록하고 갱신하는 과정에서 사용됨
  • 저장소(Repository) : 최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳
  • 가져오기(Import) : 아무것도 없는 저장소에 처음으로 파일을 복사
  • 체크아웃(Check-Out) : 프로그램을 수정하기 위해 저장소에서 파일, 소스파일, 버전 관리를 위한 파일을 받아옴
  • 체크인(Check-In) :체크아웃한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신
  • 커밋(Commit) : 이전에 갱신된 내용이 있는 경우에는 충돌(Conflict)을 알리고 diff 도구를 이용해 수정한 후 갱신을 완료함
  • 동기화(Update) : 저장소에 있는 최신 버전으로 자신의 작업 공간을 동기화함

 

 

 

 

5. 소프트웨어 버전 등록 과정

  • 가져오기(Import) → 인출(Check-Out) → 예치(Commit) → 동기화(Update) → 차이(Diff)

 

 

 

 

 

728x90
728x90

 

 

 

1. 정의

  • 사용자와 시스템 간의 상호작용이 원활하게 이뤄지도록 도와주는 장치나 소프트웨어를 의미
  • 초기에는 단순 상호작용에 국한. 최근에는 정보 전달을 위한 표현 방법으로 변경
  • 분야 : 물리적 제어에 관한 분야, 상세적 표현과 전체 구성에 관한 분야, 기능에 관한 분야
  • 기본 원칙 : 직관성, 유효성, 학습성, 유연성
  • 유연성 : 사요아의 요구사항을 최대한 수용하고 실수를 최소화해야 함

 

 

 

 

2.사용자 인터페이스의 특징

  • 사용자의 만족도에 가장 큰 영향을 미치는 중요한 요소 => 소프트웨어 중 변경이 가장 많이 발생
  • 편리성, 가독성 높임 => 작업 시간 단축, 업무 이해도 상승
  • 최소한의 노력으로 원하는 결과를 얻을 수 있음
  • 사용자 중심의 상호 작용이 되도록 함
  • 수행 결과의 오류를 줄임
  • 막연한 작업 기능에 대한 구체적인 방법을 제시해 줌
  • 정보 제공자와 공급자 간의 매게 역할을 수행
  • 설계하기 위해서 소프트웨어 아키텍처를 반드시 숙지해야 함

 

 

 

 

3. UX(User Experience)

  • 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험을 말함
  • 사용자가 참여, 사용, 관찰하고, 상호 교감을 통해서 알수 있는 가치 있는 경험을 말함
  • 사용자의 삶의 질을 향상시키는 하나의 방향
  • UI는 사용성, 접근성, 편의성 중시 / UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
  • 특징 : 주관성(Subjectivity), 정황성(Contextuality), 총체성(Holistic)

 

 

 

 

4. 구분

상호작용의 수단 및 방식에 따라 구분

  • CLI(Command Line Interfase) : 명령과 출력이 텍스트 형태로 이뤄지는 인터페이스
  • GUI(Graphical User Interfase) : 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스
  • NUI(Natural Use Interfase) : 사용자의 말이나 행동으로 기기를 조작하는 인터페이스
  • VUI(Voice User Interfase) : 사람의 음성으로 기기를 조작하는 인터페이스
  • OUI(Organic User Interfase) : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스

 

 

 

 

5. 설계 지침

  • 사용자 중심 : 사용자가 쉽게 이해하고 편리하게 사용할 수 있는 환경을 제공하며, 실사용자에 대한 이해가 바탕이 되어야 함
  • 일관성 : 사용자가 쉽게 기억하고 습득할 수 있게 설계해야 함
  • 단순성 : 조작 방법을 단순화시켜 인지적 부담을 감소시켜야 함
  • 결과 예측 기능 : 기능만 보고 미리 결과를 예측 가능하도록 설계해야 함
  • 가시성 : 메인 화면에 주요 기능을 노출시켜 최대한 조작이 쉽도록 설계해야 함
  • 표준화 : 기능 구조와 디자인을 표준화하여 한 번 학습한 이후에는 쉽게 사용할 수 있도록 설계해야 함
  • 접근성 : 사용자의 연령 성별, 인종 등 다양한 계층이 사용할 수 있도록 설계해야 함
  • 명확성 : 사용자가 개념적으로 쉽게 인지할 수 있도록 설계해야 함
  • 오류 발생 해결 : 오류가 발생하면 사용자가 쉽게 인지할 수 있도록 설계해야 함

 

 

 

 

6. 사용자 인터페이스 개발 시스템의 기능

  • 사용자의 입력을 검증할 수 있어야 함
  • 에러 처리와 그와 관련된 에러 메세지를 표시할 수 있어야 함
  • 도움과 프롬프트(Prompt)를 제공해야 함

 

 

 

 

 

728x90
728x90

 

 

 

1. 정의

  • 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
  • 종류 : 비점진적 통합 방식, 점진적 통합 방식

 

 

 

 

2. 비점진적 통합 방식

  • 단계적으로 통합하는 절차 없이 결합된 프로그램 전체를 테스트하는 방법
  • 규모가 작은 소프트웨어에 유리
  • 단시간 내에 테스트가 가능
  • 오류 발견 및 장애 위치 파악 및 수정이 어려움

 

 

 

 

3. 점진적 통합 방식

  • 모듈 단위로 단계적으로 통합하면서 테스트하는 방법
  • 오류 수정이 용이
  • 인터페이스와 연관된 오류를 완전히 테스트할 가능성이 높음
  • 종류 : 하향식 통합 방식, 상향식 통합 방식, 혼합 통합 방식

 

 

 

 

4. 하향식 통합 테스트(Top Down Integration Test)

  • 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
  • 아래 단계로 이동하면서 통합
  • 깊이 우선 통합법이나 넓이 우선 통합법 사용
  • 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있음
  • 상위 모듈에서는 테스트 케이스를 사용하기 어려움
  • 모듈이 통합될 때마다 테스트하며 새로운 오류가 발생하지 않았음을 보증하기 위해 회귀 테스트를 실시함
  • 스텁(Stub) : 상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈을 대체하는 것 (임시 제공의 가짜 모듈 역할)

 

 

 

 

5. 상향식 통합 테스트(Bottom Up Integration Test)

  • 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
  • 클러스터(Cluste) :  종속 모듈의 그룹
  • 드라이버(Driver) : 상위 모듈 없이 하위 모듈이 있는 경우 상위 모듈 대체 (하위 모듈과 상위 모듈 간의 인터페이스 역할)
  • 하위 모듈들을 클러스터로 결합
  • 통합된 클러스터 단위로 테스트함
  • 테스트가 완료되면 클러스터는 상위로 이동하여 결합하고, 드라이버는 실제 모듈로 대체

 

 

 

 

6. 혼합식 통합 테스트

  • 하위 수준에서는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원하는 방식
  • 샌드위치(Sandwich)식 통합 테스트 방법이라고도 함

 

 

 

 

7. 회귀 테스팅(Regression Testing)

  • 이미 테스트된 프로그램의 테스팅을 반복하는 것
  • 새로운 오류가 있는지 확인하는 테스트
  • 시간과 비용이 많이 필요하므로 변경된 부분을 테스트할 수 있는 테스트 케이스만을 선정하여 수행
  • 선정 방법 : 대표적인 테스트 케이스 선정, 파습 효과가 높은 부분이 포함된 것으로 선정, 실제 수정이 발생한 위치에서 시행하는 것으로 선정

 

 

 

 

 

728x90
728x90

 

 

 

1. 정의

  • 애플리케이션 테스트는 소프트웨어의 개발 단계에 따라 단위, 통합, 시스템, 인수 테스트로 분류
  • 테스트 레벨 : 개발 단계에 따라 분류된 것
  • 소프트웨어의 개발 단계에서부터 테스트를 수행 => 코드 상의 오류, 요구 분석의 오류, 설계 인터페이스 오류 등도 발견 가능
  • V-모델 : 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것

 

 

 

 

2. 단위 테스트(Unit Test)

  • 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것
  • 인터페이스, 외부적 I/O, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사
  • 사용자 요구사항 기반의 기능성 테스트를 최우선으로 수행
  • 발견 가능한 오류 : 알고리즘 오류에 따른 원치 않는 결과, 탈출구가 없는 반복문의 사용, 틀린 계산 수식에 의한 잘못된 결과 등

 

 

 

 

3. 통합 테스트(Integration Test, 결합 테스트)

  • 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미

 

 

 

 

4. 시스템 테스트(System Test)

  • 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트
  • 환경적인 장애 리스크를 최소화하기 위해서는 실제 사용 환경과 유사하게 만든 테스트 환경에서 테스트를 수행해야 함
  • 기능적 요구사항 : 요구사항 며에서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트 시행
  • 비기능적 요구사항 : 성능 · 회복 · 보안 테스트, 내부 시스템의 메뉴 구조, 웹 페이지 내의 네비게이션 등 구조적 요소에 대한 화이트박스 테스트 시행

 

 

 

 

5. 인수 테스트(Acceptance Test)

  • 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법
  • 사용자가 직접 테스트함
  • 인수 테스트에서 문제가 없을 경우 프로젝트 종료
  • 종류 : 사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파 테스트, 베타 테스트

 

 

 

 

6. 알파 테스트

  • 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법
  • 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록

 

 

 

 

7. 베타 테스트

  • 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법
  • 필드 테스팅(Field Testing)이라고도 불림
  • 실업무를 가지고 사용자가 직접 테스트하는 것
  • 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고

 

 

 

 

 

728x90
728x90

 

 

 

1. 화이트박스 테스트(White Box Test)

  • 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
  • 설계된 절차에 초점을 둔 구조적 테스트로 프로시저 설계의 제어 구조를 사용하여 테스트 케이스를 설계하며, 테스트 과정의 초기에 적용됨
  • 모듈 안의 작동을 직접 관찰함
  • 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행됨
  • 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어함
  • 종류 : 기초 경로 검사, 제어 구조 검사 등

 

 

 

 

2. 기초 경로 검사(Base Path Testing)

  • 기초 경로(Base Path = Basis Path) : 수행 가능한 모든 경로를 의미
  • 대표적인 화이트박스 테스트 기법
  • 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법
  • 테스트 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용됨

 

 

 

 

3. 제어 구조 검사(Control Structure Testing)

  • 조건 검사(Condition Testing) : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
  • 루프 검사(Loop Testing) : 프로그램의 반복 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
  • 데이터 흐름 검사(Data Flow Testing) : 프로그램에서 변수의 정의와 변수의 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법

 

 

 

 

4. 화이트박스 테스트의 검증 기준

  • 테스트 케이스들 테스트에 얼마나 적정한지를 판단하는 기준
  • 문장 검증 기준(Statement Coverage) : 소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계
  • 분기 검증 기준(Branch Coverage) : 결정 검증 기준(Decision Coverage)라고도 불리며, 소스 코드의 모든 조건문에 대해 조건이 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계
  • 조건 검증 기준(Condition Coverage) : 소스 코드의 조건문에 포함된 개별 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행되도록 테스트 케이스 설계
  • 분기/조건 기준(Branch/Condition Coverage) : 분기 검증과 조건 검증 기준을 모두 만족하는 설계로 조건문이 True인 경우와 False인 경우에 따라 조건 검증 기준의 입력 데이터를 구분하는 테스트 케이스 설계

 

 

 

 

5. 검증 기준(Coverae)의 종류

  • 기능 기반 커버리지 : 실제 테스트가 수행된 기능의 수 / 전체 기능의 수
  • 라인 커버리지 : 테스트 시나리오가 수생한 소스 코드의 라인 수 / 전체 소스 코드의 라인 수
  • 코드 커버리지 : 소스 코드의 구문, 분기, 조건 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법

 

 

 

 

6. 블랙박스 테스트(Black Box Test) = 기능 테스트

  • 소프트웨어가 수행할 특정 기능을 알리기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트
  • 사용자의 요구사항 명세를 보면서 테스트 하는 것 => 주로 구현된 기능을 테스트
  • 소프트웨어 인터페이스에서 실시되는 테스트
  • 부정확하거나 누락된 기능, 인터페이스의 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종류 오류 등을 발견하기 위해 사용
  • 테스트 과정의 후반부에 적용
  • 종류 : 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등

 

 

 

 

7. 동치 분할 검사(Equivalence Partitioning Testing, 동치 클래스 분해)

  • 입력 자료에 초점을 맞춰 테스트 케이스(동치 클래스)를 만들고 검사하는 방법
  • 동등 분할 기법이라고도 함
  • 입력 조건에 타당한 자료와 타당하지 않는 자료의 개수를 균등하게 하여 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법

 

 

 

 

8. 경계값 분석(Boundary Value Analysis)

  • 입력 조건의 중간값보다 경계값에서 오류가 발생할 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법

 

 

 

 

9. 원인-효과 그래프 검사(Couse-Effect Graphing Testing)

  • 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법

 

 

 

 

10. 오류 예측 검사(Error Gussing)

  • 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법
  • 데이터 확인 검사라고도 함

 

 

 

 

11. 비교 검사(Comparison Testing)

  • 여러 버전의 프로글매에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법

 

 

 

 

 

728x90
728x90

 

 

 

5. 폭포수 모델 단계

  • 타당성 조사 : 시스템의 정의와 가능성 조사 및 다른 방법과 비교 조사하는 단계
  • 계획 : 문제 정의, 목표와 요구사항 결정, 개발 비용 및 소요 기간, 인력 등의 개발 계획 수립 단계
  • 분석 : 요구사항을 구체적으로 이해하고 소프트웨어가 담당해야 하는 정보 영역을 정의하여 요구 분석 명세서로 문서화하는 단계
  • 기본 설계 : 전체적인 하드웨어 및 소프트웨어의 구조, 제어 구조, 자료 구조의 개략적인 설계를 작성하는 단계
  • 상세 설계 : 각 단위 프로그램에 대한 사항을 상세히 기술하는 단계

 

 

 

 

10. 스크럼

  • 제품 개발에 필요한 모든 요구사항을 우선순위에 따라 나열한 제품 백로그를 사용
  • 소멸(Burn-down) 차트를 통해 작업의 진행 사항 확인
  • 스프린트 검토 회의 후 개선 사항에 대한 피드백을 정리하여 제품 책임자(스크럼 마스터 X)는 제품 백로그를 업데이트
  • 작업 할당 시 개발자들이 자신에게 맞느 작업을 스스로 선별하여 담당할 수 있도록 하는 것이 좋음

 

 

 

 

 

 

11. 사용자 요구사항 추출 기법

  • 인터뷰 : 상대를 직접 만나서 이야기하면서 의견을 나누는 방법
  • 설문 : 어떤 주제에 대하여 미리 준비한 질문을 내어 물어보는 방법
  • 브레인스토밍 : 3인 이상이 자유롭게 의견을 교환하면서  독창적인 아이디어를 산출해 내는 방법
  • 프로토타이핑 : 시스템 수행 결과를 설명하기 위해 종이에 화면 순서를 기술하여 고객과 사용자에게 보여주는 것

 

 

 

 

13. 비기능 요구사항

  • 시스템 장비 구성, 성능, 인터페이스, 데이터, 테스트, 품질, 제약사항, 프로젝트 관리, 프로젝트 지원에 대한 내용
  • ex) 1년 365일, 하루 24시간 운용이 가능해야 한다 => 품질과 제약사항에 관한 요구사항임

 

 

 

 

17. 자료 흐름도 작성 효과

  • 사용자의 업무 및 요구 사항을 정확하게 파악 가능
  • 사용자와 분석가 사이의 의사소통읠 위한 공용어 역할
  • 사용자의 업무 및 요구사항을 쉽게 문서화
  • 자료 흐름에 중점을 두는 분석용 도구

 

 

 

 

20. 자료 사전(DD, Data Dictionary)

  • 자료 흐름도의 대상이 되는 모든 자료에 대한 기본 사항들을 구체적으로 정의
  • ( ) 안의 자료 항목은 생략할 수 있음
  • 자료 요소는 더 이상 분할되지 않는 자료 항목을 의미
  • 모호성 제거하며, 세부 구성 내력을 명세하는 역할

 

 

 

 

24. 소단위 명세서

  • 단계화된 DFD에서 최하위 처리의 입력 자료 흐름을 출력 자료 흐름으로 변환하는 과정을 명세화해 놓은 문서
  • 작성 도구 : 구조적 언어, 의사 결정표, 의사 결정도 => 의사코드는 해당하지 않음

 

 

 

 

29. 요구사항 협상

  • 요구사항이 서로 충돌하는 경우 적절히 해결하는 과정
  • ex) 두 명의 이해 관계자가 요구하는 요구사항이 서로 충돌되는 경우, 요구사항과 자원이 서로 충돌되는 경우, 기능 요구사항과 비기능 요구사항이 서로 충돌되는 경우

 

 

 

 

31. HIPO(Hierarchy Input Process Output)

  • 기능 중심의 도형 표현에 편리
  • 시스템의 분석 및 설계나 문서화할 때 사용되는 기법
  • 시스템 실행 과정인 입력, 처리, 출력의 기능을 나타냄

 

 

 

 

34. HIPO Chart

  • 가시적 도표(도식 목차) : 시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도
  • 총체적 도표(총괄도표, 개요 도표) : 입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표
  • 세부적 도표(상세 도표) : 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표

 

 

 

 

35, 36. UML의 관계(Relationships) 화살표 모양

  • 연관(Association) 관계 : →
  • 집합(Aggregation) 관계 : ―◇
  • 포함(Composition) 관계 : ―◆
  • 일반화(Generalization) 관계 : ―▷
  • 의존(Dependency) 관계 : ·····>
  • 실체화(Realization) 관계 : ·····▷

 

 

 

 

37. 추상화(Abstraction) => 소프트웨어 아키텍처

  • 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화 시켜 나가는 것
  • 과정 추상화 : 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
  • 데이터 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 데체하는 방법
  • 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법

 

 

 

 

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

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

 

 

 

 

41. 소프트웨어 설계 방식

  • 객체 지향 설계 : 객체지향 설계 원칙을 기반으로 하여 소프트웨어를 설계하는 방식
  • 데이터 흐름 설계 : 프로세스와 프로세스 간의 데이터 흐름에 중점을 두고 소프트웨어를 설계하는 방식
  • 상향식 설계 : 최하위 수준에서 각각의 모듈을 설계하고, 완성된 모듈을 결합해 가면서 설계하는 방식
  • 하향식 설계 : 제일 상위에 있는 main user function에서 시작하여 기능을 하위 기능들로 분할해 가면서 설계하는 방식

 

 

 

 

47. 아키텍처 패턴

  • MVC Pattern : 서브시스템을 3개의 부분으로 구조화한 패턴
  • Pipe-Filter Pattern : 한 모듈이 데이터 스트림을 입력받아 처리하면, 다음 모듈이 결과를 이어받아 처리하는 형식;
  • Peer-To-Peer Pattern : 피어를 하나의 컴포넌트로 간주하며, 각 피어는 서비스를 호출하는 클라이언트가 될 수도, 서비스를 제공하는 서버가 될 수도 있는 패턴
  • Broker Pattern : 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결해줌

 

 

 

 

50, 51, 54, 55. 객체지향의 주요 구성요소

  • Class : 하나 이상의 유사한 객체를 묶어 하나의 공통된 특성을 표현하는 요소 (같은 특성을 갖는 객체를 표현한 것)
  • Inheritance : 이미 정의된 상위 클래스의 메소드를 비롯한 모든 속성을 하위 클래스에게 재정의하지 않고서도 항상 이용 가능하도록 허용하는 성질
  • Instance : 클래스에 속한 각각의 객체
  • Method : 객체에 정의된 연산을 의미. 객체의 상태를 참조하거나 변경하는 수단이 됨
  • Message : 외부로부터 하나의 객체에 전달되는 메소드(행위)의 요구를 의미. 객체가 목적지, 연산할 내용, 인자를 함께 표시하여 다른 객체로 전송되는 메커니즘
  • Polymorphism : 하나의 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 나타내는 것

 

 

 

 

58. 객체지향 방법론

  • Coad와 Yourdon 기법 : E-R 다이어그램을 사용하여 객체의 행위를 모델링이라 하며, 객체 식별, 구조 식별, 주제 저으이, 속성과 인스턴스 연결 정의, 연산과 메세지 연결 정의 등의 과정으로 구성하는 기법
  • Rumbaugh 기법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법
  • Booch 기법 : 데이터 흐름도(DFD)를 사용해서 객체를 분해하고, 객체들 간의 인터페이스를 찾아 Ada 프로그램으로 변환시키는 기법

 

 

 

 

63. GoF의 디자인 패턴

  • 생성 패턴 : Abstract Factory, Builder, Factory Method, Prototype, Singleton
  • 구조 패턴 : Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
  • 행위 패턴 : Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor

 

 

 

 

 

728x90
728x90

 

 

 

1. 정의

  • 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미
  • 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드 등으로 구성
  • 문제 발생 시 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적
  • 한 패턴에 변형을 가하거나 특정 요구사항을 반영하면 유사한 형태의 다른 패턴으로 변화되는 특징이 있음
  • 1995년 GoF(Gang Of Four)라고 불리는 에릭 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존스(Ralph Johnson), 존 블리시디스(Hohn Vlissides)가 처음 구체화 및 체계화함
  • 아키텍처 패턴은 가이드라인 제시용, 디자인 패턴은 세부사항 정리용

 

 

 

 

2. GoF의 디자인 패턴

  • 가장 일반적인 사례에 적용 가능한 패턴들을 분류하여 정리하여 지금까지도 가장 많이 사용되는 디자인 패턴
  • GoF의 디자인 패턴은 유형에 따라 생성 패턴, 구조 패턴, 행위 패턴으로 구성

 

 

 

 

3. 디자인 패턴 사용의 장/단점

  • 범용적인 코딩 스타일 => 구조 파악 용이
  • 객체지향 설게 및 구현의 생산성을 높이는 데 적합
  • 재사용을 통해 개발 시간과 비용이 절약됨
  • 초기 투자 비용이 부담될 수 있음
  • 원활한 의사소통이 가능
  • 설계 변경 요청에 대한 유연한 대처가 가능
  • 다른 기반의 애플리케이션 개발에는 부적합 => 오직 객체지향만

 

 

 

 

4. 생성 패턴(Creational Pattern)

  • 생성과 관련된 패턴으로 총 5가지
  • 객체의 생성과 참조 과정을 캡슐화 하여 프로그램에 유연성을 더해줌
  • 종류 : 추상 팩토리(Abstract Factory), 빌더(Builder), 팩토리 메소드(Factory Method), 프로토타입(Prototype), 싱글톤(Singleton)
  • 추상 팩토리 : 서로 연관 · 의존하는 객체들의 그룹으로 생성하여 추상적으로 표현
  • 팩토리 메소드(가상 생성자, Vertual Constructor) : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴

 

 

 

 

5. 구조 패턴(Structural Pattern)

  • 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴으로 총 7가지
  • 구조가 복잡한 시스템을 개발하기 쉽게 도와줌
  • 종류 : 어뎁터(Adapter), 브리지(Bridge), 컴포지트(Composite), 데코레이터(Decorator), 퍼싸드(Facade), 플라이웨이트(Flyweight), 프록시(Proxy)
  • 브리지 : 구현부에서 추상층을 분리하여, 서로 독립적으로 확장할 수 있도록 구성한 패턴
  • 컴포지트 : 복합 객체와 단일 객체 구분 없이 다루고자 할 때 사용
  • 퍼싸드 : 복잡한 서브 클래스들을 피해 더 상위에 구상. Wrapper 객체 필요
  • 프록시 : 접근이 어려운 객체와 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴

 

 

 

 

6. 행위 패턴(Behavioral Pattern)

  • 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴으로 총 11가지
  • 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 도와줌
  • 종류 : 책임 연쇄(Chain of Responsibility), 커맨드(Command), 인터프리터(Interpreter), 반복자(Iterator), 중재자(Mediator), 메멘토(Memento), 옵서버(Observer), 상태(State), 전략(Strategy), 템플릿 메소드(Template Method), 방문자(Visitor)
  • 반복자 : 내부 표현 방법의 노출 없이 순차적인 접근이 가능
  • 메멘토 : 특정 시점에서의 객체 내부 상태를 객체화하여 요청에 따라 해당 시점의 상태로 되돌릴 수 있는 기능을 제공하는 패턴
  • 옵서버 : 객체의 사태가 변화하면 객체에 상속되어 있는 다른 객체들에게 상태를 전달하는 패턴
  • 전략 : 동일 계열의 알고리즘을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴(클라이언트 영향 없이 알고리즘 변경 가능)

 

 

 

 

 

728x90
728x90

 

 

 

1. 객체지향 분석(OOA: Object Oriented Analysis)

  • 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업
  • 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석
  • 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화할 수 있게 함
  • 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체 지향 분석의 주요 목적

 

 

 

 

2. 객체지향 분석의 방법론

  • Rumbaugh(럼바우) 방법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나눠 수행하는 방법 (가장 일반적인 방법)
  • Booch(부치) 방법 : 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법. 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의
  • Jacobson(제이콥스) 방법 : 유스케이스를 강조하여 사용하는 분석 방법
  • Coad와 Yourdon 방법 : ER 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메세지 연결 정의 등의 과정으로 구성하는 기법
  • Wirfs-Brock 방법 : 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법

 

 

 

 

3. 럼바우(Rumbaugh)의 분석 기법

  • 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
  • 객체 모델링 기법(OMT, Object-Modling Technique)이라고도 함
  • 분석 활동 순서 : 객체 모델링 → 동적 모델링 → 기능 모델링

 

 

 

 

4. 객체 모델링(Object Modeling)

  • 정보 모델링이라고도 함
  • 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것

 

 

 

 

5. 동적 모델링(Dynamic Modeling)

  • 상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링

 

 

 

 

6. 기능 모델링(Functional Modeling)

  • 자료 흐름도(DFD, Data Flow Diagram)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링

 

 

 

 

7. 객체지향 설계 원칙 (= SOLID 원칙)

  • 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙
  • 종류 : 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙

 

 

 

 

8. 단일 책임 원칙(SRP, Single Responsibility Principle)

  • 객체는 단 하나의 책임만 가져야 한다는 원칙
  • 응집도는 높고, 결합도는 낮게 설계하는 것을 의미

 

 

 

 

9. 개방-폐쇄 원칙(OCP, Open-Closed Principle)

  • 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
  • 공통 인터페이스를 하나의 인터페이스로 묶어 캡슐화하는 방법이 대표적

 

 

 

 

10. 리스코프 치환 원칙(LSP, Liskov Substitution Principle)

  • 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙
  • 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야함

 

 

 

 

11. 인터페이스 분리 원칙(ISP, Interface Segregation Principle)

  • 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙
  • 인터페이스가 갖는 하나의 책임임

 

 

 

 

12. 의존 역전 원칙(DIP, Dependency Inversion Principle)

  • 각 객체들 간의 의존 관계가 성립될 때, 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
  • 일반적으로 인터페이스를 활용하면 이 원칙은 준수됨

 

 

 

 

 

728x90

+ Recent posts