---
title: "상태 머신을 위한 소프트웨어 테스트"
date: "2011-04-05"
categories: 
  - "software"
tags: 
  - "agile-development"
  - "software-modeling"
  - "software-tools"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "v2011r2"
description: Altova UModel을 사용하여 UML 상태 다이어그램을 초기에 테스트함으로써 소프트웨어 품질을 향상시키는 방법을 알아보세요. 실용적인 테스트 기법과 예시를 살펴보겠습니다.
---
Status: #blog

Tags:  #agile-development #software-modeling #software-tools #uml #uml-tool #umodel #v2011r2

Categories: [development](/blog/ko/category/development.md) [uml](/blog/ko/category/uml.md)
# 상태 머신을 위한 소프트웨어 테스트

개발자들이 품질 향상과 프로젝트 마감 기한 준수를 위해 다양한 방법을 모색하면서, 코드 검토, 단위 테스트, 회귀 테스트, 베타 테스트, 테스트 주도 개발 등 다양한 소프트웨어 테스트 방법들이 주목받고 있습니다. 프로젝트의 목표나 사용된 소스 코드 언어와 관계없이, 결함이 발견될수록 문제 해결이 더 쉽고, 비용이 적게 들며, 빠르게 이루어진다는 것은 널리 알려진 사실입니다.

