Intelligent Data Analysis RSS 태그 관리 글쓰기 방명록
Software Engineering/Week 2 (2)
2022-11-10 22:04:16

프로젝트에 투입되어 소프트웨어를 개발하기 위해 우리는 클라이언트로부터 요구사항을 전달 받아야한다. 

이후 전달 받은 요구사항에 대해서 개발 할 소프트웨어의 개념적인 모델링을 진행한다. 

실제 개발되어야하는 시스템(reality)를 구성하기 위해 시스템에 대한 표현(modeling)이 되어야 하며 프로젝트의 모든 이해관계자가 한눈에 알아볼 수 있도록 진행된다. 마지막으로 구축된 model을 바탕으로 reality를 구현한다.

 

이 과정에서 우리는 Unified Modeling Language(UML)을 통해 모델을 표현한다. UML 2.0 버전의 경우 시스템을 구성하는구조적인 요소를 표현한 구조 다이어그램과 시스템 구성 요소들의 동적인 행위를 표현하는 행위 다이어그램으로 분류된다. 

 

 

UML을 소프트웨어 개발의 전과정에서 사용될 수 있다. 소프트웨어 개발 단계는 아래와 같다.

 

  1. 요구사항 정의: 시스템으로부터 기능적 요구사항 도출
  2. 분석단계: 시스템을 구성하는 논리적 구성 요소 도출
  3. 설계단계: 시스템 구성 요소로서 논리적 컴포넌트 정의 및 설계
  4. 구현 및 테스트: 앞 단계에서 작성된 모델을 바탕으로 세부적 활동 수행
  5. 패키지 다이어그램: 요구사항 정의, 분석, 설계단계에서 사용

 

 

Use Case Diagrams

 

유스케이스 다이어그램은 시스템의 기능적 요구사항을 표현할 때 사용된다. 이는 아래의 컴포넌트로 이루어져 있다.

 

  • 액터: 개발중인 시스템과 상호작용을 하는 시스템 외부의 존재
  • 유스케이스: 시스템이 제공할 기능적 단위.
  • 액터와 유스케이스의 관계: 특정기능을 위하여 어떤 액터들이 상호작용을 하는지 표현

 

유스케이스 다이어그램을 활용하기 위해 아래와 같은 방안이 제시된다.

 

  • 액터의 일반화
    • 상위 액터의 특성을 하위 액터에도 동일하게 적용
  • 유스케이스의 일반화
    • 유사한 유스케이스들을 일반화, 부모 유스케이스를 정의
    • 부모 유스케이스는 실제로 제공하는 기능은 아님
    • 추상 유스케이스는 이텔릭체로 표기
  • 유스케이스의 포함
    • 유스케이스의 공통 기능을 추출, 별도의 유스케이스 정의
  • 유스케이스의 확장
    • 기존 유스케이스에 없는 기능을 별도의 유스케이스로 표현
  • 액터 간의 연관 관계
    • 액터 간의 상호작용

 

아래 그림은 유스케이스 다이어그램의 예시를 보여준다.

 

 

Use case model

유스케이스 모델은 액터와 유스케이스 간의 관계를 보여준다. 액터와 유스케이스 사이의 연관 관계는 해당 유스케이스의 기능과 관련이 있는 액터를 명시함으로 써 생성된다. 액터와 액터 사이의 일반화 관계(상속 관계)는 상위 액터의 특성이 하위 액터에도 적용됨을 뜻한다. 유스케이스 사이의 포함 관계(include)는 하나 이상의 유스케이스에 존재하는 공통적인 기능을 추출해 별도의 유스케이스를 정의하는 것이다. 유스케이스 사이의 확장 관계(extend)는 기존 유스케이스와 성갹이 다른 추가적인 기능을 별도의 유스케이스로 표현하는 것이다. 

 

Use case Specification

유스케이스 명세서는 유스케이스 모델에 기술된 개별 유스케이스에 대한 구체적이고 상세한 기능을 정의한 문서이다. 유스케이스의 명세서를 구성하는 주요 항목은 아래와 같다. 

 

  • 유스케이스 이름: 유스케이스에 대한 가장 간결한 명세서로 유스케이스를 통하여 제공되는 시스템의 기능을 명확한 동사 구 형태로 표현
  • 개요: 모든 이해관계자는 가장 먼저 유스케이스 명세서의 개요 항목을 통해서 유스케이스 이해
  • 관련 액터 항목: 해당 유스케이스가 동작할 때 필요한 주변 액터 이해 가능. 주 액터와 보조 액터를 구분하여 기록
  • 우선 순위: 기능의 중요도와 개발 난이도를 바탕으로 결정. 개발 순서, 자원 투입 등과 같이 프로젝트 관리 측면에서 활용
  • 선행 조건: 유스케이스의 종료 시 만족해야 하는 조건으로 유스케이스의 정상 동작 여부에 대한 최소한의 판단 기준으로 사용 가능
  • 시나리오: 유스케이스의 관련 액터와 시스템 간의 상호작용에 대한 구체적인 정의 포함. 하나의 유스케이스에는 기본 시나리오와 대안 시나리오로 구분하여 기술
  • 비 기능적 요구사항: 성능, 신뢰도, 보안 등 이 유스케이스와 관련된 비 기능적 요구사항 기술

 

 

