Cohe

6장 설계 원리 본문

소프트웨어 공학

6장 설계 원리

코헤0121 2023. 3. 12. 15:57
728x90

6-1 시스템 아키텍처에 대한 설명으로 옳지 않는 것은? ①

  1. 물리적 구성을 기반으로 정의되는 시스템의 상세 설계도이다.
  2. 이해 당사자들과의 상호 이해, 협상 동의 및 의사 교환을 위한 도구이다.
  3. 프로젝트 초기의 설계 결정으로 시스템 개발 및 유지보수 전반에 걸쳐 지속적인 영향력을 갖는다.
  4. 시스템에 관련 있는 이해 당사자들의 요구사항을 고려하여 정의하여야 한다.

6-2 비기능적 요구사항을 고려한 아키텍쳐 설계로 가장 적합하지 않은 것은? 2. ④

  1. 가용성이 중요한 요구사항일 경우 아키텍처에 여분의 구성요소들이 포함 되도록 설계하여 시스템을 중단 없이 구성요소를 대치하고 갱신 할 수 있게 한다.
  2. 보안성이 중요한 요구사항일 경우 계층구조의 아키텍쳐를 사용하여 가장 중요한 자산들을 가장 중요한 내부의 계층에서 보호하고 이 계층에 높은 수준의 보안 인증을 적용한다.
  3. 안전성이 중요한 요구사항일 경우 안전에 관련된 오퍼레이션 모두를 하나의 서브시스템이나 소수의 서브시스템 내부로 국한시키도록 설계한다.
  4. 성능이 중요한 요구사항일 경우 아키텍쳐는 중요 오퍼레이션을 가능한 많은 서브시스템으로 분할 시킨다.

6-3 설계 과정을 올바로 나열한 것은? 3. ④

 👉 ㄱ 서브시스템. 인터페이스 명세 ㄴ 목표설정 ㄷ 스타일 결정 ㄹ 아키텍처 설계 검토

 

  1. ㄱ ㄴ ㄹ ㄷ
  2. ㄱ ㄴ ㄷ ㄹ
  3. ㄴ ㄷ ㄹ ㄱ
  4. ㄴ ㄷ ㄱ ㄹ

6-4 설계 원리에 대한 설명 중 옳지 않은 것은? 4. ②

  1. 추상화는 복잡한 자료. 모듈. 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것이다.
  2. 정보 은닉은 제한된 방법으로의 접근 만을 허용해 잘못된 값이 저장되지 않도록 해고, 실수가 잘 발견되지 않도록 하려는 원리다.
  3. 모듈화는 복잡한 시스템을 세분화 된 구성 요소로 정의하여 개발자와 고객이 더 쉽게 이해할 수 있고 다루기 쉬운 구조로 분할하는 개념이다.
  4. 캡슐화는 서비스를 수행하는 자료와 함수를 묶어 핵심 만을 노출시키고 어떻게 서비스를 제공하는지 자세한 것을 숨기는 개념이다.

6-5 모듈 결합도(coupling)에 대한 설명으로 옳은 것은? 5. ④

  1. 모듈 칸에 의존도가 클수록 결합도는 낮아진다
  2. 모듈 간의 제어 요소(function code. flag) 를 전달하는 것은 전역변수를 사용하는 것보다 바람직하지 않다
  3. 전역변수를 많이 사용할 경우 프로그램 코드가 간단해지므로 유지보수가 편리해진다
  4. 모듈 간의 goto 문 사용은 내용 결합(content coupling) 유발할 수 있다.

6-6 다음 중 절차적 응집력에 대한 설명으로 잘못된 것은? 6. ②

  1. 여러 기능은 순서대로 실행된다.
  2. 모듈 내부의 어떤 기능 요소의 출력 데이터가 다른 기능 요소의 입력 데이터로 제공한다.
  3. 처리 기능보다는 시행 순서에 의해 연결된다.
  4. 전달 데이터와 반환 데이터 간에 관련이 없다

6-7 배열 레코드 구조체 등을 매개변수로 사용하는 모듈 사이의 결합도는? 7. ②

  1. 데이터 결합도(Data Coupling)
  2. 스탬프 결합도(stamp Coupling)
  3. 제어 결합도.(Control Coupling)
  4. 내용 결합도(Content Coupling)

6-8 소프트훼어 “원자시 모들 내부의 응집도 4정을 위한 응麟에 관한 예이다 바르게 연결된 것은? 8. ④

  1. 논리적 응집 - 함수 집합을 받아 미지수를 풀어내는 함수
  2. 계층적 응집 - 메시지 또는 데이터 전송을 위한 서비스
  3. 순자적 응집 - 화면을 지우고 팝업창을 피우는 모듈
  4. 교환적 응집 - Employee 리는 클래스의 데이터를 조작, 저장, 갱신하는 모듈

6-9 다음은 소프트웨어의 구성 요소인 모듈의 계층적 구성을 나타내는 프로그램 구조도이다. 모듈 G에서 펜인(fan-in)과 팬 아웃(fan-put)은? 9. ④

 

