* 소프트웨어 공학: 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문이며, 여러 가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상을 목적으로 한다.
1) 프로세스와 방법론
✔️ 요구사항 개발 프로세스
도출 > 분석 > 명세 > 확인
* 요구사항: 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한 제약조건
- 4가지 유형: 기능, 비기능, 사용자, 시스템 요구사항
기능적 요구사항 Vs 비기능적 요구사항
- 기능적 요구사항 : 시스템이 실제로 어떻게 동작하는 지에 관점을 둔 요구사항
- 비기능적 요구사항 : 시스템 구축에 대한 성능, 보안, 품질, 안정 등에 대한 성능, 보안, 품질, 안정성등으로 실제 수행에 보조적인 요구사항
[ 요구사항 도출 ]
- 주요 기법: 청취와 인터뷰, 설문, 브레인스토밍, 워크샵, 프로토타이핑, 유스케이스
[ 요구사항 분석 ]
- 소프트웨어 개발의 실제적인 첫 단계로 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화(명세화)하는 활동
- 비용과 일정에 대한 제약설정, 타당성 조사, 요구사항 정의 문서화
- 구조적 분석 기법: 자료 흐름도(DFD), 자료 사전(DD), 소단위 명세서, 개체 관계도(ERD), 상태 전이도(STD), 제어 명세서
자료흐름도(DFD)
- 4가지 구성요소: 프로세스, 자료흐름, 자료 저장소, 단말
자료 사전(DD)
- = 자료의 정의, + 자료의 연결, ( ) 자료의 생략, [ | ] 자료의 선택, { } 자료의 반복, * * 자료의 설명
[ 요구사항 명세 ]
- 분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것
- 명세 기법: 정형 명세 기법, 비정형 명세 기법
[ 요구사항 검증 ]
- 동료 검토: 작성자가 명세서 내용을 직접 설명하고 동료들이 들으며 결함 발견
- 워크 스루: 검토 회의 전 미리 배포하여 사전 검토 후 짧은 검토 회의로 결함 발견
- 인스펙션: 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함 발견
✔️ 개발 방법
- 소프트웨어 개발 생명 주기: 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
[ 나선형 모델 ]
- 계획 및 정의 → 위험 분석 → 개발 → 고객 평가
- 보헴이 제안
- 폭포수 모델과 원형 모델의 장점을 결합한 모델
- 점층적으로 개발을 진행하여 소프트웨어 품질을 지속적으로 개선할 수 있다.
- 위험을 분석하고 최소화하기 위한 단계가 포함되어 있다.(위험 관리하고 최소화하는 것 목적)
✔️ 애자일 방법론 유형
[ 익스트림 프로그래밍(XP, eXtreme Programming) ]
- 애자일 방법론의 하나로 소프트웨어 개발 프로세스가 문서화하는 데 지나치게 많은 시간과 노력이 소모되는 단점을 보완하기 위해 개발
- 의사소통, 단순성, 피드백, 용기, 존중의 5가지 가치에 기초하여 '고객에게 최고의 가치를 가장 빨리' 전달하도록 하는 방법론으로 켄트벡이 고안(용단의 피존)
주요 실천 방법
- 페어 프로그래밍, 공동 코드 소유, TDD, 전체 팀, 지속적 통합, 디자인 개선 및 리팩토링, 소규모 릴리즈
[ Lean ]
- 낭비제거, 품질 내재화, 지식 창출, 늦은 확정, 빠른 인도, 사람 존중, 전체 최적화 (낭품지 확인사전)
[ 스크럼 ]
: 팀이 중심이 되어 개발의 효율성을 높이는 기법
- 제품 백로그: 요구사항을 우선순위에 따라 나열한 목록
- 스프린트: 실제 개발 작업을 진행하는 과정(2~4주 기간 내에 진행하는 프로세스)
- 스크럼 미팅 / 마스터, 스프린트 회고, 번 다운 차트
개발 진행 순서
- 스프린트 계획 회의 -> 스프린트 -> 일일 스크럼 회의 -> 스프린트 검토 회의 -> 스프린트 회고
✔️ 소프트웨어 재사용과 재공학
소프트웨어 재사용
이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것
재사용 방법에는 1)합성 중심, 2)생성 중심이 있다.
소프트웨어 재공학
기존 시스템을 이용하여 보다 더 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
✔️ CASE (요구사항 분석을 위한, 자동화 도구)
: 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구
- 원천 기술
- 구조적 기법
- 프로토타이핑 기술
- 정보 저장소 기술
- 응용 프로그래밍 기술
- 분산 처리 기술
- 구분
- 상위: 요구 분석과 설계 지원
- 하위: 구현과 테스트 지원
- 주요 기능
- 소프트웨어 생명주기 전 단계의 연결
- 다양한 소프트웨어 개발 모형 지원
- 그래픽 지원
✔️ 비용 산정 기법
[ 하향식 기법 ]
1) 전문자 감정 기법
경험이 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법
2) 델파이 기법
전문가 감정 기법의 주관적인 편견을 보완하기 위해 많은 전문가의 의견을 종합하여 산정하는 기법
[ 상향식 기법 ]
1) LOC 기법
* 개발 기간 계산 방법
ex. LOC 기법에 의하여 예측된 총 라인 수는 30,000라인, 개발에 참여할 개발자가 5명, 평균 생산성이 월간 300라인일 때 개발 소요 기간을 계산하라.
sol.
- 노력(인월): LOC / 1인당 월평균 생산 코드 라인 수 = 30,000 / 300 = 100명
- 개발 기간: 노력(인월) / 투입 인원 = 100 / 5 = 20개월
* 개발 비용 계산 방법
- 개발 비용: 노력(인월) * 단위비용(1인당 월평균 인건비)
2) 개발 단계별 인월수 기법
LOC 기법을 보완하기 위한 기법
3) 수학적 선정 기법
- COCOMO 모형
- Putnam 모형
- 기능 점수(FP) 모형
✔️ HIPO Chart
: 시스템 실행 과정인 입력, 처리, 출력의 기능을 표현한 것
- 입력, 처리, 출력 | 하향식 소프트웨어 개발을 위한 문서화 도구
- 가시적 도표: 계층 구조
- 총체적 도표: 입력, 처리, 출력에 대한 전반적인 정보 제공
- 세부적 도표: 상세하게 기술하는 도표
자동화 도구
- SADT(SoftTech 사에서 개발, 블록 다이어그램 채택), SREM, PSL/PSA, TAGS
✔️ UML(Unified Modeling Language)
- 구성요소: 사물, 관계, 다이어그램 (사관다)
- 사물 종류 : 구조, 행동, 그룹, 사물
- 관계 : 연관, 집합, 포함, 일반화, 의존, 실체화
- Association (연관 관계): 어느 한 사물 객체가 다른 사물 객체와 연결
- ex. 선생님 - 학생
- Aggregation (집합 관계): 하나의 사물이 다른 사물에 포함되어 있는 관계 (독립적)
- ex. 컴퓨터 - 프린터
- Composition (포함 관계): 포함하는 사물의 변화가 포함되는 사물에 영향을 미치는 관계
- ex. 문 - 키
- Dependency (의존 관계): 그것을 사용하는 다른 사물에게 영향
- ex. 등급 - 할인율
- Generalization (일반화 관계) : 일반화된 사물과 좀 더 특수화된 사물 사이의 관계
- ex. 커피 - 아메리카노, 카페라떼
- Realization (실체화 관계): 한 객체가 다른 객체에 의해 오퍼레이션을 수행하도록 지정
- ex. 새, 비행기 - 날 수 있다
- Association (연관 관계): 어느 한 사물 객체가 다른 사물 객체와 연결
- 구조 : 클래스, 객체, 컴포넌트, 배치, 복합체 구조, 패키지 (클객컴 배복패)
- 행위 : 유스케이스, 시퀀스, 커뮤니테이션, 상태, 활동, 상호작용, 타이밍 (유시커 상활호타)
- 특징
- 가시화 언어, 명세화, 문서화 언어 (
객체지향 언어X, 모델링 언어 O, 대표적인 객체지향 모델링 언어 O)
- 가시화 언어, 명세화, 문서화 언어 (
[ 구조적 다이어그램 ]
- 클래스 다이어그램: 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현함
- 구성요소: 클래스, 제약조건, 관계
- 객체 다이어그램: 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현함
- 컴포넌트 다이어그램: 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현함, 구현 단계에서 사용됨
- 배치 다이어그램: 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현함, 구현 단계에서 사용됨
- 복합체 구조 다이어그램: 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부구조를 표현함
- 패키지 다이어그램: 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현함
- 구성요소: 패키치, 객체, 의존 관계
[ 행위 다이어그램 ]
- 유스케이스 다이어그램: 사용자의 요구를 분석하는 것으로 기능 모델링 작업에 사용함
- 구성요소: 시스템/시스템 범위, 액터, 유스케이스, 관계
- 순차 다이어그램: 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현함
- 구성요소: 액터, 객체, 생명선, 실행 상자, 메시지, 객체 소멸, 프레임
- 커뮤니케이션 다이어그램: 순차 다이어그램과 같이 동작에 참여하는 객체들이 주고받는 메시지를 표현하는데, 메시지뿐만 아니라 객체들 간의 연관까지 표현함
- 구성요소: 액터, 객체, 링크, 메시지
- 상태 다이어그램 (State Diagram): 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화 하는지를 표현함
- 구성요소: 상태, 시작 상태, 종료 상태, 상태 전환, 이벤트, 프레임
- 활동 다이어그램 : 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현함
- 구성요소: 액션/액티비티, 시작노드, 종료노드, 조건노드, 병합노드, 포크노드, 조인노드, 스윔레인
- 상호작용 개요 다이어그램
- 타이밍 다이어그램 (Timing Diagram)
✔️ 유스케이스(Use Case) 다이어그램
[ 시스템 ]
시스템 내부의 유스케이스들을 사각형으로 묶어 시스템의 범위를 표현한 것
[ 액터(Actor) ]
- 시스템과 상호작용하는 모든 것(사람, 기계, 시스템 등)
- 시스템과 상호작용하는 모든 외부요소로, 사람이나 외부시스템을 의미
[ 유스케이스 (Use Case) ]
- 사용자가 보는 관점에서 시스템이 액터에게 제공하는 서비스 또는 기능을 표현한 것
[ 관계 (Relationship) ]
- 연관 관계(Association) : 유스케이스와 액터간의 상호작용이 있음을 표현한다.
- 포함 관계(Include): 하나의 유스케이스가 다른 유스케이스의 실행을 전제로 할 때 형성되는 관계이다.
- 확장 관계(Extend): 기본 수행 시 특별한 조건을 만족할 때 수행할 유스케이스, 확장 기능 유스케이스와 확장 대상 유스케이스 사이에 형성 되는 관계이다.
- 일반화 관계(Generalization) : 유사한 유스케이스 또는 액터를 모아 추상화한 유스케이스 또는 액터와 연결시켜 그룹을 만들어 이해도를 높이기 위한 관계이다.
✔️ 미들웨어(Middleware)
운영체제와 응용 프로그램, 또는 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- RPC (RemoteProcedure Call) : 응용 프로그램의 프로시저를 사용하여 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어
- MOM (Message Oriented Middleware, 메시지 지향 미들웨어)
- 메시지 기반의 비동기형 메시지를 전달하는 방식
- 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용
- 송신측과 수신측의 연결 시 메시지 큐를 활용하는 방법이 있다.
- 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할
- 다소 느리고 안정적인 응답을 필요로 하는 경우
- TP-Monitor (트랜잭션 처리 모니터, Transaction Processing Monitor)
- 트랜잭션 처리 및 감시하는 미들웨어
- ORB (Object Request Broker): 객체 지향 미들웨어
[ WAS ]
- Tomcat, GlassFish, JBoss, Jetty, JEUS, Resin, WebLogic, WebSphere
- 클라이언트/서버 환경보다는 웹 환경을 구현하기 위한 미들웨어
✔️ GoF 디자인 패턴
- 디자인패턴: 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법
[ 생성 패턴(5개) ]
- 추상 팩토리, 빌더, 팩토리 메소드, 프로토타입, 싱글톤 (추빌팩프싱)
[ 구조 패턴(7개) ]
- 어댑터, 브릿지, 컴포지트, 데코레이터, 퍼싸드, 플라이웨이트, 프록시 (어브컴데 퍼플프)
- 브릿지 패턴: 구현부에서 추상층을 분리하여 각자 독립적으로 확장이 가능하게 하는 패턴
- 퍼싸드(facade) 패턴: 개발자가 사용해야 하는 서브 시스템의 가장 앞쪽에 위치하면서 서브 시스템에 있는 객체들은 사용할 수 있도록 인터페이스 역할을 하는 패턴
[ 행위 패턴(11개) ]
- 책임 연쇄, 커맨드, 인터프리터, 반복자, 중재자(객체 간의 통제와 지시의 역할 중재자 둠), 메멘토, 옵서버, 상태, 전략(다양한 알고리즘 캡슐화해서 알고리즘 대체 가능하도록 한 행위 패턴), 템플릿 메소드, 방문자
- 전략 패턴: 알고리즘을 사용하는 곳과 알고리즘을 제공하는 곳을 분리시킨 구조로 알고리즘을 동적으로 교체 가능한 패턴
✔️ 주요 아키텍처 패턴
[ 파이프-필터 패턴 (Pipe-Filter Pattern) ]
- 컴포넌트로 캡슐화하여 파이프(Pipe)를 통해 데이터를 전송하는 패턴
- 필터 컴포넌트는 재사용성이 좋고, 추가가 쉬워 확장이 용이
- 필터 컴포넌트들을 재배치하여 다양한 파이프라인을 구축하는 것이 가능
✔️ 결합도
- 약할수록 좋다.
- 내용 > 공통 > 외부 > 제어 > 스템프 > 자료
- 내부 공사는 외제차를 쓰자.
✔️ 응집도
- 강할수록 좋다.
- 기능 > 순차 > 통신 > 절차 > 시간 > 논리 > 우연
- 우연적(Coincidental)응집도 < 논리적(Logical) 응집도 < 시간적 응집도(Temporal) < 절차적(Procedural) 응집도 < 교환적(Communication) 응집도 < 순차적(Sequential) 응집도 < 기능적(Functional) 응집도
- 우리가 논 시절의 통합짱은 순기다.
✔️ 사용자 인터페이스
- CLI : 명령 / 출력이 텍스트
- GUI : 그래픽 환경 인터페이스
- NUI : 사용자의 말과 행동으로 기기 조작
- OUI : 모든 사물과 사용자 간의 인터페이스
✔️ 객체지향 분석의 방법론
- 럼바우 방법: 객체 모델, 동적 모델, 기능 모델로 나누어 수행
- 부치(Booch) 방법: 미시적, 거시적
- Jacobson 방법: Use Case 강조
- Coad – Yourdon: E-R 다이어그램
- Wirfs-Brock 방법: 고객 명세서 평가
✔️ 럼바우 분석 기법
객체 모델링 → 동적 모델링 → 기능 모델링
- 객체 모델링: 객체 다이어그램
- 시스템에서 객체를 찾아서 속성과 연산 식별 및 객체들의 관계를 규정
- 동적 모델링: 상태 다이어그램(상태도), 시간의 흐름에 따른
- 기능 모델링: 자료 흐름 다이어그램(DFD), 자료의 흐름에 따른
✔️ 객체 관련 용어 정리
- 클래스 : 객체 정의, 데이터 추상화, 공통된 속성과 연산을 갖는 객체의 집합
- 패키지 : 클래스의 집합
- 객체 : 실제로 존재하는 것
- 메시지 : 객체에게 행동 지시
- 도메인 : 하나의 애트리뷰트가 가질 수 있는 원자 값들의 집합
[ 캡슐화 ]
- 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것
- 외부 접근 제한으로 외부 모듈 변경으로 인한 파급 효과 적다.
- 코드커팅: 유료 방송 시청자가 기존의 상품을 해지하고 인터넷 TV, OTT 등 새로운 플랫폼으로 이동하는 것
- 코드셰이빙: 기존의 비싼 유료 방송 상품을 해지하고 보다 저렴한 유료 상품으로 변경하는 것
- 생성형 AI: 대화, 이야기, 이미지, 동영상, 음악 등 새로운 콘텐츠와 아이디어를 생성할 수 있는 AI의 일종
- 비잔틴 장애 허용: 블록체인 기술로서, 장애가 있더라도 전체의 3분의 1을 넘지 않는 다면 시스템 정상 작동하도록 하는 기법
'Computer Science > CS' 카테고리의 다른 글
[전산 공부] 소프트웨어 개발 보안 (1) | 2024.04.06 |
---|---|
[전산공부] 데이터베이스 (4) | 2024.02.25 |
[전산공부] 운영체제 (0) | 2024.02.18 |
[전산 공부] 데이터 통신 (0) | 2024.02.02 |
댓글