본문 바로가기
Programming

Use Case Diagram 작성 방법

by 느리게 걷는 즐거움 2024. 7. 26.
반응형

Use Case Diagram은 시스템의 기능적 요구사항을 시각적으로 표현한 다이어그램입니다. 이 다이어그램은 시스템의 사용자(또는 다른 시스템)가 시스템과 상호작용하는 방식을 나타냅니다. 

Use Case Diagram 작성 이유

Use Case Diagram을 작성하는 이유는 여러 가지가 있습니다. Use Case Diagram은 시스템의 기능적 요구사항을 시각적으로 표현한 다이어그램으로, 다양한 이해관계자 간의 원활한 의사소통을 돕고 시스템 설계 및 개발 과정을 효율적으로 진행하는 데 중요한 역할을 합니다. 아래에 Use Case Diagram을 작성하는 주요 이유를 설명합니다.

요구사항 명확화 : Use Case Diagram은 시스템이 수행해야 할 기능과 그 기능을 사용하는 액터를 명확하게 정의합니다. 이를 통해 시스템의 기능적 요구사항을 명확히 하고, 이해관계자 간의 요구사항에 대한 이해를 높일 수 있습니다.

의사소통 : 시스템의 경계를 명확히 정의합니다. 어떤 기능이 시스템의 일부인지, 어떤 기능이 외부 시스템이나 사용자와 연관되어 있는지를 명확히 할 수 있습니다. 이를 통해 프로젝트 범위를 설정하고, 프로젝트 관리를 보다 효율적으로 할 수 있습니다.

기능 간의 관계 파악: 시스템 내의 각 기능(유스 케이스) 간의 관계를 파악할 수 있습니다. 어떤 기능이 다른 기능에 의존하는지, 어떤 기능이 독립적으로 수행되는지 등을 이해함으로써 시스템 설계를 더욱 체계적으로 할 수 있습니다.

개발 및 테스트 계획 수립 : Use Case Diagram은 개발 팀이 시스템을 설계하고 구현하는 데 유용한 정보를 제공합니다. 각 유스 케이스는 하나의 기능 단위로 개발할 수 있으며, 이를 통해 개발 작업을 분할하고, 우선순위를 설정할 수 있습니다. 또한, 테스트 시나리오를 작성할 때도 유스 케이스를 기반으로 테스트 케이스를 정의할 수 있습니다.

Use Case Diagram 구성요소

Use Case Diagram은 시스템의 기능적 요구사항을 시각적으로 표현하는 다이어그램으로, 여러 가지 구성 요소로 이루어져 있습니다. 각 구성 요소는 시스템과 외부 사용자 간의 상호작용을 명확하게 나타내는 역할을 합니다.

요소 설명
액터(Actor) 액터는 시스템과 상호작용하는 사람이나 다른 시스템을 나타냅니다. 액터는 시스템의 외부에 있으며, 시스템의 기능을 사용하거나 시스템에 영향을 미치는 역할을 합니다.
유스 케이스(Use Case) 유스 케이스는 액터가 시스템과 상호작용하여 달성하려는 목표를 나타냅니다. 유스 케이스는 시스템이 제공하는 기능을 설명하고, 특정 액터가 시스템과 어떻게 상호작용하는지를 보여줍니다.
시스템 경계(System Boundary) 시스템 경계는 유스 케이스와 액터 간의 상호작용이 발생하는 시스템의 범위를 나타냅니다. 일반적으로 사각형으로 표시되며, 시스템의 이름이 기재됩니다.
관계(Relationship) 관계는 액터와 유스 케이스 간의 상호작용을 나타내며, 다양한 유형이 있습니다.

Use Case Diagram 관계

연관 관계(Association)

액터와 유스 케이스 간의 직접적인 상호작용을 나타냅니다. 실선으로 표시됩니다.

확장 관계(Extend)

유스 케이스가 다른 유스 케이스를 확장할 때 사용됩니다. 점선과 화살표로 표시되며, <extend> 라벨이 사용됩니다. 이 관계는 기본 유스 케이스의 흐름에 추가적인 행동을 조건부로 포함시키는 것을 의미합니다. extend 관계는 특정 조건이 충족될 때만 확장 유스 케이스가 실행되도록 합니다.

