OCL から JML への DSL を用いた変換ツールの試作型の実装
花田健 太 郎†1岡 野 浩

三†1楠 本真二†1

研究グループでは，OCL から JML への変換手法に関する研究を行っている．本稿では，DSL 開発のフレームワークである Xtext を用いてツールの試作型を実装した．具体的には，まず OCL のDSL を構築し，次に DSL から JML へのマッピングを定義する方法で行っている．

Implementation of a prototype translation tool from OCL into JML by using DSL
Kentaro Hanada,†1 Kozo Okano†1 and Shinji Kusumoto†1
Our research group has been studying a translation method from OCL to JML. In thisreport, we present a prototype translation tool from OCL to JML by using the following
manner. First, we define a DSL of OCL using Xtext. Next, we describe translation rules fromthe DSL to JML. The syntax and rules are used to translation in a framework provided byXtext which is a plug-in for Eclipse.

述を行うために設計された言語であり，OMG によっ

1. は じ め にて標準化されている．

研究グループでは，OCL から JML への変換に関1)2)する多くの既存研究において非対応だった iterate

JML は，Java のメソッドやオブジェクトに対して制約を記述する言語である．記述においては Java の3)演算に対応した変換手法の提案・実装を行っている．

文法を踏襲し，初心者でも記述しやすい特徴を持つ．

しかし，既存ツールは MDA の主流であるモデル変換

また，記述は Java コメント中に記述できるため，プ的な実装ではなく，抽象構文木を介したマッピングでログラムの実装，コンパイルや実行に影響がない．

実装されている．今後 OCL から JML 以外の複数のDSL は，ドメインに特化した言語を設計利用する方言語への変換の実現を目標としているが，既存手法で式である．DSL の例としては Web に特化した HTML，はそれぞれの変換を独立に実装する形になるため実装

RDB に特化した SQL などが挙げられる．の再利用性が低く，複数言語への変換の実装には向か

Xtext は，DSL の構築や，DSL に従ったモデルからない．また，既存の実装は変換の達成を主な目的としテキストへの変換の定義などをサポートする DSL 開ており，ツールそのもののユーザビリティは低い．

発のフレームワークである．DSL を定義することで、本稿では，Xtext を用いて DSL を構築し，その DSLからテキストへの変換を定義する方法での実装を試みた．Xtext では DSL と変換部分が独立しており，構築した DSL の再利用性が高いことが利点として挙げ

コード補完機能やエラー検出機能などを備えた DSL用のエディタを生成することができる．

3. 実 装 方 針られる．また，構築した DSL に対応した高機能なエ

Xtext を用いて OCL の DSL 構築し，構築した DSLディタを生成することができるため，ツールそのものから JML へのマッピングを定義することで変換を実のユーザビリティの向上も見込めると考えられる．

現する．この実現方法には従来の実装に比べて以下の

2. 準

備

本章では背景知識として OCL，JML，DSL，Xtextについて順に説明する．

OCL は，UML モデルに対してさらに詳細な性質記†1 大阪大学
Osaka University

利点が挙げられる．

• 構築した DSL は，テキストへの変換部分の実装から独立しているため再利用性が高い．

• DSL を構築することで，コード補完や文法エラーの検出を行えるユーザビリティの高いエディタが得られる．

4. 実

装

本章ではツールの実装についての説明を行う．

4.1 DSL 構文の構築
OCL を付加できる UML クラス図の DSL を構築した．UML の部分に関しては，Xtext で既存のものが存在するので流用し，OCL 部分を追加する形で DSLの構築を行った．OCL 部分に関しては，メソッド名や引数の数，戻り値の型などの場合分けを追加した

EBNF を元に DSL を構築した．変換ルールの定義は

図2モデルから変換された出力結果

DSL に依存するので，DSL の段階で詳細な場合分けを行うことで意味的な解析にかかるコストが削減され，4.3 既存研究との実装規模の比較

DSL を再利用することの有用性が高まると考えられ既存研究では，ANTLR に OCL の EBNF を与える．また，生成されるエディタのエラー検出やコンテることで構文解析器を得ていた．しかし，ANTLR かンツアシストは定義した DSL に依存するので，DSLら得られた構文解析器の規模は数万行で可読性，拡張の場合分けを厳密に定義するほどコンテンツアシスト性の低いものだった．また，構文解析器に手動で変更機能などが充実したエディタが得られる．これらのこを加えた後に OCL 構文に変更を加える必要が出た場とから，メソッド名なども考慮した DSL 構文の構築合，手動による変更が反映できないといった問題が存は，ユーザビリティの観点や実装の再利用性の観点か在していた．Xtext を用いた場合は，構築した DSLら有用であると考えられる．

は他のコード等に依存しないので，DSL の変更，拡4.2 OCL から JML への変換ルールの定義
OCL-JML 間の変換は既存研究とほぼ同様に定義

張も既存研究に比べ柔軟に行える．

OCL から JML への変換部分の実装は既存のものしている3) ．exists 演算や forall 演算のようなコレクが約 5000 行に対して，Xtext を用いた手法は約 1700

ションループは表 1 のように iterate 演算に置き換え行とコードの規模は小さい．また，コードは DSL にることが可能なため，既存研究では iterate 演算以外沿って記述されており，可読性も既存研究に比べて高のコレクションループも iterate 演算に置き換え，そいと考えられる．の OCL 式と意味的に等価なメソッドを生成して，その値を JML 側から参照する方法で変換していた．し5. あ と が きかし，この変換方法ではコードの可読性が低下すると

本稿では，Xtext を用いた OCL から JML への変いった問題点が挙げられていたため，本稿の実装では換ツールの試作型の実装方法を示した．今後の予定とJML にメソッドが存在している exists 演算や forall

しては，ツールを完成させてツールの評価実験を行う演算などは直接的にマッピングを行っている．
表 1 Collection-Iterate 対応表の一部

c1 −>exists(a1 | a2 )=c1 −>forAll(a1 | a2 )=c1 −>iterate(a1 ; res : Boolean = false | res or a2 )c1 −>iterate(a1 ; res : Boolean = true | res and a2 )また，DSL に従ったモデルの例を図 1 に，モデルからの変換結果を図 2 に例として示す．

図 1 DSL に従ったモデル

こと，JML 以外の他の言語への変換を今回定義した

DSL を再利用して行うこと，OCL-JML 間での相互変換の実現などが挙げられる．

参考 文

献

1) Hamie, A.: Translating the Object Constraint
Language into the Modeling Language, In
Proc. of the 2004 ACM symposium on Appliedcomputing, pp.1531–1535 (2004).
2) Rodion, M. and Alessandra, R.: Implementing an OCL to JML translation tool, Vol.106,
No.426, pp.13–17 (2006).
3) 宮澤清介，花田健太郎，岡野浩三，楠本真二：
OCL から JML への変換ツールにおける対応クラスの拡張と教務システムに対する適用実験，信学技報， Vol.110, No.458, pp.115–120 (2011).