(57)【要約】【課題】ソフトウェアシステムに必要なプログラムコードの一部の生成を自動化することにより、ソフトウェアシステムの作成をプログラミングすることを容易にする。【解決手段】スケルトンコードジェネレータ１３０は、設計ルール１２０を用いてソフトウェア設計仕様１１０をスキャンし、完成したソフトウェアシステムに提供されるべき要素を取得して、プログラムグラムファイル１４０を生成する。プログラムファイル１４０は、ソフトウェアシステムに対して指定された機能またはタスクを実行するために後で実行可能なコードを含む。一実施形態では、スケルトンコードジェネレータ１３０は、プログラムファイルの作成、プログラムファイル内のヘッダの作成、ソフトウェア設計仕様１１０で要求されるコメントの複製、並びにソフトウェア設計仕様１１０により要求される関数及びクラス属性の宣言を自動化する。【選択図】図１
2005158030.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによりプログラムコードを自動生成する方法であって、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
ソフトウェアクラスの定義に対応する前記ソフトウェア設計仕様のセクションを識別するステップと、
前記ソフトウェアクラスの定義に基づいて少なくとも第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成するステップであって、該第１プログラムファイルのスケルトンコードは前記ソフトウェアクラスの１つまたは複数の関数を宣言するコードに対応し、該第２プログラムファイルのスケルトンコードは前記ソフトウェアクラスを実装するコードに対応する、スケルトンコードを生成するステップと、
前記ソフトウェア設計仕様の前記ディレクトリに基づいて、前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成するステップと、
を含むプログラムコード自動生成方法。
【請求項２】
第１ノードに前記第１プログラムファイルおよび前記第２プログラムファイルを配置するステップをさらに含み、該第１ノードは、前記ソフトウェア設計仕様内に、前記ソフトウェアクラスの定義が配置される対応するノードを有する請求項１に記載のプログラムコード自動生成方法。
【請求項３】
前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成することは、該出力ディレクトリの少なくとも一部が前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するようにすることを含む請求項１に記載のプログラムコード自動生成方法。
【請求項４】
前記出力ディレクトリは、前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するが、前記出力ディレクトリのルートノードは前記ソフトウェア設計仕様のディレクトリのルートノードとは異なる請求項３に記載のプログラムコード自動生成方法。
【請求項５】
コンピュータによりプログラムコードを自動生成するためのプログラムを保持したコンピュータ可読媒体であって、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
ソフトウェアクラスの定義に対応する前記ソフトウェア設計仕様のセクションを識別するステップと、
前記ソフトウェアクラスの定義に基づいて少なくとも第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成するステップであって、該第１プログラムファイルのスケルトンコードは前記ソフトウェアクラスの１つまたは複数の関数を宣言するコードに対応し、該第２プログラムファイルのスケルトンコードは前記ソフトウェアクラスを実装するコードに対応する、スケルトンコードを生成するステップと、
前記ソフトウェア設計仕様のディレクトリに基づいて、前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成するステップと、
をコンピュータで実行させるプログラムコード自動生成プログラムを保持したコンピュータ可読媒体。
【請求項６】
第１ノードに前記第１プログラムファイルおよび前記第２プログラムファイルを配置するステップであって、該第１ノードは、前記ソフトウェア設計仕様内に、前記ソフトウェアクラスの定義が配置される対応するノードを有する、該ステップをさらに含むプログラムコード自動生成プログラムを保持した請求項５に記載のコンピュータ可読媒体。
【請求項７】
前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成することは、該出力ディレクトリの少なくとも一部が前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するようにすることを含むプログラムコード自動生成プログラムを保持した請求項５に記載のコンピュータ可読媒体。
【請求項８】
前記出力ディレクトリは、前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するが、前記出力ディレクトリのルートノードは前記ソフトウェア設計仕様のディレクトリのルートノードとは異なるようにするプログラムコード自動生成プログラムを保持した請求項７に記載のコンピュータ可読媒体。
【請求項９】
プログラムコードを自動生成する装置であって、該装置は命令の１つまたは複数のシーケンスを有するメモリ、該命令が実行される１つまたは複数のプロセッサを備え、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
ソフトウェアクラスの定義に対応する前記ソフトウェア設計仕様のセクションを識別するステップと、
前記ソフトウェアクラスの定義に基づいて少なくとも第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成するステップであって、該第１プログラムファイルのスケルトンコードは前記ソフトウェアクラスの１つまたは複数の関数を宣言するコードに対応し、該第２プログラムファイルのスケルトンコードは前記ソフトウェアクラスを実装するコードに対応する、スケルトンコードを生成するステップと、
前記ソフトウェア設計仕様の前記ディレクトリに基づいて、前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成するステップと、
を実行させるプログラムコード自動生成装置。
【請求項１０】
第１ノードに前記第１プログラムファイルおよび前記第２プログラムファイルを配置するステップであって、該第１ノードは、前記ソフトウェア設計仕様内に、前記ソフトウェアクラスの定義が配置される対応するノードを有する、該ステップをさらに実行させる請求項９に記載のプログラムコード自動生成装置。
【請求項１１】
前記第１プログラムファイルおよび前記第２プログラムファイルを配置するための出力ディレクトリを作成することは、該出力ディレクトリの少なくとも一部が前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するようにすることを含む請求項９に記載のプログラムコード自動生成装置。
【請求項１２】
前記出力ディレクトリは、前記ソフトウェア設計仕様のディレクトリの一部に実質的に類似するノード構造を有するが、前記出力ディレクトリのルートノードは前記ソフトウェア設計仕様のディレクトリのルートノードとは異なるようにする請求項１１に記載のプログラムコード自動生成装置。
【請求項１３】
コンピュータによりプログラムコードを自動生成する方法であって、
ソフトウェアシステムがどのように設計されるべきかを指定するソフトウェア設計仕様を検査するステップと、
前記ソフトウェア設計仕様を検査することから前記ソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記指定された特性に基づいて、前記ソフトウェアシステムの少なくとも一部を実装するプログラムコードを自動生成するステップと、
を含むプログラムコード自動生成方法。
【請求項１４】
プログラムコードを生成することは、プログラムファイルを作成することおよび該プログラムファイルのスケルトンコードを生成することを含む請求項１３に記載のプログラムコード自動生成方法。
【請求項１５】
前記ソフトウェア設計仕様を検査するステップは、ドキュメントのディレクトリを検査することを含む請求項１３に記載のプログラムコード自動生成方法。
【請求項１６】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスの少なくとも一部を定義する前記ソフトウェア設計仕様のセクションを識別することを含む請求項１３に記載のプログラムコード自動生成方法。
【請求項１７】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第１セットを含む第１ファイルを生成することであって、該プログラムコードは、該第１ファイルがコンパイルされた後に、該ソフトウェアクラスの１つまたは複数の関数を宣言するために使用される、第１ファイルを生成することを含む請求項１６に記載のプログラムコード自動生成方法。
【請求項１８】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第２セットを含む第２ファイルを生成することであって、該プログラムコードは、該コードの第２セットがコンパイルされた後に、該ソフトウェアクラスを実装するために使用される、第２ファイルを生成することを含む請求項１７に記載のプログラムコード自動生成方法。
【請求項１９】
第２ファイルを生成することは、前記ソフトウェアクラスによって使用されるべき関数のリストに対応するプログラムコードを生成することを含む請求項１８に記載のプログラムコード自動生成方法。
【請求項２０】
１つまたは複数の関数のリストに対応するプログラムコードを生成することは、前記ソフトウェアクラスを定義する前記ソフトウェア設計仕様の一部から該関数のリストを識別することを含む請求項１９に記載のプログラムコード自動生成方法。
【請求項２１】
前記関数のリストを識別することは、前記ソフトウェア設計仕様の前記一部から１つまたは複数の文字を識別することを含み、該１つまたは複数の文字は前記ソフトウェアクラスの関数に対応するとして指定される請求項２０に記載のプログラムコード自動生成方法。
【請求項２２】
第１ファイルを生成することは、前記ソフトウェアクラスによって使用されるべきクラス属性のセットに対応するプログラムコードを生成することを含む請求項１７に記載のプログラムコード自動生成方法。
【請求項２３】
前記ソフトウェア設計仕様を検査するステップは、コードを含むファイルのコメントである該ソフトウェア設計仕様の１つまたは複数のセクションを識別することを含み、前記第１ファイルを生成するステップおよび前記第２ファイルを生成するステップは、該第１ファイルまたは該第２ファイルの少なくとも一方に、該コメントである前記ソフトウェア設計仕様の該セクションの少なくともいくつかをコピーすることを含む請求項１８に記載のプログラムコード自動生成方法。
【請求項２４】
プログラムファイルのコメントである前記ソフトウェア設計仕様の１つまたは複数のセクションを識別する前記ステップは、該ソフトウェア設計仕様のドキュメント内の該コメントを区切る該ソフトウェア設計仕様内の文字を識別することを含む請求項２３に記載のプログラムコード自動生成方法。
【請求項２５】
前記プログラムコードを生成するステップは、プログラムコードを含む少なくとも１つのファイルのヘッダを生成することを含む請求項１３に記載のプログラムコード自動生成する方法。
【請求項２６】
前記ソフトウェア設計仕様を検査するステップは、該ソフトウェア設計仕様を形成する１つまたは複数のドキュメントを検査することを含み、該１つまたは複数のドキュメントは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つまたは複数として書式化される請求項１３に記載のプログラムコード自動生成方法。
【請求項２７】
前記ソフトウェア設計仕様を検査するステップは、該ソフトウェア設計仕様を形成する複数のドキュメントを含むディレクトリを検査することを含む請求項１３に記載のプログラムコード自動生成方法。
【請求項２８】
前記ソフトウェア設計仕様を検査するステップは、前記ディレクトリのノード構造を識別することを含む請求項２７に記載のプログラムコード自動生成方法。
【請求項２９】
前記ソフトウェア設計仕様を形成する前記ディレクトリの前記ノード構造に基づいて出力ディレクトリを作成するステップと、
前記出力ディレクトリ内の個別のノードにプログラムコードを含む複数のファイルを分配するステップと、
をさらに含む請求項２８に記載のプログラムコード自動生成方法。
【請求項３０】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスを定義する該ソフトウェア設計仕様のセクションを識別することを含み、コードを含むファイルを個別のノードに分配する前記ステップは、それぞれの識別されたソフトウェアクラスのコードを含む少なくとも１つのファイルを前記出力ディレクトリのノードに分配することを含み、前記出力ディレクトリの該ノードは、該ソフトウェアクラスを含むドキュメントが前記ソフトウェア設計仕様を形成する前記ディレクトリ内で指定されているノードに基づく請求項２９に記載のプログラムコード自動生成方法。
【請求項３１】
プログラムコードを生成する前記ステップは、前記ソフトウェアシステムの一部となるべき特定の構文に前記指定された特性の１つまたは複数をマッピングすることを含む請求項１３に記載のプログラムコード自動生成方法。
【請求項３２】
コンピュータによりプログラムコードを自動生成するためのプログラムを保持したコンピュータ可読媒体であって、
ソフトウェアシステムがどのように設計されるべきかを指定するソフトウェア設計仕様を検査するステップと、
前記ソフトウェア設計仕様を検査することから前記ソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記指定された特性に基づいて、前記ソフトウェアシステムの少なくとも一部を実装するプログラムコードを自動生成するステップと、
をコンピュータで実行させるプログラムコード自動生成プログラムを保持したコンピュータ可読媒体。
【請求項３３】
プログラムコードを生成することは、プログラムファイルを作成することおよび該プログラムファイルのスケルトンコードを生成することを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項３４】
前記ソフトウェア設計仕様を検査するステップは、ドキュメントのディレクトリを検査することを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項３５】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスの少なくとも一部を定義する該ソフトウェア設計仕様のセクションを識別することを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項３６】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第１セットを含む第１ファイルを生成することであって、該プログラムコードは、該第１ファイルがコンパイルされた後に、該ソフトウェアクラスの１つまたは複数の関数を宣言するために使用される、第１ファイルを生成することを含むプログラムコード自動生成プログラムを保持した請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第２セットを含む第２ファイルを生成することであって、該プログラムコードは、該コードの第２セットがコンパイルされた後に、該ソフトウェアクラスを実装するために使用される、第２ファイルを生成することを含むプログラムコード自動生成プログラムを保持した請求項３６に記載のコンピュータ可読媒体。
【請求項３８】
第２ファイルを生成することは、前記ソフトウェアクラスによって使用されるべき関数のリストに対応するプログラムコードを生成することを含むプログラムコード自動生成プログラムを保持した請求項３７に記載のコンピュータ可読媒体。
【請求項３９】
１つまたは複数の関数のリストに対応するプログラムコードを生成することは、前記ソフトウェアクラスを定義する前記ソフトウェア設計仕様の一部から該関数のリストを識別することを含むプログラムコード自動生成プログラムを保持した請求項３８に記載のコンピュータ可読媒体。
【請求項４０】
前記関数のリストを識別することは、前記ソフトウェア設計仕様の前記一部から１つまたは複数の文字を識別することを含み、該１つまたは複数の文字は前記ソフトウェアクラスの関数に対応するとして指定されるプログラムコード自動生成プログラムを保持した請求項３９に記載のコンピュータ可読媒体。
【請求項４１】
第１ファイルを生成することは、前記ソフトウェアクラスによって使用されるべきクラス属性のセットに対応するプログラムコードを生成することを含むプログラムコード自動生成プログラムを保持した請求項３６に記載のコンピュータ可読媒体。
【請求項４２】
前記ソフトウェア設計仕様を検査するステップは、コードを含むファイルのコメントである前記ソフトウェア設計仕様の１つまたは複数のセクションを識別することを含み、前記第１ファイルを生成するステップおよび前記第２ファイルを生成するステップは、該第１ファイルまたは該第２ファイルの少なくとも一方に、該コメントである前記ソフトウェア設計仕様の該セクションの少なくともいくつかをコピーすることを含むプログラムコード自動生成プログラムを保持した請求項３７に記載のコンピュータ可読媒体。
【請求項４３】
プログラムファイルのコメントである前記ソフトウェア設計仕様の１つまたは複数のセクションを識別する前記ステップは、該ソフトウェア設計仕様のドキュメント内の該コメントを区切る該ソフトウェア設計仕様内の文字を識別することを含むプログラムコード自動生成プログラムを保持した請求項４２に記載のコンピュータ可読媒体。
【請求項４４】
前記プログラムコードを生成するステップは、プログラムコードを含む少なくとも１つのファイルのヘッダを生成することを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項４５】
前記ソフトウェア設計仕様を検査するステップは、該ソフトウェア設計仕様を形成する１つまたは複数のドキュメントを検査することを含み、該１つまたは複数のドキュメントは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つまたは複数として書式化されるプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項４６】
前記ソフトウェア設計仕様を検査するステップは、前記ソフトウェア設計仕様を形成する複数のドキュメントを含むディレクトリを検査することを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項４７】
前記ソフトウェア設計仕様を検査するステップは、前記ディレクトリのノード構造を識別することを含むプログラムコード自動生成プログラムを保持した請求項４６に記載のコンピュータ可読媒体。
【請求項４８】
前記ソフトウェア設計仕様を形成する前記ディレクトリの前記ノード構造に基づいて出力ディレクトリを作成するステップと、
プログラムコードを含む複数のファイルを前記出力ディレクトリ内の個別のノードに分配するステップと、
をさらに含むプログラムコード自動生成プログラムを保持した請求項４７に記載のコンピュータ可読媒体。
【請求項４９】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスを定義する該ソフトウェア設計仕様のセクションを識別することを含み、コードを含むファイルを個別のノードに分配する前記ステップは、それぞれの識別されたソフトウェアクラスのコードを含む少なくとも１つのファイルを前記出力ディレクトリのノードに分配することを含み、該出力ディレクトリの該ノードは、該ソフトウェアクラスを含むドキュメントが前記ソフトウェア設計仕様を形成する前記ディレクトリ内で指定されているノードに基づくプログラムコード自動生成プログラムを保持した請求項４８に記載のコンピュータ可読媒体。
【請求項５０】
プログラムコードを生成する前記ステップは、前記ソフトウェアシステムの一部となるべき特定の構文に前記指定された特性の１つまたは複数をマッピングすることを含むプログラムコード自動生成プログラムを保持した請求項３２に記載のコンピュータ可読媒体。
【請求項５１】
プログラムコードを自動生成する装置であって、該装置は命令の１つまたは複数のシーケンスを有するメモリ、該命令が実行される１つまたは複数のプロセッサを備え、
ソフトウェアシステムがどのように設計されるべきかを指定するソフトウェア設計仕様を検査するステップと、
前記ソフトウェア設計仕様を検査することから前記ソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記指定された特性に基づいて、前記ソフトウェアシステムの少なくとも一部を実装するプログラムコードを自動生成するステップと、
を実行させる、プログラムコード自動生成装置。
【請求項５２】
プログラムコードを生成することは、プログラムファイルを作成することおよび該プログラムファイルのスケルトンコードを生成することを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項５３】
前記ソフトウェア設計仕様を検査するステップは、ドキュメントのディレクトリを検査することを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項５４】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスの少なくとも一部を定義する該ソフトウェア設計仕様のセクションを識別することを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項５５】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第１セットを含む第１ファイルを生成することであって、該プログラムコードは、該第１ファイルがコンパイルされた後に、該ソフトウェアクラスの１つまたは複数の関数を宣言するために使用される、第１ファイルを生成することを含む請求項５４に記載のプログラムコード自動生成装置。
【請求項５６】
プログラムコードを生成することは、前記ソフトウェアクラスに対して、プログラムコードの第２セットを含む第２ファイルを生成することであって、該プログラムコードは、該コードの第２セットがコンパイルされた後に、該ソフトウェアクラスを実装するために使用される、第２ファイルを生成することを含む請求項５５に記載のプログラムコード自動生成装置。
【請求項５７】
第２ファイルを生成することは、前記ソフトウェアクラスによって使用されるべき関数のリストに対応するプログラムコードを生成することを含む請求項５６に記載のプログラムコード自動生成装置。
【請求項５８】
１つまたは複数の関数のリストに対応するプログラムコードを生成することは、前記ソフトウェアクラスを定義する前記ソフトウェア設計仕様の一部から該関数のリストを識別することを含む請求項５７に記載のプログラムコード自動生成装置。
【請求項５９】
前記関数のリストを識別することは、前記ソフトウェア設計仕様の前記一部から１つまたは複数の文字を識別することを含み、該１つまたは複数の文字は前記ソフトウェアクラスの関数に対応するとして指定される、請求項５８に記載のプログラムコード自動生成装置。
【請求項６０】
第１ファイルを生成することは、前記ソフトウェアクラスによって使用されるべきクラス属性のセットに対応するプログラムコードを生成することを含む請求項５５に記載のプログラムコード自動生成装置。
【請求項６１】
前記ソフトウェア設計仕様を検査するステップは、コードを含むファイルのコメントである該ソフトウェア設計仕様の１つまたは複数のセクションを識別することを含み、前記第１ファイルを生成するステップおよび前記第２ファイルを生成するステップは、該第１ファイルまたは該第２ファイルの少なくとも一方に、該コメントである該ソフトウェア設計仕様の該セクションの少なくともいくつかをコピーすることを含む請求項５６に記載のプログラムコード自動生成る装置。
【請求項６２】
プログラムファイルのコメントである前記ソフトウェア設計仕様の１つまたは複数のセクションを識別する前記ステップは、該ソフトウェア設計仕様のドキュメント内の該コメントを区切る該ソフトウェア設計仕様内の文字を識別することを含む請求項６１に記載のプログラムコード自動生成装置。
【請求項６３】
前記プログラムコードを生成するステップは、プログラムコードを含む少なくとも１つのファイルのヘッダを生成することを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項６４】
前記ソフトウェア設計仕様を検査するステップは、該ソフトウェア設計仕様を形成する１つまたは複数のドキュメントを検査することを含み、該１つまたは複数のドキュメントは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つまたは複数として書式化される請求項５１に記載のプログラムコード自動生成装置。
【請求項６５】
前記ソフトウェア設計仕様を検査するステップは、該ソフトウェア設計仕様を形成する複数のドキュメントを含むディレクトリを検査することを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項６６】
前記ソフトウェア設計仕様を検査するステップは、前記ディレクトリのノード構造を識別することを含む請求項６５に記載のプログラムコード自動生成装置。
【請求項６７】
前記ソフトウェア設計仕様を形成する前記ディレクトリの前記ノード構造に基づいて出力ディレクトリを作成するステップと、
プログラムコードを含む複数のファイルを前記出力ディレクトリ内の個別のノードに分配するステップと、
をさらに実行させる請求項６６に記載のプログラムコード自動生成装置。
【請求項６８】
前記ソフトウェア設計仕様を検査するステップは、ソフトウェアクラスを定義する前記ソフトウェア設計仕様のセクションを識別することを含み、コードを含むファイルを個別のノードに分配する前記ステップは、それぞれの識別されたソフトウェアクラスのコードを含む少なくとも１つのファイルを前記出力ディレクトリのノードに分配することを含み、該出力ディレクトリの該ノードは、該ソフトウェアクラスを含むドキュメントが前記ソフトウェア設計仕様を形成する前記ディレクトリ内で指定されているノードに基づく請求項６７に記載のプログラムコード自動生成装置。
【請求項６９】
プログラムコードを生成する前記ステップは、前記ソフトウェアシステムの一部となるべき特定の構文に前記指定された特性の１つまたは複数をマッピングすることを含む請求項５１に記載のプログラムコード自動生成装置。
【請求項７０】
コンピュータによりコードを自動生成する方法であって、
１つまたは複数の電子ドキュメントを含むソフトウェア設計仕様をスキャンするステップと、
前記ソフトウェア設計仕様の内容に基づいて少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
を含むコード自動生成方法。
【請求項７１】
前記ソフトウェア設計仕様内で１つまたは複数の指定された特性を検出するステップをさらに含み、前記スケルトンコードを生成するステップは、該１つまたは複数の指定された特性を検出したことに基づいて、前記第１プログラムファイルに対する構文を作成することを含む請求項７０に記載のコード自動生成方法。
【請求項７２】
ソフトウェア設計仕様をスキャンすることは、複数の電子ドキュメントを含むディレクトリをスキャンすることを含む請求項７０に記載のコード自動生成方法。
【請求項７３】
ソフトウェア設計仕様をスキャンすることは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つを用いて書式化された複数のドキュメントをスキャンすることを含む請求項７０に記載のコード自動生成方法。
【請求項７４】
ソフトウェア設計仕様をスキャンすることは、マークアップ言語で書式化されたドキュメントをスキャンすること、および前記スケルトンコードを生成するために該ドキュメントに提供される１つまたは複数のタグを検出することを含む請求項７０に記載のコード自動生成方法。
【請求項７５】
ソフトウェア設計仕様をスキャンすることは、該ソフトウェア設計仕様内の１つまたは複数の指定されたタイプのデータを無視することを含む請求項７０に記載のコード自動生成方法。
【請求項７６】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様の前記１つまたは複数のドキュメントに含まれるデータを用いて前記第１プログラムファイルのヘッダを生成することを含む請求項７０に記載のコード自動生成方法。
【請求項７７】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェアクラスを定義するコードを表現する構文を生成することを含む請求項７０に記載のコード自動生成方法。
【請求項７８】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェア構造体を定義するコードを表現する構文を生成することを含む請求項７０に記載のコード自動生成方法。
【請求項７９】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で識別されるソフトウェアクラスの関数を定義するコードを表現する構文を生成することを含む請求項７０に記載のコード自動生成方法。
【請求項８０】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記関数の値を返すことを含む請求項７９に記載のコード自動生成方法。
【請求項８１】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の電子ドキュメントに含まれるデータを用いて該第１プログラムファイルのコメントのセクションを生成することを含む請求項７０に記載のコード自動生成方法。
【請求項８２】
前記第１プログラムファイルのコメントのセクションを生成することは、前記ソフトウェア設計仕様からコメントのセクションを複製することを含む請求項８１に記載のコード自動生成方法。
【請求項８３】
前記第１プログラムファイルを生成するために使用される前記ソフトウェア設計仕様のセクションに基づいて少なくとも第２プログラムファイルのスケルトンコードを生成するステップをさらに含む請求項７０に記載のコード自動生成方法。
【請求項８４】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、該第１プログラムファイルによって実装されるソフトウェアクラスに提供されるべき指定された特性を検出した後に該第１プログラムファイルを作成することを含む請求項７０に記載のコード自動生成方法。
【請求項８５】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、該第１プログラムファイルを作成した後に該第１プログラムファイルにコードを表現する構文を挿入することを含む請求項８４に記載のコード自動生成方法。
【請求項８６】
出力ディレクトリを作成し、該出力ディレクトリに前記第１プログラムファイルを配置する、コンピュータにより実施されるステップをさらに含む請求項８４に記載のコード自動生成方法。
【請求項８７】
前記出力ディレクトリに前記第１プログラムファイルを配置するステップは、前記ソフトウェア設計仕様の対応する部分が配置されるノードに対応するノードに該第１プログラムファイルを配置することを含む請求項８６に記載のコード自動生成方法。
【請求項８８】
コンピュータによりコードを自動生成するためのプログラムを保持したコンピュータ可読媒体であって、
１つまたは複数の電子ドキュメントを含むソフトウェア設計仕様をスキャンするステップと、
前記ソフトウェア設計仕様の内容に基づいて少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
をコンピュータに実行させるコード自動生成プログラムを保持したコンピュータ可読媒体。
【請求項８９】
前記ソフトウェア設計仕様内で１つまたは複数の指定された特性を検出するステップをさらに含み、前記スケルトンコードを生成するステップは、該１つまたは複数の指定された特性を検出したことに基づいて、前記第１プログラムファイルに対する構文を作成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９０】
ソフトウェア設計仕様をスキャンすることは、複数の電子ドキュメントを含むディレクトリをスキャンすることを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９１】
ソフトウェア設計仕様をスキャンすることは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つを用いて書式化された複数のドキュメントをスキャンすることを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９２】
ソフトウェア設計仕様をスキャンすることは、マークアップ言語で書式化されたドキュメントをスキャンすること、および前記スケルトンコードを生成するために該ドキュメントに提供される１つまたは複数のタグを検出することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９３】
ソフトウェア設計仕様をスキャンすることは、前記ソフトウェア設計仕様内の１つまたは複数の指定されたタイプのデータを無視することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９４】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様の前記１つまたは複数のドキュメントに含まれるデータを用いて該第１プログラムファイルのヘッダを生成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９５】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェアクラスを定義するコードを表現する構文を生成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９６】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェア構造体を定義するコードを表現する構文を生成することを含むコード自動生成プログラムを保持した請求項８８記載のコンピュータ可読媒体。
【請求項９７】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で識別されるソフトウェアクラスの関数を定義するコードを表現する構文を生成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項９８】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記関数の値を返すことを含むコード自動生成プログラムを保持した請求項９７に記載のコンピュータ可読媒体。
【請求項９９】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の電子ドキュメントに含まれるデータを用いて該第１プログラムファイルのコメントのセクションを生成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項１００】
前記第１プログラムファイルのコメントのセクションを生成することは、前記ソフトウェア設計仕様からコメントのセクションを複製することを含むコード自動生成プログラムを保持した請求項９９に記載のコードを自動生成するためのコンピュータ可読媒体。
【請求項１０１】
前記１つまたは複数のプロセッサにより実行される時に、該１つまたは複数のプロセッサに、前記第１プログラムファイルを生成するために使用される前記ソフトウェア設計仕様のセクションに基づいて少なくとも第２プログラムファイルのスケルトンコードを生成するステップを実行させる１つまたは複数の追加的命令をさらに含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項１０２】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、該第１プログラムファイルによって実装されるソフトウェアクラスに提供されるべき指定された特性を検出した後に、該第１プログラムファイルを作成することを含むコード自動生成プログラムを保持した請求項８８に記載のコンピュータ可読媒体。
【請求項１０３】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記第１プログラムファイルを作成した後に、コードを表現する構文を前記第１プログラムファイルに挿入することを含むコード自動生成プログラムを保持した請求項１０２に記載のコンピュータ可読媒体。
【請求項１０４】
出力ディレクトリを作成し、該出力ディレクトリに前記第１プログラムファイルを配置するステップをさらに含むコード自動生成プログラムを保持した請求項１０２に記載のコンピュータ可読媒体。
【請求項１０５】
前記出力ディレクトリに前記第１プログラムファイルを配置するステップは、前記ソフトウェア設計仕様の対応する部分が配置されるノードに対応するノードに該第１プログラムファイルを配置することを含むコード自動生成プログラムを保持した請求項１０４に記載のコンピュータ可読媒体。
【請求項１０６】
コードを自動生成する装置であって、該装置は命令の１つまたは複数のシーケンスを有するメモリ、該命令が実行される１つまたは複数のプロセッサを備え、
１つまたは複数の電子ドキュメントを含むソフトウェア設計仕様をスキャンするステップと、
前記ソフトウェア設計仕様の内容に基づいて少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
を実行させるコード自動生成装置。
【請求項１０７】
前記ソフトウェア設計仕様内で１つまたは複数の指定された特性を検出するステップをさらに実行させ、前記スケルトンコードを生成するステップは、前記１つまたは複数の指定された特性を検出したことに基づいて、前記第１プログラムファイルに対する構文を作成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１０８】
ソフトウェア設計仕様をスキャンすることは、複数の電子ドキュメントを含むディレクトリをスキャンすることを含む請求項１０６に記載のコード自動生成装置。
【請求項１０９】
ソフトウェア設計仕様をスキャンすることは、hypertext  transfer  markup  language（ＨＴＭＬ）、extensible  markup  language（ＸＭＬ）、またはテキストファイルの１つを用いて書式化された複数のドキュメントをスキャンすることを含む請求項１０６に記載のコード自動生成装置。
【請求項１１０】
ソフトウェア設計仕様をスキャンすることは、マークアップ言語で書式化されたドキュメントをスキャンすること、および前記スケルトンコードを生成するために、該ドキュメントに提供される１つまたは複数のタグを検出することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１１】
ソフトウェア設計仕様をスキャンすることは、前記ソフトウェア設計仕様内の１つまたは複数の指定されたタイプのデータを無視することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１２】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様の前記１つまたは複数のドキュメントに含まれるデータを用いて該第１プログラムファイルのヘッダを生成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１３】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェアクラスを定義するコードを表現する構文を生成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１４】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で指定されるソフトウェア構造体を定義するコードを表現する構文を生成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１５】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記ソフトウェア設計仕様で識別されるソフトウェアクラスの関数を定義するコードを表現する構文を生成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１６】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記関数の値を返すことを含む請求項１１５に記載のコード自動生成装置。
【請求項１１７】
前記少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の電子ドキュメントに含まれるデータを用いて前記第１プログラムファイルのコメントのセクションを生成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１１８】
前記第１プログラムファイルのコメントのセクションを生成することは、前記ソフトウェア設計仕様からコメントのセクションを複製することを含む請求項１１７に記載のコード自動生成装置。
【請求項１１９】
前記第１プログラムファイルを生成するために使用される前記ソフトウェア設計仕様のセクションに基づいて少なくとも第２プログラムファイルのスケルトンコードを生成するステップをさらに実行させる請求項１０６に記載のコード自動生成装置。
【請求項１２０】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記第１プログラムファイルによって実装されるソフトウェアクラスに提供されるべき指定された特性を検出した後に前記第１プログラムファイルを作成することを含む請求項１０６に記載のコード自動生成装置。
【請求項１２１】
少なくとも第１プログラムファイルのスケルトンコードを生成することは、該第１プログラムファイルを作成した後に、該第１プログラムファイルにコードを表現する構文を挿入することを含む請求項１２０に記載のコード自動生成装置。
【請求項１２２】
出力ディレクトリを作成し、該出力ディレクトリに前記第１プログラムファイルを配置するステップをさらに実行させる請求項１２０に記載のコード自動生成装置。
【請求項１２３】
前記出力ディレクトリに前記第１プログラムファイルを配置するステップは、前記ソフトウェア設計仕様の対応する部分が配置されるノードに対応するノードに該第１プログラムファイルを配置することを含む請求項１２２に記載のコード自動生成装置。
【請求項１２４】
コンピュータによりコードを自動生成する方法であって、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
前記ソフトウェア設計仕様をスキャンすることからソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記ソフトウェア設計仕様の前記ディレクトリに少なくとも部分的に基づく出力ディレクトリを生成するステップと、
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
前記出力ディレクトリの対応する部分に基づいて前記出力ディレクトリのノードに前記第１プログラムファイルを配置するステップと、
を含むコード自動生成方法。
【請求項１２５】
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の指定された特性から該第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成することを含む請求項１２４に記載のコード自動生成方法。
【請求項１２６】
前記第１プログラムファイルを有する前記出力ディレクトリのノードに前記第２プログラムファイルを配置することをさらに含む請求項１２５に記載のコード自動生成方法。
【請求項１２７】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアシステムのソフトウェアクラスを定義する１つまたは複数の指定された特性を検出することを含む請求項１２５に記載のコード自動生成方法。
【請求項１２８】
前記第１プログラムファイルは前記ソフトウェアクラスの宣言ファイルに対応し、前記第２プログラムファイルは前記ソフトウェアクラスの実装ファイルに対応する請求項１２７に記載のコード自動生成方法。
【請求項１２９】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの特性に対応するタグまたは文字の少なくとも１つを検出することを含む請求項１２４に記載のコード自動生成方法。
【請求項１３０】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの関数、クラス属性、およびコメントの少なくとも１つを区切るタグまたは文字の少なくとも１つを検出することを含む請求項１２４に記載のコード自動生成方法。
【請求項１３１】
出力ディレクトリを生成することは、前記ソフトウェア設計仕様のノード構造の実質的部分を複製することを含む請求項１２４に記載のコード自動生成方法。
【請求項１３２】
コンピュータによりコードを自動生成するためのプログラムを保持したコンピュータ可読媒体であって、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
前記ソフトウェア設計仕様をスキャンすることからソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記ソフトウェア設計仕様の前記ディレクトリに少なくとも部分的に基づく出力ディレクトリを生成するステップと、
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
前記出力ディレクトリの対応する部分に基づいて前記出力ディレクトリのノードに前記第１プログラムファイルを配置するステップと、
をコンピュータに実行させるコード自動生成プログラムを保持したコンピュータ可読媒体。
【請求項１３３】
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の指定された特性から該第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成することを含むコード自動生成プログラムを保持した請求項１３２に記載のコンピュータ可読媒体。
【請求項１３４】
前記第１プログラムファイルを有する前記出力ディレクトリのノードに前記第２プログラムファイルを配置するステップをさらに含むコード自動生成プログラムを保持した請求項１３３に記載のコンピュータ可読媒体。
【請求項１３５】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアシステムのソフトウェアクラスを定義する１つまたは複数の指定された特性を検出することを含むコード自動生成プログラムを保持した請求項１３３に記載のコンピュータ可読媒体。
【請求項１３６】
前記第１プログラムファイルは前記ソフトウェアクラスの宣言ファイルに対応し、前記第２プログラムファイルは前記ソフトウェアクラスの実装ファイルに対応するコード自動生成プログラムを保持した請求項１３５に記載のコンピュータ可読媒体。
【請求項１３７】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの特性に対応するタグまたは文字の少なくとも１つを検出することを含むコード自動生成プログラムを保持した請求項１３２に記載のコンピュータ可読媒体。
【請求項１３８】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの関数、クラス属性、およびコメントの少なくとも１つを区切るタグまたは文字の少なくとも１つを検出することを含むコード自動生成プログラムを保持した請求項１３２に記載のコンピュータ可読媒体。
【請求項１３９】
出力ディレクトリを生成することは、前記ソフトウェア設計仕様のノード構造の実質的部分を複製することを含むコード自動生成プログラムを保持した請求項１３２に記載のコンピュータ可読媒体。
【請求項１４０】
コードを自動生成する装置であって、該装置は命令の１つまたは複数のシーケンスを有するメモリ、該命令が実行される１つまたは複数のプロセッサを備え、
ソフトウェア設計仕様を形成する複数の電子ドキュメントを含むディレクトリをスキャンするステップと、
前記ソフトウェア設計仕様をスキャンすることからソフトウェアシステムの１つまたは複数の指定された特性を検出するステップと、
前記ソフトウェア設計仕様の前記ディレクトリに少なくとも部分的に基づく出力ディレクトリを生成するステップと、
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成するステップと、
前記出力ディレクトリの対応する部分に基づいて前記出力ディレクトリのノードに前記第１プログラムファイルを配置するステップと、
を実行させるコード自動生成装置。
【請求項１４１】
前記１つまたは複数の指定された特性から少なくとも第１プログラムファイルのスケルトンコードを生成することは、前記１つまたは複数の指定された特性から該第１プログラムファイルおよび第２プログラムファイルのスケルトンコードを生成することを含む請求項１４０に記載のコード自動生成装置。
【請求項１４２】
前記第１プログラムファイルを有する前記出力ディレクトリのノードに前記第２プログラムファイルを配置するステップを実行させる請求項１４１に記載のコード自動生成装置。
【請求項１４３】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、該ソフトウェアシステムのソフトウェアクラスを定義する１つまたは複数の指定された特性を検出することを含む請求項１４１に記載のコード自動生成装置。
【請求項１４４】
前記第１プログラムファイルは前記ソフトウェアクラスの宣言ファイルに対応し、前記第２プログラムファイルは前記ソフトウェアクラスの実装ファイルに対応する請求項１４３に記載のコード自動生成装置。
【請求項１４５】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの特性に対応するタグまたは文字の少なくとも１つを検出することを含む請求項１４０に記載のコード自動生成装置。
【請求項１４６】
前記ソフトウェアシステムの１つまたは複数の指定された特性を検出することは、前記ソフトウェアクラスの関数、クラス属性、およびコメントの少なくとも１つを区切るタグまたは文字の少なくとも１つを検出することを含む請求項１４０に記載のコード自動生成装置。
【請求項１４７】
出力ディレクトリを生成することは、前記ソフトウェア設計仕様のノード構造の実質的部分を複製することを含む請求項１４０に記載のコード自動生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアシステムのための自動コード生成に関する。特に、本発明は、設計仕様に基づいてソフトウェアシステムのコードを自動生成するシステム及び方法、並びにコンピュータ可読媒体に関する。
【０００２】
［関連出願］
本特許出願は、米国特許出願第１０／３１３，１５８号（出願日：２００２年１２月６日、名称：「Software  Development  Environment  with  Design  Specification  Verification  Tool」、発明者：Tetsuro  MotoyamaおよびAvery  Fong）に関連する。この米国特許出願は、米国特許出願第０９／８８１，２５０号（出願日：２００１年６月１３日、名称：「Automated  Management  of  Development  Project  Files  Over  a  Network」、発明者：Tetsuro  Motoyama）の一部継続出願であり、それに基づく優先権を主張する。これらの先行出願の内容全体が参照により本明細書に援用される。
【０００３】
本特許出願は、米国特許出願第１０／０５９，６９４号（出願日：２００２年１月２８日、名称：「Project  Management  Over  A  Network  with  Automated  Task  Schedule  Update」、発明者：Tetsuro  Motoyama）にも関連する。この米国特許出願の内容全体が参照により本明細書に援用される。
【背景技術】
【０００４】
このセクションに記載される手法は、遂行可能な手法であるが、必ずしもこれまでに着想または遂行された手法とは限らない。したがって、特に断らない限り、このセクションに記載されるいずれの手法も、このセクションに含まれているというだけの理由で従来技術とみなすように解釈してはならない。
【０００５】
ソフトウェアシステムの開発はしばしば会社にとって大仕事である。多くの場合、開発者は、ソフトウェアシステムをどのように開発すべきかを指定するドキュメントを作成する。このようなドキュメントとしては、ソフトウェアシステムの要件、実装、実行または使用法に関するアイデアの説明、図、フローチャートその他の表現が挙げられる。仕様は、ソフトウェアシステムの具体的なプログラミングの側面を指定するドキュメントも含み得る。このようなプログラムの側面としては、例えば、ソフトウェアクラスの名前付けおよび定義、関数宣言、ソフトウェアクラス間の関係、プログラムファイル内に置かれる具体的コメントがある。開発者側でこの情報を指定することにより達成される１つの結果として、ソフトウェアシステム全体の相異なる部分の相互関係が改善され得るということがある。
【０００６】
多くの場合、開発者は、特定の種類の情報がソフトウェアシステムの仕様においてどのように提示されるかに関する規約や一連のガイドラインに準拠する。このためプログラマは、ソフトウェアシステムに取り組んでいるすべての開発者およびプログラムに理解される規約に従わざるを得ない。
【０００７】
ガイドラインとともにソフトウェア設計仕様を使用するにもかかわらず、設計仕様に基づいてコードファイルを作成することは面倒で多大な労力がかかることが多い。通常、プログラマは、コードを入力しながら、絶えず設計仕様を手作業で参照する。関数宣言やクラス属性の列記のようなある特定のプログラミング作業では、プログラマは、関数宣言およびクラス属性に対応するコードに対する正しい構文を書くために、仕様とプログラムファイルの間を行ったり来たりしなければならない。プログラマは、設計仕様において提供または指定されていることに従って作成されたプログラムファイルを、構造化しなければならないことも多い。これもまた多大な労力のかかる作業である。というのは、プログラムファイルは、ソフトウェア設計仕様における対応するディレクトリパスに少なくとも部分的に基づく長いディレクトリパスを有することがあるからである。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
以上のことをふまえて、従来の手法の制限を受けない、ソフトウェアコードを開発する手法が強く求められている。
本発明の目的は、ソフトウェアシステムにおけるプログラムコードの少なくとも一部の生成を自動化することによりソフトウェアシステムの作成を容易にする手法を提供することにある。
【課題を解決するための手段】
【０００９】
プログラムコードの生成は、ソフトウェア設計仕様に基づいて自動化することができる。本発明の一態様によれば、ソフトウェアシステムがどのように設計されるべきかを記述する仕様をスキャンする。スキャン中に、仕様のある特定の指定された特性を検出することができる。指定された特性に基づいて、ソフトウェアシステムを実装するプログラムコードの少なくとも一部を自動生成する。
【発明の効果】
【００１０】
本発明によれば、熟練プログラマが設計仕様に基づいてソフトウェアシステムのプログラムコードを開発するのに要する時間を大幅に短縮するとともに、ソフトウェアシステムにおけるエラーを削減することもできる。
【発明を実施するための最良の形態】
【００１１】
ソフトウェアシステムを開発する際のコード生成を自動化する技法について説明する。以下の記載では、説明の目的上、本発明の十分な理解を提供するためにさまざまな具体的詳細が記載される。しかし、明らかなように、本発明は、このような具体的詳細がなくても実施し得る。他の場合には、本発明を不必要に分かりにくくすることを避けるために、既知の構成および装置はブロック図形式で示される。
本発明は、添付図面において、限定としてではなく例として図示される。図中、同一参照符号は同様の要素を指す。
【００１２】
［概観］
本発明の実施形態は、ソフトウェアシステムに必要なプログラムコードの一部の生成を自動化することにより、ソフトウェアシステムの作成を容易にする。プログラムコードの生成は、ソフトウェア設計仕様に基づいて自動化することができる。本明細書に記載されるように、本発明の実施形態は、熟練プログラマが設計仕様に基づいてソフトウェアシステムのプログラムコードを開発するのに要する時間を大幅に短縮することができる。
【００１３】
一実施形態では、ソフトウェアシステムがどのように設計されるべきかを記述する仕様をスキャンする。スキャン中に、仕様のある特定の指定された特性を検出することができる。指定された特性に基づいて、ソフトウェアシステムを実装するプログラムコードの少なくとも一部を自動生成する。
【００１４】
本明細書で提供される実施形態は、プログラマの特定の作業を自動化することができる。このような作業として、設計仕様のソフトウェアクラスおよび構造体のスケルトンコードの生成に関係するものがある。スケルトンコードの生成を自動化することにより、熟練プログラマが必要とする時間が大幅に短縮される。ヒューマンエラーがソフトウェアシステムにおいてバグやコンパイルエラーを引き起こす確率もまた、スケルトンコードの生成を自動化することにより低減される。
【００１５】
［用語］
「コード」という用語は、構文であって、その構文を含むファイルがコンパイルされる時に命令として解釈される構文を意味する。
【００１６】
「スケルトンコード」という用語は、たとえ当該スケルトンコードをコンパイルしても、それ自体では所望のタスクを実行する目的には不完全なコードのセットを意味する。
【００１７】
「ハッシュテーブル」という用語は、キー・値の対を含むデータ構造を指す。
【００１８】
「モジュール」という用語は、規定された機能を実行するためのソフトウェア、ハードウェア、ファームウェア、またはそれらに任意の組合せを意味する。モジュールは、１つのコンポーネントとして提供されても、１つのプロセスに含まれてもよい。別法として、モジュールは、複数のコンポーネントおよび／またはプロセス間に分散されてもよい。
【００１９】
「パッケージ」という用語は、タスクを実行するために協働する１つまたは複数のクラスを含むソフトウェアコンポーネントを意味する。
【００２０】
「クラス」あるいは「ソフトウェアクラス」という用語は、規定された機能を実行するために実行可能なコードのセットを意味する。本発明の目的上、「構造」あるいは「構造体」は、特に断らない限り、ソフトウェアクラスの一種であると仮定する。
【００２１】
［機能的説明］
図１は、本発明の一実施形態による、コードを生成するシステムを示すブロック図である。スケルトンコードジェネレータ１３０が、ソフトウェアシステムの一部として後でコンパイルされ実行されるコードを生成するように構成される。コードは、ファイルにパッケージングされてもよい。一実施形態では、生成されるコードはスケルトンコードである。スケルトンコードを含むファイルは、正しくコンパイルされるため、および／または機能するために、追加的なコードおよび／または編集を必要としてもよい。
【００２２】
図１において、ソフトウェア設計仕様１１０は、ソフトウェアシステムを定義し、プログラマがソフトウェアシステムのプログラムファイルを作成することを可能にする。スケルトンコードジェネレータ１３０に対する入力としては、ソフトウェア設計仕様１１０および設計ルール１２０を挙げることができる。コードジェネレータ１３０の出力としては、１つまたは複数のプログラムファイル１４０を挙げることができる。後述するように、プログラムファイル１４０は、ディレクトリ形式のようなある構造に従って生成および編成されてもよい。一実施形態により作成することが可能な特定の出力ディレクトリについて、図６を参照して後で説明する。
【００２３】
ソフトウェアシステムは、完成後は、全体的設計および編成に基づくモジュールおよびソフトウェアクラスを含み得る。ソフトウェア設計仕様１１０は、モジュールおよびソフトウェアクラスを全体として定義および／または説明するドキュメントの編集物である。特に、ソフトウェア設計仕様１１０は、ソフトウェアシステムを形成するソフトウェアクラスのプログラミングの側面を定義することができる。一実施形態では、ソフトウェア設計仕様１１０は、電子ドキュメントの編集物である。電子ドキュメントは、Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＨＴＭＬ）、ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ（ＸＭＬ）、またはタグまたは他のマーカーを提供する任意の他の書式の形式であってもよい。また、電子ドキュメントは、検出可能な文字を含むテキストファイルであることも可能である。
【００２４】
設計ルール１２０は、ソフトウェアシステムに含まれるべきソフトウェアクラス、そのコンポーネント等を定義する側面についてソフトウェア設計仕様１１０を検査するために、スケルトンコードジェネレータ１３０が使用することが可能なルールのセットを含む。設計ルールのセットは、開発者が提供してもよい。ここで、設計ルール１２０は、少なくとも部分的には、ソフトウェア設計仕様１１０によって定義されることが可能である。例えば、ソフトウェア設計仕様１１０は、ソフトウェア設計仕様１１０が検査または解釈されるべき方法を指定してもよい。また、設計ルール１２０のセットは、スケルトンコードジェネレータ１３０に少なくとも部分的に統合されることも可能である。
【００２５】
スケルトンコードジェネレータ１３０によって生成されるプログラムファイル１４０は、ソフトウェアアーキテクチャのコンポーネントを形成する。プログラムファイル１４０は、ソフトウェアシステムに対して指定された機能またはタスクを実行するために後で実行可能なコードを含み得る。
【００２６】
一実施形態では、スケルトンコードジェネレータ１３０は、設計ルール１２０を用いてソフトウェア設計仕様１１０をスキャンすることにより、完成したソフトウェアシステムに提供されるべき要素の特性を検出する。要素の例としては、限定ではないが、クラス、関数、クラス属性、コメント、およびファイルヘッダがある。ソフトウェア設計仕様１１０をスキャンするために、スケルトンコードジェネレータ１３０は、そのような要素に対応するソフトウェア設計仕様１１０内の特性を検出するように構成される。例えば、スケルトンコードジェネレータ１３０は、ある特定のタグまたは文字をクラス、クラス属性、関数宣言、またはコメントに関連づけるように構成されてもよい。一具体例として、スケルトンコードジェネレータ１３０は、単語の最初に大文字の「Ｃ」を検出し、その文字をソフトウェアクラス仕様の開始と解釈してもよい。もう１つの例として、文字「／」が、コンピュータプログラムに対するコメントの開始または終了を表してもよい。
【００２７】
一実施形態では、スケルトンコードジェネレータ１３０によって生成されるプログラムファイル１４０はスケルトンコードを含む。プログラムファイル１４０のスケルトンコードは、コンパイルし実行することができるが、所望の機能を実行するための追加的コードをプログラマが追加しなければ、所望の機能を実行しない。どの程度詳細にコードが生成されるかは、具体的実施態様に左右される。一実施形態では、スケルトンコードジェネレータ１３０は、プログラムファイルの作成、プログラムファイル内のヘッダの作成、ソフトウェア設計仕様１１０で要求されるコメントの複製、ならびにソフトウェア設計仕様１１０により要求される関数およびクラス属性の宣言を自動化する。さらに、後で詳述する他の実施形態で説明するように、プログラムファイルは、ソフトウェア設計仕様１１０により指定される方法でディレクトリ構造内に置かれてもよい。プログラムファイルが置かれる出力ディレクトリが、スケルトンコードジェネレータ１３０によって生成されてもよい。このようにコーディングされたプログラムファイル１４０を作成することにより、本発明の実施形態は、さもなければスケルトンコードジェネレータ１３０が自動生成するものを手動で作成することになる高度に熟練したプログラマのリソースを節約することができる。
【００２８】
図２は、ソフトウェアシステムの一部を形成するプログラムファイルを手動で生成する詳細な手順を示している。
【００２９】
ステップ２１０で、ソフトウェア設計仕様１１０をスキャンする。一実施形態では、ソフトウェア設計仕様１１０において、設計ルール１２０によって指定される特性をスキャンしてもよい。このような特性の例としては、限定ではないが、ＨＴＭＬドキュメント中のタグ、またはテキストもしくはＨＴＭＬドキュメント中の特定の文字で、クラス属性、関数、関数宣言、およびコメント等の要素の位置を指定するものがある。ソフトウェア設計仕様１１０が、欠陥の検査を受けてから公開された後、コードが開発される。一実施形態では、ソフトウェア設計仕様１１０は、設計仕様の各クラスおよび構造体のコードを生成するのに必要な情報のすべて、または少なくともほとんどを含む。ソフトウェア設計仕様１１０は、ソフトウェア設計仕様１１０に基づいてコードが開発されるワークスペースの作成に関連してスキャンしてもよい。ワークスペースは、使用されるコード開発ツールによって異なる。ＭicrosoftのVisual  Studio．ＮＥＴおよびSunSoftのSun  Workshopは、Ｃ++プログラミング言語のためのコード開発ツールの例である。
【００３０】
ステップ２１４で、ソフトウェア設計仕様１１０において定義されるクラスを識別する。また、ソフトウェア設計仕様１１０が構造体を定義している場合、その構造体も識別する。一実施形態では、ソフトウェアクラスまたは構造体は、ソフトウェア設計仕様１１０で「Ｃ」を含むタグまたは文字を検査することによって検出される。というのは、設計ルール１２０が指定するように、この文字が単語または文字列の最初に現れることはクラスまたは構造体の区切りを表しているからである。
【００３１】
一実施形態によれば、それぞれの検出されたクラスについて、ステップ２１８で、スケルトンコードを含む２つのプログラムファイルを作成する。第１のプログラムファイルは宣言ファイルに対応し、第２のプログラムファイルは実装ファイルに対応する。宣言ファイルは、そのクラスの宣言を含む。実装ファイルは、ソフトウェア設計仕様１１０から識別されたクラスの関数定義を含む。本明細書に記載の実施形態では、宣言ファイルは「．ｈ」という拡張子を有するものとして識別することができ、実装ファイルは「．ｃｐｐ」という拡張子を有するものとして識別することができる。本明細書では、「．ｈファイル」を「ｈファイル」、「．ｃｐｐファイル」を「ｃｐｐファイル」と略称することにする。
【００３２】
ステップ２２２で、スケルトンコードを宣言ファイルに追加する。一実施形態では、このスケルトンコードは、ソフトウェア設計仕様１１０から識別されたクラスについて関数およびクラス属性を宣言するための少なくともいくつかの命令を含む。ファイルヘッダおよび関数ヘッダを作成するために、プログラミング構文を用いてもよい。
【００３３】
ステップ２２６で、スケルトンコードを実装ファイルに追加する。このスケルトンコードは、ファイルが完成した場合に、関数を実行する命令および関数が実行される時に値を返す命令を含んでもよい。各実装ファイルで、各関数のスケルトンコードは、デバッグ目的のステートメント、および関数が値を返す場合には値を返すためのステートメントを含んでもよい。
【００３４】
ステップ２３０で、ソフトウェア設計仕様１１０から識別された各クラスについて作成された宣言ファイルに、適当な指令を追加する。クラスは、他のクラスを使用することが必要な場合がある。他のクラスを使用するクラスは、当該他のクラス（インクルードされるクラス）を「インクルード」する必要がある。クラスが他のクラスをインクルードするには、そのクラスは当該他のクラスへのパス（すなわち、当該他のクラスの宣言ファイルへのパス）を知らなければならない。クラスが使用する他のクラスをインクルードすることを可能にするために、指令を使用することができる。指令は、他のクラスへのパスを指示する。パスは、図６に記載の出力ディレクトリ内の特定のファイルの位置を定義してもよい。インクルードされるクラスは、クラスがそれを使用することができる前に、宣言されなければならない。インクルードされるクラスへのパスを指示するための指令を追加することにより、クラスは、インクルードされるクラスがどのように宣言されるかを知ることになる。したがって、宣言ファイルに指令を追加するためには、ソフトウェア設計仕様１１０のすべてのクラスおよびそれらの宣言ファイルの位置を識別することにより、クラスへのパスが分かるようにする必要がある。インクルードされるクラスを検出する方法は、すべてのクラスを識別する方法と同一でもよい。一実施形態では、クラスの区切りである特定の文字またはタグ（例えば「Ｃ」）を識別する。
【００３５】
ステップ２３４で、それぞれのプログラムファイルにファイルヘッダを追加する。ファイルヘッダは、コードが書かれているファイルおよびクラスを記述する。他の構文と同様、スケルトンコードジェネレータ１３０を用いて、各プログラムファイルに対するヘッダを自動生成することができる。
【００３６】
ステップ２３８で、実装ファイル内の各関数に関数ヘッダを提供する。関数ヘッダは、特定の実装ファイル内での実行時にアルゴリズムまたは関数が実行する記述を記録または参照することができる。
【００３７】
ステップ２４２で、コメント等の非プログラミング構文を宣言ファイルおよび実装ファイルに提供する。一実施形態では、各タイプのプログラミングファイルに追加されるコメントは、複製され、あるいは、後続のプログラムファイルに対するコメントとして指定されるソフトウェア設計仕様１１０のセクションに基づく。ここで、ステップ２４２は、ソフトウェア設計仕様１１０からプログラムファイルへコメントをコピーするためのコピー・アンド・ペースト・オペレーションを含んでもよい。
【００３８】
ステップ２４６で、宣言ファイルおよび実装ファイルに提供されたスケルトンコードをコード開発ツールのワークスペースに追加してから、コンパイルする。コンパイルエラーは、設計仕様における欠陥を指摘している場合がある。その場合、設計仕様における欠陥を訂正し、それに従ってスケルトンコードを再生成する。
【００３９】
スケルトンコードをコンパイルした後、ステップ２５２で、各実装ファイルに追加的コードを手動で追加してもよい。ステップ２５４で、手入力されたコードとともにファイルを再コンパイルする。
【００４０】
図２に記載の方法の各ステップは、スケルトンコードジェネレータ１３０および設計仕様内の情報を用いて自動的に実行することができる。また、記載されたステップはいかなる順序で実行してもよい。というのは、それらのステップは、ワークスペースがコンパイルされる前に１つのファイルに情報を書き込むことを伴うからである。
【００４１】
図２の方法の各ステップを自動化することの利益としては特に、ソフトウェア設計仕様１１０の内容に基づいてコードを開発するのに必要な時間が短縮されることがある。さらに、図１に記載の一実施形態では、スケルトンコードを生成する際のヒューマンエラーがなくなる。
【００４２】
［出力ディレクトリ］
本発明の一実施形態によれば、ソフトウェア設計仕様１１０から生成されるスケルトンコードおよび関連データを構造化するために、出力ディレクトリを作成する。出力ディレクトリの構造は、ソフトウェア設計仕様１１０のディレクトリ構造により指定してもよい。出力ディレクトリの構造がどのようであるべきかをソフトウェア設計仕様１１０が指定してもよく、あるいはソフトウェア設計仕様１１０自体がディレクトリとして構造化されてもよい。このように、ソフトウェア設計仕様ディレクトリは、出力ディレクトリの構造の基礎をなしてもよい。
【００４３】
一適用形態では、ソフトウェア設計仕様ディレクトリは、所望のソフトウェアシステムの種々の側面を記述する電子ドキュメントを含む。ソフトウェア設計仕様１１０は、ディレクトリ内の区分の第１レイヤを形成するモジュールと、ディレクトリ内のモジュールの内部レイヤを形成するクラスとを記述および／または定義してもよい。ここで、ソフトウェア設計仕様１１０は１つのディレクトリに対応し得る。その場合、そのディレクトリのノードはモジュール、サブモジュールおよびクラスに対応する。一実施形態では、スケルトンコードジェネレータ１３０によって作成されるプログラムファイルは、出力ディレクトリへと自動的に構造化される。出力ディレクトリは、ソフトウェア設計仕様１１０のディレクトリ構造に倣ってモデル化されてもよい。したがって、出力ディレクトリは、ソフトウェア設計仕様１１０のディレクトリの対応する構成に類似するノードの構造を含んでもよい。
【００４４】
図３は、本発明の一実施形態による、生成されるプログラムファイルが出力ディレクトリを用いて編成される基本的処理フローを示している。図３および後述の図４について説明する際に、他の図の要素を参照することがある。いかなるこのような参照も、単に説明の目的上なされるに過ぎない。
【００４５】
ステップ３１０で、ソフトウェア設計仕様ディレクトリを１回または複数回スキャンする。ソフトウェア設計仕様ディレクトリのスキャンにより、そのディレクトリ内のノードおよび内部ノードの配置を識別する。図３に記載の方法を実行する場合、スケルトンコードジェネレータ１３０により作成されるプログラムファイルが、ソフトウェア設計仕様ディレクトリを少なくとも部分的に複製した出力ディレクトリとして構造化されることを開発者が望むであろうと仮定している。別法として、出力ディレクトリは、ソフトウェア設計仕様１１０とともに公開されるガイドラインのような他の記述に基づく。
【００４６】
ステップ３２０で、ソフトウェア設計仕様ディレクトリに基づいてスケルトン出力ディレクトリを作成する。スケルトン出力ディレクトリは、ソフトウェア設計仕様ディレクトリ内の対応するノード構造を複製したノード構造を含む。一実施形態では、ソフトウェア設計仕様ディレクトリの「ルートノード」以外のすべての分岐ノードが、出力ディレクトリ内に同じ構造で複製される。出力ディレクトリとソフトウェア設計仕様ディレクトリを独立にアドレス可能とするために、出力ディレクトリには異なるルートノードを用いる。
【００４７】
ステップ３３０で、ソフトウェア設計仕様１１０をスキャンすることにより、ソフトウェア設計仕様１１０に全部または一部が定義された、あるいは記述された、クラスおよび構造体を見つける。ソフトウェア設計仕様ディレクトリをスキャンすればソフトウェア設計仕様ディレクトリのノード構造が見出され識別されるが、ソフトウェア設計仕様１１０をスキャンすれば、ソフトウェア設計仕様１１０のクラスおよび構造が見出され識別されるとともに、ソフトウェア設計仕様ディレクトリのノード構造が見出され識別される。一実施形態では、ソフトウェア設計仕様１１０で言及されている各クラスまたは構造体を識別しようと試みる。このタスクは、構造体およびクラスがソフトウェア設計仕様１１０で言及される場合の規約を認識することにより実行してもよい。規約は、スケルトンコードジェネレータ１３０からアクセス可能な設計ルール１２０で定義してもよい。例えば、スケルトンコードジェネレータ１３０は、設計ルール１２０から指定されるルールを用いて、ソフトウェア設計仕様１１０からクラスおよび構造体を識別してもよい。
【００４８】
このようなクラスおよび構造体が識別された後、一実施形態では、ステップ３４０で、クラスまたは構造体がソフトウェア設計仕様１１０内で見出されたソフトウェア設計仕様ディレクトリ内の分岐ノードに対応する出力ディレクトリの分岐ノード内にプログラムファイルを置く。一実施形態では、それぞれの識別されたクラスまたは構造体について、２つのプログラムファイルを生成し、出力ディレクトリの分岐ノードに置く。それらの２つのプログラムファイルは、宣言ファイルおよび実装ファイルに対応し得る。
【００４９】
図４は、一実施形態による、スケルトンコードを含むプログラムファイルを有する出力ディレクトリを生成するさらに詳細な処理フローを示している。ステップ４１０で、基本的なディレクトリ情報を取得する（例えばステップ４１５〜４２５に記載のように）ために、ソフトウェア設計仕様１１０の１回目のスキャンを行う。
【００５０】
ステップ４１５で、ソフトウェア設計仕様ディレクトリのノード構造の少なくとも一部を複製した出力ディレクトリを作成する。図３に記載のように、一実施形態では、ルートノードを除き、設計仕様ディレクトリ内のすべてのノードを出力ディレクトリ内に複製する。ルートノードは異なる。
【００５１】
ステップ４２０で、ソフトウェア設計仕様１１０の電子ドキュメントまたはファイルを検査して、クラスまたは構造体がどこに指定されているかを判定する。ソフトウェア設計仕様１１０が、ＨＴＭＬのようなタグまたはコーディングを用いて書式化されたドキュメントを含む場合、ある特定のタグまたはコーディングの存在が、特定のクラスまたは構造体の仕様の存在を意味してもよい。
【００５２】
ステップ４２５で、識別されたクラスまたは構造体の位置をハッシュテーブル等のデータ構造に保存する。本発明の実施形態は、第１列がキーに対応し、第２列がそのキーに関連する値に対応するハッシュテーブルを使用する。一実施形態では、それぞれの識別されたクラスまたは構造体がハッシュテーブルに対するキーであり、ソフトウェア設計仕様ディレクトリ内のクラスまたは構造体のディレクトリパスがそのキーに対する値である。このようにして、前のステップで識別されたクラスまたは構造体のディレクトリパスを、特定のクラスの値としてハッシュテーブルに記録する。上記のような一実施形態とともに使用するのに好適なハッシュテーブルは図１５Ａに示される。
【００５３】
ステップ４３０で、プログラムファイルを作成するためのさらに詳細な情報を取得するために、ソフトウェア設計仕様１１０の２回目のスキャンを行う。ソフトウェア設計仕様１１０の２回目のスキャンとともにステップ４３５〜４４５を実行する。２回目のスキャンでは、ステップ４３５で関数宣言を識別する。ステップ４４０で、ソフトウェア設計仕様１１０内のクラス属性を識別する。関数宣言およびクラス属性は、ソフトウェア設計仕様１１０の特定の電子ドキュメント内で、特にソフトウェア設計仕様のうちクラス定義に対応する部分で定義されてもよい。ソフトウェア設計仕様内の関数およびクラス属性の区切りとなる特定のマーカーを設計ルール１２０で定義してもよい。
【００５４】
ステップ４４５で、ソフトウェア設計仕様１１０の２回目のスキャン中に、クラスによって使用されるクラス（インクルードされるクラス）を識別し、インクルードされるクラスのディレクトリをハッシュテーブルに記録する。ソフトウェア設計仕様１１０内の各クラスまたは構造体の仕様は、別のクラスまたは構造体を含んでも参照してもよい。クラスによって参照されるクラスのみが、インクルードされるクラスである。クラス内に含まれているクラスは、ネストされたクラスである。ネストされたクラスは、それがネストされているクラス内にクラスの宣言を含む。クラスまたは構造体の仕様がソフトウェア設計仕様１１０のスキャン時に識別された場合、それが別のクラスまたは構造体内にネストされているかどうかを判定するチェックを行う。例えば、クラス仕様は、別のクラス仕様内の電子ドキュメント上でインデントされているクラス仕様として現れることがある。ここで、インデント（または他のマーカー）は、識別されたクラスが同一電子ドキュメント中で指定される別のクラス内にネストされていることを示すことがある。クラスまたは構造体がソフトウェア設計仕様１１０のスキャン時に識別された場合、それが別のクラスまたは構造内で参照されているかどうかを判定するチェックを行うことにより、それが当該クラスによってインクルードされる必要があるかどうかを調べる。例えば、クラスは、クラス仕様内の電子ドキュメント上のタグまたはコーディングによって識別してもよい。インクルードされるクラスは、１つのクラスに対して識別される必要がある。ステップ４４５で、クラスと、識別されたインクルードされるクラスのディレクトリパスの両方を、ハッシュテーブルに記録する。
【００５５】
ステップ４５０および４５５で、プログラムファイルを生成し、ソフトウェア設計仕様１１０のディレクトリ内に対応するノードを有する出力ディレクトリのノード内に、そのプログラムファイルを置く。ステップ４５０で、関数宣言ファイルを生成し、出力ディレクトリ内に置く。ステップ４５５で、実装ファイルを生成し、出力ディレクトリ内に置く。
【００５６】
図５は、本発明の一実施形態で使用するためのソフトウェア設計仕様ディレクトリの一例５０２を示している。ソフトウェア設計仕様ディレクトリ５０２は、ソフトウェアシステムに対するソフトウェア設計仕様１１０の一部であるファイルを構造化および編成する。ソフトウェア設計仕様１１０は、ソフトウェア設計仕様ディレクトリ５０２に入っているファイルを含む。ソフトウェア設計仕様ディレクトリ５０２は、第１レイヤ５１２のサブディレクトリを含む。それらのサブディレクトリは、全体的なソフトウェアアーキテクチャのパッケージに対応する。第１レイヤ５１２の内部レイヤ５２２は、ソフトウェア設計仕様ディレクトリ５０２内のファイルを含む。それらのファイルは、ソフトウェアアーキテクチャの記述（設計仕様の図を含む）、パッケージ、およびクラスを含んでもよい。ソフトウェア設計仕様ディレクトリ５０２はルートノード５０４（Directory  for  Software  Design  Specification）で識別され、このノードは、その下位のソフトウェア設計仕様１１０全体を含むトップディレクトリである。
【００５７】
ソフトウェア設計仕様ディレクトリ５０２は、パッケージまたはアーキテクチャの名前に対応する名前を有するサブディレクトリを含む。ソフトウェアシステムに対するソフトウェア設計仕様ディレクトリ５０２内のファイルは、記述および図を含む。パッケージに対するソフトウェア設計仕様ディレクトリ５０２内のファイルは、パッケージの記述、パッケージ内のクラスの記述、および／またはパッケージおよびクラスを記述する図を含む。ソフトウェア設計仕様ディレクトリ５０２内で、パッケージに対するディレクトリは他のパッケージに対するディレクトリを含んでもよい。１つのパッケージが、ソフトウェア設計仕様１１０内の複数のパッケージを含むことが可能である。
【００５８】
一実施形態では、ソフトウェア設計仕様１１０は、特定のガイドラインまたは規約に従って構造化されたディレクトリを用いて公開される。このようにして、ソフトウェア設計仕様ディレクトリ５０２の構造により、複数の人が設計仕様の一部を作成して統合している場合に、ソフトウェア設計仕様１１０における整合性および統一性が得られる。
【００５９】
一実施形態では、スケルトンコードジェネレータ１３０が、ソフトウェア設計仕様ディレクトリ５０２の構造に基づいて出力ディレクトリ（図６の６００参照）を作成する。一実施形態では、出力ディレクトリは、ソフトウェア設計仕様ディレクトリ５０２の再現または実質的な類似である。実質的な類似とは、出力ディレクトリ６００のサブディレクトリ全体が、ソフトウェア設計仕様ディレクトリ５０２と同一の分岐ノードを有し得ることを意味する。
【００６０】
図６は、ソフトウェア設計仕様１１０からスケルトンコードジェネレータ１３０により生成されるさまざまなコードセグメントを含む出力ディレクトリ６００の構成を示す図である。コードセグメントは、指定された機能を実行するための追加的コードで補足され得るファイルに含まれるスケルトンコードに対応し得る。出力ディレクトリ６００は、システムのパッケージ、および実際のプログラムファイル（例えば  ．ｈファイルおよび  ．ｃｐｐファイル）に対応するサブディレクトリを含む。ルートノード６１０（Directory  for  Code）は、その下位のシステムのコード全体を含む。ルートノード６１０の下位のディレクトリの名前は、システムのパッケージの名前に対応する。出力ディレクトリ６００において提供されるプログラムファイルは、クラス宣言およびクラスの関数定義を含む。トップディレクトリを除き、出力ディレクトリ６００の編成およびディレクトリ名は、ソフトウェア設計仕様ディレクトリ５０２の再現である。ｈファイルおよびｃｐｐファイル内のコードの編成は特定の書式（またはコード規約もしくはルール）に従う。利点として、特に、このような書式により、複数の人がコードの一部を作成して統合している場合に、コードにおける整合性および統一性が得られる。
【００６１】
上記の本発明の実施形態では、出力ディレクトリ６００がソフトウェア設計仕様ディレクトリ５０２に基づいて構造化されているが、代替的ソースを用いて出力ディレクトリ６００を構造化してもよい。例えば、一実施形態によれば、ソフトウェア設計仕様１１０は出力ディレクトリ６００の構造を指定する電子ドキュメントを含んでもよく、それにより、ソフトウェア設計仕様１１０の実際のディレクトリ構造はいかなるものであっても無関係となる。さらにもう１つの実施形態では、ルールまたは他のガイドラインのセットを用いて、出力ディレクトリ６００を構造化してもよい。
【００６２】
［スケルトンコードジェネレータ］
図７は、本発明の一実施形態による、スケルトンコードを生成するように構成された場合のスケルトンコードジェネレータ１３０の各コンポーネントを示している。スケルトンコードジェネレータ１３０は、ソフトウェア設計仕様ナビゲータ７１０、クラス識別モジュール７２０、ファイル構造ジェネレータ７３０、関数プロセッサ７４０、属性プロセッサ７５０、クラス宣言ファイルジェネレータ７６０、クラススケルトン関数ファイルジェネレータ７７０、およびルールのセット７８０を含むように示されている。全体として、一実施形態では、スケルトンコードジェネレータ１３０のコンポーネントが組み合わされることにより、ソフトウェア設計仕様１１０をスキャンし、システムのスケルトンコードを含むファイルを生成し、出力ディレクトリ６００（図６参照）内のファイルを編成することができる。各コンポーネントは、スケルトンコードジェネレータ１３０の規定されたタスクを実行する。
【００６３】
一実施形態では、ソフトウェア設計仕様ナビゲータ７１０が、ソフトウェア設計仕様１１０内（そのいずれのディレクトリも含む）を移動して、スケルトンコードを生成するために使用可能なファイルを識別する。また、ソフトウェア設計仕様ナビゲータ７１０は、識別されたファイル内を移動して、適用可能なコードを生成するために適切なファイルの別個の部分を見つけることもできる。
【００６４】
クラス識別モジュール７２０は、スケルトンコードを生成する際に使用するためにソフトウェア設計仕様ナビゲータ７１０によって識別されるファイルに関連するクラスを判定する。一実施形態では、ソフトウェア設計仕様１１０はクラス仕様によりクラスを定義し、クラス識別モジュールはクラス仕様を検出するように構成される。一実施形態では、クラス識別モジュール７２０は、クラスの仕様を含む実際のファイルから、識別されたクラスに関する情報も取得する。その情報は、コードのテキストシミュレーション、クラスの特性もしくは属性のリスト、またはいかなる他の識別可能なテキスト記述の形式であってもよい。大文字の「Ｃ」の検出のような、ある特定のテキスト属性が、設計仕様内のクラス仕様を指定してもよい。クラス指定子に付随するテキストが、クラス仕様の一部として、および／またはそのクラス仕様に関連するクラスに関する情報として識別されてもよい。
【００６５】
ファイル構造ジェネレータ７３０は、生成されるスケルトンコードを含むファイル構造を生成する。具体的には、ファイル構造ジェネレータ７３０は、パッケージに対応するサブディレクトリと、ソフトウェア設計仕様１１０のクラスに対応するプログラムファイルとを作成する。ここで、ファイル構造ジェネレータ７３０は、出力ディレクトリ６００の分岐ノード構造を作成し、出力ディレクトリの分岐ノードにおけるｈファイルおよびｃｐｐファイルの配置を決定する。本発明の一実施形態では、ファイル構造ジェネレータ７３０は、ソフトウェア設計仕様ディレクトリ５０２内のノードのディレクトリパスを出力ディレクトリ６００のノードにマッピングするマッピング方式を実装する。また、ファイル構造ジェネレータ７３０は、クラス識別モジュール７２０により識別された各クラスの位置を、出力ディレクトリ６００内の対応するノード位置にマッピングすることも行う。特定の識別されたクラスに対するマッピング方式により使用されるノード位置は、そのクラスを指定あるいは定義したドキュメントのディレクトリパスに基づいてもよい。
【００６６】
関数プロセッサ７４０は、クラス識別モジュール７２０により識別された各クラスの関数に関する情報を取得する。その情報は、その関数のクラス仕様の関数リストから取得されてもよい。関数プロセッサ７４０は、クラス仕様内の関数リストから、クラス内で宣言される列挙、構造体、およびクラスに関する情報を取得する。
【００６７】
属性プロセッサ７５０は、クラス識別モジュール７２０により識別された各クラスの属性メンバに関する情報を取得する。その情報は、そのクラスの仕様に含まれる属性のリストから取得されてもよい。属性のリストは、付随するテキストが属性のリストであることをスケルトンコードジェネレータ１３０に対して指定する特定の書式または構造を有していてもよい。取得される情報は、属性メンバの型および名前を含む。
【００６８】
クラス宣言ファイルジェネレータ７６０は、クラス宣言のためのコードを生成する。他の実施形態に記載されているように、このコードはｈファイルに含まれてもよい。そのコードは、クラス識別モジュール７２０、関数プロセッサ７４０、および属性プロセッサ７５０、ならびにスケルトンコードジェネレータ１３０の他のコンポーネントから取得される情報に基づいて生成されてもよい。
【００６９】
クラススケルトン関数ファイルジェネレータ７７０は、クラスの各関数のスケルトンコードを生成する。他の実施形態に記載されているように、このコードはｃｐｐファイルに含まれてもよい。
【００７０】
図７は、スケルトンコードジェネレータ１３０の一部としてルールのセット７８０も示している。ルールのセット７８０は、設計ルール１２０（図１）の一部であるルールに対応し得る。ルールのセット７８０は、ソフトウェア設計仕様１１０が書式化され編成される際のルールに基づいてもよい。ここで、ルールのセット７８０は、ソフトウェア設計仕様１１０からの適当な情報にアクセスするために使用可能である。というのは、ルールのセット７８０は、クラスおよび関数の仕様を作成するために使用されたのと同じ規約／ルールに基づくことになるからである。スケルトンコードジェネレータ１３０のその他のコンポーネントが、コードを生成するのに必要な情報を取得するためにルールのセット７８０にアクセスすることができる。
【００７１】
スケルトンコードジェネレータ１３０の各コンポーネントについて、クラスを識別し、クラスのコードを生成することとの関連で説明したが、他の実施形態では、クラスと同様に、構造体を識別し、構造体のコードを生成することも行う。
【００７２】
図８は、スケルトンコードを生成するように構成されたスケルトンコードジェネレータ１３０を、パッケージおよびインタフェースの観点から記載している。一実施形態では、スケルトンコードジェネレータ１３０は、ファイル構造ジェネレータパッケージ８１０およびクラススケルトンコードジェネレータパッケージ８２０を含む。ファイル構造ジェネレータパッケージ８１０の機能としては、ソフトウェア設計仕様１１０に対応するスケルトンコードに対するディレクトリ構造を作成すること、およびソフトウェア設計仕様ディレクトリ５０２で識別される各クラスに対するｈファイルおよびｃｐｐファイルを作成することがある。ファイル構造ジェネレータパッケージ８１０は、クラスに関する情報を取得するために、ソフトウェア設計仕様ディレクトリ５０２内を移動するためのロジック／プログラミングを含んでもよい。このスケルトンコードは、この情報に基づいて生成される。
【００７３】
ファイル構造ジェネレータパッケージ８１０は、出力ディレクトリ６００（図６）内のクラスのスケルトンコードの位置に関する情報を維持管理する。第１インタフェース８１５（SkeletonCodeMaker.plと称する）が、ファイル構造ジェネレータパッケージ８１０に情報を渡す。この情報としては、ソフトウェア設計仕様１１０の関連部分の位置（ディレクトリパス）、生成すべきスケルトンコードの位置（ディレクトリパス）、およびソフトウェア設計仕様１１０のドキュメント番号が挙げられる。クラススケルトンコードジェネレータパッケージ８２０は、任意の特定のクラスに対して、宣言ファイル（ｈファイル）内のクラス宣言および実装ファイル（ｃｐｐファイル）内のスケルトン関数のためのコードを生成する。クラススケルトンコードジェネレータパッケージ８２０は、クラスのスケルトンコードを生成するために、ソフトウェア設計仕様１１０で提供される当該特定のクラスの仕様からの情報を使用する。
【００７４】
第２のインタフェース８２５（インタフェース関数generateSkeletonCodeForClass（）と称する）は、クラス仕様ファイル、宣言ファイル（ｈファイル）、実装ファイル（ｃｐｐファイル）のファイルハンドル、クラス名、ソフトウェア設計仕様１１０のドキュメント番号、および、ソフトウェア設計仕様１１０内のクラスの相対ディレクトリパスに関する情報を含むハッシュテーブルを含む情報を要求する。各クラスについて生成されるスケルトンコードは、以下で説明する書式を有する。
【００７５】
［ソフトウェア設計仕様の内容］
図９は、クラス仕様９００がソフトウェア設計仕様１１０（図１参照）において提供され得る方法を示している。一実施形態では、クラス仕様９００は、特定のクラスのコードを生成するのに必要な情報を含む電子ドキュメントの一部に対応する。その情報としては、クラス仕様ヘッダ９１０、関数リスト９２０、クラス属性のセット９３０、および１つまたは複数の関数定義９４０などの特性を挙げることができる。クラス仕様ヘッダ９１０はクラス名を含む。関数リスト９２０は、クラスのすべての関数のリストを含む。これは、公開（public）、限定公開（protected）、および非公開（private）関数を含み得る。付録Ｃは、クラス仕様が実際に現れ得る様子を示している。
【００７６】
関数リスト９２０は、クラス内で宣言されるすべての列挙宣言、構造体宣言、およびクラス宣言を含んでもよい。クラス属性のセット９３０は、クラスのすべての属性メンバのリストを含む。このセクションは、クラスの属性メンバの型、名前、および目的を与える。関数定義９４０は、関数リスト９２０にリストされた関数によって使用される目的およびアルゴリズムを記述する。一実施形態では、関数定義９４０は、コメントの形式、あるいはコメント書式を有してもよく、それにより、コード内の関数の関数ヘッダとして使用され得る。
【００７７】
一実施形態では、特性に対応する情報は、文字認識と、ある特定の識別可能なテキストをクラス仕様９００の特性の１つとして指定する規約ルールとを使用することにより、他の情報から区切ることができる。例えば、クラス属性のセットは、行および列を含むグリッドの存在によりクラス仕様として識別される電子ドキュメントの部分において、他の情報から区切ることができる。
【００７８】
図７に関して説明したように、クラス識別モジュール７２０はクラス仕様９００を検出することができる。クラス仕様９００を識別する際に、クラス識別モジュール７２０、またはスケルトンコードジェネレータ１３０のその他のコンポーネントが、ソフトウェア設計仕様１１０に含まれるある特定のタイプの情報を無視するように構成されてもよい。例えば、スケルトンコードジェネレータ１３０は、ある特定のアルゴリズムまたはプロセスを記述する図面を無視するように構成されてもよい。というのは、このような図面は、付随するテキストとともに、人間の理解のために作られているからである。
【００７９】
図１０は、スケルトンコードを含むように生成されるクラス宣言ファイル１０００の１つの書式を示している。クラス宣言ファイル１０００は、本明細書の他の箇所に記載されているように、ソフトウェア設計仕様１１０の１つのクラスに対する、特定のクラス仕様９００のｈファイルに対応する。クラス宣言ファイル１０００は、ファイルヘッダ１００２、プリプロセッサ指令１００４、１つまたは複数のファイルインクルード１００６、およびクラス宣言１００８を含み得る。ファイルヘッダ１００２は、ファイルおよびクラスの記述、および／またはファイルの履歴を提供することができる。プリプロセッサ指令１００４は、システムがコンパイルされる時に特定のファイルの多重インクルードを防ぐための１つまたは複数のプリプロセッサ指令を含む。ファイルインクルード１００６は、クラスに必要とされる他のファイルをインクルードするプリプロセッサ指令を含む。クラス宣言１００８は、クラスを宣言するコードを含む。
【００８０】
図１１は、スケルトンコードを含むように生成されるクラススケルトン関数ファイル１１００の１つの書式を示している。クラススケルトン関数ファイル１１００は、クラスの関数のスケルトンコードを含む。クラススケルトン関数ファイル１１００は、ソフトウェア設計仕様１１０のクラスについて作成されるｃｐｐファイルに対応する。一実施形態では、クラススケルトン関数ファイル１１００は、ファイルヘッダ１１０２、ファイルインクルード１１０４、関数ヘッダ１１０６、およびスケルトン関数１１０８を含む。
【００８１】
ファイルヘッダ１１０２は、ファイルおよびクラスの記述、ならびにファイルの履歴を含み得る。ファイルインクルード１１０４は、クラスの関数に必要とされる可能性がある他のファイルをインクルードする１つまたは複数のプリプロセッサ指令を含み得る。関数ヘッダ１１０６は、クラスの関数およびその関数が実装するアルゴリズムの記述を含む。関数ヘッダ１１０６は、その関数を説明するコメントを含んでもよい。このようなコメントは、関数定義９４０（図９）の部分に対応し得る。スケルトン関数１１０８は、デバッグステートメントと、関数が値を返す場合に値を返すためのステートメントのみを含む関数の実装である。スケルトン関数１１０８は、関数のアルゴリズムを実行するコードを含まない。クラスの各関数について、複数の関数ヘッダ１１０６およびスケルトン関数１１０８が存在してもよい。
【００８２】
［出力ディレクトリの作成］
図１２は、ソフトウェア設計仕様ディレクトリ５０２（図５参照）に基づいて出力ディレクトリ６００（図６参照）を作成する処理フローを示している。ここで、図１２に記載の方法では、ソフトウェア設計仕様１１０がそれ自体、出力ディレクトリ６００の基礎となるべきディレクトリとして構造化されていると仮定する。他の実施形態では、出力ディレクトリ６００を作成するために他のソースや情報を使用してもよい。例えば、出力ディレクトリ６００の構造が、ソフトウェア設計仕様１１０の電子ドキュメントの１つに明示的に定義されてもよい。図１２により提供される方法は、スケルトンコードジェネレータ１３０によって実行され得る。特に、ファイル構造ジェネレータパッケージ８１０が、記載されるステップを実行し得る。
【００８３】
図１２に記載の方法は、ソフトウェア設計仕様１１０に対する１回目の走査の間にスケルトンコードジェネレータ１３０によって実行されるステップを含み得る。一実施形態では、スケルトンコードジェネレータ１３０は、出力ディレクトリ６００を作成するために１回目の走査を行う。次に、ソフトウェア設計仕様１１０に対する２回目の走査を実行することにより、出力ディレクトリ６００内にスケルトンコードを生成する。一実施形態では、１つまたは複数のタイプのプログラムファイルを出力ディレクトリ６００（図６）に追加するために、ソフトウェア設計仕様１１０に対する追加的走査を行う際に、図１３および／または図１４に記載の方法を実行する。一実施形態では、スケルトンコードジェネレータ１３０によって生成されるコードを含む宣言ファイルおよび実装ファイルを作成する。
【００８４】
図１２を参照すると、ステップ１２１０で、ソフトウェア設計仕様１１０からファイルを取得する。このファイルは、テキスト、タグおよび他の内容を含む電子ドキュメントに対応し得る。ファイルは、例えば、ソフトウェアシステム、ソフトウェアシステムに対するパッケージの１つ、またはソフトウェアシステムにおいて実装されるべきクラスの記述に対応するデータを含んでもよい。
【００８５】
ステップ１２１５で、ソフトウェア設計仕様１１０内に他のファイルが存在するかどうかを判定する。他のファイルが存在しない場合、ステップ１２２０で本方法は終了する。ステップ１２２０は、出力ディレクトリ６００の作成の完了に対応し得る。
【００８６】
他のファイルがある場合、そのファイルを見つけ、ステップ１２２５で、そのファイルがＨＴＭＬファイルであるかどうかを判定する。他の実施形態では、ファイルがＸＭＬのような別の書式化タイプであるかどうかを判定してもよい。ファイルがＨＴＭＬ（または特定の所望の書式化タイプ）でないと判定された場合、本方法はステップ１２１０から繰り返される。一実施形態では、ファイル構造ジェネレータパッケージ８１０（図８参照）が、設計仕様内のすべてのファイルにアクセスするためにソフトウェア設計仕様ディレクトリ５０２内を移動することによって、ステップ１２１０、１２１５、および１２２０を実行するように構成される。
【００８７】
見つかったファイルがＨＴＭＬ書式化されている場合、ステップ１２３０で、そのファイルからクラス名を取得することができるかどうかを判定する。一実施形態では、クラス名は「Ｃ」のような特別の文字によって指定される。例えば、「Ｃ」は、クラス名の最初の文字としてのみ使用するように予約してもよい。ステップ１２３０の判定で、見つかったファイルからクラス名を見つけることができない場合、本方法はステップ１２１０から繰り返される。
【００８８】
ステップ１２３０の判定で、ファイルからクラス名を取得することができた場合、ステップ１２４０で、ソフトウェア設計仕様１１０内のクラス名およびファイルの相対ディレクトリパスをハッシュテーブルに追加する。相対ディレクトリパスは、ソフトウェア設計仕様ディレクトリ５０２のトップディレクトリからクラス仕様のファイルを含むディレクトリまでのパスに対応する。ハッシュテーブル内に置かれるデータの書式は、次のハッシュテーブルの例、％ｍ＿ＣｌａｓｓＩｎｃｌｕｄｅＲｅｌａｔｉｖｅＰａｔｈ、に提供するものであってもよい。このハッシュテーブル例は図１５Ａおよび図１６Ａに記載される。
【００８９】
ステップ１２４０の後、ステップ１２５０で、ソフトウェア設計仕様ディレクトリ５０２（図５）の構造に基づいて出力ディレクトリ６００を作成する。一実施形態では、スケルトンコードを含むディレクトリ構造は、ソフトウェア設計仕様ディレクトリ５０２のディレクトリ構造の再現である。
【００９０】
ステップ１２６０で、クラス名および絶対ターゲットディレクトリパスをハッシュテーブルに追加する。絶対ターゲットディレクトリパスは、クラスのスケルトンコードのファイルが生成されることになる出力ディレクトリ６００内のディレクトリパスに対応する。ハッシュテーブルに置かれるデータの書式は、次のハッシュテーブルの例、％ｍ１＿ＡｂｓＴａｒｇｅｔＰａｔｈＦｏｒＣｌａｓｓＳｔｒｃｔＴａｂｌｅ、に提供するものであってもよい。このハッシュテーブル例は図１５Ｃおよび図２１Ａに記載される。
【００９１】
ステップ１２７０で、ファイル名およびクラス名をハッシュテーブルに追加する。ハッシュテーブルに置かれるデータの書式は、次のハッシュテーブルの例、％ｍ１＿ＦｉｌｅＣｌａｓｓＳｔｒｃｔＴａｂｌｅ、に提供するものであってもよい。このハッシュテーブル例は図１５Ｄおよび図２２Ａに記載される。絶対ディレクトリパス、ファイル名およびクラス名をハッシュテーブルで保存するのには多くの理由が存在する。そのような理由の１つとして、このようなデータ構造をまとめて１つのハッシュテーブルに保存すると、あるクラスが別のクラスにインクルードされることを考慮してコードを生成することができるようなルックアップメカニズムが可能となるということがある。
【００９２】
図１３は、ソフトウェア設計仕様１１０において定義されるソフトウェアクラスに基づいてプログラムファイルのスケルトンコードを生成する処理フローを示している。一実施形態では、スケルトンコードジェネレータ１３０のファイル構造ジェネレータパッケージ８１０（図８）が、図１３に記載のステップを実質的に実行する。図１３に記載の方法は、スケルトンコードジェネレータ１３０のファイル構造ジェネレータパッケージ８１０がソフトウェア設計仕様１１０に対する２回目の走査を行うことに対応し得る。一実施形態では、ファイル構造ジェネレータパッケージ８１０（図８）がクラス仕様に対応するすべてのファイルにアクセスする際に、スケルトンコードが生成される。
【００９３】
ステップ１３１０で、ソフトウェア設計仕様１１０からのファイルを識別する。ステップ１３１５で、ファイルを識別することができないと判定された場合、ステップ１３２０で、すべてのクラスに対するスケルトンコードの生成が完了する。これに対して、別のファイルを識別することができた場合、ステップ１３３０で、そのファイルがクラス仕様（図９の９００参照）を含むかどうかを判定する。一実施形態では、ファイル構造ジェネレータパッケージ８１０によって作成されたハッシュテーブル（例えば、%m1_FileClassStrctTable）を用いて、ファイルがクラス仕様に対応するかどうかを判定する。
【００９４】
ステップ１３３０で、ファイルがクラス仕様を含まないと判定された場合、本方法はステップ１３１０から繰り返される。ステップ１３３０で、ファイルがクラスを含むと判定された場合、ステップ１３４０で、出力ディレクトリ６００内にプログラムファイルを作成する。既に説明したように、これらのプログラムファイルは、宣言ファイル（ｈファイル）および実装ファイル（ｃｐｐファイル）に対応し得る。出力ディレクトリ６００内でクラスのスケルトンコードが作成される位置は、ハッシュテーブル%m1_AbsTargetPathForClassStrctTableに格納された絶対ディレクトリパス（図１２参照）を用いて決定することができる。
【００９５】
ステップ１３５０で、クラスに対して作成された個々のプログラムファイルにスケルトンコードを追加する。スケルトンコードは、付録Ａおよび付録Ｂに示されているような、特定の規約または書式に準拠してもよい。ステップ１３５０の後、本方法がステップ１３２０で終了するまで、ステップ１３１０を繰り返す。一実施形態では、ファイル構造ジェネレータパッケージ８１０がクラススケルトンコードジェネレータパッケージ８２０と対話することにより、上記の１つまたは複数のステップを実行する。特に、ファイル構造ジェネレータパッケージ８１０は、クラスのスケルトンコードを生成するために、クラススケルトンコードジェネレータパッケージ８２０と対話する。
【００９６】
［スケルトンコード生成］
図１４は、本発明の一実施形態によるスケルトンコードを生成する処理フローを示している。図１３と同様、図１４に記載の方法は、出力ディレクトリ６００が作成された後で実行してもよい。これは、ソフトウェア設計仕様１１０の２回目の走査または追加的走査に対応し得る。一実施形態では、図１４に記載の方法は、クラススケルトンコードジェネレータパッケージが出力ディレクトリ６００のプログラムファイルのスケルトンコードを生成するのに必要な情報を取得するために、クラススケルトンコードジェネレータパッケージ８２０がクラス仕様を含む特定のファイルにアクセスする場合に、ファイル構造ジェネレータパッケージ８１０によって実行される。説明の目的上、図１４に記載の方法では、ソフトウェア設計仕様１１０から識別される各クラスについて、２つのプログラムファイル、すなわち実装ファイルおよび宣言ファイルを生成すると仮定する。ただし、本方法は、より多数またはより少数のプログラムファイルとともに使用するように変更してもよい。
【００９７】
ステップ１４１０で、関数リストからの情報をソフトウェア設計仕様１１０から取得する。一実施形態では、この情報はクラス仕様（図９のコンポーネント９００参照）に提供される。この情報は、クラス仕様に関連するクラスの関数宣言と、クラス内の列挙、構造体、およびクラス宣言を含んでもよい。
【００９８】
ステップ１４２０で、クラス仕様で指定されるクラス属性からの情報を取得する。この情報は、例えば、クラス仕様のクラス属性テーブルから取得してもよい。ただし、クラス属性がどのように提供されるかについての特定の書式は、ソフトウェア設計仕様１１０の規約で決めてもよい。クラス属性を提供するための規約には、特別の文字またはタグのようないかなる特性を含めてもよく、クラススケルトンコードジェネレータパッケージ８２０が、これらの特性のいずれかを認識するように構成されてもよい。一実施形態では、クラス属性からの情報は、クラス属性の型および名前を含んでもよい。
【００９９】
ステップ１４３０で、ファイルヘッダと、多重インクルードを防ぐための１つまたは複数のプリプロセッサ指令（#defineステートメント）を識別し、クラスに対して作成されたｈプログラムファイルに追加する。
【０１００】
ステップ１４４０で、ファイルが、識別されたクラス仕様に関連する特定のクラスによって使用されるべき他のファイルにアクセスすることができるように、プリプロセッサ指令（#include）をｈファイルに追加する。
【０１０１】
ステップ１４５０で、クラス宣言をｈファイルに追加することにより、クラス宣言ファイルを完成させる。クラス仕様の関数リストおよびクラス属性テーブルから取得される情報がクラス宣言に入る。
【０１０２】
ステップ１４６０〜１４８５は、ｃｐｐファイルのスケルトンコードを生成するためのステップを実行する。ステップ１４６０で、識別されたクラス仕様に対して作成されたｃｐｐファイルにファイルヘッダを追加する。
【０１０３】
ステップ１４７０で、クラスによって使用される他のファイルをインクルードするためのプリプロセッサ指令（#include）をｃｐｐファイルに追加する。ｃｐｐファイルが完成され実行されると、これらの指令によりｃｐｐファイルは、そのファイルを作成するために使用されたクラス仕様によって要求される他のファイル（これは関数または他のクラスを含んでもよい）にアクセスすることが可能となる。
【０１０４】
ステップ１４８０で、クラス仕様の関数定義を取得し、クラスのｃｐｐファイルに追加する。関数定義は、関数ヘッダとして作用する。
【０１０５】
ステップ１４８５で、関数定義のスケルトンコードを生成し、ｃｐｐファイルに追加する。このステップは、スケルトンコードジェネレータ１３０が、ソフトウェア設計仕様１１０から取得される識別された情報を、スケルトンコードを含む特定の構文にマッピングすることによって実行してもよい。
【０１０６】
ステップ１４９０で、ある特定の関数をｃｐｐプログラムファイルに追加する。このような関数としては、プログラムファイルをデバッグするための関数、および関数名を印字するための関数が挙げられる。ｃｐｐファイル内の関数定義に、値を返すためのステートメントを追加してもよい。一実施形態では、クラスの各関数についてステップ１４８０〜１４９０を繰り返すことにより、クラススケルトン関数ファイルを完成させる。
【０１０７】
図１４は、スケルトンコードジェネレータ１３０によって生成されるプログラムファイルのスケルトンコードの第２の部分を生成する方法を示している。図１４に記載の方法は、図１３に記載の方法にコードを付加するために実行されるが、本発明の実施形態は、図１３または図１４のいずれかに記載の方法を独立に使用してスケルトンコードを生成してもよい。
【０１０８】
［ハッシュテーブル］
上記のように、本発明の実施形態は、ハッシュテーブルを用いて、コード生成を追跡するために後で使用されるデータを格納する。図１５Ａ〜図１５Ｄは、スケルトンコードを自動生成するために使用され得る４つのハッシュテーブルを示している。例えば、図１５Ａ〜図１５Ｄに示すハッシュテーブルは、スケルトンコードを生成するためにスケルトンコードジェネレータ１３０によって使用されることが可能である。これらのハッシュテーブルは、ルックアップ方式またはマッピング機能を実装するために使用可能な単純なデータ構造を表している。本発明の他の実施形態では、ハッシュテーブル以外のデータ構造を使用してもよい。
【０１０９】
図１５Ａに示す第１ハッシュテーブル１５１０（%m_ClassRelativeIncludePathと称する）は、識別されたクラスの相対パスを参照用に保存するためのものである。第１ハッシュテーブル１５１０は、ファイル構造ジェネレータパッケージ８１０およびクラススケルトンコードジェネレータパッケージ８２０によって使用され得る。第１ハッシュテーブル１５１０のキー１５１２は、特定のクラスの名前である。値１５１４はクラスの相対パスである。一実施形態では、クラスの相対パスは、ソフトウェア設計仕様１１０のルートノードを除き、クラス仕様９００（図９参照）が位置していたソフトウェア設計仕様ディレクトリ５０２（図５）内のファイルのディレクトリパスに対応する。また、値１５１４は、識別されたクラスのスケルトンコードが出力ディレクトリ６００（図６参照）内で位置するディレクトリパスに対応する。第１ハッシュテーブル１５１０には、ファイル構造ジェネレータパッケージ８１０がソフトウェア設計仕様１１０内を移動する際に、識別されたクラス仕様のクラス名および相対パスが入力される。これは、その仕様に対する１回目の走査中に行われてもよい。一実施形態では、第１ハッシュテーブル１５１０を用いて、ファイルがｈファイル内のクラスに含まれる場合のディレクトリパスを判定する。これにより、プリプロセッサ指令（#include）が提供される。第１ハッシュテーブル１５１０には、図１２に記載の方法を実行することから取得される情報を用いて入力が行われてもよい。
【０１１０】
図１５Ｂに示す第２ハッシュテーブル１５２０（%m2_ClassStructFunctionDeclと称する）は、クラスならびにクラス内のネストされたクラスおよび構造体の関数宣言を参照する際に使用される。第２ハッシュテーブル１５２０は、クラススケルトンコードジェネレータパッケージ８２０によって使用され得る。第２ハッシュテーブル１５２０のキー１５２２は、クラス名、ならびに別のクラス内のクラスおよび構造体の名前である。値１５２４は、クラスにおいて、ならびにクラス内のクラスおよび構造体において宣言される関数に関する情報を含む別の内部ハッシュテーブル１５２６である。内部ハッシュテーブル１５２６のキー１５２７は関数名である。内部ハッシュテーブル１５２６の値１５２９は関数宣言である。第２ハッシュテーブル１５２０には、クラス仕様９００（図９参照）の関数リストからの情報を入力してもよい。一実施形態では、このハッシュテーブルを用いて、対応する実装ファイル（例えばｃｐｐファイル）内の各関数のスケルトンコードを追加する。
【０１１１】
図１５Ｃに示す第３ハッシュテーブル１５３０（%m1_AbsTargetPathForClassStrctTableと称する）は、ソフトウェア設計仕様１１０から識別された特定のクラスのコードを生成すべき場所を追跡する際に使用される。第３ハッシュテーブル１５３０は、スケルトンコードジェネレータ１３０のファイル構造ジェネレータパッケージ８１０によって使用され得る。第３ハッシュテーブル１５３０のキー１５３２はクラス名である。値１５３４は、クラスのコードが生成されるべき絶対ディレクトリパスである。絶対ディレクトリパスは、図６に記載のDirectory  of  Code６１０のようなソースコードのトップディレクトリ（またはターゲットディレクトリ）の絶対ディレクトリパスと、ソフトウェア設計仕様１１０から決まるクラスの相対ディレクトリパスとの結合である。第３ハッシュテーブル１５３０には、図１２に記載の方法のステップを実行する際に入力が行われてもよい。図１３は、第３ハッシュテーブル１５３０からの情報がどのように使用され得るかを示している。
【０１１２】
図１５Ｄに示す第４ハッシュテーブル１５４０（%m1_FileClassStrctTableと称する）は、クラス仕様を含むファイルを対応するクラス名と照合する際に使用される。第４ハッシュテーブル１５４０は、ファイル構造ジェネレータパッケージ８１０によって使用され得る。第４ハッシュテーブル１５４０のキー１５４２は、クラス仕様９００（図９参照）を含むファイルの名前である。値１５４４は、クラス仕様を含むファイルに関連するクラスである。図１２は、第４ハッシュテーブル１５４０に情報がどのように入力され得るかを示している。図１３は、第４ハッシュテーブル１５４０からの情報がどのように使用され得るかを示している。
【０１１３】
図１６Ａは、スケルトンコードジェネレータ１３０によって使用される第１ハッシュテーブルの一例１６０２を示している。図１６Ｂは、ソフトウェア設計仕様の一例１６０４を示している。第１ハッシュテーブル１６０２は、ソフトウェア設計仕様１６０４に適用される。提供されている例では、ソフトウェア設計仕様１６０４は、複数のクラス仕様に対応するＨＴＭＬファイルを含む。ソフトウェア設計仕様１６０４は分岐ノード１６０６を含んでもよい。分岐ノード１６０６としては、複数のファイルまたはサブディレクトリ構造へのアクセスを提供するノードがある。スケルトンコードジェネレータ１３０は、出力ディレクトリ６００内のプログラムファイルを構造化することにより、ソフトウェア設計仕様１６０４と実質的に類似のディレクトリ構造を有するように構成されてもよい。実質的に類似のディレクトリ構造は、分岐ノード１６０６のほとんどまたはすべての複製に対応し得る。
【０１１４】
一実施形態では、ソフトウェア設計仕様１６０４内の各クラス仕様１６０５に宣言ファイルおよび実装ファイル（ｈファイルおよびｃｐｐファイルに対応する）が提供される。第１ハッシュテーブル１６０２には、ソフトウェア設計仕様１６０４から取得される情報が入力される。この情報は、クラス名と、ソフトウェア設計仕様１６０４のトップノード１６１０からのその相対ディレクトリパスとに対応し得る。ただし、トップノード１６１０は相対パスから除く。一例として、クラスＣＳＮＭＰの相対パスは、Monitor\HWaccess\SNMP\、である。第１ハッシュテーブル１６０２は、各クラスのプログラムおよび実装ファイルに追加されるプリプロセッサ指令（#include）のためのファイルの位置を判定するために使用可能である。
【０１１５】
［クラス依存関係］
ソフトウェア設計において、あるクラスが別のクラスを使用する必要があることはまれではない。このような場合、第１のクラスが第２のクラスに依存するといい、第２のクラスをインクルードすることが必要となり得る。第２のクラスは、第１のクラスにおいて参照されても含まれてもよく、それにより、第１のクラスは、それ自体が正しく実行されるために、第２のクラスを実行することができるコードを必要とする。本発明の一実施形態によれば、スケルトンコードジェネレータ１３０が依存クラスを提供するスケルトンコードを生成するように構成される。依存クラスとしては、それが使用するクラスがある。
【０１１６】
図１７は、あるクラスが実行時に別のクラスをインクルードすることを可能にするためのスケルトンコードを当該クラスに提供する処理フローを示している。ＣＤｅｖｉｃｅという名前のクラスがＣＨＴＴＰという名前のクラスを使用するという例を考える。この場合、ＣＤｅｖｉｃｅクラスに対して生成されるコードは、ＣＨＴＴＰクラスのコードについて知っていなければならない。ＣＤｅｖｉｃｅクラスがＣＨＴＴＰクラスを使用するためには、ＣＨＴＴＰクラスが宣言されることが必要となる。
【０１１７】
図１７において、ステップ１７１０で、宣言ファイル内のコードが生成されるクラスの相対ディレクトリパスを第１ハッシュテーブル１６０２から取得する。例では、これは、ＣＤｅｖｉｃｅの相対ディレクトリパスを取得することに対応し得る。一実施形態では、ＣＤｅｖｉｃｅの相対ディレクトリパスは、ＣＤｅｖｉｃｅのクラス仕様を含むソフトウェア設計仕様１６０４（図１６Ｂ）内のファイルのディレクトリパス（ただしルートノード１６１０を除く）から取得してもよい。提供されている例では、ＣＤｅｖｉｃｅの相対パスは「Ｍｏｎｉｔｏｒ￥Ｄｅｖｉｃｅ」である。
【０１１８】
ステップ１７２０で、ステップ１７１０で取得されたディレクトリパスにおいて、相対ディレクトリパス内の各ディレクトリ名を、パス名の中で１ノード上昇することをソフトウェアに命令するコードで置き換えることにより、ディレクトリパスを変更する。一実施態様では、このコーディングは、次の「．．」という構文で表される。提供されている例でこのステップを実行すると、ＣＤｅｖｉｃｅの相対パスは「．．￥．．」に変更される。
【０１１９】
ステップ１７３０で、第１のクラスによって使用されるクラスの相対ディレクトリパスを第１ハッシュテーブル１６０２から取得する。提供されている例では、ＣＨＴＴＰクラスの相対パスは「Ｍｏｎｉｔｏｒ￥ＨＷａｃｃｅｓｓ￥ＨＴＴＰ」である。
【０１２０】
ステップ１７４０で、ステップ１７１０で判定されたクラスＣＤeviceの相対ディレクトリパスを、ステップ１７３０で取得されたクラスＣＨＴＴＰの相対ディレクトリパスと結合する。結合は、インクルードされるべきクラスのディレクトリパスを、ステップ１７２０からの変更されたパスの右側に付けることによって行われる。例えば、ステップ１７２０からの変更されたディレクトリパスは「．．￥．．￥」である。与えられた例の場合、このステップから得られる結合後のディレクトリパスは「．．￥．．￥Ｍonitor￥ＨＷaccess￥ＨＴＴＰ」である。コンパイラは、この情報を用いて、インクルードすべきファイルの位置を見つける。提供されている例では、ＣＤeviceがＣＨＴＴＰをインクルードするには、コンパイラは、ＣＤeviceからディレクトリパスを２ノード上昇してから３ノード下降することにより、ＣＨＴＴＰファイルにアクセスする。
【０１２１】
ステップ１７５０で、生成されたディレクトリパスにプリプロセッサ指令（＃include）を結合し、他のクラス（ＣＨＴＴＰ）に依存するクラスの宣言ファイルに追加する。提供されている例では、結果として得られるプリプロセッサ指令は、＃include“．．￥．．￥Ｍonitor￥ＨＷaccess￥ＨＴＴＰ”である。
【０１２２】
図１８Ａは、第２ハッシュテーブルの一例１８００（%m2_ClassStructFunctionDecl）を示している。前述のように、第２ハッシュテーブル１８００は、クラスの各関数またはクラス内でネストされたクラスもしくは構造体内で宣言されている各関数のクラススケルトン関数を生成するために、スケルトンコードジェネレータ１３０で使用され得る。参考までに、図１８Ｂは、ソフトウェア設計仕様１１０のクラス仕様の一例１８０２である。クラス仕様１８０２は、図９の例に提供されているような、クラスに関する情報を含むＨＴＭＬファイルに対応し得る。説明の目的上、クラス仕様１８０２では、クラス仕様ヘッダ（図９の９１０参照）および関数リスト（９２０）のみが記載されている。第２ハッシュテーブル１８００は、関数リストに見出された情報を含む。第２ハッシュテーブル１８００は、クラス「ＣＨＴＭＬＴextＰrocessor」および構造体「ＳＨＴＭＬＴext」に対して宣言されたすべての関数も含む。
【０１２３】
図１９は、第２ハッシュテーブル１５２０（図１５Ｂ参照）に、クラスの関数に関する情報を追加する処理フローを示している。このような方法は、クラスに対する１つまたは複数のプログラムファイルに、識別されたクラスの各関数のスケルトンコードを追加するために使用され得る。特に、記載されている方法は、実装ファイル（ｃｐｐファイル）にスケルトンコードを追加するために使用され得る。
【０１２４】
ステップ１９１０で、クラス仕様の関数リストから１行を取得する。ソフトウェア設計仕様１１０の規約は、ある行の存在を、ソフトウェア設計仕様１１０を形成するドキュメント内のある特定の宣言と関連づけていると仮定する。他の実施形態では、仕様内のある特定の宣言を指示するための規約として、他の文字、文字の組合せ、画像、または他のマーカーを使用してもよい。
【０１２５】
ステップ１９２０で、取得された行が関数宣言であるかどうかをチェックする。その行が関数宣言である場合、ステップ１９２２で、その関数宣言から関数名を取得する。ステップ１９２４で、クラス名、関数名、および関数宣言を第２ハッシュテーブル１５２０（図１５Ｂ参照）に追加する。その後、本方法はステップ１９１０から繰り返される。
【０１２６】
ステップ１９２０の判定で、行が関数宣言でない場合、ステップ１９３０で、行がクラス宣言の開始であるかどうかを判定する。行がクラス宣言であると判定された場合、ステップ１９３２で、クラス宣言の関数宣言から関数名を取得する。次に、ステップ１９３４で、クラス名、関数名、および関数宣言を第２ハッシュテーブル１５２０に追加する。ステップ１９３２および１９３４では、クラス宣言の行が、クラス宣言のすべての関数宣言を得るために取得される。ステップ１９３２および１９３４の後、本方法はステップ１９１０から繰り返される。
【０１２７】
ステップ１９３０で、行がクラス宣言の開始でない場合、ステップ１９４０で、行がクラス内の構造体宣言の開始であるかどうかをチェックする。行が構造体宣言の開始である場合、ステップ１９４２で、構造体宣言の関数宣言から関数名を取得する。ステップ１９４４で、構造体名、関数名、および関数宣言を第２ハッシュテーブル１５２０に追加する。本方法はステップ１９１０から繰り返される。ステップ１９４２および１９４４では、構造体宣言の行が、構造体宣言のすべての関数宣言を得るために取得される。
【０１２８】
ステップ１９４０で、行が構造体宣言の開始でない場合、ステップ１９５０で、行がクラス属性の開始であるかどうかをチェックする。行がクラス属性の開始である場合、第２ハッシュテーブル１５２０は完成である。そうでない場合、ステップ１９１０で、関数リストの次の行を取得する。
【０１２９】
図２０は、第２ハッシュテーブル１５２０（図１５Ｂ参照）からの情報を用いてクラススケルトン関数を生成する処理フローを示している。特定のハッシュ構造体を具体的に参照しているが、記載されている方法は、他のタイプのハッシュ構造体を用いてクラススケルトン関数を生成するように変更してもよい。
【０１３０】
図２０を参照すると、ステップ２０１０で、ソフトウェア設計仕様１６０４（図１６Ｂ）のクラス仕様に提供されている関数定義を、与えられたクラス仕様の実装ファイルに追加する。この関数定義は、スケルトンコード内の関数を記述するための関数ヘッダとして作用する。
【０１３１】
ステップ２０２０で、関数定義から関数名を取得する。関数定義の書式を用いて、関数名を容易に取得することができる。
【０１３２】
ステップ２０３０で、第２ハッシュテーブル１５２０を探索して関数名を見つける。
【０１３３】
ステップ２０４０で、関数名に関連するクラス名および関数宣言を第２ハッシュテーブル１５２０から取得する。
【０１３４】
ステップ２０５０で、関数宣言から関数の返値を判定する。
【０１３５】
ステップ２０６０で、返値、クラス名、および関数宣言から、スケルトン関数の開始を実装ファイルに追加する。
【０１３６】
ステップ２０７０で、デバッグ目的で関数名を印字するために、デバッグ関数を実装ファイルに追加する。
【０１３７】
ステップ２０８０で、関数宣言の返値に従って値を返すためのステートメントを実装ファイルに追加する。このフローチャートのプロセスは、与えられたクラス仕様の各関数定義について繰り返される。
【０１３８】
図２１Ａは、クラスのプログラムファイルの絶対ディレクトリパスがどのようにして識別され得るかを示すハッシュテーブルの一例２１００を示している。任意のファイルの絶対ディレクトリパスは、出力ディレクトリ６００（図６参照）内でそのファイルの位置を特定するディレクトリパスに対応する。ハッシュテーブル２１００は、図１５Ｃの第３ハッシュテーブル１５３０に対応する。ただし、図２１Ａに示すハッシュテーブルには、出力ディレクトリ６００内のスケルトンコードを含むプログラムファイルの絶対ディレクトリパスが入力されている。図２１Ｂは、ハッシュテーブル２１００によって参照されるソフトウェア設計仕様２１０２を示している。ディレクトリ構造内のクラス仕様は、１つまたは複数の電子ドキュメントによって提供される。このドキュメントは、ＨＴＭＬまたはＸＭＬで書式化されていてもよい。簡単のため、テキストドキュメントや図を有するファイルのような、ソフトウェア設計仕様２１０２に含まれ得る他のファイルは図示していない。
【０１３９】
スケルトンコードジェネレータ１３０は、スケルトンコードを生成し、出力ディレクトリ６００（図６）内にプログラムファイルを置くように構成され得る。ここで、出力ディレクトリは、ソフトウェア設計仕様２１０２のディレクトリ構造と実質的に類似のディレクトリ構造を有する。ハッシュテーブル２１００は、ソフトウェア設計仕様１１０で指定されるすべてのクラスのスケルトンコードの位置を保存するために使用される。ソフトウェア設計仕様２１０２内の各クラスに対するプログラムファイルの位置がハッシュテーブル２１００に追加される。提供されている例では、各プログラムファイルは、そのクラスのコードが提供されるべき出力ディレクトリ６００内の絶対ターゲットパスとともに追加される。
【０１４０】
一実施形態では、絶対ターゲットパスが２つのコンポーネントから決定される。絶対ターゲットパスを決定する際に用いられる一方のコンポーネントは、スケルトンコードが配置されるトップディレクトリの絶対ディレクトリパスである。図２１Ａでは、「／ＣodeＤir／」が、トップディレクトリの絶対パスである。絶対ターゲットパスを決定する際に用いられるもう一方のコンポーネントは、設計仕様のトップディレクトリ２１０４（「Ｑ６−ＤＪ１０−１３」とラベル付けされている）からのクラスの相対ディレクトリパスである。図２１Ａおよび図２１Ｂに示されている例では、ＣＨＷaccessの相対ディレクトリパスは「Ｍonitor／ＨＷaccess／Ａccess／」である。絶対ターゲットパスは、スケルトンコードのトップディレクトリの絶対パスと、クラス仕様のトップディレクトリ２１０４からのクラスの相対パスの両方を結合することによって決定される。図２１Ａおよび図２１Ｂに示されている例では、コードがＣＨＷaccessに対して作成される絶対ディレクトリパスは「／ＣodeＤir／Ｍonitor／ＨＷaccess／Ａccess／」である。
【０１４１】
他の実施形態と関連づけるため、図１２は、ファイル構造ジェネレータパッケージ８１０が１回目にソフトウェア設計仕様２１０２のファイルを走査する時にファイル構造ジェネレータパッケージ８１０によって実行されるステップの例を示している。ファイル構造ジェネレータパッケージ８１０は、クラス仕様のファイルに遭遇すると、そのクラスの絶対ディレクトリパスを判定し、クラス名および絶対ディレクトリパスをハッシュテーブル２１００に追加する。同様に、図１３は、ファイル構造ジェネレータパッケージ８１０が２回目にソフトウェア設計仕様２１０２のファイルを走査する方法を示している。ファイル構造ジェネレータパッケージ８１０は、クラス仕様のファイルに遭遇すると、そのクラスの絶対ディレクトリパスをハッシュテーブル２１００から取得する。絶対ディレクトリパスは、宣言ファイルおよび実装ファイル（それぞれｈファイルおよびｃｐｐファイル）を作成するために使用される。
【０１４２】
図２２Ａは、スケルトンコードジェネレータ１３０によって使用されるハッシュテーブルの一例２２００を示している。ハッシュテーブル２２００は、第４ハッシュテーブル１５４０（図１５Ｄの%m1_FileClassStrctTable）に対応し得る。図２２Ｂは、ハッシュテーブル２２００によって参照されるソフトウェア設計仕様２２０２を示している。ソフトウェア設計仕様２２０２は、電子ドキュメントがクラス仕様に従って構造化されたディレクトリ構造を含む。上記の例と同様、クラス仕様でないソフトウェア設計仕様２２０２内のファイルは図示していない。スケルトンコードジェネレータ１３０は、ソフトウェア設計仕様２２０２と同じディレクトリ構造を有するプログラムファイル内にスケルトンコードを生成するように構成される。ハッシュテーブル２２００は、ソフトウェア設計仕様２２０２に提供されるすべてのクラス仕様のファイルに関連するクラスに関する情報を保存するために使用される。
【０１４３】
図２２に記載されていることに関連して、一実施形態によれば、図１２は、ファイル構造ジェネレータパッケージ８１０が１回目にソフトウェア設計仕様２２０２のファイルを走査する場合に対応する方法を示している。ファイル構造ジェネレータパッケージ８１０は、クラス仕様のファイルに遭遇すると、ファイル名およびクラス名をハッシュテーブル２２００に追加する。ファイルがクラス仕様を含むかどうかを判定するためには、クラス名を取得するためにファイルをオープンして読み出さなければならない。図１３は、ファイル構造ジェネレータパッケージ８１０が２回目にソフトウェア設計仕様２２０２のファイルを走査する方法を示している。ファイル構造ジェネレータパッケージ８１０は、ファイルに遭遇すると、そのファイルに関連するクラス名をハッシュテーブル２２００から判定する。これにより、ファイルに関連するクラス名を判定するために設計仕様の各ファイルをオープンすることが不要となる。
【０１４４】
［ハードウェアの概観］
図２３は、本発明の一実施形態が実施され得るコンピュータシステム２３００を示すブロック図である。コンピュータシステム２３００は、情報を通信するためのバス２３０２等の通信メカニズムと、バス２３０２に接続されて情報を処理するプロセッサ２３０４とを含む。また、コンピュータシステム２３００は、ランダムアクセスメモリ（ＲＡＭ）等のダイナミック記憶デバイスのような、バス２３０２に接続されて、情報およびプロセッサ２３０４によって実行されるべき命令を格納するメインメモリ２３０６も含む。メインメモリ２３０６は、プロセッサ２３０４によって実行されるべき命令の実行中に一時変数等の中間的情報を格納するために使用されてもよい。さらに、コンピュータシステム２３００は、バス２３０２に接続されて、プロセッサ２３０４のためのスタティックな情報および命令を格納する読み出し専用メモリ（ＲＯＭ）２３０８等のスタティック記憶デバイスを含む。磁気ディスクや光ディスクのような記憶デバイス２３１０が、情報および命令を格納するために提供され、バス２３０２に接続される。
【０１４５】
コンピュータシステム２３００は、バス２３０２を通じて、コンピュータユーザに対して情報を表示するためのブラウン管（ＣＲＴ）等のディスプレイ２３１２に接続されてもよい。英数字等のキーを有する入力デバイス２３１４が、情報およびコマンド選択をプロセッサ２３０４に伝達するためにバス２３０２に接続される。もう１つのタイプのユーザ入力デバイスとして、マウス、トラックボール、またはカーソル方向キーのような、方向情報およびコマンド選択をプロセッサ２３０４に伝達し、ディスプレイ２３１２上のカーソル移動を制御するカーソルコントロール２３１６がある。この入力デバイスは通常、第１軸（例えばｘ）および第２軸（例えばｙ）の２つの軸方向に２つの自由度を有し、それによりデバイスは平面内の位置を指定することができる。
【０１４６】
本発明は、本明細書に記載の技法を実施するためのコンピュータシステム２３００の使用に関する。本発明の一実施形態によれば、それらの技法は、プロセッサ２３０４がメインメモリ２３０６に収容されている１つまたは複数の命令の１つまたは複数のシーケンスを実行することに応答して、コンピュータシステム２３００によって実行される。このような命令は、記憶デバイス２３１０のような別のコンピュータ可読媒体からメインメモリ２３０６に読み込まれてもよい。メインメモリ２３０６に収容されている命令のシーケンスの実行により、プロセッサ２３０４は、本明細書に記載のプロセスステップを実行する。代替実施形態では、本発明を実施するために、ソフトウェア命令に代えて、またはそれとともに、固定配線回路を使用してもよい。したがって、本発明の実施形態は、ハードウェア回路およびソフトウェアのいかなる特定の組合せにも限定されない。
【０１４７】
本明細書で使用される場合、「コンピュータ可読媒体」という用語は、実行のためにプロセッサ２３０４に命令を提供することに関与するいかなる媒体をも指す。このような媒体は多くの形態をとることが可能であり、以下のものには限定はされないが、不揮発性媒体、揮発性媒体、および伝送媒体がある。不揮発性媒体としては、例えば、記憶デバイス２３１０のような光ディスクまたは磁気ディスクがある。揮発性媒体としては、メインメモリ２３０６のようなダイナミックメモリがある。伝送媒体としては、同軸ケーブル、銅線および光ファイバがあり、バス２３０２を含む配線も含まれる。伝送媒体は、電波および赤外線データ通信中に生成されるもののような音波または光波の形態をとることも可能である。
【０１４８】
コンピュータ可読媒体の一般的な形態には、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ等の磁気媒体、ＣＤ−ＲＯＭ等の光媒体、パンチカード、紙テープ等の、穴あきパターンを有する物理媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ等のメモリチップまたはカートリッジ、本明細書で以下に記載されるようなキャリア波、またはコンピュータが読み取ることができるいかなる他の媒体も含まれる。
【０１４９】
種々の形態のコンピュータ可読媒体が、実行のためにプロセッサ２３０４に１つまたは複数の命令の１つまたは複数のシーケンスを伝えることに関与してもよい。例えば、命令は最初にリモートコンピュータの磁気ディスクに保持されていてもよい。リモートコンピュータがその命令を自己のダイナミックメモリにロードし、モデムを用いて電話回線を通じてその命令を送信することができる。コンピュータシステム２３００側のモデムが電話回線上のデータを受信し、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線検出器が赤外線信号で伝送されたデータを受信し、適切な回路がそのデータをバス２３０２上に置くことができる。バス２３０２はそのデータをメインメモリ２３０６に伝送し、そこからプロセッサ２３０４が命令を取り出して実行する。メインメモリ２３０６によって受信された命令は、任意選択で、プロセッサ２３０４による実行の前後に記憶デバイス２３１０に格納されてもよい。
【０１５０】
コンピュータシステム２３００は、バス２３０２に接続された通信インタフェース２３１８も含む。通信インタフェース２３１８は、ローカルネットワーク２３２２に接続されたネットワークリンク２３２０に接続される双方向データ通信を提供する。例えば、通信インタフェース２３１８は、対応するタイプの電話回線へのデータ通信接続を提供するためのサービス総合ディジタル網（ＩＳＤＮ）カードまたはモデムであってもよい。もう１つの例として、通信インタフェース２３１８は、ローカルエリアネットワーク（ＬＡＮ）カードであって、それによって、互換性のあるＬＡＮへのデータ通信接続を提供してもよい。無線リンクも実施され得る。いかなるこのような実施態様においても、通信インタフェース２３１８は、種々のタイプの情報を表すディジタルデータストリームを伝送する電気、電磁または光信号を送受信する。
【０１５１】
ネットワークリンク２３２０は通常、１つまたは複数のネットワークを通じて他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク２３２０は、ローカルネットワーク２３２２を通じて、ホストコンピュータ２３２４、またはインターネットサービスプロバイダ（ＩＳＰ）２３２６によって運用されるデータ機器への接続を提供してもよい。ＩＳＰ２３２６は、さらに、現在「インターネット」２３２８と普通呼ばれている世界的なパケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク２３２２およびインターネット２３２８はいずれも、ディジタルデータストリームを伝送する電気、電磁または光信号を使用する。コンピュータシステム２３００との間でディジタルデータを伝送する、種々のネットワークを通る信号ならびにネットワークリンク２３２０上の信号および通信インタフェース２３１８を通る信号は、情報をトランスポートするキャリア波の例示的形態である。
【０１５２】
コンピュータシステム２３００は、ネットワーク（複数可）、ネットワークリンク２３２０および通信インタフェース２３１８を通じて、メッセージを送信し、プログラムコードを含めて、データを受信する。インターネットの例では、サーバ２３３０がインターネット２３２８、ＩＳＰ２３２６、ローカルネットワーク２３２２および通信インタフェース２３１８を通じてアプリケーションプログラムのための要求されたコードを送信してもよい。
【０１５３】
受信されたコードは、それが受信されるとすぐ、プロセッサ２３０４によって実行され得るか、かつ／または後で実行するために記憶デバイス２３１０等の不揮発性ストレージに格納され得る。このようにして、コンピュータシステム２３００は、キャリア波の形態でアプリケーションコードを取得し得る。
【０１５４】
以上、本明細書では、本発明の実施形態について、実施態様ごとに異なり得るさまざまな具体的詳細を参照して説明した。したがって、本発明は何か、および本出願人が本発明として意図しているものは何かを示す唯一のものは、本出願をもとに発行される特許請求の範囲であって、後の補正があればそれを含む、当該特許請求の範囲が発行される特定の形態における特許請求の範囲である。当該特許請求項に含まれる用語について本明細書に明示的に記載されている定義は、特許請求項中で使用される場合の当該用語の意味を支配するものとする。したがって、請求項中に明示的に記載されていない限定、要素、性質、特徴、利点または属性は、いかなる意味でも当該特許請求項の範囲を限定するものではない。よって、本明細書および図面は、限定的ではなく例示的とみなさなければならない。
【図面の簡単な説明】
【０１５５】
【図１】本発明の一実施形態による、コードを生成するシステムのブロック図である。
【図２】図２は、開発者が手動でプログラムファイルを生成する詳細な手順を示す。
【図３】図３は、本発明の一実施形態による、生成されるプログラムファイルが出力ディレクトリを用いて編成される基本的処理フローを示す。
【図４】図４は、スケルトンコードを含むプログラムファイルを有する出力ディレクトリを生成するさらに詳細な処理フローを示す。
【図５】図５は、本発明の一実施形態で使用するためのソフトウェア設計仕様を示す。
【図６】設計仕様から生成されるさまざまなコードセグメントを含む出力ディレクトリの構成を示す図である。
【図７】図７は、スケルトンコードを生成するように構成されたコードジェネレータのコンポーネントを示す。
【図８】図８は、パッケージおよびインタフェースの観点から、スケルトンコードを生成するように構成されたコードジェネレータを示す。
【図９】図９は、クラス仕様が設計仕様において提供され得る方法を示す。
【図１０】図１０は、スケルトンコードを含むように生成されるクラス宣言ファイルの１つの書式を示す。
【図１１】図１１は、スケルトンコードを含むように生成されるクラススケルトン関数ファイルの１つの書式を示す。
【図１２】図１２は、ソフトウェア設計仕様を形成するディレクトリに基づいて出力ディレクトリを作成する処理フローを示す。
【図１３】図１３は、設計仕様において定義されるソフトウェアクラスに基づいてプログラムファイルのスケルトンコードを生成する処理フローを示す。
【図１４】図１４は、本発明の一実施形態による、コードジェネレータのコンポーネントを用いてコードを生成する処理フローを示す。
【図１５Ａ】図１５Ａは、本発明の一実施形態による、コードを自動生成する際に使用するハッシュテーブルを示す。
【図１５Ｂ】図１５Ｂは、本発明の一実施形態による、コードを自動生成する際に使用するハッシュテーブルを示す。
【図１５Ｃ】図１５Ｃは、本発明の一実施形態による、コードを自動生成する際に使用するハッシュテーブルを示す。
【図１５Ｄ】図１５Ｄは、本発明の一実施形態による、コードを自動生成する際に使用するハッシュテーブルを示す。
【図１６Ａ】図１６Ａは、本発明の一実施形態による、コードを自動生成する際に使用するもう１つのタイプのハッシュテーブルを示す。
【図１６Ｂ】図１６Ｂは、図１６Ａのハッシュテーブルに対応するソフトウェア設計ディレクトリを示す。
【図１７】図１７は、あるクラスが実行時に別のクラスをインクルードすることを可能にするためのスケルトンコードを当該クラスに提供する処理フローを示す。
【図１８Ａ】図１８Ａは、本発明の一実施形態による、コードを自動生成する際に使用するもう１つのハッシュテーブルを示す。
【図１８Ｂ】図１８Ｂは、図１８Ａのハッシュテーブルに対応するソフトウェア設計仕様のクラス仕様例を示す。
【図１９】図１９は、ハッシュ構造体にクラスの関数に関する情報を追加する処理フローを示す。
【図２０】図２０は、ハッシュテーブルの１つに含まれる情報を用いてクラススケルトン関数を生成する処理フローを示す。
【図２１Ａ】図２１Ａは、本発明の一実施形態による、コードを自動生成する際に使用するもう１つのハッシュテーブルを示す。
【図２１Ｂ】図２１Ｂは、図２１Ａのハッシュテーブルに対応するソフトウェア設計ディレクトリを示す。
【図２２Ａ】図２２Ａは、本発明の一実施形態による、コードを自動生成する際に使用するもう１つのハッシュテーブルを示す。
【図２２Ｂ】図２２Ｂは、図２２Ａのハッシュテーブルに対応するソフトウェア設計ディレクトリを示す。
【図２３】本発明の一実施形態が実施され得るコンピュータシステムを示すブロック図である。
【符号の説明】
【０１５６】
１１０  ソフトウェア設計仕様
１２０  設計ルール
１３０  スケルトンコードジェネレータ
１４０  プログラムファイル
【図１】
2005158030.tif 000003
【図２】
2005158030.tif 000004
【図３】
2005158030.tif 000005
【図４】
2005158030.tif 000006
【図５】
2005158030.tif 000007
【図６】
2005158030.tif 000008
【図７】
2005158030.tif 000009
【図８】
2005158030.tif 000010
【図９】
2005158030.tif 000011
【図１０】
2005158030.tif 000012
【図１１】
2005158030.tif 000013
【図１２】
2005158030.tif 000014
【図１３】
2005158030.tif 000015
【図１４】
2005158030.tif 000016
【図１５Ａ】
2005158030.tif 000017
【図１５Ｂ】
2005158030.tif 000018
【図１５Ｃ】
2005158030.tif 000019
【図１５Ｄ】
2005158030.tif 000020
【図１６Ａ】
2005158030.tif 000021
【図１６Ｂ】
2005158030.tif 000022
【図１７】
2005158030.tif 000023
【図１８Ａ】
2005158030.tif 000024
【図１８Ｂ】
2005158030.tif 000025
【図１９】
2005158030.tif 000026
【図２０】
2005158030.tif 000027
【図２１Ａ】
2005158030.tif 000028
【図２１Ｂ】
2005158030.tif 000029
【図２２Ａ】
2005158030.tif 000030
【図２２Ｂ】
2005158030.tif 000031
【図２３】
2005158030.tif 000032