소프트웨어 생명 주기

소프트웨어 생명 주기

Software가 개발되어 폐기 될 때까지, 개발과 유지보수에 대한 전략(체계성, 이론)
전과정 문서화: 타당성 검토 > 계획 > 요구(위험성)분석 > 설계 > 구현(개발) > 시험 > 유지보수

Software life Cycle
유형 내용
폭포수 모형(Waterfall Model) 각 단계를 확실히 마무리하고 다음 단계를 진행
프로토타입 모형(Prototype Model) 시제품(Prototype)을 만들어 최종 결과물 예측
시제품 제작과정에서 별도의 개발언어가 사용될 수 있다.(오버헤드)
시제품 제작목적은 가능성, 고객 요구사항 점검(수정, 추가)이 있다.
나선형 모형(Spiral Model) 프로토타입을 지속적으로 발전
위험 관리(Risk Management)측면에서 바라봄
여러번의 개발 주기를 거침
요구사항이나 아키텍처의 이해가 어렵거나, 중심이 되는 기술에 문제가 있는 경우 진행
애자일 모형(Agile Model) Agile: 날렵한, 기민한.
개발주기에 고객의 요구사항을 최우선으로 처리
스크럼(scrum, 럭비) - 럭비의 셋업. 서로 밀치락달치락하는 사람들
  1. 백로그(Product Backlog): 요구사항(기능) 목록 + 우선순위
  2. 팀(스크럼) 단위, 원할한 의사소통
  3. 스프린트(Sprint, 단거리 전력질주, 1~4주): 담당자 배정(되도록 자발적)
    - 매일 스크럼 회의(Daily Scrum Meeting): 매일 15분, 소멸차트(Burn-down Chart) 작성
    - 검토 회의(Sprint Review): 주 1시간, 책임자(PO) 및 사용자 앞에서 테스팅
    - 회고(Sprint Retrospective): 스프린트 단위, 보완점 확인
스크럼
이해관계자 역할
제품 책임자(PO; Product Owner) 이해관계자의 의견을 종합하여 백로그 작성
스크럼 마스터(SM; Scrum Master) 팀장, 회의 주관
개발팀원(DT; Development Team) 팀당 약 7~8명
익스트림 프로그래밍(eXtreme Programming, XP)
  • 문서보다 코드(결과)를 우선, 고객의 요구가 우선
  • 핵심가치(5가지): 의사소통(Communication), 단순성(Simplicity), 용기(Courage), 존중(Respect), 피드백(Feedback)
  • 사용자 스토리(User Story): 고객 사용 시나리오 + 상황별 시나리오(Test Case)
  • 스파이크(Spike): 별도로 만드는 간단한 프로그램
  • 이터레이션(Iteration): 릴리즈를 세분화한 단위(개당 1~3주)
  • 인수 테스트(Acceptance Test): 릴리즈 단위로 고객이 직접 수행
  • 소규모 릴리즈(Small Release): 고객의 반응을 기능별 확인
  • 계속적인 통합(Continuous Intergration): 모듈단위로 나누어 개발된 코드들을 지속적 병합
  • 디자인 개선(Design improvement), 리펙토링(Refactoring): 기능 변경 없는 재구성

애자일 선언(Agile Monifesto) - 2001.
핵심가치(4가지)
  1. 프로세스와 도구보다는 개인과 상호작용에 더 가치를 둔다.
  2. 방대한 문서보다는 실행되는 SW에 더 가치를 둔다.
  3. 계약 협상보다는 고객과 협업에 더 가치를 둔다.
  4. 계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둔다.
애자일 개발 실행 지침(12가지)
  1. 유용한 소프트웨어를 빠르고, 지속적으로 제공하여 고객을 만족시킨다.
  2. 개발 막바지라도 요구사항 변경을 적극 수용한다.
  3. 몇 개월이 아닌 몇 주 다위로 실행되는 소프트웨어를 제공한다.
  4. 고객과 개발자가 프로젝트 기간에 함께 일한다.
  5. 개발에 대한 참여 의지가 확실한 사람들로 팀을 구성하고, 필요한 개발 환경과 지원을 제공하여, 일을 잘 끝낼 수 있도록 신뢰한다.
  6. 같은 사무실에서 얼굴을 맞대고 의견을 나눈다.
  7. 개발의 진척도를 확인하는 1차 기준은 작동하는 소프트웨어이다.
  8. 지속 가능한 개발을 장려하고 일정한 속도로 개발을 진행한다.
  9. 기술적 우수성과 좋은 설계에 지속적인 관심을 기울이면 민첩성이 향상된다.
  10. 단순화를 추구한다.
  11. 최상의 아키텍처, 명확한 요구사항, 최상의 설계는 자기 스스로 일을 주도하는 조직적인 팀으로부터 나온다.
  12. 더 효과적인 팀이 될 수 있는 방안을 정기적으로 깊이 고민하고 그에 따라 팀의 행동을 조정한다.

