委員会特別寄稿

コードからSTMへ
リバースRExSTM for C
ツールについて名古屋大学 大学院情報科学研究科
JASA状態遷移設計研究WG 主査

吉田 則裕
青木 奈央

説明する。
まず、ifおよびelseifについては、その条件式を条件部に記述する。elseの場合は、表にELSEと記述することとする。switchについて
は、switch(var)で指定された変数varと、casenum:のようにラベルで指定された値numを用いて、表にvar == numのように記述する。
ラベ
ルがdefaultの場合については、ELSEと記述する。処理部は、ある条件部に対応する処理を記述する。

3.2 状態変数の選択
条件処理表を作成した後、条件処理表から1. はじめにて、状態がある場所の検討を始めた。検討後に状態変数を見つけ、全ての状態変数の中から、「フラグのあるところに状態があ
近年、組み込みソフトウエア開発の現場では、 至ったのは、状態遷移表で表現したい状態変数を選択する。

機能の多様化や高品質の要望に伴いレガシーる。」ということである。今回、我々は、レガシー本手法では、状態変数を1つだけ選択する場合コードの複雑化・肥大化やドキュメントの陳腐コードから状態遷移表をリバースモデリングすを考える。

「状態遷移表のリバースモデリングへの適化に起因する問題が多く起こっている。例えば、 る設計資料がソースコードのみであったり、担当

応」を研究テーマと決定しREｘSTM for Cを者が不在で既存のコードを修正すると派生し開発した。

状態変数は分岐条件に使用されている。

●て他の問題が発生してしまう場合である。
JASAの状態遷移設計研究WGでは、この問題を解消すべく、以前よりレガシーコードから状態遷移表をリバースモデリングする手法のここで、状態変数の定義は、以下のとおりである。
状態変数が取りうる値は有限個である。

●

3. 状態遷移表抽出手法
状態遷移表作成の流れを図1〜4に示す。
以
下、提案手法の流れを示す。

状態変数は内部で更新される。

●

たとえば、図2の条件処理表における状態変数候補は、変数stateである。
変数stateは、条件確立に以前より取り組んでおり、その一環とし手順1．
ソースコードから条件処理表を作成

式に含まれており、かつそのスコープ内で値がてリバースエンジニアリングを補助するツール

手順2．
条件処理表から状態変数を選択更新されているため、stateを状態変数として選

RExSTM for C を開発している。
本稿では、
状

手順3．
選択した状態変数に関する状態遷択することができる。

態遷移設計研究WGの取組みとREｘSTM移表を作成ツールについて紹介する。

3.1 条件処理表

2. 状態遷移設計研究WGの取組みれる処理を関数ごとにまとめた表である。

条件処理表とは、ある条件において実行さただし、状態変数は必ず1つの変数になるとは限らない。if(a == 1 && b == 0)のような条件分岐文では、その条件分岐文のスコープの内で、aかb、またはその両方の値が更新され状態遷移設計研究WGでは、ソフトウエア開ソースコードのある条件分岐文とそれに対発の効率化のための手法導入が進まないこと応する処理を、条件分岐文の階層構造にした扱う。に危惧しており、レガシーコードのブラックボッがって表現した条件と処理の対応表である。

3.3 状態遷移表の作成

クス化が進んでいることに着目してきた。
そこで、レガシーコードを解析し仕様を明確にすること

図2．
条件処理表の例でこの問題が解決できるのではと考えた。研究ているなら、a && bを1つの状態変数として選択された状態変数について、状態遷移表を作成する。状態遷移表の作成は、条件処理表をもととして行われる。

テーマを考えるうえで、重要になってくるのは仮

まず、条件処理表の処理部の変更について説である。我々は、仮説として、「状態遷移設計説明する。処理部において、状態変数が取りうは普遍的なモデルである。」と「レガシーコードる値を条件部から抽出し、その状態の数だけ条の中に状態遷移は必ずある。
」ということを打立

件処理表の処理部の列を複製する(図3)。
変数stateは、S1、S2およびELSEの3つの値

図1．入力ソースコードの例
図3．
条件処理表の例

状態遷移表を抽出するための中間状態として条件処理表を作成する。条件処理表の作成
例を図2に示す。条件処理表は、図2のように条件部と処理部に分割される。
条件部は、ソースコード内の関数および条件分岐文(if、elseif、elseおよびswitch)から作成される。
条件部について、ソースコードから条件処理表に変換するための具体的な変換手順を

14

Bulletin JASA 2018 Jan. vol.64

を取りうるため、同じ処理部を3列作成し、各列を、stateがS1、S2およびELSEのそれぞれの値

4.2 状態変数の選択
条件処理表を作成した後は、状態変数候補振舞いの漏れ抜けが発見できるようになった。
3．状態変数名の変更など、リファクタリングのの中から状態変数を選択し、状態遷移表を出要素が抽出可能になった。4。言語に依存せず、力する。
このとき、状態変数の選択をツールがすべてのコードに適用可能であることがわかっ複する条件式があり、それに対応する処理も不行わず、ユーザが行うものとする。
その理由は、あた。
今回のツールはC言語対応としているが、他要なものが存在する。
このように、不要な箇所るソースコードには複数の状態変数候補が存のJAVAなどの言語でも十分適用可能であるとが図3中において、黒く塗り潰されている。不必