6- 10. 다음 각 모듈에 대한 응집도를 판단한 것으로 적절하지 않는 것은? 10. ③

  1. SignOn: 이 모듈은 사용자 암호를 받아 검사하고 Snap-Shot 파일을 준비시킨다 - 절자적 응집
  2. Producesummaries: NewSubscriber. Renewals. Expired—Subscriptions의 요약 보고서를 만든다. - 논리적 응집
  3. FormatDayReport : 출력을 위한 DaySummary 자료를 출력한다. - 교환적 응집
  4. ProcessWithdrawal : 수강 취소원을 처리한다. 수강 학생 기록부에서 학생 이름을 빼고 등록금 파일을 변경한다. - 순자적 응집

6-11. 객체지항 설계 기법 중 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다 라는 설계 원칙으로 옳은 것은? 11.④

  1. 단일 책임의 원칙
  2. 개방 폐쇄의 원칙
  3. 의존 관계 역전의 원칙
  4. 인터페이스 분리의 원칙

6-12 그림과 같이 서비스 구현 클래스의 a(), b() 연산을 사용하는 클라이언크 클래스가 서비스 구현 클래스에 직접 의존하는 관계에서 클라이언트 클래스가 서비스 인터페이스에 의존하고 서비스 구현 클래스는 서비스 인터페이스를 구현하는 것으로 설계를 번경하였다. 다음중 이와 가장 관련이 깊은 SOULD 설계원칙은? 12. ③

 

 

  1. 단일 책임원칙
  2. 리스코프 치환원칙
  3. 의존관계 역전 원칙
  4. 인터페이스 분리 원칙

6-13 클래스 설계 원칙에 대한 설명으로 옳은 것은? 13. ②

  1. 인터페이스 분리(Interface Segregation) 원칙: 추상 클래스나 인터페이스에 의존하지 않고 자주 변경되는 클래스에 의존해야 한다.
  2. 개방-폐쇄(Open-closed) 원칙: 클래스는 확장(extension)에 대해서는 열려있어야 하며 변경(change)에 대해서 닫혀있어야 한다.
  3. 리스코프 교체(Liskov Substitution) 원칙: 여러 개의 책임을 가진 클래스는 하나의 책임을 가진 클래스로 대체되어야 한다.
  4. 의존 관계 역전(Dependency Inversion) 원칙: 클라이언트는 자신이 사용하는 메소드와 의존 관계를 갖지 않도록 해야 한다.

6-14 다음 설명에 해당하는 소프트웨어 설계 원리는? 14. ③

 👉 범용적 목적의 단일 인터페이스보다는 글라이언트별 인터페이스를 다수 갖도록 설계한다.

 

  1. CCP(Common Closure Principle)
  2. OCP(Open-Closed Principle)
  3. ISP(1nterface Segregation Principle)
  4. DIP(Dependency Inversion Principle)

6-15 직사각형과 정사각형을 처리하기 위한 클래스 셜계에서 위반된 원리는 무엇인가? 15. ③

  1. 단일 책임의 원리
  2. OCP의 원리
  3. 리스코프 교제의 원리
  4. 의존 관계 역전의 원리

6-16 다음 설계에 적용된 OCP 원리를 설명한 것 중 옳지 않은 것은? 16. ④

  1. Logon은 Dia10 함수 구현의 수정에 닫혀 있다.
  2. Modem의 종류는 확장에 열려 있다.
  3. Send(char) 함수의 구현은 확장에 열려 있다.
  4. Logon은 Modem의 확장에 대하여 닫혀 있다.

 

6-17 다음과 같이 내와 ApplicatonLayer를 연관시키기 위하여 인터페이스를 도입하였다. 여기에 적용된 설계 원리는 무엇인가? 17. ②

 

 

  1. 단일 책임의 원리
  2. OCP의 원리
  3. 리스코프 교체의 원리
  4. 의존 관계 역전의 원리

6-18 응집도를 강한 것부터 나열할 때, ㄱ~ㄷ에 들어갈 용어를 바르게 연결 한 것은? 18. ①

 👉 기능책 용집-교환책 용집-(㉠)-㉡-㉢- 우연적 응집

 

  1. 절차적 응집 -시간적 응집-논리적 응집
  2. 절차적 응집 논리적 응집 시간적 응집
  3. 논리적 응집 시간적 응집 절차적 응집
  4. 논리적 응집 절차적 응집 시간적 응집

6-19 다음 설계 메트릭 중 얼마나 복잡한 지를 나타내는 측정 방법으로 거리가 먼 것은? 19. ④

  1. (모듈의 팬 아웃 개수)^2
  2. (입력 및 출력 변수의 개수) / (팬 아웃 + 1)
  3. 모듈 안의 분기 + 1
  4. 클래스의 메소드 개수 + 그 클래스의 메소드가 호출하는 메소드의 개수

6-20. 설계 매트릭과 설계 원리에 대한 설명으로 옳지 않은 것은?④

  1. 클래스 당 가중 메소드 값이 들수록 복잡한 것이다.
  2. 클래스 사이의 결합이 클수록 의존도는 크다
  3. 클래스의 책임은 메소드의 개수와 메소드가 호출하는 메소드의 개수로 측정 할 수 있다
  4. 클래스의 안의 속성을 공유하지 않는 메소드의 쌍의 수가 적을수록 응집도가 올라간다

