소공 시험 정리

강준호·2023년 4월 19일
0

소프트웨어공학

목록 보기
6/7

Define the following terms

1. SW Engineering

  • 소프트웨어의 개발, 운영 및 유지 관리에 체계적이고 규율적이며 정량화 가능한 접근 방식을 적용하는 것, 즉 소프트웨어에 엔지니어링을 적용하는 것

  • 목표는 비용 효율적인 방식으로 고품질의 소프트웨어 시스템을 생산하는 것입니다.

2. Software Crisis

  • 소프트웨어가 하드웨어의 발전을 따라잡지 못하는 40년 된 소프트웨어 생산성 문제를 의미합니다.

  • 지난 수십 년 동안 소프트웨어 개발에는 큰 발전이 없었으며, 정확하고 이해하기 쉬우며 검증 가능한 소프트웨어를 작성하는 데 어려움이 있습니다.

주요문제

    1. 예산과 시간을 초과
    1. 비효율적이고 품질이 낮은
    1. 요구사항을 충족하지 못하는
    1. 관리가 불가능한

원인

  • 소프트웨어 '복잡성' 증가
  • 소프트웨어의 더 풍부한 기능 요구
  • 분산 컴퓨팅
  • 웹 기반 및 모바일 애플리케이션
  • 하드웨어 시스템에 내장된 소프트웨어
  • 소프트웨어 '비용' 증가

극복방안

  • 소프트웨어 개발에 '엔지니어링' 접근 방식 사용

  • 임시방편적인 접근 방식을 피하고 소프트웨어 프로세스, 설계 방법, 엔지니어링, 소프트웨어 자산 재사용, 구성 요소로 조립 및 클라우드 서비스 구독, 디자인 패턴 적용, 아키텍처 스타일 및 전술 재사용, 프레임워크 채택 등에 중점을 둡니다.

  • 좋은 디자인은 좋은 구현의 전제 조건이므로 모델링과 디자인에 더 집중해야 합니다.

  • 소프트웨어 위기는 소프트웨어 개발의 효율성과 효과를 개선하기 위한 새로운 소프트웨어 엔지니어링 방법론, 도구 및 기술의 개발을 촉진하여 현대 소프트웨어 엔지니어링 관행의 토대

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

  • 클래스 설계 원칙 5가지.

  • 종속성을 줄이고 모듈성을 촉진하여 코드 유지 관리, 가독성 및 확장성을 개선하는 것을 목표로 하는 다섯 가지 설계 원칙 집합

단일 책임 원칙(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

  • 프로세스: 원이나 타원으로 표시되는 프로세스는 데이터에 대해 수행되는 작업 또는 기능입니다.

  • 데이터 흐름: 화살표로 표시되는 데이터 흐름은 프로세스, 데이터 저장소 및 외부 엔터티 간의 데이터 이동을 보여줍니다.

  • 데이터 저장소: 시스템 내에서 데이터가 저장되거나 수집되는 장소입니다.

  • 외부 엔터티: 모델링 중인 시스템과 상호 작용하는 사용자, 다른 시스템 또는 조직이 될 수 있습니다.

외부 엔터티는 액터, 터미네이터 또는 에이전트라고도 합니다.

  1. 프로세스 정의: System Nodes of Car Rental Management System

  2. 액터 정의 define terminal

  3. 데이터 저장소

  • DFD의 데이터 저장소는 대상 시스템에서 관리하는 영구 정보를 의미
  1. 데이터 플로우 정의:
    프로세스, 터미널 및 데이터 저장소 간의 데이터 항목 흐름을 나타냅니다.

10. Relationships in Use Case Diagram

Association(연결)

  • 액터와 사용 사례를 연결하는 실선

Include(포함)

  • 사용 사례가 흐름의 일부로 다른 사용 사례의 동작을 포함함.
  • «include» 화살촉

Extend(확장)

  • 사용 사례가 런타임 시 다른 사용 사례의 동작을 조건부로 확장함
  • «extend» 화살촉

Generalization(일반화)

  • 일반적인(부모) 사용 사례와 보다 구체적인(자식) 사용 사례 간의 상속 관계를 나타냅니다.

  • 속이 빈 삼각형 화살표가 있는 실선

  • 액터(사용자 또는 외부 시스템)와 모델링 중인 시스템의 유스 케이스(기능) 간의 상호 작용을 설명하는 데 사용됩니다.

3. 유스케이스 구성요소간의 관계에 포함되지 않는 것은?

  • 연결,일반화, 포함, 확장
  • 구체화 X

10. 유스케이스 다이어그램(Use Case Diagram)에 관련된 내용으로 틀린것은?

1. 시스템과 상호작용하는 외부시스템은 액터로 파악해서는 안된다. => 틀림.

액터

  • 시스템과 상호작용하는 모든 외부 요소(사람, 기계, 시스템)
  1. 유스케이스는 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한다.
  2. 시스템 액터는 다른 프로젝트에서 이미 개발되어 사용되고 있으며, 본 시스템과 데이터를 주고받는 등 서로 연동되는 시스템을 말한다.
  3. 액터가 인식할 수 없는 시스템 내부의 기능을 하나의 유스케이스로 파악해서는 안된다.

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

  • 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것이다.

  • 시퀀스 다이어그램을 이용하면 API 등의 유즈 케이스를 디테일하게 알 수 있고 타 시스템의 API 호출 등의 로직을 모델링할 수 있어 시나리오를 파악하기 좋습니다.

주요 요소

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

  • for, while과 같은 반복문

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

0개의 댓글