소프트웨어 공학의 모든 것 , 최은만 , 생능
6장 설계 원리
연습문제 서술형
1. 설계 작업은 기본구조설계와 상세설계로 나눌 수 있다. 각 단계에서 하는 일을 나누어 설명하라 (단계별 설계 작업 설명)
설계 작업은 기본구조설계와 상세설계로 나눠지며, 각 단계는 다음과 같은 작업을 수행한다.
- 기본구조설계: 시스템의 전반적인 아키텍처를 정의하는 단계로, 시스템의 주요 컴포넌트와 그들 간의 상호작용을 결정한다. 예를 들어, 시스템을 구성하는 모듈을 나누고 각 모듈의 역할을 정의하며, 모듈 간의 의존 관계와 데이터 흐름을 설정하는 작업을 포함한다.
- 상세설계: 기본구조설계를 바탕으로 각 모듈의 내부 구조와 세부 구현을 정의하는 단계이다. 각 모듈의 알고리즘과 데이터 구조를 설계하며, 인터페이스의 상세화, 클래스와 메서드 정의 등 구체적인 설계 작업이 이루어진다. 이 단계에서는 실제 코딩에 필요한 상세한 정보를 제공하여, 이후 개발이 원활하게 진행될 수 있도록 한다.
2. 컴포넌트와 모듈, 서브시스템 세 가지 개념을 설명하고 어떤 차이가 있는지 기술하라 (세 가지 개념의 정의와 차이점)
- 컴포넌트: 소프트웨어에서 특정 기능을 수행하는 독립적인 단위로, 재사용성과 독립성을 중시한다. 컴포넌트는 특정 기능을 구현하고 다른 컴포넌트와의 명확한 인터페이스를 통해 통합되며, 기능 단위로 구분된다.
- 모듈: 소프트웨어의 논리적 단위로, 코드의 재사용성과 유지보수를 위해 특정 기능을 수행하도록 구성된 코드 집합이다. 모듈은 개발자가 코드 관리와 유지보수를 쉽게 하도록 논리적으로 구분하는 단위이다.
- 서브시스템: 시스템을 구성하는 주요 기능을 담당하는 부분으로, 여러 모듈과 컴포넌트가 모여 하나의 독립적 기능을 수행하는 시스템 내 하위 시스템이다.
차이점으로는 컴포넌트는 독립적 기능을 가진 작은 단위로 다른 컴포넌트와 쉽게 통합될 수 있는 점에서 재사용성이 높고, 모듈은 코드의 논리적 분리로 내부의 구체적인 기능을 감추면서도 응집도가 높은 점이 있다. 서브시스템은 시스템의 주요 기능을 담당하며, 각 서브시스템은 특정 기능 영역을 독립적으로 구현한다.
3. 아키텍처에는 세 가지 관점이 있다. 무엇인지 나열하고 각각의 관점을 설명하라 (아키텍처 관점 설명)
아키텍처의 세 가지 주요 관점은 구조적 관점, 행위적 관점, 배포적 관점이다.
- 구조적 관점: 시스템을 구성하는 컴포넌트와 이들 간의 관계를 다루며, 시스템의 정적인 구성 요소를 중심으로 설계한다. 클래스 다이어그램이나 컴포넌트 다이어그램 등을 이용해 시스템의 구조를 표현한다.
- 행위적 관점: 시스템의 동적인 동작과 상호작용을 설명하는 관점으로, 시간 흐름에 따른 객체 간의 상호작용을 중점으로 다룬다. 시퀀스 다이어그램, 상태 다이어그램 등을 통해 행위를 표현한다.
- 배포적 관점: 시스템을 실제 물리적 환경에 배포하는 방식을 다루는 관점으로, 네트워크 환경에서의 컴포넌트 배포와 하드웨어 리소스 사용을 고려한다. 배포 다이어그램을 통해 서버와 클라이언트 간의 배치 구조를 표현한다.
4. ISO 25010에서 정의하고 있는 소프트웨어 기능 외적인 품질은 무엇이 있는지 나열하고 설명하라 (품질 특성 나열과 설명)
ISO 25010에서 소프트웨어의 기능 외적인 품질 특성은 신뢰성, 사용성, 효율성, 유지보수성, 이식성 등이다.
- 신뢰성: 소프트웨어가 오랜 시간 동안 오류 없이 안정적으로 작동하는 능력을 의미한다. 시스템의 가용성, 오류 허용 범위 등을 포함한다.
- 사용성: 사용자가 소프트웨어를 쉽게 배우고 사용할 수 있는 정도로, 직관적인 인터페이스와 접근성을 포함한다.
- 효율성: 소프트웨어가 자원(시간, 메모리)을 얼마나 효과적으로 사용하는지를 나타내며, 반응 속도와 처리 효율을 포함한다.
- 유지보수성: 소프트웨어가 변경 요구에 따라 수정하기 쉬운 정도로, 코드 구조의 이해도와 수정 용이성을 포함한다.
- 이식성: 소프트웨어가 다양한 환경에서 쉽게 설치되고 실행될 수 있는 능력을 의미하며, 다양한 운영체제나 하드웨어에서 호환성을 보장한다.
5. 추상화, 캡슐화, 모듈화의 원리란 무엇이며 서로 어떤 관계인지 설명하라 (세 원리 설명과 관계)
- 추상화: 복잡한 시스템에서 불필요한 세부 사항을 숨기고, 중요한 부분만을 드러내는 원리로, 핵심적인 기능과 속성만을 집중하여 설계한다.
- 캡슐화: 객체의 내부 구현을 감추고 외부에 필요한 부분만 인터페이스로 제공하여, 객체 간 상호작용에서 데이터 접근을 제어하는 원리이다.
- 모듈화: 프로그램을 독립적인 단위로 나누어 관리 가능한 모듈로 구성하는 원리로, 각 모듈은 독립적인 기능을 수행하며 다른 모듈과 결합하여 시스템을 구성한다.
세 원리는 서로 보완적인 관계에 있다. 추상화는 복잡한 시스템을 이해하기 쉽게 하고, 캡슐화는 각 객체나 모듈의 독립성을 보장하여 보안과 안정성을 강화하며, 모듈화는 시스템의 구조를 논리적으로 나누어 유지보수성을 높인다. 이들은 함께 객체 지향 설계의 기본적인 구조를 구성하여 유연하고 확장성 있는 시스템을 만든다.
7. 다음과 같은 특성을 갖는 모듈 간의 결합도는 무엇인가 (결합도 유형 식별)
- 모듈 p가 q 내부의 변수 값을 수정한다: 내용 결합 - 모듈이 다른 모듈의 내부 변수나 데이터를 직접 수정할 때 발생하는 결합으로, 서로 강한 의존 관계를 가지게 되어 시스템의 독립성을 저하시킨다.
- p가 q의 레이블로 직접 분기한다: 제어 결합 - 한 모듈이 다른 모듈의 특정 제어 흐름에 직접적으로 개입할 때 발생하는 결합으로, 모듈 간의 상호작용이 직접적이므로 높은 결합도를 나타내어 유지보수가 어렵게 된다.
'[ Computer Science ] > SW Engineering' 카테고리의 다른 글
[소프트웨어공학] 소프트웨어 아키텍처 패턴 (3) | 2024.11.20 |
---|---|
[SW Engineering] 소프트웨어 공학의 모든 것 연습문제 5장 서술형 (6) | 2024.10.28 |
[SW Engineering] 소프트웨어 공학의 모든 것 연습문제 4장 서술형 (2) | 2024.10.28 |
[SW Engineering] 소프트웨어 공학의 모든 것 연습문제 3장 서술형 (5) | 2024.10.28 |
[SW Engineering] 소프트웨어 공학의 모든 것 연습문제 2장 서술형 (1) | 2024.10.28 |
[SW Engineering] 소프트웨어 공학의 모든 것 연습문제 1장 서술형 (7) | 2024.10.28 |