사용자는 결제를 수행하는 "Checkout" usecase를 실행할 때 쿠폰이 존재한다면 조건부로 "Apply Coupon"을 수행합니다. 따라서 <<extend>>로 관계를 표현합니다.

 

포함 관계(Include)

유스 케이스가 다른 유스 케이스를 포함할 때 사용됩니다. 점선과 화살표로 표시되며, <include> 라벨이 사용됩니다. include 관계는 하나의 유스 케이스가 다른 유스 케이스의 일부로서 항상 수행되어야 하는 경우를 나타냅니다. include 관계는 특정 유스 케이스가 공통된 기능을 여러 다른 유스 케이스와 공유할 때 사용되며, 재사용성을 높이고 중복을 줄이는 데 도움을 줍니다.

사용자는 결제를 진행하는 "Checkout" usecase를 실행전에 자신이 구매한 제품 구매 품목, 수량, 금액을 확인할 수 있는 구매정보를 항상 확인 후 결제가 진행되어야 합니다.

 

일반화 관계(Generalization)

유스 케이스나 액터 간의 상속 관계를 나타냅니다. 일반적으로 슈퍼 타입과 서브 타입 간의 관계를 표현하며, 실선과 화살표로 표시됩니다. 특정 유스 케이스나 액터가 다른 유스 케이스나 액터의 공통된 속성과 행동을 상속받을 때 사용됩니다. 일반화 관계는 부모-자식 관계를 나타내며, 자식 요소는 부모 요소의 특성을 상속받아 재사용할 수 있습니다.

예를 들어, 온라인 쇼핑 시스템에서 Customer와 Administrator 액터가 있다고 가정해봅시다. 두 액터 모두 시스템에 로그인할 수 있지만, Administrator는 Customer보다 더 많은 기능을 사용할 수 있습니다. 이러한 경우, Customer와 Administrator 간의 일반화 관계를 정의할 수 있습니다.

PlantUML을 이용해 UseCase Diagram 그리기

Use Case Diagram에서 다양한 관계를 사용하여 시스템의 기능적 요구사항을 표현할 수 있습니다. PlantUML을 사용하여 이 관계들을 모두 활용하는 Use Case Diagram 예시를 만들어봅니다. 아래의 온라인 쇼핑 시스템의 Use Case Diagram은 아래와 같은 액터와 유스 케이스를 갖습니다.

요소 설명
액터 Customer, Administrator
유스 케이스
Search Products: 제품을 검색하는 기능
Add to Cart: 장바구니에 제품을 추가하는 기능
Checkout: 결제를 수행하는 기능
Register Account: 새 계정을 등록하는 기능
Login: 로그인 기능
Manage Products: 제품을 관리하는 기능 (관리자 전용)
Generate Reports: 판매 보고서를 생성하는 기능 (관리자 전용)
PlantUML 코드 예시
@startuml
actor User
actor Customer
actor Administrator

User <|-- Customer
User <|-- Administrator

usecase "Search Products" as UC1
usecase "Add to Cart" as UC2
usecase "Checkout" as UC3
usecase "Register Account" as UC4
usecase "Login" as UC5
usecase "Manage Products" as UC6
usecase "Generate Reports" as UC7
usecase "Validate Payment" as UC8
usecase "Generate Receipt" as UC9

Customer --> UC1
Customer --> UC2
Customer --> UC3
Customer --> UC4
Customer --> UC5

Administrator --> UC6
Administrator --> UC7
Administrator --> UC5

UC3 --> UC8 : <<include>>
UC3 --> UC9 : <<include>>

UC7 ..> UC6 : <<extend>>

@enduml

 

Customer와 Administrator는 User라는 슈퍼 타입으로 일반화됩니다. 공통으로 사용하는 "Login" 유스 케이스는 "User"에 연결되었습니다.

"Checkout" 유스 케이스는 항상 "Validate Payment"와 "Generate Receipt" 유스 케이스를 포함합니다. 결제를 위해서는 "Validate Payment"와 "Generate Receipt"가 항상 먼저 수행되어야 합니다.

"Generate Reports" 유스 케이스는 필요에 따라 제품을 관리하기 때문에 "Manage Products" 유스 케이스를 조건부로 확장합니다. 

 

반응형