在し、どの状態変数を選択すれば有効な条件考える。の場合に実行されうる処理に対応させる。
すると、図3においては、条件列には状態と重現状のツールで状態遷移表が生成できるこ

要な箇所を削除し、表を整形すると、図4のよう処理表を作成できるかの判定を、ユーザとの対な状態遷移表を得ることができる。

話型インタフェースによって実装するためである。 とにより、第三者でも容易に仕様が理解できる
そこで、Excel VBAによって、状態変数候補ようになる。
また、状態遷移表を主要に扱うツー

4. REｘSTM for C

を選択するための補助を目的とした、フォーム

ル（ZIPC）などと連携をはかることで、仕様の変アプリケーションを実装する。
フォームアプリ

更だけでなく高品質なコード、製品を顧客へ提ケーションの概観を図5に示す。

供可能になり、より有効に活用できると考える。

REｘSTM for Cとは、レガシーコードから状態遷移表を自動で生成するツールである。
A）
C言語のソースコードの再フォーマット、

図5．
状態変数候補選択画面および構文解析。

6. 今後の展開

B）
構文解析結果から条件処理表を作成条REｘSTM for Cでは、仮説の裏付け、手順

件処理表から状態変数を選択するためのが適用できることは証明されたが、様々なパUIの実装ターンに適用できるかの検証は不十分である。

C）選択された状態変数に関する状態遷移表

実際に変換が困難なパターンとして、「状態のの作成。

階層化パターン」if-elseで条件が階層化され3節において説明した手順と比べ、C言語のている場合、状態遷移表も階層構造となる場

ソースコードを一定の形式に整形する作業が以下、フォームアプリケーションの機能を説合、「状態変数の演算パターン」andやorで演追加されている。

明する。

算してから判定している場合、演算式を状態変4.1 構文解析と条件処理表の作成（a）
ソースコードプレビュー機能

数として判定する場合、「状態変数の置換えパ解析対象のソースコードの整形およびその構文解析の方法を述べる。以下にその大まかな流れを示す。
①GCCによってマクロ展開し、コメントを削除入力されたソースコードを表示する。
（b）
状態変数検索機能

ターン」
A&BをCに代入して、Cで判定する場合に、変数の変更はA、Bで行っている場合、「状A&BをCに代入し状態変数名を入力し、検索することができる。 態変数の関数渡しパターン」（c）
状態変数選択機能て、Cで判定しているとき、変数の変更は関数内状態変数候補の中から、状態変数として選で行っている場合、「 状態の並列化パターン」②プログラムの形式の整形を行う。

択する変数を選択することができる。状態状態が並列である場合の優先順位、「イベント③条件分岐文に対する識別子の付与を行う。

変数に対してコメントを付与する機能も搭条件と内部条件」状態変数以下の層の分岐条④条件式を̀̀無条件''としたif文の追加を行う。

載している。

件をイベントでなく処理する場合が考えられる。

する。

⑤グローバル変数・関数プロトタイプの宣言、 4.3 状態遷移表の出力

今後は、自動化できる部分はツール内で実行#pragmaおよびインラインアセンブラの削除を選択された状態変数についての状態遷移できるように進める。例えば、ソースから条件・行う。

表を出力する。
まず、条件処理表から不要な条処理対応表を自動生成や状態変数候補自動⑥状態変数候補を抽出する。

件分岐文を削除する。
次に、選択した状態変数抽出、選択後、状態遷移表の自動生成をめざす。

⑦条件分岐文の構造解析を行う。

が取りうる値それぞれ に対して、実行される処⑧TSV形式の条件処理表を出力する。

理文と実行されない処理文を抽出する。
実行さ⑨Excel VBAでTSV形式の条件処理表を読

吉田則裕：yoshida@ertl.jp
れない処理は不要であるため、黒く塗りつぶす。 2004年九州工業大学情報工学部知能情報工学科

み込み、表を作成する。

最後に、表を整理して状態遷移表が完成する。

卒業。2009年大阪大学大学院情報科学研究科博士後期課程修了。博士（情報科学）。現在、名古屋大学

5. 考察
図4．
状態遷移表の例

大学院情報科学研究科准教授。

このツールの適用効果として4つがあげられる。 青木奈央：nao@zipc.com
1．機械的にソースコードから状態遷移表を作成するプロセスがみえてきた。2．振舞いの可視

1 9 9 8 年 B S i n M a t h e m a t i c s 、A m e r i c a n
University、Washington D.C. IPA研究員、北陸先端 科 学 技 術 大 学 院 大 学 研 究員などを経て現 在 、化、モデル化によりレビューがしやすくなった。 キャッツ株式会社プロダクト事業部に所属

下記のURL（アンケート）にお答えいただけますと、ツールをダウンロードすることが可能になります。
アクセスできない場合は、designwg@jasa.or.jpにメールを送付ください。
https://goo.gl/forms/AZGgqdkYfTA9nwSu1

Bulletin JASA 2018 Jan. vol.64

15