'Software Engineering > Week 2' 카테고리의 다른 글

Concept of Objected-Oriented Technilogy  (0) 2022.11.10
2022-11-10 17:59:07

객체 지향은 소프트웨어 공학도로써 필히 알아야하는 기본 개념중 하나이다. 소프트웨어를 하나의 큰 틀에서 바라보는 것이 아닌 여러 객체의 모음으로 하나의 소프트웨어를 생산하는 관점으로 봐야한다.

 

객체 지향은 '공통 경험과 실제 객체가 서로 관련되는 방식을 많이 활용하는 소프트웨어를 개발하고 패키징 하는 방법' 으로 정의할 수 있다. 즉 각 객체는 속성과 기능을 가지고 이 객체들이 서로 연관(relation)되어 하나의 완전한 소프트웨어로 발돋음 되는 것이다. 

 

객체 지향의 구성은 아래와 같다. 

 

  • Abstraction
  • Encapsulation
  • Moduarity
  • Hierarchy

 

Abstraction은 어떤 사물에 대해 내부의 세세한 것을 숨기고 외부에는 중요한 특징만 공개하는 방식을 의미한다. 소프트웨어는 이러한 '추상화'가 잘되는가 안되는가에 따라 외부에서 접근이 되는지(개발자 영역을 일반 사용자가 볼 수 있는지)를 검토해야 한다. 

 

Encapsulation은 연관되어 있는 속성과 기능을 하나의 클래스로 묶는 것을 의미한다. 이때 데이터를 중심으로 이 데이터를 사용하여 처리하는 기능들을 하나의 클래스로 묶을 수 있다.

 

Hierarchy는 어떠한 클래스가 다른 클래스를 부모로 상속 받고 자식 관계를 만들어 나아가며 최종적으로 객체 간의 계층적인 구조가 만들어지는 것을 의미한다. 모든 클래스에 통용되는 기능을 부모 클래스로 넣고 자식 클래스는 이를 상속받아서 사용할 수 있도록 구현한다.

 

객체 지향의 주요 개념은 아래와 같이 나뉠 수 있다.

 

  • Object
  • Encapsulation
  • Information Hiding
  • Class
  • Inheritance
  • Polymorphism

Object란 real-world 도메인을 여러 객체로 표현하는 것을 의미한다. 하나의 객체은 데이터와 기능을 가지고 있으며 데이터는 상태(state)를, 기능은 오브젝트의 행동(operation)을 가진다. 객체의 상태는 개체의 특성을 나타내며 variable로 표현할  수 있다. 이는 값을 가질 수 있다. 상태의 특성은 변하지 않으나 그 값은 변한다. 객체의 행위는 상태의 값을 변경시킬 수 있는 행위이다. 이는 class의 여러 method로 표현된다. 

 여기서 짚고 넘어가야할 것이 객체와 클래스의 관계이다. 현실 도메인에서 객체를 추출하고 이를 추상화 하여 클래스로 만든다. 역으로 클래스를 구체화 하여 객체를 생성할 수도 있다. 

 

Encapsulation은 서로 연관되어있는 데이터와 행위를 하나로 묶는 것을 의미한다. 

 

Information Hiding은 객체를 하나의 black box로 취급하여 일부 정보는 은폐하고 일부는 공개하는 것을 의미한다. 아래 그림은 객체와 사용자간의 정보 공유의 차이점을 보여준다. 

 

그림1.객체와 사용자간 정보 공유 차이 그림

 

information hiding을 할 경우 해당 객체는 독립성, 유지보수성, 확장성 그리고 추상화의 개념이 나타나게 된다. 

 

Class는 object의 카테고리를 의미하는 더 큰 object이다. 하나의 클래스는 하나의 오브젝트 타입을 소프트웨어로 적용한 것을 의미한다. 따라서 class는 여러 object간의 집합이라 할 수 있다. 하나의 클래스는 여러 자료 구조와 기능들을 포함하며 이는 각 오브젝트에 적용될 수 있다. Class를 이루는 내용중 자주 접할 수 있는 단어 Instance가 있다. Instance는 클래스에 속한 하나의 오브젝트를 의미하고 클래스 내 모든 오브젝트는 같은 세트의 속성과 메소드를 가진다. 또 클래스에 대해 공부하고 있다면 생성자에 대한 개념도 알게 된다. 생성자란 클래스 이름과 동일한 이름을 가진 메소드로 인스턴스를 생성한다. 생성을 했다면 소멸도 해야한다. 따라서 소멸자는 생성된 객체 인스턴스를 메모리로 부터 제거하며 현재 사용중인 거의 대부분의 객체 지향 언어는 객체가 제거될 경우 자동적으로 하위 인스턴스를 메모리에서 free 시키도록 구현되어있다.

 

Inheritance는 상위 클래스의 속성 또는 행위를 하위 클래스가 상속하여 재 사용하는 것을 의미한다. 아래 그림을 통해 이해하자. 

 

그림 2. 상속 예시

 

Ploymorphism은 함수를 overloading하는 것을 의미하는데, 같은 메세지에 응답하는 두개 이상의 오브젝트의 능력이라고 정의할 수 있다. 

 

'Software Engineering > Week 2' 카테고리의 다른 글

Uml & Usecase diagrams  (0) 2022.11.10