(57)【要約】      （修正有）【課題】ソフトウェア開発方法とそのためのシステムとを提供する。【解決手段】ソフトウェアを開発する方法であって、複数のソフトウェアコンポーネントのソースコードを記憶するソースコンポーネントリポジトリを設ける。各ソフトウェアコンポーネントのソースコードは個別に編集可能であり、単一の機能を完全に実行するものであり、どの実行時環境からも実質的に独立である。複数のソフトウェアコンポーネントのバイナリコードを記憶するバイナリコンポーネントリポジトリを設け、バイナリコードは個別にダウンロード可能である。複数のソフトウェアコンポーネントのうちの一コンポーネントのソースコードを編集するステップと、少なくとも１つの他のコンポーネントのバイナリコードをダウンロードするステップと、それらの組合せから、ターゲットアプリケーションを生成するステップとを有する。【選択図】図３
2014071899.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを開発する方法であって、
複数のソフトウェアコンポーネントのソースコードを記憶するソースコンポーネントリポジトリを設けるステップであって、各ソフトウェアコンポーネントのソースコードは個別に編集可能であり、各ソフトウェアコンポーネントは単一の機能を完全に実行するものであり、各ソフトウェアコンポーネントはどの実行時環境からも独立である、ステップと、
前記複数のソフトウェアコンポーネントのバイナリコードを記憶するバイナリコンポーネントリポジトリを設けるステップであって、各ソフトウェアコンポーネントのバイナリコードは個別にダウンロード可能である、ステップと、
前記複数のソフトウェアコンポーネントのうちの一ソフトウェアコンポーネントのソースコードを編集するステップと、
前記複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネントのバイナリコードをダウンロードするステップと、
前記編集されたコンポーネントと、少なくとも１つのダウンロードされたコンポーネントとの組合せから、ターゲットアプリケーションを生成するステップとを有する方法。
【請求項２】
前記生成するステップは、
前記コンポーネントの組合せを記述するパッケージドコンポーネントを構成するステップと、
前記パッケージドコンポーネントに、固定実装クラスのセットを特定する情報を提供し、前記パッケージドコンポーネントと実行時環境との間のインタフェースを実装し、それにより前記実行時環境に依存するターゲットアプリケーションを生成するステップとを有する、
請求項１に記載の方法。
【請求項３】
前記構成するステップは、
前記編集されたコンポーネントと前記少なくとも１つのダウンロードされたコンポーネントとの間のリンクを画定するステップを有する、
請求項２に記載の方法。
【請求項４】
前記リンクは、前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリを記憶するサーバに記憶された少なくとも１つの構成ファイルにおいて画定される、
請求項３に記載の方法。
【請求項５】
前記パッケージドコンポーネントに、固定実装クラスの第２のセットを特定する情報を提供し、前記パッケージドコンポーネントと第２の実行時環境との間のインタフェースを実装し、それにより前記第２の実行時環境に依存する第２のターゲットアプリケーションを生成するステップとを有する、
請求項２ないし４いずれか一項に記載の方法。
【請求項６】
前記生成するステップは、
前記ターゲットアプリケーションが前記実行時環境に依存するように、前記実行時環境における前記パッケージドコンポーネントの実装を特定する情報を注入するステップを有する、
請求項２ないし４いずれか一項に記載の方法。
【請求項７】
実行時に、前記実行時環境に関する実質的にすべてのクラスローディングが静的に行われるように、前記生成するステップは前記ターゲットアプリケーションの実行時前に完了する、
請求項１ないし６いずれか一項に記載の方法。
【請求項８】
前記編集されたコンポーネントを前記ソースコンポーネントリポジトリに前記コンポーネントの新しいバージョンとして記憶するステップを有する、
請求項１ないし７いずれか一項に記載の方法。
【請求項９】
更新されたコンポーネントを用いるソフトウェアアプリケーションを特定するステップと、
前記特定されたソフトウェアアプリケーションをテストするステップとを有する、
請求項１ないし８いずれか一項に記載の方法。
【請求項１０】
前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリにおいて、前記ターゲットアプリケーションの所望の機能を実装できるコンポーネントを検索するステップを有する、
請求項１ないし９いずれか一項に記載の方法。
【請求項１１】
前記所望の機能を実装するのに、前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリに記憶されていないコンポーネントが必要であると判断するステップと、
前記必要なコンポーネントを生成するステップと、
前記必要なコンポーネントを前記ソースコンポーネントリポジトリに記憶するステップとを有する、
請求項９に記載の方法。
【請求項１２】
前記ターゲットアプリケーションは、ユーザ認証、スキャンして電子メール機能、スキャンしてフォルダ機能、またはスキャンして印刷機能のためのものである、
請求項１ないし１１いずれか一項に記載の方法。
【請求項１３】
前記実行時環境はＭＦＰ、スマートフォン、デスクトップアプリケーション、またはサーバアプリケーションである、
請求項１ないし１２いずれか一項に記載の方法。
【請求項１４】
前記コンポーネントの組合せは、モデル・ビュー・コントローラパターンに基づく、
請求項１ないし１３いずれか一項に記載の方法。
【請求項１５】
記憶メモリとプロセッサとを有するシステムであって、前記システムは、
複数のソフトウェアコンポーネントのソースコードを記憶するソースコンポーネントリポジトリであって、各ソフトウェアコンポーネントのソースコードは個別に編集可能であり、各ソフトウェアコンポーネントは単一の機能を完全に実行するものであり、各ソフトウェアコンポーネントはどの実行時環境からも実質的に独立である、ソースコンポーネントリポジトリと、
前記複数のソフトウェアコンポーネントのバイナリコードを記憶するバイナリコンポーネントリポジトリであって、各ソフトウェアコンポーネントのバイナリコードは個別にダウンロード可能である、バイナリコンポーネントリポジトリとを記憶し、
前記システムは、
複数のソフトウェアコンポーネントのうちの一コンポーネントのソースコードが編集されると、前記複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネントのバイナリコードをダウンロードし、
前記編集されたコンポーネントと、前記少なくとも１つのダウンロードされたコンポーネントとから、ターゲットアプリケーションを生成するように構成された、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発方法とそのためのシステムとに関する。
【背景技術】
【０００２】
多機能機（ＭＦＰ）にソフトウェアアプリケーションをインストールして、高度な印刷機能及びスキャン機能を実現できる。例えば、一ソフトウェアアプリケーションは、ユーザ認証と、ユーザ認証情報及び許可に基づくセキュアな印刷及びスキャンを提供できる。他の一ソフトウェアアプリケーションは、「scan  to  email」や「scan  to  folder」などのスキャン機能を提供できる。また、一ソフトウェアアプリケーションは、クラウド環境によるスキャンとプリントの専用であり得る。ユーザは、自分の必要性に応じてソフトウェアを選択し、それをＭＦＰにインストールできる。かかるソフトウェアアプリケーションを、その他の装置、例えばスマートフォンなどで用いることもできる。
【０００３】
ソフトウェアアプリケーションを別々に作ると、他のアプリケーションとの統合が難しくなる。また、ソフトウェアアプリケーションによっては、同様の機能を実行するコードが複数あるものもある。結果として、性能が低下し、メモリが制約された装置ではクリティカルとなる。さらに、複数のソフトウェアアプリケーションがある時、各ソフトウェアアプリケーションが異なるソースコードで記述されることがある。この場合、開発者は、複数のアプリケーションで複製されたコードの一部をデバッグする必要がある時、複数のソフトウェアアプリケーションのソースコードをデバッグしなければならない。これには大幅な時間と手間がかかる。
【０００４】
そのため、ソフトウェアアプリケーションの開発が遅くなる。また、開発されたソフトウェアアプリケーションのメンテナンスも困難になり得る。
【０００５】
本発明の目的は、上記の一又は複数の問題が解消されるソフトウェア開発方法と、そのためのシステムとを提供することである。
【発明の開示】
【課題を解決するための手段】
【０００６】
本発明の一実施形態による方法は、ソフトウェアを開発する方法であって、複数のソフトウェアコンポーネントのソースコードを記憶するソースコンポーネントリポジトリを設けるステップであって、各ソフトウェアコンポーネントのソースコードは個別に編集可能であり、各ソフトウェアコンポーネントは単一の機能を完全に実行するものであり、各ソフトウェアコンポーネントはどの実行時環境からも実質的に独立である、設けるステップと、前記複数のソフトウェアコンポーネントのバイナリコードを記憶するバイナリコンポーネントリポジトリを設けるステップであって、各ソフトウェアコンポーネントのバイナリコードは個別にダウンロード可能である、ステップと、前記複数のソフトウェアコンポーネントのうちの一コンポーネントのソースコードを編集するステップと、前記複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネントのバイナリコードをダウンロードするステップと、前記編集されたコンポーネントと、少なくとも１つのダウンロードされたコンポーネントとの組合せから、ターゲットアプリケーションを生成するステップとを有する。
【０００７】
したがって、各コンポーネントが個別に編集可能なソースコードと個別にダウンロード可能なバイナリコードを有するようにコンポーネントリポジトリを設けることにより、開発者は、他のコンポーネントのソースコードに影響を与えずに、１つのコンポーネントのソースコードを編集できる。これにより、開発者は、１つのコンポーネントのソースコードの開発に集中できる。これにより、開発者が、他のソフトウェアアプリケーションで用いられる他のコンポーネントのソースコードに悪い影響を与える可能性が小さくなる。開発者は、１つのコンポーネントのソースコードを改善できる。このソースコードは異なる複数のソフトウェアアプリケーションで用いることができる。これにより、複数のソフトウェアアプリケーションの改善効率が高まる。
【０００８】
さらに、新しいソフトウェアアプリケーションを開発する時、開発者は、ソフトウェアアプリケーションを効率的な方法で構成するため、編集されていないコンポーネントのバイナリコードをダウンロードできる。結果として、新しいソフトウェアアプリケーションを開発するたびに、ソフトウェアアプリケーション全体のソースコードをバイナリコードに変換する必要はない。編集されたコンポーネントのソースコードのみをバイナリコードに変換すればよい。これによりソフトウェアの開発の効率が向上する。
【０００９】
任意的に、生成するステップは、前記コンポーネントの組合せを記述するパッケージドコンポーネントを構成するステップと、前記パッケージドコンポーネントに、固定実装クラスのセットを特定する情報を提供し、前記パッケージドコンポーネントと実行時環境との間のインタフェースを実装し、それにより前記実行時環境に依存するターゲットアプリケーションを生成するステップとを有する。
【００１０】
したがって、パッケージドコンポーネントを用いて、必要に応じて、（場合によっては異なるハードウェアに関連する）異なる実行時環境で実行できる一般的なソフトウェアアプリケーションを生成できる。固定実装クラスのセットを特定する情報を提供することにより、パッケージドコンポーネントをある実行時環境に特定することができる。その実行時環境に関する情報を注入する。これにより、異なる実行時環境において用いる同じ機能を実行するソフトウェアアプリケーションの生成効率が高くなる。
【００１１】
任意的に、構成するステップは、前記編集されたコンポーネントと前記少なくとも１つのダウンロードされたコンポーネントとの間のリンクを画定するステップを有する。
【００１２】
したがって、ソフトウェア開発目的のため、個別のソフトウェアコンポーネントを編集でき、新しいソフトウェアアプリケーションを開発するパワフルな方法を提供する。一方、ターゲットアプリケーションの生成中にソフトウェアアプリケーションのソフトウェアコンポーネント間のリンクを画定することにより、ソフトウェアアプリケーションは、ソフトウェアアプリケーションの実行時に使える、ソフトウェアコンポーネント間の強いリンクを有することができる。
【００１３】
任意的に、前記リンクは、前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリを記憶するサーバに記憶された少なくとも１つの構成ファイルにおいて画定される。
【００１４】
したがって、構成ファイルは、あるソフトウェアアプリケーションに利用または再利用される前に、開発者により事前に設計できる。これにより、そのソフトウェアアプリケーションを素早く開発することができる。さらに、１つのソフトウェアコンポーネントの更新によりソフトウェアアプリケーションが更新された時、そのソフトウェアの更新されたバージョンを素早く作ることができる。
【００１５】
任意的に、方法は、パッケージドコンポーネントに、第２の一組の固定実装クラスを識別する情報を提供し、パッケージドコンポーネントと第２の実行時環境との間のインタフェースをインプリメントし、それにより第２の実行時環境に依存する第２のターゲットアプリケーションを生成するステップを有する。
【００１６】
したがって、同じパッケージドコンポーネントを用いて、異なる実行時環境に対して、２つのターゲットアプリケーションを生成できる。特に、その２つのターゲットアプリケーションは同じ機能を有するが、異なる実行時環境において実装されており、それにより２つの異なるターゲットアプリケーションが提供される。これにより、異なる実行時環境に対して同様なソフトウェアアプリケーションを提供する速くパワフルな方法が提供される。
【００１７】
任意的に、実行時に、前記実行時環境に関する実質的にすべてのクラスローディングが静的に行われるように、前記生成するステップは前記ターゲットアプリケーションの実行時前に完了する。
【００１８】
したがって、ハードウェアデバイスにおいてそのソフトウェアアプリケーションを実行するのに必要なメモリ量が減少する。特に、実行時の前に、コンポーネントの組合せから構成されたパッケージドコンポーネントに固定実装クラスが提供された時、実行時には、これらの固定実装クラスを動的にロードする必要はない。それよりも、実行時環境に関連するクラスは静的にロードされる。これにより、ソフトウェアアプリケーションは、限定されたメモリリソースだけで、実行時環境で実行することができる。
【００１９】
任意的に、本方法は、前記編集されたコンポーネントを前記ソースコンポーネントリポジトリに前記コンポーネントの新しいバージョンとして記憶するステップを有する。
【００２０】
したがって、ソフトウェアコンポーネントを用いる既存のソフトウェアアプリケーションに悪い影響を与えずに、個別のソフトウェアコンポーネントを（例えば、改善するために）更新できる。例えば、ソフトウェアアプリケーションがソフトウェアコンポーネントの古いバージョンに依存する場合、そのソフトウェアコンポーネントの更新されたバージョンを記憶することにより、この機能は壊されない。これにより、ソフトウェア開発の品質が改善される。
【００２１】
任意的に、本方法は、更新されたコンポーネントを用いるソフトウェアアプリケーションを特定するステップと、前記特定されたソフトウェアアプリケーションをテストするステップとを有する。
【００２２】
したがって、更新された各コンポーネントにより影響されるソフトウェアをテストできる。これは、複数のソフトウェアアプリケーションで用いられる可能性のある個々のソフトウェアコンポーネントに対して行われた更新のロバストテストである。
【００２３】
任意的に、本方法は、前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリにおいて、前記ターゲットアプリケーションの所望の機能を実装できるコンポーネントを検索するステップを有する。
【００２４】
したがって、所望の機能を実行する既存のソフトウェアコンポーネントがある場合、その機能を実行するために新しいソフトウェアコンポーネントを再開発する必要はない。これにより、共通の機能を実行するソフトウェアを開発する二度手間が減少する。これにより、新しいソフトウェアアプリケーションを開発する時間と手間が省ける。特に、複数のソフトウェアアプリケーションにおいて同じソフトウェアコンポーネントを用いることにより、ソフトウェア開発プロセスがより効率的かつ素早くなる。
【００２５】
任意的に、本方法は、前記所望の機能を実装するのに、前記ソースコンポーネントリポジトリ及び／または前記バイナリコンポーネントリポジトリに記憶されていないコンポーネントが必要であると判断するステップと、前記必要なコンポーネントを生成するステップと、前記必要なコンポーネントを前記ソースコンポーネントリポジトリに記憶するステップとを有する。
【００２６】
したがって、まったく新しい機能が必要な時、新しいソフトウェアコンポーネントをリポジトリに記憶できる。その新しいソフトウェアコンポーネントを用いて、後でソフトウェアアプリケーションを開発できる。したがって、各機能をソフトウェアコンポーネントにコード化しなければならない回数が１回まで減少する。
【００２７】
任意的に、前記ターゲットアプリケーションは、ユーザ認証、スキャンして電子メール機能、スキャンしてフォルダ機能、またはスキャンして印刷機能のためのものである。
【００２８】
したがって、本発明を用いて、例えば、ＭＦＰにおいて実行される多くの機能などの様々な機能のソフトウェアの実行を改善できる。
【００２９】
任意的に、前記実行時環境はＭＦＰ、スマートフォン、デスクトップアプリケーション、またはサーバアプリケーションである。
【００３０】
したがって、本発明を用いて、異なる様々な実行時環境に対してソフトウェアアプリケーションを開発できる。
【００３１】
任意的に、生成するステップは、前記ターゲットアプリケーションが前記実行時環境に依存するように、前記実行時環境における前記パッケージドコンポーネントの実装を特定する情報を注入するステップを有する。
【００３２】
任意的に、前記コンポーネントの組合せは、モデル・ビュー・コントローラパターンに基づく。
【００３３】
したがって、抽象的なソフトウェアコンポーネントを組み合わせて、効率的に、ターゲットアプリケーションの所望の機能を実行できる。機能は、その機能が用いられるコンテクスト（すなわち、実行時環境）とは独立になるように構成できる。これにより、モデル・ビュー・コントローラパターンに基づき構成された基本的ロジックの実装を変更することにより、異なるソフトウェアアプリケーションを生成できる。
【００３４】
本発明によるシステムは、記憶メモリとプロセッサとを有するシステムであって、前記システムは、複数のソフトウェアコンポーネントのソースコードを記憶するソースコンポーネントリポジトリであって、各ソフトウェアコンポーネントのソースコードは個別に編集可能であり、各ソフトウェアコンポーネントは単一の機能を完全に実行するものであり、各ソフトウェアコンポーネントはどの実行時環境からも実質的に独立である、ソースコンポーネントリポジトリと、前記複数のソフトウェアコンポーネントのバイナリコードを記憶するバイナリコンポーネントリポジトリであって、各ソフトウェアコンポーネントのバイナリコードは個別にダウンロード可能である、バイナリコンポーネントリポジトリとを記憶し、前記システムは、複数のソフトウェアコンポーネントのうちの一コンポーネントのソースコードが編集されると、前記複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネントのバイナリコードをダウンロードし、前記編集されたコンポーネントと、前記少なくとも１つのダウンロードされたコンポーネントとから、ターゲットアプリケーションを生成するように構成されている。
【図面の簡単な説明】
【００３５】
添付した図面を参照して実施例により本発明を説明する。
【図１】本発明の一実施形態によるシステムを示す図である。
【図２】本発明の一実施形態によるネットワークを介して接続された装置を示す図である。
【図３】本発明の一実施形態による方法を示す図である。
【図４】本発明の一実施形態によるターゲットアプリケーションを生成する方法を示す図である。
【図５】本発明によるソフトウェアアプリケーションを生成するステップを示す図である。
【図６】認証アプリケーションのソフトウェアコンポーネントの一例を示す図である。
【図７】モデルビューコントローラ・モデルを示す図である。
【図８】本発明の一実施形態によるソフトウェア開発方法を示す図である。
【図９】本発明の一実施形態によるソフトウェアコンポーネントのアセンブリ方法を示す図である。
【発明を実施するための形態】
【００３６】
図１は、本発明の一実施形態によるシステムを示す。システムは、記憶メモリ１０とプロセッサ１５とを有する。
【００３７】
システムは、複数のソフトウェアコンポーネント２０のソースコード２０Ａを記憶したソースコンポーネントリポジトリ１１を記憶している。各ソフトウェアコンポーネント２０のソースコード２０Ａは個別に編集可能である。一実施形態では、ソースコンポーネントリポジトリ１１はシステムの記憶メモリ１０に記憶されている。
【００３８】
開発者は、個々のソフトウェアコンポーネント２０のソースコード２０Ａにアクセスできる。開発者は、ソースコンポーネントリポジトリ１１に記憶された他のソフトウェアコンポーネントのソースコードに影響を与えずに、ソフトウェアコンポーネント２０のソースコード２０Ａを編集できる。
【００３９】
一実施形態では、開発者は個々のソフトウェアコンポーネント２０のソースコード２０Ａを編集のためダウンロードできる。例えば、開発者は、端末５０にソースコード２０Ａをダウンロードできる。開発者は、端末５０でソースコード２０Ａを編集できる。
【００４０】
システムはバイナリコンポーネントリポジトリ１２を有する。バイナリコンポーネントリポジトリ１２は、複数のソフトウェアコンポーネント２０のバイナリコード２０Ｂを記憶している。一実施形態では、バイナリコンポーネントリポジトリ１２はシステムの記憶メモリ１０に設けられる。各ソフトウェアコンポーネント２０のバイナリコード２０Ｂは個別にダウンロード可能である。
【００４１】
これにより、他のソフトウェアコンポーネントのバイナリコードをダウンロードせずに、個々のソフトウェアコンポーネント２０のバイナリコード２０Ｂをダウンロードできる。例えば、開発者は、端末５０に、一又は複数のソフトウェアコンポーネント２０のバイナリコード２０Ｂをダウンロードできる。
【００４２】
端末５０はシステムの記憶メモリ１０に接続されている。端末５０はシステムのプロセッサ１５に接続されている。
【００４３】
一実施形態では、記憶メモリ１０とプロセッサ１５は単一のサーバ１に設けられる。しかし、必ずしもそうでない場合もある。例えば、記憶メモリ１０は、プロセッサ１５を有するサーバとは異なるサーバに設けられてもよい。
【００４４】
一実施形態では、バイナリコンポーネントリポジトリ１２とソースコンポーネントリポジトリ１１は同じ記憶メモリ１０に記憶される。しかし、必ずしもそうでない場合もある。一実施形態では、システムは少なくとも２つのメモリを有し、ソースコンポーネントリポジトリ１１はその少なくとも２つのメモリの１つに設けられ、バイナリコンポーネントリポジトリ１２はその少なくとも２つのメモリの他の１つに設けられる。
【００４５】
システムは、複数のソフトウェアコンポーネントのうちのコンポーネント２０のソースコード２０Ａが編集されると、その複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネント２０のバイナリコード２０Ｂをダウンロードするように構成されている。開発者は、未編集のソフトウェアコンポーネント２０のバイナリコード２０Ｂをダウンロードできる。開発者は、ソフトウェアコンポーネント２０のソースコード２０Ａのダウンロードを要さずに、ソフトウェアコンポーネント２０のバイナリコード２０Ｂをダウンロードできる。
【００４６】
一実施形態では、システムは、編集されたコンポーネントと、少なくとも１つのダウンロードされたコンポーネントから、ターゲットアプリケーション２５を生成するように構成されている。したがって、個々のソフトウェアコンポーネント２０を編集し、他の必要なソフトウェアコンポーネント２０のバイナリコード２０Ｂをダウンロードすることにより、ターゲットアプリケーションを効率的に作成することができる。
【００４７】
異なる機能を実行する異なるソフトウェアアプリケーション２５で、各ソフトウェアコンポーネント２０を用いても良い。よって、個々のソフトウェアコンポーネント２０は汎用ソフトウェアパーツである。
【００４８】
図２は、ネットワーク３０を介して接続された装置を示す。例えば、端末５０は、ネットワーク３０を介してサーバ１に接続されている。一実施形態では、ＭＦＰ３３がネットワーク３０に接続されている。一実施形態では、スマートフォン３６がネットワーク３０に接続されている。他の装置３９がネットワーク３０に接続されていてもよい。
【００４９】
ネットワーク３０は、図２に示した構成で様々な装置間におけるデータ交換を提供する任意の媒体またはメカニズムによりインプリメントできる。ネットワーク３０の例には、ローカルエリアネットワーク、ワイドエリアネットワーク、イーサネット(登録商標)またはインターネット、あるいは一以上の地上波、衛星、または無線リンクを含む。
【００５０】
図３は、本発明の一実施形態による方法に対応するフローチャートを示す。
【００５１】
本発明は、ソフトウェア開発方法を提供する。一実施形態では、方法は、複数のソフトウェアコンポーネント２０のソースコード２０Ａを記憶するソースコンポーネントリポジトリ１１を設けるステップを有する。各ソフトウェアコンポーネント２０のソースコード２０Ａは個別に編集可能である。一実施形態では、方法は、複数のソフトウェアコンポーネント２０のバイナリコード２０Ｂを記憶するバイナリコンポーネントリポジトリ１２を設けるステップを有する。各ソフトウェアコンポーネント２０のバイナリコード２０Ｂは個別にダウンロード可能である。
【００５２】
一実施形態では、方法は、複数のソフトウェアコンポーネントのうちのコンポーネント２０のソースコード２０Ａを編集するステップＳ１を有する。
【００５３】
一実施形態では、方法は、編集したコンポーネント２０を、コンポーネント２０の新しいバージョンとしてソースコンポーネントリポジトリ１１に記憶するステップを有する。これにより、ソフトウェアコンポーネント２０の新旧バージョンを、コンポーネントリポジトリ１１、１２に記憶できる。一実施形態では、ソフトウェアコンポーネント２０の複数のバージョンを記憶してもよい。
【００５４】
ソフトウェアコンポーネント２０の新しいバージョンは、テストされてから、そのソフトウェアコンポーネントを用いるソフトウェアアプリケーション２５中のソフトウェアコンポーネント２０の前のバージョンを置き換えるのに用いられる。
【００５５】
一実施形態では、方法は、更新されたコンポーネント２０を用いるソフトウェアアプリケーション２５を特定するステップと、更新されたコンポーネントを用いる、特定されたソフトウェアアプリケーション２５をテストするステップとを有する。よって、ソフトウェアコンポーネント２０の新しい各バージョンをテストして、そのソフトウェアコンポーネント２０に依存する各ソフトウェアアプリケーションにおいて正しく動作することをチェックできる。
【００５６】
一実施形態では、方法は、連続的インテグレーション（continuous  integration）を実行して、更新されたコンポーネント２０をテストするステップを有する。連続的インテグレーションは、更新された各コンポーネント２０に対して、影響を受ける各ソフトウェアアプリケーションをテストするステップと、そのテストに基づいてレポートを作成するステップとを有する。
【００５７】
一実施形態では、方法は、複数のソフトウェアコンポーネントのうちの少なくとも１つの他のコンポーネント２０のバイナリコード２０ＢをダウンロードするステップＳ２を有する。
【００５８】
これは、開発者が、ターゲットアプリケーション２に必要な他のソフトウェアコンポーネントのソースコードを書き換える必要はないことを意味する。さらに、ターゲットアプリケーション全体のソースコードをバイナリコードに変換する必要はない。一実施形態では、方法は、更新されたソフトウェアコンポーネント２０のソースコード２０Ａのみをバイナリコードに変換するステップを有する。
【００５９】
一実施形態では、方法は、編集されたコンポーネントと、少なくとも１つのダウンロードされたコンポーネントの組合せから、ターゲットアプリケーション２５を生成するステップＳ３を有する。各ソフトウェアコンポーネントのバイナリコードは、編集された（すなわち、更新された、または新しい）ソフトウェアコンポーネントを含むが、組み合わされ、ターゲットアプリケーション２５を生成する。
【００６０】
図４は、本発明の一実施形態による（ターゲットアプリケーション２５を生成する）生成ステップをさらに詳細に示す図である。
【００６１】
一実施形態では、生成ステップＳ３は、コンポーネントの組合せからパッケージドコンポーネント（packaged  component）を形成するステップを有する。
【００６２】
一実施形態では、（パッケージドコンポーネントを形成する）形成ステップは、編集されたコンポーネントと少なくとも１つのダウンロードされたコンポーネントとの間にリンクを画定するステップＳ３．１を有する。
【００６３】
ソフトウェアコンポーネント２０は、コンポーネントリポジトリ１１、１２において、抽象エンティティ（abstract  entities）として生成、更新及び維持できる。これによりソフトウェアの開発の効率が向上する。しかし、ターゲットアプリケーションを開発する時、ソフトウェアアプリケーション２５のソフトウェアコンポーネント２０間には強いリンクを形成できる。
【００６４】
実行時にメタデータを用いてソフトウェアコンポーネント２０間を動的にリンクする替わりに、生成時に静的リンクを生成する。これは、ソフトウェアコンポーネント２０のソースコード２０Ａを変更せずに、ソフトウェアコンポーネント２０のバイナリコード２０Ｂを変更することにより行い得る。これにより、さらに異なるソフトウェアアプリケーション２５を生成するために、（ソースコードで、及び対応するバイナリコードで）ソフトウェアコンポーネント２０の抽象的セットを維持しつつ、新しいソフトウェアアプリケーション２５を効率的に生成できる。
【００６５】
一実施形態では、生成ステップＳ３は、パッケージドコンポーネントに、一組の固定実装クラスを識別する情報を提供し、パッケージドコンポーネントと実行時環境との間のインタフェースをインプリメントし、それにより実行時環境に依存するターゲットアプリケーション２５を生成するステップＳ３．２を有する。
【００６６】
したがって、ソフトウェアアプリケーション２５は、ある実行時環境に対して固定（fix）することができる。固定された実装クラス（または具体的クラス）により、ソフトウェアアプリケーション２５は、実行時環境で、例えばあるハードウェアデバイス上で、実行できるようになる。固定された実装クラスを特定する情報が与えられると、そのクラスを動的にではなく静的にロードすることができる。一方、単一のパッケージドコンポーネントを用いて、（同じ機能を実行するものではあるが）異なる実行時環境における異なる複数のアプリケーション２５を形成できる。
【００６７】
一実施形態では、生成ステップＳ３は、ターゲットアプリケーション２５の実行時前に完了される。これは、実行時に、ソフトウェアアプリケーション２５のクラスリンクを動的に解決する必要がないことを意味する。クラスは実行時に動的にロードされない。そうではなく、クラスは実行時に静的にロードしてもよい。これにより、ソフトウェアアプリケーション２５を実行するのにハードウェアデバイスにおいて必要なメモリが減少する。
【００６８】
実行時前にソフトウェアを実行時環境に依存させる点により、本発明は、例えば一部のプラグインの場合に知られている、ソフトウェアアプリケーションの実行時にクラスリンクが動的に解決される既知のソフトウェア開発方式と区別できる。
【００６９】
一実施形態では、ソフトウェアの実装に関する情報が、実行時の前に静的にインジェクト（inject）される。本発明の一実施形態では、ソフトウェアアプリケーション２５の実行時に、実行時環境に関するリンクは動的に解決（resolve）されない。実際、実行時環境に関するクラスリンクは実行時に静的に解決される。
【００７０】
静的なクラスローディングは、ロードするクラスの名前がコンパイラに分かった時に行われ、クラスファイルにフルネームが入れられる。クラスファイル中の名前はそのクラスをロードするのに使われる。動的クラスローディングは、コードが実行中にクラス名を用いることによりクラスローディングを要求した時に行われる。プログラムがロードしながらクラス名を計算できるので、このアプローチは動的と呼ばれる。コンパイラはどのクラスが要求されるか知りようがない。
【００７１】
一実施形態では、方法は、パッケージドコンポーネントに、第２の一組の固定実装クラスを識別する情報を提供し、パッケージドコンポーネントと第２の実行時環境との間のインタフェースをインプリメントし、それにより第２の実行時環境に依存する第２のターゲットアプリケーションを生成するステップを有する。
【００７２】
よって、同じパッケージドコンポーネントを用いて、異なる実行時環境に対して、２つ以上のターゲットアプリケーション２５を生成できる。これにより、異なるアプリケーション２５において同じ機能（underlying  function）が用いられる場合、異なる実行時環境に対してアプリケーション２５を生成する効率がよくなる。もちろん、実行時に固定実装クラスの異なるセットをローディングすることにより、さらに別の実行時環境に依存するさらに別のターゲットアプリケーションを作成できる。この場合、固定実装クラスの異なるセットを識別する情報を実行時前に提供することもできる。これにより、クラスを動的にではなく静的にロードできるようになる。
【００７３】
図５は、本発明によるソフトウェアアプリケーション２５を生成するステップを示す図である。
【００７４】
ソフトウェアアプリケーション２５を構成する各ソフトウェアコンポーネント２０は、サーバ１上のコンポーネントリポジトリ１１、１２に格納されている。具体的に、一実施形態では、各ソフトウェアコンポーネント２０のソースコード２０Aは、ソースコンポーネントリポジトリ１１に記憶され、各ソフトウェアコンポーネント２０のバイナリコード２０Bは、バイナリコンポーネントリポジトリ１２に記憶されている。
【００７５】
一実施形態では、ソースコンポーネントリポジトリ１１及び／またはバイナリコンポーネントリポジトリ１２は、Apache  MAVENコンポーネントリポジトリを用いてインプリメントされる。
【００７６】
開発環境５５において、開発者は修正または生成する任意のソフトウェアコンポーネント２０のソースコード２０Ａにアクセスする。他に必要なソフトウェアコンポーネント２０は、バイナリコンポーネントリポジトリ１２から自動的にダウンロードできる。
【００７７】
ターゲットアプリケーション２５はソフトウェアコンポーネント２０から生成される。ターゲットアプリケーション２５は、例えば、ソフトウェアコンポーネント２０間のリンクを画定し、ソフトウェアコンポーネント２０の組合せにより構成されるパッケージドコンポーネントに固定実装クラスを提供するステップＳ３．２により、生成される。
【００７８】
固定実装クラスを特定する情報と、実行時環境に関する情報とをパッケージドコンポーネントに提供するステップＳ３０２は、依存性の注入（dependency  injection）により行い得る。依存性の注入はＳｐｒｉｎｇなどのソフトウェアを用いて行える。
【００７９】
本発明のコンテクストでは、固定実装クラスを特定する情報は、ターゲットアプリケーション２５の生成中にパッケージドコンポーネントに提供される。固定実装クラスのセットを特定する情報をパッケージドコンポーネントに提供することにより、パッケージドコンポーネントをコンテクスト（例えば、スマートフォン３６やＭＦＰ３３）に依存させられる。固定実装クラスのセットを特定する情報を実行時の前にソフトウェアアプリケーション２５の生成中にパッケージドコンポーネントに静的に注入することにより、ソフトウェアアプリケーション２５を実行するのに必要なメモリ量を小さくする。実行時に固定実装クラスのセットを静的にロードできる。
【００８０】
異なる固定実装クラスのセットをパッケージドコンポーネントに提供することにより、様々な環境（例えば、異なるオペレーティングシステム、異なる環境サーバへの接続など、異なる根底技術）に対して、同じソフトウェアアプリケーション（underlying  software  application）を生成できる。
【００８１】
本発明では、パッケージドコンポーネントの実装は、パッケージドコンポーネントの機能とは別である。これにより、同じパッケージドコンポーネントを、その実装を変更するだけで、様々な実行時環境で実装できる。
【００８２】
本発明では、すべてのソフトウェアコンポーネント２０を、異なるソフトウェアアプリケーションに再利用できる。パッケージドコンポーネントも、（それ自体がソフトウェアコンポーネント２０の組合せであるが、）異なるソフトウェアアプリケーション２５を構成するために再利用できる。
【００８３】
一実施形態では、各ソフトウェアコンポーネント２０は、単一の機能を完全に実行するものである。よって、各ソフトウェアコンポーネント２０は、１つのタスクを実行する結合性（cohesion）の高いひとかたまりのコード（a  peace  of  code）である。望ましくは、ソフトウェアコンポーネント２０の数は最小に留める。望ましくは、ソフトウェアコンポーネントの数は、システムにおける異なる機能の数とほぼ等しい。
【００８４】
望ましくは、ソフトウェアコンポーネント間の結合度（coupling）は低い。これにより、ソフトウェアコンポーネントは、比較的抽象度の高いもの、すなわち実装されるコンテクストから独立したものになる。抽象的なソフトウェアコンポーネント２０が結合され、ソフトウェアアプリケーション２５ができる。望ましくは、異なるソフトウェアコンポーネント２０間のコードの重複は最小に留める。
【００８５】
結合度（coupling）を低くするという原理は、実行時環境の依存性を最小化するためだけではない。それは、依存性が必要ない場合には、異なるコンセプトを、互いに依存性が最小である異なるコンポーネントに分けることにより、できるだけどこでも依存性を最小化する（結合度を下げる）ためである。一実施形態では、各ソフトウェアコンポーネントは他のソフトウェアコンポーネントから独立している。
【００８６】
一実施形態では、方法は、コンポーネントリポジトリ１１、１２に監査（audit）を行うステップを有する。この監査は、リポジトリに記憶された各ソフトウェアコンポーネント２０のサイズをモニタするステップと、ソフトウェアコンポーネント２０間の結合度をモニタするステップとを含む。この監査は、ソースコンポーネントリポジトリ１１に記憶されたソースコード２０Ｂを分析することにより実行できる。この監査は、例えばＳＯＮＡＲにより実行できる。
【００８７】
この監査により、モデレータは、他のコンポーネントと結合し過ぎているコンポーネントがあるか、そのために編集して結合度を下げる必要があるか、モニタできる。各コンポーネント２０は小さいこと（例えば、単一の機能を実行すること）が望ましい。数百のソフトウェアコンポーネントを組み合わせて、ターゲットアプリケーション２５を生成し得る。ソフトウェアコンポーネントは、認証プロセス全体を管理できるとしたら、大き過ぎると考えられる。対照的に、本発明における小さいソフトウェアコンポーネント２０は、それぞれ単一の機能（例えば、データのロギング）を実行する。
【００８８】
各ソフトウェアコンポーネント２０のソースコード２０Ａは個別に編集可能である。新しいソフトウェアコンポーネント２０はゼロから生成できる。修正されたソフトウェアコンポーネント２０または新しいソフトウェアコンポーネント２０は、バージョンが付けられ、コンポーネントリポジトリ１１、１２にアップロードできる。コンポーネントリポジトリ１１、１２において、各ソフトウェアコンポーネント２０は、個別の編集可能ソースコード２０Ａと、対応する個別ダウンロード可能なバイナリコード２０Ｂを有する。これにより、新しいソフトウェアコンポーネントは、他の開発者と共有して、ソフトウェアアプリケーション２５に用いることができる。
【００８９】
一実施形態では、サーバ１に記憶された少なくとも１つのファイル（例えば、Maven  descriptor  file及びSpring  configuration  file）におけるリンクを画定することにより、ソフトウェアコンポーネント２０でパッケージドコンポーネント（packaged  component）を構成する。構成ファイル（configuration  file）は、パッケージドコンポーネントを実行時環境に実装するものである。他の好適なコンピュータ言語を用いて、ソフトウェアコンポーネント２０間のリンクを画定して、パッケージドコンポーネントを構成することができる。
【００９０】
図６は、認証アプリケーションのソフトウェアコンポーネントの一例を示す図である。これらのソフトウェアコンポーネントはそれぞれが、様々なコンテクストで機能を実装するのに使える汎用ソフトウェアコンポーネントである。すなわち、これらのソフトウェアコンポーネントはそれぞれが、認証アプリケーションの機能とは異なる機能を実行するソフトウェアアプリケーションで用いることができる。
【００９１】
図６に示した例では、［Ａ」に入力されるものに応じて、ハードウェアデバイスの異なる手段により、認証手順が行われ得る。例えば、認証の手段としてアドレスブックが選択され得る。この場合、認証アプリケーションのコントローラセクション（Controller  section）で「Ａ」としてアドレスブックが入力される。この場合、開発ツールは、適切なクラスをロードすることにより、Model(Impl)の「Ａ」をアドレスブックとしてレンダリングする。
【００９２】
このクラスのローディングは、（例えば、Springによる）ビルド時（build  time）に特定されたクラスに基づき実行され得る。依存性の注入は、例えば、ＸＭＬ言語で記述された構成ファイルを用いて実行できる。このように、認証ソフトウェアアプリケーションとそのアプリケーションで用いられる要素（例えば、アドレスブックなど）との間のリンクにより実現される。
【００９３】
図７は、図６の認証アプリケーションのモデル・ビュー・コントローラ（ＭＶＣ）を含むパターンを示す図である。ＭＶＣは、情報の表示を、それを伴うユーザのインターラクションから分けるコンピュータソフトウェアデザインパターンである。ソフトウェアは３つのセクション、すなわちモデル、ビュー、及びコントローラに分かれる。モデルは現実のモデルである。ビューはユーザインタフェースを含む。コントローラは、入力をモデルまたはビューに対するコマンドに変換する。
【００９４】
図７において、ボックス間の各矢印は、その矢印が出るボックスが、その矢印が向かうボックスに依存することを意味する。例えば、図７に示したように、View（ビュー）コンポーネントは、Controller（コントローラ）コンポーネントとModel(Int)コンポーネントとの両方に依存している。これは図６において、Model(Int)コンポーネントがloginとpasswordの入力を規定していることから分かる。そのため、ビューコンポーネントにはlogin及びpasswordの入力に対応する入力フィールドが示されている。
【００９５】
この認証アプリケーションの例で用いられる各ソフトウェアコンポーネント２０は、他のソフトウェアアプリケーション２５で用いることができる。本発明を用いて開発できるソフトウェアアプリケーション２５の一例として、認証アプリケーションを説明した。もちろん、同じ方法で他のソフトウェアアプリケーションを作れる。
【００９６】
例えば、本発明を用いて生成できる他のソフトウェアアプリケーション２５には、スキャンして電子メール機能（scan  to  email  function）、スキャンしてフォルダ機能（scan  to  folder  function）またはスキャンして印刷機能（scan  to  print）が含まれる。本発明を用いて開発できるソフトウェアアプリケーション２５のタイプは、特に限定されない。
【００９７】
本発明を用いれば、各ソフトウェアアプリケーション２５をゼロから生成する必要はない。さらに、開発者は、他のソフトウェアコンポーネントに影響を与えずに個々のソフトウェアコンポーネント２０を編集できるので、ソフトウェアアプリケーション２５のデバッグは容易である。さらに、各ソフトウェアアプリケーション２５の性能は、そのソフトウェアアプリケーション２５のビルド時に（すなわち、実行時の前に）、静的リンクを注入することにより、改善できる。これにより、ソフトウェアアプリケーション２５を短時間で実行でき、ハードウェアデバイスのメモリが少なくて済む。
【００９８】
図８は、本発明のソフトウェア開発方法を示すフローチャートである。
【００９９】
本方法は、機能（feature）を画定する。機能（feature）は、ターゲットアプリケーションにより実行される機能（function）を含む。機能（feature）は、例えば、認証機能（authentication  function）である。
【０１００】
本方法は、その機能（feature）を実装できる、コンポーネントリポジトリ中のソフトウェアコンポーネントを検索するステップを含む。
【０１０１】
一実施形態では、検索はキーワードを用いて行われる。例えば、一実施形態では、各ソフトウェアコンポーネント２０は、そのソフトウェアコンポーネントに関連づけて記憶された、そのソフトウェアコンポーネント２０が実行するタイプの機能（すなわち、機能（function）またはタスク）を指定する一又は複数のキーワードを有する。
【０１０２】
開発者は、ターゲットアプリケーションが実行すべき機能（function）に対応するキーワードを入力できる。例えば、認証機能の場合、開発者は、例えば認証及びログインなどのキーワードを入力できる。
【０１０３】
本方法は、必要なソフトウェアコンポーネント２０がすべてコンポーネントリポジトリにあるかチェックするステップを含む。このように、本方法は、ソースコンポーネントリポジトリ１１及び／またはバイナリコンポーネントリポジトリ１２において、ターゲットアプリケーション２５の所望の機能を実装できるソフトウェアコンポーネント２０を検索するステップを含む。
【０１０４】
所望の機能を実装するには、ソースコンポーネントリポジトリ１１及び／またはバイナリコンポーネントリポジトリ１２に記憶されていないコンポーネントが必要であると判断されることもある。この場合、本方法は、必要なコンポーネントを生成し、それをソースコンポーネントリポジトリ１１に記憶するステップを含む。
【０１０５】
新しく生成されたソフトウェアコンポーネントに対して自動テストを行うと、その新しいコンポーネントはコンポーネントリポジトリ（すなわち、ソースコンポーネントリポジトリ１１及び／またはバイナリコンポーネントリポジトリ１２）で参照可能となる。
【０１０６】
その新しいコンポーネントがコンポーネントリポジトリ１１、１２で参照可能となると、機能を実装するのに必要なソフトウェアコンポーネントがすべてコンポーネントリポジトリにあると判断されたのと同じことになる。この点において、本方法の次のステップは、特定されたソフトウェアコンポーネント２０をアセンブルすることである。
【０１０７】
次に、ソフトウェアアプリケーション２５を生成できる。次に、生成されたソフトウェアアプリケーション２５に対して自動テストを実行できる。
【０１０８】
図９は、本発明の一実施形態によるソフトウェアコンポーネントをアセンブルするステップを示す図である。
【０１０９】
一ステップにおいて、ソフトウェアアプリケーション２５を画定する。これには、ソフトウェアアプリケーション２５の機能を実行するのに必要なソフトウェアコンポーネントを選択するステップが含まれる。選択されたソフトウェアコンポーネント２０は、コンポーネント組合せ（component  combination）を構成するように組み合わせられる。
【０１１０】
一実施形態では、コンポーネント組合せは、モデル・ビュー・コントローラ（ＭＶＣ）に基づく。一実施形態では、ソフトウェアコンポーネント２０はＪＡＶＡ(登録商標)で記述される。ソフトウェアコンポーネントはコンポーネントリポジトリ（すなわち、ソースコンポーネントリポジトリ１１及びバイナリコンポーネントリポジトリ１２）に記憶される。ソフトウェアコンポーネントを選択して、コンポーネント組合せを構成する。パッケージドコンポーネントはコンポーネント組合せから構成される。
【０１１１】
例えば、ソフトウェアコンポーネントがそれぞれ「ログイン」、「画像をキャプチャ」及び「それを送信」であるとき、これらのソフトウェアコンポーネントを用いて、これら３つのソフトウェアコンポーネント２０を含む１つのパッケージドコンポーネント（packaged  component）をビルド（build）する。
【０１１２】
ＸＭＬ（または他の構成言語）を用いてソフトウェアコンポーネント２０を互いにリンクしてもよい。各ソフトウェアコンポーネント２０は、ＸＭＬで記載された拡張ポイントを有する場合がある。他のＸＭＬファイルがあり、各拡張ポイントをリンクする規則を規定してもよい。ＸＭＬファイルは、開発者により事前に画定され、サーバ１に記憶される。
【０１１３】
パッケージドコンポーネントはそれ自体がソフトウェアコンポーネント２０であり、コンポーネントリポジトリに記憶できる。パッケージドコンポーネントは再利用可能なソフトウェアコンポーネント２０である。一実施形態では、パッケージングはＭＡＶＥＮを用いて実行できる。
【０１１４】
図９に示した第２のステップは、パッケージドコンポーネントに依存性の注入（dependency  injection）を行うステップを含む。例えば、ソフトウェアアプリケーション２５の実行はＭＦＰ３３で行われ、依存性の注入により、ソフトウェアアプリケーション２５は、ＭＦＰ３３においてソフトウェアコンポーネント２０により画定される機能を実現できる。例えば、「ログイン」ソフトウェアコンポーネントは、ＭＦＰ３３のログインオペレーションを実行するように実装される。「画像をキャプチャする」ソフトウェアコンポーネントが実装され、スキャン動作を実行する。「それを送信する」ソフトウェアコンポーネントが実装され、フォルダへの送信動作を実行する。
【０１１５】
ソフトウェアアプリケーション２５が例えばスマートフォン３６に実装されると、各ソフトウェアコンポーネント２０がスマートフォン３６に実装された異なるソフトウェアアプリケーションを生成するように、依存性の注入は異なる方法で実行される。この場合、「ログイン」ソフトウェアコンポーネントは、スマートフォン３６のログイン機能として実装され得る。「画像をキャプチャする」ソフトウェアコンポーネントが実装され、写真を撮ってもよい。「それを送信する」ソフトウェアコンポーネントが実装され、撮った写真を他のデバイスに電子メールする。
【０１１６】
ソフトウェアコンポーネントをアセンブルする図９に示したステップは、エクリプスなどのソフトウェアアプリケーション開発ツール上で行える。しかし、他のソフトウェアアプリケーション開発ツールを用いて、ソフトウェアコンポーネントをアセンブルして、ソフトウェアアプリケーションを構成してもよい。
【０１１７】
本発明の具体的な実施形態を説明したが、言うまでもなく、本発明は説明した以外の方法で実施することもできる。例えば、本発明は、上記の方法を記述した機械読み取り可能命令の一又は複数のシーケンスを含むコンピュータプログラム、またはかかるコンピュータプリグラムを記憶したデータ記憶媒体の形式であってもよい。（データ記憶媒体は、例えば、半導体メモリ、磁気ディスクまたは光ディスクである。）
以上の説明は例示を意図したものであり、限定を意図したものではない。よって、当業者には言うまでもないことであるが、下記の特許請求の範囲から逸脱することなく、説明した実施形態に修正を加えることができる。例えば、実行時前にパッケージドコンポーネントに固定実装クラスを設けなくてもよい。この場合、パッケージドコンポーネントは、ロードするクラスの解決が実行時に動的に行われるプラグイン用である。
【０１１８】
本発明の実施形態は、以下に列挙する異なる技術とパターンの組合せに基づく。
−Ｍａｖｅｎはコンポーネント技術である。Ｍａｖｅｎはバイナリコンポーネントリポジトリを提供する。Ｍａｖｅｎは、コンポーネント間の依存性の管理システムを提供する。
−Ｓｐｒｉｎｇは依存性注入技術である。Ｓｐｒｉｎｇは、ビルト時にソースコードを変更して実装クラスに依存性を「注入」するシステムを提供する。
−ＭＶＣパターンは、モデル、ビュー及びコントローラ間の関心のある分離（separation  of  concern）を促進する。
−低結合度（low  coupling）／高結合性（high  cohesion）パターンにより、コードの塊（すなわち、ソフトウェアコンポーネント）のコンテンツの最適化が促進され、維持が容易になる。
−連続的インテグレーションにより、本発明によりすべてのソフトウェア開発の状況を連続的に制御するシステムが提供される。
【０１１９】
本発明の一実施形態は、ソフトウェアの開発システムにこれらの技術とパターンを組み合わせるステップ含む。本発明は、ソフトウェア開発の効率と品質を改善する。
【符号の説明】
【０１２０】
１  サーバ
１０  記憶メモリ
１１  ソースコンポーネントリポジトリ
１２  バイナリコードリポジトリ
１５  プロセッサ
２０  ソフトウェアコンポーネント
２０Ａ  ソースコード
２０Ｂ  バイナリコード
２５  ソフトウェアアプリケーション
３０  ネットワーク
３３  ＭＦＰ
３６  スマートフォン
３９  他の装置
５０  端末
５５  開発環境
【図１】
2014071899.tif 000003
【図２】
2014071899.tif 000004
【図３】
2014071899.tif 000005
【図４】
2014071899.tif 000006
【図５】
2014071899.tif 000007
【図６】
2014071899.tif 000008
【図７】
2014071899.tif 000009
【図８】
2014071899.tif 000010
【図９】
2014071899.tif 000011