현행 시스템 파악

시스템 구성과 관련하여, 제약조건을 미리 파악해 놓아야 합니다.

범주별 고려할 사항
범주 주요사항
시스템 구성 개괄, 조직별 주 업무 파악
시스템 기능 구성 세부, 조직별 세부 업무 단위의 활동(기능) 파악
인터페이스 구성 송수신 데이터의 종류, 형식(프로토콜), 내용, 프로토콜, 주기 등 파악
아키텍처 구성 계층별 구성과 상호 참조 도식화
소프트웨어 구성 사용중인 소프트웨어의 제품명, 용도, 라이선스 등
하드웨어 구성 사용중인 하드웨어의 제품명, 스펙, 수량 등
네트워크 구성 서버의 위치, 연결방식

기술 환경 파악

개발 기술 환경 고려 사항
항목 설명
운영체제
OS, Operating System
고려사항: 가용성, 성능, 기술지원, 주변기기, 비용(TCO)*
Windows, UNIX, Linux, Mac OS, iOS, Android
데이터베이스
DBMS, DataBase Management System
가용성, 성능, 기술지원, 호환성, 비용(TCO)
Oracle, IBM DB2, Microsoft SQL Server, MySQL, SQLite, MongoDB, Redis
웹 어플리케이션
WAS; Web Application Server
가용성, 성능, 기술지원, 비용(TCO)
Tomcat, GlassFish, JBoss, Jetty, JEUS, Resin, WebLogic, WebSphere

요구사항 정의

고객(의뢰자, 사용자)가 본인이 원하는 바를 명확하게 모르거나, 정확한 용어(전문)로 기술하지 못 할 가능성이 있기 때문에 완성된 소프트웨어를 기준으로 어떠한 작업이 필요한지 명확히 하는 작업

요구사항 유형
유형 내용
기능 요구사항
Functional requirements
고객이 제공받고자 하는 주요 기능에 대한 사항
비기능 요구사항
Non-functional requirements
품질 관련 사항: 장비 구성, 처리속도, 인터페이스, 데이터 보안, 제도권 요구
사용자 요구사항
User requirements
사용자의 친숙도, 눈높이
시스템 요구사항
System requirements
개발자 관점

명세서 발행

도출(Elicitation) > 분석(Analysis) > 명세(Specification) > 확인(Validation)

요구사항 분석

구체적인 명세를 작성하여(문서화), 향후 유지보수에 활용한다.

분석기법
기법명 설명
DFD
Data-flow diagram
자료 흐름도
*버블(Bubble)차트
객체간 데이터 이동을 표시
자료흐름도 예시 "478px-Data-flow-diagram-example.svg.png", AutumnSnow, wikipedia.org, CC BY-SA 3.0
자료 흐름도 항목, ??표 안에 그림 넣을 것
기호 표기
프로세스(Process)
자료 흐름(Data Flow) 화살표
자료 저장소(data Store) 위/아래 경계
단말(Terminator) 사각
DD
Data Dictionary
자료 사전
메타 데이터: 데이터의 내용 설명
자료 사전 세부항목
기호 의미
= ~으로 이루어져 있다(is composed of)
+ 그리고(and)
( ) 생략 가능(optional)
[A | B] 또는(or)
{} 반복
  • \(\{A\}_n\): A를 최소 n회 반복
  • \(\{A\}^n\): A를 최대 n회 반복
  • \(\{A\}_n^m\): A를 최소 n회 최대 m회 반복
