(57)【要約】【課題】既存のソースコードから開発者の設計意図を含んだソフトウェアモデルを自動的に生成し、ソフトウェアモデルを中心としたソフトウェア設計手法を容易に実現する。【解決手段】ソフトウェア開発支援ツール１０１に、ソフトウェアモデルを読み込むソフトウェアモデル読み込み部１０２と、ソフトウェアモデルに記述された開発者の設計意図を抽出するソフトウェアモデル設計意図抽出部１０３と、生成ルール情報をもとにソースコードを出力するソースコード生成部１０４と、ソースコードを読み込むソースコード読み込み部１１２と、ソースコードに記述された開発者の設計意図を抽出するソースコード設計意図抽出部１１３と、生成ルール情報をもとにソフトウェアモデルを出力するソフトウェアモデル生成部１１４と、各種ルール情報を蓄積して管理するルールデータベース部１０５と、データベース更新管理部１１０と、ルール改良部１１１とを設ける。【選択図】図１
2010198494.tif 000002
【特許請求の範囲】
【請求項１】
開発者によって記述されたソフトウェアモデルを入力としてソースコードの自動生成に必要な情報をソフトウェアモデル情報として出力するソフトウェアモデル読み込み部と、
前記ソフトウェアモデル情報とソフトウェアモデルに記述された開発者の設計意図を抽出するためのルールを記述したソフトウェアモデル設計意図抽出ルール情報とを入力としてソフトウェアモデルに記述された開発者の設計意図を抽出しソフトウェアモデル設計意図情報として出力するソフトウェアモデル設計意図抽出部と、
前記ソフトウェアモデル情報と前記ソフトウェアモデル設計意図情報とソフトウェアモデルからソースコードを生成するためのルールを記述したソースコード生成ルール情報とを入力としてソースコードを出力するソースコード生成部とを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項２】
開発者によって記述されたソースコードを入力としてソフトウェアモデルの自動生成に必要な情報をソースコード情報として出力するソースコード読み込み部と、
前記ソースコード情報とソースコードに記述された開発者の設計意図を抽出するためのルールを記述したソースコード設計意図抽出ルール情報とを入力としてソースコードに記述された開発者の設計意図を抽出しソースコード設計意図情報として出力するソースコード設計意図抽出部と、
前記ソースコード情報と前記ソースコード設計意図情報とソースコードからソフトウェアモデルを生成するためのルールを記述したソフトウェアモデル生成ルール情報とを入力としてソフトウェアモデルを出力するソフトウェアモデル生成部とを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項３】
開発者によって記述されたソフトウェアモデルを入力としてソースコードの自動生成に必要な情報をソフトウェアモデル情報として出力するソフトウェアモデル読み込み部と、
前記ソフトウェアモデル情報とソフトウェアモデルに記述された開発者の設計意図を抽出するためのルールを記述したソフトウェアモデル設計意図抽出ルール情報とを入力としてソフトウェアモデルに記述された開発者の設計意図を抽出しソフトウェアモデル設計意図情報として出力するソフトウェアモデル設計意図抽出部と、
前記ソフトウェアモデル情報と前記ソフトウェアモデル設計意図情報とソフトウェアモデルからソースコードを生成するためのルールを記述したソースコード生成ルール情報とを入力としてソースコードを出力するソースコード生成部と、
ソースコードを入力としてソフトウェアモデルの自動生成に必要な情報をソースコード情報として出力するソースコード読み込み部と、
前記ソースコード情報とソースコードに記述された開発者の設計意図を抽出するためのルールを記述したソースコード設計意図抽出ルール情報とを入力としてソースコードに記述された開発者の設計意図を抽出しソースコード設計意図情報として出力するソースコード設計意図抽出部と、
前記ソースコード情報と前記ソースコード設計意図情報とソースコードからソフトウェアモデルを生成するためのルールを記述したソフトウェアモデル生成ルール情報とを入力としてソフトウェアモデルを出力するソフトウェアモデル生成部とを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項４】
開発者によって記述されたソフトウェアモデルを入力としてソースコードの自動生成に必要な情報をソフトウェアモデル情報として出力するソフトウェアモデル読み込み部と、
前記ソフトウェアモデル情報とソフトウェアモデルに記述された開発者の設計意図を抽出するためのルールを記述したソフトウェアモデル設計意図抽出ルール情報とを入力としてソフトウェアモデルに記述された開発者の設計意図を抽出しソフトウェアモデル設計意図情報として出力するソフトウェアモデル設計意図抽出部と、
前記ソフトウェアモデル情報と前記ソフトウェアモデル設計意図情報とソフトウェアモデルからソースコードを生成するためのルールを記述したソースコード生成ルール情報とを入力としてソースコードを出力するソースコード生成部と、
ソースコードを入力としてソフトウェアモデルの自動生成に必要な情報をソースコード情報として出力するソースコード読み込み部と、
前記ソースコード情報とソースコードに記述された開発者の設計意図を抽出するためのルールを記述したソースコード設計意図抽出ルール情報とを入力としてソースコードに記述された開発者の設計意図を抽出しソースコード設計意図情報として出力するソースコード設計意図抽出部と、
前記ソースコード情報と前記ソースコード設計意図情報とソースコードからソフトウェアモデルを生成するためのルールを記述したソフトウェアモデル生成ルール情報とを入力としてソフトウェアモデルを出力するソフトウェアモデル生成部と、
前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報とをデータベースに蓄積して管理するルールデータベース部と、
前記ルールデータベース部の内容更新を管理するデータベース更新管理部と、
前記ソフトウェアモデル情報と前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソフトウェアモデル設計意図情報と前記ソースコード情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報と前記ソースコード設計意図情報とを入力として前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報とを開発者の意図を反映するよう修正するための指示を前記データベース更新管理部に指示するルール改良部とを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項５】
請求項１、３、４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル情報としてソフトウェアモデルの特徴を表現するために要素ＩＤと名前ラベルとタイプと記述位置と接続先要素リストと被接続先要素リストとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項６】
請求項１、３、４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル設計意図情報としてソフトウェアモデルに記述されている要素と開発者の設計意図とを関連付けするために要素ＩＤとコード生成ルールＩＤと設計意図ＩＤとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項７】
請求項１、３、４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル設計意図抽出ルール情報として開発者の設計意図を特徴付けるためにタイプと記述位置と接続パターンと一致閾値と優先度とコード生成ルールＩＤと設計意図ＩＤとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項８】
請求項１、３、４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード生成ルール情報として開発者の設計意図を反映したソースコードを生成するための情報を格納するためにコード生成ルールＩＤと設計意図ＩＤと生成コードテンプレートとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項９】
請求項７に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル設計意図抽出部は、前記ソフトウェアモデル情報として表現されるソフトウェアモデルに記述された要素のタイプと前記要素の記述位置と前記要素間の接続パターンとを用いて前記ソフトウェアモデル設計意図抽出ルール情報と一致するかどうかを判定することを特徴とするソフトウェア開発支援ツール。
【請求項１０】
請求項７に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル設計意図抽出ルール情報の前記タイプと前記記述位置と前記接続パターンとに一致重み値を持ち、
前記ソフトウェアモデル設計意図抽出部は、開発者の設計意図に一致するソフトウェアモデル設計意図情報を検索するための一致判定の際に前記タイプと前記記述位置と前記接続パターンとの一致判定に重み付けをした判定をすることにより、設計者の開発意図を反映しやすい設計意図を抽出することを特徴とするソフトウェア開発支援ツール。
【請求項１１】
請求項２〜４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード情報としてソースコードの特徴を表現するためにブロックＩＤとブロック名とタイプと記述位置と関連リストとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項１２】
請求項２〜４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード設計意図情報としてソースコードに記述されているブロックと開発者の設計意図とを関連付けするためブロックＩＤとソフトウェアモデル生成ルールＩＤと設計意図ＩＤとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項１３】
請求項２〜４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード設計意図抽出ルール情報として開発者の記述意図を特徴付けるためタイプと記述特性と関連パターンと一致閾値と優先度とソフトウェアモデル生成ルールＩＤと設計意図ＩＤとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項１４】
請求項２〜４のいずれか１項に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデル生成ルール情報として開発者の記述意図を反映したソフトウェアモデルを生成するためソフトウェアモデル生成ルールＩＤと設計意図ＩＤと生成ソフトウェアモデルテンプレートとを備えたことを特徴とするソフトウェア開発支援ツール。
【請求項１５】
請求項１３に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード設計意図抽出部は、前記ソースコード情報として表現されるソースコードに記述されたブロックのタイプと前記ブロックの記述特性と前記ブロック間の関連パターンとを用いて前記ソースコード設計意図抽出ルール情報と一致するかどうかを判定することを特徴とするソフトウェア開発支援ツール。
【請求項１６】
請求項１５に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード設計意図抽出部は、前記ソースコード設計意図抽出ルール情報と一致するかどうかを判定する前記記述特性を、前記ブロックの開始行と前記ブロックの終了行と前記ブロックの関連数から求めることを特徴とするソフトウェア開発支援ツール。
【請求項１７】
請求項１３に記載のソフトウェア開発支援ツールにおいて、
前記ソースコード設計意図抽出ルール情報の前記タイプと前記記述特性と前記関連パターンとに一致重み値を持ち、
前記ソースコード設計意図抽出部は、開発者の設計意図に一致するソースコード設計意図情報を検索するための一致判定の際に前記タイプと前記記述特性と前記関連パターンとの一致判定に重み付けをした判定をすることにより、設計者の開発意図を反映しやすい設計意図を抽出することを特徴とするソフトウェア開発支援ツール。
【請求項１８】
請求項３又は４に記載のソフトウェア開発支援ツールにおいて、
前記ソフトウェアモデルの代わりに開発者が最初に開発するソフトウェアモデルを初期ソフトウェアモデルとして入力し、前記ソフトウェア開発支援ツールによって出力される前記ソースコードを初期生成ソースコードとし、前記初期生成ソースコードを開発者の手によって修正した人手修正ソースコードを前記ソフトウェア開発支援ツールの前記ソースコード入力として前記ソフトウェアモデルの代わりに生成ソフトウェアモデルを出力することを特徴とするソフトウェア開発支援ツール。
【請求項１９】
請求項１８に記載のソフトウェア開発支援ツールにおいて、
前記初期ソフトウェアモデルと前記生成ソフトウェアモデルとを入力として再生成ソースコードを出力することにより、前記初期生成ソースコードより開発者の設計意図をより多く反映したソースコードを出力することを特徴とするソフトウェア開発支援ツール。
【請求項２０】
請求項１９に記載のソフトウェア開発支援ツールにおいて、
前記再生成ソースコードを入力として再度生成ソフトウェアモデルを自動生成することにより、開発者の設計意図をより多く反映することを特徴とするソフトウェア開発支援ツール。
【請求項２１】
請求項１８に記載のソフトウェア開発支援ツールにおいて、
前記初期ソフトウェアモデルを前記ソフトウェアモデル読み込み部の入力とし前記ソフトウェアモデル情報の代わりに初期ソフトウェアモデル情報を前記ソフトウェアモデル読み込み部が出力することにより、開発者による初期のソフトウェアモデルと自動生成によるソフトウェアモデルとを区別することを特徴とするソフトウェア開発支援ツール。
【請求項２２】
請求項１８に記載のソフトウェア開発支援ツールにおいて、
前記生成ソフトウェアモデルを前記ソフトウェアモデル読み込み部の入力とし前記ソフトウェアモデル情報の代わりに生成ソフトウェアモデル情報を前記ソフトウェアモデル読み込み部が出力することにより、自動生成によるソフトウェアモデルから更に前記再生成ソースコードを出力することを特徴とするソフトウェア開発支援ツール。
【請求項２３】
請求項１８に記載のソフトウェア開発支援ツールにおいて、
前記人手修正ソースコードを前記ソースコード読み込み部の入力とし前記ソースコード情報の代わりに修正ソースコード情報を前記ソースコード読み込み部が出力することにより、開発者による修正済みのソースコードと自動生成によるソースコードとを区別することを特徴とするソフトウェア開発支援ツール。
【請求項２４】
請求項１９に記載のソフトウェア開発支援ツールにおいて、
前記再生成ソースコードを前記ソースコード読み込み部の入力とし前記ソースコード情報の代わりに再生成ソースコード情報を前記ソースコード読み込み部が出力することにより、前記再生成ソースコードから更に前記生成ソフトウェアモデルを出力することを特徴とするソフトウェア開発支援ツール。
【請求項２５】
請求項４に記載のソフトウェア開発支援ツールにおいて、
前記ルール改良部は、前記修正ソースコード情報と前記再生成ソースコード情報との差分から前記ソースコード生成ルール情報に新規のソースコード生成ルールを追加することを特徴とするソフトウェア開発支援ツール。
【請求項２６】
請求項４に記載のソフトウェア開発支援ツールにおいて、
前記ルール改良部は、前記修正ソースコードと前記再生成ソースコードとの差分と前記修正ソースコード情報と前記再生成ソースコード情報とから前記ソースコード生成ルール情報の修正箇所を発見し、前記ソースコード生成ルール情報に含まれる前記ソースコード生成テンプレートを修正することを特徴とするソフトウェア開発支援ツール。
【請求項２７】
請求項４に記載のソフトウェア開発支援ツールにおいて、
前記ルール改良部は、前記初期ソフトウェアモデル情報と前記生成ソフトウェアモデル情報との差分から前記ソフトウェアモデル生成ルール情報に新規のソフトウェアモデル生成ルールを追加することを特徴とするソフトウェア開発支援ツール。
【請求項２８】
請求項４に記載のソフトウェア開発支援ツールにおいて、
前記ルール改良部は、前記初期ソフトウェアモデルと前記生成ソフトウェアモデルとに記述されている前記要素間の接続先の差分と前記初期ソフトウェアモデル情報と前記生成ソフトウェアモデル情報とから前記ソフトウェアモデル生成ルール情報の修正箇所を発見し、前記ソフトウェアモデル生成ルール情報に含まれる前記ソフトウェアモデル生成テンプレートを修正することを特徴とするソフトウェア開発支援ツール。
【請求項２９】
請求項１〜４のいずれか１項に記載のソフトウェア開発支援ツールと、
開発者からのソフトウェアモデルを前記ソフトウェア開発支援ツールへ入力するための入力部と、
前記ソースコード生成部によって生成されたソースコードを表示するための表示部とを備えたことを特徴とするソフトウェア開発支援システム。
【請求項３０】
請求項１〜４のいずれか１項に記載のソフトウェア開発支援ツールと、
開発者からのソースコードを前記ソフトウェア開発支援ツールへ入力するための入力部と、
前記ソフトウェアモデル生成部によって生成されたソフトウェアモデルを表示するための表示部とを備えたことを特徴とするソフトウェア開発支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードからソフトウェアモデルを生成することによるソフトウェア開発手法を支援するツールに関するものである。
【背景技術】
【０００２】
従来のソースコードからソフトウェアモデルを生成することによるソフトウェア開発支援ツールとして、実際のソースプログラムからプログラム構成図を自動的に生成できるものが知られている（特許文献１参照）。
【特許文献１】特開昭６３−２７３１３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記従来のソフトウェア開発支援ツールでは、ソースコードに記述されている字面だけを形式的にモデルに変換しており、開発者の設計意図を含むことが困難である。設計情報の重要な要素である開発者の設計意図が含まれないモデル記述では、後の追加・修正が非常に困難である。設計意図を含む形でのモデル記述を得るために、現状では人手での変換に頼らざるを得ず、膨大な既存ソフトウェア資産をモデル記述に変換するのは規模の面からもコストの面からも非常に非効率かつ困難な作業となってしまう。
【０００４】
本発明は、上記課題を解決するため、既存のソースコードから開発者の設計意図を含んだソフトウェアモデルを自動的に生成し、ソフトウェアモデルを中心としたソフトウェア設計手法を容易に実現することを目的とする。
【課題を解決するための手段】
【０００５】
前記従来の課題を解決するために、本発明のソフトウェア開発支援ツールは、開発者によって記述されたソフトウェアモデルを入力としてソースコードの自動生成に必要な情報をソフトウェアモデル情報として出力するソフトウェアモデル読み込み部と、前記ソフトウェアモデル情報とソフトウェアモデルに記述された開発者の設計意図を抽出するためのルールを記述したソフトウェアモデル設計意図抽出ルール情報とを入力としてソフトウェアモデルに記述された開発者の設計意図を抽出しソフトウェアモデル設計意図情報として出力するソフトウェアモデル設計意図抽出部と、前記ソフトウェアモデル情報と前記ソフトウェアモデル設計意図情報とソフトウェアモデルからソースコードを生成するためのルールを記述したソースコード生成ルール情報とを入力としてソースコードを出力するソースコード生成部と、ソースコードを入力としてソフトウェアモデルの自動生成に必要な情報をソースコード情報として出力するソースコード読み込み部と、前記ソースコード情報とソースコードに記述された開発者の設計意図を抽出するためのルールを記述したソースコード設計意図抽出ルール情報とを入力としてソースコードに記述された開発者の設計意図を抽出しソースコード設計意図情報として出力するソースコード設計意図抽出部と、前記ソースコード情報と前記ソースコード設計意図情報とソースコードからソフトウェアモデルを生成するためのルールを記述したソフトウェアモデル生成ルール情報とを入力としてソフトウェアモデルを出力するソフトウェアモデル生成部と、前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報とをデータベースに蓄積して管理するルールデータベース部と、前記ルールデータベース部の内容更新を管理するデータベース更新管理部と、前記ソフトウェアモデル情報と前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソフトウェアモデル設計意図情報と前記ソースコード情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報と前記ソースコード設計意図情報とを入力として前記ソフトウェアモデル生成ルール情報と前記ソフトウェアモデル設計意図抽出ルール情報と前記ソースコード生成ルール情報と前記ソースコード設計意図抽出ルール情報とを開発者の意図を反映するよう修正するための指示を前記データベース更新管理部に指示するルール改良部とを備えたことを特徴とする。
【０００６】
本発明のソフトウェア開発支援ツールによれば、既存のソースコードから自動的に開発者の設計意図を含んだソフトウェアモデルを生成し、ソフトウェアモデルを中心としたソフトウェア設計手法を容易に実現することができる。また、新規にソフトウェアモデルを中心としたソフトウェア設計手法を用いてソフトウェア開発を行う場合には、抽象的なソフトウェアモデルから設計を始め、生成された初期生成ソースコードに開発者が修正を加え、更にソフトウェアモデルを生成させ、前記の抽象的なソフトウェアモデルと合成することを繰り返すことにより、より具体的なソフトウェアモデルを容易に開発することができる。
【発明の効果】
【０００７】
本発明のソフトウェア開発支援ツールによれば、ソフトウェアモデルを中心としたソフトウェア設計手法を容易に実現することができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【０００９】
図１は、本発明の実施の形態におけるソフトウェア開発支援ツールの構成図である。図１において、１０１は本発明の実施の形態におけるソフトウェア開発支援ツールである。ソフトウェア開発支援ツール１０１において、ソフトウェアモデル読み込み部１０２は開発者１３１が作成した初期ソフトウェアモデル１１５又は生成ソフトウェアモデル１１６を入力として、図形的なソフトウェアモデルの記述を計算機処理が容易なデータに変換し、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２として出力する。ソフトウェアモデル設計意図抽出部１０３は、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２とソフトウェアモデルに含まれる開発者の設計意図を抽出するためのルールを格納したソフトウェアモデル設計意図抽出ルール情報１２４を入力として、ソフトウェアモデルに含まれる設計意図のデータであるソフトウェアモデル設計意図情報１２３を出力する。ソースコード生成部１０４は、初期ソフトウェアモデル情報１２１と、ソフトウェアモデル設計意図情報１２３と、ソースコードを生成するためのルールを格納したソースコード生成ルール情報１２５とを入力として初期ソフトウェアモデル１１５に対応する初期生成ソースコード１１７又は生成ソフトウェアモデル１１６に対応した再生成ソースコード１１８を出力する。ルールデータベース部１０５は、ソースコードからソフトウェアモデルを生成するためのルールを格納したデータベースであるソフトウェアモデル生成ルールデータベース１０６と、ソフトウェアモデルからソースコードを生成するためのルールを格納したデータベースであるソースコード生成ルールデータベース１０９と、ソフトウェアモデルに含まれる開発者の設計意図を抽出するためのルールを格納したデータベースであるソフトウェアモデル設計意図抽出ルールデータベース１０７と、ソースコードに含まれる開発者の設計意図を抽出するためのルールを格納したデータベースであるソースコード設計意図抽出ルールデータベース１０８とからなる。
【００１０】
ルール改良部１１１は、初期ソフトウェアモデル情報１２１、生成ソフトウェアモデル情報１２２、ソフトウェアモデル設計意図情報１２３、ソフトウェアモデル設計意図抽出ルール情報１２４、ソースコード生成ルール情報１２５、修正ソースコード情報１２９、再生成ソースコード情報１２８、ソフトウェアモデル生成ルール情報１２７、ソースコード設計意図抽出ルール情報１２６、ソースコード設計意図情報１３０を入力として、ルールデータベース部１０５の中の４種のデータベース１０６〜１０９の内容を修正することにより、ソフトウェアモデルからソースコードへの変換及びソースコードからソフトウェアモデルへの変換を、より開発者の意図にあったものに改良する。データベース更新管理部１１０は、ルール改良部１１１の指示に応じてルールデータベース部１０５にデータベースの修正を指示する。ソースコード読み込み部１１２は、開発者１１９が作成又は修正した人手修正ソースコード１２０を入力として、計算機処理が容易なデータに変換し、再生成ソースコード情報１２８又は修正ソースコード情報１２９として出力する。ソースコード設計意図抽出部１１３は、修正ソースコード情報１２９又は再生成ソースコード情報１２８とソースコードに含まれる開発者の設計意図を抽出するためのルールを格納したソースコード設計意図抽出ルール情報１２６を入力として、ソースコードに含まれる設計意図のデータであるソースコード設計意図情報１３０を出力する。ソフトウェアモデル生成部１１４は、修正ソースコード情報１２９又は再生成ソースコード情報１２８と、ソースコード設計意図情報１３０と、ソフトウェアモデルを生成するためのルールを格納したソフトウェアモデル生成ルール情報１２７とを入力として、人手修正ソースコード１２０又は再生成ソースコード１１８に対応する生成ソフトウェアモデル１１６を出力する。
【００１１】
図２は、ソフトウェアモデル読み込み部１０２の処理フローを示す。ソフトウェアモデル読み込み部１０２は、開発者１３１が作成した初期ソフトウェアモデル１１５又は生成ソフトウェアモデル１１６を入力として、図形的なソフトウェアモデルの記述を計算機処理が容易なデータに変換し、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２として出力する処理を行う。まず、開発者１３１により記述された初期ソフトウェアモデル１１５又は生成ソフトウェアモデル１１６を読み込む（２０１）。次に要素ＩＤを０にする（２０２）。次にソフトウェアモデルに記述された全ての記述要素について繰り返しを開始する（２０３）。次に要素ＩＤの値を１増やす（２０４）。次にソフトウェアモデル情報を出力するために記述要素の記述内容を分析する（２０５）。次にステップ２０５での分析結果を初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２として出力する（２０６）。次にステップ２０４に戻って繰り返し処理を行う。ステップ２０７は、ステップ２０３の繰り返し処理の終了位置を示す。
【００１２】
図３は、図２のソフトウェアモデル読み込み部１０２の処理フロー中のステップ２０５で呼び出される記述要素の記述内容分析サブルーチンの処理フローを示す。まず、現在処理対象の記述要素のステレオタイプを読み取る（３０１）。次に現在処理対象の記述要素の名前ラベルを読み取る（３０２）。次に現在処理対象の記述要素の記述位置を判定する（３０３）。次に現在処理対象の記述要素に接続している他の記述要素を走査する（３０４）。
【００１３】
図４は、図３の記述要素の記述内容分析サブルーチンからステップ３０３で呼び出される記述位置判定サブルーチンの処理フローを示す。まず、記述位置判定対象要素の上下方向の記述位置はどこかを判定する（４０１）。上１／３以上の位置に記述されていた場合には更に左右方向の記述位置を判定する（４０２）。左右方向１／３以上左側に記述されていた場合には位置を「上左部」に設定する（４０４）。中央に記述されていた場合には位置を「上中央部」に設定する（４０５）。左右方向１／３以上右側に記述されていた場合には位置を「上右部」に設定する（４０６）。ステップ４０１の判定で下１／３以下の位置に記述されていた場合には更に左右方向の記述位置を判定する（４０３）。左右方向１／３以上左側に記述されていた場合には位置を「下左部」に設定する（４０７）。中央に記述されていた場合には位置を「下中央部」に設定する（４０８）。左右方向１／３以上右側に記述されていた場合には位置を「下右部」に設定する（４０９）。ステップ４０１の判定で上下１／３以上の位置に記述されていない場合は更に左右方向の記述位置を判定する（４１０）。左右方向１／３以上左側に記述されていた場合には位置を「中央左部」に設定する（４１１）。中央に記述されていた場合には位置を「中心部」に設定する（４１２）。左右方向１／３以上右側に記述されていた場合には位置を「中央右部」に設定する（４１３）。
【００１４】
図５は、図３の記述要素の記述内容分析サブルーチンからステップ３０４で呼び出される接続要素走査サブルーチンの処理フローを示す。まず、接続先リスト中の要素ＩＤを０にする（５０１）。次に接続先リスト中の接続方向を「なし」にする（５０２）。次に被接続先リスト中の要素ＩＤを０にする（５０３）。次に被接続先リスト中の接続方向を「なし」にする（５０４）。次に現在処理対象の記述要素に接続があるかどうか判定する（５０５）。接続がない場合には終了する。接続がある場合には全ての接続について繰り返しを開始する（５０６）。次に接続線がどの方向に接続されているかを判定する（５０７）。接続線が出る方向に接続されている場合には、接続先要素リスト中の要素ＩＤに接続先要素ＩＤを追加する（５０８）。次に接続先要素リスト中の接続方向に接続線接続辺の位置を追加する（５０９）。ステップ５０７の判定において接続線が入る方向に接続されている場合には、被接続先要素リスト中の要素ＩＤに接続元要素ＩＤを追加する（５１０）。次に被接続先要素リスト中の接続方向に接続線接続辺の位置を追加する（５１１）。次にステップ５０７に戻って繰り返し処理を行う。ステップ５１２は、ステップ５０６の繰り返し処理の終了位置を示す。
【００１５】
図６は、ソースコード生成部１０４の処理フローを示す。ソースコード生成部１０４は初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２と、ソフトウェアモデル設計意図情報１２３と、ソースコードを生成するためのルールを格納したソースコード生成ルール情報１２５とを入力として、初期ソフトウェアモデル１１５に対応する初期生成ソースコード１１７、又は生成ソフトウェアモデル１１６に対応する再生成ソースコード１１８を出力する処理を行う。まず、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２を読み込む（６０１）。次にソフトウェアモデル設計意図情報１２３を読み込む（６０２）。次に、ソースコード生成ルール情報１２５を読み込む（６０３）。次に初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２に含まれる全ての要素ＩＤについて繰り返しを開始する（６０４）。次にソフトウェアモデル設計意図情報１２３から現在の要素ＩＤに対応するコード生成ルールＩＤを読み込む（６０５）。次に、ソフトウェアモデル設計意図情報１２３から現在の要素ＩＤに対応する設計意図ＩＤを読み込む（６０６）。次にソースコード生成ルール情報１２５からコード生成ルールＩＤ及び設計意図ＩＤに該当する生成コードテンプレートを読み込む（６０７）。次に初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル１２２から現在の要素ＩＤに対応する名前ラベルを読み込む（６０８）。次に生成コードテンプレート中の「［ｎａｍｅ］」タグ位置を名前ラベルで置き換える（６０９）。次に、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２から現在の要素ＩＤに対応する接続先要素リストを読み込む（６１０）。次に接続先要素リスト中の全ての接続先について繰り返しを開始する（６１１）。次に初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２から接続先要素ＩＤに対応する名前ラベルを読み込む（６１２）。次に生成コードテンプレート中の「［ｒｅｆｅｒｅｎｃｅ］」又は「［ｃａｌｌｓ］」のタグ位置を名前ラベルで置き換える（６１３）。次にステップ６１２に戻って繰り返し処理を行う。ステップ６１４は、ステップ６１１の繰り返し処理の終了位置を示す。次に生成コードテンプレート中に「［ｂｏｄｙ］」タグがあるかどうか判定する（６１５）。「［ｂｏｄｙ］」タグがある場合には生成コードテンプレート中の「［ｂｏｄｙ］」タグ位置を「本体部」コメントで置き換える（６１６）。次にステップ６０４に戻って繰り返し処理を行う。ステップ６１７は、ステップ６０４の繰り返し処理の終了位置を示す。
【００１６】
図７は、ソフトウェアモデル設計意図抽出部１０３の処理フローを示す。ソフトウェアモデル設計意図抽出部１０３は、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２と、ソフトウェアモデルに含まれる開発者の設計意図を抽出するためのルールを格納したソフトウェアモデル設計意図抽出ルール情報１２４とを入力として、ソフトウェアモデルに含まれる設計意図のデータであるソフトウェアモデル設計意図情報１２３を出力する。まず、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２を読み込む（７０１）。次にソフトウェアモデル設計意図抽出ルール情報１２４を読み込む（７０２）。次に初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２に含まれる全ての要素ＩＤについて繰り返しを開始する（７０３）。次に現在処理中の要素ＩＤについて接続パターン分析を行う（７０４）。次に設計意図に一致するソフトウェアモデル記述があるかどうかの判定フラグであるマッチフラグを０にする（７０５）。次に全てのソフトウェアモデル設計意図抽出ルール情報１２４について繰り返しを開始する（７０６）。次にソフトウェアモデルの記述が設計意図に一致するかどうかの設計意図マッチングを行う（７０７）。次にステップ７０７に戻って繰り返し処理を行う。ステップ７０８は、ステップ７０６の繰り返し処理の終了位置を示す。
【００１７】
次に、マッチフラグが０より大であるかどうか判定する（７０９）。０より大でない場合には該当の要素ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１８）。次にコード生成ルールＩＤの規定値をソフトウェアモデル設計意図情報１２３に出力する（７１９）。次に設計意図ＩＤの規定値をソフトウェアモデル設計意図情報１２３に出力する（７２０）。ステップ７０９の判定でマッチフラグが０より大であった場合にはマッチフラグが１であるかどうかの判定を行う（７１０）。マッチフラグが１でない場合には該当要素ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１５）。次にマッチしたソフトウェアモデル設計意図抽出ルール情報１２４の中で最も優先度の高いルールのコード生成ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１６）。次にマッチしたソフトウェアモデル設計意図抽出ルール情報１２４の中で最も優先度の高いルールの設計意図ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１７）。ステップ７１０の判定でマッチフラグが１であった場合には該当要素ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１１）。次にマッチしたソフトウェアモデル設計意図抽出ルール情報１２４のコード生成ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１２）。次にマッチしたソフトウェアモデル設計意図抽出ルール情報１２４の設計意図ＩＤをソフトウェアモデル設計意図情報１２３に出力する（７１３）。次にマッチしたソフトウェアモデル設計意図抽出ルール情報１２４の優先度を１増やす（７１４）。次にステップ７０４に戻って繰り返し処理を行う。ステップ７２１は、ステップ７０３の繰り返し処理の終了位置を示す。
【００１８】
図８は、図７のソフトウェアモデル設計意図抽出部１０３の処理フローからステップ７０４で呼び出される接続パターン分析サブルーチンの処理フローを示す。まず、接続数、被接続数、平均接続距離、最大接続距離、最小接続距離、平均被接続距離、最大被接続距離、最小被接続距離、合計接続距離、合計被接続距離をそれぞれ０にする（８０１）。次に接続方向リストを空にする（８０２）。次に該当要素ＩＤの接続先要素リストを読み込む（８０３）。次に全ての接続先について繰り返しを開始する（８０４）。次に接続数を１増やす（８０５）。次に接続先要素との接続距離を算出する（８０６）。次に接続距離値を更新する（８０７）。次に接続方向リストに該当接続先の接続方向を追加する（８０８）。次にステップ８０４に戻って繰り返し処理を行う。ステップ８０９は、ステップ８０４の繰り返し処理の終了位置を示す。次に、全ての被接続先について繰り返し処理を開始する（８１０）。次に被接続数を１増やす（８１１）。次に被接続先要素との接続距離を算出する（８１２）。次に被接続先距離の値を更新する（８１３）。次に接続方向リストに該当被接続先の接続方向を追加する（８１４）。次にステップ８１１に戻って繰り返し処理を行う。ステップ８１５は、ステップ８１０の繰り返し処理の終了位置を示す。
【００１９】
図９は、図８の接続パターン分析サブルーチンからステップ８０６で呼び出される接続先要素との接続距離算出サブルーチンの処理フローを示す。まず、接続先要素の座標を得る（９０１）。次に現在の処理対象要素の座標を得る（９０２）。次にＸ１に処理対象要素の横軸座標、Ｙ１に処理対象要素の縦軸座標を設定する（９０３）。次にＸ２に接続先要素の横軸座標、Ｙ２に接続先要素の縦軸座標を設定する（９０４）。次に｜Ｘ２−Ｘ１｜＋｜Ｙ２−Ｙ１｜を距離とする（９０５）。
【００２０】
図１０は、図８の接続パターン分析サブルーチンからステップ８１２で呼び出される被接続先要素との接続距離算出サブルーチンの処理フローを示す。まず、被接続先要素の座標を得る（１００１）。次に現在の処理対象要素の座標を得る（１００２）。次にＸ１に処理対象要素の横軸座標、Ｙ１に処理対象要素の縦軸座標を設定する（１００３）。次にＸ２に被接続先要素の横軸座標、Ｙ２に被接続先要素の縦軸座標を設定する（１００４）。次に｜Ｘ２−Ｘ１｜＋｜Ｙ２−Ｙ１｜を距離とする（１００５）。
【００２１】
図１１は、図８の接続パターン分析サブルーチンからステップ８０７で呼び出される接続距離値更新サブルーチンのフローを示す。まず合計接続距離に該当接続先との距離を加算する（１１０１）。次に平均接続距離に合計接続距離を接続数で割った値を設定する（１１０２）。次に該当接続先との距離が最小接続距離より小さいかどうか判定する（１１０３）。該当接続先との距離が最小接続距離より小さくない場合にはステップ１１０５に進む。該当接続先との距離が最小接続距離より小さい場合には最小接続距離に該当接続先との距離を設定する（１１０４）。次に該当接続先との距離が最大接続距離より大きいかどうか判定する（１１０５）。該当接続先との距離が最大接続距離より大きくない場合には終了する。該当接続先との距離が最大接続距離より大きい場合には最大接続距離に該当接続先との距離を設定する（１１０６）。
【００２２】
図１２は、図８の接続パターン分析サブルーチンからステップ８１３で呼び出される被接続距離値更新サブルーチンの処理フローを示す。まず合計被接続距離に該当被接続先との距離を加算する（１２０１）。次に平均被接続距離に合計被接続距離を被接続数で割った値を設定する（１２０２）。次に該当被接続先との距離が最小被接続距離より小さいかどうか判定する（１２０３）。該当被接続先との距離が最小被接続距離より小さくない場合にはステップ１２０５に進む。該当被接続先との距離が最小被接続距離より小さい場合には最小被接続距離に該当被接続先との距離を設定する（１２０４）。次に該当被接続先との距離が最大被接続距離より大きいかどうか判定する（１２０５）。該当被接続先との距離が最大被接続距離より大きくない場合には終了する。該当被接続先との距離が最大被接続距離より大きい場合には最大被接続距離に該当被接続先との距離を設定する（１２０６）。
【００２３】
図１３は、図７のソフトウェアモデル設計意図抽出部１０３の処理フローからステップ７０７で呼び出される設計意図マッチングサブルーチンの処理フローを示す。まず、タイプ一致重み値、記述位置一致重み値、接続パターン一致重み値をそれぞれ読み込む（１３０１）。次に一致閾値を読み込む（１３０２）。次に一致尤度に０を設定する（１３０３）。次にタイプが一致するかどうか判定する（１３０４）。タイプが一致しない場合にはステップ１３０６に進む。タイプが一致する場合には一致尤度にタイプ一致重み値を加算する（１３０５）。次に記述位置が一致するかどうか判定する（１３０６）。記述位置が一致しない場合にはステップ１３０８に進む。記述位置が一致する場合には一致尤度に記述位置一致重み値を加算する（１３０７）。次に接続パターンが一致するかどうか判定する（１３０８）。接続パターンが一致しない場合にはステップ１３１０に進む。接続パターンが一致する場合には一致尤度に接続パターン一致重み値を加算する（１３０９）。次に一致尤度が一致閾値以上かどうかを判定する（１３１０）。一致尤度が一致閾値より小さい場合には終了する。一致尤度が一致閾値より大きいか等しい場合にはマッチフラグの値を１増やす（１３１１）。
【００２４】
図１４は、データベース更新管理部１１０の処理フローを示す。データベース更新管理部１１０は、ルール改良部１１１の指示に応じてルールデータベース部１０５にデータベースの修正を指示する。まず、データベース修正指示を受け取る（１４０１）。次にソースコード設計意図抽出ルールの修正指示かどうかを判定する（１４０２）。ソースコード設計意図抽出ルールの修正指示でない場合にはステップ１４０３に進む。ソースコード設計意図抽出ルールの修正指示である場合にはソースコード設計意図抽出ルールデータベース１０８を修正する（１４０８）。次にソフトウェアモデル設計意図抽出ルールの修正指示かどうかを判定する（１４０３）。ソフトウェアモデル設計意図抽出ルールの修正指示でない場合にはステップ１４０４に進む。ソフトウェアモデル設計意図抽出ルールの修正指示である場合にはソフトウェアモデル設計意図抽出ルールデータベース１０７を修正する（１４０７）。次にソースコード生成ルールの修正指示かどうかを判定する（１４０４）。ソースコード生成ルールの修正指示でない場合にはソフトウェアモデル生成ルールデータベース１０６を修正する（１４０５）。ソースコード生成ルールの修正指示である場合にはソースコード生成ルールデータベース１０９を修正する（１４０６）。
【００２５】
図１５は、ソースコード設計意図抽出部１１３の処理フローを示す。ソースコード設計意図抽出部１１３は、修正ソースコード情報１２９又は再生成ソースコード情報１２８と、ソースコードに含まれる開発者の設計意図を抽出するためのルールを格納したソースコード設計意図抽出ルール情報１２６とを入力として、ソースコードに含まれる設計意図のデータであるソースコード設計意図情報１３０を出力する。まず、修正ソースコード情報１２９又は再生成ソースコード情報１２８を読み込む（１５０１）。次にソースコード設計意図抽出ルール情報１２６を読み込む（１５０２）。次に読み込んだソースコード情報に含まれる全てのブロックＩＤについて繰り返し処理を開始する（１５０３）。次にブロック間のつながりを表す関連のパターンについて分析する（１５０４）。次にブロックの記述特性について分析・設定を行う（１５０５）。次に設計意図に一致するかどうかのマッチフラグを０にする（１５０６）。次に全てのソースコード設計意図抽出ルール情報１２６について繰り返し処理を開始する（１５０７）。次に設計意図と処理対象のブロックが一致するかどうかの設計意図マッチングを行う（１５０８）。次にステップ１５０８に戻って繰り返し処理を行う。ステップ１５０９は、ステップ１５０７の繰り返し処理の終了位置を示す。
【００２６】
次に、マッチフラグが０より大かどうか判定する（１５１０）。マッチフラグが０より大でない場合には該当ブロックＩＤをソースコード設計意図情報１３０に出力する（１５１９）。次にソフトウェアモデル生成ルールＩＤの規定値をソースコード設計意図情報１３０に出力する（１５２０）。次に設計意図ＩＤの規定値をソースコード設計意図情報１３０に出力する（１５２１）。次にステップ１５０４に戻って繰り返し処理を行う。ステップ１５２２は、ステップ１５０３の繰り返し処理の終了位置を示す。ステップ１５１０の判定でマッチフラグが０より大である場合にはマッチフラグが１であるかどうか判定する（１５１１）。マッチフラグが１でない場合には、該当ブロックＩＤをソースコード設計意図情報１３０に出力する（１５１６）。次にマッチしたソースコード設計意図抽出ルール情報１２６の中で最も優先度の高いルールのコード生成ＩＤをソースコード設計意図情報１３０に出力する（１５１７）。次にマッチしたソースコード設計意図抽出ルール情報１２６の中で最も優先度の高いルールの設計意図ＩＤをソースコード設計意図情報１３０に出力する（１５１８）。次にステップ１５０４に戻って繰り返し処理を行う。ステップ１５２２は、ステップ１５０３の繰り返し処理の終了位置を示す。ステップ１５１１の判定でマッチフラグが１である場合には該当ブロックＩＤをソースコード設計意図情報１３０に出力する（１５１２）。次にマッチしたソースコード設計意図抽出ルール情報１２６のソフトウェアモデル生成ＩＤをソースコード設計意図情報１３０に出力する（１５１３）。次にマッチしたソースコード設計意図抽出ルール情報１２６の設計意図ＩＤをソースコード設計意図情報１３０に出力する（１５１４）。次にマッチしたソースコード設計意図抽出ルール情報１２６の優先度を１増やす（１５１５）。次にステップ１５０４に戻って繰り返し処理を行う。ステップ１５２２は、ステップ１５０３の繰り返し処理の終了位置を示す。
【００２７】
図１６は、図１５のソースコード設計意図抽出部１１３の処理フローからステップ１５０４で呼び出される関連パターン分析サブルーチンの処理フローを示す。まず、関連数、合計関連距離、平均関連距離、最大関連距離、最小関連距離、方向値をゼロにする。また関連種別、関連方向を空にする（１６０１）。次に該当ブロックＩＤの関連リストを読み込む（１６０２）。次に該当ブロックＩＤの関連リスト中に含まれる全ての関連先について繰り返し処理を開始する（１６０３）。次に関連数を１増やす（１６０４）。次に関連先ブロックとの距離を算出する（１６０５）。次に距離値を更新する（１６０６）。次に関連方向を更新する（１６０７）。次に関連種別を設定する（１６０８）。次にステップ１６０４に戻って繰り返し処理を行う。ステップ１６０９は、ステップ１６０３の繰り返し処理の終了位置を示す。
【００２８】
図１７は、図１６の関連パターン分析サブルーチンからステップ１６０５で呼び出される関連先ブロックとの距離算出サブルーチンの処理フローを示す。まず、関連先ブロックＩＤに対応するレコードを読み込む（１７０１）。次に対応するブロックＩＤのレコードの開始行をＬ１に設定する（１７０２）。次に現在処理中のブロックＩＤのレコードの終了行をＬ２に設定する（１７０３）。次に｜Ｌ１−Ｌ２｜を距離として算出する（１７０４）。
【００２９】
図１８は、図１６の関連パターン分析サブルーチンからステップ１６０６で呼び出される距離値更新サブルーチンの処理フローを示す。まず合計関連距離に該当関連先との距離を加算する（１８０１）。次に平均接続距離に合計接続距離を接続数で割った値を設定する（１８０２）。次に該当関連先との距離が最小関連距離より小さいかどうか判定する（１８０３）。該当関連先との距離が最小関連距離より小さくない場合はステップ１８０５に進む。該当関連先との距離が最小関連距離より小さい場合には最小関連距離に該当関連先との距離を設定する（１８０４）。次に該当関連先との距離が最大関連距離より大きいかどうか判定する（１８０５）。該当関連先との距離が最大関連距離より大きくない場合には終了する。該当関連先との距離が最大関連距離より大きい場合には最大関連距離に該当関連先との距離を設定する（１８０６）。
【００３０】
図１９は、図１６の関連パターン分析サブルーチンからステップ１６０７で呼び出される関連方向更新サブルーチンの処理フローを示す。まず、関連先ブロックＩＤに対応するレコードを読み込む（１９０１）。次に対応するブロックＩＤの開始行をＤに設定する（１９０２）。次に現在処理中のブロックＩＤの開始行をＳに設定する（１９０３）。次にＤ−Ｓが０より大かどうかを判定する（１９０４）。Ｄ−Ｓが０より大の場合には方向値を１増加させる（１９０５）。ステップ１９０４の判定においてＤ−Ｓが０より大でない場合には方向値を１減少させる（１９０８）。次に方向値が０より大かどうか判定する（１９０６）。方向値が０より大の場合には関連方向に後方優位を設定する（１９０７）。ステップ１９０６の判定で方向値が０より大でない場合には関連方向に前方優位を設定する（１９０９）。
【００３１】
図２０は、図１６の関連パターン分析サブルーチンからステップ１６０８で呼び出される関連種別設定サブルーチンの処理フローを示す。まず、処理中の関連項目から関連種別を読み込む（２００１）。次に関連種別テーブルから該当する関連種別の関連種別ＩＤを得る（２００２）。次に関連種別リストに関連種別ＩＤを追加する（２００３）。
【００３２】
図２１は、図１５のソースコード設計意図抽出部１１３の処理フローからステップ１５０５で呼び出される記述特性分析・設定サブルーチンの処理フローを示す。まず、現在処理中のブロックの開始行をＳに設定する（２１０１）。次に現在処理中のブロックの終了行をＥに設定する（２１０２）。次に関連数÷（Ｅ−Ｓ）の値を記述特性に設定する（２１０３）。
【００３３】
図２２は、図１５のソースコード設計意図抽出部１１３の処理フローからステップ１５０８で呼び出される設計意図マッチングサブルーチンの処理フローを示す。まず、タイプ一致重み値、記述特性一致重み値、関連パターン一致重み値をそれぞれ読み込む（２２０１）。次に一致閾値を読み込む（２２０２）。次に一致尤度に０を設定する（２２０３）。次にタイプが一致するかどうか判定する（２２０４）。タイプが一致しない場合にはステップ２２０６に進む。タイプが一致する場合には一致尤度にタイプ一致重み値を加算する（２２０５）。次に記述特性が一致するかどうか判定する（２２０６）。記述特性が一致しない場合にはステップ２２０８に進む。記述位置が一致する場合には一致尤度に記述特性一致重み値を加算する（２２０７）。次に関連パターンが一致するかどうか判定する（２２０８）。関連パターンが一致しない場合にはステップ２２１０に進む。関連パターンが一致する場合には一致尤度に関連パターン一致重み値を加算する（２２０９）。次に一致尤度が一致閾値以上かどうかを判定する（２２１０）。一致尤度が一致閾値より小さい場合には終了する。一致尤度が一致閾値より大きいか等しい場合にはマッチフラグの値を１増やす（２２１１）。
【００３４】
図２３は、ルール改良部１１１の処理フローを示す。ルール改良部１１１は初期ソフトウェアモデル情報１２１、生成ソフトウェアモデル情報１２２、ソフトウェアモデル設計意図情報１２３、ソフトウェアモデル設計意図抽出ルール情報１２４、ソースコード生成ルール情報１２５、修正ソースコード情報１２９、再生成ソースコード情報１２８、ソフトウェアモデル生成ルール情報１２７、ソースコード設計意図抽出ルール情報１２６、ソースコード設計意図情報１３０を入力として、データベース変更管理部１１０にデータベース変更指示を行う。まず、ブロック差分リスト、要素差分リスト、関連記述リストを空にする。また追加ルールＩＤ、対象ブロックＩＤ、対象要素ＩＤを０にする。また要素ＩＤ算出フラグ、ブロックＩＤ算出フラグをＮＧに設定する（２３０１）。次に修正ソースコード情報１２９を読み込む（２３０２）。次に再生成ソースコード情報１２８を読み込む（２３０３）。次に人手修正ソースコード１２０を読み込む（２３０４）。次に再生成ソースコード１１８を読み込む（２３０５）。次に各ソースコード情報の差分からブロックの差分を抽出する（２３０６）。次に抽出したブロックの差分があるかどうかを判定する（２３０７）。ブロックの差分がある場合にはソースコード生成ルール情報１２５にルールを追加する（２３０８）。ステップ２３０７の判定においてブロックの差分がない場合にはテキスト処理により各ソースコードの差分を抽出する（２３０９）。次に全てのソースコードの差分について繰り返し処理を開始する（２３１０）。次にブロック内部の差分かどうかを判定する（２３１１）。ブロック内部の差分でない場合にはステップ２３１０に戻って繰り返し処理を継続する。ステップ２３１７は、ステップ２３１０の繰り返し処理の終了位置を示す。ブロック内部の差分である場合には関連記述を抽出する（２３１２）。次に差分が属するブロックを特定して該当ブロックが記述される要素ＩＤを算出する（２３１３）。次に要素ＩＤ算出フラグがＯＫかどうかを判定する（２３１４）。要素ＩＤ算出フラグがＯＫでない場合にはステップ２３１０に戻って繰り返し処理を継続する。ステップ２３１７は、ステップ２３１０の繰り返し処理の終了位置を示す。要素ＩＤ算出フラグがＯＫである場合には生成コードテンプレートを修正する（２３１５）。次にソフトウェアモデル設計意図抽出ルール情報を追加する（２３１６）。次にステップ２３１０に戻って繰り返し処理を継続する。ステップ２３１７は、ステップ２３１０の繰り返し処理の終了位置を示す。
【００３５】
次に、初期ソフトウェアモデル情報１２１を読み込む（２３１８）。次に生成ソフトウェアモデル情報１２２を読み込む（２３１９）。次にソフトウェアモデル情報に含まれる要素の差分を抽出する（２３２０）。次に抽出した差分により追加された要素があるかどうかを判定する（２３２１）。追加された要素がある場合にはソフトウェアモデル生成ルール情報１２７にルールを追加してステップ２３２３に進む（２３２２）。ステップ２３２１の判定において追加された要素がない場合には接続先の差分を抽出する（２３２３）。次に全ての接続先差分について繰り返し処理を開始する（２３２４）。次に接続先の差分があるかどうかを判定する（２３２５）。接続先の差分がない場合にはステップ２３２４に戻って繰り返し処理を継続する。ステップ２３３０は、ステップ２３２４の繰り返し処理の終了位置を示す。接続先の差分がある場合には要素ＩＤを特定してブロックＩＤを算出する（２３２６）。次にブロックＩＤ算出フラグがＯＫかどうかを判定する（２３２７）。ブロックＩＤ算出フラグがＯＫでない場合にはステップ２３２４に戻って繰り返し処理を継続する。ステップ２３３０は、ステップ２３２４の繰り返し処理の終了位置を示す。ステップ２３２７の判定においてブロックＩＤ算出フラグがＯＫである場合には生成ソフトウェアモデルテンプレートを修正する（２３２８）。次にソースコード設計意図抽出ルール情報を追加する（２３２９）。次にステップ２３２４に戻って繰り返し処理を継続する。ステップ２３３０は、ステップ２３２４の繰り返し処理の終了位置を示す。
【００３６】
図２４は、図２３のルール改良部１１１の処理フローからステップ２３０６で呼び出されるソースコード情報の差分からブロックの差分を抽出するサブルーチンの処理フローを示す。まず、修正ソースコード情報１２９に含まれる全てのブロック名について繰り返し処理を開始する（２４０１）。次に修正ソースコード情報のブロック名を取得する（２４０２）。次に再生成ソースコード情報１２８中に含まれる全てのブロック名について繰り返し処理を開始する（２４０３）。次に再生成ソースコード情報１２８のブロック名を取得する（２４０４）。次に各ブロック名が一致するかどうかの判定を行う（２４０５）。ブロック名が一致しない場合にはブロック差分リストに該当ブロックのソースコード情報を追加する（２４０６）。次にステップ２４０３に戻って繰り返し処理を継続する。ステップ２４０７は、ステップ２４０３の繰り返し処理の終了位置を示す。ステップ２４０５の判定においてブロック名が一致する場合には、ステップ２４０６を実行せずにステップ２４０３に戻って繰り返し処理を継続する。ステップ２４０７は、ステップ２４０３の繰り返し処理の終了位置を示す。次にステップ２４０１に戻って繰り返し処理を継続する。ステップ２４０８は、ステップ２４０１の繰り返し処理の終了位置を示す。
【００３７】
図２５は、図２３のルール改良部１１１の処理フローからステップ２３０８で呼び出されるソースコード生成ルール情報にルールを追加するサブルーチンの処理フローを示す。まず、追加ルールＩＤにソースコード生成ルール情報の最大コード生成ルールＩＤを設定する（２５０１）。次にブロック差分リストの全ての要素について繰り返し処理を開始する（２５０２）。次に追加ルールＩＤを１増やす（２５０３）。次に新規のコード生成ルールレコードを作成する（２５０４）。次に新規レコードのコード生成ルールＩＤに追加ルールＩＤを設定する（２５０５）。次に新規レコードの設計意図ＩＤを１にする（２５０６）。次に現在処理中の差分ブロックＩＤに対応するソースコードを人手修正ソースコード１２０から取得する（２５０７）。次に関連記述を抽出する（２５０８）。次に抽出した関連記述を関連の種類に応じたタグに変換する（２５０９）。次に関連以外の記述を［ｂｏｄｙ］タグで置き換える（２５１０）。次にブロックシグネチャを追加して生成コードテンプレートに設定する（２５１１）。次に設定済みの新規レコードをデータベース更新管理部１１０に通知しソースコード生成ルール情報に追加する（２５１２）。次にステップ２５０２に戻って繰り返しを継続する。ステップ２５１３は、ステップ２５０２の繰り返し処理の終了位置を示す。
【００３８】
図２６は、図２３のルール改良部１１１の処理フローからステップ２３１２で呼び出される関連記述を抽出するサブルーチンの処理フローを示す。まず、抽出対象ソースコードの各行について繰り返し処理を開始する（２６０１）。次に抽出対象行を読み込む（２６０２）。次に読み込んだ対象行が関連記述であるかどうかを判定する（２６０３）。読み込んだ対象行が関連記述でない場合にはステップ２６０１に戻って繰り返し処理を継続する。ステップ２６０５は、ステップ２６０１の繰り返し処理の終了位置を示す。ステップ２６０３の判定において読み込んだ対象行が関連記述であった場合には、関連記述リストに関連記述部分を追加する（２６０４）。次にステップ２６０１に戻って繰り返し処理を継続する。ステップ２６０５は、ステップ２６０１の繰り返し処理の終了位置を示す。なお、図２５中のステップ２５０８でも、図２６の関連記述を抽出するサブルーチンが呼び出される。
【００３９】
図２７は、図２３のルール改良部１１１の処理フローからステップ２３１３で呼び出されるブロック特定して要素ＩＤを算出するサブルーチンの処理フローを示す。まず対象ブロック名を空にする（２７０１）。次に現在処理中の差分行の行番号をＬに設定する（２７０２）。次に修正ソースコード情報１２９の全てのブロックＩＤについて繰り返し処理を開始する（２７０３）。次に現在処理中のブロックＩＤの開始行をＳに設定する（２７０４）。次に現在処理中のブロックＩＤの終了行をＥに設定する（２７０５）。次にＳ＜Ｌ＜Ｅであるかどうかを判定する（２７０６）。ステップ２７０６の判定においてＳ＜Ｌ＜Ｅでない場合にはステップ２７０３に戻って繰り返し処理を継続する。ステップ２７１４は、ステップ２７０３の繰り返し処理の終了位置を示す。ステップ２７０６の判定においてＳ＜Ｌ＜Ｅである場合には現在処理中のブロックＩＤに対応するブロック名を対象ブロック名に設定する（２７０７）。次に生成ソフトウェアモデル情報１２２の全ての要素ＩＤについて繰り返し処理を開始する（２７０８）。次に現在の要素ＩＤに対応する名前ラベルを取得する（２７０９）。次に対象ブロック名と名前ラベルが一致するかどうかを判定する（２７１０）。名前ラベルが一致しない場合にはステップ２７０８に戻って繰り返し処理を継続する。ステップ２７１１は、ステップ２７０８の繰り返し処理の終了位置を示す。ステップ２７１０の判定において名前ラベルが一致する場合には現在の要素ＩＤを対象要素ＩＤに設定する（２７１２）。次に要素ＩＤ算出フラグにＯＫを設定して終了する（２７１３）。
【００４０】
図２８は、図２３のルール改良部１１１の処理フローからステップ２３１５で呼び出される生成コードテンプレート修正サブルーチンの処理フローを示す。まずソフトウェアモデル設計意図情報１２３を読み込む（２８０１）。次に対象要素ＩＤに対応するコード生成ルールＩＤと設計意図ＩＤを取得する（２８０２）。次にソースコード生成ルール情報１２５を読み込む（２８０３）。次にコード生成ルールＩＤと設計意図ＩＤに対応する生成コードテンプレートを取得する（２８０４）。次に修正ソースコード情報１２９の対象ブロックＩＤに対応するレコードを取得する（２８０５）。次に修正ソースコード情報１２９の対象ブロックＩＤに対応する開始行と終了行を得る（２８０６）。次に修正ソースコードから開始行から終了行のソースコードを取得する（２８０７）。次に関連記述を抽出する（２８０８）。次に抽出した関連記述を関連の種類に応じたタグに変換する（２８０９）。次に関連以外の記述を［ｂｏｄｙ］タグで置き換える（２８１０）。次にブロックシグネチャを追加して対応する生成コードテンプレートを置き換える（２８１１）。なお、図２８中のステップ２８０８でも、図２６の関連記述を抽出するサブルーチンが呼び出される。
【００４１】
図２９は、図２３のルール改良部１１１の処理フローからステップ２３１６で呼び出されるソフトウェアモデル設計意図抽出ルール情報追加サブルーチンの処理フローを示す。まず新規のソフトウェアモデル設計意図抽出ルール情報レコードを作成する（２９０１）。次に修正ソフトウェアモデル情報を読み込む（２９０２）。次に修正ソフトウェアモデル情報の対象要素ＩＤに対応するタイプを新規レコードのタイプに設定する（２９０３）。次に新規レコードの記述位置、接続パターンに規定値を設定する（２９０４）。次に一致閾値、優先度に規定値を設定する（２９０５）。次に全ての一致重みに規定値を設定する（２９０６）。次にコード生成ルールＩＤに生成コードテンプレート修正過程で得たコード生成ルールＩＤを設定する（２９０７）。次に設計意図ＩＤに生成コードテンプレート修正過程で得た設計意図ＩＤを設定する（２９０８）。
【００４２】
図３０は、図２３のルール改良部１１１の処理フローからステップ２３２０で呼び出されるソフトウェアモデル情報の要素の差分を抽出するサブルーチンの処理フローを示す。まず初期ソフトウェアモデル情報１２１中の全ての名前ラベルについて繰り返し処理を開始する（３００１）。次に初期ソフトウェアモデル情報１２１の名前ラベルを取得する（３００２）。次に生成ソフトウェアモデル情報１２２中の全ての名前ラベルについて繰り返し処理を開始する（３００３）。次に生成ソフトウェアモデル情報１２２の名前ラベルを取得する（３００４）。次に名前ラベルが一致するかどうか判定を行う（３００５）。名前ラベルが一致しない場合には要素差分リストに該当要素のソフトウェアモデル情報を追加する（３００６）。次にステップ３００３に戻って繰り返し処理を継続する。ステップ３００７は、ステップ３００３の繰り返し処理の終了位置を示す。ステップ３００５の判定において名前ラベルが一致する場合にはステップ３００６を実行せずにステップ３００３に戻って繰り返し処理を継続する。ステップ３００７は、ステップ３００３の繰り返し処理の終了位置を示す。ステップ３００８は、ステップ３００１の繰り返し処理の終了位置を示す。
【００４３】
図３１は、図２３のルール改良部１１１の処理フローからステップ２３２２で呼び出される、ソフトウェアモデル生成ルール情報にルールを追加するサブルーチンの処理フローを示す。まずソフトウェアモデル生成ルール情報１２７の最大ソフトウェアモデル生成ルールＩＤを追加ルールＩＤに設定する（３１０１）。次に要素差分リストの全ての要素について繰り返し処理を開始する（３１０２）。次に追加ルールＩＤを１増やす（３１０３）。次に新規のソフトウェアモデル生成ルールレコードを作成する（３１０４）。次に新規レコードのソフトウェアモデル生成ルールＩＤに追加ルールＩＤを設定する（３１０５）。次に新規レコードの設計意図ＩＤを１にする（３１０６）。次に現在処理中の差分要素ＩＤに対応するモデル要素をソフトウェアモデルから取得する（３１０７）。次にモデル要素の名前ラベルを［ｎａｍｅ］タグに置き換える（３１０８）。次に接続先要素の名前ラベルを規定値の［ｃａｌｌｅｅ］タグに置き換える（３１０９）。次に設定済みの新規レコードをデータベース更新管理部１１０に通知しソフトウェアモデル生成ルール情報に追加する（３１１０）。ステップ３１１１は、ステップ３１０２の繰り返し処理の終了位置を示す。
【００４４】
図３２は、図２３のルール改良部１１１の処理フローからステップ２３２６で呼び出される要素ＩＤ特定してブロックＩＤを算出するサブルーチンの処理フローを示す。まず接続先の差分が含まれる要素ＩＤを取得する（３２０１）。次に現在処理中の要素ＩＤに対応する名前ラベルを対象名前ラベルに設定する（３２０２）。次に修正ソースコード情報１２９の全てのブロックＩＤについて繰り返し処理を開始する（３２０３）。次に現在のブロックＩＤに対応するブロック名を取得する（３２０４）。次に対象名前ラベルとブロック名が一致するかどうか判定する（３２０５）。対象名前ラベルとブロック名が一致しない場合にはステップ３２０３に戻って繰り返し処理を継続する。ステップ３２０６は、ステップ３２０３の繰り返し処理の終了位置を示す。ステップ３２０５の判定において対象名前ラベルとブロック名が一致する場合は、現在のブロックＩＤを対象ブロックＩＤに設定する（３２０７）。次にブロックＩＤ算出フラグをＯＫに設定する（３２０８）。
【００４５】
図３３は、図２３のルール改良部１１１の処理フローからステップ２３２８で呼び出される生成ソフトウェアモデルテンプレート修正サブルーチンの処理フローを示す。まずソースコード設計意図情報１３０を読み込む（３３０１）。次に対象ブロックＩＤに対応するソフトウェアモデル生成ルールＩＤと設計意図ＩＤを取得する（３３０２）。次にソフトウェアモデル生成ルール情報１２７を読み込む（３３０３）。次にソフトウェアモデル生成ルールＩＤと設計意図ＩＤに対応する生成ソフトウェアモデルテンプレートを取得する（３３０４）。次に生成ソフトウェアモデル情報１２２の対象要素ＩＤに対応するレコードを取得する（３３０５）。次に生成ソフトウェアモデル情報１２２の対象要素ＩＤに対応するモデル要素を生成ソフトウェアモデルから得る（３３０６）。次に各要素のラベルをタグに置き換える（３３０７）。次に生成ソフトウェアモデルテンプレートを置き換える（３３０８）。
【００４６】
図３４は、図２３のルール改良部１１１の処理フローからステップ２３２９で呼び出されるソースコード設計意図抽出ルール情報追加サブルーチンの処理フローを示す。まず新規のソースコード設計意図抽出ルール情報レコードを作成する（３４０１）。次に再生成ソースコード情報１２８を読み込む（３４０２）。次に再生成ソースコード情報１２８の対象ブロックＩＤに対応するタイプを新規レコードのタイプに設定する（３４０３）。次に新規レコードの記述特性、関連パターンに規定値を設定する（３４０４）。次に一致閾値、優先度に規定値を設定する（３４０５）。次に全ての一致重みに規定値を設定する（３４０６）。次にソフトウェアモデル生成ルールＩＤに生成ソースコードテンプレート修正過程で得たソフトウェアモデル生成ルールＩＤを設定する（３４０７）。次に設計意図ＩＤに生成ソースコードテンプレート修正過程で得た設計意図ＩＤを設定する（３４０８）。
【００４７】
図３５は、ソースコード読み込み部１１２の処理フローを示す。ソースコード読み込み部１１２は、開発者１１９が作成又は修正した人手修正ソースコード１２０を入力として、計算機処理が容易なデータに変換し再生成ソースコード情報１２８又は修正ソースコード情報１２９として出力する。まず、ブロック内フラグをＯＦＦにする（３５０１）。次に全てのソースコード行について繰り返し処理を開始する（３５０２）。次に次の行を読み込む（３５０３）。次にブロック内フラグがＯＮかどうか判定する（３５０４）。ブロック内フラグがＯＮでない場合にはブロック開始要素かどうか判定する（３５０５）。ブロック開始要素でない場合にはステップ３５０２に戻って繰り返し処理を継続する。ステップ３５１５は、ステップ３５０２の繰り返し処理の終了位置を示す。ステップ３５０５の判定においてブロック開始要素であった場合には、ブロック内フラグをＯＮにする（３５０６）。次にブロックＩＤを１増やす（３５０７）。次に１ブロック分の空のソースコード情報レコードを作成する（３５０８）。次に作成したソースコード情報レコードにブロックＩＤを設定する（３５０９）。次にブロック名を読み取る（３５１０）。次にブロック名レコードにブロック名を設定する（３５１１）。次にタイプを読み取る（３５１２）。次にタイプ名レコードにタイプ名を設定する（３５１３）。現在の行数を開始行に設定する（３５１４）。次にステップ３５０２に戻って繰り返しを継続する。ステップ３５１５は、ステップ３５０２の繰り返し処理の終了位置を示す。ステップ３５０４の判定においてブロック内フラグがＯＮである場合、関連記述かどうかを判定する（３５１７）。関連記述でない場合にはブロック終了要素かどうかを判定する（３５２３）。ブロック終了要素でない場合にはステップ３５０２に戻って繰り返しを継続する。ステップ３５１５は、ステップ３５０２の繰り返し処理の終了位置を示す。ステップ３５２３の判定においてブロック終了要素である場合には、現在の行数を終了行に設定する（３５２４）。次にブロック内フラグをＯＦＦにする（３５２５）。次にステップ３５０２に戻って繰り返しを継続する。ステップ３５１５は、ステップ３５０２の繰り返し処理の終了位置を示す。ステップ３５１７の判定において関連記述である場合には、現在の処理対象レコードの関連リストに新規関連項目を追加する（３５１８）。次に関連種別を読み取る（３５１９）。次に現在の処理対象新規関連項目に関連種別を設定する（３５２０）。次に関連の名前ラベルを読み取る（３５２１）。次に現在の処理対象新規関連項目の関連先ＩＤに関連の名前ラベルを仮設定して（３５２２）、ステップ３５２３へ移行する。最後に、ステップ３５１５に続いて、関連リスト内の関連先ＩＤ設定処理を実行する（３５１６）。
【００４８】
図３６は、図３５のソースコード読み込み部１１２の処理フローからステップ３５１６で呼び出される関連リスト内の関連先ＩＤ設定処理サブルーチンの処理フローを示す。まず全てのブロックＩＤについて繰り返し処理を開始する（３６０１）。次に対象ブロックの関連リストを読み込む（３６０２）。次に関連リスト中の全ての関連項目について繰り返し処理を開始する（３６０３）。次に対象関連項目の関連先ＩＤを読み込む（３６０４）。次に関連先ＩＤは名前ラベルかどうかを判定する（３６０５）。関連先ＩＤが名前ラベルでない場合にはステップ３６０３に戻って繰り返し処理を継続する。ステップ３６１１は、ステップ３６０３の繰り返し処理の終了位置を示す。ステップ３６０５の判定において関連先ＩＤが名前ラベルである場合には、全てのブロックＩＤについて繰り返し処理を開始する（３６０６）。次に対象ブロックのブロックＩＤを読み込む（３６０７）。次に対象ブロックのブロック名と名前ラベルが一致するかどうか判定する（３６０８）。対象ブロックのブロック名と名前ラベルが一致しない場合にはステップ３６０６に戻って繰り返し処理を継続する。ステップ３６０９は、ステップ３６０６の繰り返し処理の終了位置を示す。ステップ３６０８の判定処理において対象ブロックのブロック名と名前ラベルが一致する場合には、対象関連項目の関連先ＩＤを該当ブロックＩＤで置き換える（３６１０）。次にステップ３６０３に戻って繰り返し処理を継続する。ステップ３６１１は、ステップ３６０３の繰り返し処理の終了位置を示す。またステップ３６１２は、ステップ３６０１の繰り返し処理の終了位置を示す。
【００４９】
図３７は、初期ソフトウェアモデル情報１２１又は生成ソフトウェアモデル情報１２２として利用されるソフトウェアモデル情報を示す。ソフトウェアモデル情報１２１，１２２は、ソフトウェアモデルに含まれる要素の通し番号である要素ＩＤ３７０１と、要素に付けられた名前である名前ラベル３７０２と、要素の記述タイプであるタイプ３７０３と、要素が記述されている位置を表す記述位置３７０４と、各要素の他要素とのつながりを表す接続先要素リスト３７０７と、各要素の他要素からのつながりを表す被接続先要素リスト３７０８とからなる。接続先要素リスト３７０７は、接続先の要素を表す要素ＩＤ３７０５と、接続の向きを表す接続方向３７０６とからなる。被接続先要素リスト３７０８は、他の要素から接続されている接続元の要素を表す要素ＩＤ３７１７と、接続方向そのものを表す接続方向３７１８とからなる。なお、接続先又は被接続先が存在しない場合には各欄には０が格納される。一例として要素ＩＤが「ｎ」であり、名前ラベルが「ｄｄ＿ｌｉｂ」であり、タイプが「関数」であり、記述位置が「下右部」であり、接続先要素リストの要素ＩＤが「０」であり、接続先要素リストの接続方向が「なし」であり、被接続先要素リストの要素ＩＤが「２」であり、被接続先要素リストの接続方向が「上」である場合を示す。
【００５０】
図３８は、ソフトウェアモデル設計意図情報１２３を示す。ソフトウェアモデル設計意図情報１２３は、ソフトウェアモデルに記述された要素を識別する要素ＩＤ３８０１と、コード生成ルールを識別するコード生成ルールＩＤ３８０２と、設計意図のデータを識別する設計意図ＩＤ３８０３とからなる。一例として要素ＩＤが「ｎ」であり、コード生成ルールＩＤが「６」であり、設計意図ＩＤが「１」である場合を示す。
【００５１】
図３９は、ソフトウェアモデル設計意図抽出ルール情報１２４を示す。ソフトウェアモデル設計意図抽出ルール情報１２４は、ソフトウェアモデルに記述された要素のタイプを示すタイプ３９０１と、ソフトウェアモデルに記述された要素の記述位置を示す記述位置３９０３と、ソフトウェアモデルに記述された要素の接続のパターンを定量化した接続パターン３９０６と、ソフトウェアモデル設計意図抽出ルールに一致すると判定するための閾値である一致閾値３９１５と、同様のルールが複数一致した場合の優先度を示す優先度３９１６と、コード生成ルールを識別するコード生成ルールＩＤ３９１７と、設計意図を識別する設計意図ＩＤ３９１８とからなる。接続パターン３９０６は、該当要素が他要素に接続する数を示す接続数３９０５と、該当要素が他要素から接続される数を示す被接続数３９０７と、各接続の距離を示す接続距離３９１２と、要素間の接続方向を示す接続方向３９１３とからなる。接続距離３９１２は、接続の方向３９０８に応じてＩＮ３９１９とＯＵＴ３９２０との２フィールドを持ち、それぞれ平均接続距離（ＡＶＥ）３９０９と、最小接続距離（ＭＩＮ）３９１０と、最大接続距離（ＭＡＸ）３９１１とからなる。また、タイプ３９０１と、記述位置３９０３と、接続パターン３９０６とは、それぞれ一致判定をする場合の条件の重み付けのための一致重み３９０２，３９０４，３９１４を持つ。一例としてタイプが「関数」であり、タイプの一致重み値が「７」であり、記述位置が「左中央部」であり、記述位置の一致重み値が「１」であり、接続パターンの接続数が「２」であり、被接続数が「４」であり、接続距離のうち入方向（ＩＮ）の平均距離が「１．３」であり、最小値が「１」であり、最大値が「２」であり、出方向（ＯＵＴ）の平均距離が「２．５」であり、最小値が「２」であり、最大値が「３」であり、接続方向が「下」であり、接続パターンの一致重み値が「２」であり、一致閾値が「２９」であり、優先度が「２」であり、コード生成ルールＩＤが「５」であり、設計意図ＩＤが「８」である場合を示す。
【００５２】
図４０は、ソースコード生成ルール情報１２５を示す。ソースコード生成ルール情報１２５は、ソフトウェアモデルに記述された要素をソースコードに変換するための情報を格納したテーブルである。ソースコード生成ルール情報１２５は、コード生成のルールを識別するコード生成ルールＩＤ４００１と、同じコード生成ルールの中でも開発者の設計意図の違いによって生じる生成コードの違いを識別する設計意図ＩＤ４００２と、ソースコードとして出力するコードのテンプレートを格納した生成コードテンプレート４００３とからなる。一例としてコード生成ＩＤが「１」であり、設計意図ＩＤが「１」であり、生成コードテンプレートが「ｃｌａｓｓ  ［ｎａｍｅ］｛［ｒｅｆｅｒｅｎｃｅ］［ｂｏｄｙ］｝」４００６である場合を示す。
【００５３】
図４１は、再生成ソースコード情報１２８又は修正ソースコード情報１２９として利用されるソースコード情報を示す。ソースコード情報１２８，１２９は、ソースコード中のブロックを識別する番号を表すブロックＩＤ４１０１と、例えば関数名のようなブロックに付けられた名前を表す名前ラベル４１０２と、ブロックの種類を表すタイプ４１０３と、ソースコード中でのブロックの記述位置を示す記述位置４１０６と、各ブロックと他ブロックとの関連を列挙する関連リスト４１０９とからなる。記述位置４１０６は、ブロックの開始行を表す開始行４１０４と、ブロックの終了行を表す終了行４１０５とからなる。関連リスト４１０９は、関連先ブロックの種別を表す関連種別４１０７と、関連先ブロックを識別するブロックＩＤである関連先ブロックＩＤ４１０８とからなる。なお、関連するブロックがない場合は、関連リスト中の関連種別４１０７は「なし」、関連先ブロックＩＤ４１０８は「０」をそれぞれ設定する。一例としてブロックＩＤが「ｎ」であり、名前ラベルが「ｄｄ＿ｄｒｖ」であり、タイプが「関数」であり、記述位置の開始行が「９７８８」であり、記述位置の終了行が「９９０１」であり、関連リストの関連種別が「なし」であり、関連リストの関連先ブロックＩＤが「０」である場合を示す。
【００５４】
図４２は、ソースコード設計意図情報１３０を示す。ソースコード設計意図情報１３０は、ソースコードに記述されたブロックを識別するためのブロックＩＤ４２０１と、ソースコードのブロックに対応してソフトウェアモデルの生成ルールを識別するソフトウェアモデル生成ルールＩＤ４２０２と、設計意図のデータを識別する設計意図ＩＤ４２０３とからなる。一例としてブロックＩＤが「ｎ」であり、ソフトウェアモデル生成ルールＩＤが「６」であり、設計意図ＩＤが「１」である場合を示す。
【００５５】
図４３は、ソースコード設計意図抽出ルール情報１２６を示す。ソースコード設計意図抽出ルール情報１２６は、ソースコードに記述されたブロックの種別を識別するタイプ４３０１と、ソースコードに記述されたブロックの記述の特徴を表す記述特性４３０３と、ブロックと他のブロックとの間の関連のパターンを表す関連パターン４３０５と、ソースコード設計意図抽出ルールに一致すると判定するための閾値である一致閾値４３１４と、同様のルールが複数一致した場合の優先度を示す優先度４３１５と、ソフトウェアモデル生成ルールを識別するソフトウェアモデル生成ルールＩＤ４３１６と、設計意図を識別する設計意図ＩＤ４３１７とからなる。関連パターン４３０５は、該当ブロックが他ブロックに関連する数を表す関連数４３０６と、各関連の距離を示す距離４３０７と、ブロック間の関連がソースコード上で前後方向どちらにより強く関連するのかを示す関連方向４３１１と、各関連の種類を図４４に示す関連種別情報テーブルを用いて数値に変換しリストとした関連種別４３１２とからなる。関連パターン４３０５の距離４３０７は、距離の平均値（ＡＶＥ）４３０８と、距離の最小値（ＭＩＮ）４３０９と、距離の最大値（ＭＡＸ）４３１０とからなる。また、タイプ４３０１と、記述特性４３０３と、関連パターン４３０５とは、それぞれ一致判定をする場合の条件の重み付けのための一致重み４３０２，４３０４，４３１３を持つ。一例としてタイプが「クラス」であり、タイプの一致重み値が「７」であり、記述特性が「０．６」であり、記述特性の一致重み値が「１」であり、関連パターンの関連数が「４」であり、関連パターンの距離の平均値が「１．３」であり、関連パターンの距離の最小値が「１」であり、関連パターンの距離の最大値が「２」であり、関連パターンの関連方向が「前方優位」であり、関連パターンの関連種別が「１７，１７，１７，１７」であり、関連パターンの一致重み値が「２」であり、一致閾値が「２９」であり、優先度が「２」であり、ソフトウェアモデル生成ルールＩＤが「５」であり、設計意図ＩＤが「８」である場合を示す。
【００５６】
図４４は、ソースコード設計意図抽出ルール情報１２６に利用する関連種別情報テーブルを示す。関連種別情報テーブルは、関連種別を識別する関連種別ＩＤ４４０１と、関連種別そのものを表す関連種別４４０２とからなる。一例として関連種別ＩＤが「ｎ」であり、関連種別が「包含」である場合を示す。
【００５７】
図４５は、ソフトウェアモデル生成ルール情報１２７を示す。ソフトウェアモデル生成ルール情報１２７は、ソースコードに記述されたブロックをソフトウェアモデルに変換するための情報を格納したテーブルであって、ソフトウェアモデル生成ルールを識別するソフトウェアモデル生成ルールＩＤ４５０１と、同じソフトウェアモデル生成ルールの中でも開発者の設計意図の違いによって生じる生成ソフトウェアモデルの違いを識別する設計意図ＩＤ４５０２と、ソフトウェアモデルとして出力するソフトウェアモデルのテンプレートを格納した生成ソフトウェアモデルテンプレート４５０３とからなる。一例としてソフトウェアモデル生成ルールＩＤが「１」であり、設計意図ＩＤが「１」であり、生成ソフトウェアモデルテンプレートが図に示す図形（４５０６）である場合を示す。
【００５８】
図４６は、ソフトウェアモデル生成部１１４の処理フローを示す。ソフトウェアモデル生成部１１４は、修正ソースコード情報１２９又は再生成ソースコード情報１２８と、ソースコード設計意図情報１３０と、ソフトウェアモデルを生成するためのルールを格納したソフトウェアモデル生成ルール情報１２７とを入力として人手修正ソースコード１２０又は再生成ソースコード１１８に対応する生成ソフトウェアモデル１１６を出力する。
【００５９】
まず、ソースコード情報１２８，１２９を読み込む（４６０１）。次にソースコード設計意図情報１３０を読み込む（４６０２）。次にソフトウェア生成ルール情報１２７を読み込む（４６０３）。次に全てのブロックＩＤについて繰り返し処理を開始する（４６０４）。次にソースコード設計意図情報１３０から現在のブロックＩＤに対応するソフトウェアモデル生成ルールＩＤを読み込む（４６０５）。次にソースコード設計意図情報１３０から現在のブロックＩＤに対応する設計意図ＩＤを読み込む（４６０６）。次にソフトウェアモデル生成ルール情報１２７からルールＩＤ／設計意図ＩＤに該当する生成ソフトウェアモデルテンプレートを読み込む（４６０７）。次にソースコード情報１２８，１２９から現在のブロックＩＤに対応するブロック名を読み込む（４６０８）。次に生成ソフトウェアテンプレート中の「［ｎａｍｅ］」タグ位置をブロック名で置き換えたブロックを描画する（４６０９）。次にソースコード情報１２８，１２９から現在のブロックＩＤに対応する関連リストを読み込む（４６１０）。次に関連リスト中の接続先について繰り返し処理を開始する（４６１１）。次にソースコード情報１２８，１２９から関連先ブロックＩＤに対応するブロック名を読み込む（４６１２）。次にすでに該当ブロック名に相当するモデルが描画されているかどうかを判定する（４６１３）。すでに該当ブロック名に相当するモデルが描画されている場合には、描画中モデルの中から該当ブロック名に相当するブロックを検索する（４６１４）。次に生成ソフトウェアモデルテンプレート中のモデル図形に従って関連先ブロックの空き接続口を選択する（４６１５）。次に描画済み関連先ブロックの空き接続口に現在のブロックから関連線を接続する（４６１６）。次にステップ４６１１に戻って繰り返し処理を継続する。ステップ４６１７は、ステップ４６１１の繰り返し処理の終了位置を示す。ステップ４６１３の判定において未だ該当ブロック名に相当するモデルが描画されていない場合には生成ソフトウェアモデルテンプレート中の「［Ｒｅｆ］」又は「［ｃａｌｌｅｅ］」タグ位置を名前ラベルで置き換えたブロックを描画する（４６１９）。次に生成ソフトウェアモデルテンプレート中のモデル図形に従った接続線を追加する（４６２０）。次にステップ４６１１に戻って繰り返し処理を継続する。ステップ４６１７は、ステップ４６１１の繰り返し処理の終了位置を示す。またステップ４６１８は、ステップ４６０４の繰り返し処理の終了位置を示す。
【００６０】
図４７は、ソフトウェアモデルの例を示す。４７０１はソフトウェアモデルの全体枠である。４７０２はソフトウェアモデルに描画される一要素である。一例としてここではステレオタイプが「ｍｏｄｕｌｅ」、名前ラベルが「ＧＵＩ＿ｉｏ」であり、他要素である「ｐｒｏｃ＿ｃｔｒｌ」と接続ポート４７０３を介して接続線４７０４でつながっている。また要素ＧＵＩ＿ｉｏは左上部の記述位置である。
【００６１】
なお、本実施の形態で例示したソフトウェアモデルはＵＭＬを基準としてソフトウェアモデルであるものとしたが、他の図的表現を用いるソフトウェアモデルも利用可能である。また生成されるソースコードはＣ言語又はＣ＋＋言語であるとしたが、他のプログラミング言語に置き換えても同様の実施が可能である。
【００６２】
図４８は、上記本発明の実施の形態におけるソフトウェア開発支援ツール１０１に加えて入出力部を備えたシステムの構成図である。ここでは、開発者１３１が入力部４８０１を通して直接コンピュータシステムにソフトウェアモデルを入力し、自動生成されたソースコードをディスプレイ装置（表示部）４８０２に表示する場合の構成を示す。また、開発者１１９が入力部４８０４を通して直接コンピュータシステムにソースコードを入力し、自動生成されたソフトウェアモデルをディスプレイ装置（表示部）４８０３に表示することもできる。なお、ディスプレイ装置４８０２，４８０３に代わりプリンタを用いた紙出力、音声合成による読み上げ出力などを用いてもよい。また入力部４８０１，４８０４に代わり、ドキュメントスキャナ、画像データ入力などを用いてもよい。
【産業上の利用可能性】
【００６３】
本発明は、既存のソースコードからソフトウェアモデルを自動的に生成することで、大規模なソースコードからでもソフトウェア開発者の設計意図を含んだソフトウェアモデルを容易に得ることができ、ソフトウェアモデルを中心としたソフトウェア開発を行うことにより、ソフトウェアの生産性に寄与するソフトウェア開発支援ツールとして、広くソフトウェア設計一般に利用することができる。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施の形態におけるソフトウェア開発支援ツールの構成図である。
【図２】本発明の実施の形態におけるソフトウェアモデル読み込み部の動作流れ図である。
【図３】本発明の実施の形態におけるソフトウェアモデル読み込み部の記述要素の記述内容分析処理の動作流れ図である。
【図４】本発明の実施の形態におけるソフトウェアモデル読み込み部の記述要素の記述位置判定処理の動作流れ図である。
【図５】本発明の実施の形態におけるソフトウェアモデル読み込み部の記述要素の接続要素走査処理の動作流れ図である。
【図６】本発明の実施の形態におけるソースコード生成部の動作流れ図である。
【図７】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の動作流れ図である。
【図８】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の接続パターン分析処理の動作流れ図である。
【図９】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の接続先要素との接続距離算出処理の動作流れ図である。
【図１０】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の被接続先要素との接続距離算出処理の動作流れ図である。
【図１１】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の接続距離値更新処理の動作流れ図である。
【図１２】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の被接続距離値更新処理の動作流れ図である。
【図１３】本発明の実施の形態におけるソフトウェアモデル設計意図抽出部の接続意図マッチング処理の動作流れ図である。
【図１４】本発明の実施の形態におけるデータベース更新管理部の動作流れ図である。
【図１５】本発明の実施の形態におけるソースコード設計意図抽出部の動作流れ図である。
【図１６】本発明の実施の形態におけるソースコード設計意図抽出部の関連パターン分析処理の動作流れ図である。
【図１７】本発明の実施の形態におけるソースコード設計意図抽出部の関連先ブロックとの距離算出処理の動作流れ図である。
【図１８】本発明の実施の形態におけるソースコード設計意図抽出部の距離値更新処理の動作流れ図である。
【図１９】本発明の実施の形態におけるソースコード設計意図抽出部の関連方向更新処理の動作流れ図である。
【図２０】本発明の実施の形態におけるソースコード設計意図抽出部の関連種別設定処理の動作流れ図である。
【図２１】本発明の実施の形態におけるソースコード設計意図抽出部の記述特性分析・設定処理の動作流れ図である。
【図２２】本発明の実施の形態におけるソースコード設計意図抽出部の設計意図マッチング処理の動作流れ図である。
【図２３】本発明の実施の形態におけるルール改良部の動作流れ図である。
【図２４】本発明の実施の形態におけるルール改良部のソースコード情報の差分からブロックの差分を抽出する処理の動作流れ図である。
【図２５】本発明の実施の形態におけるルール改良部のソースコード生成ルール情報にルールを追加する処理の動作流れ図である。
【図２６】本発明の実施の形態におけるルール改良部の関連記述を抽出する処理の動作流れ図である。
【図２７】本発明の実施の形態におけるルール改良部のブロック特定して要素ＩＤを算出する処理の動作流れ図である。
【図２８】本発明の実施の形態におけるルール改良部の生成コードテンプレート修正処理の動作流れ図である。
【図２９】本発明の実施の形態におけるルール改良部のソフトウェアモデル設計意図抽出ルール情報追加処理の動作流れ図である。
【図３０】本発明の実施の形態におけるルール改良部のソフトウェアモデル情報の要素の差分を抽出する処理の動作流れ図である。
【図３１】本発明の実施の形態におけるルール改良部のソフトウェアモデル生成ルール情報にルールを追加する処理の動作流れ図である。
【図３２】本発明の実施の形態におけるルール改良部の要素ＩＤを特定してブロックＩＤを算出する処理の動作流れ図である。
【図３３】本発明の実施の形態におけるルール改良部の生成ソフトウェアモデルテンプレート修正処理の動作流れ図である。
【図３４】本発明の実施の形態におけるルール改良部のソースコード設計意図抽出ルール情報追加処理の動作流れ図である。
【図３５】本発明の実施の形態におけるソースコード読み込み部の動作流れ図である。
【図３６】本発明の実施の形態におけるソースコード読み込み部の関連リスト内の関連先ＩＤ設定処理の動作流れ図である。
【図３７】本発明の実施の形態におけるソフトウェアモデル情報の例を示す図である。
【図３８】本発明の実施の形態におけるソフトウェアモデル設計意図情報の例を示す図である。
【図３９】本発明の実施の形態におけるソフトウェアモデル設計意図抽出ルール情報の例を示す図である。
【図４０】本発明の実施の形態におけるソースコード生成ルール情報の例を示す図である。
【図４１】本発明の実施の形態におけるソースコード情報の例を示す図である。
【図４２】本発明の実施の形態におけるソースコード設計意図情報の例を示す図である。
【図４３】本発明の実施の形態におけるソースコード設計意図抽出ルール情報の例を示す図である。
【図４４】本発明の実施の形態における関連種別情報テーブルの例を示す図である。
【図４５】本発明の実施の形態におけるソフトウェアモデル生成ルール情報の例を示す図である。
【図４６】本発明の実施の形態におけるソフトウェアモデル生成部の動作流れ図である。
【図４７】本発明の実施の形態におけるソフトウェアモデルの例を示す図である。
【図４８】本発明の実施の形態におけるソフトウェア開発支援ツールに加えて入出力部を備えたシステムの構成図である。
【符号の説明】
【００６５】
１０１  ソフトウェア開発支援ツール
１０２  ソフトウェアモデル読み込み部
１０３  フトウェアモデル設計意図抽出部
１０４  ソースコード生成部
１０５  ルールデータベース部
１０６  ソフトウェアモデル生成ルールデータベース
１０７  ソフトウェアモデル設計意図抽出ルールデータベース
１０８  ソースコード設計意図抽出ルールデータベース
１０９  ソースコード生成ルールデータベース
１１０  データベース更新管理部
１１１  ルール改良部
１１２  ソースコード読み込み部
１１３  ソースコード設計意図抽出部
１１４  ソフトウェアモデル生成部
１１５  初期ソフトウェアモデル
１１６  生成ソフトウェアモデル
１１７  初期生成ソースコード
１１８  再生成ソースコード
１１９  開発者
１２０  人手修正ソースコード
１２１  初期ソフトウェアモデル情報
１２２  生成ソフトウェアモデル情報
１２３  ソフトウェアモデル設計意図情報
１２４  ソフトウェアモデル設計意図抽出ルール情報
１２５  ソースコード生成ルール情報
１２６  ソースコード設計意図抽出ルール情報
１２７  ソフトウェアモデル生成ルール情報
１２８  再生成ソースコード情報
１２９  修正ソースコード情報
１３０  ソースコード設計意図情報
１３１  開発者
３７０１  要素ＩＤ
３７０２  名前ラベル
３７０３  タイプ
３７０４  記述位置
３７０５  要素ＩＤ
３７０６  接続方向
３７０７  接続先要素リスト
３７０８  被接続先要素リスト
３８０１  要素ＩＤ
３８０２  コード生成ルールＩＤ
３８０３  設計意図ＩＤ
３９０１  タイプ
３９０２  タイプ一致重み
３９０３  記述位置
３９０４  記述位置一致重み
３９０５  接続数
３９０６  接続パターン
３９０７  被接続数
３９０８  方向
３９０９  ＡＶＥ
３９１０  ＭＩＮ
３９１１  ＭＡＸ
３９１２  接続距離
３９１３  接続方向
３９１４  接続パターン一致重み
３９１５  一致閾値
３９１６  優先度
３９１７  コード生成ルールＩＤ
３９１８  設計意図ＩＤ
３９１９  ＩＮ
３９２０  ＯＵＴ
４００１  コード生成ルールＩＤ
４００２  設計意図ＩＤ
４００３  生成コードテンプレート
４１０１  ブロックＩＤ
４１０２  ブロック名
４１０３  タイプ
４１０４  開始行
４１０５  終了行
４１０６  記述位置
４１０７  関連種別
４１０８  関連先ブロックＩＤ
４１０９  関連リスト
４２０１  ブロックＩＤ
４２０２  ソフトウェアモデル生成ルールＩＤ
４２０３  設計意図ＩＤ
４３０１  タイプ
４３０２  タイプ一致重み
４３０３  記述特性
４３０４  記述特性一致重み
４３０５  関連パターン
４３０６  関連数
４３０７  距離
４３０８  ＡＶＥ
４３０９  ＭＩＮ
４３１０  ＭＡＸ
４３１１  関連方向
４３１２  関連種別
４３１３  関連パターン一致重み
４３１４  一致閾値
４３１５  優先度
４３１６  ソフトウェアモデル生成ルールＩＤ
４３１７  設計意図ＩＤ
４４０１  関連種別ＩＤ
４４０２  関連種別
４５０１  ソフトウェアモデル生成ルールＩＤ
４５０２  設計意図ＩＤ
４５０３  生成ソフトウェアモデルテンプレート
４７０１  ソフトウェアモデルの全体枠
４７０２  ソフトウェアモデルに描画される一要素
４７０３  接続ポート
４７０４  接続線
４８０１  入力部
４８０２  表示部
４８０３  表示部
４８０４  入力部
【図１】
2010198494.tif 000003
【図２】
2010198494.tif 000004
【図３】
2010198494.tif 000005
【図４】
2010198494.tif 000006
【図５】
2010198494.tif 000007
【図６】
2010198494.tif 000008
【図７】
2010198494.tif 000009
【図８】
2010198494.tif 000010
【図９】
2010198494.tif 000011
【図１０】
2010198494.tif 000012
【図１１】
2010198494.tif 000013
【図１２】
2010198494.tif 000014
【図１３】
2010198494.tif 000015
【図１４】
2010198494.tif 000016
【図１５】
2010198494.tif 000017
【図１６】
2010198494.tif 000018
【図１７】
2010198494.tif 000019
【図１８】
2010198494.tif 000020
【図１９】
2010198494.tif 000021
【図２０】
2010198494.tif 000022
【図２１】
2010198494.tif 000023
【図２２】
2010198494.tif 000024
【図２３】
2010198494.tif 000025
【図２４】
2010198494.tif 000026
【図２５】
2010198494.tif 000027
【図２６】
2010198494.tif 000028
【図２７】
2010198494.tif 000029
【図２８】
2010198494.tif 000030
【図２９】
2010198494.tif 000031
【図３０】
2010198494.tif 000032
【図３１】
2010198494.tif 000033
【図３２】
2010198494.tif 000034
【図３３】
2010198494.tif 000035
【図３４】
2010198494.tif 000036
【図３５】
2010198494.tif 000037
【図３６】
2010198494.tif 000038
【図３７】
2010198494.tif 000039
【図３８】
2010198494.tif 000040
【図３９】
2010198494.tif 000041
【図４０】
2010198494.tif 000042
【図４１】
2010198494.tif 000043
【図４２】
2010198494.tif 000044
【図４３】
2010198494.tif 000045
【図４４】
2010198494.tif 000046
【図４５】
2010198494.tif 000047
【図４６】
2010198494.tif 000048
【図４７】
2010198494.tif 000049
【図４８】
2010198494.tif 000050