(57)【要約】【課題】新しいパターンを容易に作成することが可能なパターン作成装置、パターン作成方法およびパターン作成プログラムを提供する。【解決手段】パターン適合手段４は、パターン抽出対象格納手段２内の各パターン抽出対象を、パターン格納手段３内の各パターンと照合する。最良適合パターン選出手段５は、その照合結果に基づいて、パターン抽出対象ごとに、パターン抽出対象と最も一致する割合が高いパターン３ａを選出し、それらの組を最良適合パターン格納手段６に格納する。不適合最小化手段７は、最良適合パターン格納手段６から最も数の多いパターンを選定し、そのパターンを使用しているパターン抽出対象を最良適合パターン格納手段６から読み取る。不適合最小化手段７は、そのパターン抽出対象内で、そのパターンに隣接する部分を、そのパターンに付加して修正パターンを生成する。【選択図】図１
2007226394.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの開発に利用可能なソフトウェアパターンを作成するパターン作成装置であって、
既存のソフトウェアパターンが格納されているパターン格納手段と、
前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、
前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出するパターン適合手段と、
前記パターン適合手段にて検出された各不適合部分での共通部分を特定し、前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する不適合最小化手段と、を含むパターン作成装置。
【請求項２】
請求項１に記載のパターン作成装置において、
前記パターン抽出対象格納手段には、さらに、前記既存のソフトウェアパターンが用いられていないソフトウェアが格納されており、
前記パターン適合手段は、前記パターン抽出対象格納手段に格納されているソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分と、該既存のソフトウェアパターンと一致する適合部分と、を検出し、
前記不適合最小化手段は、前記適合部分を有する各ソフトウェアの不適合部分での共通部分を特定する、パターン作成装置。
【請求項３】
請求項２に記載のパターン作成装置において、
前記不適合最小化手段は、前記ソフトウェアパターンと隣接し、かつ、前記各不適合部分で共通する箇所を、前記共通部分として特定する、パターン作成装置。
【請求項４】
請求項２または３に記載のパターン作成装置において、
前記パターン格納手段には、複数種類の既存のソフトウェアパターンが格納されており、
前記パターン抽出対象格納手段に格納されている複数のソフトウェアごとに、該ソフトウェアと最も一致する割合が高いソフトウェアパターンを、前記パターン適合手段にて検出されたソフトウェアごとの適合部分および不適合部分に基づいて選出する最良適合パターン選出手段をさらに含み、
前記不適合最小化手段は、前記最良適合パターン選出手段にて最も多く選出されたソフトウェアパターンを選定し、該選定されたソフトウェアパターンと隣接し、かつ、前記各不適合部分での共通する箇所を、前記共通部分として特定する、パターン作成装置。
【請求項５】
既存のソフトウェアパターンが格納されているパターン格納手段と、前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、を含むパターン作成装置が行うパターン作成方法であって、
前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出する検出ステップと、
前記検出された各不適合部分での共通部分を特定する特定ステップと、
前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する生成ステップと、を含むパターン作成方法。
【請求項６】
請求項５に記載のパターン作成方法において、
前記パターン抽出対象格納手段には、さらに、前記既存のソフトウェアパターンが用いられていないソフトウェアが格納されており、
前記検出ステップでは、前記パターン抽出対象格納手段に格納されているソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分と、該既存のソフトウェアパターンと一致する適合部分と、を検出し、
前記特定ステップでは、前記適合部分を有する各ソフトウェアの不適合部分での共通部分を特定する、パターン作成方法。
【請求項７】
請求項６に記載のパターン作成方法において、
前記特定ステップでは、前記ソフトウェアパターンと隣接し、かつ、前記各不適合部分で共通する箇所を、前記共通部分として特定する、パターン作成方法。
【請求項８】
請求項６または７に記載のパターン作成方法において、
前記パターン格納手段には、複数種類の既存のソフトウェアパターンが格納されており、
前記パターン抽出対象格納手段に格納されている複数のソフトウェアごとに、該ソフトウェアと最も一致する割合が高いソフトウェアパターンを、前記パターン適合手段にて検出されたソフトウェアごとの適合部分および不適合部分に基づいて選出する選出ステップをさらに含み、
前記特定ステップでは、前記選出ステップで最も多く選出されたソフトウェアパターンを選定し、該選定されたソフトウェアパターンと隣接し、かつ、前記各不適合部分での共通する箇所を、前記共通部分として特定する、パターン作成方法。
【請求項９】
既存のソフトウェアパターンが格納されているパターン格納手段と、前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、に接続されたコンピュータに、パターン作成処理を実行させるパターン作成プログラムであって、
前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出する検出処理と、
前記検出された各不適合部分での共通部分を特定する特定処理と、
前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する生成処理と、を含むパターン作成処理を、前記コンピュータに実行させるパターン作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パターン作成装置、パターン作成方法およびパターン作成プログラムに関し、特には、ソフトウェアの開発に利用可能なソフトウェアパターンを作成するパターン作成装置、パターン作成方法およびパターン作成プログラムに関する。
【背景技術】
【０００２】
従来、ソフトウェア開発分野では、再利用可能なソフトウェア部品等のソフトウェアパターン（以下、単に「パターン」と称する。）を開発対象モデルに適用することによって、そのモデルに対応するソフトウェアを生成していくことが広く行われている。
【０００３】
なお、パターンとは、ソフトウェア開発の様々な局面で繰り返し現れる状況について解決すべき問題と調節すべき制約およびその解法を、ソフトウェア開発に纏わる人々が解釈可能な形式で表した指針・定石である。よって、パターンは、再利用可能なソフトウェア部品に限らず、例えば、それ自体では動作しない「ひな型」であってもよい。
【０００４】
ソフトウェア開発者は、パターンを、開発対象モデルである対象群に適用する場合、多数のパターンを記憶し、パターンの適用可能性を正しく理解して、そのパターンを使用しなければならない。このため、経験の浅い開発者が、パターンの一部しか記憶できなかったり、不適切なパターンを開発対象モデルに適用したりする問題が生じる。
【０００５】
この問題を解決可能なパターン利用システムの一例が、特許文献１（特開２０００−３０５７６６号公報）に記載されている。
【０００６】
図１０は、特許文献１に記載されたパターン利用システム１０１、具体的には、オブジェクト指向ソフトウェア開発支援装置を示したブロック図である。
【０００７】
パターン利用システム１０１は、パターン体系格納手段１０２と、パターン適用手段１０５とから構成されている。パターン体系格納手段１０２には、利用可能な複数のパターンのパターン情報１０３と、その複数パターンのうちで開発時に前後関係があるパターンの間を関連づけるパターン間関連情報１０４とが格納されている。
【０００８】
パターン利用システム１０１は、次のように動作する。
【０００９】
パターン適用手段１０５は、パターン体系格納手段１０２に格納されているパターンのうちで、ユーザによって適用が承認されたパターンを、開発対象モデルに適用して、そのモデルを詳細化し、そのモデルに対応するソフトウェアの開発を支援する。
【特許文献１】特開２０００−３０５７６６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従来のパターン利用システム１０１は、開発対象モデルに既存のパターンを効率的に適用することが可能である。
【００１１】
しかし、パターン利用システム１０１は、すでに作成してしまった対象物（ソフトウェア）から新しいパターンを効率的に抽出できず、また、既存のパターンを改良して適合性の高い新しいパターンを生成できない。
【００１２】
また、ソフトウェア開発者が、複数の既存のソフトウェアからパターンを抽出する際、換言すると、人間が、複数の対象物（ソフトウェア）から、それらの対象物に共通する情報であるパターンを抽出する際、以下のような問題が生じる。
【００１３】
（１）パターンを抽出することは難しい。サンプルプログラムであれば作成できる技術を持った人間でも、いくつもの自由度を持つプログラムのパターンを作成する技術を有していない場合が多い。
【００１４】
（２）技術力が一定水準に達していない者がパターンを抽出すると、パラメータの過不足およびパターンとして取り出すべき部分の過不足が生じる。
【００１５】
（３）適切なパターンの粒度（大きさ）を決めることも難しい。
【００１６】
本発明の目的は、新しいパターンを容易に作成することが可能なパターン作成装置、パターン作成方法およびパターン作成プログラムを提供することである。
【課題を解決するための手段】
【００１７】
上記目的を達成するために、本発明のパターン作成装置は、ソフトウェアの開発に利用可能なソフトウェアパターンを作成するパターン作成装置であって、既存のソフトウェアパターンが格納されているパターン格納手段と、前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出するパターン適合手段と、前記パターン適合手段にて検出された各不適合部分での共通部分を特定し、前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する不適合最小化手段と、を含む。
【００１８】
また、本発明のパターン作成方法は、既存のソフトウェアパターンが格納されているパターン格納手段と、前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、を含むパターン作成装置が行うパターン作成方法であって、前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出する検出ステップと、前記検出された各不適合部分での共通部分を特定する特定ステップと、前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する生成ステップと、を含む。
【００１９】
上記発明によれば、各不適合部分での共通部分が特定され、既存のソフトウェアパターンにその共通部分が付加された新たなソフトウェアパターンが生成される。各不適合部分は、各ソフトウェアでの既存のソフトウェアパターンと異なる部分である。
【００２０】
このため、すでに作成されているソフトウェアから、ソフトウェアパターンを効率的に抽出することができる。また、新しいソフトウェアパターンは、既存のソフトウェアパターンを元に作成されるため、パターン抽出性能がよくなる。よって、新しいパターンを容易に作成することが可能になる。
【００２１】
なお、前記パターン抽出対象格納手段には、さらに、前記既存のソフトウェアパターンが用いられていないソフトウェアが格納されており、前記パターン適合手段は、前記パターン抽出対象格納手段に格納されているソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分と、該既存のソフトウェアパターンと一致する適合部分と、を検出し、前記不適合最小化手段は、前記適合部分を有する各ソフトウェアの不適合部分での共通部分を特定することが望ましい。
【００２２】
上記発明によれば、既存のソフトウェアパターンを使用しているソフトウェアに適用可能な、新しいソフトウェアパターンを作成することが可能になる。
【００２３】
また、前記不適合最小化手段は、前記ソフトウェアパターンと隣接し、かつ、前記各不適合部分で共通する箇所を、前記共通部分として特定することが望ましい。
【００２４】
上記発明によれば、既存のソフトウェアパターンを使用しているソフトウェアに適用可能な、新しいソフトウェアパターンを高い確率で作成することが可能になる。
【００２５】
また、前記パターン格納手段には、複数種類の既存のソフトウェアパターンが格納されており、前記パターン抽出対象格納手段に格納されている複数のソフトウェアごとに、該ソフトウェアと最も一致する割合が高いソフトウェアパターンを、前記パターン適合手段にて検出されたソフトウェアごとの適合部分および不適合部分に基づいて選出する最良適合パターン選出手段をさらに含み、前記不適合最小化手段は、前記最良適合パターン選出手段にて最も多く選出されたソフトウェアパターンを選定し、該選定されたソフトウェアパターンと隣接し、かつ、前記各不適合部分での共通する箇所を、前記共通部分として特定することが望ましい。
【００２６】
上記発明によれば、新しいソフトウェアパターンの元となるソフトウェアパターンとして、多くのソフトウェアで利用されているソフトウェアパターンが用いられる。このため、利用される可能性が高いソフトウェアパターンを作成することが可能になる。
【００２７】
また、本発明のパターン作成プログラムは、既存のソフトウェアパターンが格納されているパターン格納手段と、前記既存のソフトウェアパターンが用いられている複数種類のソフトウェアが格納されているパターン抽出対象格納手段と、に接続されたコンピュータに、パターン作成処理を実行させるパターン作成プログラムであって、前記複数種類のソフトウェアごとに、前記既存のソフトウェアパターンと異なる不適合部分を検出する検出処理と、前記検出された各不適合部分での共通部分を特定する特定処理と、前記既存のソフトウェアパターンに該共通部分が付加された新たなソフトウェアパターンを生成する生成処理と、を含むパターン作成処理を、前記コンピュータに実行させる。
【００２８】
上記発明によれば、上記パターン作成方法をコンピュータで実現することが可能になる。
【発明の効果】
【００２９】
本発明によれば、新しいパターンを容易に作成することが可能になる。
【発明を実施するための最良の形態】
【００３０】
次に、本発明の実施例の構成について図面を参照して詳細に説明する。
【００３１】
図１は、本発明の一実施例のパターン作成装置としてのパターン抽出装置１を示したブロック図である。
【００３２】
図１において、パターン抽出装置１は、パターン抽出対象格納手段２と、パターン格納手段３と、パターン適合手段４と、最良適合パターン選出手段５と、最良適合パターン格納手段６と、不適合最小化手段７とを含む。
【００３３】
パターン抽出対象格納手段２は、ソフトウェアパターンが抽出される複数種類の対象物（ソフトウェア、具体的には、ソフトウェアとしてのソフトウェアモデル）２ａを格納する。以下、この対象物を、「パターン抽出対象」と称する。
【００３４】
例えば、パターン抽出対象格納手段２には、パターン格納手段３に格納されているパターンを用いた対象物と、それを用いていない対象物が格納されている。
【００３５】
図２は、パターン抽出対象２ａの構造の例を示した説明図である。具体的には、図２（ａ）は、パターン抽出対象２ａがテキストの場合の構造（パターン抽出対象２ａ１）を示した説明図であり、図２（ｂ）は、パターン抽出対象２ａがグラフ構造の場合の構造（パターン抽出対象２ａ２）を示した説明図である。
【００３６】
パターン抽出対象２ａ１は、図２（ａ）に示すように、文字の配列で構成される。
【００３７】
また、パターン抽出対象２ａ２は、図２（ｂ）に示すように、ノードとエッジの集合となる。各ノードは、ノード名と他の属性群で構成され、各エッジは、エッジ名、接続元ノード、接続先ノード、および、他の属性群で構成される。
【００３８】
図１に戻って、パターン格納手段３は、既存の複数種類のソフトウェアパターン（以下、単に「パターン」と称する。）３ａを格納する。パターン３ａは、例えば、再利用可能なソフトウェア部品である。なお、パターンは、再利用可能なソフトウェア部品に限らず、上述したように、ソフトウェア開発の様々な局面で繰り返し現れる状況について解決すべき問題と調節すべき制約およびその解法を、ソフトウェア開発に纏わる人々が解釈可能な形式で表した指針・定石であればよい。
【００３９】
図３は、パターン３ａの構造の例を示した説明図である。
【００４０】
具体的には、図３（ａ）は、パターン３ａの基本構造を示した説明図であり、図３（ｂ）は、パターン３ａがテキストの場合の構造（パターン３ａＡ）を示した説明図であり、図３（ｃ）は、パターン３ａがグラフ構造の場合の構造（パターン３ａＢ）を示した説明図であり、図３（ｄ）は、パターン３ａが、テキストおよびグラフ構造と異なる一般の構造の場合の構造（パターン３ａＣ）を示した説明図である。
【００４１】
パターン３ａは、図３（ａ）に示したように、任意データ部分３ａ１と、それらの繰り返し３ａ２と、条件付実施３ａ３と、パラメータ３ａ４、ならびに、制約条件３ａ５から構成される。なお、繰り返し３ａ２と、条件付実施３ａ３と、パラメータ３ａ４とで、パターン構造３ａ６を構成する。
【００４２】
任意データ部分３ａ１は、例えば、テキスト（ａｂｃｄのような文字列）、もしくは、グラフ構造（ノードとエッジの集合）である。
【００４３】
繰り返し３ａ２は、任意データ部分３ａ１に含まれるデータの繰り返し回数を示し、パターン３ａ内には、例えば「繰り返し（ａｂｃｄ、２回）」という模式的な形で定義される。なお、繰り返し回数が、パラメータとなっている場合もある。
【００４４】
条件付実施３ａ３は、例えば、パラメータ値を元に、条件が満たされた場合（満たされなかった場合）のみ出現するテキスト（またはノード、エッジ）を示す。
【００４５】
例えば、ｎをパラメータとして、「条件（n==1、abcd、efgh）」という記述があった場合、ｎの値が1の場合「abcd」というテキストが、その条件の記載部分に出現し、ｎの値が1でない場合「efgh」というテキストが、その条件の記載部分に出現する。
【００４６】
制約条件３ａ５は、パラメータ３ａ４が満たすべき制約を示す。制約条件は、例えば、「制約条件（0<=n<10）」のように表現される。
【００４７】
あるパターン３ａが、
パターン（引数：n）：制約条件（0<=n<10）
＝ aaa 繰り返し（n、条件（n==1、x、y）） bbb
と定義されている場合、「aaa」「bbb」は任意データ部分３ａ１となる。
【００４８】
このパターンに対し、パラメータnが変化すると、
パターン（0）＝aaabbb、パターン（1）＝aaaxbbb、パターン（2）＝aaayybbb、パターン（9）＝aaayyyyyyyyybbb、パターン（10）＝エラー（10は制約条件を満たさない）、
という結果が生じる。
【００４９】
なお、パターン３ａの構造は、パターン抽出対象２ａの構造と独立している。
【００５０】
図１に戻って、パターン適合手段４は、パターン抽出対象格納手段２に格納されたパターン抽出対象２ａのそれぞれを、パターン格納手段３に格納されたパターン３ａのそれぞれと照合し、その照合結果を、最良適合パターン選出手段５に送付する。
【００５１】
具体的には、パターン適合手段４は、パターン抽出対象２ａとパターン３ａとを照合するたびに、パターン抽出対象２ａを、パターン３ａと一致する一致部分（適合部分）と、パターン３ａと不一致の不一致部分（不適合部分）と、に分ける。
【００５２】
パターン適合手段４は、一致部分と不一致部分に分けられた各パターン抽出対象２ａを、パターン適用済対象として、最良適合パターン選出手段５に送付する。このとき、パターン適合手段４は、パターン適用済対象の元となるパターン抽出対象２ａも併せて送付する。
【００５３】
図４は、パターン適合手段４による照合結果、具体的には、パターン抽出対象２ａ１（テキスト）を一致部分と不一致部分とに分けたパターン適用テキスト（パターン適用済対象）２ａ１Ａの構造の一例を示した説明図である。
【００５４】
図４において、パターン適用テキスト２ａ１Ａには、パターン３ａに含まれないテキスト（パターン外テキスト、すなわち、不一致部分）２ａ１Ａ１と、パターン３ａに含まれるテキスト（パターン内テキスト、すなわち、一致部分）２ａ１Ａ２が含まれる。
【００５５】
パターン適用テキスト２ａ１Ａには、さらに、テキスト２ａ１Ａ２、すなわち、パターンを特定するための、繰り返しの回数２ａ１Ａ３と、条件付実施が行われたか否か（trueまたはfalse）２ａ１Ａ４と、パラメータの代入値２ａ１Ａ５、ならびに、制約条件が全てtrueであること２ａ１Ａ６とが、パラメータとして、保持される。
【００５６】
図５は、パターン適合手段４による適合結果、具体的には、グラフ構造であるパターン抽出対象２ａ２を一致部分と不一致部分とに分けたパターン適用グラフ構造（パターン適用済対象）２ａ２Ａの構造の一例を示した説明図である。
【００５７】
図５において、パターン適用グラフ構造２ａ２Ａには、パターン３ａに含まれないノードおよびエッジ（パターン外ノードおよびエッジ、すなわち、不一致部分）２ａ２Ａ１と、パターン３に含まれるノードおよびエッジ（パターン内ノードおよびエッジ、すなわち、一致部分）２ａ２Ａ２とが含まれる。
【００５８】
パターン適用グラフ構造２ａ２Ａには、さらに、テキストの場合と同様に、ノードおよびエッジ２ａ２Ａ２、すなわち、パターンを特定するための、繰り返しの回数２ａ２Ａ３、条件付実施が行われたか否か（trueまたはfalse）２ａ２Ａ４、パラメータの代入値２ａ２Ａ５、ならびに、制約条件が全てtrueであること２ａ２Ａ６が、パラメータとして、保持される。
【００５９】
また、パターン適用グラフ構造２ａ２Ａには、そのほかに、パターン３ａ内のノードに接続するエッジを示す接続先ノード情報２ａ２Ａ７も、パラメータとして、保持される。
【００６０】
図１に戻って、最良適合パターン選出手段５は、パターン適合手段４の照合結果（パターン適用済対象）およびパターン抽出対象２ａを受け付けると、それら照合結果（パターン適用済対象）を、元となるパターン抽出対象２ａと関連づけて格納する。
【００６１】
また、最良適合パターン選出手段５は、照合結果（パターン適用済対象）に基づいて、パターン抽出対象２ａごとに、パターン抽出対象２ａとパターン３ａとの一致の割合を計算する。最良適合パターン選出手段５は、その計算結果（一致の割合）を、その計算結果に対応する照合結果（パターン適用済対象）に関連づけて格納する。
【００６２】
また、最良適合パターン選出手段５は、その計算結果に基づいて、パターン抽出対象２ａごとに、最も一致する割合が高いパターン３ａを選出する。なお、最良適合パターン選出手段５は、その計算結果と、パターン格納手段３内のパターン３ａとを参照して、パターン抽出対象２ａごとに、パターン抽出対象２ａと最も一致する割合が高いパターン３ａを選出してもよい。
【００６３】
また、最良適合パターン選出手段５は、パターン抽出対象２ａごとに、パターン抽出対象２ａと、そのパターン抽出対象２ａと最も一致する割合が高いパターン３ａと、を最良適合パターン格納手段６に格納する。
【００６４】
不適合最小化手段７は、最良適合パターン格納手段６に格納された複数種類のパターン３ａの中で、最も数の多いパターン３ａを選定する。続いて、不適合最小化手段７は、その選定されたパターン３ａを使用しているパターン抽出対象２ａを、最良適合パターン格納手段６から読み取る。
【００６５】
不適合最小化手段７は、そのパターン抽出対象２ａ内で、そのパターン３ａに隣接する部分を、そのパターン３ａに付加して、新パターンの候補（修正パターン）を生成する。
【００６６】
不適合最小化手段７は、新パターンの候補と、その候補の元となったパターン（以下「元パターン」と称する。）が適用されていた全てのパターン抽出対象と、の一致の割合を計算する。
【００６７】
なお、不適合最小化手段７は、例えば、最良適合パターン選出手段５に格納されている照合結果（パターン適用済対象）を参照して、元パターンが適用されていた全てのパターン抽出対象を特定し、その後、その特定された全てのパターン抽出対象をパターン抽出対象格納手段２から読み取り、それらパターン抽出対象と新パターンの候補との一致の割合を計算する。
【００６８】
また、不適合最小化手段７は、最良適合パターン選出手段５から、元パターンとそれらパターン抽出対象との一致の割合を読み出す。
【００６９】
不適合最小化手段７は、各パターン抽出対象において、新パターンの候補とパターン抽出対象の一致の割合を示す計算結果が、元パターンとそのパターン抽出対象の一致の割合より高いと、パターン３ａに付加された部分（隣接部分）を、それらパターン抽出対象の各不適合部分での共通部分として特定し、その新パターンの候補を、新パターンとして、パターン格納手段３に格納する。
【００７０】
さらに、不適合最小化手段７は、その元パターンを使用しているパターン抽出対象に、新パターンを適用し、その適用結果を、パターン抽出対象格納手段２に戻す。
【００７１】
次に、動作を説明する。
【００７２】
図６は、図１に示したパターン抽出装置１の動作を説明するためのフローチャートである。以下、図６を参照して、パターン抽出装置１の動作について詳細に説明する。
【００７３】
まず、パターン適合手段４は、パターン抽出対象格納手段２から、パターン抽出対象２ａを１つ取り出す（ステップＡ１）。
【００７４】
パターン抽出対象２ａの構造は、図２に示したように、パターン抽出対象２ａがテキストの場合（パターン抽出対象２ａ１）と、グラフ構造の場合（パターン抽出対象２ａ２）で異なる。なお、パターン抽出対象２ａは、テキストおよびグラフ構造に限らず適宜変更可能である。
【００７５】
続いて、パターン適合手段４は、パターン格納手段３から、パターン３ａを１つ取り出す（ステップＡ２）。
【００７６】
パターン３ａの構造は、図３に示したように、パターン３ａがテキストの場合（パターン３ａＡ）と、パターン３ａがグラフ構造の場合（パターン３ａＢ）とで異なる。なお、パターン３ａは、テキストおよびグラフ構造に限らず適宜変更可能である。
【００７７】
続いて、パターン適合手段４は、パターン格納手段３から取り出したパターン３ａと、パターン抽出対象格納手段２から取り出したパターン抽出対象２ａと、を照合（パターンマッチング）する（ステップＡ３）。
【００７８】
具体的には、パターン適合手段４は、パターン抽出対象２ａを、パターン３ａと一致する一致部分と、パターン３ａと不一致の不一致部分と、に分け、さらに、一致部分に関するパラメータを付与する（図４参照）。
【００７９】
パターン適合手段４は、一致部分と不一致部分に分けられ、かつ、パラメータが付与されたパターン抽出対象２ａを、パターン適用済対象として、最良適合パターン選出手段５に送付する。このとき、パターン適合手段４は、パターン抽出対象２ａも最良適合パターン選出手段５に送付する。
【００８０】
最良適合パターン選出手段５は、パターン適合手段４から、パターン適用済対象およびパターン抽出対象２ａを受け付けると、それらを関連づけて自己に格納する。
【００８１】
なお、ステップＡ３におけるパターンマッチングは、正規表現の技術を使用することにより、容易に公知の技術で行える。
【００８２】
続いて、パターン適合手段４は、そのパターン抽出対象２ａと、パターン格納手段３内のすべてのパターン３ａとの照合が終了していないと、ステップＡ２およびＡ３を実行する。よって、パターン適合手段４は、そのパターン抽出対象２ａを、パターン格納手段３内のすべてのパターン３ａと照合する（ステップＡ４）。
【００８３】
パターン適合手段４は、そのパターン抽出対象２ａと、パターン格納手段３内のすべてのパターン３ａとの照合が終了すると、照合終了信号を最良適合パターン選出手段５に提供する。
【００８４】
最良適合パターン選出手段５は、照合終了信号を受け付けると、パターン３ａがパターン抽出対象２ａを占める割合を計算する（ステップＡ５）。例えば、最良適合パターン選出手段５は、パターン３ａがパターン抽出対象２ａを占める割合として、一致部分／（一致部分＋不一致部分）を計算する。なお、最良適合パターン選出手段５は、一致部分と不一致部分を、パターン適用済対象から読み取る。
【００８５】
最良適合パターン選出手段５は、その計算結果を、その計算結果に対応するパターン抽出対象２ａに関連づけて自己に格納する。
【００８６】
最良適合パターン選出手段５は、その計算結果に基づいて、ステップＡ１で取り出されたパターン抽出対象２ａを占める割合が最大のパターン３ａを１つ選択する。続いて、最良適合パターン選出手段５は、その選択されたパターン３ａを、そのパターン抽出対象２ａに関連づけて、最良適合パターン格納手段６に格納する（ステップＡ６）。
【００８７】
その後、ステップＡ１からステップＡ６が、各パターン抽出対象２ａに対して実行される（ステップＡ７）。
【００８８】
その結果、最良適合パターン格納手段６には、パターン抽出対象２ａごとに、パターン抽出対象２ａと、そのパターン抽出対象２ａを占める割合が最大のパターン（パターン抽出対象に最もよく適合するパターン）とが、格納される。
【００８９】
最良適合パターン選出手段５は、ステップＡ１からステップＡ６が、各パターン抽出対象２ａに対して実行されると、格納終了信号を不適合最小化手段７に提供する。
【００９０】
不適合最小化手段７は、格納終了信号を受け付けると、特定のパターン３ａを使用している複数のパターン抽出対象２ａでの不一致部分が最小になるように、最良適合パターン格納手段６内の情報を用いて、特定のパターン３ａを修正する（ステップＡ８）。
【００９１】
不適合最小化手段７は、パターン不適合の最小化を行うと、パターンが修正されたか判断し（ステップＡ９）、修正がある場合は、修正後のパターンを、パターン格納手段４に格納し（ステップＡ１０）、さらに、その特定のパターンを使用しているパターン抽出対象に、修正後のパターンを適用し、その適用結果を、パターン抽出対象格納手段２に戻す（ステップＡ１１）。
【００９２】
図７は、図６に示したステップＡ８の一例を説明するためのフローチャートである。以下、図７を参照して、ステップＡ８の一例を説明する。
【００９３】
まず、不適合最小化手段７は、最良適合パターン格納手段６に格納された複数種類のパターン３ａの中で、最も数の多いパターン３ａを、特定のパターンとして、取り出す（ステップＢ１）。
【００９４】
次に、不適合最小化手段７は、このパターン３ａを適用しているパターン抽出対象２ａ（具体的には、）を最良適合パターン格納手段６の中から１つ選択する（ステップＢ２）。
【００９５】
次に、不適合最小化手段７は、その選択されたパターン抽出対象２ａのパターン３ａ適用外の部分から、パターン３ａ適用部分に隣接する箇所を１つ選択する（ステップＢ３）。
【００９６】
隣接する箇所とは、パターン抽出対象２ａがテキストの場合は、パターン３ａの前または後に存在する部分であり、一方、パターン抽出対象２ａがグラフの場合は、パターン３ａ内に存在するノードに接続されるパターン外のエッジである。なお、パターン抽出対象２ａがテキストおよびグラフ構造と異なる場合でも、通常、隣接の概念を自然に定義することが可能である。
【００９７】
次に、不適合最小化手段７は、ステップＢ１で取り出したパターン（元のパターン）にステップＢ３で選択された隣接箇所を追加した修正パターンを定義する（ステップＢ４)。
【００９８】
次に、不適合最小化手段７は、元のパターンを適用している全てのパターン抽出対象２ａを、最良適合パターン選出手段５に格納されているパターン適用済対象と、パターン格納手段３に格納されているパターン３ａと、を参照して決定する。
【００９９】
続いて、不適合最小化手段７は、その決定された全てのパターン抽出対象を、パターン抽出対象格納手段２から読み出す。
【０１００】
続いて、不適合最小化手段７は、修正パターンと、その読み出された全てのパターン抽出対象２ａと、を個別に照合する（ステップＢ５）。なお、ステップＢ５での照合処理は、ステップＡ３と同じ「パターンマッチング」である。
【０１０１】
次に、不適合最小化手段７は、それら照合されたパターン抽出対象２ａごとに、修正パターンがパターン抽出対象２ａを占める割合を計算する（ステップＢ６)。ステップＢ６での処理は、ステップＡ５と同じである。
【０１０２】
次に、不適合最小化手段７は、その計算結果が、元パターンとそのパターン抽出対象の一致の割合より、高いか判定する（ステップＢ７）。なお、元パターンとそのパターン抽出対象の一致の割合は、最良適合パターン選出手段５に格納されているので、不適合最小化手段７は、最良適合パターン選出手段５から、元パターンとそのパターン抽出対象の一致の割合を読み出すことによって、その割合を取得する。
【０１０３】
その計算結果が、元パターンとそのパターン抽出対象の一致の割合より高いと、不適合最小化手段７は、その修正パターンを、新パターンとして認定する。
【０１０４】
不適合最小化手段７は、全ての隣接箇所に対し、ステップＢ３からステップＢ８を繰り返す（ステップＢ９）。
【０１０５】
その後、不適合最小化手段７は、全ての、元のパターンが適用されているパターン抽出対象に対し、ステップＢ２からステップＢ９を繰り返す（ステップＢ１０）。
【０１０６】
その後、不適合最小化手段７は、修正候補を含む全てのパターンに対し、ステップＢ１からステップＢ１１を繰り返す。
【０１０７】
このようにして得られたパターンのうち、パターン抽出対象に対し適用されているパターンは、このパターン抽出対象の集合に対し、最適なパターンであると考えられる。不適合最小化手段７は、これで、不適合を最小化する処理を終了する。
【０１０８】
図８は、パターン抽出装置１の処理の一例を説明するための説明図である。なお、図８において、前図に示したものと同一のものには同一符号を付してある。
【０１０９】
図８に示したパターン抽出対象２ａがパターン抽出対象格納手段２に格納され、図８に示したパターンＰ１、Ｐ２およびＰ３がパターン格納手段３に格納されていると、パターン照合手段４は、パターン抽出対象２ａと、パターンＰ１、Ｐ２およびＰ３のそれぞれとのパターンマッチングを行う。
【０１１０】
最良適合パターン選出手段５は、パターン抽出対象２ａを占める割合が最大のパターンＰ１（パターン抽出対象２ａと最もよくマッチングしたパターン）を選択する。
【０１１１】
不適合最小化手段７は、パターンＰ１に、パターン抽出対象２ａでパターンＰ１と隣接している箇所を付加して、修正パターンを定義する。
【０１１２】
次に、ステップＡ３（パターンマッチング）、ステップＡ５（比率計算）、ステップＡ６（パターン選択）、ステップＢ３（隣接箇所取出し）およびステップＢ４（修正パターン作成）の具体的な処理例を説明する。
【０１１３】
パターン格納手段３に、以下のようなパターン１（Composite）およびパターン２（Singleton）が格納されており、また、パターン抽出対象格納手段２に、パターン抽出対象２ａとして、以下のような対象例ｘ、対象例ｙおよび対象例ｚが格納されているとする。
【０１１４】
なお、下記で、[]で囲まれた部分をパラメータとする。また、ANYはパターンとしては無視する部分を示す。
【０１１５】
パターン１は、図８のパターンとして示した図を、３つ組で記述している（凡例：線種、線に接続している要素１、線に接続している要素２）。
【０１１６】
パターン１（Composite）：
（継承、[要素]、[リーフ]）
（継承、[要素]、[ノード]）
（合成、[ノード]、[要素]）
パターン２（凡例：クラス、クラス名、（属性、属性名1）、（属性、属性名2）、…、（操作、操作名1、操作実装1）、（操作、操作名2、操作実装2）、…）
パターン２（Singleton）：
（クラス、ANY、（属性、[インスタンス]）、
（操作、[getInstance]、[インスタンス = new ANY; ANY; return インスタンス;]））
対象例ｘ：
（継承、X、Y）
（継承、X、Z）
（合成、Z、X）
（継承、Z、W）
（継承、Z、V）
（継承、Z、U）
対象例ｙ：
（クラス、X、
（属性、data）、
（属性、number）、
（操作、getData、"data = new Data(); number = number + 1; return data;"）
（操作、getNumber、"return number;"）
）
対象例ｚ：
（継承、X、Y）
（合成、Y、X）
（クラス、Y
（属性、data）、
（属性、number）、
（操作、setData、"data = arg;"）
（操作、getData、"return data;"）
（操作、setNumber、"number = arg;"）
（操作、getNumber、"return number;"）
）
まず、対象例ｘにパターン１、パターン２を適用した場合の処理例を説明する。
【０１１７】
最初に、対象例ｘにパターン１を適用した場合の処理例を説明する。
【０１１８】
ステップＡ３では、対象例ｘからパターン１が以下のように抽出される。なお｛｝内がパターン１の、要素＝X、ノード＝Z、リーフ＝Yにマッチする。
【０１１９】
｛（継承、X、Y）
（継承、X、Z）
（合成、Z、X）｝
（継承、Z、W）
（継承、Z、V）
（継承、Z、U）
ステップＡ５では、グラフ上の６つの要素のうち３つがパターン１にマッチするため、３÷６＝５０％が算出される。
【０１２０】
続いて、対象例ｘにパターン２を適用した場合の処理例を説明する。
【０１２１】
この場合、ステップＡ３では、マッチなしとなり、ステップＡ５では、０％が算出される。
【０１２２】
その後のステップＡ６では、０％と５０％が比較され、５０％が選択される。
【０１２３】
その後のステップＢ３では、対象例ｘからパターン１が取り出された場合、隣接箇所は、
（継承、Z、W）
（継承、Z、V）
（継承、Z、U）
のいずれかとなる。
【０１２４】
その後のステップＢ４では、ステップＢ３の結果を含むパターンは、いずれも、
（継承、[要素]、[リーフ]）
（継承、[要素]、[ノード]）
（合成、[ノード]、[要素]）
（継承、[ノード]、ANY）
となる。
【０１２５】
次に、対象例ｙにパターン１、パターン２を適用した場合の処理例を説明する。
【０１２６】
まず、対象例ｙにパターン１を適用した場合の処理例を説明する。
【０１２７】
この場合、ステップＡ３では、マッチなしとなり、ステップＡ５では、０％が算出される。
【０１２８】
続いて、対象例ｙにパターン２を適用した場合の処理例を説明する。
【０１２９】
ステップＡ３では、対象例ｙからパターン２が以下のように抽出される。なお｛｝内がパターン２の、インスタンス＝data、getInstance＝getDataにマッチする。
【０１３０】
（｛クラス｝、｛X｝、
｛（属性、data）｝、
（属性、number）、
｛（操作、getData、"data = new Data(); number = number + 1; return data;"）｝
（操作、getNumber、"return number;"）
）
ステップＡ５では、クラス内の６つの要素のうち３つがパターン２にマッチするため、３÷６＝５０％が算出される。
【０１３１】
その後のステップＡ６では、０％と５０％が比較され、５０％が選択される。
【０１３２】
その後のステップＢ３では、対象例yからパターン２が取り出された場合、隣接箇所は、
（属性、number）
（操作、getNumber、"return number;"）
のいずれかとなる。
【０１３３】
その後のステップＢ４では、ステップＢ３の結果を含むパターンは、
（クラス、ANY、（属性、[インスタンス]）、
（属性、[number]）、
（操作、[getInstance]、[インスタンス = new ANY; ANY; return インスタンス;]））
または
（クラス、ANY、（属性、[インスタンス]）、
（操作、[getInstance]、[インスタンス = new ANY; ANY; return インスタンス;]）
（操作、[getNumber]、[return number;]）
）
となる。
【０１３４】
次に、対象例ｚにパターン１、パターン２を適用した場合の処理例を説明する。
【０１３５】
まず、対象例ｚにパターン１を適用した場合の処理例を説明する。
【０１３６】
この場合、ステップＡ３では、マッチなしとなり、ステップＡ５では、０％が算出される。
【０１３７】
続いて、対象例ｚにパターン２を適用した場合の処理例を説明する。
【０１３８】
この場合も、ステップＡ３では、マッチなしとなり、ステップＡ５では、０％が算出される。
【０１３９】
この場合、ステップＡ６では、０％だけなのでパターンが選択されず、ステップＢ３およびステップＢ４も実行されない。
【０１４０】
次に、本実施例の効果について説明する。
【０１４１】
本実施例では、１つ１つのパターン抽出対象ではなく、ひとまとまりのパターン抽出対象に対し、最適なパターンを得るための不適合最小化手段７を含むように構成されているため、少数の既知のパターンを与えるだけで、最適な新しいパターンを自動的に抽出できる。その理由は、既知の少数のパターンを元に、パターン抽出対象でのパターンの不適合を最小化した新しいパターンを作成するためである。
【０１４２】
また、本実施例では、さらに、最良適合パターン選出手段５を含むため、局所最適ではない、最良のパターンを得ることができる。その理由は、最良適合パターン選出手段５が、最も適合性のよいパターンを選定するためである。
【０１４３】
本実施例によれば、不適合最小化手段７は、各不適合部分での共通部分を特定し、既存のパターンにその共通部分が付加された新たなパターンを生成する。なお、各不適合部分は、各パターン抽出対象での既存のパターンと異なる部分である。
【０１４４】
このため、すでに作成されているソフトウェア（ソフトウェアモデル）から、パターンを効率的に抽出することができる。また、新しいパターンは、既存のパターンを元に作成されるため、パターン抽出性能がよくなる。よって、新しいパターンを容易に作成することが可能になる。
【０１４５】
また、本実施例では、パターン適合手段４は、パターン抽出対象格納手段２に格納されているパターン抽出対象ごとに、パターン格納手段３に格納されている特定のパターンと異なる不適合部分と、該特定のパターンと一致する適合部分と、を検出する。不適合最小化手段７は、適合部分を有する各パターン抽出対象の不適合部分での共通部分を特定する。
【０１４６】
この場合、特定のパターンを使用しているパターン抽出対象に適用可能な、新しいパターンを作成することが可能になる。
【０１４７】
また、本実施例では、不適合最小化手段７は、パターンと隣接し、かつ、各不適合部分で共通する箇所を、共通部分として特定する。
【０１４８】
この場合、既存のパターンを使用しているパターン抽出対象に適用可能な、新しいパターンを高い確率で作成することが可能になる。
【０１４９】
また、本実施例では、最良適合パターン選出手段５は、パターン抽出対象格納手段２に格納されている複数のパターン抽出対象ごとに、そのソフトウェアと最も一致する割合が高いパターンを、パターン抽出対象２ａごとの適合部分および不適合部分に基づいて選出する。不適合最小化手段７は、最良適合パターン選出手段５にて最も多く選出されたパターンを選定し、その選定されたパターンと隣接し、かつ、各不適合部分での共通する箇所を、共通部分として特定する。
【０１５０】
この場合、新しいパターンの元となるパターンとして、多くのパターン抽出対象で利用されている既存のパターンが用いられる。このため、利用される可能性が高いパターンを作成することが可能になる。
【０１５１】
以上説明した実施例において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
【０１５２】
例えば、パターン抽出対象およびパターンとして、テキストの場合とグラフ構造の場合の両方が含まれていてもよい。
【０１５３】
また、ステップＡ３およびＢ５におけるパターンマッチングとして、正規表現ではなく、Prologで使用されているバックトラックを用いたパターンマッチングが使用されてもよい。
【０１５４】
また、図９に示したように、パターン適合手段４と、最良適合パターン選出手段５と、不適合最小化手段７の各機能を、コンピュータの一例であるＣＰＵ８で実現してもよい。
【０１５５】
なお、図９は、パターン抽出装置１の他の例を示したブロック図であり、図９において、図１と同一のものには同一符号を付してある。
【０１５６】
この場合、例えば、ＣＰＵ８は、コンピュータにて読み取り可能な記録媒体であるプログラム格納手段９に格納されたパターン作成プログラムを読み取り、そのパターン作成プログラムを実行することによって、パターン適合手段４と、最良適合パターン選出手段５と、不適合最小化手段７を実現する。
【０１５７】
また、パターン抽出対象格納手段２と、パターン格納手段３と、最良適合パターン格納手段６とは、同一のメモリ上に構成されてもよく、別々のメモリとして攻勢されてもよい。
【０１５８】
また、本実施例は、ソフトウェアのソースコードや設計図の整理やバグ検査・品質測定、自動生成といった用途に適用できる。また、構成要素を木構造に還元できるデータの整理、品質測定、自動生成といった用途にも適用可能である。
【図面の簡単な説明】
【０１５９】
【図１】本発明の一実施例のパターン抽出装置１を示したブロック図である。
【図２】パターン抽出対象２ａの構造の例を示した説明図である。
【図３】パターン３ａの構造の例を示した説明図である。
【図４】パターン適合手段４による照合結果の一例を示した説明図である。
【図５】パターン適合手段４による照合結果の他の例を示した説明図である。
【図６】パターン抽出装置の動作を説明するためのフローチャートである。
【図７】パターン抽出装置の動作を説明するためのフローチャートである。
【図８】パターン抽出装置１の処理の一例を説明するための説明図である。
【図９】パターン抽出装置１の他の例を示したブロック図である。
【図１０】従来のオブジェクト指向ソフトウェア開発支援装置を示したブロック図である。
【符号の説明】
【０１６０】
１      パターン抽出装置
２      パターン抽出対象格納手段
３      パターン格納手段
４      パターン適合手段
５      最良適合パターン選出手段
６      最良適合パターン格納手段
７      不適合最小化手段
８      ＣＰＵ
９      プログラム格納手段
【図１】
2007226394.tif 000003
【図２】
2007226394.tif 000004
【図３】
2007226394.tif 000005
【図４】
2007226394.tif 000006
【図５】
2007226394.tif 000007
【図６】
2007226394.tif 000008
【図７】
2007226394.tif 000009
【図８】
2007226394.tif 000010
【図９】
2007226394.tif 000011
【図１０】
2007226394.tif 000012