본문 바로가기

학교 수업/소프트웨어 공학

6장 주관식 문제 풀이!

반응형
  1. 설계 작업은 기본 구조 설계와 상세 설계로 나눌 수 있다. 각 단계에서 하는 일을 나누어 설명하라.
설계 작업 중 기본 구조 설계에서는 아케텍처를 설계하므로, 모듈의 역할과 인터페이스에 대해 정의한다.
그 다음 상세 설계 단계에서 모듈의 내부 로직과 데이터 명세화를 진행한다.
  1. 컴포넌트와 모듈, 서브시스템 세 가지 개념을 설명하고 어떤 차이가 있는지 기술하라.
컴포넌트는 그 자체로 독립적으로 존재할 수 있는 것들을 이야기 한다. 즉 시스템의 일부분이다.
모듈은 컴퓨터 프로그래밍언어 관점에서 이야기 하는 것들을 말한다. 따라서 자바 언어 기준 메서드, 클래스, 패키지 등을 말하는 것이다.
서브시스템은 컴포넌트와 모듈의 한 단계 위 개념을 의미한다. 더 위 단계라는 말은 좀 더 추상적이다라는 것이다. 자바 언에에서는 서브시스템을 구현하기 위해서 패키지 개념을 사용하며, 이 보다 더 낮은 개념 단위는 클래스는 더 낮은 수준의 개별적인 서브시스템을 구성한다.
  1. 아키텍처 설계에는 3가지 관점이 있다. 무엇인지 나열하고 각각의 관점을 설명하라.
  2. 모듈의 관점 : 모듈 관점은 일정한 책임을 구현한 코드 단위인 모듈과 그 관계로 소프트웨어 구조를 설명하는 관점을 말한다. 컴포넌트의 관점 : 실행될 때 동작하는 요소와 상호작용으로 구조를 설명하는 관점이다. 할당의 관점 : 소프트웨어의 하드웨어 설치, 작업 할당, 구현, 데이터 저장 등에 대한 관점이다.
  3. ISO 25010에서 정의하고 있는 소프트웨어 기능 외적인 품질은 무엇이 있는지 나열하고 설명하라.
성상사신보유이
성능 : 특정 작업을 수행하는 시스템의 응답 속도를 보여준다.
상호 운용성 : 운영이나 다른 외부 시스템과의 데이터 전송, 교환을 담당하는 시스템의 속성이다.
신뢰성 : 시스템이 정의된 조건아래 게속 작동할 수 있는 능력을 말한다.
보안성 : 악의적이거나 우발적인 행동의 가능성을 줄이기 위한 시스템의 특성이다.
유지보수성 : 변경에 대해 얼마나 잘 수용하는지 나타내는 특성.
이식성 : 하드웨어, 소프트웨어, 사용환경에서 시스템이나 구성 요소를 다른 곳으로 쉽게 변환할 수 있는 특성이다.
  1. 추상화, 캡슐화, 모듈화의 원리란 무엇이며 서로 어떤 관계인지 설명하라.
추상화는 큰 시스템을 분할하여 생각할수 있게 하는 것이다. 사람의 기억 공간은 제한적이기 때문에 추상화를 통해 간단한 개념으로 정의를 해야한다.
캡슐화는 추상화를 통해 분할된 서브시스템들이 핵심 정보만 노출을 시키고, 중요한 부분은 감추는 특성을 이야기 한다. 
모듈화는 추상화와 캡슐화를 통해서, 큰 시스템을 분할해 모듈화의 개념을 충족시킬 수 있다는 것이다.
  1. 다음은 모듈 StoreCartManager 클래스에 담긴 책임을 분석하여 응집도를 낮추도록 분할하라.
class StoreCartManager{
    public static void UpdataProductInCart(int productNo, int amountTotal)
    public static void DeleteProductInCart(int productNo)
    public static StoreCart getCart()
    public static void CopyCartAcrossToLogin(int loginId) 
    public static Guid GetGuidQueryString()
    private static int GetWebLogonIdQueryString()
    private static void SetWebLogonIdQueryString(int id)
    private static StoreCart GetCartByGuid(Guid guid)
    private static StoreCart GetCartByClientId(int webLogonId)
응집도를 낮추기 위해서는 기능적 응집을 달성해야 한다.
기능적 응집은 정의된 하나의 기능에 모두 기여하고 밀접하게 관련시키기 위해 그룹화된 응집을 말한다. 따라서 StoreCartManger 클래스의 책임을 살펴보면 Cart를 관리해주는 책임과, 로그인 관련 관리 책임이 있다. 따라서 두 개의 클래스로 응집도를 높인다.

class StoreCartManager{
    public static void UpdataProductInCart(int productNo, int amountTotal)
    public static void DeleteProductInCart(int productNo)
    public static StoreCart getCart()
}
class LoginManager{
    public static void CopyCartAcrossToLogin(int loginId) 
    public static Guid GetGuidQueryString()
    private static int GetWebLogonIdQueryString()
    private static void SetWebLogonIdQueryString(int id)
    private static StoreCart GetCartByGuid(Guid guid)
    private static StoreCart GetCartByClientId(int webLogonId)
}
  1. 다음과 같은 특성을 갖는 모듈간의 결합도는 무엇인가?
    • 모듈 P가 모듈 Q 내부의 변수 값을 수정한다.
    • 내용 결합도
    • 모듈 P는 모듈 Q의 레이블로 직접 분기한다.
    • 내용 결합도

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

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

메일 보내고 받기 -> 클래스로 새로 만들어 기존의 클래스의 책임 줄여주기!

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

변수를 공유하지 않는 메소드의 개수 - 변수를 공유하는 메소드의 개수 = -1 = 0

반응형