Define the following terms
1. SW Engineering
-
소프트웨어의 개발, 운영 및 유지 관리에 체계적이고 규율적이며 정량화 가능한 접근 방식을 적용하는 것, 즉 소프트웨어에 엔지니어링을 적용하는 것
-
목표는 비용 효율적인 방식으로 고품질의 소프트웨어 시스템을 생산하는 것입니다.
2. Software Crisis
-
소프트웨어가 하드웨어의 발전을 따라잡지 못하는 40년 된 소프트웨어 생산성 문제를 의미합니다.
-
지난 수십 년 동안 소프트웨어 개발에는 큰 발전이 없었으며, 정확하고 이해하기 쉬우며 검증 가능한 소프트웨어를 작성하는 데 어려움이 있습니다.
주요문제
- 예산과 시간을 초과
- 비효율적이고 품질이 낮은
- 요구사항을 충족하지 못하는
- 관리가 불가능한
원인
- 소프트웨어 '복잡성' 증가
- 소프트웨어의 더 풍부한 기능 요구
- 분산 컴퓨팅
- 웹 기반 및 모바일 애플리케이션
- 하드웨어 시스템에 내장된 소프트웨어
- 소프트웨어 '비용' 증가
극복방안
-
소프트웨어 개발에 '엔지니어링' 접근 방식 사용
-
임시방편적인 접근 방식을 피하고 소프트웨어 프로세스, 설계 방법, 엔지니어링, 소프트웨어 자산 재사용, 구성 요소로 조립 및 클라우드 서비스 구독, 디자인 패턴 적용, 아키텍처 스타일 및 전술 재사용, 프레임워크 채택 등에 중점을 둡니다.
-
좋은 디자인은 좋은 구현의 전제 조건이므로 모델링과 디자인에 더 집중해야 합니다.
-
소프트웨어 위기는 소프트웨어 개발의 효율성과 효과를 개선하기 위한 새로운 소프트웨어 엔지니어링 방법론, 도구 및 기술의 개발을 촉진하여 현대 소프트웨어 엔지니어링 관행의 토대
3-1. Separation of Concerns(DP)
-
소프트웨어 시스템을 각각 특정 기능이나 측면을 담당하는 더작고 독립적인 모듈로 구성하고 분할하는 소프트웨어 엔지니어링의 설계 원칙
-
문제를 분리함으로써 복잡성을 줄이고 모듈성을 개선하여 소프트웨어 시스템을 더 쉽게 개발, 테스트 및 유지 관리할 수 있습니다.
3-2. Abstraction(추상화)
- 소프트웨어 엔지니어링에서 시스템의 복잡한 요소를 단순화 하고,필수 기능에 초점을 맞추는 것. => 복잡한 시스템을 단순화하는
목표
-
불필요한 세부 사항을 숨기면서 시스템의 필수 기능을 포착하는 모델 또는 표현을 만드는 것
-
추상화를 사용하면 복잡성 관리, 커뮤니케이션 개선, 개발 프로세스를 촉진에 굳
3-3. Modularity(모듈화)
-
소프트웨어 시스템을 독립적으로 개발 및 테스트할 수 있는 더 작은 모듈로 분해하는 것
-
각 모듈은시스템의 특정 기능 또는 측면을 담당하며 동시에 다른 모듈과 비교적 간단한 방식으로 상호 연결되어야 합니다.
-
SoC는 소프트웨어 내에서 고유한 문제 또는 책임을 분리하는 데 중점을 두는
-
반면 모듈화는 시스템을 더 작고 독립적이며 재사용 가능한 모듈로 나누는 데 중점
4. SWEBOK
-
IEEE에서 개발한 소프트웨어 엔지니어링의 필수 원칙 및 관행에 대한 포괄적인 가이드 및 참고 자료
-
소프트웨어 엔지니어링의 범위, 지식 영역을 정의하는 포괄적인 가이드로서 해당 분야의 전문가, 교육자 등에게 공통된 이해와 기반을 제공하는 것을 목표로 한다.
5. Requirement Engineering(요구 공학)
-
시스템의 요구 사항을 정의, 문서화 및 유지 관리하는 프로세스입니다.
-
요구 공학은 추출, 분석, 유효성 검사 및 관리와 같은 활동을 통해 소프트웨어 시스템에 대한 이해 관계자의 요구와 기대를 정의하고 관리하는 데 중점을 둔 소프트웨어 개발의 중요한 단계
목표
- 소프트웨어 시스템을 설계하고 구현하는 데 기초로 사용할 수 있는 명확하고 완전한 요구 사항 집합을 생성하는 것입니다.
6. Scrum
-
스프린트라고 하는 짧은 반복으로 나누는 애자일 프레임워크. 일반적으로 2~4주 동안 지속. 잘 정의된 목표를 향한 반복적인 진행을 강조한다.
-
여러 기능의 팀을 활용하며 정기적인 커뮤니케이션, 협업 및 적응력을 강조합니다
-
스크럼 프레임워크는 제품 소유자, 스크럼 마스터, 개발팀 등 몇 가지 주요 역할과 스프린트 계획, 일일 스크럼, 스프린트 검토, 스프린트 회고와 같은 여러 이벤트로 구성됩니다.
-
스크럼 팀은 긴 개발 주기가 끝날 때까지 기다리지 않고 작동 중인 소프트웨어를 조금씩 제공 => 이를 통해 이해 관계자로부터 더 자주 피드백,이해 관계자의 요구를 충족하는지 확인 가능
7. Product Backlog Item(제품 백로그 항목)
- 제품 백로그는 스크럼 팀이 해결해야하는 목록으로 소프트웨어 요구사항, 아키텍처 등이 포함될 수 있다.
백로그란?
8. SRS(요구사항 명세서)
-
개발할 소프트웨어 시스템의 특징, 기능 및 제약 조건을 설명하는 포괄적인 문서입니다.
-
이는 시스템의 요구 사항 및 예상되는 동작과 관련하여 이해 관계자(예: 클라이언트, 개발자 및 프로젝트 관리자) 간의 공식적인 계약 역할을 합니다.
-
모든 이해 관계자가 시스템의 목표, 요구 사항 및 제약 조건을 명확하고 공유하여 이해하는 데 도움이 되기 때문입니다
9. SOLID
단일 책임 원칙(SRP)
- 한개의 클래스는 하나의 책임만 있어야 합니다. 만약 클래스, 모듈에 여러 책임이 묶여 있는 경우 시간이 지남에 따라 이해, 유지 관리 및 보수가 더 어려워진다.
개방/폐쇄 원칙(OCP)
-
클래스는 확장에는 열려 있어야 하지만 수정에는 닫혀 있어야 합니다.
-
기존 코드를 수정하지 않고도 코드에 새로운 기능을 추가할 수 있어야하는 것을 의미. => 안정성 굳, 재사용성 굳
Liskov 대체 원칙(LSP)
- 하위 클래스는 프로그램의 정확성에 영향을 미치지 않으면서 상위 클래스를 대체할 수 있어야 합니다.
- 즉, 상속이 올바르게 적용되어 코드 재사용성 및 유지보수율을 높이는 방식
인터페이스 분리 원칙(ISP)
종속성 역전 원칙(DIP)
-
상위 수준 모듈이 하위 수준 모듈에 종속 되어서는 안 된다는 것
-
추상화가 세부사항에 의존하는 것이 아닌, 세부사항이 추상화에 의존해야 하는 것이다
-
인터페이스와 추상 클래스를 사용해 상위 모듈과 하위 모듈을 분리함 으로서 시스템 변경을 보다 유연하게, 구체적으로 할 수 있다.
설명으로 틀린 것은?
2. XP에 대한 설명으로 틀린 것은?
① 대표적인 구조적 방법론 중 하나이다.
② 소규모 개발 조직이 불확실하고 변경이 많은 요구를 접하였을 때 적절한 방법이다.
③ 익스트림 프로그래밍을 구동시키는 원리는 상식적인 원리와 경험을 최대한 끌어 올리는 것이다.
④ 구체적인 실천 방법을 정의하고 있으며, 개발 문서 보다는 소스코드에 중점을 둔다.
- 1번. XP는 애자일 방법론.
- 지속적인 개선, 빠른 피드백 주기, 개발자와 고객 간의 긴밀한 협업을 통해 고품질 소프트웨어를 제공하는 데 중점
7. 애자일(Agile) 프로세스 모델에 대한 설명으로 틀린 것은?
애자일 프로세스
- 개발 프로젝트 기간을 짧은 주기로 나눠 반복적인 개발을 하는것이 특징.
- 개개인과의 상호소통을 통해 의견 수렴
- 협상과 계약보다 고객과의 협력 중시
7-2. 애자일 기법중 스크럼과 관련된 용어에 대한 설명이 틀린것은?
- 스프린트는 ~~~
- 스크럼 마스터는 스크럼 프로세스를 따르고, 팀이 스크럼을 효과적으로 활용할 수 있도록 보장하는 역할을 맡는다.
- 제품 백로그는 스크럼 팀이 해결해야하는 목록으로 소프트웨어 요구사항, 아키텍처 등이 포함될 수 있다.
- 속도는 한번의 스프린트에서 한팀이 어느 정도의 제품 백로그를 감당할 수 있는지에 대한 추정치로 볼 수 있다.
4. 요구사항 분석에서 비기능적(Nonfunctional) 요구에 대한 설명으로 옳은 것은?
기능적 요구사항 Vs 비기능적 요구사항
기능적: 시스템이 실제로 어떻게 동작하는지에 관점
ex)
- 금융 시스템은 조회,인출,입금,송금의 기능이 있어야한다.
비기능적 : 시스템 구축에 대한 성능, 보안, 품질, 안정 등. 실제 수행에 보조적인 요구사항
ex)
- 차량 대여 시스템이 제공하는 모든 화면이 3초 이내에 사용자에게 보여야한다.
- 시스템의 처리량, 반응시간 등의 성능 요구나 품질요구
- 시스템 구축과 관련된 안전, 보안에 대한 요구사항들
4-2. 요구사항 분석에 대한 설명
- 소프트웨어가 무엇을 해야하는가를 추적하여 요구사항 명세를 작성하는 작업.
- 사용자의 요구를 추출하여 목표를 정하고 어떤 방식으로 해결할 것인지 결정하는 단계
- 소프트웨어 개발의 출발점이면서 실질적인 첫번 째 단계
5. 객체지향 개념에서 다형성(Polymorphism)과 관련한 설명으로 틀린것은?
다형성
- 여러가지 형태를 가지고 있다는 의미로, 여러 형태를 받아들일 수 있는 특징
(- 단일 인터페이스가 다양한 개체에 대한 다양한 동작을 나타낼 수 있게 하는 기능)
메소드 오버라이딩(overriding):
- 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 무시하고 재정의하는것
- 상속관계에서만 발생.
메소드 오버로딩(overloading):
- 한 클래서 내에서 메소드의 이름은 동일하지만 매개변수의 수나 타입을 다르게 하여 재정의하는것
역할
캡슐화
- 속성과 관련된 작업을 클래스로 그룹화하고 하나로 취급하여 => 데이터 액세스 및 수정을 관리하고 코드 유지 관리 및 견고성을 촉진하는 방법
상속
- 하위 클래스가 상위 클래스에서 속성 및 메서드을 상속할 수 있도록 하는 메커니즘입니다
추상화
- 복잡한 시스템을 더 작고 관리하기 쉬운 부분으로 분해하여 단순화하는 프로세스
8. GoF(Gang of Four) 디자인 패턴을 생성, 구조, 행동 패턴의 세그룹으로 분류할 때, 구조 패턴이 아닌 것은?
생성패턴 : 만드는 느낌
- 추상 팩토리 패턴
- 빌더 패턴
- 팩토리 메소드
- 프로토타입
- 싱글톤
구조 패턴 :연결느낌
- 어댑터
- 브릿지
- 컴포지트
- 데코레이터
- 퍼사드
- 프록시
행위 패턴 : 행동하는 느낌. 역동적
- 역할 사슬 패턴
- 커맨드 패턴
- 인터프리터
- 이터레이터
- 옵저버
- 메멘토
- 전략
- 템플릿
9. 소프트웨어 모델링과 관련한 설명으로 틀린 것은?
소프트웨어 모델링
- 모델링 작업의 결과물은 다른 모델링 작업에 영향을 줄 수 있음.
- 구조적 방법론에서는 DFD, DD 등을 사용해 요구사항의 결과를 표현
- 객체지향 방법론에서는 UML 표기법을 사용함
- 소프트웨어 모델을 사용할 경우 개발될 소프트웨어에 대한 이해도 및 이해 당사자 간의 의사소통 향상에 도움됨.
UML 구조다이어그램 & 행위다이어그램
구조 다이어그램(Structure Diagram)
- 클래스 , 객체 ,복합체 구조 , 배치 , 컴포넌트 , 패키지
행위 다이어그램(Behavior Diagram)
- 활동 , 상태 머신 , 유즈 케이스, 상호작용
정적 다이어
동적
기능
객체에 대한 설명으로 맞는것은?
객체
- 객체는 상태, 동작, 고유 식별자를 가진 모든 것
- 클래스는 공통 속성을 공유하는 객체들의 집합
- 객체는 필요한 자료구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재
- 객체의 상태는 속성값에 의해 정의됨
Interpret the following DFD diagram for Car Rental Management system
-
프로세스: 원이나 타원으로 표시되는 프로세스는 데이터에 대해 수행되는 작업 또는 기능입니다.
-
데이터 흐름: 화살표로 표시되는 데이터 흐름은 프로세스, 데이터 저장소 및 외부 엔터티 간의 데이터 이동을 보여줍니다.
-
데이터 저장소: 시스템 내에서 데이터가 저장되거나 수집되는 장소입니다.
-
외부 엔터티: 모델링 중인 시스템과 상호 작용하는 사용자, 다른 시스템 또는 조직이 될 수 있습니다.
외부 엔터티는 액터, 터미네이터 또는 에이전트라고도 합니다.
-
프로세스 정의: System Nodes of Car Rental Management System
-
액터 정의 define terminal
-
데이터 저장소
- DFD의 데이터 저장소는 대상 시스템에서 관리하는 영구 정보를 의미
- 데이터 플로우 정의:
프로세스, 터미널 및 데이터 저장소 간의 데이터 항목 흐름을 나타냅니다.
10. Relationships in Use Case Diagram
Association(연결)
Include(포함)
- 사용 사례가 흐름의 일부로 다른 사용 사례의 동작을 포함함.
- «include» 화살촉
Extend(확장)
- 사용 사례가 런타임 시 다른 사용 사례의 동작을 조건부로 확장함
- «extend» 화살촉
Generalization(일반화)
3. 유스케이스 구성요소간의 관계에 포함되지 않는 것은?
10. 유스케이스 다이어그램(Use Case Diagram)에 관련된 내용으로 틀린것은?
1. 시스템과 상호작용하는 외부시스템은 액터로 파악해서는 안된다. => 틀림.
액터
- 시스템과 상호작용하는 모든 외부 요소(사람, 기계, 시스템)
- 유스케이스는 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한다.
- 시스템 액터는 다른 프로젝트에서 이미 개발되어 사용되고 있으며, 본 시스템과 데이터를 주고받는 등 서로 연동되는 시스템을 말한다.
- 액터가 인식할 수 없는 시스템 내부의 기능을 하나의 유스케이스로 파악해서는 안된다.
11. Relationship between Classes
Association(연결)
- 두 클래스의 인스턴스 간의 연결 또는 협업을 나타냅니다. 한 클래스의 개체가 다른 클래스의 개체와 어떻게 관련되는지 설명하며 종종 다중성(연결할 수 있는 인스턴스 수)을 지정합니다.
Aggregation(집계)
- 한 클래스(전체)의 개체가 다른 클래스(부분)의 개체로 구성되는 "전체-부분" 또는 "가짐-a" 관계를 나타냅니다. 부분은 전체와 독립적으로 존재할 수 있습니다. 즉, 수명이 함께 묶여 있지 않습니다.
Composition(구성)
- 부분 개체의 수명이 전체 개체에 종속되는 보다 강력한 형태의 집계입니다. 전체 객체가 소멸되거나 삭제되면 부분 객체도 소멸되거나 삭제됩니다.
Inheritance (상속(일반화))
- 보다 일반적인 클래스(슈퍼클래스)와 보다 구체적인 클래스(서브클래스) 간의 관계를 나타냅니다. 하위 클래스는 상위 클래스의 속성과 메서드를 상속하므로 코드를 재사용하고 공통 기반을 기반으로 보다 전문적인 클래스를 만들 수 있습니다.
Dependency(의존성)
- 약한 형태의 관계로, 기능의 일부 측면에서 클래스가 다른 클래스에 의존함을 나타냅니다. 이 관계는 한 클래스의 변경 사항이 다른 클래스에 영향을 미칠 수 있음을 보여줍니다.
Draw a Class Diagram using the following classes for Car Rental Management System.
Define their relationships and their cardinalities.: Customer, Staff, Car Type, Car Item, Reservation, Check-out, Return
1. SEQUENCE DIAGRAM에 대한 설명으로 틀린 것은?
① 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것이다.
② 주로 시스템의 정적 측면을 모델링하기 위해 사용한다.
③ 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타낸다.
④ 회귀 메시지(Self-Message), 제어블록(Statement block) 등으로 구성된다.
2 번.
SEQUENCE DIAGRAM
주요 요소
1. 수명선(Lifeline)
- 네모와 점선.
- 객체면 클래스이고 서비스면 컴포넌트
2. 메시지
- 인스턴스 간 주고 받은 데이터 요청과 응답 (HTTP 통신 기준)으로 나타냅니다.
동기 메시지 (Sync message)
- 꽉찬 화살표
- 요청을 보낸 후 반환이 올때까지 대기
비동기 메시지 (Async message)
- 요청을 보낸 다음 반환을 기다리지 않고 다른 작업을 수행
자체 메시지 (Self message)
반환 메시지 (Reply/Return message)
3. 활성화 막대(Activation)
- 직사각형의 막대.
- 인스턴스가 다른 인스턴스와 상호 작용을 하며 활성화하는걸 표시
4. 흐름제어 ex) if, for, while
Guard
- 조건을 명시할 수 있는 방법
- 메시지의 앞 쪽에 [ ] 대괄호로 감싼 후 조건을 명시
Sequence Fragment
alt
- if/else문을 Guard를 사용해 표현
- ex) "if-else" 또는 "switch" 문과 유사
- 조건에 따라 선택 사항이 여러 개일 경우 사용
opt
-
if문을 Guard를 사용해 표현
-
조건에 따라 선택 사항이 단 한 개일 경우에 사용
-
ex) 분기가 없는 프로그래밍 언어의 간단한 "if" 문
-
두 개의 차이는 Guard는 'A라면 B한다.' 와 같이 1개에 대해 1가지의 결과를 보여주는
-
반면, opt는 'A라면 B도 하고 C도 하고 D도 하고 등등을 한다.' 와 같이 1개에 대해 여러 결과를 나타낼 수 있습니다.
loop
par
Explain the following interaction operators of Sequence Diagram.
alt
- To represent a choice of behavior
• Like if-then-else, switch-cases
• At most one of the operands will be chosen.
• An operand must have an explicit or implicit guard expression.
• Operand with No Guard
• True Condition is assumed.
• Operand with [else]
• Represents a guard that is the negation of the disjunction of all other
guards
opt
par
To represent a parallel processing
• A task is split into sub-tasks that execute simultaneously.
• Granularity of Task
• Thread level
• Process level
• Processor Core level
• Processor level
• Node level
• Useful for processing Big Data/Contexts
What are key elements of Activity Diagram? Identify at least 5 elements.
액티비티 다이어그램 예시
Elements
- 워크플로 또는 프로세스를 나타내는 데 사용되는 UML
활동(Activities)
- 프로세스 실행 중에 발생하는 단일 작업
- 활동은 둥근 사각형으로 표시되며 다이어그램의 기본 빌딩 블록입니다.
개체 노드(Object Nodes)
- 프로세스 중에 입력 또는 출력되는 데이터 또는 개체의 인스턴스를 나타냅니다.
초기 노드(Initial Node)
- 액션이나 액티비티의 시작점입니다.
- 채워진 작은 원으로 표시됩니다.
최종 노드(Final Node)
- 모든 액티비티가 종료
- 큰 원 안에 채워진 채워진 원으로 표시됩니다.
Join 노드
- 여러 경로의 흐름이 하나로 합쳐짐 => 단일 제어 흐름으로 병합
- 들어오는 제어 흐름은 여러 개, 나가는 제어 흐름은 한 개
Fork 노드
- 단일 제어 흐름을 여러 병렬 경로로 분할.
- 들어오는 제어 흐름은 한 개, 나가는 제어 흐름은 여러 개
참고) https://brownbears.tistory.com/511