(57)【要約】  ソフトウェア構築システム（１００）は、ソフトウェア構築装置（１０１）と資産保管庫（１０２）と端末装置（１０３）を備える。端末装置（１０３Ｂ）からソフトウェア資産の資産ＩＤが指定されると、ソフトウェア構築器（１６０３）は、内部作業域（Ｗ）を開設してＡｎｔ実行システム（１６０２）を起動する。Ａｎｔ実行システム（１６０２）は、Ａｎｔ定義体（１６１３）に従って、ソースプログラム（１６１１）などを用いてソフトウェア構築処理を実行する。Ａｎｔ実行システム（１６０２）の資産構築結果であるソフトウェア合成資産（１６１５）は内部作業域Ｗに格納される。ソフトウェア構築器（１６０３）は、ソフトウェア資産構成定義体（１６１２）を参照して、内部作業域（Ｗ）のソフトウェア合成資産（１６１５）を資産保管庫（１０２）へ書き戻す。【特許請求の範囲】
【請求項１】
任意のソフトウェア資産の識別情報の指定を受け付けさせる指定工程と、
前記指定工程によって識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定させる特定工程と、
ソフトウェアの構築元となるソフトウェア資産群の中から、前記特定工程によって識別情報が特定された入力資産を抽出させる抽出工程と、
前記特定工程によって識別情報が特定された合成方法と、前記抽出工程によって抽出された入力資産とに基づいて、前記出力資産を合成させる合成工程と、
をコンピュータに実行させることを特徴とするソフトウェア構築プログラム。
【請求項２】
前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換する変換工程をコンピュータに実行させ、
前記特定工程は、
前記指定工程によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記変換工程によって変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定させることを特徴とする請求項１に記載のソフトウェア構築プログラム。
【請求項３】
前記ソフトウェア資産構成定義体に前記出力資産の保存に関する属性情報が記述されている場合、前記合成工程によって合成された出力資産を前記ソフトウェア資産群の中に格納させる格納工程をコンピュータに実行させることを特徴とする請求項１に記載のソフトウェア構築プログラム。
【請求項４】
前記格納工程は、
前記合成工程によって合成された出力資産を、前記ソフトウェアの構築元となるソフトウェア資産として前記ソフトウェア資産群の中に格納させることを特徴とする請求項１〜３のいずれか一つに記載のソフトウェア構築プログラム。
【請求項５】
前記合成工程によって合成された出力資産は、構築対象となる前記ソフトウェアであることを特徴とする請求項１〜３のいずれか一つに記載のソフトウェア構築プログラム。
【請求項６】
請求項１〜５のいずれか一つに記載のソフトウェア構築プログラムを記録したコンピュータに読み取り可能な記録媒体。
【請求項７】
任意のソフトウェア資産の識別情報の指定を受け付ける指定工程と、
前記指定工程によって識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定する特定工程と、
ソフトウェアの構築元となるソフトウェア資産群の中から、前記特定工程によって識別情報が特定された入力資産を抽出する抽出工程と、
前記特定工程によって識別情報が特定された合成方法と、前記抽出工程によって抽出された入力資産とに基づいて、前記出力資産を合成する合成工程と、
を含んだことを特徴とするソフトウェア構築方法。
【請求項８】
前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換する変換工程を含み、
前記特定工程は、
前記指定工程によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記変換工程によって変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定することを特徴とする請求項７に記載のソフトウェア構築方法。
【請求項９】
前記ソフトウェア資産構成定義体に前記出力資産の保存に関する属性情報が記述されている場合、前記合成工程によって合成された出力資産を前記ソフトウェア資産群の中に格納する格納工程を含んだことを特徴とする請求項７に記載のソフトウェア構築方法。
【請求項１０】
合成出力となるソフトウェア資産（以下、「出力資産」という）の識別情報と当該出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体と、ソフトウェアの構築元となるソフトウェア資産群と、を記憶する記憶手段と、
任意のソフトウェア資産の識別情報の指定を受け付ける指定手段と、
前記指定手段によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記ソフトウェア資産構成定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定する特定手段と、
前記記憶手段に記憶されているソフトウェア資産群の中から、前記特定手段によって識別情報が特定された入力資産を抽出する抽出手段と、
前記特定手段によって識別情報が特定された合成方法と、前記抽出手段によって抽出された入力資産とに基づいて、前記出力資産を合成する合成手段と、
を備えることを特徴とするソフトウェア構築システム。
【請求項１１】
前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換する変換手段を備え、
前記特定手段は、
前記指定手段によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記変換手段によって変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定することを特徴とする請求項１０に記載のソフトウェア構築システム。
【請求項１２】
前記ソフトウェア資産構成定義体に前記出力資産の保存に関する属性情報が記述されている場合、前記合成手段によって合成された出力資産を前記記憶手段に格納する格納手段を備えることを特徴とする請求項１０に記載のソフトウェア構築システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発においてソフトウェアを構築するソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムに関するものである。【０００２】
通常、ソフトウェア開発は、以下の２つの手順によって一つのソフトウェア製品を作成する。
（１）プログラミング：プログラマがそれぞれ担当するソースプログラムを書く。
（２）ビルド（ソフトウェア構築）：ソースプログラムをコンパイル＆結合ならびに種々の組み立て加工を施す。（１）のプログラミングがソフトウェア開発において主要な部分を占めることはもちろんであるが、昨今ますます大規模化および複雑化するソフトウェア開発においては、（２）のビルド（ソフトウェア構築）の重要性が増大している。本発明は、上述した（２）ビルド（ソフトウェア構築）の工程で利用されるものである。
【背景技術】
【０００３】
一般に、要素を組み立てて合成物を作るという工程はソフトウェア開発以外の工業においても共通的であるが、ソフトウェアの場合は以下の（ａ）〜（ｅ）に挙げるような固有の困難がある。【０００４】
（ａ）構築に関わるソースプログラム（要素）数が多い。プログラマが書いた５千個から１万個におよぶソースプログラムをビルド＆統合して一つのソフトウェア製品ができることもまれではない。【０００５】
（ｂ）これら多数のソースプログラムがさらにそれぞれ多数のバージョン（通常、数十バージョンから数百バージョン）をもつ。これはソフトウェアというものの変更のしやすさから、ソースプログラムはバグ修正や機能拡張のため少しずつ更新されるのが通常であるからである。【０００６】
（ｃ）構成関係（組み立て関係）が多段多層的である。
（ｄ）要素の組み立てかたが多種である。最も単純なのはコピーやコンパイルであるが、そのほかにも、連携編集、インストール形式への組み立て、プラットフォームごとの特定形式への組み立て、変更のあった部分だけの抽出など、ソフトウェアに固有の多種多様な組み立てかたがある。【０００７】
（ｅ）並行して多数のバージョンのソフトウェア製品を顧客に提供するのが常態である。このことがさらにソフトウェア構築の複雑さを増大させる要因になっている。これらの困難を克服するソフトウェア構築システムが実現できれば、ソフトウェア開発の信頼性の半分（残り半分はプログラミング）は大きく改善されることになる。【０００８】
上述の（ａ）〜（ｅ）に挙げたようなソフトウェア構築に固有の多数性と複雑性により、ソフトウェア構築を人手でやるのは不可能に近い。ソフトウェア業界ではすでに、これを自動化するためにソフトウェア構築システム（以下、単に「ソフトウェア構築システム」と呼ぶ）を使うことが推奨され、実際、標準的な開発チームではなんらかのソフトウェア構築システムが導入されている。【０００９】
従来のソフトウェア構築システムは以下の（ｆ）〜（ｋ）のような機能をもつ。
（ｆ）資産保管：ソースプログラム群を一定のデータベースに保管し、プログラマはそれを参照＆更新できる。【００１０】
（ｇ）バージョン管理：ソースプログラムが更新されるとそれは新しいバージョンとして保管される。変更履歴の管理も行う。バージョン間での変動部分を比較することもできる（変動部分の比較をより視覚的におこなえるようにしているソフトウェア構築システムもある）。【００１１】
（ｈ）バージョン分岐管理：バージョン体系は、単純に逐次的なものだけでなく分岐も許しており、本流とは別系列のバージョンを作り、管理することもできる。これにより、特定顧客向けに特別に修正したバージョンなども管理できる。【００１２】
（ｉ）同時更新制御：複数のプログラマが同一のプログラムを同時更新することによる不整合を事前あるいは事後に調整することができる。【００１３】
（ｊ）ベースライン管理（イモズル管理）：各ソースプログラムのどのリビジョン群がどの製品バージョンに組み込まれるかを指定し記憶させることができる。これにより、特定の製品バージョンに組み込むべきソースプログラム一式をとり出し、ビルドツールへの入力にすることができる。【００１４】
（ｋ）分散管理：ソースプログラムが保管されるデータベースを地理的に分散配置することが可能なソフトウェア構築システムもある。【００１５】
現状では、統合者（ソフトウェア構築者）は、上記の（ｆ）〜（ｋ）のような機能をもつソフトウェア構築システムでソースプログラムを管理し、かつ、Makefile言語やＡｎｔ言語で顧客提供製品の合成法（ソフトウェア製品が何々の資産を要素としてどのような関係で構成されるものか）を定義しておくことにより、ソフトウェア構築工程を自動化している。【００１６】
また、従来のソフトウェア構築システムとしては、既存のソフトコンポーネントを組み合わせて、異なる環境下におけるシステム同士の連携や組み合わせを容易にするシステム（たとえば、下記特許文献１を参照。）や、制御論理および制御論理を規定したソースプログラムの内容を把握できるシステム（たとえば、下記特許文献２を参照。）が開示されている。【００１７】
【特許文献１】特開２００２−３５８１９９号公報
【特許文献２】特開２０００−０８９９４５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述したように従来のソフトウェア構築システムは、ソフトウェア構築工程のある一定範囲をシステム化している。しかし、ソフトウェア構築の全工程が、大きく下記ｉ）〜iii）のフェーズから成るものとみたとき、従来のソフトウェア構築システムでは、このうちｉ）の資産管理（事前）については上述のようにシステム化されている。なお、従来のソフトウェア構築システムがもつ機能として列挙した（ｆ）〜（ｋ）も結局はｉ）資産管理（事前）に属するものである。【００１９】
ｉ）資産管理（事前）：構成要素（ソースプログラム）の集合を正しく特定する。
ii）ビルド：それらを正しい構成方法で合成する。
iii）資産管理（事後）：合成された資産もまた適切に保管する。【００２０】
しかし、ii）およびiii）のビルド以降はシステム化されていない。もちろん、Makefile言語やＡｎｔ言語はビルド手順を自動化するものではあるが、それは通常のプログラムと同様に、そのようにプログラムしておけば自動化できるというに過ぎず、ソフトウェア構築システムの中にｉ）資産管理（事前）と有機的な関係をもって一体化されシステム化されているわけではない。ここで「システム化されていない」とは、次の（ｌ）〜（ｎ）のようなことを指している。【００２１】
（ｌ）Makefile言語やＡｎｔ言語での構成記述法は規格化されていない（プログラマによって同じことを別様に書ける余地が大きい）。その意味で通常のプログラムと変わらない。このことは、信頼性の点で以下の（ｌ−１）〜（ｌ−３）のような欠点につながる。【００２２】
（ｌ−１）  構成定義の記述性や可読性が十分でないこと。
（ｌ−２）  プログラム誤りが混入しやすい。
（ｌ−３）  構成定義自体を構成定義「データ」として参照し、また利用すること（たとえば、部品の利用関係の誤りの自動検出など）が困難である。【００２３】
（ｍ）そうして記述した構成定義体の実行は、ソフトウェア構築システムとは独立に人が行わなければならない（行うことができてしまう）。たとえば、構成定義体を実行する前の入力群の設定や実行後の出力資産の識別および保管は人手にまかされる。【００２４】
（ｎ）さらにその後最終的な顧客提供製品を作るまでには、（ｎ−１）インストール形式への変換や（ｎ−２）変更のあった部分だけの抽出などの作業が必要であるが、それにはまた別のツールやスクリプトを作成し仕様しなければならないなど人手が何個所にも介在する。決して１コマンドでそれらが一気にできるのではない。【００２５】
上記の（ｌ）〜（ｎ）という現状を楽観的にみれば、それぞれ、（ｌ’）Makefile言語やＡｎｔ言語を使って構成定義している、（ｍ’）それらによってビルドを自動化している、（ｎ’）製品作成はツールやスクリプトで自動化している、とも言えるので、いまだそれすらおこなわれていない構築法に比べて自動化は進んでいると評価している場合が多い。【００２６】
しかし、その作業内容をさらに具体的に見てみると、上述のようにそれらの作業の隙間々々で人手が入っている。ソフトウェア構築工程では、少しの手順誤りによって作業全体の信頼性が瓦解する可能性があるので、このレベルでの自動化では大いに不安が残る。【００２７】
要するに、従来のソフトウェア構築システムは、ソフトウェア構築工程のｉ）〜iii）のうちｉ）の部分をシステム化しているが、ii）、iii）についてはいまだシステム化されておらず人知と人手の介入を必要としている。実際そこで次に挙げるようないろんな誤りが混入する余地が大きい。【００２８】
すなわち、どのソースプログラムのどのバージョンがどこにあるのかが分からず、ソースプログラムを一式収集するだけでも大変な作業であるため、混乱が生じるという問題があった。また、一方の提供物では修正したが、他方の提供物にも同じ修正を反映するべきであるにもかかわらず、修正を忘れてしまうという問題があった。また、ソースプログラムが膨大であるため、全体構成の一部が変更されていることに気が付かないこともあるという問題があった。【００２９】
また、修正予定と広報している障害の修正を忘れてしまう場合もあるという問題があった。また、以前作った提供品とまったく同じものを再作成できる保証がなく、統合作業を他者が肩代わりしにくいという問題もあった。また、他製品のコンポネントや部品の組み込みで間違いを起こすという問題もあった。【００３０】
本発明は、上記に鑑みてなされたものであって、ソフトウェア構築の自動化を図ることにより、ユーザによる構築作業負担の軽減化、構築作業期間の短縮化、および構築されるソフトウェアの品質の向上を図ることができるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムを提供することを目的とする。
【課題を解決するための手段】
【００３１】
上述した課題を解決し、目的を達成するために、本発明にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、任意のソフトウェア資産の識別情報の指定を受け付け、識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定し、ソフトウェアの構築元となるソフトウェア資産群の中から、識別情報が特定された入力資産を抽出し、識別情報が特定された合成方法と、抽出された入力資産とに基づいて、前記出力資産を合成することを特徴とする。【００３２】
また、上記発明において、前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換し、識別情報が指定されたソフトウェア資産を前記出力資産として、変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定することとしてもよい。【００３３】
また、上記発明において、前記ソフトウェア資産構成定義体に前記出力資産の保存に関する属性情報が記述されている場合、前記合成手段によって合成された出力資産を前記記憶手段に格納することとしてもよい。また、合成された出力資産は、前記ソフトウェアの構築元となるソフトウェア資産として記憶されることとしてもよい。また、合成された出力資産は、構築対象となる前記ソフトウェアであってもよい。
【発明の効果】
【００３４】
本発明にかかるソフトウェア構築システム、ソフトウェア構築方法、ソフトウェア構築プログラム、および記録媒体は、ソフトウェア構築の自動化を図ることにより、ユーザによる構築作業負担の軽減化、構築作業期間の短縮化、および構築されるソフトウェアの品質の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００３５】
【図１】図１は、この発明の実施の形態にかかるソフトウェア構築システムを示すシステム構成図である。
【図２】図２は、この発明の実施の形態にかかるソフトウェア構築装置等のハードウェア構成を示すブロック図である。
【図３】図３は、この発明の実施の形態にかかるコンフィギュレーション（構成）を示す系統図である。
【図４】図４は、この発明の実施の形態にかかる標準的フォルダ構成を示す説明図である。
【図５】図５は、資産の定義を示す図表である。
【図６】図６は資産定義の組合せ結果を示す図表である。
【図７】図７は、構成定義の記述例を示す説明図である。
【図８】図８は、図７に示した構成定義を示す説明図である。
【図９】図９は、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造を示す説明図である。
【図１０】図１０は、関係と要素との関連性を示す図表である。
【図１１】図１１は、Ｄ−Ｐａｒａｍを示す図表である。
【図１２】図１２は、構成定義の一記述例を示す説明図である。
【図１３】図１３は、従来における構成定義実行後のフォルダ状態を示す説明図である。
【図１４】図１４は、この発明の実施の形態における構成定義実行後のフォルダ状態を示す説明図である。
【図１５】図１５は、集合化の一例を示す説明図である。
【図１６】図１６は、この発明の実施の形態にかかる構築システムのシステム構成の具体例を示すブロック図である。
【図１７】図１７は、ソフトウェア資産構成定義体からＡｎｔ定義体への翻訳を示す説明図である。
【図１８】図１８は、顧客提供資産の構成（ツリー構造）の一例を示す説明図である。
【図１９】図１９は、図１８に示した顧客提供資産のソフトウェア資産構成定義体の記述例を示す説明図である。
【図２０】図２０は、図１９に示したソフトウェア資産構成定義体から変換されたＡｎｔ定義体を示す説明図である。
【図２１】図２１は、図１６に示したソフトウェア構築器のソフトウェア構築処理を示すフローチャートである。
【図２２】図２２は、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成を示すブロック図である。
【図２３】図２３は、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順を示すフローチャートである。
【符号の説明】
【００３６】
１００  ソフトウェア構築システム
１０１  ソフトウェア構築装置
１０２  資産保管庫
１０３（１０３Ａ、１０３Ｂ）  端末装置
９００  ソフトウェア資産構成定義体
１６０１  翻訳器
１６０２  ソフトウェア構築エンジン（Ａｎｔ実行システム）
１６０３  ソフトウェア構築器
１６１１  ソースプログラム
１６１２  ソフトウェア資産構成定義体
１６１４  ソフトウェア合成資産
１９００  ソフトウェア資産構成定義体
２２０１  入力部
２２０２  登録／更新部
２２０３  変換部
２２０５  特定部
２２０６  抽出部
２２０７  合成部
２２０８  格納部
２２１０  ソフトウェア資産群
２２１１  変換定義体
２２１２  入力資産
２２１３  出力資産
Ｗ  内部作業域
【発明を実施するための最良の形態】
【００３７】
以下に、この発明の実施の形態にかかるソフトウェア構築システムについて説明する。【００３８】
（ソフトウェア構築システムのシステム構成）
図１は、この発明の実施の形態にかかるソフトウェア構築システムを示すシステム構成図である。ソフトウェア構築システム１００は、管理サーバとなるソフトウェア構築装置１０１と、データベースサーバとなる資産保管庫１０２と、端末装置１０３とが、ＬＡＮ，ＷＡＮ，インターネットなどのネットワーク１１０を介して相互に交信可能に接続されている。【００３９】
ソフトウェア構築装置１０１は、ソフトウェアの構成元となるソースコードのバージョン管理機能と、ソースコードや後述するソフトウェア資産構成定義体からソフトウェアをビルドする自動ビルド機能とを備えている。資産保管庫１０２は、ソースコードやソフトウェア資産構成定義体を記憶する。端末装置１０３は、開発者や統合者が用い、ソースコードやソフトウェア資産構成定義体の記述や、ソフトウェア構築装置１０１に対する各種指示または呼び出しをおこなう。【００４０】
（ソフトウェア構築装置、資産保管庫および端末装置のハードウェア構成）
つぎに、この発明の実施の形態にかかるソフトウェア構築装置１０１、資産保管庫１０２および端末装置１０３（以下、「ソフトウェア構築装置１０１等」という）のハードウェア構成について説明する。図２は、この発明の実施の形態にかかるソフトウェア構築装置１０１等のハードウェア構成を示すブロック図である。【００４１】
図２において、ソフトウェア構築装置１０１等は、ＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、ＨＤＤ（ハードディスクドライブ）２０４と、ＨＤ（ハードディスク）２０５と、ＦＤＤ（フレキシブルディスクドライブ）２０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）２０７と、ディスプレイ２０８と、Ｉ／Ｆ（インターフェース）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。【００４２】
ここで、ＣＰＵ２０１は、ソフトウェア構築装置１０１等の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。ＨＤＤ２０４は、ＣＰＵ２０１の制御にしたがってＨＤ２０５に対するデータのリード／ライトを制御する。ＨＤ２０５は、ＨＤＤ２０４の制御で書き込まれたデータを記憶する。【００４３】
ＦＤＤ２０６は、ＣＰＵ２０１の制御にしたがってＦＤ２０７に対するデータのリード／ライトを制御する。ＦＤ２０７は、ＦＤＤ２０６の制御で書き込まれたデータを記憶したり、ＦＤ２０７に記憶されたデータをソフトウェア構築装置１０１等に読み取らせたりする。【００４４】
着脱可能な記録媒体として、ＦＤ２０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Digital Versatile Disk）、メモリーカードなどであってもよい。ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。【００４５】
Ｉ／Ｆ２０９は、通信回線を通じてインターネットなどのネットワーク１１０に接続され、このネットワーク１１０を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク１１０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。【００４６】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。【００４７】
スキャナ２１２は、画像を光学的に読み取り、ソフトウェア構築装置１０１等内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。【００４８】
（資産保管庫の機能）
つぎに、資産保管庫１０２の機能について説明する。資産保管庫１０２は、ソフトウェア資産（以下、単に「資産」と呼ぶこともある。）を保管する機能を有する。エクスプローラの場合などと同様に、階層的に配置されたフォルダにソースプログラムや顧客提供バイナリなどの電子文書を保管する。もちろん、それら資産の参照および更新もグラフィカルにおこなうことができる。【００４９】
通常の利用者（開発者）は、ソフトウェア資産である電子文書（ソースプログラムなど）の登録、参照、更新の操作をおこなうが、その際の複数人による同時更新を調整する機能、アクセス権限制御、および更新履歴機能などがある。【００５０】
資産保管庫１０２のフォルダ階層は、上位から「データストア」／「プロジェクト」／「コンフィギュレーション（構成）」の順となっている。「データストア」は、単にプロジェクトの一つ上位の括りをあらわす。また、「プロジェクト」は、たとえばInterstage Application ServerやTeamwareOfficeなどの単位に対応し、各「コンフィギュレーション」は、Interstage Application Serverのバージョン97やTeamwareOfficeのバージョン185などの各バージョンに対応する。【００５１】
これらの中で「コンフィギュレーション」は、相互に論理的に密接に関連した資産とその適切なバージョン集合を特定するもので、ソフトウェアの構成管理上、最も重要な単位である。「コンフィギュレーション」は、「顧客提供資産の単位（たとえば、Interstage Application ServerやTeamwareOfficeなどの単位）のバージョン」と１対１対応するもので、コンフィギュレーションのフォルダの中には、その提供資産のそのバージョンで使われている資産が基本的にすべて入っている。【００５２】
ただし、他のコンフィギュレーションに属する資産をいわば外部参照する場合もあるので、その場合はその資産は自コンフィギュレーション内にある必要はない。また、コンフィギュレーションは家系などと同様に、親子、兄弟（すなわち分岐）、子孫などに相当する系統をなす。【００５３】
ここで、この発明の実施の形態にかかるコンフィギュレーション（構成）の系統について説明する。図３は、この発明の実施の形態にかかるコンフィギュレーション（構成）を示す系統図である。図３において、丸図形はコンフィギュレーション（構成）、矢印はコンフィギュレーション（構成）の親子関係を示している。顧客提供資産（顧客提供資産名：TW Office）３００については、構成Ｃ（Ｃ１〜Ｃ４）の親子関係が成立している。【００５４】
構成Ｃは、資産ＩＤとなる顧客提供資産名：TW Officeを有している。たとえば、構成Ｃ１の資産ＩＤは「TW Office,15」、構成Ｃ２の資産ＩＤは「TW Office,16」、構成Ｃ３の資産ＩＤは「TW Office,16.1」、構成Ｃ４の資産ＩＤは「TW Office,17」である。また、各構成Ｃ内のＭａ〜Ｍｃは資産Ｍをあらわしており、末尾の数字（１５，１６，１６．１，１７）は各資産Ｍのリビジョンをあらわしている。【００５５】
つぎに、この発明の実施の形態にかかる標準的フォルダ構成規約について説明する。図４は、この発明の実施の形態にかかる標準的フォルダ構成を示す説明図である。コンフィギュレーション（構成）の下位のフォルダ構成の作成法にも一定の規約がある。すなわち、図４において、コンフィギュレーションである「TeamwareOffice,185」の直下は、ＳＲＣ（ソースファイル）、ＢＩＮ（バイナリファイル）、ＰＫＧ（提供資産）、ＤＯＣ（ドキュメント）など、資産の種類に対応したフォルダ構成とする。【００５６】
また、図４においては、データストア、プロジェクト、コンフィギュレーションの順に階層化されている。また、コンフィギュレーションの直下のフォルダ内には、当該フォルダ名を拡張子とするファイルが保存される。たとえば、フォルダＳＲＣには、「Common」,「Mail」,「Library」,「Other」といったソースファイルが保存されている。【００５７】
（資産構成の定義）
つぎに、資産構成の定義について説明する。「資産の構成を定義する」とは、ソフトウェア資産の論理構成、すなわち、それぞれの資産が、何々の資産を要素として、どのような関係で構成されているものであるかを定義することである。資産構成を定義する言語としては、現状ではMakefile言語が最もよく使われており、近年ではAnt言語が急速に普及しつつあるが、本実施の形態では独自の構成定義言語を用意している。【００５８】
構成定義言語では、すべての資産を、資産(Material)／関係(Relation)／要素(Element)の３つの概念で定義する。たとえば、バイナリコードという資産は、ソースプログラムという要素をコンパイルという関係で構成したものであると定義することができる。図５は、資産の定義を示す図表である。図５において、Ａ〜Ｈは「資産」、Ｒａ〜Ｒｃ，Ｒｇ，Ｒｈは「関係」、Ｅ１〜Ｅ９は「要素」を示している。たとえば、資産の要素もまた（別の）資産である。たとえば、資産Ａの要素Ｅ１は、資産Ｂである。また、資産Ｈの要素Ｅ５は、資産Ａである。【００５９】
このように、資産の要素もまた別の資産であるので、それぞれの資産定義をモジュールとし、要素を接合点としてそれらモジュールを組み合わせることにより、何段にも多段の資産構成を定義することができ、多頭の構成を定義することもできる。図６は資産定義の組合せ結果を示す図表である。資産定義のモジュール性から、当初は考えていなかった新たな高位資産を後になって追加定義したり、構成を変更したりすることも容易である。【００６０】
つぎに、構成定義の記述について説明する。図７は、構成定義の記述例を示す説明図であり、図８は、図７に示した構成定義を示す説明図である。構成定義言語は抽象化指向の宣言型言語である。上述した構成定義言語では、ソフトウェアの構成を資産／関係／要素の（単純な）繰り返しで定義する。そして各資産は存在していればかならず、構成定義で静的に定義されているとおりのものとして存在することが保証される（構成定義言語の宣言性）。ユーザは、通常の手続き型言語でのように、処理の実行順序をどうするか、どういう順序で処理されたか、同じことを複数回実行したらどうなるか、などを意識しなくてよい。ここで、構成定義について簡単に説明する。【００６１】
図７および図８に示した構成定義は、「資産Ｍは資産Ｅ１と資産Ｅ２と関係Ｒを持つものである」と読む。この一つの構成定義が、Buildの場面では「資産Ｅ１と資産Ｅ２を操作Ｒで組み合わせて資産Ｍを作る」という意味になり、資産利用関係の追跡の場面では「資産Ｍは資産Ｅ１と資産Ｅ２を関係Ｒで利用している」という意味で使われる。Buildの場面ですでに資産Ｍが存在している場合は、「なにもしない」という意味にもなる。このように、構成定義言語の抽象性と宣言性は、構成定義の可読性および柔軟性を高め、最終的には構成管理業務の信頼性の向上を図ることができる。【００６２】
（ソフトウェア資産構成定義体のデータ構造）
つぎに、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造について説明する。ソフトウェア資産構成定義体は、すべての資産の属性情報の集合である。この属性情報の集合は単一ファイルで存在する。ここでは、任意の資産についてのソフトウェア資産構成定義体について説明する。【００６３】
図９は、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造を示す説明図である。図９において、ソフトウェア資産構成定義体９００は、属性（attribute）情報９２０（９０１〜９１６）の集合である。また、資産は、基本資産と合成資産とを含む。基本資産とは、たとえば、ソースプログラムであり、合成資産とは、たとえば、ソースプログラムをコンパイルまたは編集した結果生成される実行形式バイナリデータである。【００６４】
また、資産は、資産ＩＤ９３０（構成名９０１、資産名９０２、資産バージョン９０３、資産種別９０４、動作ＯＳ９０５、エリア９０６、資産エディション９０７、資産形式９０８）によって特定される。あらたに構成が作成された場合、資産バージョン９０３、直前バージョン９０９、外部名９１０、存在９１６以外の属性情報が、あらたに作成された構成の属性情報として引き継がれる。【００６５】
また、属性情報９２０のうち、構成名９０１は、当資産が所属する構成を指定する。省略時は、当属性情報９２０が所属する構成と同じとみなす。構成名９０１は、資産が他の構成に所属する場合、たとえば他製品に属するコンポネントを共用するような場合や多くの製品に共通の資産を組み込む場合に使われる。共通資産群は独立の構成として管理される。【００６６】
また、資産名９０２は、資産の名前を示す。 たとえば、「TWmail002.c」、「Istage008.exe」などが挙げられる。資産名９０２は、資産内容が入っているファイル名あるいはフォルダ名と一致していなければならない。フォルダの区切りは半角のスラッシュ「／」とする。また、集合資産の名前は、フォルダ名または「フォルダを指定したワイルドカード」と一致することになる。【００６７】
ファイル名が同一だが資産としては異なる場合は、フォルダ名で修飾することにより区別する。ターゲット資産（顧客に渡す資産）でない場合、構成名が省略されているとみなす。したがって、この場合も資産ＩＤは構築システムの中で一意になる。また、ターゲット資産では、通常、資産名が構成名と同じになるので省略することができる。ターゲット資産の場合、資産名９０２は、構成名９０１と一致していなければならない。【００６８】
資産バージョン９０３は、当資産が所属する構成のバージョンを示す。したがって、同一の構成に所属する各資産は同一のバージョン番号をもつことになる。なお、構成の名前のバージョン部分は、その構成のバージョン番号を表していなければならない。そのバージョン番号は、「ＲＣＳ規則」にしたがって付与するのが望ましい。資産バージョン９０３が省略された場合は、当属性情報９２０が所属する構成のバージョンと同じとみなす。構成内に同じ資産名で複数リビジョンがある場合、ソフトウェア構築システム１００は、そのうちの最新リビジョンのものだけを有効とする。【００６９】
資産種別９０４は、Regular（正規）、PMP（予防補修パック）、EmergentFix（緊急修正パック）、SoftLook（お試し版）、Any（いずれか）のいずれか一つを指定する。動作ＯＳ９０５は、資産が動作するＯＳを示す。エリア９０６は、国または地域をあらわし、資産が国内版か海外版かを示す。資産エディション９０７は、資産のエディション（Standard、Enterprise、Personal、Other）のいずれか一つを指定する。【００７０】
資産形式９０８は、資産の形式をあらわし、Packed（圧縮）、Unpacked（非圧縮）、Other（その他）のいずれか一つを指定する。直前バージョン９０９は、当資産がどのバージョンをもとに作られたかを示す。省略された場合は、当資産が所属する構成の直前バージョンと同じとみなす。【００７１】
外部名９１０は、当資産の意味や目的など人にとってわかりやすい名前や説明を記述する。たとえば、「TWOffice  V5.1  日本語版  PMP0405」、「TWOffice  V5.3  日本語版  日本新聞社向け固有修正００２」などが挙げられる。たとえば、バージョンについても、ソフトウェア構築システム１００が扱うバージョンと、上の例にある製品バージョンとは同じ意味ではないので、この外部名９１０を記述する意義がある。【００７２】
関係９４０は、タイプ９１１と、要素９１２と、Ｄ−Ｐａｒａｍ９１３とを有する。関係９４０は、要素の合成方法を示し、タイプ９１１は、関係９４０の型をあらわしている。図１０は、関係と要素との関連性を示す図表である。また、Ｄ−Ｐａｒａｍは、タイプ９１１のオプションを記述している。図１１は、Ｄ−Ｐａｒａｍを示す図表である。【００７３】
また、図９において、ターゲット９１４は、当該資産がユーザに提供する可能性のある資産であるか否かを示す。たとえば、ソースプログラムは通常、not-targetである。個々のロードモジュールも通常、not-targetである。しかし、ロードモジュールの集合はtargetとなり得る。【００７４】
また、保存（persistent）９１５は、資産の資産内容を保存するか否かを指定する。合成過程での中間資産、たとえば、コンパイルの結果得られるオブジェクトなどは通常not-persistentとする。ターゲット資産については、persistentでなければならない。また、存在（Existent）９１６は、資産の資産内容がすでに存在しているか否かを示す。特に合成資産の場合は、その資産がすでに合成済みであるか、これから合成しなければならないかを示すものとなる。統合者は、ビルドやり直し時にこの本パラメタ（存在９１６）を適宜リセットすることにより部分ビルドを制御することもできる。ただし、再ビルド時には、新しい構成を作るのが本来のやりかたであり、本パラメタ（存在９１６）を個々に変更すべきでない。【００７５】
（ソフトウェア資産構成定義体の記述）
次に、ソフトウェア資産構成定義体の記述について説明する。ソフトウェア資産構成定義体は、ソフトウェア資産の構成を構成定義言語で記述した情報である。構成定義言語とは、構成定義の記述法を規格化したものであり、抽象化および宣言型言語という特長をもつ。具体的には、以下（Ａ）〜（Ｍ）の特長がある。【００７６】
（Ａ）  一つの構成定義が、資産合成「プログラム」としての役割と資産構成「データ」としての役割の両方に使用できる。
（Ｂ）  ＯＳや開発言語に無依存である。
（Ｃ）  資産単位に定義することができる。従来技術では合成プロセスを実行するコマンド列（すなわち合成プログラム）を記述していた。【００７７】
（Ｄ）  すべての構成を、「資産／関係／要素」のシンプルな繰りかえしで定義することができる。この「資産」は合成すべき出力資産、「関係」は合成方法、「要素」は合成の入力となる要素資産群を定義するものである。
（Ｅ）  図１０に示したように、「関係」名は、一般性の高い用語（たとえば、コンパイル）を使うことができる。従来技術では、開発言語などに依存した特殊用語が使用されており、記述性および可読性に問題があった。
（Ｆ）  たとえば大規模の合成処理の各部分合成を逐次処理するか並列処理するかを自動判別することができる。すなわち、構成定義のツリ−の分岐を参照することにより、自動判別が可能になる。【００７８】
（Ｇ）  単一資産と集合資産の概念により、ファイル資産とフォルダ資産を同格に扱うことができる。すなわち、ファイルとフォルダを意識せずに扱うことができる。
（Ｈ）  集合資産の概念により、構成定義時に、一般の集合操作（ｅｘ．集合化（フォルダ化）／集合和／集合差／集合積／集合の集合など）に相当する関係を使用することができる。これにより、前バージョンとの差分のみ抽出するなどの実際の場面で現れる操作も一つの「関係」として記述できる。
（Ｉ）  集合操作は「宣言的」な関係として実現される。これにより、各資産は存在していればかならず、構成定義で静的に定義されているとおりのものとして存在することが保証される。図１２は、構成定義の一記述例を示す説明図である。図１２は、集合資産のフォルダＭの配下にファイルＥ１およびファイルＥ２があることを示している。この図１２に示した構成定義を実行する場合、集合資産はファイルシステム上のフォルダＭとして実現される。【００７９】
このとき、フォルダＭ内にすでになんらかのファイルＰおよびファイルＱが存在している場合、「構成定義の宣言性」の重要性を意識していない従来型の方法では、この構成定義を「手続き的に」解釈して、図１３に示した状態になる。図１３は、従来における構成定義実行後のフォルダ状態を示す説明図である。一方、本発明では、図１２の構成定義実行後の状態は図１４に示した状態になる。図１４は、この発明の実施の形態における構成定義実行後のフォルダ状態を示す説明図である。つまり、フォルダＭに元あったファイルＰおよびファイルＱは削除される。【００８０】
（Ｊ）  複雑なパッケージ化操作を１語で記述するPack関係を用意している。
（Ｋ）  標準化されていない合成操作を自由に記述できるようにTool関係が用意されている。
（Ｌ）  過渡的に抽象化または標準化できないプラットフォーム依存性や特殊パラメタを局所化して記述するための機構（上述の図１１に示したＤ−Ｐａｒａｍ記述)が用意されている。【００８１】
（Ｍ）  資産ごとに、合成関係以外の各種属性を定義できる（たとえば、図９に示した保存９１５やターゲット９１４）。これらの属性は「宣言的」な意味をもっているので、処理上は複数の意味をもつものとして使用することができる。たとえば、保存９１５（Persistent属性）は、本来は単に、出来上がった資産を永続的に保存するか否かを意味するものであるが、非保存（not-Persistent属性）を積極的に利用することにより、通常のプログラミングにおけるサブルーチン化手法を構成定義にも導入することができる。【００８２】
つまり、中間資産を定義しておくほうが構成定義全体のモジュラリティや見通しがよくなる場合は、それらの中間資産は保存９１５においてnot-Persistentであると指定しておけば、中間資産の個数がいくら多くなっても最終出力結果にはなんら影響しないので、構成定義全体の可読性を追求することができる。また、ターゲット９１４（Target属性）は、本来は、その資産が顧客提供資産であるか否かを示すものであるが、合成過程で、その進行状況を操作者に知らせたり、失敗時のやり直しをするときの「適切な粒度の単位」として使用することもできる。【００８３】
（集合操作の具体例）
つぎに、上述した（Ｈ）に示した集合操作の具体例について説明する。集合操作には、上述したように、集合化、集合和、集合差、集合積、集合の集合（メタ集合）の概念がある。図１５は、集合化の一例を示す説明図である。集合化とは、いくつかのファイルからなるフォルダを定義することに対応しており、集合和、集合差、集合積、集合の集合（メタ集合）の前提となる。たとえば、構築システムにおいて、「フォルダＦの配下にファイルａ、ｂ、ｃがある」という構成状態を定義するには、図１５に示したように、構成定義を記述する。通常の数学記号で表せば、Ｆ＝｛ａ，ｂ，ｃ｝になる。以降、この記法を用いて説明する。【００８４】
つぎに集合和について説明する。集合和は、たとえば、２つのフォルダの中にあるファイル群をあわせて１つのフォルダにする、という操作に使われる。具体的には、フォルダＦ＝｛ａ，ｂ，ｃ｝、フォルダＧ＝｛ｐ，ｑ｝のとき、以下のように集合和（「＋」で表す）を用いて、これらのファイル群からなる新たなフォルダを作ることができる。
新たなフォルダ：Ｈ＝Ｆ＋Ｇ＝｛ａ，ｂ，ｃ，ｐ，ｑ｝【００８５】
つぎに集合差について説明する。集合差は、たとえば、前バージョンから変更のあったファイルを抜き出してそれらだけからなる修正パックを作るときに使われる。具体的には、前バージョンが  Ａ＝｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１｝であり、
新バージョンが  Ｂ＝｛ａ１，ｂ２，ｃ１，ｄ１，ｅ１，ｆ２，ｇ１｝
であるとする。ここで数字は同じファイルの内容の違いを表しているものとする。【００８６】
つまり、上の記述は、新バージョンでは前バージョンに対してファイルｂとファイルｆの内容が変更され、かつファイルｇがあらたに追加されたという状況を表している。このとき、修正パック：Ｃ＝Ｂ−Ａと定義すれば、通常の集合差の演算規則に従うことにより、下記のようになり、期待するとおりの修正パックの内容が得られる。このように、集合差は修正パックを作るという実際場面で有効である。【００８７】
Ｃ＝Ｂ−Ａ
＝｛ａ１，ｂ２，ｃ１，ｄ１，ｅ１，ｆ２，ｇ１｝
−｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１｝
＝｛ｂ２，ｆ２，ｇ１｝【００８８】
つぎに集合積について説明する。集合積は、２つのフォルダ間の共通ファイルだけを抜き出してあらたなフォルダとするという際に使われる。また、集合の集合（メタ集合）は、フォルダを多段に階層化して顧客提供資産とする場合に使われる。この場面は実際にも頻繁に現れる。たとえば、フォルダＡ＝｛ａ，ｂ，ｃ，Ｆ｝、フォルダＦ＝｛ｄ，ｅ｝とし、ファイルｆを要素としてもつフォルダＧを作るときには、Ｇ＝｛Ａ，Ｆ，ｆ｝と定義すればよい。このとき、フォルダＧは、下記のとおりである。【００８９】
Ｇ＝｛Ａ，Ｆ，ｆ｝＝｛｛ａ，ｂ，ｃ，｛ｄ，ｅ｝｝，｛ｄ，ｅ｝，ｆ｝
なお、Ｇ≠｛ａ，ｂ，ｃ，ｄ，ｅ，ｆ｝、Ｇ≠｛｛ａ，ｂ，ｃ，｛ｄ，ｅ｝｝，ｆ｝である。【００９０】
（ソフトウェア構築システムのシステム構成の具体例）
つぎに、この発明の実施の形態にかかる構築システムのシステム構成の具体例について説明する。図１６は、この発明の実施の形態にかかる構築システムのシステム構成の具体例を示すブロック図である。図１６において、ソフトウェア構築装置１０１は、翻訳器１６０１と、ソフトウェア構築エンジン１６０２と、ソフトウェア構築器１６０３とを備えている。【００９１】
また、図１６に示した例では、資産保管庫１０２としてはＥｎａｂｌｅｒ、ソフトウェア構築エンジン１６０２としてはＡｎｔ実行システムをそれぞれ使用する。資産保管庫１０２およびソフトウェア構築エンジン１６０２として他のシステム（たとえば資産保管庫１０２はＣＶＳ、ソフトウェア構築エンジン１６０２はＭａｋｅｆｉｌｅ）を使用する場合も実装原理は同じである。また、図１６において、黒線矢印は、指示または呼び出しを示しており、点線矢印は、入力または参照を示しており、二重線矢印は、出力または格納を示している。また、矢印上の人型マークは、当該矢印が人手による操作が入ることを示している。【００９２】
ここで、ソフトウェア構築システム１００の全体処理について説明する。図１６において、各ソフトウェア開発者は、端末装置１０３Ａにおいてソースプログラムの内容を作成または更新し、その登録をソフトウェア構築装置１０１に指示する（ステップＳ１６０１）。ソフトウェア構築装置１０１はそのソースプログラム１６１１を配下の資産保管庫１０２に格納する（ステップＳ１６０２）。【００９３】
つぎに、ソフトウェア統合者が端末装置１０３Ｂで各ソフトウェア資産の構成を構成定義言語で記述し（こうして記述されたものを「ソフトウェア資産構成定義体」と呼ぶ）、その登録をソフトウェア構築装置１０１に指示する（ステップＳ１６０３）。ソフトウェア構築装置１０１は、指示されたソフトウェア資産構成定義体１６１２を資産保管庫１０２に格納する（ステップＳ１６０４）。【００９４】
ソフトウェア資産構成定義体１６１２が資産保管庫１０２に登録されると、ソフトウェア構築装置１０１は、翻訳器１６０１によりソフトウェア資産構成定義体１６１２を解釈し、Ａｎｔ言語で記述された定義体（「Ａｎｔ定義体１６１３」と呼ぶ）に翻訳する（ステップＳ１６０５）。そして、このＡｎｔ定義体１６１３も資産保管庫１０２に格納する（ステップＳ１６０６）。【００９５】
ソフトウェア統合者の端末装置１０３Ｂからソフトウェア資産を構築する指示が入力、すなわち、構築すべきソフトウェア資産の資産ＩＤ（図９を参照）が指定されると（ステップＳ１６０７）、ソフトウェア構築装置１０１のソフトウェア構築器１６０３は、内部作業域Ｗを開設してＡｎｔ実行システム１６０２の動作環境の準備をした後、Ａｎｔ実行システム１６０２を起動する（ステップＳ１６０８）。【００９６】
そして、Ａｎｔ実行システム１６０２は、ステップＳ１６０７で資産ＩＤが指定された資産に対応するＡｎｔ定義体１６１３を入力する。その際、資産保管庫１０２に格納されているソースプログラム１６１１やその他のソフトウェア合成資産１６１４も入力される（ステップＳ１６０９）。Ａｎｔ実行システム１６０２は、入力されたＡｎｔ定義体１６１３にしたがって、ソースプログラム１６１１やその他のソフトウェア合成資産１６１４を用いてソフトウェア構築処理を実行する。そして、Ａｎｔ実行システム１６０２の資産構築結果（合成した資産あるいは出力）であるソフトウェア合成資産１６１５は、中間生産物として内部作業域Ｗに格納される（ステップＳ１６１０）。【００９７】
また、ソフトウェア構築器１６０３は、ソフトウェア資産構成定義体１６１２に記述されている各資産の属性情報９２０を参照して（ステップＳ１６１１）、内部作業域Ｗにおかれている各ソフトウェア合成資産１６１５を読み込み（ステップＳ１６１２）、資産保管庫１０２へ正式に書き戻す（ステップＳ１６１３）。【００９８】
なお、内部作業域Ｗには新たな合成資産として存在していてもその合成資産が保存９１５の属性情報をもっていないものであれば、その合成資産は資産保管庫１０２には格納しないという制御もこのときにおこなう。その後、ソフトウェア構築装置１０１は内部作業域Ｗの消去などの後処理をおこなう。これにより、ソフトウェア構築装置１０１の使用者（統合者）は、ソフトウェア構築装置１０１の内部処理や中間生産物（ソフトウェア合成資産１６１５）をまったく意識しなくてよい。【００９９】
つぎに、上述した翻訳器１６０１について説明する。翻訳器１６０１は、ソフトウェア資産構成定義体１６１２をＡｎｔ定義体１６１３に変換する。ソフトウェア資産構成定義体１６１２は、ＸＭＬの形式にしたがって構成定義言語で記述されている。Ａｎｔ定義体１６１３は、ＸＭＬの形式にしたがって、フリーウェアであるＡｎｔの文法により記述されている。翻訳器１６０１は、記述形式を変換する一種のコンパイラである。したがって、その実装方式自体は一般のコンパイラと同様に種々あり得る。最も適切な実現方式は、翻訳元の記述から翻訳先の記述への変換規則をコンパイラに入力することによって所望の翻訳器１６０１を生成するという手法がある。【０１００】
このソフトウェア資産構成定義体１６１２からＡｎｔ定義体１６１３への翻訳も、基本的に以下のような変換規則にしたがっておこなえばよい。図１７は、ソフトウェア資産構成定義体からＡｎｔ定義体への翻訳を示す説明図である。ソフトウェア資産構成定義体１６１２の資産名「Ｎ」は、Ａｎｔ定義体１６１３においてターゲット名に変換されている。【０１０１】
また、ソフトウェア資産構成定義体１６１２のタスク名「Ｔ」は、Ａｎｔ定義体１６１３において「タスク」とよばれる一種のコマンドである（図１７では「destfile」）。たとえば、「compile」はコンパイルするというコマンドである。Ａｎｔ定義体１６１３が標準的に備えていないタスクは独自タスクとして、別途定義しておけばよい。ソフトウェア資産構成定義体１６１２の要素（Element）Ｅ１〜Ｅｎは、Ａｎｔ定義体１６１３において、「depends」と「sourcefile」で定義される。【０１０２】
ここで、翻訳器１６０１によるソフトウェア資産構成定義体１６１２からＡｎｔ定義体１６１３への翻訳処理を具体的に説明する。図１８は、顧客提供資産の構成（ツリー構造）の一例を示す説明図であり、図１９は、図１８に示した顧客提供資産のソフトウェア資産構成定義体の記述例を示す説明図である。【０１０３】
図１８において、この顧客提供資産（構成名：TeamwareOffice）１８０１は、資産（資産名：TW.exe）１８１１、資産（資産名：Mail.dll）１８１２、資産（資産名：Library.dll）１８１３および資産（資産名：Readme.txt）１８１４を、集合化（Set）という関係Ｒ１によって要素としている。資産１８０１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０１によって定義されている。【０１０４】
また、資産１８１１は、資産（資産名：TW.o）１８２１を、リンク（Link）という関係Ｒ２によって要素としている。資産１８１１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０２によって定義されている。【０１０５】
また、資産１８１２は、資産（資産名：Mail01.）１８２２および資産（資産名：Mail02.）１８２３を、リンク（Link.cpp）という関係Ｒ３によって要素としている。資産１８１２の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０３によって定義されている。【０１０６】
また、資産１８１３は、資産（資産名：Library01.o）１８２４および資産（資産名：Library02.o）１８２５を、リンク（Link.cpp）という関係Ｒ３によって要素としている。資産１８１３の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０４によって定義されている。【０１０７】
また、資産（資産名：TW.o）１８２１は、ソースファイルとなる資産（資産名：TW.cpp）１８３１を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０５によって定義されている。【０１０８】
また、資産１８２２は、ソースファイルとなる資産（資産名：Mail01.cp）１８３２を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２２の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０６によって定義されている。【０１０９】
資産１８２３は、ソースファイルとなる資産（資産名：Mail02.cp）１８３３を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２３の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０７によって定義されている。【０１１０】
資産１８２４は、ソースファイルとなる資産（資産名：Library01.cp）１８３４を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２４の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０８によって定義されている。【０１１１】
資産１８２５は、ソースファイルとなる資産（資産名：Library02.cp）１８３５を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２５の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０９によって定義されている。すなわち、資産１８１１〜１８１３はそれぞれ、要素１８３１〜１８３５などのソースファイルをコンパイルおよび連携編集することによって作成される。【０１１２】
また、図１９に示したソフトウェア資産構成定義体１９００から変換されたＡｎｔ定義体を図２０に示す。図２０は、図１９に示したソフトウェア資産構成定義体から変換されたＡｎｔ定義体を示す説明図である。Ａｎｔ定義体２０００は、翻訳器１６１３によってソフトウェア資産構成定義体１９００から翻訳されたＸＭＬ形式の電子文書である。【０１１３】
つぎに、図１６に示したソフトウェア構築器１６０３のソフトウェア構築処理について説明する。図２１は、図１６に示したソフトウェア構築器１６０３のソフトウェア構築処理を示すフローチャートである。図２１において、まず、ビルド指示（構成名“ｃ”と資産ＩＤ“ｉ”の指定）があった場合（ステップＳ２１０１：Ｙｅｓ）、Ａｎｔ実行用の内部作業域Ｗを開設する（ステップＳ２１０２）。【０１１４】
つぎに、資産保管庫１０２から、指定された構成名“ｃ”と同じ名前をもつフォルダ“ｃ”内のすべてのファイルを内部作業域Ｗに読み出す（ステップＳ２１０３）。なお、指定される構成名は、資産保管庫１０２の中のフォルダ名に対応している。また、このとき、資産保管庫１０２に対してはチェックアウト処理をおこなう。【０１１５】
そして、指定された資産ＩＤ“ｉ”に対応するＡｎｔ定義体１６１３のファイル名と資産ＩＤ“ｉ”を指定してＡｎｔ実行システム１６０２を起動する（ステップＳ２１０４）。なお、指定された資産ＩＤ“ｉ”に対応するＡｎｔ定義体１６１３も、読み込んだファイルの一つとして内部作業域Ｗに存在する。Ａｎｔ定義体１６１３のファイル名は“c.xml”である。また、資産ＩＤ“ｉ”は、Ａｎｔ定義体１６１３の中のターゲット名と一致している。【０１１６】
Ａｎｔ実行システム１６０２では、指定されたＡｎｔ定義体１６１３の中の特定のターゲットを実行する。実行するターゲット名は、呼び出し元となるソフトウェア構築器１６０３によって指定された資産ＩＤから特定することができる。なお、Ａｎｔ実行システム１６０２の実行中に生成される合成資産は、内部作業域Ｗに格納される。【０１１７】
また、Ａｎｔ実行システム１６０２の実行が終了した場合（ステップＳ２１０５：Ｙｅｓ）、ソフトウェア資産構成定義体“c.attr”を参照しつつ、内部作業域Ｗにある資産（ファイルやフォルダ）のうち、保存９１５の属性情報がYesである合成資産を資産保管庫１０２に書き戻す（ステップＳ２１０６）。そして、資産保管庫１０２に対してチェックインする。最後に、Ａｎｔ実行システム１６０２用の内部作業域Ｗを消去する（ステップＳ２１０７）。【０１１８】
（ソフトウェア構築システムの機能的構成）
つぎに、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成について説明する。図２２は、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成を示すブロック図である。なお、図１および図１６に示した構成と同一構成には同一符号を付し、その説明を省略する。図２２において、ソフトウェア構築装置１０１は、入力部２２０１と、登録／更新部２２０２と、変換部２２０３と、指定部２２０４と、特定部２２０５と、抽出部２２０６と、合成部２２０７と、格納部２２０８と、から構成されている。【０１１９】
入力部２２０１は、開発者の操作により、端末装置１０３において作成または更新されたソースコードなどのソフトウェア資産やソフトウェア資産構成定義体１６１２（たとえば、図１９に示したソフトウェア資産構成定義体１９００）の入力を受け付ける。入力部２２０１は、ソフトウェア資産構成定義体１６１２としての入力を受け付ける。【０１２０】
ソフトウェア資産構成定義体１６１２は、合成出力となるソフトウェア資産（以下、「出力資産」という）の識別情報と合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と入力資産を用いた出力資産の合成方法の識別情報とによって出力資産の構成を定義した電子文書であり、たとえば、ＸＭＬ形式で記述されている。【０１２１】
ここで、入力資産とは、出力資産の合成元となるソフトウェア資産、すなわち要素である。また、合成方法は、出力資産と入力資産との関係を示しており、たとえば、図１１に示したcompile, link, compressなどのタイプ９１１である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、入力資産は、資産１８１１〜１８１４であり、合成方法は、集合化を示す関係Ｒ１である。【０１２２】
また、出力資産の識別情報とは、資産ＩＤ９３０に記述されている構成名９０１または資産名９０２である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、資産１８０１の識別情報とは、資産１８０１の構成名：TeamwareOfficeである。また、出力資産を資産１８１１とする場合、資産１８１１の識別情報とは、資産１８１１の資産名（資産名：TW.o）である。【０１２３】
また、合成方法の識別情報とは、関係９４０のタイプ９１１である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、入力資産は、資産１８１１〜１８１４であり、合成方法は、集合化（Set）を示す関係Ｒ１である。【０１２４】
また、登録／更新部２２０２は、入力が受け付けられたソフトウェア資産を資産保管庫１０２に書き込む。ソフトウェア資産群２２１０は、このようにして書き込まれたソースファイルや、後述する合成部２２０７によって合成されたソフトウェア合成資産１６１４などのソフトウェア資産の集合である。入力部２２０１および登録／更新部２２０２は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによって、またはＩ／Ｆ２０９によって、その機能を実現する。【０１２５】
また変換部２２０３は、登録／更新部２２０２においてソフトウェア資産構成定義体１６１２が登録された場合、そのソフトウェア資産構成定義体１６１２を、後述する合成部２２０７によって解釈可能な記述形式の定義体（以下、変換定義体２２１１）に変換する。合成部２２０７が、たとえば、図１６に示したＡｎｔ実行システム１６０２である場合、ソフトウェア資産構成定義体１６１２は、Ａｎｔ定義体１６１３という変換定義体２２１１に変換される。この変換部２２０３は、具体的には、図１６に示した翻訳器１６０１に相当し、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。【０１２６】
また、指定部２２０４は、任意のソフトウェア資産の識別情報の指定を受け付ける。具体的には、統合者が端末装置１０３を操作することによって、構築すべきソフトウェア資産の資産ＩＤ９３０に記述されている構成名９０１または資産名９０２の指定を受け付ける。この指定部２２０４は、具体的には、たとえば、図２に示したＩ／Ｆ２０９によって、その機能を実現する。【０１２７】
また、特定部２２０５は、指定部２２０４によって識別情報が指定されたソフトウェア資産を出力資産として、ソフトウェア資産構成定義体１６１２、具体的には変換定義体２２１１から、入力資産の識別情報と合成方法の識別情報とを特定する。図１８を用いて説明すると、指定部２２０４によって指定されたソフトウェア資産が資産１８０１である場合、この資産１８０１が出力資産となり、資産１８０１の要素となるソフトウェア資産１８１１〜１８１４が入力資産となる。したがって、ソフトウェア資産１８１１〜１８１４の資産ＩＤ（資産名：TW.exe、資産名：Mail.dll、資産名：Library.dll、資産名：Readme.txt）が入力資産の識別情報として特定され、関係Ｒ１の識別情報（タイプ：Set）が合成方法の識別情報として特定される。【０１２８】
また、特定部２２０５は、識別情報が特定された入力資産をあらたに出力資産として、あらたな出力資産の合成入力となる入力資産の識別情報と合成方法の識別情報とを特定する。図１８を用いて説明すると、上述の例では、ソフトウェア資産１８１１〜１８１４が入力資産となったが、ソフトウェア資産１８１１〜１８１４をあらたに出力資産とし、ソフトウェア資産１８１１〜１８１４の合成入力となるあらたな入力資産の識別情報を特定する。【０１２９】
この場合、ソフトウェア資産１８１１については、ソフトウェア資産１８２１があらたな入力資産となり、ソフトウェア資産１８１２については、ソフトウェア資産１８２２，１８２３があらたな入力資産となり、ソフトウェア資産１８１３については、ソフトウェア資産１８２４，１８２５があらたな入力資産となる。なお、ソフトウェア資産１８１４は、単なるテキスト文書であり、子となる入力資産を持たない。【０１３０】
このようにして、特定部２２０５は、子となる入力資産が存在しなくなるまで、入力資産の識別情報および合成方法の識別情報を特定する。この特定部２２０５は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。【０１３１】
また、抽出部２２０６は、資産保管庫１０２に記憶されているソフトウェア資産群２２１０の中から、特定部２２０５によって識別情報が特定された入力資産（あらたに識別情報が特定された入力資産も含む）２２１２を抽出する。具体的には、識別情報を手掛かりとして入力資産２２１２となるソースファイルなどのソフトウェア資産を抽出する。抽出された入力資産２２１２は、内部作業域Ｗに記憶される。【０１３２】
この特定部２２０５は、具体的には、図１６に示したソフトウェア構築エンジン（Ａｎｔ実行システム）１６０２の一機能であり、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。【０１３３】
また、合成部２２０７は、特定部２２０５によって識別情報が特定された合成方法と、抽出部２２０６によって抽出された入力資産とに基づいて、出力資産２２１３を合成する。合成された出力資産２２１３は、中間生成物として内部作業域Ｗに記憶される。合成部２２０７は、図１１に示したタイプ９１１で定義されている合成方法（compile,link, compressなど）を実行することができる。【０１３４】
合成部２２０７は、具体的には、図１６に示したソフトウェア構築エンジン（Ａｎｔ実行システム）１６０２の一機能であり、Ａｎｔ定義体１６１３を解釈することによって、上記合成方法を実行することができる。この合成部２２０７は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。【０１３５】
また、格納部２２０８は、ソフトウェア資産構成定義体１６１２に出力資産の保存９１５に関する属性情報が記述されている場合、合成部２２０７によって合成された出力資産を資産保管庫１０２に格納する。具体的には、出力資産についての保存９１５に関する属性情報が、“yes”（または“persistent”でも同様）の場合、合成された出力資産を、内部作業域Ｗから資産保管庫１０２に書き込む。【０１３６】
この格納部２２０８は、具体的には、図１６に示したソフトウェア構築器１６０３に相当し、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。【０１３７】
（ソフトウェア構築システムのソフトウェア構築処理手順）
つぎに、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順について説明する。図２３は、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順を示すフローチャートである。図２３において、入力部２２０１においてソフトウェア資産構成定義体１６１２が入力された場合（ステップＳ２３０１：Ｙｅｓ）、変換部２２０３において変換処理、すなわち、変換定義体２２１１に変換する（ステップＳ２３０２）。【０１３８】
そして、指定部２２０４において、任意のソフトウェア資産の識別情報（資産ＩＤ９３０）が指定された場合（ステップＳ２３０３：Ｙｅｓ）、特定部２２０５において、指定された識別情報のソフトウェア資産を出力資産として、当該出力資産の合成元となる入力資産の識別情報と、当該入力資産を用いた出力資産の合成方法の識別情報を特定する（ステップＳ２３０４）。【０１３９】
つぎに、抽出部２２０６において、資産保管庫１０２のソフトウェア資産群２２１０から、特定部２２０５において識別情報が特定された入力資産２２１２を抽出する（ステップＳ２３０５）。そして、合成部２２０７において、抽出された入力資産２２１２を、特定部２２０５によって識別情報が特定された合成方法により合成し、出力資産２２１３を出力する（ステップＳ２３０６）。【０１４０】
そして、格納部２２０８において、ソフトウェア資産構成定義体１６１２の保存９１５の属性情報が"yes"の場合（ステップＳ２３０７：Ｙｅｓ）、合成出力された出力資産２２１３を資産保管庫１０２に書き込む（ステップＳ２３０８）。一方、保存９１５の属性情報が"no"の場合（ステップＳ２３０７：Ｎｏ）、合成出力された出力資産２２１３を内部作業域Ｗから消去する（ステップＳ２３０９）。【０１４１】
このソフトウェア構築処理によれば、指定部２２０４において指定された識別情報（資産ＩＤ９３０）が構成名９０１である場合、最終的に構築したいソフトウェア（顧客提供資産）を、資産ＩＤを指定するという入力操作だけで自動的に構築することができる。特に、出力資産の合成入力となる入力資産が、さらに子となるあらたな入力資産を有している場合、ソフトウェア資産構成定義体１６１２（変換定義体２２１１）を参照することにより、あらたな入力資産ごとに合成方法を特定することができる。【０１４２】
したがって、合成部２２０７においては、複数の合成方法による合成処理を並列的に実行することができ、ソフトウェア構築処理時間の短縮化を図ることができる。また、保存する必要のない出力資産２２１３は、資産保管庫１０２に書き込むことなく自動的に消去することができ、不必要なソフトウェア資産の無駄な保管を防止することができ、メモリ容量の節約化を図ることができる。【０１４３】
以上説明したように、この発明の実施の形態にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、下記（１）〜（４）の効果を奏する。【０１４４】
（１）  複雑なソフトウェア構築（ビルド）の作業がほぼ完全に自動化されるので、既存のソフトウェア構築システムを使用する場合に比べて、構築作業の信頼性および再現可能性の向上を図ることができる。
（２）  ソフトウェア構築（ビルド）の作業がほぼ完全に自動化されるので、既存のソフトウェア構築システムを使用する場合に比べて、構築者の作業負荷の大幅な軽減を図ることができる。【０１４５】
（３）  ソフトウェア構成定義言語の抽象性および宣言性が高いので、既存の構成定義言語（たとえば、Makefile言語やAnt言語）に比べて、ソフトウェアの構成定義のリーダビリティが格段に向上し、信頼性の向上を図ることができる。
（４）  従来は人知および人手でおこなっていた広範囲にわたるソフトウェアの構成関係の追跡や不具合の警告などをアプリケーションで自動的に行うことが可能になり、生産性および信頼性の向上を図ることができる。【０１４６】
なお、本実施の形態で説明したソフトウェア構築方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【産業上の利用可能性】
【０１４７】
以上のように、本発明にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、ソフトウェア開発におけるソフトウェアの構築に有用である。
【図１】
2006095434.tif 000002
【図２】
2006095434.tif 000003
【図３】
2006095434.tif 000004
【図４】
2006095434.tif 000005
【図５】
2006095434.tif 000006
【図６】
2006095434.tif 000007
【図７】
2006095434.tif 000008
【図８】
2006095434.tif 000009
【図９】
2006095434.tif 000010
【図１０】
2006095434.tif 000011
【図１１】
2006095434.tif 000012
【図１２】
2006095434.tif 000013
【図１３】
2006095434.tif 000014
【図１４】
2006095434.tif 000015
【図１５】
2006095434.tif 000016
【図１６】
2006095434.tif 000017
【図１７】
2006095434.tif 000018
【図１８】
2006095434.tif 000019
【図１９】
2006095434.tif 000020
【図２０】
2006095434.tif 000021
【図２１】
2006095434.tif 000022
【図２２】
2006095434.tif 000023
【図２３】
2006095434.tif 000024
【手続補正書】
【提出日】平成19年8月15日(2007.8.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
任意のソフトウェア資産の識別情報の指定を受け付けさせる指定工程と、
前記指定工程によって識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定させる特定工程と、
ソフトウェアの構築元となるソフトウェア資産群の中から、前記特定工程によって識別情報が特定された入力資産を抽出させる抽出工程と、
前記特定工程によって識別情報が特定された合成方法と、前記抽出工程によって抽出された入力資産とに基づいて、前記出力資産を合成させる合成工程と、
をコンピュータに実行させることを特徴とするソフトウェア構築プログラム。
【請求項２】
前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換する変換工程をコンピュータに実行させ、
前記特定工程は、
前記指定工程によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記変換工程によって変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定させることを特徴とする請求項１に記載のソフトウェア構築プログラム。
【請求項３】
請求項１または２に記載のソフトウェア構築プログラムを記録したコンピュータに読み取り可能な記録媒体。
【請求項４】
任意のソフトウェア資産の識別情報の指定を受け付ける指定工程と、
前記指定工程によって識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定する特定工程と、
ソフトウェアの構築元となるソフトウェア資産群の中から、前記特定工程によって識別情報が特定された入力資産を抽出する抽出工程と、
前記特定工程によって識別情報が特定された合成方法と、前記抽出工程によって抽出された入力資産とに基づいて、前記出力資産を合成する合成工程と、
を含んだことを特徴とするソフトウェア構築方法。
【請求項５】
合成出力となるソフトウェア資産（以下、「出力資産」という）の識別情報と当該出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体と、ソフトウェアの構築元となるソフトウェア資産群と、を記憶する記憶手段と、
任意のソフトウェア資産の識別情報の指定を受け付ける指定手段と、
前記指定手段によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記ソフトウェア資産構成定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定する特定手段と、
前記記憶手段に記憶されているソフトウェア資産群の中から、前記特定手段によって識別情報が特定された入力資産を抽出する抽出手段と、
前記特定手段によって識別情報が特定された合成方法と、前記抽出手段によって抽出された入力資産とに基づいて、前記出力資産を合成する合成手段と、
を備えることを特徴とするソフトウェア構築システム。
【請求項６】
前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換する変換手段を備え、
前記特定手段は、
前記指定手段によって識別情報が指定されたソフトウェア資産を前記出力資産として、前記変換手段によって変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定することを特徴とする請求項５に記載のソフトウェア構築システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発においてソフトウェアを構築するソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムに関するものである。
【０００２】
通常、ソフトウェア開発は、以下の２つの手順によって一つのソフトウェア製品を作成する。
（１）プログラミング：プログラマがそれぞれ担当するソースプログラムを書く。
（２）ビルド（ソフトウェア構築）：ソースプログラムをコンパイル＆結合ならびに種々の組み立て加工を施す。（１）のプログラミングがソフトウェア開発において主要な部分を占めることはもちろんであるが、昨今ますます大規模化および複雑化するソフトウェア開発においては、（２）のビルド（ソフトウェア構築）の重要性が増大している。本発明は、上述した（２）ビルド（ソフトウェア構築）の工程で利用されるものである。
【背景技術】
【０００３】
一般に、要素を組み立てて合成物を作るという工程はソフトウェア開発以外の工業においても共通的であるが、ソフトウェアの場合は以下の（ａ）〜（ｅ）に挙げるような固有の困難がある。
【０００４】
（ａ）構築に関わるソースプログラム（要素）数が多い。プログラマが書いた５千個から１万個におよぶソースプログラムをビルド＆統合して一つのソフトウェア製品ができることもまれではない。
【０００５】
（ｂ）これら多数のソースプログラムがさらにそれぞれ多数のバージョン（通常、数十バージョンから数百バージョン）をもつ。これはソフトウェアというものの変更のしやすさから、ソースプログラムはバグ修正や機能拡張のため少しずつ更新されるのが通常であるからである。
【０００６】
（ｃ）構成関係（組み立て関係）が多段多層的である。
（ｄ）要素の組み立てかたが多種である。最も単純なのはコピーやコンパイルであるが、そのほかにも、連携編集、インストール形式への組み立て、プラットフォームごとの特定形式への組み立て、変更のあった部分だけの抽出など、ソフトウェアに固有の多種多様な組み立てかたがある。
【０００７】
（ｅ）並行して多数のバージョンのソフトウェア製品を顧客に提供するのが常態である。このことがさらにソフトウェア構築の複雑さを増大させる要因になっている。これらの困難を克服するソフトウェア構築システムが実現できれば、ソフトウェア開発の信頼性の半分（残り半分はプログラミング）は大きく改善されることになる。
【０００８】
上述の（ａ）〜（ｅ）に挙げたようなソフトウェア構築に固有の多数性と複雑性により、ソフトウェア構築を人手でやるのは不可能に近い。ソフトウェア業界ではすでに、これを自動化するためにソフトウェア構築システム（以下、単に「ソフトウェア構築システム」と呼ぶ）を使うことが推奨され、実際、標準的な開発チームではなんらかのソフトウェア構築システムが導入されている。
【０００９】
従来のソフトウェア構築システムは以下の（ｆ）〜（ｋ）のような機能をもつ。
（ｆ）資産保管：ソースプログラム群を一定のデータベースに保管し、プログラマはそれを参照＆更新できる。
【００１０】
（ｇ）バージョン管理：ソースプログラムが更新されるとそれは新しいバージョンとして保管される。変更履歴の管理も行う。バージョン間での変動部分を比較することもできる（変動部分の比較をより視覚的におこなえるようにしているソフトウェア構築システムもある）。
【００１１】
（ｈ）バージョン分岐管理：バージョン体系は、単純に逐次的なものだけでなく分岐も許しており、本流とは別系列のバージョンを作り、管理することもできる。これにより、特定顧客向けに特別に修正したバージョンなども管理できる。
【００１２】
（ｉ）同時更新制御：複数のプログラマが同一のプログラムを同時更新することによる不整合を事前あるいは事後に調整することができる。
【００１３】
（ｊ）ベースライン管理（イモズル管理）：各ソースプログラムのどのリビジョン群がどの製品バージョンに組み込まれるかを指定し記憶させることができる。これにより、特定の製品バージョンに組み込むべきソースプログラム一式をとり出し、ビルドツールへの入力にすることができる。
【００１４】
（ｋ）分散管理：ソースプログラムが保管されるデータベースを地理的に分散配置することが可能なソフトウェア構築システムもある。
【００１５】
現状では、統合者（ソフトウェア構築者）は、上記の（ｆ）〜（ｋ）のような機能をもつソフトウェア構築システムでソースプログラムを管理し、かつ、Makefile言語やＡｎｔ言語で顧客提供製品の合成法（ソフトウェア製品が何々の資産を要素としてどのような関係で構成されるものか）を定義しておくことにより、ソフトウェア構築工程を自動化している。
【００１６】
また、従来のソフトウェア構築システムとしては、既存のソフトコンポーネントを組み合わせて、異なる環境下におけるシステム同士の連携や組み合わせを容易にするシステム（たとえば、下記特許文献１を参照。）や、制御論理および制御論理を規定したソースプログラムの内容を把握できるシステム（たとえば、下記特許文献２を参照。）が開示されている。
【００１７】
【特許文献１】特開２００２−３５８１９９号公報
【特許文献２】特開２０００−０８９９４５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述したように従来のソフトウェア構築システムは、ソフトウェア構築工程のある一定範囲をシステム化している。しかし、ソフトウェア構築の全工程が、大きく下記ｉ）〜iii）のフェーズから成るものとみたとき、従来のソフトウェア構築システムでは、このうちｉ）の資産管理（事前）については上述のようにシステム化されている。なお、従来のソフトウェア構築システムがもつ機能として列挙した（ｆ）〜（ｋ）も結局はｉ）資産管理（事前）に属するものである。
【００１９】
ｉ）資産管理（事前）：構成要素（ソースプログラム）の集合を正しく特定する。
ii）ビルド：それらを正しい構成方法で合成する。
iii）資産管理（事後）：合成された資産もまた適切に保管する。
【００２０】
しかし、ii）およびiii）のビルド以降はシステム化されていない。もちろん、Makefile言語やＡｎｔ言語はビルド手順を自動化するものではあるが、それは通常のプログラムと同様に、そのようにプログラムしておけば自動化できるというに過ぎず、ソフトウェア構築システムの中にｉ）資産管理（事前）と有機的な関係をもって一体化されシステム化されているわけではない。ここで「システム化されていない」とは、次の（ｌ）〜（ｎ）のようなことを指している。
【００２１】
（ｌ）Makefile言語やＡｎｔ言語での構成記述法は規格化されていない（プログラマによって同じことを別様に書ける余地が大きい）。その意味で通常のプログラムと変わらない。このことは、信頼性の点で以下の（ｌ−１）〜（ｌ−３）のような欠点につながる。
【００２２】
（ｌ−１）  構成定義の記述性や可読性が十分でないこと。
（ｌ−２）  プログラム誤りが混入しやすい。
（ｌ−３）  構成定義自体を構成定義「データ」として参照し、また利用すること（たとえば、部品の利用関係の誤りの自動検出など）が困難である。
【００２３】
（ｍ）そうして記述した構成定義体の実行は、ソフトウェア構築システムとは独立に人が行わなければならない（行うことができてしまう）。たとえば、構成定義体を実行する前の入力群の設定や実行後の出力資産の識別および保管は人手にまかされる。
【００２４】
（ｎ）さらにその後最終的な顧客提供製品を作るまでには、（ｎ−１）インストール形式への変換や（ｎ−２）変更のあった部分だけの抽出などの作業が必要であるが、それにはまた別のツールやスクリプトを作成し仕様しなければならないなど人手が何個所にも介在する。決して１コマンドでそれらが一気にできるのではない。
【００２５】
上記の（ｌ）〜（ｎ）という現状を楽観的にみれば、それぞれ、（ｌ’）Makefile言語やＡｎｔ言語を使って構成定義している、（ｍ’）それらによってビルドを自動化している、（ｎ’）製品作成はツールやスクリプトで自動化している、とも言えるので、いまだそれすらおこなわれていない構築法に比べて自動化は進んでいると評価している場合が多い。
【００２６】
しかし、その作業内容をさらに具体的に見てみると、上述のようにそれらの作業の隙間々々で人手が入っている。ソフトウェア構築工程では、少しの手順誤りによって作業全体の信頼性が瓦解する可能性があるので、このレベルでの自動化では大いに不安が残る。
【００２７】
要するに、従来のソフトウェア構築システムは、ソフトウェア構築工程のｉ）〜iii）のうちｉ）の部分をシステム化しているが、ii）、iii）についてはいまだシステム化されておらず人知と人手の介入を必要としている。実際そこで次に挙げるようないろんな誤りが混入する余地が大きい。
【００２８】
すなわち、どのソースプログラムのどのバージョンがどこにあるのかが分からず、ソースプログラムを一式収集するだけでも大変な作業であるため、混乱が生じるという問題があった。また、一方の提供物では修正したが、他方の提供物にも同じ修正を反映するべきであるにもかかわらず、修正を忘れてしまうという問題があった。また、ソースプログラムが膨大であるため、全体構成の一部が変更されていることに気が付かないこともあるという問題があった。
【００２９】
また、修正予定と広報している障害の修正を忘れてしまう場合もあるという問題があった。また、以前作った提供品とまったく同じものを再作成できる保証がなく、統合作業を
他者が肩代わりしにくいという問題もあった。また、他製品のコンポネントや部品の組み込みで間違いを起こすという問題もあった。
【００３０】
本発明は、上記に鑑みてなされたものであって、ソフトウェア構築の自動化を図ることにより、ユーザによる構築作業負担の軽減化、構築作業期間の短縮化、および構築されるソフトウェアの品質の向上を図ることができるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムを提供することを目的とする。
【課題を解決するための手段】
【００３１】
上述した課題を解決し、目的を達成するために、本発明にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、任意のソフトウェア資産の識別情報の指定を受け付け、識別情報が指定されたソフトウェア資産を合成出力となるソフトウェア資産（以下、「出力資産」という）として、当該出力資産の識別情報と前記出力資産の合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と前記入力資産を用いた前記出力資産の合成方法の識別情報とによって前記出力資産の構成を定義したソフトウェア資産構成定義体から、前記入力資産の識別情報と前記合成方法の識別情報とを特定し、ソフトウェアの構築元となるソフトウェア資産群の中から、識別情報が特定された入力資産を抽出し、識別情報が特定された合成方法と、抽出された入力資産とに基づいて、前記出力資産を合成することを特徴とする。
【００３２】
また、上記発明において、前記ソフトウェア資産構成定義体を、所定の記述形式の定義体に変換し、識別情報が指定されたソフトウェア資産を前記出力資産として、変換された定義体から前記入力資産の識別情報と前記合成方法の識別情報とを特定することとしてもよい。
【００３３】
また、上記発明において、前記ソフトウェア資産構成定義体に前記出力資産の保存に関する属性情報が記述されている場合、前記合成手段によって合成された出力資産を前記記憶手段に格納することとしてもよい。また、合成された出力資産は、前記ソフトウェアの構築元となるソフトウェア資産として記憶されることとしてもよい。また、合成された出力資産は、構築対象となる前記ソフトウェアであってもよい。
【発明の効果】
【００３４】
本発明にかかるソフトウェア構築システム、ソフトウェア構築方法、ソフトウェア構築プログラム、および記録媒体は、ソフトウェア構築の自動化を図ることにより、ユーザによる構築作業負担の軽減化、構築作業期間の短縮化、および構築されるソフトウェアの品質の向上を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００３５】
以下に、この発明の実施の形態にかかるソフトウェア構築システムについて説明する。
【００３６】
（ソフトウェア構築システムのシステム構成）
図１は、この発明の実施の形態にかかるソフトウェア構築システムを示すシステム構成図である。ソフトウェア構築システム１００は、管理サーバとなるソフトウェア構築装置１０１と、データベースサーバとなる資産保管庫１０２と、端末装置１０３とが、ＬＡＮ，ＷＡＮ，インターネットなどのネットワーク１１０を介して相互に交信可能に接続されている。
【００３７】
ソフトウェア構築装置１０１は、ソフトウェアの構成元となるソースコードのバージョ
ン管理機能と、ソースコードや後述するソフトウェア資産構成定義体からソフトウェアをビルドする自動ビルド機能とを備えている。資産保管庫１０２は、ソースコードやソフトウェア資産構成定義体を記憶する。端末装置１０３は、開発者や統合者が用い、ソースコードやソフトウェア資産構成定義体の記述や、ソフトウェア構築装置１０１に対する各種指示または呼び出しをおこなう。
【００３８】
（ソフトウェア構築装置、資産保管庫および端末装置のハードウェア構成）
つぎに、この発明の実施の形態にかかるソフトウェア構築装置１０１、資産保管庫１０２および端末装置１０３（以下、「ソフトウェア構築装置１０１等」という）のハードウェア構成について説明する。図２は、この発明の実施の形態にかかるソフトウェア構築装置１０１等のハードウェア構成を示すブロック図である。
【００３９】
図２において、ソフトウェア構築装置１０１等は、ＣＰＵ２０１と、ＲＯＭ２０２と、ＲＡＭ２０３と、ＨＤＤ（ハードディスクドライブ）２０４と、ＨＤ（ハードディスク）２０５と、ＦＤＤ（フレキシブルディスクドライブ）２０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）２０７と、ディスプレイ２０８と、Ｉ／Ｆ（インターフェース）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００４０】
ここで、ＣＰＵ２０１は、ソフトウェア構築装置１０１等の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。ＨＤＤ２０４は、ＣＰＵ２０１の制御にしたがってＨＤ２０５に対するデータのリード／ライトを制御する。ＨＤ２０５は、ＨＤＤ２０４の制御で書き込まれたデータを記憶する。
【００４１】
ＦＤＤ２０６は、ＣＰＵ２０１の制御にしたがってＦＤ２０７に対するデータのリード／ライトを制御する。ＦＤ２０７は、ＦＤＤ２０６の制御で書き込まれたデータを記憶したり、ＦＤ２０７に記憶されたデータをソフトウェア構築装置１０１等に読み取らせたりする。
【００４２】
着脱可能な記録媒体として、ＦＤ２０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Digital Versatile Disk）、メモリーカードなどであってもよい。ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４３】
Ｉ／Ｆ２０９は、通信回線を通じてインターネットなどのネットワーク１１０に接続され、このネットワーク１１０を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク１１０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００４４】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４５】
スキャナ２１２は、画像を光学的に読み取り、ソフトウェア構築装置１０１等内に画像
データを取り込む。なお、スキャナ２１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００４６】
（資産保管庫の機能）
つぎに、資産保管庫１０２の機能について説明する。資産保管庫１０２は、ソフトウェア資産（以下、単に「資産」と呼ぶこともある。）を保管する機能を有する。エクスプローラの場合などと同様に、階層的に配置されたフォルダにソースプログラムや顧客提供バイナリなどの電子文書を保管する。もちろん、それら資産の参照および更新もグラフィカルにおこなうことができる。
【００４７】
通常の利用者（開発者）は、ソフトウェア資産である電子文書（ソースプログラムなど）の登録、参照、更新の操作をおこなうが、その際の複数人による同時更新を調整する機能、アクセス権限制御、および更新履歴機能などがある。
【００４８】
資産保管庫１０２のフォルダ階層は、上位から「データストア」／「プロジェクト」／「コンフィギュレーション（構成）」の順となっている。「データストア」は、単にプロジェクトの一つ上位の括りをあらわす。また、「プロジェクト」は、たとえばInterstageApplication ServerやTeamwareOfficeなどの単位に対応し、各「コンフィギュレーション」は、Interstage Application Serverのバージョン97やTeamwareOfficeのバージョン185などの各バージョンに対応する。
【００４９】
これらの中で「コンフィギュレーション」は、相互に論理的に密接に関連した資産とその適切なバージョン集合を特定するもので、ソフトウェアの構成管理上、最も重要な単位である。「コンフィギュレーション」は、「顧客提供資産の単位（たとえば、InterstageApplication ServerやTeamwareOfficeなどの単位）のバージョン」と１対１対応するもので、コンフィギュレーションのフォルダの中には、その提供資産のそのバージョンで使われている資産が基本的にすべて入っている。
【００５０】
ただし、他のコンフィギュレーションに属する資産をいわば外部参照する場合もあるので、その場合はその資産は自コンフィギュレーション内にある必要はない。また、コンフィギュレーションは家系などと同様に、親子、兄弟（すなわち分岐）、子孫などに相当する系統をなす。
【００５１】
ここで、この発明の実施の形態にかかるコンフィギュレーション（構成）の系統について説明する。図３は、この発明の実施の形態にかかるコンフィギュレーション（構成）を示す系統図である。図３において、丸図形はコンフィギュレーション（構成）、矢印はコンフィギュレーション（構成）の親子関係を示している。顧客提供資産（顧客提供資産名：TW Office）３００については、構成Ｃ（Ｃ１〜Ｃ４）の親子関係が成立している。
【００５２】
構成Ｃは、資産ＩＤとなる顧客提供資産名：TW Officeを有している。たとえば、構成Ｃ１の資産ＩＤは「TW Office,15」、構成Ｃ２の資産ＩＤは「TW Office,16」、構成Ｃ３の資産ＩＤは「TW Office,16.1」、構成Ｃ４の資産ＩＤは「TW Office,17」である。また、各構成Ｃ内のＭａ〜Ｍｃは資産Ｍをあらわしており、末尾の数字（１５，１６，１６．１，１７）は各資産Ｍのリビジョンをあらわしている。
【００５３】
つぎに、この発明の実施の形態にかかる標準的フォルダ構成規約について説明する。図４は、この発明の実施の形態にかかる標準的フォルダ構成を示す説明図である。コンフィギュレーション（構成）の下位のフォルダ構成の作成法にも一定の規約がある。すなわち、図４において、コンフィギュレーションである「TeamwareOffice,185」の直下は、ＳＲＣ（ソースファイル）、ＢＩＮ（バイナリファイル）、ＰＫＧ（提供資産）、ＤＯＣ（ドキュメント）など、資産の種類に対応したフォルダ構成とする。
【００５４】
また、図４においては、データストア、プロジェクト、コンフィギュレーションの順に階層化されている。また、コンフィギュレーションの直下のフォルダ内には、当該フォルダ名を拡張子とするファイルが保存される。たとえば、フォルダＳＲＣには、「Common」,「Mail」,「Library」,「Other」といったソースファイルが保存されている。
【００５５】
（資産構成の定義）
つぎに、資産構成の定義について説明する。「資産の構成を定義する」とは、ソフトウェア資産の論理構成、すなわち、それぞれの資産が、何々の資産を要素として、どのような関係で構成されているものであるかを定義することである。資産構成を定義する言語としては、現状ではMakefile言語が最もよく使われており、近年ではAnt言語が急速に普及しつつあるが、本実施の形態では独自の構成定義言語を用意している。
【００５６】
構成定義言語では、すべての資産を、資産(Material)／関係(Relation)／要素(Element)の３つの概念で定義する。たとえば、バイナリコードという資産は、ソースプログラムという要素をコンパイルという関係で構成したものであると定義することができる。図５は、資産の定義を示す図表である。図５において、Ａ〜Ｈは「資産」、Ｒａ〜Ｒｃ，Ｒｇ，Ｒｈは「関係」、Ｅ１〜Ｅ９は「要素」を示している。たとえば、資産の要素もまた（別の）資産である。たとえば、資産Ａの要素Ｅ１は、資産Ｂである。また、資産Ｈの要素Ｅ５は、資産Ａである。
【００５７】
このように、資産の要素もまた別の資産であるので、それぞれの資産定義をモジュールとし、要素を接合点としてそれらモジュールを組み合わせることにより、何段にも多段の資産構成を定義することができ、多頭の構成を定義することもできる。図６は資産定義の組合せ結果を示す図表である。資産定義のモジュール性から、当初は考えていなかった新たな高位資産を後になって追加定義したり、構成を変更したりすることも容易である。
【００５８】
つぎに、構成定義の記述について説明する。図７は、構成定義の記述例を示す説明図であり、図８は、図７に示した構成定義を示す説明図である。構成定義言語は抽象化指向の宣言型言語である。上述した構成定義言語では、ソフトウェアの構成を資産／関係／要素の（単純な）繰り返しで定義する。そして各資産は存在していればかならず、構成定義で静的に定義されているとおりのものとして存在することが保証される（構成定義言語の宣言性）。ユーザは、通常の手続き型言語でのように、処理の実行順序をどうするか、どういう順序で処理されたか、同じことを複数回実行したらどうなるか、などを意識しなくてよい。ここで、構成定義について簡単に説明する。
【００５９】
図７および図８に示した構成定義は、「資産Ｍは資産Ｅ１と資産Ｅ２と関係Ｒを持つものである」と読む。この一つの構成定義が、Buildの場面では「資産Ｅ１と資産Ｅ２を操作Ｒで組み合わせて資産Ｍを作る」という意味になり、資産利用関係の追跡の場面では「資産Ｍは資産Ｅ１と資産Ｅ２を関係Ｒで利用している」という意味で使われる。Buildの場面ですでに資産Ｍが存在している場合は、「なにもしない」という意味にもなる。このように、構成定義言語の抽象性と宣言性は、構成定義の可読性および柔軟性を高め、最終的には構成管理業務の信頼性の向上を図ることができる。
【００６０】
（ソフトウェア資産構成定義体のデータ構造）
つぎに、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造について説明する。ソフトウェア資産構成定義体は、すべての資産の属性情報の集合である。この属性情報の集合は単一ファイルで存在する。ここでは、任意の資産についてのソフト
ウェア資産構成定義体について説明する。
【００６１】
図９は、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造を示す説明図である。図９において、ソフトウェア資産構成定義体９００は、属性（attribute）情報９２０（９０１〜９１６）の集合である。また、資産は、基本資産と合成資産とを含む。基本資産とは、たとえば、ソースプログラムであり、合成資産とは、たとえば、ソースプログラムをコンパイルまたは編集した結果生成される実行形式バイナリデータである。
【００６２】
また、資産は、資産ＩＤ９３０（構成名９０１、資産名９０２、資産バージョン９０３、資産種別９０４、動作ＯＳ９０５、エリア９０６、資産エディション９０７、資産形式９０８）によって特定される。あらたに構成が作成された場合、資産バージョン９０３、直前バージョン９０９、外部名９１０、存在９１６以外の属性情報が、あらたに作成された構成の属性情報として引き継がれる。
【００６３】
また、属性情報９２０のうち、構成名９０１は、当資産が所属する構成を指定する。省略時は、当属性情報９２０が所属する構成と同じとみなす。構成名９０１は、資産が他の構成に所属する場合、たとえば他製品に属するコンポネントを共用するような場合や多くの製品に共通の資産を組み込む場合に使われる。共通資産群は独立の構成として管理される。
【００６４】
また、資産名９０２は、資産の名前を示す。 たとえば、「TWmail002.c」、「Istage008.exe」などが挙げられる。資産名９０２は、資産内容が入っているファイル名あるいはフォルダ名と一致していなければならない。フォルダの区切りは半角のスラッシュ「／」とする。また、集合資産の名前は、フォルダ名または「フォルダを指定したワイルドカード」と一致することになる。
【００６５】
ファイル名が同一だが資産としては異なる場合は、フォルダ名で修飾することにより区別する。ターゲット資産（顧客に渡す資産）でない場合、構成名が省略されているとみなす。したがって、この場合も資産ＩＤは構築システムの中で一意になる。また、ターゲット資産では、通常、資産名が構成名と同じになるので省略することができる。ターゲット資産の場合、資産名９０２は、構成名９０１と一致していなければならない。
【００６６】
資産バージョン９０３は、当資産が所属する構成のバージョンを示す。したがって、同一の構成に所属する各資産は同一のバージョン番号をもつことになる。なお、構成の名前のバージョン部分は、その構成のバージョン番号を表していなければならない。そのバージョン番号は、「ＲＣＳ規則」にしたがって付与するのが望ましい。資産バージョン９０３が省略された場合は、当属性情報９２０が所属する構成のバージョンと同じとみなす。構成内に同じ資産名で複数リビジョンがある場合、ソフトウェア構築システム１００は、そのうちの最新リビジョンのものだけを有効とする。
【００６７】
資産種別９０４は、Regular（正規）、PMP（予防補修パック）、EmergentFix（緊急修正パック）、SoftLook（お試し版）、Any（いずれか）のいずれか一つを指定する。動作ＯＳ９０５は、資産が動作するＯＳを示す。エリア９０６は、国または地域をあらわし、資産が国内版か海外版かを示す。資産エディション９０７は、資産のエディション（Standard、Enterprise、Personal、Other）のいずれか一つを指定する。
【００６８】
資産形式９０８は、資産の形式をあらわし、Packed（圧縮）、Unpacked（非圧縮）、Other（その他）のいずれか一つを指定する。直前バージョン９０９は、当資産がどのバージョンをもとに作られたかを示す。省略された場合は、当資産が所属する構成の直前バージョンと同じとみなす。
【００６９】
外部名９１０は、当資産の意味や目的など人にとってわかりやすい名前や説明を記述する。たとえば、「TWOffice  V5.1  日本語版  PMP0405」、「TWOffice  V5.3  日本語版  日本新聞社向け固有修正００２」などが挙げられる。たとえば、バージョンについても、ソフトウェア構築システム１００が扱うバージョンと、上の例にある製品バージョンとは同じ意味ではないので、この外部名９１０を記述する意義がある。
【００７０】
関係９４０は、タイプ９１１と、要素９１２と、Ｄ−Ｐａｒａｍ９１３とを有する。関係９４０は、要素の合成方法を示し、タイプ９１１は、関係９４０の型をあらわしている。図１０は、関係と要素との関連性を示す図表である。また、Ｄ−Ｐａｒａｍは、タイプ９１１のオプションを記述している。図１１は、Ｄ−Ｐａｒａｍを示す図表である。
【００７１】
また、図９において、ターゲット９１４は、当該資産がユーザに提供する可能性のある資産であるか否かを示す。たとえば、ソースプログラムは通常、not-targetである。個々のロードモジュールも通常、not-targetである。しかし、ロードモジュールの集合はtargetとなり得る。
【００７２】
また、保存（persistent）９１５は、資産の資産内容を保存するか否かを指定する。合成過程での中間資産、たとえば、コンパイルの結果得られるオブジェクトなどは通常not-persistentとする。ターゲット資産については、persistentでなければならない。また、存在（Existent）９１６は、資産の資産内容がすでに存在しているか否かを示す。特に合成資産の場合は、その資産がすでに合成済みであるか、これから合成しなければならないかを示すものとなる。統合者は、ビルドやり直し時にこの本パラメタ（存在９１６）を適宜リセットすることにより部分ビルドを制御することもできる。ただし、再ビルド時には、新しい構成を作るのが本来のやりかたであり、本パラメタ（存在９１６）を個々に変更すべきでない。
【００７３】
（ソフトウェア資産構成定義体の記述）
次に、ソフトウェア資産構成定義体の記述について説明する。ソフトウェア資産構成定義体は、ソフトウェア資産の構成を構成定義言語で記述した情報である。構成定義言語とは、構成定義の記述法を規格化したものであり、抽象化および宣言型言語という特長をもつ。具体的には、以下（Ａ）〜（Ｍ）の特長がある。
【００７４】
（Ａ）  一つの構成定義が、資産合成「プログラム」としての役割と資産構成「データ」としての役割の両方に使用できる。
（Ｂ）  ＯＳや開発言語に無依存である。
（Ｃ）  資産単位に定義することができる。従来技術では合成プロセスを実行するコマンド列（すなわち合成プログラム）を記述していた。
【００７５】
（Ｄ）  すべての構成を、「資産／関係／要素」のシンプルな繰りかえしで定義することができる。この「資産」は合成すべき出力資産、「関係」は合成方法、「要素」は合成の入力となる要素資産群を定義するものである。
（Ｅ）  図１０に示したように、「関係」名は、一般性の高い用語（たとえば、コンパイル）を使うことができる。従来技術では、開発言語などに依存した特殊用語が使用されており、記述性および可読性に問題があった。
（Ｆ）  たとえば大規模の合成処理の各部分合成を逐次処理するか並列処理するかを自動判別することができる。すなわち、構成定義のツリ−の分岐を参照することにより、自動判別が可能になる。
【００７６】
（Ｇ）  単一資産と集合資産の概念により、ファイル資産とフォルダ資産を同格に扱うことができる。すなわち、ファイルとフォルダを意識せずに扱うことができる。
（Ｈ）  集合資産の概念により、構成定義時に、一般の集合操作（ｅｘ．集合化（フォルダ化）／集合和／集合差／集合積／集合の集合など）に相当する関係を使用することができる。これにより、前バージョンとの差分のみ抽出するなどの実際の場面で現れる操作も一つの「関係」として記述できる。
（Ｉ）  集合操作は「宣言的」な関係として実現される。これにより、各資産は存在していればかならず、構成定義で静的に定義されているとおりのものとして存在することが保証される。図１２は、構成定義の一記述例を示す説明図である。図１２は、集合資産のフォルダＭの配下にファイルＥ１およびファイルＥ２があることを示している。この図１２に示した構成定義を実行する場合、集合資産はファイルシステム上のフォルダＭとして実現される。
【００７７】
このとき、フォルダＭ内にすでになんらかのファイルＰおよびファイルＱが存在している場合、「構成定義の宣言性」の重要性を意識していない従来型の方法では、この構成定義を「手続き的に」解釈して、図１３に示した状態になる。図１３は、従来における構成定義実行後のフォルダ状態を示す説明図である。一方、本発明では、図１２の構成定義実行後の状態は図１４に示した状態になる。図１４は、この発明の実施の形態における構成定義実行後のフォルダ状態を示す説明図である。つまり、フォルダＭに元あったファイルＰおよびファイルＱは削除される。
【００７８】
（Ｊ）  複雑なパッケージ化操作を１語で記述するPack関係を用意している。
（Ｋ）  標準化されていない合成操作を自由に記述できるようにTool関係が用意されている。
（Ｌ）  過渡的に抽象化または標準化できないプラットフォーム依存性や特殊パラメタを局所化して記述するための機構（上述の図１１に示したＤ−Ｐａｒａｍ記述)が用意されている。
【００７９】
（Ｍ）  資産ごとに、合成関係以外の各種属性を定義できる（たとえば、図９に示した保存９１５やターゲット９１４）。これらの属性は「宣言的」な意味をもっているので、処理上は複数の意味をもつものとして使用することができる。たとえば、保存９１５（Persistent属性）は、本来は単に、出来上がった資産を永続的に保存するか否かを意味するものであるが、非保存（not-Persistent属性）を積極的に利用することにより、通常のプログラミングにおけるサブルーチン化手法を構成定義にも導入することができる。
【００８０】
つまり、中間資産を定義しておくほうが構成定義全体のモジュラリティや見通しがよくなる場合は、それらの中間資産は保存９１５においてnot-Persistentであると指定しておけば、中間資産の個数がいくら多くなっても最終出力結果にはなんら影響しないので、構成定義全体の可読性を追求することができる。また、ターゲット９１４（Target属性）は、本来は、その資産が顧客提供資産であるか否かを示すものであるが、合成過程で、その進行状況を操作者に知らせたり、失敗時のやり直しをするときの「適切な粒度の単位」として使用することもできる。
【００８１】
（集合操作の具体例）
つぎに、上述した（Ｈ）に示した集合操作の具体例について説明する。集合操作には、上述したように、集合化、集合和、集合差、集合積、集合の集合（メタ集合）の概念がある。図１５は、集合化の一例を示す説明図である。集合化とは、いくつかのファイルからなるフォルダを定義することに対応しており、集合和、集合差、集合積、集合の集合（メタ集合）の前提となる。たとえば、構築システムにおいて、「フォルダＦの配下にファイルａ、ｂ、ｃがある」という構成状態を定義するには、図１５に示したように、構成定義
を記述する。通常の数学記号で表せば、Ｆ＝｛ａ，ｂ，ｃ｝になる。以降、この記法を用いて説明する。
【００８２】
つぎに集合和について説明する。集合和は、たとえば、２つのフォルダの中にあるファイル群をあわせて１つのフォルダにする、という操作に使われる。具体的には、フォルダＦ＝｛ａ，ｂ，ｃ｝、フォルダＧ＝｛ｐ，ｑ｝のとき、以下のように集合和（「＋」で表す）を用いて、これらのファイル群からなる新たなフォルダを作ることができる。
新たなフォルダ：Ｈ＝Ｆ＋Ｇ＝｛ａ，ｂ，ｃ，ｐ，ｑ｝
【００８３】
つぎに集合差について説明する。集合差は、たとえば、前バージョンから変更のあったファイルを抜き出してそれらだけからなる修正パックを作るときに使われる。具体的には、前バージョンが  Ａ＝｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１｝であり、
新バージョンが  Ｂ＝｛ａ１，ｂ２，ｃ１，ｄ１，ｅ１，ｆ２，ｇ１｝
であるとする。ここで数字は同じファイルの内容の違いを表しているものとする。
【００８４】
つまり、上の記述は、新バージョンでは前バージョンに対してファイルｂとファイルｆの内容が変更され、かつファイルｇがあらたに追加されたという状況を表している。このとき、修正パック：Ｃ＝Ｂ−Ａと定義すれば、通常の集合差の演算規則に従うことにより、下記のようになり、期待するとおりの修正パックの内容が得られる。このように、集合差は修正パックを作るという実際場面で有効である。
【００８５】
Ｃ＝Ｂ−Ａ
＝｛ａ１，ｂ２，ｃ１，ｄ１，ｅ１，ｆ２，ｇ１｝
−｛ａ１，ｂ１，ｃ１，ｄ１，ｅ１，ｆ１｝
＝｛ｂ２，ｆ２，ｇ１｝
【００８６】
つぎに集合積について説明する。集合積は、２つのフォルダ間の共通ファイルだけを抜き出してあらたなフォルダとするという際に使われる。また、集合の集合（メタ集合）は、フォルダを多段に階層化して顧客提供資産とする場合に使われる。この場面は実際にも頻繁に現れる。たとえば、フォルダＡ＝｛ａ，ｂ，ｃ，Ｆ｝、フォルダＦ＝｛ｄ，ｅ｝とし、ファイルｆを要素としてもつフォルダＧを作るときには、Ｇ＝｛Ａ，Ｆ，ｆ｝と定義すればよい。このとき、フォルダＧは、下記のとおりである。
【００８７】
Ｇ＝｛Ａ，Ｆ，ｆ｝＝｛｛ａ，ｂ，ｃ，｛ｄ，ｅ｝｝，｛ｄ，ｅ｝，ｆ｝
なお、Ｇ≠｛ａ，ｂ，ｃ，ｄ，ｅ，ｆ｝、Ｇ≠｛｛ａ，ｂ，ｃ，｛ｄ，ｅ｝｝，ｆ｝である。
【００８８】
（ソフトウェア構築システムのシステム構成の具体例）
つぎに、この発明の実施の形態にかかる構築システムのシステム構成の具体例について説明する。図１６は、この発明の実施の形態にかかる構築システムのシステム構成の具体例を示すブロック図である。図１６において、ソフトウェア構築装置１０１は、翻訳器１６０１と、ソフトウェア構築エンジン１６０２と、ソフトウェア構築器１６０３とを備えている。
【００８９】
また、図１６に示した例では、資産保管庫１０２としてはＥｎａｂｌｅｒ、ソフトウェア構築エンジン１６０２としてはＡｎｔ実行システムをそれぞれ使用する。資産保管庫１０２およびソフトウェア構築エンジン１６０２として他のシステム（たとえば資産保管庫１０２はＣＶＳ、ソフトウェア構築エンジン１６０２はＭａｋｅｆｉｌｅ）を使用する場合も実装原理は同じである。また、図１６において、黒線矢印は、指示または呼び出しを示しており、点線矢印は、入力または参照を示しており、二重線矢印は、出力または格納を示している。また、矢印上の人型マークは、当該矢印が人手による操作が入ることを示している。
【００９０】
ここで、ソフトウェア構築システム１００の全体処理について説明する。図１６において、各ソフトウェア開発者は、端末装置１０３Ａにおいてソースプログラムの内容を作成または更新し、その登録をソフトウェア構築装置１０１に指示する（ステップＳ１６０１）。ソフトウェア構築装置１０１はそのソースプログラム１６１１を配下の資産保管庫１０２に格納する（ステップＳ１６０２）。
【００９１】
つぎに、ソフトウェア統合者が端末装置１０３Ｂで各ソフトウェア資産の構成を構成定義言語で記述し（こうして記述されたものを「ソフトウェア資産構成定義体」と呼ぶ）、その登録をソフトウェア構築装置１０１に指示する（ステップＳ１６０３）。ソフトウェア構築装置１０１は、指示されたソフトウェア資産構成定義体１６１２を資産保管庫１０２に格納する（ステップＳ１６０４）。
【００９２】
ソフトウェア資産構成定義体１６１２が資産保管庫１０２に登録されると、ソフトウェア構築装置１０１は、翻訳器１６０１によりソフトウェア資産構成定義体１６１２を解釈し、Ａｎｔ言語で記述された定義体（「Ａｎｔ定義体１６１３」と呼ぶ）に翻訳する（ステップＳ１６０５）。そして、このＡｎｔ定義体１６１３も資産保管庫１０２に格納する（ステップＳ１６０６）。
【００９３】
ソフトウェア統合者の端末装置１０３Ｂからソフトウェア資産を構築する指示が入力、すなわち、構築すべきソフトウェア資産の資産ＩＤ（図９を参照）が指定されると（ステップＳ１６０７）、ソフトウェア構築装置１０１のソフトウェア構築器１６０３は、内部作業域Ｗを開設してＡｎｔ実行システム１６０２の動作環境の準備をした後、Ａｎｔ実行システム１６０２を起動する（ステップＳ１６０８）。
【００９４】
そして、Ａｎｔ実行システム１６０２は、ステップＳ１６０７で資産ＩＤが指定された資産に対応するＡｎｔ定義体１６１３を入力する。その際、資産保管庫１０２に格納されているソースプログラム１６１１やその他のソフトウェア合成資産１６１４も入力される（ステップＳ１６０９）。Ａｎｔ実行システム１６０２は、入力されたＡｎｔ定義体１６１３にしたがって、ソースプログラム１６１１やその他のソフトウェア合成資産１６１４を用いてソフトウェア構築処理を実行する。そして、Ａｎｔ実行システム１６０２の資産構築結果（合成した資産あるいは出力）であるソフトウェア合成資産１６１５は、中間生産物として内部作業域Ｗに格納される（ステップＳ１６１０）。
【００９５】
また、ソフトウェア構築器１６０３は、ソフトウェア資産構成定義体１６１２に記述されている各資産の属性情報９２０を参照して（ステップＳ１６１１）、内部作業域Ｗにおかれている各ソフトウェア合成資産１６１５を読み込み（ステップＳ１６１２）、資産保管庫１０２へ正式に書き戻す（ステップＳ１６１３）。
【００９６】
なお、内部作業域Ｗには新たな合成資産として存在していてもその合成資産が保存９１５の属性情報をもっていないものであれば、その合成資産は資産保管庫１０２には格納しないという制御もこのときにおこなう。その後、ソフトウェア構築装置１０１は内部作業域Ｗの消去などの後処理をおこなう。これにより、ソフトウェア構築装置１０１の使用者（統合者）は、ソフトウェア構築装置１０１の内部処理や中間生産物（ソフトウェア合成資産１６１５）をまったく意識しなくてよい。
【００９７】
つぎに、上述した翻訳器１６０１について説明する。翻訳器１６０１は、ソフトウェア資産構成定義体１６１２をＡｎｔ定義体１６１３に変換する。ソフトウェア資産構成定義
体１６１２は、ＸＭＬの形式にしたがって構成定義言語で記述されている。Ａｎｔ定義体１６１３は、ＸＭＬの形式にしたがって、フリーウェアであるＡｎｔの文法により記述されている。翻訳器１６０１は、記述形式を変換する一種のコンパイラである。したがって、その実装方式自体は一般のコンパイラと同様に種々あり得る。最も適切な実現方式は、翻訳元の記述から翻訳先の記述への変換規則をコンパイラに入力することによって所望の翻訳器１６０１を生成するという手法がある。
【００９８】
このソフトウェア資産構成定義体１６１２からＡｎｔ定義体１６１３への翻訳も、基本的に以下のような変換規則にしたがっておこなえばよい。図１７は、ソフトウェア資産構成定義体からＡｎｔ定義体への翻訳を示す説明図である。ソフトウェア資産構成定義体１６１２の資産名「Ｎ」は、Ａｎｔ定義体１６１３においてターゲット名に変換されている。
【００９９】
また、ソフトウェア資産構成定義体１６１２のタスク名「Ｔ」は、Ａｎｔ定義体１６１３において「タスク」とよばれる一種のコマンドである（図１７では「destfile」）。たとえば、「compile」はコンパイルするというコマンドである。Ａｎｔ定義体１６１３が標準的に備えていないタスクは独自タスクとして、別途定義しておけばよい。ソフトウェア資産構成定義体１６１２の要素（Element）Ｅ１〜Ｅｎは、Ａｎｔ定義体１６１３において、「depends」と「sourcefile」で定義される。
【０１００】
ここで、翻訳器１６０１によるソフトウェア資産構成定義体１６１２からＡｎｔ定義体１６１３への翻訳処理を具体的に説明する。図１８は、顧客提供資産の構成（ツリー構造）の一例を示す説明図であり、図１９は、図１８に示した顧客提供資産のソフトウェア資産構成定義体の記述例を示す説明図である。
【０１０１】
図１８において、この顧客提供資産（構成名：TeamwareOffice）１８０１は、資産（資産名：TW.exe）１８１１、資産（資産名：Mail.dll）１８１２、資産（資産名：Library.dll）１８１３および資産（資産名：Readme.txt）１８１４を、集合化（Set）という関係Ｒ１によって要素としている。資産１８０１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０１によって定義されている。
【０１０２】
また、資産１８１１は、資産（資産名：TW.o）１８２１を、リンク（Link）という関係Ｒ２によって要素としている。資産１８１１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０２によって定義されている。
【０１０３】
また、資産１８１２は、資産（資産名：Mail01.）１８２２および資産（資産名：Mail02.）１８２３を、リンク（Link.cpp）という関係Ｒ３によって要素としている。資産１８１２の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０３によって定義されている。
【０１０４】
また、資産１８１３は、資産（資産名：Library01.o）１８２４および資産（資産名：Library02.o）１８２５を、リンク（Link.cpp）という関係Ｒ３によって要素としている。資産１８１３の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０４によって定義されている。
【０１０５】
また、資産（資産名：TW.o）１８２１は、ソースファイルとなる資産（資産名：TW.cpp）１８３１を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２１の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０５によって定義されている。
【０１０６】
また、資産１８２２は、ソースファイルとなる資産（資産名：Mail01.cp）１８３２を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２２の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０６によって定義されている。
【０１０７】
資産１８２３は、ソースファイルとなる資産（資産名：Mail02.cp）１８３３を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２３の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０７によって定義されている。
【０１０８】
資産１８２４は、ソースファイルとなる資産（資産名：Library01.cp）１８３４を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２４の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０８によって定義されている。
【０１０９】
資産１８２５は、ソースファイルとなる資産（資産名：Library02.cp）１８３５を、コンパイル（compile.cpp）という関係Ｒ４によって要素としている。資産１８２５の構成は、図１９に示したソフトウェア資産構成定義体１９００の記述情報１９０９によって定義されている。すなわち、資産１８１１〜１８１３はそれぞれ、要素１８３１〜１８３５などのソースファイルをコンパイルおよび連携編集することによって作成される。
【０１１０】
また、図１９に示したソフトウェア資産構成定義体１９００から変換されたＡｎｔ定義体を図２０に示す。図２０は、図１９に示したソフトウェア資産構成定義体から変換されたＡｎｔ定義体を示す説明図である。Ａｎｔ定義体２０００は、翻訳器１６１３によってソフトウェア資産構成定義体１９００から翻訳されたＸＭＬ形式の電子文書である。
【０１１１】
つぎに、図１６に示したソフトウェア構築器１６０３のソフトウェア構築処理について説明する。図２１は、図１６に示したソフトウェア構築器１６０３のソフトウェア構築処理を示すフローチャートである。図２１において、まず、ビルド指示（構成名“ｃ”と資産ＩＤ“ｉ”の指定）があった場合（ステップＳ２１０１：Ｙｅｓ）、Ａｎｔ実行用の内部作業域Ｗを開設する（ステップＳ２１０２）。
【０１１２】
つぎに、資産保管庫１０２から、指定された構成名“ｃ”と同じ名前をもつフォルダ“ｃ”内のすべてのファイルを内部作業域Ｗに読み出す（ステップＳ２１０３）。なお、指定される構成名は、資産保管庫１０２の中のフォルダ名に対応している。また、このとき、資産保管庫１０２に対してはチェックアウト処理をおこなう。
【０１１３】
そして、指定された資産ＩＤ“ｉ”に対応するＡｎｔ定義体１６１３のファイル名と資産ＩＤ“ｉ”を指定してＡｎｔ実行システム１６０２を起動する（ステップＳ２１０４）。なお、指定された資産ＩＤ“ｉ”に対応するＡｎｔ定義体１６１３も、読み込んだファイルの一つとして内部作業域Ｗに存在する。Ａｎｔ定義体１６１３のファイル名は“c.xml”である。また、資産ＩＤ“ｉ”は、Ａｎｔ定義体１６１３の中のターゲット名と一致している。
【０１１４】
Ａｎｔ実行システム１６０２では、指定されたＡｎｔ定義体１６１３の中の特定のターゲットを実行する。実行するターゲット名は、呼び出し元となるソフトウェア構築器１６０３によって指定された資産ＩＤから特定することができる。なお、Ａｎｔ実行システム１６０２の実行中に生成される合成資産は、内部作業域Ｗに格納される。
【０１１５】
また、Ａｎｔ実行システム１６０２の実行が終了した場合（ステップＳ２１０５：Ｙｅ
ｓ）、ソフトウェア資産構成定義体“c.attr”を参照しつつ、内部作業域Ｗにある資産（ファイルやフォルダ）のうち、保存９１５の属性情報がYesである合成資産を資産保管庫１０２に書き戻す（ステップＳ２１０６）。そして、資産保管庫１０２に対してチェックインする。最後に、Ａｎｔ実行システム１６０２用の内部作業域Ｗを消去する（ステップＳ２１０７）。
【０１１６】
（ソフトウェア構築システムの機能的構成）
つぎに、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成について説明する。図２２は、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成を示すブロック図である。なお、図１および図１６に示した構成と同一構成には同一符号を付し、その説明を省略する。図２２において、ソフトウェア構築装置１０１は、入力部２２０１と、登録／更新部２２０２と、変換部２２０３と、指定部２２０４と、特定部２２０５と、抽出部２２０６と、合成部２２０７と、格納部２２０８と、から構成されている。
【０１１７】
入力部２２０１は、開発者の操作により、端末装置１０３において作成または更新されたソースコードなどのソフトウェア資産やソフトウェア資産構成定義体１６１２（たとえば、図１９に示したソフトウェア資産構成定義体１９００）の入力を受け付ける。入力部２２０１は、ソフトウェア資産構成定義体１６１２としての入力を受け付ける。
【０１１８】
ソフトウェア資産構成定義体１６１２は、合成出力となるソフトウェア資産（以下、「出力資産」という）の識別情報と合成入力となるソフトウェア資産（以下、「入力資産」という）の識別情報と入力資産を用いた出力資産の合成方法の識別情報とによって出力資産の構成を定義した電子文書であり、たとえば、ＸＭＬ形式で記述されている。
【０１１９】
ここで、入力資産とは、出力資産の合成元となるソフトウェア資産、すなわち要素である。また、合成方法は、出力資産と入力資産との関係を示しており、たとえば、図１１に示したcompile,link,compressなどのタイプ９１１である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、入力資産は、資産１８１１〜１８１４であり、合成方法は、集合化を示す関係Ｒ１である。
【０１２０】
また、出力資産の識別情報とは、資産ＩＤ９３０に記述されている構成名９０１または資産名９０２である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、資産１８０１の識別情報とは、資産１８０１の構成名：TeamwareOfficeである。また、出力資産を資産１８１１とする場合、資産１８１１の識別情報とは、資産１８１１の資産名（資産名：TW.o）である。
【０１２１】
また、合成方法の識別情報とは、関係９４０のタイプ９１１である。図１８を用いて説明すると、出力資産を資産１８０１とする場合、入力資産は、資産１８１１〜１８１４であり、合成方法は、集合化（Set）を示す関係Ｒ１である。
【０１２２】
また、登録／更新部２２０２は、入力が受け付けられたソフトウェア資産を資産保管庫１０２に書き込む。ソフトウェア資産群２２１０は、このようにして書き込まれたソースファイルや、後述する合成部２２０７によって合成されたソフトウェア合成資産１６１４などのソフトウェア資産の集合である。入力部２２０１および登録／更新部２２０２は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによって、またはＩ／Ｆ２０９によって、その機能を実現する。
【０１２３】
また変換部２２０３は、登録／更新部２２０２においてソフトウェア資産構成定義体１
６１２が登録された場合、そのソフトウェア資産構成定義体１６１２を、後述する合成部２２０７によって解釈可能な記述形式の定義体（以下、変換定義体２２１１）に変換する。合成部２２０７が、たとえば、図１６に示したＡｎｔ実行システム１６０２である場合、ソフトウェア資産構成定義体１６１２は、Ａｎｔ定義体１６１３という変換定義体２２１１に変換される。この変換部２２０３は、具体的には、図１６に示した翻訳器１６０１に相当し、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。
【０１２４】
また、指定部２２０４は、任意のソフトウェア資産の識別情報の指定を受け付ける。具体的には、統合者が端末装置１０３を操作することによって、構築すべきソフトウェア資産の資産ＩＤ９３０に記述されている構成名９０１または資産名９０２の指定を受け付ける。この指定部２２０４は、具体的には、たとえば、図２に示したＩ／Ｆ２０９によって、その機能を実現する。
【０１２５】
また、特定部２２０５は、指定部２２０４によって識別情報が指定されたソフトウェア資産を出力資産として、ソフトウェア資産構成定義体１６１２、具体的には変換定義体２２１１から、入力資産の識別情報と合成方法の識別情報とを特定する。図１８を用いて説明すると、指定部２２０４によって指定されたソフトウェア資産が資産１８０１である場合、この資産１８０１が出力資産となり、資産１８０１の要素となるソフトウェア資産１８１１〜１８１４が入力資産となる。したがって、ソフトウェア資産１８１１〜１８１４の資産ＩＤ（資産名：TW.exe、資産名：Mail.dll、資産名：Library.dll、資産名：Readme.txt）が入力資産の識別情報として特定され、関係Ｒ１の識別情報（タイプ：Set）が合成方法の識別情報として特定される。
【０１２６】
また、特定部２２０５は、識別情報が特定された入力資産をあらたに出力資産として、あらたな出力資産の合成入力となる入力資産の識別情報と合成方法の識別情報とを特定する。図１８を用いて説明すると、上述の例では、ソフトウェア資産１８１１〜１８１４が入力資産となったが、ソフトウェア資産１８１１〜１８１４をあらたに出力資産とし、ソフトウェア資産１８１１〜１８１４の合成入力となるあらたな入力資産の識別情報を特定する。
【０１２７】
この場合、ソフトウェア資産１８１１については、ソフトウェア資産１８２１があらたな入力資産となり、ソフトウェア資産１８１２については、ソフトウェア資産１８２２，１８２３があらたな入力資産となり、ソフトウェア資産１８１３については、ソフトウェア資産１８２４，１８２５があらたな入力資産となる。なお、ソフトウェア資産１８１４は、単なるテキスト文書であり、子となる入力資産を持たない。
【０１２８】
このようにして、特定部２２０５は、子となる入力資産が存在しなくなるまで、入力資産の識別情報および合成方法の識別情報を特定する。この特定部２２０５は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。
【０１２９】
また、抽出部２２０６は、資産保管庫１０２に記憶されているソフトウェア資産群２２１０の中から、特定部２２０５によって識別情報が特定された入力資産（あらたに識別情報が特定された入力資産も含む）２２１２を抽出する。具体的には、識別情報を手掛かりとして入力資産２２１２となるソースファイルなどのソフトウェア資産を抽出する。抽出された入力資産２２１２は、内部作業域Ｗに記憶される。
【０１３０】
この特定部２２０５は、具体的には、図１６に示したソフトウェア構築エンジン（Ａｎ
ｔ実行システム）１６０２の一機能であり、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。
【０１３１】
また、合成部２２０７は、特定部２２０５によって識別情報が特定された合成方法と、抽出部２２０６によって抽出された入力資産とに基づいて、出力資産２２１３を合成する。合成された出力資産２２１３は、中間生成物として内部作業域Ｗに記憶される。合成部２２０７は、図１１に示したタイプ９１１で定義されている合成方法（compile,link,compressなど）を実行することができる。
【０１３２】
合成部２２０７は、具体的には、図１６に示したソフトウェア構築エンジン（Ａｎｔ実行システム）１６０２の一機能であり、Ａｎｔ定義体１６１３を解釈することによって、上記合成方法を実行することができる。この合成部２２０７は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。
【０１３３】
また、格納部２２０８は、ソフトウェア資産構成定義体１６１２に出力資産の保存９１５に関する属性情報が記述されている場合、合成部２２０７によって合成された出力資産を資産保管庫１０２に格納する。具体的には、出力資産についての保存９１５に関する属性情報が、“yes”（または“persistent”でも同様）の場合、合成された出力資産を、内部作業域Ｗから資産保管庫１０２に書き込む。
【０１３４】
この格納部２２０８は、具体的には、図１６に示したソフトウェア構築器１６０３に相当し、より具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ＨＤ２０５などの記録媒体に記録されたプログラムを、ＣＰＵ２０１が実行することによってその機能を実現する。
【０１３５】
（ソフトウェア構築システムのソフトウェア構築処理手順）
つぎに、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順について説明する。図２３は、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順を示すフローチャートである。図２３において、入力部２２０１においてソフトウェア資産構成定義体１６１２が入力された場合（ステップＳ２３０１：Ｙｅｓ）、変換部２２０３において変換処理、すなわち、変換定義体２２１１に変換する（ステップＳ２３０２）。
【０１３６】
そして、指定部２２０４において、任意のソフトウェア資産の識別情報（資産ＩＤ９３０）が指定された場合（ステップＳ２３０３：Ｙｅｓ）、特定部２２０５において、指定された識別情報のソフトウェア資産を出力資産として、当該出力資産の合成元となる入力資産の識別情報と、当該入力資産を用いた出力資産の合成方法の識別情報を特定する（ステップＳ２３０４）。
【０１３７】
つぎに、抽出部２２０６において、資産保管庫１０２のソフトウェア資産群２２１０から、特定部２２０５において識別情報が特定された入力資産２２１２を抽出する（ステップＳ２３０５）。そして、合成部２２０７において、抽出された入力資産２２１２を、特定部２２０５によって識別情報が特定された合成方法により合成し、出力資産２２１３を出力する（ステップＳ２３０６）。
【０１３８】
そして、格納部２２０８において、ソフトウェア資産構成定義体１６１２の保存９１５の属性情報が"yes"の場合（ステップＳ２３０７：Ｙｅｓ）、合成出力された出力資産２２１３を資産保管庫１０２に書き込む（ステップＳ２３０８）。一方、保存９１５の属性情報が"no"の場合（ステップＳ２３０７：Ｎｏ）、合成出力された出力資産２２１３を内部作業域Ｗから消去する（ステップＳ２３０９）。
【０１３９】
このソフトウェア構築処理によれば、指定部２２０４において指定された識別情報（資産ＩＤ９３０）が構成名９０１である場合、最終的に構築したいソフトウェア（顧客提供資産）を、資産ＩＤを指定するという入力操作だけで自動的に構築することができる。特に、出力資産の合成入力となる入力資産が、さらに子となるあらたな入力資産を有している場合、ソフトウェア資産構成定義体１６１２（変換定義体２２１１）を参照することにより、あらたな入力資産ごとに合成方法を特定することができる。
【０１４０】
したがって、合成部２２０７においては、複数の合成方法による合成処理を並列的に実行することができ、ソフトウェア構築処理時間の短縮化を図ることができる。また、保存する必要のない出力資産２２１３は、資産保管庫１０２に書き込むことなく自動的に消去することができ、不必要なソフトウェア資産の無駄な保管を防止することができ、メモリ容量の節約化を図ることができる。
【０１４１】
以上説明したように、この発明の実施の形態にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、下記（１）〜（４）の効果を奏する。
【０１４２】
（１）  複雑なソフトウェア構築（ビルド）の作業がほぼ完全に自動化されるので、既存のソフトウェア構築システムを使用する場合に比べて、構築作業の信頼性および再現可能性の向上を図ることができる。
（２）  ソフトウェア構築（ビルド）の作業がほぼ完全に自動化されるので、既存のソフトウェア構築システムを使用する場合に比べて、構築者の作業負荷の大幅な軽減を図ることができる。
【０１４３】
（３）  ソフトウェア構成定義言語の抽象性および宣言性が高いので、既存の構成定義言語（たとえば、Makefile言語やAnt言語）に比べて、ソフトウェアの構成定義のリーダビリティが格段に向上し、信頼性の向上を図ることができる。
（４）  従来は人知および人手でおこなっていた広範囲にわたるソフトウェアの構成関係の追跡や不具合の警告などをアプリケーションで自動的に行うことが可能になり、生産性および信頼性の向上を図ることができる。
【０１４４】
なお、本実施の形態で説明したソフトウェア構築方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【産業上の利用可能性】
【０１４５】
以上のように、本発明にかかるソフトウェア構築プログラム、該プログラムを記録した記録媒体、ソフトウェア構築方法、およびソフトウェア構築システムは、ソフトウェア開発におけるソフトウェアの構築に有用である。
【図面の簡単な説明】
【０１４６】
【図１】図１は、この発明の実施の形態にかかるソフトウェア構築システムを示すシステム構成図である。
【図２】図２は、この発明の実施の形態にかかるソフトウェア構築装置等のハードウェア構成を示すブロック図である。
【図３】図３は、この発明の実施の形態にかかるコンフィギュレーション（構成）を示す系統図である。
【図４】図４は、この発明の実施の形態にかかる標準的フォルダ構成を示す説明図である。
【図５】図５は、資産の定義を示す図表である。
【図６】図６は資産定義の組合せ結果を示す図表である。
【図７】図７は、構成定義の記述例を示す説明図である。
【図８】図８は、図７に示した構成定義を示す説明図である。
【図９】図９は、この発明の実施の形態にかかるソフトウェア資産構成定義体のデータ構造を示す説明図である。
【図１０】図１０は、関係と要素との関連性を示す図表である。
【図１１】図１１は、Ｄ−Ｐａｒａｍを示す図表である。
【図１２】図１２は、構成定義の一記述例を示す説明図である。
【図１３】図１３は、従来における構成定義実行後のフォルダ状態を示す説明図である。
【図１４】図１４は、この発明の実施の形態における構成定義実行後のフォルダ状態を示す説明図である。
【図１５】図１５は、集合化の一例を示す説明図である。
【図１６】図１６は、この発明の実施の形態にかかる構築システムのシステム構成の具体例を示すブロック図である。
【図１７】図１７は、ソフトウェア資産構成定義体からＡｎｔ定義体への翻訳を示す説明図である。
【図１８】図１８は、顧客提供資産の構成（ツリー構造）の一例を示す説明図である。
【図１９】図１９は、図１８に示した顧客提供資産のソフトウェア資産構成定義体の記述例を示す説明図である。
【図２０】図２０は、図１９に示したソフトウェア資産構成定義体から変換されたＡｎｔ定義体を示す説明図である。
【図２１】図２１は、図１６に示したソフトウェア構築器のソフトウェア構築処理を示すフローチャートである。
【図２２】図２２は、この発明の実施の形態にかかるソフトウェア構築システムの機能的構成を示すブロック図である。
【図２３】図２３は、この発明の実施の形態にかかるソフトウェア構築システムのソフトウェア構築処理手順を示すフローチャートである。
【符号の説明】
【０１４７】
１００  ソフトウェア構築システム
１０１  ソフトウェア構築装置
１０２  資産保管庫
１０３（１０３Ａ、１０３Ｂ）  端末装置
９００  ソフトウェア資産構成定義体
１６０１  翻訳器
１６０２  ソフトウェア構築エンジン（Ａｎｔ実行システム）
１６０３  ソフトウェア構築器
１６１１  ソースプログラム
１６１２  ソフトウェア資産構成定義体
１６１４  ソフトウェア合成資産
１９００  ソフトウェア資産構成定義体
２２０１  入力部
２２０２  登録／更新部
２２０３  変換部
２２０５  特定部
２２０６  抽出部
２２０７  合成部
２２０８  格納部
２２１０  ソフトウェア資産群
２２１１  変換定義体
２２１２  入力資産
２２１３  出力資産
Ｗ  内部作業域
【国際調査報告】
2006095434.tif 000025
2006095434.tif 000026
2006095434.tif 000027