(57)【要約】【課題】本発明は、新規に追加された機能に対しても、その機能とマクロとを自動で対応付けすることができるソフトウェア管理装置を提供することを目的とする。【解決手段】本発明に係るソフトウェア管理装置１００では、マクロ比較部５０は、マクロ収集部４０から流用先の製品Ｃで定義されているマクロ（第一のマクロ）を取得し、各製品マクロＤＢ１２から流用元の製品Ｂで定義されていたマクロ（第二のマクロ）を取得する。そして、マクロ比較部５０は、第一のマクロと第二のマクロとを比較する。さらに、各製品マクロＤＢ１２には、当該比較の結果得られる、第一のマクロにおける第二のマクロ以外のマクロである追加マクロが、流用先の製品Ｃで追加された機能と対応させて格納される。【選択図】図１
2010277500.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの集合体である製品の流用を管理するソウトウェア管理装置であって、
流用先の製品において定義されている、第一のマクロを収集するマクロ収集部と、
流用元の製品において定義されている第二のマクロを取得し、前記第一のマクロと前記第二のマクロとを比較するマクロ比較部と、
前記マクロ比較部による前記比較の結果に応じて、前記流用先の製品で追加された機能とマクロとを対応させて格納する第一のデータベースとを、備えている、
ことを特徴とするソフトウェア管理装置。
【請求項２】
前記第一のデータベースは、
前記第二のマクロを格納しており、
前記マクロ比較部は、
前記第一のデータベースから前記第二のマクロを取得する、
ことを特徴とする請求項１に記載のソフトウェア管理装置。
【請求項３】
前記流用元の製品のプリプロセス後のコードを格納している第二のデータベースと、
前記流用元で定義されていたマクロを用いて、前記流用先の製品のプリプロセスを行うプリプロセッサ部と、
前記第二のデータベースから取得した、前記流用元の製品のプリプロセス後のコードと、前記プリプロセッサ部から取得した、前記プリプロセス後のコードとを、比較するコード比較部とを、さらに備えている、
ことを特徴とする請求項１に記載のソフトウェア管理装置。
【請求項４】
前記プリプロセッサ部は、
（Ａ）前記流用先の製品で定義されているマクロを用いて、当該流用先の製品のプリプロセスを行い、
前記第二のデータベースは、
前記（Ａ）のプリプロセスにより生成されたプリプロセス後コードを、前記流用先の製品のプリプロセス後コードとして、保存する、
ことを特徴とする請求項３に記載のソフトウェア管理装置。
【請求項５】
不具合水平展開部を、さらに備えており、
前記不具合水平展開部は、
（Ｂ）前記第一のデータベースから前記流用元の製品で定義されていたマクロを取得すると共に、修正された前記流用先の製品を取得し、
（Ｃ）前記（Ｂ）において取得した、前記マクロおよび前記修正された流用先の製品を、前記プロプロセッサ部に出力し、
前記プリプロセッサ部は、
（Ｄ）前記（Ｃ）において出力された前記マクロを用いて、前記修正された流用先の製品をプリプロセスし、
（Ｅ）前記（Ｃ）においてプリプロセスされたコードを、前記不具合水平展開部に出力し、
前記不具合水平展開部は、
前記第二のデータベースに格納されている前記流用元の製品のプリプロセス後のコードを、前記（Ｅ）で出力されたコードに上書きする、
ことを特徴とする請求項３に記載のソフトウェア管理装置。
【請求項６】
一時保存コード取得部を、さらに備えており、
前記一時保存コード取得部に、前記流用先の製品が一時保存されたとき、
前記プリプロセッサ部は、
（Ｇ）前記一時保存コード取得部から一時保存された前記流用先の製品を取得し、
（Ｈ）前記第一のデータベースから、前記流用元の製品で定義されていたマクロを取得し、
（Ｉ）前記（Ｈ）で取得した前記マクロを用いて、前記（Ｇ）で取得した前記流用先の製品をプリプロセスする、仮プリプロセス処理を実施し、
前記コード比較部は、
前記第二のデータベースから取得した前記流用元の製品のプリプロセス後のコードと、前記プリプロセッサ部から取得した前記仮プリプロセス後のコードとを、比較する、
ことを特徴とする請求項３に記載のソフトウェア管理装置。
【請求項７】
前記マクロ比較部による比較の結果、前記流用先の製品に定義されておらず、前記流用元の製品で定義されているマクロが検出されたときに、エラーメッセージを表示する比較結果表示部を、さらに備えている、
ことを特徴とする請求項１に記載のソフトウェア管理装置。
【請求項８】
前記コード比較部による比較の結果、前記流用元の製品のプリプロセス後のコードと前記プリプロセス後のコードとが一致しないときに、エラーメッセージを表示する比較表示部を、さらに備えている、
ことを特徴とする請求項３に記載のソフトウェア管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コードの流用などを用いて製品系列のソフトウェアを開発する際の、ソフトウェア管理装置に関するものである。
【背景技術】
【０００２】
製品系列のソフトウェア開発では、コードの流用等を行い、新規のコード作成が少なくなるような取り組みが行われている。しかし、一般的にはコードの流用を行っても、流用元のコードと流用先のコードとは別々の管理がされてしまっている場合が多い。
【０００３】
そこで、例えば特許文献１においては、予め想定される各製品の機能を見越してマクロをプログラム内に記述し、マクロに手動で対応付けられた機能を選択している。これにより、単一のコードのマスターから機能を選択して、複数の製品系列のコードを生成している。
【０００４】
また、特許文献２においては、ファイル自身に履歴情報を持たせ、コードを変更した際にマクロを自動で挿入する。これにより、単一のコードのマスターだけでファイルの履歴が管理できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−１０２３５９号公報
【特許文献２】特開２００６−２６８７７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１および特許文献２に開示されているソフトウェア管理装置では、機能とマクロとを自動で対応づけることができない。たとえば、特許文献１に係る技術では、新規に追加された機能に対して、マクロを割り付けることができない。また、特許文献２に係る技術では、マクロのみを管理しており、マクロと機能とを対応づけることはしていない。
【０００７】
そこで、本発明は、新規に追加された機能に対しても、その機能とマクロとを自動で対応付けすることができるソフトウェア管理装置を提供することを目的とする。さらに、コードを流用した際に、流用先のコードから流用元のコードも出力できることを保証することができるソフトウェア管理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的を達成するために、本発明に係る請求項１に記載のソフトウェア管理装置は、プログラムの集合体である製品の流用を管理するソウトウェア管理装置であって、流用先の製品において定義されている、第一のマクロを収集するマクロ収集部と、流用元の製品において定義されている第二のマクロを取得し、前記第一のマクロと前記第二のマクロとを比較するマクロ比較部と、前記マクロ比較部による前記比較の結果に応じて、前記流用先の製品で追加された機能とマクロとを対応させて格納する第一のデータベースとを、備えている。
【発明の効果】
【０００９】
本発明の請求項１に記載のソフトウェア管理装置では、マクロ比較部は、第一のマクロと第二のマクロとを比較する。さらに、第一のデータベースには、前記比較の結果得られる、流用先の製品で追加された機能とマクロとを対応させて格納される。
【００１０】
したがって、流用元の製品を流用して流用先の製品を作成した際に新規に機能を追加したとしても、当該機能と追加マクロとを自動で対応付けさせて、情報として管理することが可能となる。よって、機能の選択で製品を生成できる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１に係るソフトウェア管理装置の構成を示すブロック図である。
【図２】流用元の製品Ｂのコードの例を示す図である。
【図３】流用先の製品Ｃ（コードのマスター１１）のコードの例を示す図である。
【図４】各製品マクロＤＢ１２に格納されているデータのフォーマット例を示す図である。
【図５】製品Ｂの作成の際に流用元となった、製品Ａのプリプロセス後のコードの例を示す図である。
【図６】製品Ｃの作成の際に流用元となった、製品Ｂのプリプロセス後コードの例を示す図である。
【図７】マクロ収集部４０における動作を説明するための動作フロー図である。
【図８】マクロ比較部５０における動作を説明するための動作フロー図である。
【図９】上書き後の、各製品マクロＤＢ１２におけるデータのフォーマット例を示す図である。
【図１０】流用元コード保証部３０における動作を説明するための動作フロー図である。
【図１１】図３に示したコードを、図４のビルド設定で定義されたマクロを用いて、プリプロセスを行った後のコードを示す図である。
【図１２】流用先の製品Ｃのコードを、流用元の製品Ｂで定義されているマクロでプリプロセスした後のコードを示す図である。
【図１３】実施の形態２に係るソフトウェア管理装置の構成を示すブロック図である。
【図１４】実施の形態２に係るソフトウェア管理装置の動作を説明するための動作フロー図である。
【図１５】実施の形態３に係るソフトウェア管理装置の構成を示すブロック図である。
【図１６】実施の形態３に係るソフトウェア管理装置の動作を説明するための動作フロー図である。
【発明を実施するための形態】
【００１２】
本願における「製品」とは、システム或いは装置などにおける所定の閉じた動作を制御するプログラムの集合体であり、コードと、マクロが定義されている場合には当該マクロの定義とから構成されている。
【００１３】
たとえば、当該製品は、マクロが定義された少なくとも１以上のファイル（ビルド設定が記述されたファイル）と、コードが記述されている少なくとも１以上のファイルから構成される。または、当該製品は、マクロの定義とコードとが記述された複数のファイルから構成されていても良い。
【００１４】
また、本願における「マクロ」とは，コードで条件分岐をする仕組みのことである。
【００１５】
たとえば、図２の「Ｃ０３」のようなＣ言語のコードがあった場合に、図２の「Ｂ０３」のようにビルド設定で「ＢＢＢ」が定義されていたとする。この場合には、「Ｃ０３」のコードにおいて、「＃ｉｆｄｅｆ  ＢＢＢ」と「＃ｅｌｓｅ」との間のコードが有効となり、「＃ｅｌｓｅ」と「＃ｅｎｄｉｆ」との間のコードが無効となる。つまり、図６に示すように、「ｈｏｇｅ２１（）」；と「ｈｏｇｅ２２（）；」とを含むコードが出力される。
【００１６】
また、図２において、ビルド設定で「ＢＢＢ」が定義されていないとする。この場合には、「＃ｉｆｄｅｆ  ＢＢＢ」と「＃ｅｌｓｅ」との間のコードが無効となり、「＃ｅｌｓｅ」と「＃ｅｎｄｉｆ」との間のコードが有効になる。つまり、図５に示すように、「ｈｏｇｅ２（）；」を含むコードが出力される。
【００１７】
ここで、Ｃ言語では、「＃ｉｆｄｅｆ  ＢＢＢ」は、「＃ｉｆ  ｄｅｆｉｎｅｄ（ＢＢＢ）」と等価である。なお、以降の説明については、Ｃ言語を例にとり説明を行うが、本発明はマクロを使用できる言語全般を対象としている。
【００１８】
また、本願における「流用元」、「流用先」とは次のような意味で使用されている。
【００１９】
新たな製品を既に作成されている製品を用いて作成するとき、当該「新たな製品」が「流用先」の製品となる。これに対して、当該「既に作成されている製品」が「流用元」の製品となる。たとえば、装置が製品Ａを用いて制御されている場合に、当該装置の動作が変更または追加がされたとする。この場合には、新規のコード作成を極力行わないように、製品Ａを流用しつつ、新たなマクロを付加して製品Ｂを作成する。そして、当該製品Ｂを用いて、動作が変更された新たな製品の制御を行う。
【００２０】
また、たとえば、製品Ａを流用して製品Ｂを作成し、製品Ｂを流用して製品Ｃを作成したとする。当該場合における、製品Ａ，Ｂ，Ｃの開発を、製品系列のソフトウェア開発と称する。
【００２１】
本願は、上記の例では、製品Ａ，Ｂ，Ｃを管理するソフトウェア管理装置に関するものである。なお、下記各実施の形態において、ソフトウェア管理装置１００，２００，３００は、コードのマスター１１，１５を作成する際に使用される流用元の製品を、（たとえばユーザの外部設定等により）予め認識することができる構成を有している。
【００２２】
以下、この発明をその実施の形態を示す図面に基づいて具体的に説明する。
【００２３】
＜実施の形態１＞
図１は、本実施の形態１によるソフトウェア管理装置１００の構成図である。
【００２４】
本実施の形態に係るソフトウェア管理装置１００は、図１に示すように、各製品マクロＤＢ１２、各製品プリプロセス後コードＤＢ１３、機能−マクロ対応付け部２０、流用元コード保証部３０および比較結果表示部８０から構成されている。
【００２５】
各製品マクロＤＢ（第一のデータベースと把握できる）１２には、各製品で新規に追加された機能とマクロとの対応が保存される。また、各製品プリプロセス後コードＤＢ（第二のデータベースと把握できる）１３には、各製品のマクロによる条件分岐が行われた後のコードが保存される。つまり、各製品プリプロセス後コードＤＢ１３には、各製品のマクロを用いたプリプロセス後のコードが保存される。
【００２６】
機能−マクロ対応付け部２０は、新規に追加された機能とマクロとの対応付けを行うためのブロックである。ここで、当該機能−マクロ対応付け部２０の内部機能は、マクロ収集部４０およびマクロ比較部５０から構成されている。
【００２７】
また、流用元コード保証部３０は、コードを流用した際に流用先のコードから流用元のコードも出力できることを保証するためのブロックである。ここで、当該流用元コード保証部３０の内部機能は、プリプロセッサ部６０およびコード比較部７０から構成されている。
【００２８】
比較結果表示部８０は、機能−マクロ対応付け部２０で行われる比較結果および流用元コード保証部３０で行われる比較結果を、各々表示する。
【００２９】
上記機能−マクロ対応付け部２０において、マクロ収集部４０では、流用元の製品から作成された流用先の製品において定義されている、マクロ（第一のマクロと把握できる）を収集する。より具体的に、マクロ収集部４０では、コードのマスター１１に定義されているマクロを収集する。ここで、当該コードのマスター１１とは、製品系列のソフトウェア開発における最新の製品のことである。
【００３０】
上記機能−マクロ対応付け部２０において、マクロ比較部５０では、各製品マクロＤＢ１２から取得した流用元の製品で定義されているマクロと、マクロ収集部４０から取得した流用先の製品で定義されているマクロとを比較する。そして、マクロ比較部５０では、当該比較処理を通じて、流用元の製品には定義されておらず、流用先の製品には定義されているマクロ（追加マクロと把握できる）を抽出する。当該追加マクロは、上記第一のマクロにおける上記第二のマクロ以外のマクロである。なお、当該追加マクロは、流用先の製品で追加された機能と対応させて、各製品マクロＤＢ１２に格納さする。
【００３１】
また、上記流用元コード保証部３０において、プリプロセッサ部６０では、マクロによる条件分岐を行われた後のコードを、出力する。つまり、プリプロセッサ部６０では、マクロを用いたプリプロセス処理が実行され、当該プリプロセス処理後のコードを出力する。
【００３２】
上記流用元コード保証部３０において、コード比較部７０では、各製品プリプロセス後コードＤＢ１３から取得した流用元のプリプロセス後コードと、プリプロセッサ部６０から取得したコードとを比較し、一致しているか否かを判定する。
【００３３】
次に、本実施の形態に係るソフトウェア管理装置１００の動作について説明する。
【００３４】
ここで、前提として、マスターのコード１１については、手動で記述（作成）することとする。また、流用元と流用先で変更が生じる部分については、マクロをつけることが一般的である。したがって、ここでの説明でも、変更が生じる部分については、マクロを定義する。そして、新たに追加されたマクロが定義されていれば流用先のコード、新たに追加されたマクロが定義されていなければ流用元のコードになるコーディングルールとする。
【００３５】
具体例を挙げてコーディングルールを説明すると、たとえば図３において、「ビルド設定：Ｂ０４」において、マクロ「ＢＢＢ」、「ＣＣＣ」が定義されている。この場合には、「＃ｉｆｄｅｆ  ＢＢＢ」から「＃ｅｌｓｅ  ＢＢＢ」までのコードが有効となり、「＃ｅｌｓｅ  ＢＢＢ」から「ｅｎｄｉｆ  ＢＢＢ」までのコードが無効となる。さらに、「＃ｉｆｄｅｆ  ＣＣＣ」から「＃ｅｌｓｅ  ＣＣＣ」までのコードが有効となり、「＃ｅｌｓｅ  ＣＣＣ」から「ｅｎｄｉｆ  ＣＣＣ」までのコードが無効となる。したがって、コーディングルールよると図１２となる。
【００３６】
また図３において、「ビルド設定：Ｂ０４」において、マクロ「ＢＢＢ」のみが定義されていたとする。この場合には、「＃ｉｆｄｅｆ  ＢＢＢ」から「＃ｅｌｓｅ  ＢＢＢ」までのコードが有効となり、「＃ｅｌｓｅ  ＢＢＢ」から「ｅｎｄｉｆ  ＢＢＢ」までのコードが無効となる。さらに、「＃ｉｆｄｅｆ  ＣＣＣ」から「＃ｅｌｓｅ  ＣＣＣ」までのコードが無効となり、「＃ｅｌｓｅ  ＣＣＣ」から「ｅｎｄｉｆ  ＣＣＣ」までのコードが有効となる。したがって、コーディングルールよると図６となる。
【００３７】
また図３において、「ビルド設定：Ｂ０４」において、マクロ「ＣＣＣ」のみが定義されていたとする。この場合には、「＃ｉｆｄｅｆ  ＢＢＢ」から「＃ｅｌｓｅ  ＢＢＢ」までのコードが無効となり、「＃ｅｌｓｅ  ＢＢＢ」から「ｅｎｄｉｆ  ＢＢＢ」までのコードが有効となる。したがって、コーディングルールよると図５となる。
【００３８】
ここで、マクロの定義については、コードとは別のビルド設定に記述しても良く、またコード内に記述しても良い。本願の説明では、前者のビルド設定に記述する場合について説明する。
【００３９】
なお、動作の具体例を説明する際には、以下の前提を採用する。
【００４０】
製品Ａを用いて製品Ｂを作成する（このケースでは、製品Ａが流用元となり、製品Ｂが流用先となる）。また、製品Ｂを用いて製品Ｃを作成する（このケースでは、製品Ｂが流用元となり、製品Ｃが流用先となる）。以下で具体例を説明する場合には、製品Ｂを流用して製品Ｃを作成した後を、例にとり説明を行う。したがって、特に断りがない限り、「流用元」と称する場合には、製品Ｂのことを示し、「流用先」と称する場合には、製品Ｃを示す。この場合には、製品Ｃがコードのマスター１１となる。
【００４１】
ここで、製品Ｂのコードを図２に示し、製品Ｃのコードを図３に示す。図２，３の例では、製品Ｂを流用して製品Ｃを作成する際に、「ｈｏｇｅ２１（）」という関数を、「ｈｏｇｅ２１１（）」という関数に置き換えている。上記の通り、製品Ｂは既に作成済であり、マクロ「ＢＢＢ」をつけて製品Ａを流用している。上記のように、各製品マクロＤＢ１２には、流用元の製品Ｂにおいて定義されているマクロ（第二のマクロと把握できる）と、製品Ｂにおいて追加された機能との対応が、情報として格納される。したがって、上記例では、図４に示すように、製品Ａを流用し製品Ｂを作成する際に追加されたマクロ「ＢＢＢ」と、製品Ｂの作成の際に追加された新機能「ｈｏｇｅ２機能の分割」との対応が、各製品マクロＤＢ１２に既に保存されている。
【００４２】
また、各製品プリプロセス後コードＤＢ１３には、製品Ｂの作成の際に流用元となった製品Ａのプリプロセス後のコード（図５）と、製品Ｃの作成の際に流用元となった製品Ｂのプリプロセス後コード（図６）とが、既に保存されている。
【００４３】
さて、前記前提において、まず、機能−マクロ対応付け部２０は、コードのマスター１１を取得する。そして、機能−マクロ対応付け部２０は、当該取得したコードのマスター１１を、マクロ収集部４０に渡す。つまり、製品Ｂを流用して製品Ｃを作成した例では、コードのマスター１１は製品Ｃであるので、機能−マクロ対応付け部２０は図３に示すコードを取得し、マクロ収集部４０に渡す。
【００４４】
マクロ収集部４０は、コードのマスター１１で定義されているマクロを収集する。当該マクロ収集部４０の詳細な動作フローの一例を、図７に示す。
【００４５】
図７の例では、マクロ収集部４０は、ビルド設定においてマクロが定義されているファイルを抽出する（ステップＳ１）。ここで、図３と異なり、ビルド設定が規定されているファイルが複数存在する場合には、当該複数のファイルを抽出する。その後、ステップＳ１で抽出した各ファイルにおいて、ビルド設定で定義されている各マクロを抽出する（ステップＳ２）。ステップＳ１，Ｓ２から分かるように、マクロ収集部４０では、コードマスター１１で定義されている全てのマクロを抽出する。当該マクロの抽出は、図７の方法に限らず、最終的にコードマスター１１で定義されている全てのマクロを抽出できるなら、他の方法を採用しても良い。マクロ収集部４０は、抽出した各マクロを、マクロ比較部５０に対して出力する（ステップＳ３）。
【００４６】
上記製品Ｂを流用して製品Ｃを作成した例では、図７の動作フローにより、マクロ収集部４０は、図３のコードからマクロ「ＢＢＢ」と「ＣＣＣ」とを抽出し、これらのマクロをマクロ比較部５０に対して出力する。
【００４７】
マクロ比較部５０では、流用元の製品Ｂで定義されたマクロと、流用先の製品Ｃで定義されたマクロとを比較する。そして、マクロ比較部５０は、流用により追加されたマクロ、すなわち流用元の製品Ｂに定義されてなく、流用先の製品Ｃに定義されているマクロを抽出する。マクロ比較部５０の詳細な動作フローを図８に示す。
【００４８】
図８において、マクロ比較部５０は、まず、各製品マクロＤＢ１２から、流用元の製品Ｂで定義されたマクロを取得する（ステップＳ１１）。他方、マクロ比較部５０は、マクロ収集部４０から、流用先の製品Ｃで定義されたマクロ（図７のステップＳ３で出力されたマクロ）を取得する（ステップＳ１２）。次に、マクロ比較部５０は、ステップＳ１１で取得したマクロと、ステップＳ１２で取得したマクロとを比較する（ステップＳ１３）。つまり、マクロ比較部５０は、流用元の製品Ｂで定義されたマクロと、流用先の製品Ｃで定義されたマクロとを比較する（ステップＳ１３）。
【００４９】
そして、マクロ比較部５０は、上記比較処理通じて、流用元の製品Ｂで定義されたマクロと同じマクロが、流用先の製品Ｃでも定義されているか否かを判定する（ステップＳ１４）。ここで、当該ステップＳ１４の判定処理は、流用元の製品Ｂで定義されたマクロの数だけ、繰り返し実施される。
【００５０】
ステップＳ１４の結果、流用先の製品Ｃで定義されたマクロで、流用元の製品Ｂで定義されていないマクロが残る。したがって、流用元の製品Ｂで定義されているマクロが全て、流用先の製品Ｃに存在する場合には（ステップＳ１４で「Ｙ」）、マクロ比較部５０は、上記残存したマクロを、製品Ｂを流用して製品Ｃを作成した際に追加された追加マクロとして、各製品マクロＤＢ１２格納する（ステップＳ１５）。
【００５１】
ここで、事前に、各製品マクロＤＢ１２には、マクロと機能との関係を示すテーブルが格納されている。したがって、各製品マクロＤＢ１２は、当該テーブルと上記追加マクロとを用いて、所定の機能を抽出する。そして、各製品マクロＤＢ１２は、当該所定の機能と追加マクロとを対応させて、保存する（ステップＳ１５）。
【００５２】
ここで、上記説明から分かるように、追加マクロとは、製品Ｂを流用して製品Ｃ（コードのマスター１１）を作成した際に新たに追加されたマクロのことである。これに対して、当該所定の機能は、製品Ｂを流用して製品Ｃを作成した際に新たに追加された機能のことである。
【００５３】
上記と異なり、流用先の製品Ｃに定義されておらず、流用元の製品Ｂで定義されているマクロが検出されたとする。この場合には、ステップＳ１４で「Ｎ」となり、コードの流用のやり直しを指示する（つまり、製品Ｂを流用したコードのマスター１１の再作成を指示する）エラーメッセージを、比較結果表示部８０に表示する（ステップＳ１６）。当該コードのマスター１１の再作成を指示するのは、コードの流用時に前提となっているコーディングルールに従っていないからである。
【００５４】
上記図８の動作フローを、製品Ｂを流用して製品Ｃを作成した例で説明すると、流用元の製品Ｂで定義されているマクロは「ＢＢＢ」である（図２，４）。また、流用先の製品Ｃで定義されているマクロは、「ＢＢＢ」と「ＣＣＣ」である（図３）。したがって、マクロ比較部５０は、当該「ＢＢＢ」と、当該「ＢＢＢ」および当該「ＣＣＣ」とを、比較する。当該例では、流用元の製品Ｂで定義されているマクロが全て流用先の製品Ｃに存在するので、流用先の製品Ｃで定義されていて、流用元の製品Ｂで定義されていないマクロ「ＣＣＣ」を追加マクロとして各製品マクロＤＢ１２に保存する。ここで、上記のように、当該追加マクロ「ＣＣＣ」は、製品Ｃで追加された機能と対応させて、各製品マクロＤＢ１２に保存される（図９）。
【００５５】
ここで、図４に示すデータを、図９に示すデータに上書きして各製品マクロＤＢ１２に保存される。各製品マクロＤＢ１２に保存される図９のデータは、製品Ａを流用し製品Ｂを作成する際に追加されたマクロ「ＢＢＢ」と、製品Ｂの作成の際に追加された新機能「ｈｏｇｅ２機能の分割」との対応関係を、情報として含んでいる。さらに、当該図９のデータは、製品Ｂを流用し製品Ｃを作成する際に追加されたマクロ「ＣＣＣ」と、製品Ｃの作成の際に追加された新機能「ｈｏｇｅ２１機能の高速化」との対応関係を、情報として含んでいる。
【００５６】
また、図９のデータより、製品Ｂにおいては、マクロ「ＢＢＢ」が定義されていることが分かる。また、図９のデータより、製品Ｃにおいては、マクロ「ＢＢＢ」とマクロ「ＣＣＣ」とが定義されていることが分かる。図９のデータ格納形式では、一の製品を流用して他の製品を作成したときに発生する、追加マクロが情報として格納される。したがって、当該のデータの格納形式を採用する場合には、所定の製品で定義されているマクロとは、一連の流用により当該所定の製品が作成されるまでに追加された各マクロの各々となる。
【００５７】
以上のように、本実施の形態に係るソフトウェア管理装置１００では、マクロ比較部５０は、マクロ収集部４０から流用先の製品Ｃで定義されているマクロ（第一のマクロ）を取得し、各製品マクロＤＢ１２から流用元の製品Ｂで定義されていたマクロ（第二のマクロ）を取得する。そして、マクロ比較部５０は、第一のマクロと第二のマクロとを比較する。さらに、各製品マクロＤＢ１２には、当該比較の結果得られる、第一のマクロにおける第二のマクロ以外のマクロである追加マクロが、流用先の製品Ｃで追加された機能と対応させて格納される。
【００５８】
したがって、製品Ｂを流用して製品Ｃを作成した際に新規に機能を追加したとしても、当該機能と追加マクロとを自動で対応付けさせて、情報として管理することが可能となる。よって、機能の選択で製品Ｃを生成できる。
【００５９】
さて、当該機能とマクロが自動対応付けに加えて、流用先のコードのマスター１１から流用元のコードが出力できるなら、ソフトウェア管理装置１００はより有益であり、より実用的なものとなる。そこで、本実施の形態に係るソフトウェア管理装置１００は、図１に示すように、流用元コード保証部３０をさらに備えている。
【００６０】
当該流用元コード保証部３０は、流用元の製品Ｂのプリプロセス後コードと、流用先の製品Ｃを流用元の製品Ｂで定義されているマクロを用いてプリプロセスした後のコードとが、一致するか否かの判定を行う。当該流用元コード保証部３０の詳細な動作フローを、図１０を用いて説明する。
【００６１】
図１０において、流用元コード保証部３０は、まず、各製品プリプロセス後コードＤＢ１３から、流用元の製品Ｂのプリプロセス後コードを取得する（ステップＳ２１）。次に、流用元コード保証部３０は、各製品マクロＤＢ１２から、流用元の製品Ｂで定義されているマクロを取得する（ステップＳ２２）。次に，プリプロセッサ部６０は、ステップＳ２２で取得したマクロを用いて、流用先の製品Ｃ（コードのマスター１１）のプリプロセスを行う（ステップＳ２３）。次に、コード比較部７０は、ステップＳ２１で取得した流用元の製品Ｂのプリプロセス後コードと、プリプロセッサ部６０から取得した、ステップＳ２３後のコードとを比較する（ステップＳ２４）。
【００６２】
ステップＳ２４の比較処理の結果、ステップＳ２１で取得したコードと、ステップＳ２３のプリプロセス後のコードとが、一致していたとする（ステップＳ２４で「Ｙ」）。この場合には、流用先の製品Ｃ（コードのマスター１１）から流用元の製品Ｂのコードも出力できることになる。したがって、プリプロセッサ部６０は、流用先の製品Ｃ（コードのマスター１１）で定義されているマクロを用いて、当該流用先の製品Ｃのプリプロセスを行う（ステップＳ２５）。その後、プリプロセッサ部６０は、ステップＳ２５で生成したプリプロセス後コードを、製品Ｃのプリプロセス後コードとして、各製品プリプロセス後コードＤＢ１３に保存する（ステップＳ２６）。
【００６３】
なお、上記と異なり、ステップＳ２４の比較の結果、ステップＳ２１で取得したコードと、ステップＳ２３のプリプロセス後のコードとが、一致していなかったとする（ステップＳ２４で「Ｎ」）。この場合には、コードの流用のやり直しを指示する（つまり、製品Ｂを流用したコードのマスター１１の再作成を指示する）エラーメッセージを、比較結果表示部８０に表示する（ステップＳ２７）。当該コードのマスター１１の再作成を指示するのは、コードの流用時に前提となっているコーディングルールに従っていないからである。
【００６４】
上記図１０の動作フローを、製品Ｂを流用して製品Ｃを作成した例で説明する。当該例では、ステップＳ２１で取得される、流用元の製品Ｂのプリプロセス後コードは、図６となる。当該図６のコードは、流用元の製品Ｂのコード（図２の「コード：Ｃ０３」のコード）を、当該流用元の製品Ｂで定義されているマクロ（図２の「ビルド設定：Ｂ０３」における「ＢＢＢ」）を用いて、プリプロセスした後のコードである。前記の通り、当該流用元の製品Ｂのプリプロセス後コードは、事前に各製品プリプロセス後ＤＢ１３に格納されている。さらに、ステップＳ２２で取得される、流用元の製品Ｂで定義されるマクロは、各製品マクロＤＢ１２に格納されている図９のデータより、「ＢＢＢ」である。
【００６５】
したがって、ステップＳ２３におけるプリプロセス後のコード、つまり流用先の製品Ｃのコード（図３の「コード：Ｃ０４」のコード）を流用元の製品Ｂで定義されているマクロ（図２の「ビルド設定：Ｂ０３」における「ＢＢＢ」）でプリプロセスした後のコードは、図１１となる。図６と図１１との比較より分かるように、両コードは、一致している。したがって、流用先のコードから流用元のコードが出力できることが保証されたことになる。
【００６６】
そして、図３の「コード：Ｃ０４」のコードを、図４の「ビルド設定：Ｂ０３」におけるマクロ「ＢＢＢ」および「ＣＣＣ」を用いて、プリプロセスを行う。当該プリプロセスの結果、図１２に示す。当該図１２に示すプリプロセス後コードは、製品Ｃのプリプロセス後コードとして、各製品プリプロセス後コードＤＢ１３に保存される。
【００６７】
以上のように、本実施の形態に係るソフトウェア管理装置１００では、コード比較部７０は、各製品プリプロセス後コードＤＢ１３から取得した、流用元の製品Ｂのプリプロセス後のコードと、プリプロセッサ部６０から取得した、ステップＳ２３におけるプリプロセス後のコードとを、比較する。
【００６８】
したがって、流用先の製品Ｃ（コードのマスター１１）から、流用元の製品Ｂのコードを出力できることを保証することが可能となる。当該保証された場合には、単一のコードのマスター１１から複数の製品系列のコードを出力できるため、コードの保守性を向上させることができる。
【００６９】
また、本実施の形態では、プリプロセッサ部６０は、流用先の製品Ｃ（コードのマスター１１）で定義されているマクロを用いて、流用先の製品Ｃのプリプロセスを行い、当該プリプロセスにより生成されたコードを、各製品プリプロセス後コードＤＢ１３において、流用先の製品Ｃのプリプロセス後コードとして保存する。
【００７０】
したがって、最新の製品Ｃのプリプロセス後のコードも各製品プリプロセス後コードＤＢ１３に格納されるので、次の製品開発の際に、製品Ｃのプリプロセス後のコードを用いることができる。
【００７１】
また、本実施の形態では、ステップＳ１６およびステップ２７において、比較結果表示部８０はエラーメッセージを表示する。
【００７２】
したがって、流用先の製品Ｃ（コードのマスター１１）がコーディングルールに従って作成されていなかったことを、ユーザは容易に認識することができる。これにより、ユーザは、製品Ｂを流用した製品Ｃの作成をやり直すことが可能となる。
【００７３】
＜実施の形態２＞
本実施の形態に係るソフトウェア管理装置２００の構成を、図１３に示す。
【００７４】
図１と図１３との比較から分かるように、本実施の形態に係るソフトウェア管理装置２００は、実施の形態１に係るソフトウェア管理装置１００に、不具合水平展開部９０をさらに備える構成となっている。
【００７５】
実施の形態１において、コードのマスター１１（製品Ｃ）の開発が完了するまでの動作を説明した。しかしながら、製品Ｃの開発が完了したけれども、その後に当該製品Ｃにおいて不具合が発生することも想定される。このように事後的に不具合が発生した場合には、ユーザは、不具合の原因となっている製品Ｃのコード中の関数について修正する必要がある。ここで、修正で追加された関数を製品によらず常に有効にする必要があるため、当該関数のマクロを常に定義しておくことが必要である。
【００７６】
本実施の形態では、当該修正後のコードのマスター１１（製品Ｃ）を用いてプリプロセス処理を行い、既に各製品プリプロセス後コードＤＢ１３に格納されている各製品のプリプロセス後コードを、当該プリプロセス後のコードに各々上書きすることを特徴としている。
【００７７】
以下、本実施の形態に係るソフトウェア管理装置２００の動作について、図１４の動作フローを用いて説明する。
【００７８】
なお、本実施の形態では、事後的に不具合が発生し、その後、ユーザがコードのマスター１１（製品Ｃ）を修正した後の動作を説明する。また、各製品プリプロセス後コードＤＢ１３には、実施の形態１で説明したように、製品Ａのプリプロセス後のコードおよび製品Ｂのプリプロセス後のコードが既に、格納されている。そして、ソフトウェア管理装置２００は、たとえば各製品プリプロセス後コードＤＢ１３を参照することにより、当該格納の状況を事前に認識できる構成となっている（これにより、後述するステップＳ３２で取得すべき、製品で定義されているマクロが判断できる）。
【００７９】
また、コードのマスター１１の修正についてコードの変更が伴うが、製品系列の開発に伴うコードの変更とは別の、当該修正と分かるマクロを付与することとする。そして、各製品マクロＤＢ１２では、当該付与されたマクロを管理しないこととする。
【００８０】
図１４において、まず、不具合水平展開部９０は、修正後のコードのマスター１１（流用先となる修正された製品Ｃ）を取得する（ステップＳ３１）。次に、不具合水平展開部９０は、各製品マクロＤＢ１２から、たとえば製品Ａで定義されていたマクロを取得する（ステップＳ３２）。ここで、図９から分かるように、製品Ａではマクロが定義されていないので、ステップＳ３２では、製品Ａについては、「マクロなし」という情報を取得する。その後、不具合水平展開部９０は、ステップＳ３１で取得したマクロおよびステップＳ３２で取得したマクロを、プリプロセッサ部６０に対して出力する。
【００８１】
次に、プリプロセッサ部６０は、ステップＳ３１で取得したコードのマスター１１（修正された製品Ｃ）、およびステップＳ３２で取得したマクロ（ここでは、製品Ａではマクロは定義されていないので、製品Ａで定義されているマクロ無しという情報）を、取得する。そして、プリプロセッサ部６０は、前記取得したマクロを用いて（ここでは、製品Ａについて定義されているマクロが無いという条件で）、コードのマスター１１をプリプロセスする（ステップＳ３３）。その後、プリプロセッサ部６０は、ステップＳ３３におけるプリプロセスにより生成されたプリプロセス後コードを、不具合水平展開部９０に対して出力する。
【００８２】
不具合水平展開部９０は、ステップＳ３３で生成されたプリプロセス後のコードを取得する。そして、不具合水平展開部９０は、各製品プリプロセス後コードＤＢ１３に既に格納されている製品Ａのプリプロセス後のコードを、ステップＳ３３で生成されたプリプロセス後のコードに上書きする（ステップＳ３４）。
【００８３】
次に、ステップＳ３２に戻り、不具合水平展開部９０は、各製品マクロＤＢ１２から、製品Ｂで定義されていたマクロを取得する（ステップＳ３２）。ここで、製品Ｂで定義されているマクロは、図９から分かるように「ＢＢＢ」である。その後、不具合水平展開部９０は、ステップＳ３１で取得したマクロおよびステップＳ３２で取得したマクロを、プリプロセッサ部６０に対して出力する。
【００８４】
次に、プリプロセッサ部６０は、ステップＳ３１で取得したコードのマスター１１（修正された製品Ｃ）、およびステップＳ３２で取得したマクロ「ＢＢＢ」を、取得する。そして、プリプロセッサ部６０は、前記取得したマクロ「ＢＢＢ」を用いて、コードのマスター１１をプリプロセスする（ステップＳ３３）。その後、プリプロセッサ部６０は、ステップＳ３３におけるプリプロセスにより生成されたプリプロセス後コードを、不具合水平展開部９０に対して出力する。
【００８５】
不具合水平展開部９０は、ステップＳ３３で生成されたプリプロセス後のコードを取得する。そして、不具合水平展開部９０は、各製品プリプロセス後コードＤＢ１３に既に格納されている製品Ｂのプリプロセス後のコードを、ステップＳ３３で生成されたプリプロセス後のコードに上書きする（ステップＳ３４）。
【００８６】
以上のように、各製品プリプロセス後コードＤＢ１３に格納されている、既に流用元となった製品分のプリプロセッサ後コード分だけ、ステップＳ３２〜Ｓ３４の動作を繰り返し行う。
【００８７】
なお、修正後のコードのマスター１１に対して、実施の形態１で説明した図１０のステップＳ２５、Ｓ２６の動作を行う。つまり、プリプロセッサ部６０は、流用先の製品Ｃ（上記修正後のコードのマスター１１）で定義されているマクロを用いて、当該流用先の製品Ｃのプリプロセスを行う。その後、プリプロセッサ部６０は、前記で生成したプリプロセス後コードを、製品Ｃのプリプロセス後コードとして、各製品プリプロセス後コードＤＢ１３に保存する。
【００８８】
また、上記では、製品Ａについて、ステップＳ３２〜Ｓ３４の動作を行った後に、製品Ｂについて、ステップＳ３２〜ステップＳ３４の動作を行っている。しかし、当該順に限定されず、任意に順番は変更できる。
【００８９】
以上のように、本実施の形態に係るソフトウェア管理装置２００では、不具合水平展開部９０は、流用元の製品で定義されていたマクロを取得すると共に、修正された流用先の製品（修正されたコードのマスター１１）を取得し、これらをプロプロセッサ部６０に出力する。そして、プリプロセッサ部６０では、前記出力されたマクロを用いて、前記修正された流用先の製品（修正されたコードのマスター１１）をプリプロセスし、生成されたプリプロセス後コードを不具合水平展開部９０に出力する。さらに、不具合水平展開部９０では、各製品プリプロセス後コードＤＢ１３に格納されている流用元の製品のプリプロセス後のコードを、前記で出力されたプリプロセス後コードに上書きする。
【００９０】
したがって、コードのマスター１１を修正するだけで、全ての製品Ａ，Ｂの不具合が自動的に修正され、不具合の水平展開が容易になる。たとえば、コードのマスター１１が単一でなく、各製品のコードがそれぞれ独立していたなら、コードのマスター１１に対する修正が影響するか否か、製品毎に確認する必要がある。しかしながら、本願発明では、コードのマスター１１が単一であるため、前記確認をする必要がなく、上記修正の影響がある製品のプリプロセス後コードだけが自動的に修正（上書き）される。
【００９１】
なお、上書き保存されたプリプロセス後コードおよび新たに格納されたコードのマスター１１についてのプリプロセス後コードについては、修正された製品の出荷利用される他、次回の流用による開発におけるコード比較部７０での処理の際に用いられる。
【００９２】
＜実施の形態３＞
本実施の形態に係るソフトウェア管理装置３００の構成を、図１５に示す。
【００９３】
図１と図１５との比較から分かるように、本実施の形態に係るソフトウェア管理装置３００は、実施の形態１に係るソフトウェア管理装置１００に、一時保存コード取得部７５をさらに備える構成となっている。
【００９４】
実施の形態１では、コーディング完成後のコードのマスター１１を対象として、コード比較部７０は、ステップＳ２４の比較処理を実施していた（ステップＳ２４）。
【００９５】
これに対して、本実施の形態では、コーディングの途中のコードのマスター１５を対象とした比較処理をもコード比較部７０ができるよう，一時保存コード取得部７５が設けられている。この場合、コード比較部７０は、流用元のプリプロセス後コードと、流用元のマクロを用いて上記コードのマスター１５をプリプロセスした後のコードとの、比較処理を行う。
【００９６】
以下、本実施の形態に係るソフトウェア管理装置３００の動作について、図１６の動作フローを用いて説明する。
【００９７】
図１５において、一時保存コード取得部７５に、コーディング中のコードのマスター（作成途中の流用先の製品と把握できる）１５が一時保存される（ステップＳ４１）。ここで、コーディング中のコードのマスター１５とは、たとえば流用元の製品を流用して流用先の製品（コードのマスター１１）を作成している、当該作成途中のコードである。ステップＳ４１の後に、一時保存コード取得部７５は、当該一時保存されたコードのマスター１５を、流用元コード保証部３０（より具体的に、プリプロセッサ部６０）に対して出力する。
【００９８】
次に、プリプロセッサ部６０は、一時保存コード取得部７５から、一時保存された上記コードのマスター１５を取得する（ステップＳ４２）。一方で、流用元コード保証部３０（より具体的に、コード比較部７０）は、各製品プリプロセス後コードＤＢ１３から、流用元の製品のプリプロセス後コードを取得する（ステップＳ４３）。
【００９９】
さて、プロプロセッサ部６０は、各製品マクロＤＢ１２から、流用元の製品で定義されているマクロを取得する（ステップＳ４４）。その後、プリプロセッサ部６０は、ステップＳ４４で取得した上記マクロを用いて、ステップＳ４２で取得したコードのマスター１５をプリプロセスする、仮プリプロセス処理を実施する（ステップＳ４５）。なお、プロプロセッサ部６０は、当該仮プリプロセス後のコードを、コード比較部７０に対して出力する。
【０１００】
次に、コード比較部７０は、ステップＳ４３で取得した流用元の製品のプリプロセス後のコードと、プリプロセッサ部６０から取得した仮プリプロセス後のコードとを、比較する（ステップＳ４６）。なお、ステップＳ４６における比較の結果（つまり、両コードが一致しているか否か）は、比較結果表示部８０に表示される（ステップＳ４７）。
【０１０１】
上記ステップＳ４２〜ステップＳ４７の一連の処理は、コーディング中のコードのマスター１５が、一時保存コード取得部７５に一時保存（ステップＳ４１）される毎に、実施される。
【０１０２】
以上のように、本実施の形態に係るソフトウェア管理装置３００は、一時保存コード取得部７５に、コーディング途中のコードのマスター１５（作成途中の流用先の製品）が一時保存されたとき、プリプロセッサ部６０は、一時保存されたコードのマスター１５を取得する。そして、プリプロセッサ部６０は、流用元の製品で定義されていたマクロを用いて、当該取得したコードのマスター１５を仮プリプロセス処理する。さらに、コード比較部７０は、各製品プリプロセス後コードＤＢ１３から取得した流用元の製品のプリプロセス後のコードと、仮プリプロセス後のコードとを、比較する。
【０１０３】
したがって、流用元の製品を用いて流用先の製品（コードのマスター）を作成している最中においても、コードの流用時に前提となっているコーディングルールに従って当該作成がなされているか否かを、早期に検出することができる。
【符号の説明】
【０１０４】
１１  コードのマスター、１２  各製品マクロＤＢ、１３  各製品プリプロセス後コードＤＢ、１５  コーディング中のコードのマスター、２０  機能−マクロ対応付け部、３０  流用元コード保証部、４０  マクロ収集部、５０  マクロ比較部、６０  プリプロセッサ部、７０  コード比較部、７５  一時保存コード取得部、８０  比較結果表示部、９０  不具合水平展開部、１００，２００，３００  ソフトウェア管理装置。
【図１】
2010277500.tif 000003
【図２】
2010277500.tif 000004
【図３】
2010277500.tif 000005
【図４】
2010277500.tif 000006
【図５】
2010277500.tif 000007
【図６】
2010277500.tif 000008
【図７】
2010277500.tif 000009
【図８】
2010277500.tif 000010
【図９】
2010277500.tif 000011
【図１０】
2010277500.tif 000012
【図１１】
2010277500.tif 000013
【図１２】
2010277500.tif 000014
【図１３】
2010277500.tif 000015
【図１４】
2010277500.tif 000016
【図１５】
2010277500.tif 000017
【図１６】
2010277500.tif 000018