---
title: "パート3：Altova UModelを用いたレガシーアプリケーションの分析"
date: "2009-05-01"
tags: 
  - "altova"
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "visual-basic"
description: Altova UModelを使って、UMLステートマシン図を用いてレガシーアプリケーションを分析する方法を学び、システムの状態と状態遷移に関する理解を深めましょう。
---
Status: #blog

Tags:  #altova #c #java #missionkit #software-modeling #uml #uml-tool #umodel #visual-basic

Categories: [Altova](/blog/ja/category/altova.md) 
# パート3：Altova UModelを用いたレガシーアプリケーションの分析

その中で、 [第一部](https://www.altova.com/blog/2009/04/analyzing-legacy-application-with.html) このシリーズにおいて、私たちは以下の手法を適用しました [リバースエンジニアリング](https://www.altova.com/ja/features_reverse_engineer.html) 機能性 [Altova UModel](https://www.altova.com/ja/products/umodel/uml_tool.html) 既存のATMシミュレーションアプリケーションからソースコードをインポートし、UMLモデルを作成しました [クラス図](https://www.altova.com/ja/features_class_diagram.html) アプリケーションのクラス階層構造とクラス間の関係を示すために [第二部](https://www.altova.com/blog/2009/04/part-2-analyzing-legacy-application.html) 我々はUML図を作成しました [ユースケース図](https://www.altova.com/ja/features_use_case.html) システムのユーザー操作を記録し、詳細な操作内容や計画中の機能改善を記述するために、いくつかのユースケース図を追加しました。今回の記事では、ATMを別の視点から見ていきます。 

夏の暑い午後、疲れたドライバーは、先に見慣れないアイスクリームスタンドを見つけました。そこにはドライブスルーの窓口がありました。しかし、問題は現金がなかったこと。彼はショッピングセンターの駐車場に車を停め、ガラス張りの自動販売機型のATMの近くに車を止めました。車を降りる前に、当の銀行の利用者は、そのATMの状態を心配していました。もしかしたら、複雑な銀行手続きをしている別の利用者がすでに使っているかもしれません。それに、もし誰も自動販売機の中にいなくても、ATMが故障している可能性もあるのではないかと考えていました。 

UML（Unified Modeling Language：統一モデリング言語） [状態遷移図](https://www.altova.com/ja/features_state_machine_diagram.html) （状態図とも呼ばれます）この図を使うことで、シミュレーションされたATMの各状態、および状態間の遷移を引き起こすトリガーやイベントを把握し、既存のアプリケーションがどのように動作しているかをより深く理解することができます。それでは、シミュレーションの実行から始めましょう 

[![ATMシミュレーション ログインメニュー](https://lh5.ggpht.com/_REdrfeVqYdU/Sfsxmyu-x6I/AAAAAAAAAFc/1ttoVt3gF-Q/image1_thumb%5B1%5D.gif?imgmax=800 "ATM Simulation Log In menu")](http://lh6.ggpht.com/_REdrfeVqYdU/Sfsxm31zkpI/AAAAAAAAAFY/DTDB2hmhH48/s1600-h/image1%5B3%5D.gif)

[![ATMシミュレーション：取引メニュー](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxoBbTouI/AAAAAAAAAFk/05wRGaLq5P0/image2_thumb%5B2%5D.gif?imgmax=800 "ATM Simulation Transaction Menu")](http://lh3.ggpht.com/_REdrfeVqYdU/SfsxnsG1tVI/AAAAAAAAAFg/hHwOLukZxYk/s1600-h/image2%5B4%5D.gif) 

レガシーアプリケーションの稼働を開始すると、シミュレーション環境のATMは待機状態に入り、最初の顧客を待ちました 

[![UMLステートマシン図（開始）](https://lh5.ggpht.com/_REdrfeVqYdU/SfsxoWNUKRI/AAAAAAAAAFs/MpZ4Vt9WJ5o/image3_thumb%5B1%5D.gif?imgmax=800 "UML State Machine Diagram start")](http://lh5.ggpht.com/_REdrfeVqYdU/SfsxoA_hNqI/AAAAAAAAAFo/bm_h5hrfDLI/s1600-h/image3%5B3%5D.gif) 

次に、関連性のない状態を、それぞれ独立した楕円で表現し、それらを図に追加していくと役立つことがあります。これらの楕円を、パズルのピースのように自由に動かすことで、状態間の移行を気にすることなく、論理的な順序を見つけることができるようになります。

[![UMLステートマシン図 - 概要](https://lh3.ggpht.com/_REdrfeVqYdU/Sfsxo2BkWJI/AAAAAAAAAF0/fymyDQyuM9E/image4_thumb%5B1%5D.gif?imgmax=800 "UML state machine diagram - preliminary")](http://lh6.ggpht.com/_REdrfeVqYdU/Sfsxor2MyNI/AAAAAAAAAFw/bFiRGAyCknE/s1600-h/image4%5B3%5D.gif) 

このATMの状態に関する初期リストは、あくまでも最初の草案に過ぎません。状態の説明は、既存のアプリケーションのメニュー項目に基づいて提案されており、明らかに簡略化できる点があります。
* 「最初の取引を選択」と「次の取引を選択」には違いがないため、これらを統合すべきです。
* 「ログアウト」はおそらく状態ではなく、ユーザーが取引メニューで「4」を押した瞬間に発生する遷移です。
* 引き出し金額または預け入れ金額の入力は、「取引の実行」状態内のサブ状態として割り当てることができます。
* 3番目の項目は、図を簡素化するだけでなく、ユーザーIDとPINの入力を「ユーザー認証」の一部として扱う現在の方法とも整合性が取れます。
これらの変更を行い、遷移を追加した後、図は以下のようになります 

[![UMLの状態遷移図（状態機械図）](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxpSLK3aI/AAAAAAAAAF8/Mw8IcBdYQco/image5_thumb%5B1%5D.gif?imgmax=800 "UML state amachine diagram with transitions")](http://lh5.ggpht.com/_REdrfeVqYdU/Sfsxo2pmqZI/AAAAAAAAAF4/Vrgu1Fxt8P8/s1600-h/image5%5B3%5D.gif)

私たちが追加したシンプルな遷移は、ATMが現在の状態から次の状態へ移行するためのトリガーとして機能します。また、各状態には少なくとも1つの入口と1つの出口があることに注意してください。そうでない場合、既存のアプリケーションがユーザーを行き詰まった状態に追い込んでしまう可能性があります。 "取引選択"と"取引実行"の間に配置されている菱形は、UMLにおけるフローの選択を表す記号です。一見すると、取引を実行する前にユーザーがログアウトできるようにすることは非論理的に見えるかもしれませんが、これは既存のアプリケーションが取引メニューで提供しているオプションです。そして、現実世界では、ユーザーが最終段階で考えを変えることもよくあります。私たちは、可能な限り、要素の名前や説明に一貫した表現を使用するように注意しました。状態名は、現在形動詞で、語尾が"-ing"で終わるように命名されています。遷移には、状態が変化する原因となるアクションの完了を示すラベルが付けられています。一貫した要素の命名は、図の可読性を高めます。 

一度、上記のような動作可能な状態遷移図を作成したら、遷移が試みられたものの、正常に完了しなかった場合に何が起こるかを検討する価値があります。例えば、ATMの利用者が無効な口座番号/暗証番号の組み合わせを入力したり、認証された利用者が、口座残高を超える金額を引き出すように要求したりする可能性があります。これらの可能性を考慮して、状態遷移図を改良することができます 

[![完全なUMLステートマシン図](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxpgAdy6I/AAAAAAAAAGE/9yJi6CFcN-M/image6_thumb%5B1%5D.gif?imgmax=800 "Complete UML state machine diagram")](http://lh6.ggpht.com/_REdrfeVqYdU/SfsxpSQ190I/AAAAAAAAAGA/xtG56Cmeogs/s1600-h/image6%5B3%5D.gif) 

現在、当社のステートマシン図は、アプリケーションの実行における単一の「理想的な」パスだけでなく、多くの代替経路を示しています。図のレイアウトは縦型にしましたが、これは決まった形式ではありません。アプリケーションによっては、横型の方が適している場合もありますし、単に個人の好みかもしれません。以下に、当社のステートマシン図の一部の横型表示を示します 

[![水平方向に配置されたUMLステートマシン図](https://lh6.ggpht.com/_REdrfeVqYdU/SfsxqJJG08I/AAAAAAAAAGM/kpCKzjysbwI/image7_thumb%5B1%5D.gif?imgmax=800 "UML state machine diagram in horizontal layout")](http://lh4.ggpht.com/_REdrfeVqYdU/Sfsxp61lanI/AAAAAAAAAGI/jd9Ogb8-01k/s1600-h/image7%5B3%5D.gif) 

ステートマシン図のレイアウトは、どのようなものを選んだとしても、遷移線が交差したり重なったりしないように描く必要があります。UMLステートマシン図を作成することは、既存のアプリケーションが小規模で、ATMの動作原理を誰もが理解しているため、今回のATMシミュレーションにおいては大げさに見えるかもしれません。しかし、これらの手法は、より大規模なアプリケーションや、馴染みのない、あるいは複雑な分野のアプリケーションを扱う場合に、非常に役立つことがあります。 

もし、Java、C#、またはVisual Basicで記述された既存のアプリケーションに対して、UMLステートマシン図を作成したいとお考えでしたら、[こちらをクリックして、Altova UModelの30日間の無料トライアル版をダウンロードしてください。このトライアル版は、すべての機能が利用可能です](https://www.altova.com/ja/download/umodel/uml_tool_enterprise.html) 次回の記事では、第2部でご紹介した新しい機能と、引き出し処理について詳しく解説します。
