(57)【要約】  性能を低下させることなく、テナント個別要件に対応したカスタマイズプログラム群を単一のプログラムに再編成する。具体的には、本発明のテナント個別要件に対応したプログラム群を単一のプログラムに再編成するシステムは、土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成するプログラム開発部と、カスタマイズ管理表の作成、更新を行うカスタマイズ管理表管理部と、土台プログラムを構成するプログラム列を登録するプログラム列属性登録部と、プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録するカスタマイズ記録登録部と、テナントの属性情報をカスタマイズ管理表に登録するテナント属性登録部と、多重配備するプログラム列を用いる箇所を決定するプログラム列算出部とを備える。
2011004668.tif 000002
【特許請求の範囲】
【請求項１】
テナント個別要件に対応したプログラム群を単一のプログラムに再編成するシステムであって、
土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成するプログラム開発部と、
カスタマイズ管理表の作成、及び更新を行うカスタマイズ管理表管理部と、
前記土台プログラムを構成するプログラム列を登録するプログラム列属性登録部と、
プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録するカスタマイズ記録登録部と、
テナントの属性情報を前記カスタマイズ管理表に登録するテナント属性登録部と、
多重配備するプログラム列を用いる箇所を決定するプログラム列算出部と
を具備する
プログラム再編成システム。
【請求項２】
請求項１に記載のプログラム再編成システムであって、
前記カスタマイズ管理表管理部は、前記土台プログラムを構成するプログラム列のテナントごとの個別要件への対応に関する修正記録を前記カスタマイズ管理表に登録する
プログラム再編成システム。
【請求項３】
請求項１又は２に記載のプログラム再編成システムであって、
前記テナント属性登録部は、
テナントごとの契約ユーザ数と、
テナントごとの契約年数と、
テナントごとの契約金額と
のいずれかをテナントの属性情報として前記カスタマイズ管理表に登録する
プログラム再編成システム。
【請求項４】
請求項１乃至３のいずれか一項に記載のプログラム再編成システムであって、
前記プログラム列算出部は、多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容できるテナント数の増加を図る際に、多重配備するプログラム列の候補を新しく設定し、多重配備するプログラム列を決定する
プログラム再編成システム。
【請求項５】
請求項１乃至３のいずれか一項に記載のプログラム再編成システムであって、
前記プログラム列算出部は、多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容因子の増加を図る際に、多重配備するプログラム列の候補を新しく設定し、多重配備するプログラム列を決定する
プログラム再編成システム。
【請求項６】
請求項５に記載のプログラム再編成システムであって、
前記プログラム列算出部は、
契約ユーザ数の総数と、
契約年数の合計と、
契約金額の合計と
のいずれかを前記収容因子として扱う
プログラム再編成システム。
【請求項７】
コンピュータにより実施されるプログラム再編成方法であって、
土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成することと、
カスタマイズ管理表の作成、及び更新を行うことと、
前記土台プログラムを構成するプログラム列を登録することと、
プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録することと、
テナントの属性情報を前記カスタマイズ管理表に登録することと、
多重配備するプログラム列を用いる箇所を決定することと、
テナント個別要件に対応したプログラム群を単一のプログラムに再編成することと
を含む
プログラム再編成方法。
【請求項８】
請求項７に記載のプログラム再編成方法であって、
前記土台プログラムを構成するプログラム列のテナントごとの個別要件への対応に関する修正記録を前記カスタマイズ管理表に登録すること
を更に含む
プログラム再編成方法。
【請求項９】
請求項７又は８に記載のプログラム再編成方法であって、
テナントごとの契約ユーザ数と、
テナントごとの契約年数と、
テナントごとの契約金額と
のいずれかをテナントの属性情報として前記カスタマイズ管理表に登録すること
を更に含む
プログラム再編成方法。
【請求項１０】
請求項７乃至９のいずれか一項に記載のプログラム再編成方法であって、
多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容できるテナント数の増加を図る際に、多重配備するプログラム列の候補を新しく設定し、多重配備するプログラム列を決定すること
を更に含む
プログラム再編成方法。
【請求項１１】
請求項７乃至９のいずれか一項に記載のプログラム再編成方法であって、
多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容因子の増加を図る際に、多重配備するプログラム列の候補を新しく設定し、多重配備するプログラム列を決定すること
を更に含む
プログラム再編成方法。
【請求項１２】
請求項１１に記載のプログラム再編成方法であって、
契約ユーザ数の総数と、
契約年数の合計と、
契約金額の合計と
のいずれかを前記収容因子として扱うこと
を更に含む
プログラム再編成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム再編成システムに関し、特にプログラム群を単一のプログラムに再編成するプログラム再編成システムに関する。
【背景技術】
【０００２】
従来のアプリケーションを変更する作業を支援するシステムの一例が、特開２００８−１１７０６７号公報（特許文献１）に記載されている。【０００３】
この従来のシステムは、アノテーション（ａｎｎｏｔａｔｉｏｎ）検出部、入力インターフェイス（Ｉ／Ｆ：ｉｎｔｅｒｆａｃｅ）変換部、出力インターフェイス変換部、新規モデル生成部、設計モデル記憶部から構成されている。アノテーションとは、プログラムの個々の要素を意味付ける情報を指し、コメントと異なりコンパイル時に消去されることはない。【０００４】
このような構成を有する従来のシステムは、次のように動作する。すなわち、アノテーション検出部が個別の状況を識別し、入力インターフェイス変換部が入力インターフェイスを変更し、出力インターフェイス変換部が出力インターフェイスを変更し、新規モデル生成部が変更したインターフェイスを呼び出す設計モデルを生成し、その結果を設計モデル記憶部に格納する。【０００５】
従来のアプリケーションを変更する作業を支援するシステムの他の例が、特開２００７−２１３４８７号公報（特許文献２）に記載されている。【０００６】
この従来のシステムは、ユーザインターフェイス管理部、クラス情報解析部、アドバイス解析部、アスペクト（ａｓｐｅｃｔ）生成部から構成されている。アスペクト指向プログラミングにおいて、アスペクトとは、ログ出力のような多くのクラスに共通な処理を指す。アスペクトがアプリケーションに織り込まれることで、共通な処理を実装する。アスペクトの具体的な処理の定義をアドバイスと呼ぶ。【０００７】
このような構成を有する従来のシステムは、次のように動作する。すなわち、クラス情報解析部が、アスペクトに定義するクラスやメソッドの候補を生成する。アドバイス解析部が、アドバイスに含めるデータ構造の候補を生成する。ユーザインターフェイス管理部がこれらの候補を表示し、利用者が候補を選択する。選択の結果を基に、アスペクト生成部がアスペクトを生成する。【０００８】
このようなアスペクト指向プログラミング等の技術で、プログラムの配備・実行時に、テナント識別子を参照して、テナントごとに異なるプログラム列へ分岐する多重配備プログラムを用いて、テナント個別要件に対応したカスタマイズプログラムを単一のプログラムに再編成することができる。【０００９】
多重配備を行うと、テナント識別子を参照してテナントごとに異なるプログラム列へ分岐する論理を表すフレームワークプログラムがアプリケーションプログラムに自動的に挿入される。アプリケーションプログラムの中で明示しなくても、テナントごとに異なるプログラム列が実行される。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１１７０６７号公報
【特許文献２】特開２００７−２１３４８７号公報
【発明の概要】
【００１１】
従来の技術のように、プログラムを再編成する際に、全てのカスタマイズされたプログラム列を再編成の対象にすると、テナント識別子の参照と分岐が頻繁に起こり、性能が低下することがある。
【００１２】
本発明の目的は、テナント個別要件に対応したプログラム群を単一のプログラムに再編成するプログラム再編成システムを提供することである。
【００１３】
本発明のプログラム再編成システムでは、多重配備プログラムを用いる箇所を一定数以内に抑えた上で、可能な限り多くのテナント群（又は、カスタマイズプログラム群）を収容する再編成を行う。
【００１４】
本発明のプログラム再編成システムでは、多重配備プログラム列を用いる箇所をどこにすべきか決定し、多重配備プログラム列によって収容するテナントをどれにすべきか決定し、プログラムの再編成を支援する。
【００１５】
本発明のプログラム再編成システムは、テナント個別要件に対応したプログラム群を単一のプログラムに再編成するシステムであって、土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成するプログラム開発部と、カスタマイズ管理表の作成、及び更新を行うカスタマイズ管理表管理部と、土台プログラムを構成するプログラム列を登録するプログラム列属性登録部と、プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録するカスタマイズ記録登録部と、テナントの属性情報をカスタマイズ管理表に登録するテナント属性登録部と、多重配備するプログラム列を用いる箇所を決定するプログラム列算出部とを具備する。
【００１６】
本発明のプログラム再編成方法は、コンピュータにより実施されるプログラム再編成方法であって、土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成することと、カスタマイズ管理表の作成、及び更新を行うことと、土台プログラムを構成するプログラム列を登録することと、プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録することと、テナントの属性情報をカスタマイズ管理表に登録することと、多重配備するプログラム列を用いる箇所を決定することと、テナント個別要件に対応したプログラム群を単一のプログラムに再編成することとを含む。
【００１７】
これにより、テナント識別子の参照・分岐の頻度が制限され、性能の低下を抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明のプログラム再編成システムの構成の例を示すブロック図である。
【図２】本発明における土台プログラムの例を示す図である。
【図３】本発明におけるカスタマイズ管理表管理部のカスタマイズ管理表の例を示す図である。
【図４】本発明のプログラム再編成システムの動作を表すフローチャートを示す図である。
【図５】本発明におけるプログラム列算出部の動作を表すフローチャートを示す図である。
【図６】本発明におけるプログラム列算出部の別の動作を表すフローチャートを示す図である。
【図７】本発明におけるカスタマイズプログラムの例を示す図である。
【図８】本発明におけるカスタマイズプログラムの例を示す図である。
【図９】本発明におけるカスタマイズプログラムの例を示す図である。
【図１０】本発明におけるカスタマイズプログラム群を再編成したプログラムの例を示す図である。
【発明を実施するための形態】
【００１９】
以下に、本発明の実施形態について添付図面を参照して説明する。
図１を参照すると、本発明のプログラム再編成システムは、プログラム開発環境（プログラム開発部）１１と、プログラム列属性登録部１２と、カスタマイズ管理表管理部１３と、テナント属性登録部１４と、カスタマイズ記録登録部１５と、プログラム列算出部１６と、上限値入力部１７と、算出結果表示部（算出結果出力部）１８を備える。
【００２０】
プログラム開発環境１１は、プログラムの作成を行うためのツールである。プログラム開発環境１１は、土台プログラムの作成やカスタマイズプログラムを作成する。
【００２１】
プログラム列属性登録部１２は、土台プログラムを構成するプログラム列をカスタマイズ管理表管理部１３に登録する。
【００２２】
カスタマイズ管理表管理部１３は、カスタマイズ管理表の作成、更新などの管理の作業を行う。例えば、カスタマイズ管理表管理部１３は、カスタマイズ管理表に、土台プログラムを構成するプログラム列ごとに、テナント個別要件への対応に関する修正記録を登録する。
【００２３】
テナント属性登録部１４は、テナントの属性情報をカスタマイズ管理表に登録する。
【００２４】
カスタマイズ記録登録部１５は、プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業の内容をカスタマイズ管理表に登録する。
【００２５】
プログラム列算出部１６は、多重配備するプログラム列の数の上限値を基に、多重配備プログラム列を用いる箇所をどこにすべきか決定し、多重配備プログラム列によって収容するテナントをどれにすべきか決定する。
【００２６】
上限値入力部１７は、利用者の操作や設定情報などに応じて、多重配備するプログラム列の数の上限値を入力する。
【００２７】
算出結果表示部１８は、プログラム列算出部１６が出力した結果を外部出力する。例えば、算出結果表示部１８は、プログラム列算出部１６が出力した結果を利用者側の表示装置の画面に表示する。
【００２８】
［ハードウェア資源の例示］
プログラム再編成システムの例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータが考えられる。また、コンピュータ自体に限らず、中継機器や周辺機器、コンピュータに搭載される拡張ボード、コンピュータ上に構築された仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ））環境でも良い。但し、実際には、これらの例に限定されない。
【００２９】
プログラム開発環境１１、プログラム列属性登録部１２、カスタマイズ管理表管理部１３、テナント属性登録部１４、カスタマイズ記録登録部１５、及びプログラム列算出部１６、上限値入力部１７は、プログラムで駆動されるプロセッサ等のハードウェアと、そのハードウェアを駆動して所望の処理を実行するソフトウェアと、そのソフトウェアや各種データを格納しておくためのメモリによって実現される。
【００３０】
上記のハードウェアの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ、或いは、専用の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等が考えられる。但し、実際には、これらの例に限定されない。
【００３１】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）やＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等のリムーバブルディスクや記憶媒体（メディア）等が考えられる。また、コンピュータ本体に内蔵された記憶装置等に限らず、周辺機器（外付けＨＤＤ等）や外部のサーバ（ストレージサーバ等）に設置された記憶装置、或いは、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）等でも良い。但し、実際には、これらの例に限定されない。
【００３２】
ここで、プログラム列属性登録部１２、テナント属性登録部１４、カスタマイズ記録登録部１５、及び上限値入力部１７が外部からのデータの登録や入力に対応している場合、データ入力機能に対応するハードウェアの例として、外部の入力装置や記憶装置から情報を取得するためのインターフェイスや、記憶媒体を読み書きする駆動装置、又は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークアダプタ、アンテナ、通信ポート等が考えられる。なお、入力装置の例として、キーボードやキーパッド、画面上のキーパッド、タッチパネル（ｔｏｕｃｈ  ｐａｎｅｌ）、タブレット（ｔａｂｌｅｔ）等が考えられる。但し、実際には、これらの例に限定されない。
【００３３】
算出結果表示部１８の例として、外部の表示装置や記憶装置に情報を出力するためのインターフェイスや、記憶媒体を読み書きする駆動装置、又は、ＮＩＣ等のネットワークアダプタ、アンテナ、通信ポート等が考えられる。なお、表示装置の例として、ＬＣＤ（液晶ディスプレイ）、ＰＤＰ（プラズマディスプレイ）、有機ＥＬディスプレイ（ｏｒｇａｎｉｃ  ｅｌｅｃｔｒｏｌｕｍｉｎｅｓｃｅｎｃｅ  ｄｉｓｐｌａｙ）、或いは、出力内容を用紙等に印刷するプリンタ等が考えられる。但し、実際には、これらの例に限定されない。
【００３４】
図２は、土台プログラムの例を示す図である。
この土台プログラムの例では、プログラム列Ａ０、Ｂ０、Ｃ０の３つからアプリケーションプログラムが構成されている。アプリケーションプログラムは、テナント個別要件に応じて修正する必要がある。入力部と出力部は、全てのプログラムが具備する共通の部分を指す。例えば、入力部や出力部として、入出力関数を含むプログラム列が考えられる。
【００３５】
図３は、カスタマイズ管理表管理部１３のカスタマイズ管理表の例を示す図である。
カスタマイズ管理表には、土台プログラムを構成するプログラム列ごとのテナント個別要件への対応に関する修正記録に加え、テナントの属性情報（ここでは、そのテナントについての契約ユーザ数）を登録する。修正記録には、「修正なし」、「プログラム列Ｂ１へ修正」といった記録が登録される。テナントを新規に獲得し、テナント個別要件に対応するたびに、修正記録が追加される。
【００３６】
次に、図４、図５、図６のフローチャートを参照して本実施形態の全体の動作について詳細に説明する。
【００３７】
図４は、本発明のプログラム再編成システムの動作を表すフローチャートを示す図である。
【００３８】
（１）ステップＳ１０１
まず、プログラム開発環境１１は、利用者の操作や入力情報に応じて、土台プログラムを作成する。
【００３９】
（２）ステップＳ１０２
プログラム列属性登録部１２は、土台プログラムに含まれるプログラム列の属性をカスタマイズ管理表管理部１３に登録する。ここでは、プログラム列属性登録部１２は、簡単に、プログラム列の一覧を登録するものとする。
【００４０】
（３）ステップＳ１０３
カスタマイズ管理表管理部１３は、土台プログラムに含まれるプログラム列の属性を管理するカスタマイズ管理表を作成する。
【００４１】
（４）ステップＳ１０４
次に、プログラム開発環境１１は、新規のテナントを獲得し、テナントの個別要件に対応する際に、土台プログラムを修正したカスタマイズプログラムを作成する。プログラム開発環境１１は、土台プログラムの修正によって、土台プログラムを構成するプログラム列を別のプログラム列に置き換える。この置換えは、個別要件ごとに異なる。
【００４２】
（５）ステップＳ１０５
テナント属性登録部１４は、新規のテナントの属性をカスタマイズ管理表管理部１３に登録する。ここでは、テナント属性登録部１４は、属性として、テナントについての契約ユーザ数をカスタマイズ管理表管理部１３に登録する。なお、テナント属性登録部１４は、プログラム開発環境１１と連携して、カスタマイズプログラムが作成された際、自動的に新規のテナントの属性をカスタマイズ管理表管理部１３に登録するようにしても良い。
【００４３】
（６）ステップＳ１０６
カスタマイズ記録登録部１５は、カスタマイズプログラムにおける土台プログラムからの修正内容をカスタマイズ管理表管理部１３に登録する。ここでは、カスタマイズ記録登録部１５は、土台プログラムを構成するプログラム列のうち、どのプログラム列が置き換えられたかをカスタマイズ管理表に登録する。なお、カスタマイズ記録登録部１５は、プログラム開発環境１１及びテナント属性登録部１４と連携して、カスタマイズプログラムが作成された際、或いは、新規のテナントの属性が登録された際、自動的に修正内容をカスタマイズ管理表管理部１３に登録するようにしても良い。
【００４４】
（７）ステップＳ１０７
ここで、カスタマイズ管理表管理部１３は、カスタマイズ管理表に登録されたテナントの数が予め設定された値を超えたか否か判定する。このとき、カスタマイズ管理表管理部１３は、カスタマイズ管理表に登録されたテナントの数が予め設定された値を超えていなければ、新規のテナントの獲得を待つことになり、新規のテナントを獲得したらテナントの個別要件に対応する作業を繰り返す（ステップＳ１０４に戻る）。一方、カスタマイズ管理表管理部１３は、カスタマイズ管理表に登録されたテナントの数が予め設定された値を超えていれば、プログラム算出部１６に通知する。
【００４５】
（８）ステップＳ１０８
プログラム算出部１６は、上限値入力部１７から入力された多重配備するプログラム列の上限値を基に、多重配備すべきプログラム列と当該プログラム列に収容するテナントを算出する。そして、プログラム算出部１６は、算出された多重配備すべきプログラム列を算出結果表示部１８に出力する。
【００４６】
（９）ステップＳ１０９
算出結果表示部１８は、算出された多重配備すべきプログラム列を外部出力する。例えば、算出結果表示部１８は、当該プログラム列を利用者側の表示装置の画面に表示する。
【００４７】
図５は、本発明におけるプログラム列算出部１６の動作を表すフローチャートを示す図である。すなわち、図４のステップＳ１０８の詳細について示す。
【００４８】
（１）ステップＳ２０１
まず、プログラム列算出部１６は、カスタマイズ管理表の中で修正記録のあるプログラム列の中からランダムにＮ個の初期候補のプログラム列を選ぶ。ここで、Ｎは、上限値入力部１７から入力した多重配備するプログラム列の上限値である。
【００４９】
（２）ステップＳ２０２
次に、プログラム列算出部１６は、Ｎ個の初期候補のプログラム列の中から、多重配備されるテナント数が最も少ないプログラム列を選ぶ。
【００５０】
（３）ステップＳ２０３
プログラム列算出部１６は、選ばれたプログラム列（テナント数が最も少ないプログラム列）を、ランダムに選んだその他のプログラム列で置換える。
【００５１】
（４）ステップＳ２０４
プログラム列算出部１６は、この置換えによって収容できるテナント数が増えたか否か判定する。
【００５２】
（５）ステップＳ２０５
プログラム列算出部１６は、もし収容できるテナント数が増えていれば、置換えたプログラム列を新しい候補に設定する。プログラム列算出部１６は、多重配備されるテナント数が最も少ないプログラム列を置き換える手順に戻って、上記の手順を繰り返す。
【００５３】
（６）ステップＳ２０６
プログラム列算出部１６は、もし収容できるテナント数が増えていなければ、置換えを中止し、現在の候補を多重配備すべきプログラム列の解として終了する。同時に、プログラム列算出部１６は、この解によって収容できるテナントも出力する。
【００５４】
図６は、プログラム列算出部１６の別の動作を表すフローチャートを示す図である。すなわち、図５とは別の例で、図４のステップＳ１０８の詳細について示す。
【００５５】
図６のフローチャートでは、図５のフローチャートに、置換えに関する収容因子を計算する手順が加えられている。収容因子とは、テナント属性登録部１４から登録されるテナント属性から計算される値である。
【００５６】
図５では、収容できるテナント数で新しい候補を設定するかどうか判定したが、収容できる契約ユーザ数の総数を収容因子とすると、収容できる契約ユーザ数の総数が増えているかどうかで新しい候補を設定するかどうか判定することになる。また、収容因子には、テナントとの契約年数の合計やテナントとの契約金額との合計を用いることもできる。その場合には、これらの値をテナント属性としてテナント属性登録部１４から登録しておく。その他の手順は、図５と同一である。
【００５７】
（１）ステップＳ３０１
まず、プログラム列算出部１６は、カスタマイズ管理表の中で修正記録のあるプログラム列の中からランダムにＮ個の初期候補を選ぶ。ここで、Ｎは、上限値入力部１７から入力した多重配備するプログラム列の上限値である。
【００５８】
（２）ステップＳ３０２
次に、プログラム列算出部１６は、Ｎ個の候補の中で、そこで多重配備されるテナント数が最も少ないプログラム列を選ぶ。
【００５９】
（３）ステップＳ３０３
プログラム列算出部１６は、選ばれた最も少ないプログラム列をランダムに選んだその他のプログラム列で置換える。
【００６０】
（４）ステップＳ３０４
プログラム列算出部１６は、この置換えに関する収容因子を計算する。
【００６１】
（５）ステップＳ３０５
プログラム列算出部１６は、この置換えによって収容因子が増えたか否か判定する。
【００６２】
（６）ステップＳ３０６
プログラム列算出部１６は、もし収容因子が増えていれば、置換えたプログラム列を新しい候補に設定する。プログラム列算出部１６は、多重配備されるテナント数が最も少ないプログラム列を置き換える手順に戻って、上記の手順を繰り返す。
【００６３】
（７）ステップＳ３０７
プログラム列算出部１６は、もし収容因子が増えていなければ、置換えを中止し、現在の候補を多重配備すべきプログラム列の解として終了する。同時に、プログラム列算出部１６は、この解によって収容できるテナントも出力する。
【００６４】
なお、プログラム列算出部１６は、図５のフローチャートにおける動作と、図６のフローチャートにおける動作と、を組み合わせて実施するようにしても良い。例えば、プログラム列算出部１６は、図５のステップＳ２０６において、もし収容できるテナント数が増えていなければ、続けて、図６のステップＳ３０４に移行し、この置換えに関する収容因子を計算し、図６のステップＳ３０５以降の処理を実施する。或いは、プログラム列算出部１６に対し、利用者が、図５のフローチャートにおける動作と、図６のフローチャートにおける動作と、のいずれを実行すべきかを選択できるようにする。
【００６５】
本実施形態では、多重配備プログラム列を用いる箇所を一定数以内に抑えた上で、できるだけ多くのテナントを収容できる単一のプログラムに再編成できることである。そのため、テナント識別子の参照・分岐の頻度が制限され、性能の低下を抑制することができる。
【００６６】
＜実施例＞
次に、図７、図８、図９、図１０の図面を参照して、本発明の実施例について詳細に説明する。ここでは、図５のフローチャートと同じく、収容できるテナント数で新しい候補を設定するかどうか判定する場合を例に説明する。
【００６７】
図２に示す土台プログラムを基に、３つのテナント個別要件に対応した例を述べる。図３を参照すると、テナント１は、３００の契約ユーザ数を持つ。テナント１の個別要件に対応するため、土台プログラムのプログラム列ＢをＢ１へ修正していることを示している。図２に示す土台プログラムは、図７に示すカスタマイズプログラムに修正されている。テナント１は、この図７に示すカスタマイズプログラムを使用している。
【００６８】
テナント２は、５００の契約ユーザ数を持つ。テナント２の個別要件に対応するため、土台プログラムのプログラム列ＢをＢ２へ修正していることを示している。図２に示す土台プログラムは、図８に示すカスタマイズプログラムに修正されている。テナント１は、この図８に示すカスタマイズプログラムを使用している。
【００６９】
テナント３は、１０００の契約ユーザ数を持つ。テナント３の個別要件に対応するため、土台プログラムのプログラム列ＣをＣ３へ置き換えていることを示す。図２に示す土台プログラムは、図９に示すカスタマイズプログラムに修正されている。テナント１は、この図９に示すカスタマイズプログラムを使用している。
【００７０】
これら３つのカスタマイズプログラム群を単一のプログラムに再編成する際のプログラム列算出部１６の動作を述べる。
【００７１】
ここで、上限値入力部１７から入力した多重配備するプログラム列の上限値は「Ｎ＝１」とする（図４のステップＳ１０８）。図３を参照すると、プログラム列Ａで多重配備されるテナント数は０である。プログラム列Ｂで多重配備されるテナント数は２である（テナント１とテナント２が多重配備して収容される）。プログラム列Ｃで多重配備されるテナント数は１である（テナント３が多重配備して収容される）。「収容できる」とは、テナントの個別要件に対応するための修正を行ったプログラム列群が、候補であるプログラム列群の部分集合を形成することを意味する。
【００７２】
プログラム列算出部１６は、カスタマイズ管理表の中で修正記録のあるプログラム列の中からランダムに１個の初期候補を選ぶ（図５のステップＳ２０１）。初期候補は、プログラム列Ｃとする。候補は１つしかないため、多重配備されるテナント数が最も少ないプログラム列はプログラム列Ｃである（図５のステップＳ２０２）。
【００７３】
プログラム列算出部１６は、プログラム列Ｃをランダムに選んだその他のプログラム列で置換える（図５のステップＳ２０３）。ここでは、プログラム列算出部１６は、プログラム列Ｂで置き換えるものとする。この置換えによって収容できるテナント数は、１から２に増加する（図５のステップＳ２０４）。そこで、プログラム列算出部１６は、プログラム列Ｂを新しい候補に設定する（図５のステップＳ２０５）。
【００７４】
プログラム列算出部１６は、もう一度、プログラム列Ｂをランダムに選んだその他のプログラム列で置換える（図５のステップＳ２０３）。ここでは、プログラム列算出部１６は、プログラム列Ａで置き換えるものとする。この置換えによって収容できるテナント数は、２から０に減少する（図５のステップＳ２０４）。そこで、プログラム列算出部１６は、置換えを中止し、現在の候補Ｂを多重配備すべきプログラム列の解として終了する（図５のステップＳ２０６）。同時に、プログラム列算出部１６は、この解によって収容できるテナント１とテナント２も算出結果表示部１８に出力する。
【００７５】
算出結果表示部１８は、多重配備すべきプログラム列Ｂと多重配備によって収容できるテナント１とテナント２を外部出力する。例えば、利用者側の表示装置の画面に表示する（図４のステップＳ１０９）。
【００７６】
図１０に、この結果を基に再編成したプログラムを示す。当該プログラム等は、ＣＰＵ等のハードウェアにより実行されるものとする。アスペクト指向プログラミング等を用いて、最初に実行されるアプリケーションプログラムのプログラム列Ａの直前には、フレームワークとしてテナントＩＤ（識別子）取得プログラムが、プログラムの実行時に自動的に挿入される。テナントＩＤ（識別子）取得プログラムは、通信の発信元ＩＰアドレス等を参照してテナントＩＤ（識別子）を決定し保存するためのプログラムである。
【００７７】
多重配備すべきプログラム列Ｂの直前には、フレームワークプログラムとしてテナントＩＤ（識別子）参照・分岐プログラムが実行時に自動的に挿入される。テナントＩＤ（識別子）参照・分岐プログラムは、テナントＩＤ（識別子）取得プログラムが保存したテナントＩＤ（識別子）を参照し多重配備したどのプログラム列を呼び出すか決定するためのプログラムである。これにより、テナント１であればプログラム列Ｂ１が、テナント２であればプログラム列Ｂ２が実行されるようになる。
【００７８】
本発明によれば、既存アプリケーションを使って、たくさんのユーザ（テナント企業やエンドユーザ）にオンラインサービスを提供するシステムに関し、特に、ユーザの個別要件（ユーザごとに異なるデータ、ユーザごとに異なる処理）を導入しやすい形式となるよう、既存アプリケーションのリファクタリング（ｒｅｆａｃｔｏｒｉｎｇ）を支援するといった用途に適用できる。
【００７９】
以上のように、本発明のプログラム再編成システムは、テナント個別要件に対応したプログラム群を単一のプログラムに再編成するシステムである。
【００８０】
本発明のプログラム再編成システムは、プログラム開発環境と、カスタマイズ管理表管理部と、プログラム列属性登録部と、カスタマイズ記録登録部と、テナント属性登録部と、プログラム列算出部とを備えたことを特徴とする。
【００８１】
プログラム開発環境は、土台プログラムを構成するプログラム列の一部を修正してカスタマイズプログラムを作成する。カスタマイズ管理表管理部は、カスタマイズ管理表の作成、更新を行う。プログラム列属性登録部は、土台プログラムを構成するプログラム列を登録する。カスタマイズ記録登録部は、プログラム列ごとにカスタマイズプログラムの作成の際に行った修正作業を登録する。テナント属性登録部は、テナントの属性情報をカスタマイズ管理表に登録する。プログラム列算出部は、多重配備するプログラム列を用いる箇所を決定する。
【００８２】
カスタマイズ管理表は、土台プログラムを構成するプログラム列ごとのテナントごとの個別要件への対応に関する修正記録を含むことを特徴とする。
【００８３】
第１の手法では、カスタマイズ管理表は、テナント属性としてテナントごとの契約ユーザ数を含むことを特徴とする。
【００８４】
第２の手法では、カスタマイズ管理表は、テナント属性としてテナントごとの契約年数を含むことを特徴とする。
【００８５】
第３の手法では、カスタマイズ管理表は、テナント属性としてテナントごとの契約金額を含むことを特徴とする。
【００８６】
プログラム列算出部は、多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容できるテナント数が増えるように（収容できるテナント数の増加を図る際に）、多重配備するプログラム列の候補を新しく設定しながら、多重配備するプログラム列を決定することを特徴とする。
【００８７】
プログラム列算出部は、多重配備するプログラム列の数の上限値を基に、プログラム列の多重配備によって収容因子が増えるように（収容因子の増加を図る際に）、多重配備するプログラム列の候補を新しく設定しながら、多重配備するプログラム列を決定することを特徴とする。
【００８８】
第１の手法では、収容因子が、契約ユーザ数の総数であることを特徴とする。
【００８９】
第２の手法では、収容因子が、契約年数の合計であることを特徴とする。
【００９０】
第３の手法では、収容因子が、契約金額の合計であることを特徴とする。
【００９１】
本発明のプログラム再編成システムは、既存アプリケーションを使って、たくさんのユーザ（テナント企業やエンドユーザ）にオンラインサービスを提供する。
【００９２】
本発明では、ユーザの個別要件（ユーザごとに異なるデータ、ユーザごとに異なる処理）に対応するため、アプリケーションを修正したカスタマイズプログラムを作成・運用する情報システムに関して、テナント個別要件に対応したカスタマイズプログラムを可能な限り単一のプログラムに再編成することを支援できる。
【００９３】
なお、ここでの再編成は、プログラムの開発が進むにつれて、設計変更や問題点の修正などを通して、プログラムが冗長なものになることが多いため、プログラムの論理を変更せずに、冗長な部分を解消し、保守性や拡張性の高いプログラムに手直しを行なう作業を指すリファクタリングの１つの形態である。
【００９４】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【００９５】
なお、本出願は、日本出願番号２００９−１６１６６８に基づく優先権を主張するものであり、日本出願番号２００９−１６１６６８における開示内容は引用により本出願に組み込まれる。
【図１】
2011004668.tif 000003
【図２】
2011004668.tif 000004
【図３】
2011004668.tif 000005
【図４】
2011004668.tif 000006
【図５】
2011004668.tif 000007
【図６】
2011004668.tif 000008
【図７】
2011004668.tif 000009
【図８】
2011004668.tif 000010
【図９】
2011004668.tif 000011
【図１０】
2011004668.tif 000012
【国際調査報告】
2011004668.tif 000013
2011004668.tif 000014
2011004668.tif 000015
2011004668.tif 000016