6-21 설계 작업은 기본 구조 설계와 상세 설계로 나는 수 있다. 각 단계에서 하는 일을 나누어 설명하라

 

 

6-22 컴포넌트와 모듈. 서브시스템 세 가지 개념을 설명하고 어떤 차이가 있는지 기술하라

컴포넌트 : 명백한 역할을 가지고 있으며 독립적으로 존재할 수 있는 시스템의 부분, 같은 기능을 가진 컴포넌트로 대체 가능함. 재사용이 가능하게 설계 됨 특정 목적도 수행함

모듈 : 프로그래밍 언어의 문법 구조에서 정의된 컴포넌트를 의미 모듈은 구체적인 프로그래밍 언어로 작성된 문법 단위로 한정하여 사용

서브시스템 : 여러 다른 방법들로 구현될 객체 컴포넌트 모듈보다는 더 추상적 정의 가능한 책임과 목적을 가지며 소프트웨어나 하드웨어로 구성된 논리적 개체 컴포넌트들이 변하거나 교체되더라도 지속적으로 존재함. 큰 시스템의 일부분으로 유한한 인터페이스를 가짐

 

6-23. 아키텍처 설계는 세 가지 관점이 있다. 무엇인지 나열하고 각각의 관점을 실명하라.

 

 

6-24 ISO 25010에서 정의하고 있는 소프트웨어의 기능 외적인 품질은 무엇이 있는지 나열하고 설명하라

6-25 추상화 캡슐화. 모둘화의 원리란 무엇이며 서로 어떤 관계인지 설명하라.

추상화 : 시스템의 핵심 특성에 초점을 두어 하나의 큰 시스템을 분할

캡슐화 : 분할된 핵심 정보만을 노출시켜 내부 변경에 대한 영향을 적게 받음

모듈화: 적절한 수준으로 분할하여 독립적인 모듈로 구성

 

 

6-26 다음은 모듈 StoreCartManager 클래스에 담긴 책임을 분석하여 응집도를 낮추도록 분할하라.

class Storecartmanager ( 
	public static void 1%)datePmductInCart(int productNo, int amountTota1) 
	public static void DeleteproductlnCart(int ProductNo) 
	public static StoreCart Getcart() 
	public static void CopyCartAcrossToogin(int loginId) 
	public static Guid GetGJiQeryString() 
	private static int 
	private static void SetkbLogonIÖuryString(int id) 
	private static StoreCart GetCartBßuid(Guid guid) 
	private static StoreCart GetCartByCIientId(int kbLogonId)
}

6-27 다음과 같은 특성을 갖는 모듈간의 결합도는 무엇인가?

내용 결함

  • 모듈 P가 모듈 Q 내부의 변수 값을 수정한다
  • 모들 P는 모듈 Q의 레이블로 직접 분기한다.

6-28 다음의 설계를 결합도 유형에 따라 분류하라.

(1) 클래스 CourseSection은 public으로 선언된 변수 rmnClassSize와 maxClassSize 두 개가 있다. 대학의 행정은 때때로 변한다. Student와 Registration 클래스에 있는 대부분의 메소드는 이 변수들을 접근한다.

공통 결합

(2) 사용자 인터페이스 클래스가 여러 가지 Java 클래스를 import하고 있다. 예를 들면 그래픽을 그리고, UI 컨트를을 생성하는 등의 유틸리티가 포함되어 있는 클래스를 import한다.

제어 결합

(3) 시스템에 Address라고 불리는 클래스가 있다. 주소를 구성하는 네 개의 public 변수가 있다. Person이나 Airport와 같은 다른 클래스들이 주소 객체의 각 항목을 직접 변경한다. 또한 여러 메서드들이 Address를 매개변수로 선언하고 있다.

스탬프 결합

 

 

6-29 Gmail과 Yahoo메일로 서비스에 등록된 이메일 계정을 초기설정(이름과 패스워드 할당)하고 메일을 보내고 받을 수 있는 클라이언트 프로그램을 다음과 같이 설계하였다. 이 설계에서 단일 책임의 원리를 위배한 곳을 지적하고 설계를 수정하라.

6-30 다음 프로그램의 LCOM(메소드의 응집 결핍)값을 구하라.

다음 프로그램의 LCOM(메소드의 응집 결핍)값을 구하라.

public class A (

	private int f1;
	private int f2;
	private int f3;
	private int f4;

public void methodl() {

	// uses fl
	// uses f2

public void method2() {
	// uses f2
	// uses f3
	}
public void method3() { 
	// uses f3 
	// uses f4
	}
}

'소프트웨어 공학' 카테고리의 다른 글

7장 아키텍처 설계와 패턴  (1) 2023.03.12
5장 요구 모델링  (0) 2023.03.12
4장 요구분석 연습문제  (0) 2023.03.01
4장 설계 원리  (1) 2023.03.01
3장 프로젝트 관리와 계획 연습문제  (0) 2023.03.01