[Altova UModel 2011](https://www.altova.com/ko/umodel.html)의 릴리스 2에 새롭게 추가된 기능인 [UML 상태 머신 다이어그램](https://www.altova.com/ko/umodel/state-diagrams.html)으로부터의 [코드 생성](https://www.altova.com/ko/umodel/uml-code-generation.html)은 프로젝트 개발 초기 단계에서 개념적 로직을 검증하는 데 활용될 수 있습니다. 

**상태 다이어그램을 이용한 실제 시스템 설계** 

UModel에 포함된 예제는 간단하고 현실적인 상태 다이어그램과 함께 제공되며, 작은 테스트 애플리케이션을 통해 디자인의 논리를 얼마나 쉽게 테스트할 수 있는지 직접 확인해 볼 수 있습니다. UModel 2011 예제 폴더의 "AirCondition.ump" 프로젝트에 있는 상태 다이어그램은 일반적인 난방 및 냉방 시스템의 작동 방식을 설명합니다. 

[![Altova UModel에서 사용하는 상태 다이어그램 ](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY4ceg5yI/AAAAAAAAAXU/EvHaGDO0_sw/Snap1_state_diagram_LR5.png?imgmax=800 "State machine diagram in Altova UModel ")](https://www.altova.com/umodel.html) 

이 시스템은 전원 버튼(왼쪽에 표시됨)을 통해 꺼진 상태에서 켜질 수 있으며, 난방 또는 냉방 모드를 선택하는 모드 선택 기능, 팬 속도를 조절하는 속도 선택 기능, 그리고 시스템을 대기 모드로 전환하는 대기 모드 버튼(오른쪽에 표시됨)을 포함합니다. 예제 프로젝트 폴더에는 UModel이 다이어그램을 기반으로 생성한 모든 코드가 Java, C#, 그리고 Visual Basic으로 포함되어 있습니다. Java 버전을 사용해 보려면, 코드를 컴파일하기 위해 **javac STMTester.java** 명령어를 사용하고, 실행하기 위해 **java STMTester** 명령어를 사용하면 됩니다. 테스트 애플리케이션은 난방 및 냉방 장치에 대한 정보 창을 포함하는 시뮬레이션된 제어판을 표시합니다. 작동 버튼은 상단에 표시되며, 현재 상태는 첫 번째 창에, 시스템 변경으로 인해 발생하는 출력 메시지는 두 번째 창에 표시됩니다.

[![Altova UModel에서 생성된 상태 머신 코드를 테스트하기 위한 제어 패널](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY4k3SX7I/AAAAAAAAAXY/BbrYrNG5nTQ/clip_image0043.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel/state-diagrams.html) 

위에서 보듯이, 시스템은 꺼진 상태로 초기화되며, 모드는 히터로 설정되고, 팬은 꺼져 있습니다. 시스템을 작동하기 전에, 아래 그림에서 볼 수 있듯이, 테스트 애플리케이션의 동작을 그림 자체에서 쉽게 따라갈 수 있도록 제어판과 상태 머신 다이어그램의 크기를 조정하는 것이 좋습니다. (아래는 축소된 이미지입니다.) 

[![생성된 코드에 대한 UModel 상태 다이어그램 및 테스트 제어 패널](https://lh3.ggpht.com/_REdrfeVqYdU/TZsY5AeHLzI/AAAAAAAAAXc/oNqgojYQqZw/Snap3_combinedimage_LR5.png?imgmax=800 "UModel state machine diagram and test control panel for generated code")](https://www.altova.com/umodel.html) 

**상태 머신 작동** 

전원 버튼을 클릭하면 현재 상태 창이 업데이트되고, 디버그 출력 메시지 창에 "이벤트 1"이라는 항목으로 발생한 작업에 대한 자세한 설명이 표시됩니다. 

[![Altova UModel에서 생성된 상태 머신 코드를 테스트하기 위한 제어 패널](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY5d6YGOI/AAAAAAAAAXg/GPAgI00JHWo/clip_image0084.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

더운 날씨라면, 모드를 "냉방"으로 변경하고 팬 속도를 높이는 것이 좋습니다. 이를 위해 "모드 선택" 및 "속도 선택" 버튼을 클릭할 수 있습니다. 현재 상태 창은 클릭할 때마다 업데이트되며, "이벤트 2"와 "이벤트 3"이 출력 메시지 창에 추가됩니다. 

[![Altova UModel에서 생성된 상태 머신 코드를 테스트하기 위한 제어 패널](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY6EeKdOI/AAAAAAAAAXk/hIxBihKj4-Y/clip_image0103.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

이제 테스트 애플리케이션을 통해 스테이트 머신 다이어그램의 로직을 완벽하게 검증할 수 있습니다. 모든 가능한 버튼 선택 순서를 클릭하여 예상되는 결과가 나오는지 확인할 수 있습니다. 예를 들어, 장치를 대기 모드로 설정(아래 4번 이벤트)한 후 "속도 선택" 버튼을 누르면, 5번 이벤트의 출력 메시지에서 "RegionSpeed"라는 하위 상태에서 아무런 상태 변화가 발생하지 않는다는 것을 확인할 수 있습니다. 아래 그림에서 5번 이벤트와 출력 메시지 창에 표시된 3번 이벤트를 비교해 보세요. 

[![Altova UModel에서 생성된 상태 머신 코드를 테스트하기 위한 제어 패널](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY6T-8lBI/AAAAAAAAAXo/VDovIAt3cDs/clip_image0123.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

현재 시스템이 대기 모드에 있고, 난방이나 냉방이 필요하지 않으므로, 전원 버튼을 눌러 시스템을 끄고 에너지를 절약합시다. 

[![Altova UModel에서 생성된 상태 머신 코드를 테스트하기 위한 제어 패널](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY66RZsKI/AAAAAAAAAXs/v6FK67nFMVI/clip_image0143.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

잠깐만요, 아무 변화가 없는 것 같습니다. 이벤트 6에서 아무런 전환이 일어나지 않았고, 상단 창에 표시된 현재 상태는 여전히 "대기" 모드입니다! 상태 다이어그램을 다시 살펴보면, "대기" 모드에서 벗어나는 유일한 방법은 다시 "대기" 버튼을 누르는 것뿐입니다. 일반 사용자가 전원 버튼을 누르면 시스템이 "대기" 모드에서 꺼질 것이라고 예상할까요? 

[![Altova UModel을 사용하여 생성된 상태 머신 다이어그램의 일부](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7RcFpgI/AAAAAAAAAXw/1oWwcxTveBE/clip_image0163.jpg?imgmax=800 "Portion of a state machine diagram created with Altova UModel")](https://www.altova.com/umodel.html) 

만약 이 문제가 제품 개발 과정 후반, 즉 규제 기관에서 프로토타입 테스트를 진행할 때 뒤늦게 발견되었다면, 이 문제를 해결하는 데 얼마나 많은 비용이 들었을까요? 독자 여러분께 드리는 과제는 다음과 같습니다. 대기 모드에서 전원 꺼짐 모드로 연결되는 또 다른, 더 직접적인 방법을 어떻게 설계하시겠습니까? 

**자신의 상태 머신을 테스트하는 방법** 

UModel의 상태 머신 코드 생성 예제 프로젝트를 템플릿으로 활용하여, 여러분의 디자인에 대한 테스트 애플리케이션을 만들 수 있습니다. 특히, 상태 머신에서 트랜지션에 작업 이름을 추가할 때, UModel이 자동으로 해당 클래스에 작업을 생성하는 기능을 활용하는 것이 좋습니다. 

[![Altova UModel 도구 모음의 버튼을 사용하면 클래스 내에서 자동으로 작업을 생성할 수 있습니다](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7mEsVhI/AAAAAAAAAX0/FDDlekHpIgk/clip_image0183.jpg?imgmax=800 "Altova UModel toolbar button for automatic creation of operations in classes")](https://www.altova.com/umodel.html) 

또한, UModel 도움말 시스템에는 상태 다이어그램에서 코드 생성에 대한 자세한 정보가 포함되어 있으며, "AirCondition.ump" 프로젝트 파일을 예시로 사용합니다. 

**Altova UModel을 사용하여 스테이트 머신 다이어그램의 논리적 구조를 테스트해 보시고, 프로젝트 개발을 어떻게 개선할 수 있는지 직접 확인해 보세요** [**오늘 무료 30일 체험판을 다운로드하세요.**](https://www.altova.com/ko/download/umodel/uml_tool_enterprise.html)**!**
