쉽게 배우는 소프트웨어 공학 6장
내가 직접 푼거라 오답일수도 있음
- 연습문제
1. 소프트웨어 아키텍처의 공통된 특징을 설명한 것 중 옳지 않은 것은?
① 개발할 소프트웨어에 대한 전체 구조를 다룬다.
② 구성 요소들이 인터페이스를 통해서 어떻게 상호작용하는지를 정의한다.
③ 설계 시 적용되는 원칙과 지침이 있어야 한다.
④ 세부내용도 자세히 다루는 것이 좋다.
답 : 4
설명 : 세부내용보다는 중요내용(설계자가 주관적으로 판단하고 결정)만 다룸
2. 소프트웨어 아키텍처 설계 시 고려사항으로 적절하지 않은 것은?
① 의사소통 도구로 활용할 수 있어야 한다.
② 구현에 대한 제약 사항까지 정의할 필요는 없다.
③ 품질 속성을 결정해야 한다.
④ 재사용할 수 있게 설계해야 한다.
답 : 2
설명 : 구현에 대한 제약 사항(개발비용, 기간, 조직의 역량 등)을 정의해야함
3. SEI 에서 제시하는 SAiP(Software Architecture in Practice) 의 품질 속성 분류로 관계가 가장 적은 것은?
① 시스템 품질 속성
② 비즈니스 품질 속성
③ 아키텍처 품질 속성
④ 설계 품질 속성
답 : 4
설명 :
시스템 품질 속성 - 가용성, 변경 용이성, 성능, 보안성, 사용성, 테스트 용이성
비즈니스 품질 속성 - 시장 적시성, 비용과 이익, 예상 시스템 수명, 목표 시장, 신규 발매(공개) 일정, 기존 시스템과의 통합
아키텍처 품질 속성 - 개념적 무결성, 정확성과 완전성, 개발 용이성(구축 가능성)
4. 시스템이 운용될 수 있는 확률로 사용중인 시스템이 장애 발생 없이 서비스를 제공할 수 있는 능력을 나타내는 품질 속성은?
① 가용성
② 변경 용이성
③ 성능
④ 사용성
답 : 1
설명 :
가용성
- 시스템이 실패 없이 운용될 수 있는 확률로 시스템이 장애 발생 없이 서비스를 제공할 수 있는 능력
- 가용성이 99.99%라면 제대로 동작하지 않을 확률이 0.01%라는 의미
- 하드웨어는 가용성을 높이기 위해 이중화 설계를 함
- 이중화 설계 : 하나의 시스템이 중단되어도 바로 또 다른 시스템이 가동
5. 학사관리시스템에 적합한 소프트웨어 아키텍처 스타일은?
① 클라이언트-서버 스타일
② 데이터 중심형 스타일
③ 계층 모델
④ 데이터 흐름 모델
답 : 2
설명 :
데이터 중심형 스타일
- 주요 데이터가 레포지토리에서 중앙 관리된다
- 레포지토리와 여기에 접근하는 서브시스템으로 구성
- 시스템에서 공동으로 활용하는 데이터는 레포지토리에 보관
- 대량의 데이터를 공유하는 은행 업무 시스템에 매우 유용
- 서브시스템과 레포지토리의 결합도가 높아 레포지토리를 변경하며녀 서브시스템에 영향을 줄 수 있다는 단점
6. 파이프 필터 형태의 소프트웨어 아키텍처에 대한 설명으로 옳은 것은?
① 노드와 간선으로 구성된다.
② 서브시스템이 입력 데이터를 받아 처리하고 결과를 다음 서브시스템으로 넘겨주는 과정을 반복한다.
③ 계층 모델이라고도 한다.
④ 3개의 서브시스템 모델(모델, 뷰, 제어)로 구성되어있다.
답: 2
설명 :
1 - 피어 투 피어 스타일에 대한 설명. 멀티스레딩이 특징
2 - 데이터 흐름(파이프 필터) 스타일에 대한 설명
3 - 아님
4 - MVC스타일에 대한 설명
7. 파이프 필터 형태의 소프트웨어 아키텍처에 대한 설명으로 옳은 것은?
① 컴포넌트 사이에 복잡한 상호작용이 필요한 시스템에 가장 적합하다.
② 사용자가 개입해 데이터 흐름을 전활할 경우에 사용된다.
③ 서브시스템이 입력 데이터를 받아 처리하고 결과를 다른 시스템에 보내는 작업이 반복된다.
④ 모든 필터가 동시에 작동하는 병렬 처리 형식이다.
답 : 3
설명 :
1 - 아마 계층 스타일 아키텍처의 캡슐화,응집,결합 에 대한 설명
2 - 아마 MVC 스타일 아키텍처에 대한 설명인듯
3 - 데이터 흐름 스타일 (파이프 필터 스타일 아키텍처) 에 대한 설명
4 - 아마 피어 투 피어 스타일 설명일꺼임
8. 다음 내용은 아키텍처 '4+1' 관점 중 어떤 것에 해당하는가?
[ 물리적 시스템에서 사용하는 소프트웨어 시스템의 모듈들(원시코드, 데이터파일, 컴포넌트, 실행 파일 등으로 구성)이 서로 어떤 연관 관계를 맺고 또 설계와 어떻게 연결 관계를 나타내는지에 관심이 있다. ]
① 시나리오 관점
② 물리적 관점
③ 개발 관점
④ 프로세스 관점
답 : 3
설명 :
물리적 관점 - 시스템에서 필요한 하드웨어 환경을 포함해 시스템을 구성하는 처리 장치 간의 물리적인 배치에 초첨
시나리오 관점 - 최종 사용자가 인식하는 시스템의 기능을 의미, 시스템이 사용자에게 제공하는 기능에 주목하는 관점
논리적(디자인) 관점 - 시스템의 기능을 제공하기 위해 필요한 클래스나 컴포넌트 및 이들의 관계에 초점
9. 소프트웨어 아키텍처의 4+1 관점에 대한 설명으로 옳지 않은 것은?
① 시나리오 관점에서는 외부 행위자에 의해 인식되는 시스템의 기능 요구사항을 보여주는 데 초점을 둔다.
② 논리적 관점에서는 계층구조, 제약 사항, 코드 재사용 등과 같은 시스템 구현을 위한 요건을 보여주는데 초점을 둔다.
③ 프로세스 관점에서는 독자적인 제어 스레드를 가질 수 있는 액티브 클래스에 초점을 둔다.
④ 물리적 관점에서는 물리적인 시스템을 구성하고 있는 부분의 분산 형태와 설치에 초점을 둔다.
답 : 2
설명 : 2번은 개발 관점에 대한 설명
10. 다음 설명에 해당하는 것은?
[ 비슷한 유형의 응용 프로그램들을 위해 재사용이 가능한 아키텍처와 협력하는 소프트웨어 산출물의 통합된 집합으로, 특정 클래스의 재사용뿐만 아니라 응용 프로그램을 위한 핵심 아키텍처를 제공해 설계의 재사용을 지원한다. ]
① 컴포넌트
② 웹서비스
③ 프레임워크
④ 클래스 라이브러리
답 : 2
설명 :
프레임워크 - 소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합
11. 아키텍처 스타일과 이를 기반으로 하는 시스템의 관계를 짝지은 것으로 가장 관계가 적은 것은?
① 파이프 필터 구조 - 스프레드시트 시스템
② 계층 구조 - OSI 참조 모델
③ 클라이언트 서버 구조 - 인터넷 쇼핑몰
④ 저장소 구조 - 급여 시스템
답 : 1
설명 : 걍 딱봐도 아님
12. MVC(model-view-controller) 아키텍처에서 Model 의 역할로 옳은 것은?
① 이벤트 형태로 사용자 입력을 처리한다.
② 처리 결과 및 콘텐츠를 사용자에게 보여주는 기능을 수행한다.
③ 애플리케이션과 관련된 데이터 및 데이터 처리에 대한 로직을 가지고 있다.
④ 최신 데이터를 가져와 표시된 정보를 갱신한다.
답 : 3
설명 : 네 뭐 그렇다네요
13. 소프트웨어 아키텍처를 명시적으로 설계하고 문서화를 통해서 얻을 수 있는 장점과 가장 관련이 적은 것은?
① 소프트웨어 개발 참여자 간의 의사소통 도구
② 시스템 분석
③ 대규모 재사용
④ 구현의 상세화
답 : 4
설명 :
명시적 아키텍처의 장점
- 대규모 재사용
- 시스템 분석
- 이해 관계자와 커뮤니케이션
14. RUP의 4+1 관점을 나타내는 용어가 아닌 것은?
① logical view
② process view
③ implementation view
④ deployment view
답 : 3
설명 : 이게먼데
15. 개발자와 시스템 통합자를 위한 것으로 실제 구동 환경을 살펴봄으로써 논리적 관점과 같이 시스템 내부의 구조(클래스 간의 관계, 클래스의 동작, 클래스 간의 상호작용)에 초점을 맞추는 관점은?
① 시나리오 관점
② 논리적 관점
③ 프로세스 관점
④ 개발 관점
답 : 3
설명 : 그러나 모든 클래스에 관심이 있는게 아니라 독자적인 제어 스레드를 가질 수 있는 클래스에 초점을 맞춘다.
16. 객체지향 프로그램에서 데이터를 추상화 하는 단위는?
① 메서드
② 클래스
③ 캡슐화
④ 집단화
답 : 2
설명 :
매서드 - 객체 지향 시스템에서 전통적인 시스템의 함수 또는 프로시저에 해당하는 연산기능객체가 실행 해야할 구체적인 연산
클래스 - 하나 이상의 유사한 객체들의 모임, 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화(모델링)을 의미
17. 객체지향 기법에서 클래스들 사이의 '부분-전체' 관계 또는 '부분'의 관계로 설명되는 연관성을 나타내는 용어는?
① 일반화
② 추상화
③ 캡슐화
④ 집단화
답 : 일반화
설명 : 일반화 - 공통점을 가지고 있는 여러 개의 클래스를 묶어서 새로운 클래스를 만들고 공통적인 이름을 붙인 것
아래에서 위로 추상화 되는 것을 일반화, 반대로 위에서 아래로 구체화 하는 것을 특수화 라고 한다.
18. 아래의 UML 모델에서 '차' 클래스와 각 클래스의 관계로 옳은 것은?
①
②
③
④
답 : 일반화
설명 : 아래에서 위로 향하고 있으니까 일반화 관계
19. 객체지향 소프트웨어 공학에서 하나 이상의 유사한 객체를 묶어 하나의 공통된 특성으로 표현한 것은?
① 트랜지션
② 클래스
③ 시퀸스
④ 서브루틴
답 : 2
20. 다중성(multiplicity)의 기호에 대한 설명으로 옳지 않은 것은?
① 3..6 : 3부터 6까지의 모든 숫자를 나타낸다
② 2. 4. 6 : 2 또는 4 또는 6을 나타낸다
③ 1. 4..6 : 1또는 4또는 5또는 6을 나타낸다
④ 0..1 : 0 또는 1을 나타낸다
답 : 1
설명 : 그렇다네요
21. 클래스 간의 관계에 대한 설명으로 옳지 않은 것은?
① 연관 관계의 다중성은 두 클래스의 연관 관계에서 실제로 연관을 가지는 객체의 수를 나타낸다.
② 집합 관계는 전체와 그 객체의 구성요소 사이의 관계를 나타내며 whole-part 관계를 나타낸다
③ 일반화 관계는 일반적인 클래스와 구체적인 클래스간의 관계, 즉 상속 개념을 나타내며 'is a kind of' 의 관계를 나타낸다.
④ 의존 관계는 하나의 클래스에 있는 맴버 함수의 인자가 변해도 다른 클래스에 영향을 미치지 않는 관계를 의미한다.
답 : 4
설명 :
의존관계 - 하나의 클래스가 또 다른 클래스를 사용해 영향을 미치는 관계
22. 다음에 해당하는 용어로 적합한 것은?
[ 모양은 상속 구조처럼 생겼지만 상속 관계를 맺을 수 없고 인터페이스 클래스는 스테레오 타입으로 <<interface>> 를 사용하며 하위 클래스와 연관은 일반화 관계와 다르게 점선으로 나타낸다. 또 화살표의 머리 부분은 하위 클래스에서 상위 클래스로 향하고 있고 속이 빈 삼각형 모양이다. ]
① 추상화 관계
② 의존 관계
③ 실체화 단계
④ 그룹 단계
답 : 3
23. 다음의 클래스 다이어그램과 같은 관계에 대항하는 것은?
① 합성관계
② 집합관계
③ 실체화 단계
④ 일반화 관계
답 : 일반화 단계
실선 속이 빈 삼각형 화살표이고 아래에서 위로 향하고 있으니까 일반화 단계이다.
만약 속이 빈 삼각형이 아니라 속이 빈 마름모였다면 집합관계가 됬을것이다.
속이 채워진 마름모라면 합성관계다
24. 상위 클래스의 객체가 들어갈 자리에 하위 클래스의 객체를 넣어도 문제없이 잘 작동함을 나타내는 클래스 설계 원칙은?
① 인터페이스 분리 원칙
② 의존 관계 역전 원칙
③ 개방 폐쇄 원칙
④ 리스코프 교체 원칙
답 : 4
설명 :
리스코프 교체 원칙 - 상위 클래스의 객체는 언제나 자신의 하위 클래스의 객체로 교체할 수 있어야 한다.
- 상위 클래스의 객체가 들어갈 자리에 하위 클래스의 객체를 넣어도 문제없이 잘 작동해야 함
- 리스코프 교체 원칙은 상속과 재정의의 중요성을 강조함
- LSP를 지키는 클래스 설계를 위해서는 상속 구조를 만들 때 상위 클래스 추상 클래스와 추상 매서드여야 함
25. 다음 내용이 설명하는 객체 지향 설계 원칙은?
[ - 클라이언트는 자신이 사용하지 않은 매서드와 의존관계를 맺으면 안된다.
- 클라이언트는 사용하지 않은 인터페이스 때문에 영향을 받아서는 안된다. ]
① 인터페이스 분리 원칙
② 단일 책임 원칙
③ 개방 폐쇄 원칙
④ 리스코프 교체 원칙
답 : 1
설명 :
인터페이스 분리 원칙 - 클라이언트는 자신이 사용하지 않는 매서드와 의존 관계를 맺으면 안된다.
- 다수의 클라이언트가 일반적인 인터페이스 하나를 같이 사용하는 것보다 각각의 클라이언트가 필요한 대로 여러 개의 구체적인 인터페이스로 분리해 사용하는 것이 더 낫다는 의미
- 무조건 모든 클라이언트에게 각각의 인터페이스를 제공하는 의미가 아님
- 각각의 클라이언트가 필요로 하는 메서드군이 존재할 때 인터페이스를 분리
27. 객체지향 설계 원칙 중에서 서브타입(상속받은 하위 클래스)은 어디에서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 함을 의미하는 원칙은?
① ISP (Interface Segregation Principle)
② DIP (Dependency Inversion Principle)
③ LSP (Liskov Substitution Principle)
④ SRP (Singlle Responsibility Principle)
답 : 3
설명 :
28. 그림과 같이 서비스 구현 클래스의 a() 와 b() 연산을 사용하는 클라이언트 클래스가 서비스 구현 클래스에 직접 의존하는 관계에서 클라이언트 클래스가 서비스 인터페이스에 의존하고 서비스 구현 클래스는 서비스 인터페이스를 구현하는 것으로 설계를 변경했다. 다음 중 이와 가장 관련이 깊은 SOLID 설계 원칙은?
① 단익 책임 원칙
② 리스코프 교체 원칙
③ 의존 관계 역전 원칙
④ 인터페이스 분리 원칙
답 : 4
설명 : 맞는지 모르겟음
29. 다음중 클린 코드 작성 원칙으로 거리가 먼 것은?
① 누구든지 쉽게 이해하는 코드 작성
② 중복이 최대화된 코드 작성
③ 다른 모듈에 미치는 영향 최소화
④ 단순 명료화 코드 작성
답 : 2
설명 : 필요?
30. 다음에서 설명하는 클린 코드 작성 원칙은?
[ - 한 번에 한 가지 처리만 수행한다.
- 클래스/매서드/함수를 최소 단위로 분리한다. ]
① 다형성
② 단순성
③ 추상화
④ 의존성
답 : 2
설명 : ㅁ?ㄹ
31. 아키텍처의 필요성에 대해 간략히 작성하시오
복잡하고 규모가 큰 대형 프로젝트 진행 시 전체 시스템 구조 구성과 각 구성 요소간 관계를 명확히 해주는 아키텍처가 필요하다.
32. 소프트웨어 아키텍처의 공통된 특징을 간략히 작성하시오
- 소프트웨어의 골격을 나타내는 추상화된 전체 구조 제공
- 소프트웨어를 이루고 있는 여러 구성 요소(서브시스템, 컨포넌트)를 다룸
- 인터페이스를 통해 소프트웨어의 구성 요소가 어떻게 상호작용 하는지를 정의
- 세부내용보단 중요내용만 다룸
- 설계에 적용되는 원칙과 지침이 있다.
33. 시스템 품질 속성 중에서 '사용성' 을 높일 수 있는 예를 작성하시오
- 시스템을 사용할 대 발생할 수 있는 여러 가지 상황을 극복 할 수 있도록 이를 반영해 아키텍처 설계 작업을 해야함
- 시스템의 도움말 기능은 사용자에게 실제 도움을 줄 수 있어야 함
- 사용자가 원치 않는 상황에 놓인 경우에도 친숙한 사용자 인터페이스를 제공해 당황하지 않도록 설계해야 함
- 사용자의 실수에도 오류의 영향을 최소화 하도록 되돌리거나 취소 기능을 제공해야 함
34. MVC 모델의 장점을 간략히 작성하시오
느슨한 결합, 확장성 : 각 컴포넌트의 결합이 약해 다른 부분에 영향을 주지 않고 수정할 수 있다.
다수의 다른 뷰 : 하나의 모델을 위하여 다수의 다른 뷰를 쉽게 제공할 수 있다.
비동기 : 비동기 기술을 이용하여 애플리케이션을 빠르게 로딩할 수 있고 개발자도 각 컴포넌트를 독립적으로 빠르게 개발 할 수 있다.
35. 아키텍처 스타일을 이해할 수 있는 일상에서의 예를 만들어 보시오.
동유럽식 건축 양식, 한국식 한옥, 현대식 양옥 등 건축양식등을 시대 지역 별로 묶어서 각 스타일 별로 의사소통하기에 편리하다.
36. 아래 프로그램에 대한 클래스 다이어그램을 작성하시오.
[
class PC {
private CPU cpu;
private RAM[] rams;
private ROM rom;
public PC() {
this.cpu = new CPU();
this.rams = new RAM(2);
this.rom = new ROM();
}
...
}
]
답 : 합성관계로 PC 아래 3개 노드를 속이 채워진 마름모 로 연결한다
37. 포함 관계의 예를 찾아 다이어그램 형태로 표현하시오 ( 단, 노트북 예는 제외)
자동차 - 유리, 엔진, 바퀴
38. 다음 설명에 적합한 용어는?
- 원의 면적을 구하는 getArea() 함수를 가진 객체
- 사각형의 면적을 구하는 getArea() 함수를 가진 객체
- 삼각형의 면적을 구하는 getArea() 함수를 가진 객체
- 원, 사각형, 삼각형은 getArea() 함수를 가지고 있으므로 면적을 구하려면 getArea() 메세지를 받으면 수행된다. 그러나 각각의 함수에서 면적을 구하는 방법은 모두 다를 것이다.
?
39. 다음 사항을 가장 잘 표현한 클래스 다이어그램은?
ㅁㄴㅇㄹ
40. 아래의 프로그램에서 1~4 문장을 수행할 때 오류가 발생하지 않는 것을 모두 고르시오
abstract class A {
}
class B extends A {
}
...
A inst1 = new A(); //1
A inst2 = new B(); //2
B inst3 = new B(); //3
B inst4 = new A(); //4
답 : 1 3 4
잘 모르겠다...
'IT etc > 소프트웨어공학' 카테고리의 다른 글
C10. 품질 연습문제 (0) | 2022.06.14 |
---|---|
C9. 테스트 연습문제 (0) | 2022.06.14 |
C8. 구현 연습문제 (0) | 2022.06.13 |
C7. 디자인패턴 연습문제 (1) | 2022.06.13 |