* * 주석(Comment)
UML
Unified Modeling Language
  • 사물(Things)
    • 구조적(Structural) 사물: Class, Use Case, Component, Node
    • 행동(Behavioral) 사물: Interaction, State Machine
    • 그룹(Grouping) 사물: Package
    • 주해(Annotation, 주석) 사물: Note(부가 설명)
  • 관계(Relationships)
    • 연관(Association) 관계: 서로 관련이 있음(예: 교사와 학생)
    • 집합(Aggregation) 관계: 묶여 있음(예: 1반과 1반학생)
    • 포함(Composition) 관계: 포함 되어 있음(예: 컴퓨터와 CPU)
    • 일반화(Generalization) 관계: 일반적 표현(예: 커피와 아메리카노)
    • 의존(Dependency) 관계: 참고 사항(예: 책과 저자)
    • 실체화(Realization) 관계: 가상 인터페이스 구현(예: 가상과 실제)
  • 다이어그램(Diagram)
    • 구조적(Structural) 다이어그램
      • 클래스(Class) 다이어그램: 클래스간 관계를 도식화
      • 객체(Object) 다이어그램: 사물(객체)간의 관계 도식화. 럼바우(Rumbaugh)분석
      • 컴포넌트(Component) 다이어그램: 컴포넌트간 인터페이스 도식화
      • 배치(Deployment) 다이어그램: 물리적 요소의 위치 표현
      • 복합체 구조(Coposite Structure) 다이어그램: 클래스나 컴포넌트의 내부 구조 표현
      • 패키지(Package) 다이어그램: 그룹회된 패키지들간의 관계를 표현
    • 행위(Behavioral) 다이어그램 ← 동적(시간)
      • 유스케이스(Use Case Diagram) 다이어그램: 사용자(Actor)와 사례(Use Case)로 구성
      • 순차(Sequence) 다이어그램: 객체간 주고받는 메시지를 순서대로 표시
      • 커뮤니케이션(Communication) 다이어그램: 순차 다이어그램 + 객체간 연관성
      • 상태(State) 다이어그램: 이벤트(event)에 의한 모드(mode)변환 시나리오를 제공, 럼바우(Rumbaugh)분석
      • 활동(Activity) 다이어그램: 로직 조건에 관한 처리 흐름을 보여줌. ??순서도
      • 상호작용 개요(Interaction Overview) 다이어그램: 상호작용 다이어그램 간의 흐름 표시
      • 타이밍(Timing) 다이어그램: 객체 상태 변화와 시간 제약을 명시적으로 표현
※ 추가정보
  • 스테레오 타입 객체를 표현할 때 길러멧<<  >>을 사용
  • 개발언어에 구애받지 않고, 비개발자도 (어느정도) 알아 볼 수 있도록 기호와 도형으로 표현
다이어그램 상세
다이어그램 설명
Use Case
  • 사용자 관점(view)에서 상황별 시나리오(use case)를 제공
  • 구성 요소: System/System Scope, Actor(나, 외부, system:타시스템), Use Case, Relationships
  • 기존의 use case와 관계: 포함(include) / 확장(extend:특별 조건) / 연관(??) / 일반화(??)
