소프트웨어 생명주기(Software Life Cycle)
1. 폭포수 모형(Waterfall Model)
가장 오래된 전통적인 모형, 고전적 생명 주기모형이라고도 함
성공 사례가 많고 두개 이상의 과정이 병행되지 않는다
2. 프로토타입 모형(Prototype Model)
요구사항에 맞게 견본(시제품)을 만들어 최종 결과 예측
폭포수 모형 단점 보완
3. 나선형 모령(Spiral Model)
폭포수 모형 + 프포토타입, 점진적 모형
점진적으로 개발 과정이 반복, 누락되거나 요구사항 첨가 가능
4. 애자일 모형(Agile Model)
요구사항 변화에 유연하게 대응
소규모 프로젝트, 급변하는 요구사항에 적합
* 애자일 개발 핵심가치
1. 프로세스와 도구보다 개인과 상호작용에 더 가치를 둔다
2. 문서보다 실행되는 SW에 더 가치를 둔다
3. 계약 협상보다 협업에 더 가치를 둔다
4. 계획을 따르기보다 변화에 반응하는 것에 더 가치를 둔다
스크럼(Scrum)
제품 책임자(PO : project Owner)
백로그를 작성하고 우선순위를 지정
스크럼 마스터(SM : Scrum master)
가이드 역할, 일일 스크럼 회의 주관
개발팀(DT : Development Team)
제품 개발을 위해 참여하는 모두를 지칭
스크럼 개발 프로세스
- 제품 백로그 : 요구사항 우선순위에 따라 나열, 릴리즈 계획 수립
- 스프린트 계획회의 : 단기 일정 수립
- 스프린트 : 실제 개발 과정 (약 2~4주)
- 일일 스크럼 회의 : 스크럼 마스터 주관, 소멸 차트 표시
- 스프린트 검토 회의
- 스프린트 회고
XP(eXtream Programming)
XP : 수시로 발생하는 요구사항에 유연하게 대응, 릴리즈 기간을 짧게 반복해서 가시성을 높임
5가지 핵심가치
1. 의사소통(Comunication)
2. 단순성(Simplicity)
3. 용기(Courage)
4. 존중(Respect)
5. 피드백(Feedback)
주요 실천 방법
Pair Programming - 개발 책임 공분 분배
Collective Ownership - 개발 코드에 대한 권한 책임 공동 소유
Test-Driven Development - 테스 케이스 먼저 작성, 자동화된 테스팅 구조
Whole Team - 모든 구성원들 책임 의식
Continuous intergration - 지속적 통합
Design Improvement - 프로그램 기능 변경없이 단순화, 유연성 강화
Small Releases - 릴리즈 기간 짧게 반복
요구사항
기능 요구사항 - 시스템이 무엇을 하는지, 어떤 기능을 하는지에 대한 사항
비기능 요구사항
- 장비 구성
- 성능
- 인터페이스
- 데이터
- 테스트
- 보안
- 품질
- 제약사항
- 프로젝트 관리
- 프로젝트 지원
사용자 요구사항 - 사용자 관점
시스템 요구사항 - 개발자 관점
요구사항 개발 프로세스
도출(Elicitation) - SDLC동안 지속적으로 반복(ex>브레인스토밍, 프로토타이핑, 유스케이스)
분석(Analysis) - 타당성 조사(ex>자료 흐름도(DFD), 자료 사전(DD))
명세(Specification) - 정형 명세 기법, 비정형 명세 기법
확인(Validation)
요구사항 분석
구조적 분석 기법 - 하향식
자료 흐름도 (DFD)
프로세스 - 자료를 변환시키는 시스템의 한 부분, 원이나 둥근 사각형으로 표기
자료 흐름 - 자료 이동이나 연관관계, 화살표 위 자료 이름 기입
자료 저장소 - 도형 안에 자료 저장소 이름 기입
단말 - 시스템과 교신하는 외부 개체, 도형 안에 이름 기입
자료 사전
= 자료의 정의
+ 자료의 연결
( ) 자료의 생략
[ | ] 자료의 선택
{ } 자료의 반복
* * 자료의 설명
요구사항 분석 CASE와 HIPO
SADT - 구조적 요구 분석을 하기 위한 블록 다이어그램
SREM(= RSL/REVS) - 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 하기 위함
TAGS - 개발 주기 전과정에 이용하는 통합 자동화 도구
HIPO - 하향식 소프트웨어 개발을 위한 문서화 도구
- 가시적 도표 : 전체적인 흐름
- 총체적 도표 : 프로그램 구성하는 기능 전반적인 정보 제공
- 세부적 도표 : 기본 요소들을 상세히 기술
UML(Undified Modeling Language)
UML - 시스템 개발자와 고객의 의사소통이 원활하게 이뤄지도록 표준화한 객체지향 모델링 언어
구성요소
사물 - 구조, 행동, 그룹, 주해
관계
- 연관(Association)
- 집합(Aggregation)
- 포함(Composition)
- 일반화(Generlization)
- 의존(Dependency)
- 실체화(Realization)
다이어그램
- 구조적 다이어그램
- 클래스
- 객체
- 컴포넌트
- 배치
- 복합체 구조
- 패키지
- 행위 다이어그램
- 유스케이스
- 순차
- 커뮤니케이션
- 활동
- 상호작용
- 타이밍
주요 UML 다이어그램
유스케이스 다이어그램 구성요소
- 시스템/ 시스템 범위
- 액터
- 유스케이스
- 관계
클래스 다이어그램 구성요소
- 클래스
- 제약조건
- 관계
순차 다이어그램 구성요소
- 액터
- 객체
- 생명선
- 실행상자
- 메시지
사용자 인터페이스
CLI - 텍스트 형태
GUI - 아이콘이나 메뉴를 마우스로 선택
NUI - 말이나 행동으로 기기 조작
VUI - 음성으로 기기 조작
OUI - 모든 사물들과 상호작용
사용자 인터페이스 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계도구
와이어프레임 - 초기에 제작, 뼈대 설계
목업 - 와이어프레임보다 좀 더 실제화면과 유사하게 정적인 형태
스토리 보드 - 와이어 프레임 + 설명, 페이지 이동 흐름
프로토타입 - 실제 구현된것처럼 동적인 형태
유스케이스 - 요구사항 내용
품질 요구사항
ISO/IEC 9126 - 품질 특성과 평가
- 기능성
- 신뢰성
- 사용성
- 효율성
- 유지 보수성
- 이식성
ISO/IEC 25010
- + 보안성
- 호환성
소프트웨어 아키텍처
소프트웨어 아키텍처 설계
| 상위 설계 | 하위 설계 | |
| 별칭 | 아키텍처 설계, 예비 설계 | 모듈 설계, 상세 설계 |
| 설계 대상 | 전체적인 구조 | 내부구조 및 행위 |
| 세부 목록 | 구조, DB, 인터페이스 | 컴포넌트, 자료 구조, 알고리즘 |
소프트웨어 아키텍처 기본원리
모듈화 - 재사용성
추상화
- 과정 추상화
- 데이터 추상화
- 제어 추상화
단계적 분해 - Niklaus Wirth 제안, 하향식 설계 전략
정보 은닉 - 필요한 정보만 인터페이스를 통해 송수신, 수정&시험&유지보수 용이
아키텍처 패턴
레이어 패턴 - 서로 마주보는 두 개의 계층 사이에서만 상호작용
클라이언트-서버 패턴 - 하나의 서버 다수의 클라이언트 컴포넌트
파이프 필터 패턴 - 데이터 스트림 활용, 재사용성, 확장 용이
MVC 패턴
객체지향
클래스 - 데이터를 추상화
캡슐화 - 세부 내용 은폐, 재사용 용이
상속
다형성
객체지향 분석 및 설계
객체지향 분석 방법론
- Rumbaugh(럼바우) 방법 : 객체모델, 동적모델, 기능모델
- Booch(부치) 방법 : 미시적, 거시적
- jacobson 방법 : use case 강조
- Coad와 Yourdon 방법 : E-R 다이어그램
- Wirfs-Brocks 방법 : 고객 명세서 평가해서 설계 작업까지 연속적
객체지향 설계 원칙
- 단일 책임 원칙(SRP, Single Responsibility Principle) : 응집도 높고, 결합도 낮게
- 개방-폐쇄 원칙(OCP, Open-Closed principle) : 캡슐화
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle) : 자식 클래스는 부모 클래스가 가능한 행위는 모두 수행, 확장만 한다
- 인터페이스 분리 원칙(ISP, Interface Sergregation Principle) : 사용하지 않는 인터페이스와 의존 관계이거나 영향을 받지 말아야한다
- 의존 역전 원칙(DIP, Dependency Inversion Principle) : 추상성 낮은 클래스보다 높은 클래스와 의존 관계맺는다
모듈
모듈 - 단독 컴파일, 재사용 가능, 독립성은 결합도는 약하게 응집력은 높게
결합도
약함 -------------------------------------------------------------------------------------------------------------------------------> 강함
| 자료 결합도 (data coupling) |
스탬프 결합도 (stamp coupling) |
제어 결합도 (control coupling) |
외부 결합도 (Externel coupling) |
공통 결합도 (comon coupling) |
내용 결합도 (content coupling) |
| 자료 요소로만 구성 |
자료 구조가 전달 될 때 | 제어 신호를 이용 제어 요소를 전달 |
외부의 다른 모듈 참조 | 공통되는 데이터 영역 | 다른 모듈의 내부기능, 내부 자료 직접 참조 |
응집도
강함 -------------------------------------------------------------------------------------------------------------------------------> 약함
| 기능적 응집도 (Functional Cohension) |
순차적 응집도 (Sequential Cohension) |
교환적 응집도 (Communication Cohension) |
절차적 응집도 (Procedural Cohension) |
시간적 응집도 (Temporal Cohension) |
논리적 응집도 (Logical Cohension) |
우연적 응집도 (Coincidental Cohension) |
| 모든 기능 요소가 단일 문제 연관 | 하나의 활동으로부터 나온 데이터를 그 다음 활동의 데이터로 쓰일때 | 동일 입출력 사용 | 다수의 관련 기능을 가질때 순차적으로 수행 | 특정 시간의 몇 개의 기능을 하나의 모듈로 작성 | 유사한 성격, 특정 형태 처리 요소를 하나의 모듈로 형성 | 서로 관련없는 요소로만 구성 |
공통 모듈
- 정확성
- 명확성
- 완전성
- 일관성
- 추적성
재사용
- 함수와 객체
- 컴포넌트
- 애플리케이션
효과적인 모듈 설계 방안
- 결합도는 낮고 응집도 는 높게
- 복잡도와 중복성을 줄이고 일관성 유지
- 유지보수 용이
코드
종류
- 순차코드 ex)1,2,3,4...
- 블록코드 ex)1001~1100 : 총무부
- 10진 코드 ex)1000 : 공학, 1100 : 소프트웨어 공학
- 그룹 분류 코드 ex)1-01-001 : 본사 , 2-01-001 : 인사계
- 연상 코드 ex)tv-40 : 40인치 TV
- 표의 숫자 코드 ex)120-750-1500 : 두께x폭x길이 강판
- 합성 코드 ex) KE-1700 : 대한항공 1700
디자인 패턴
생성 패턴
- 추상 팩토리 - 구체적 클래스에 의존하지 않고 서로 연관, 의존하는 객체를 추상적으로 표현
- 빌더 - 건축하듯 조합하여 객체 생성, 동일 객체 생성에서도 다른 결과를 만들 수도 있다
- 팩토리 메서드 - 상위클래스에서 인터페이스만 정의, 실제 생성은 서브 클래스가 담당
- 프로토타입 - 원본 객체 복제
- 싱글톤 - 클래스 내에서 인스턴스가 하나뿐임을 보장
구조 패턴
- 어댑터 - 호환성없는 클래스들의 인터페이스를 다른 클래스가 이용하게 해주는 패턴
- 브리지 - 구현부 추상층 분리, 서로 독립 확장할 수 있도록 구성
- 컴포지트 - 복합 객체, 단일 객체 구분 없이 사용할 때
- 데코레이터 - 임의의 객체에 부가적 기능 추가
- 퍼싸드 - Wrapper 객체
- 플라이웨이트 - 메모리 절약
- 프록시 - 접근이 어려운 객체의 인터페이스 역할
행위 패턴
- 책임연쇄
- 커맨드
- 인터프리터
- 반복자
- 중재자
- 메멘토
- 옵서버
- 상태
- 전략
- 탬플릿 메서드
- 방문자
인터페이스 요구사항 검증
요구사항 검토계획 수립 -> 검토 및 오류 수정 -> 베이스 라인 설정
요구사항 검증 방법
- 동료검토 : 동료들이 결함발견
- 워크스루 : 미리 배포 후 검토
- 인스펙션 : 검토 전문가들이 결함 발견
- 프로토타이핑 : 견본품
- 테스트 설계 : 테스트 케이스
- CASE 도구 활용 : 일관성 분석
인터페이스 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
인터페이스 방법 명세화
시스템 연계 기술
- DB Link : DB에서 제공하는 DB Link 객체 이용
- API/Open API
- 연계 솔루션 : EAI 서버와 송수신 시스템에 설치되는 클라이언트 이용
- Socket : 소켓을 생성 포트 할당
- Web Service : WSDL, UDDI, SOAP
인터페이스 통신 유형
- 단방향
- 동기
- 비동기
미들웨어 솔루션
종류 - DB, RPC, MOM, TP-Monitor, ORB, WAS
MOM - 비동기형 메시지, 온라인 업무보다 이기종 분산 데이터 시스템
TP-Monitor - 트랜잭션 처리 모니터
ORB - 객체 지향, 코바(CORBA) 표준 스텍 구현
'Study' 카테고리의 다른 글
| [정처기 실기] 핵심 키워드 5문제 (2) (0) | 2024.03.04 |
|---|---|
| [정처기 실기] 핵심 키워드 5문제 (1) (0) | 2024.03.03 |
| [Java] 함수형 인터페이스 Functional Interface) (0) | 2023.10.28 |
| [java] 람다식(Lambda expression) (0) | 2023.10.28 |
| [Java] 제네릭(Generic) (0) | 2023.10.27 |