Class Diagram
  • 객체(class)의 속성, 함수 등의 정보를 표현
  • 구성 요소: class, relationship, operation(함수, 인터페이스), constraints(제약 조건)
  • 접근제어자: public(+), private(-), protected(#), package(~)
Sequence Diagram
  • 객체간 주고받는 메시지를 시간(세로) 순서대로 표시
  • 구성 요소: actor, object, lifeline, active box, message, replay(return message), loop

기타 용어: Mini-Spec.(소단위 명세서), ERD(계체 관계도) STD(상태 전이도), 제어 명세서

분석 자동화 도구, CASE

분석도구
도구명 특징
SADT(Structured Analysis and Design Technique) SoftTech분석 도구
SREM(Software Requirements Engineering Methodolgy) TRW사, RSL(Requirement Statement Language), REVS(Requirement Engineering and Validation System)
PSL/PSA 미시간 대학, PSL(Problem Statement Language), PSA(Problem Statement Analyzer)
TAGS(Technology for Automated Generation of Systems) IORL(요구사항 명세 언어)

HIPO(Hierarchy Input Process Output)

HIPO Chart의 종류
종류 영문 내용
가시적 도표 Visual Table of Contents 도식 목차
총체적 도표 Overview Diagram 총괄 도표, 개요 도표, (입력, 처리, 출력)
세부적 도표 Detail Diagram 상세 도표

화면 설계

사용자 인터페이스

UI(User Interface) 특징 Interface 종류
모바일 입력
명령 동작
Tap 누르기(터치)
Double Tap 두번 누르기(터치)
Drag 누른 채 이동(방향감지)
Pan(Panning) 누른 채 이동(경로감지)
Press 오래 누르기
Flick 빠른 스크롤(수평, 수직)
Pinch 두 손가락 확대/축소
도구(방법)

UI요소

UI요소
요소명 설명
Button 눌렸을 때, 특정 기능을 수행하기위한 그래픽 인터페이스
Check Box 1개 이상의 선택(on/off)가 가능한 상자
Radio Button 2개 이상의 선택중 하나만 선택 가능한 버튼
Text Box 사용자의 타이핑 정보를 입력할 수 있는 상자
Combo Box 선택가능한 목록을 드롭다운으로 제공하고, 목록을 열어 선택이 가능
List Box 선택 가능한 목록을 펼쳐서 보여줌
UI 시나리오 감성 공학

품질 기준

ISO/IEC 9126
항목 분야 내용
기능성(Functionality) 기초 적절성/적합성(Suitability), 정밀성/정확성(Accuracy), 상호 운용성(Interoperability), 보안성(Security), 준수성(Compliance, 표준 준수)
신뢰성(Reliability) 고장 성숙성(Maturity), 고장 허용성(Fault Tolerance, 결함 극복과 정상 수행 정도), 회복성(Recoverability, 데이터 복구)
사용성(Userbility) 고객 이해성(Understandability, 사용자가 볼 때~), 학습성(Learnability), 운용성(Operability, 사용자가~), 친밀성(Attractiveness, 재사용 의지)
효율성(Efficiency) 성능 시간 효율성(Time Behaviour), 자원 효율성(Resource Behaviour)
유지 보수성(Maintainability) 관리 분석성(Analyzability, 결함 원인을), 변경성(Changeability, 수정 가능 정도), 안정성(Stability, 오류 파급 최소화), 시험성(Testability)
이식성(Portability) 호환 적용성(Adaptability, 다른 분야에), 설치성(Installability, 다른 환경에), 대체성(Replaceability, 타SW 이식), 공존성(Co-existence, 자원공유)
ISO/IEC 25010
항목 내용
기능 적합성 기능 완전성, 기능 정확성, 기능 적절성
성능 효율성 시간 효율성, 자원 효율성, 사양
호환성 공존성, 상호운영성
사용성 적절 인지정도, 학습성, 조작성, 사용자 오류 방지, UI 미학, 접근성
신뢰성 성숙성, 사용가능성, 결함 허용성, 복구성
보안성 기밀성, 무결성, 부인방지, 책임추적성, 인증성
유지 보수성 모듈성, 재사용성, 분석성, 변경성, 시험성
이식성 적응성, 설치성, 대체성

애플리케이션 설계

아키텍처 설계

상위 설계 vs 하위 설계
상위 설계 하위 설계
별칭 아키텍처 설계, 예비 설계 모듈 설계, 상세 설계
설계 대상 시스템의 전체적인 구조 시스템의 내부 구조 및 행위
세부 목록 구조, DB, 인터페이스(정의, 설계) 컴포넌트, 자료 구조, 알고리즘
SW 품질 속성 고려항목
항목 세부
시스템 측면 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성, 테스트 용이성, 배치성, 안정성
비지니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표시장, 공개 일정, 기존 시스템과 통합
아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성, 적응성, 일치성, 대체성
SW 아키텍처 설계 과정
  1. 설계 목표 설정
  2. 시스템 타입 결정: System + Sub System Type 결정, 아키텍처의 패턴 결정
    • System Type: 대화형(쇼핑몰), 이벤트 중심(비상벨), 변환형(컴파일러, 라우터), 객체 영속형(관리SW)
  3. 아키텍처의 패턴 적용(지문: 스타일 적용 및 커스터마이즈)
  4. 서브 시스템 구체화: 상호작용, 인터페이스 정의
    • 협약(Contract)에 의한 설계
      • 선행 조건(Precondition): 오퍼레이션 호출 전, 만족 조건
      • 불변 조건(Invariant): 오퍼레이션 수행 중, 항상 만족 조건
      • 결과 조건(Postcondition): 오퍼레이션 수행 후, 만족 조건
  5. 검토

패턴

Pattern의 종류
패턴명 설명
Layers Pattern subsystem이 상하 계층 구조를 이룸(예:OSI 7계층)
Client-Server Pattern 하나의 Sever에 다수의 Client를 처리, Server는 항상 대기
Pipe-Filter Pattern Data stream의 각 단계를 Filter Component로 Capsule화하여 이어붙임
MVC(Model-View-Controller) Pattern Model(핵심 기능 및 데이터), View(보여지는 정보, 출력 처리기), Controller(입력 처리기)
Master-Slave Pattern Fault Tolerance System(장애 허용 시스템; 일부 결함에도 전체기능 완수 도움), 병렬 시스템
Broker Pattern 분산 환경에서 각 서비스에 대한 컴포넌트 선택 수행
Peer-To-Pear Pattern Multi Threading환경에서 각자 독립적으로 수행
Event-Bus Pattern Source(이벤트 생성), Listener(수행), Channel(통로), Bus(채널 관리)
Blackboard Pattern 공유 데이터, 컴포넌트 접근을 관리
Interpreter Pattern 특정 언어로 작성된 코드를 해석하는 컴포넌트 설계

객체지향(Objecxt-Oriented)

SW로직을 실생활에서 물체를 인식하는 방식으로 작성하여(대상화) 제작과 관리의 이점을 갖는 기법.

객체지향 용어
용어 설명
Object(객체) 하나의 모듈
구성: 식별자(이름), 데이터(Attribute, Variable, 상태), 함수(Method, Service, Operation, function)
message: 어떤 행위를 지시하는 명령
Class 각각의 객체를 정의한 구문. 하나 이상 유사한 객체가 묶일 수 있음.
Instance: 생성된 class. 같은 class에 속한 각각의 객체
Encapsulation(캡슐화) 보안 또는 단순화의 목적으로 데이터와 함수를 묶는 행위. Interface만 노출(=일부만 노출)
Inheritance(상속) 객체를 구현할 때, 부모의 특성을 물려받아 좀 더 간편하고 조직적으로 구성하는 행위
Polymorphism(다형성) 상속으로 이루어진 구조체에서 임의의 동작을 수행함에 있어 높은 자유도를 부과하는 기법
Relationship(연관성) 두 개 이상의 객체가 참조하는 관계
연관성 종류
종류 의미
is member of Association(연관화)
is instance of Classification(분류화)
is part of Aggregation(집단화)
is a Generalization(일반화)
spacialization(상세화)

객체지향 분석(OOA; Object Oriented Analysis)

SOLID원칙
원칙 설명
S SRP Single Responsibility Principle(단일 책임 원칙): 한 가지 목표(높은 응집, 낮은 결합)
O OCP Open Closed Principle(개방 폐쇄 원칙): 개방(기능 추가에 자유롭다), 폐쇄(변경에 보수적)
L LSP Liskov Substitution Principle(리스코프 치환 원칙): 자식 클래스가 부모 클래스의 기능을 무시/재정의 하는 것을 우려
I ISP Interface Segregation Principle(인터페이스 분리 원칙): 사용하지 않는 인터페이스에 의존X, 1목적 1인터페이스
D DIP Dependency Inversion Principle(의존 역전 원칙): 추상성이 높은 클래스와 의존관계를 맺는다

결합도 vs 응집도

모듈의 재사용성을 늘리려면,

결합도(Coupling)
낮음
(좋음)



(나쁨)
높음
Data Coupling 자료 결합도 모듈 간 인터페이스가 기본자료로만 구성될 때
Stamp Coupling 스탬프(검인) 결합도 배열, 레코드 등으로 구성 될 때
Control Coupling 제어 결합도 제어신호(약속된 코드)를 사용할 때
External Coupling 외부 결합도 다른 모듈의 자료를 참조해야 할 때
Common Coupling 공통(공유) 결합도 데이터 저장위치가 강제될 때(공유장소)
Content Coupling 내용 결합도 직접 가지러 가야 할 때(어디에, 무엇이, 어떻게를 다 알아야...)
응집도(Cohesion)
낮음
(나쁨)



(좋음)
높음
Coincidental Cohesion 우연적 응집도 각 구성요소의 연관성이 거의 없다시피
Logical Cohension 논리적 응집도 유사한 성격의 요소들이 관찰됨
Temporal Cohension 시간적 응집도 특정 시간에 처리되는 몇개의 기능들이 모임
Procedual Cohension 절차적 응집도 다수 관련 기능을 가지고, 순차적으로 수행
Communication Cohension 교환(통신)적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행
Sequential Cohension 순차적 응집도 하나의 입력으로 나온 출력 데이터가 다음 입력으로 사용
Functional Cohension 기능적 응집도 단일 문제와 연관되어 수행될 경우의 응집도

Fan-In, Fan-Out

N-S(Nossi-Schneidermon) chart

NS chart 예시 blex.me/@mildsalmon/필기-공부-소프트웨어-공학#1-모델링-언어

SW 재사용

공통모듈: 범용으로 사용하기 위해 제작하는 모듈 재사용(Reuse): 이미 개발한 모듈의 활용

컴포넌트: 인터페이스로만 접근할 수 있는 단위

코드

코드는 식별, 분류, 배열, 표준, 간소 기능을 만족하고, 어느정도 체계를 권장(무작위x)

코드의 종류
Sequence Code 순차코드 1, 2, 3, 4...
Block Code 블럭코드 1001~1099: 보병, 1700~1799: 통신병
Decimal code 10진 코드 1000: SW설계(각 자리수가 각각의 분류를 의미)
Group Classification Code 그룹 분류 코드 본사-총무부-인사계
Mnemonic Code 연상 코드 TV-40: 40인치 TV
Significant Digit Code 표의 숫자 코드 120-720-1500: 120x720x1500의 강판(물리적 수치)
Combined Code 합성코드 KR-123: 한국국적기 123

패턴

패턴의 종류
범주 패턴 명 내용
Creational Pattern
생성패턴
Abstract Factory ??: 인터페이스를 통해 서로 연관 의존하는 객체 그룹을 생성
Builder 동일한 객체 생성에도 서로 다른 결과를 만들어 낼 수 있도록
Factory Method =가상 생성자(Virtual Constructor) 패턴, 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브 클래스가 결정하도록 하는 것
Prototype Prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조
Singleton 인스턴스가 하나임을 보장하여 불필요한 메모리 낭비를 최소화, 동시참조X
Structural Pattern
구조 패턴
Adapter 호환성이 없는 어댑터를 호환성을 부여하기 위한 패턴
Bridge 기능과 구현의 클래스로 구현하여 각각 독립적으로 확장하기 위한 패턴
Composite 단일 객체와 복합 객체의 구분 없이 사용하고자 할 때
Decorator 임의 객체에 부가 기능을 추가하기 위해
Facade(퍼싸드) sub class를 통합하는 객체
Flyweight 인스턴스 필요시 생성하지 않고, 공유 사용
Proxy 접근이 어려운 객체 사이에 인터페이스 역할
Behavioral Pattern
행위 패턴
Chain of Responsibility 요청을 처리할 수 있는 여러개의 객체를 묶어 해결될때까지 돌려가며 사용
Command 요청을 로그화하여 처리
Interpreter SQL, 통신 프로토콜 같은 명령어 해석기
Iterator 접근이 잦은 개체를 반복적으로 접근하기 위한 구조
Mediator 중재자: 객체간의 상호작용(통제, 지시)을 캡슐화하여 전달하는 구조
Memento 특정 상태를 객체화하여 되돌리기에 적합한 구조
Observer 특정 객체의 변화를 감지하여 다른 객체에 전달하는 구조
State 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때, 상태를 캡슐화
Strategy 동일한 계열의 알고리즘을 개별적으로 캡슐화하여 서로 교환
Template Method 상위 클래스에서 Template(Algorithm)을 정의하고, 서브클래스에서 이외의 내용 정의
Visitor 처리기능을 별도의 클래스로 분리하여, 각 객체가 해당처리를 위해 특정 객체에 방문하는 구조

인터페이스 분석

요구사항 검증

  1. Requirements Verification(검증)
    • 계획 > 검토 및 수정 > 베이스라인 설정
  2. 계획
    • 기준 및 방법 제시
    • 참여자 모집
    • 체크리스트 작성
    • 관련 자료 수집
    • 일정 수립
  3. 검토 및 수정
    • 방법: Peer Review(회의), Walk Through(자료배포, 회의 짧게), Inspection(전문검토 그룹)
    • Prototyping, Test Cast(TC)설계, CASE(Computer Aided Software Engineering) 도구 활용
    • 검증 항목: Completeness(완전성), Consistency(일관성), Unambiguity(명확성), Functionality(기능성), Verifiability(검증 가능성), Traceability(추적 가능성), Easily Changeable(변경 용이성)
  4. 분류
    • 시스템간 연계: DB Link, API/Open API, EAI(Enterprise Application Intergration; 송수신 통제 시스템)이용, Socket, Web Service
    • 연계 메커니즘: 송신 시스템(파일로 전송), 수신 시스템(파일 처리), 연계 서버(모니터링)
    • 통신 유형: 단방향/양방향, 동기/비동기
    • 처리 유형: 실시간/지연 처리, 배치(대량)

미들웨어