(57)【要約】【課題】上流設計で実行時の動作不整合を解決することのできるソフトウェア生成方法を得る。【解決手段】インタフェース定義工程で、インタフェース定義言語に排他制御フラグを記述する（ＳＴ７１０）。条件定義工程で、同時使用が発生する条件を定義する（ＳＴ７２０）。排他制御挿入判断工程で、インタフェース定義工程にて記述された排他制御フラグと、条件定義工程にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する（ＳＴ７４０）。ソースコード生成工程で、排他制御挿入判断工程の判断結果に基づいて、ソフトウェア生成時に排他制御プログラムを挿入する（ＳＴ７５０）。【選択図】図６
2015204014.tif 000002
【特許請求の範囲】
【請求項１】
プログラムモジュール間のインタフェースを定義するインタフェース定義言語からソフトウェアのソースコードを生成するソフトウェア生成方法であって、
前記インタフェース定義言語にインタフェースを同時使用できないことを示す排他制御フラグを記述するインタフェース定義工程と、
前記インタフェース定義言語に記載のインタフェースに対して、同時使用が発生する条件を定義する条件定義工程と、
前記インタフェース定義工程にて記述された排他制御フラグと、前記条件定義工程にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する排他制御挿入判断工程と、
前記排他制御挿入判断工程の判断結果に基づいて、ソフトウェア生成時に前記排他制御プログラムを挿入するソースコード生成工程とを備えたソフトウェア生成方法。
【請求項２】
前記条件定義工程において、同時使用が発生する条件を、インタフェースを提供するプログラムモジュールと、当該インタフェースを使用するプログラムモジュールとの関係を定義することによって記述することを特徴とする請求項１記載のソフトウェア生成方法。
【請求項３】
前記条件定義工程において、同時使用が発生する条件を、インタフェース提供側の状態遷移を定義することによって記述することを特徴とする請求項１記載のソフトウェア生成方法。
【請求項４】
前記ソースコード生成工程で挿入する排他制御プログラムは、ソフトウェア実行命令をキューイングするコードであることを特徴とする請求項１記載のソフトウェア生成方法。
【請求項５】
前記ソースコード生成工程で挿入する排他制御プログラムは、呼出元の優先度に応じて実行中の処理を中断または停止させるコードであることを特徴とする請求項１記載のソフトウェア生成方法。
【請求項６】
前記ソースコード生成工程で挿入する排他制御プログラムは、インタフェースが使用できない際の待ち時間を設定するための排他待ち時間を定義するものであることを特徴とする請求項１記載のソフトウェア生成方法。
【請求項７】
前記ソースコード生成工程で挿入する排他制御プログラムを選択するための排他制御定義工程を備えたことを特徴とする請求項１記載のソフトウェア生成方法。
【請求項８】
前記条件定義工程において、同時使用が発生する条件を、任意の外部プログラムモジュールの状態を参照して定義することによって記述することを特徴とする請求項１記載のソフトウェア生成方法。
【請求項９】
前記インタフェース定義工程において、インタフェースの同時使用を許可する個数を定義し、前記ソースコード生成工程において、挿入する排他制御プログラムを、前記個数のプログラムモジュールからの同時呼出までを上限とするコードとすることを特徴とする請求項１記載のソフトウェア生成方法。
【請求項１０】
プログラムモジュール間のインタフェースを定義するインタフェース定義言語からソフトウェアのソースコードを生成するソフトウェア生成装置であって、
前記インタフェース定義言語にインタフェースを同時使用できないことを示す排他制御フラグを記述するインタフェース定義手段と、
前記インタフェース定義言語に記載のインタフェースに対して、同時使用が発生する条件を定義する条件定義手段と、
前記インタフェース定義手段にて記述された排他制御フラグと、前記条件定義手段にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する排他制御挿入判断手段と、
前記排他制御挿入判断手段の判断結果に基づいて、ソフトウェア生成時に前記排他制御プログラムを挿入するソースコード生成手段とを備えたソフトウェア生成装置。
【請求項１１】
与えられたソフトウェアを実行するプログラム実行手段を有するソフトウェア実行装置であって、
前記ソフトウェアが請求項１から請求項９のうちのいずれか１項記載のソフトウェア生成方法によって作成されたものであることを特徴とするソフトウェア実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、アプリケーションプラットフォームを作成する過程で、作成するインタフェース定義を拡張すると共に、開発の実装時に調整が必要な排他制御プログラムの挿入判断を行うことで、ソフトウェアの工数削減や不具合低減を実現するソフトウェア作成方法とソフトウェア作成装置及び作成されたソフトウェアを実行するソフトウェア実行装置に関するものである。
【背景技術】
【０００２】
スマートフォン、車載情報装置など、複数のソフトウェアが同時に動作する組込みシステム向けソフトウェア実行装置が増加してきている。これらの組込みシステム向けソフトウェア実行装置は、その上で動作するソフトウェアの生産性を高めるために、動作を規定するアプリケーションプラットフォームを用いて、アプリケーションを作成する。しかし、アプリケーションプラットフォームの開発規模は年々大きくなってきており、不具合が少ないアプリケーションプラットフォームを迅速に構築する技術が必要となっている。
【０００３】
このような背景に対して、従来のアプリケーションプラットフォーム作成過程では、ソフトウェア・プラットフォーム・アーキテクチャを基に、体系的なコンポーネント・モデルを作成し、これらを基に自動的に具現化を行うことで、設計と具現の整合性の検証を支援していた（例えば、特許文献１参照）。特許文献１に示されるコンポーネント・モデルは、ＩＤＬ（Ｉｎｔｅｒｆａｃｅ  Ｄｅｆｉｎｉｔｉｏｎ  Ｌａｎｇｕａｇｅ）やＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌ  Ｌａｎｇｕａｇｅ）で定義される抽象的なモデルであり、既存のモデルを用いてソフトウェアのアーキテクチャを記述し、アーキテクチャによる骨組みだけで設計に矛盾が発生していないかを検証する仕組みを実現している。
【０００４】
また、例えば、特許文献２では、様々なプログラミング言語からの呼出を実現するために、インタフェース定義言語を用いてメソッドのバインディングや型検査を実現していた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１１−５１０４１８号公報
【特許文献２】特表２００４−５０６２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記従来のソフトウェア生成方法では、複数のソフトウェア実行コードから一つのソフトウェア実行コードを同時に呼び出す際に、動作の不整合が発生する問題を解決できないという課題があった。
【０００７】
本発明では、上記の問題を解決するためになされたもので、上流設計で実行時の動作不整合を解決することのできるソフトウェア生成方法を得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るソフトウェア生成方法は、プログラムモジュール間のインタフェースを定義するインタフェース定義言語からソフトウェアのソースコードを生成するソフトウェア生成方法であって、インタフェース定義言語にインタフェースを同時使用できないことを示す排他制御フラグを記述するインタフェース定義工程と、インタフェース定義言語に記載のインタフェースに対して、同時使用が発生する条件を定義する条件定義工程と、インタフェース定義工程にて記述された排他制御フラグと、条件定義工程にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する排他制御挿入判断工程と、排他制御挿入判断工程の判断結果に基づいて、ソフトウェア生成時に排他制御プログラムを挿入するソースコード生成工程とを備えたものである。
【発明の効果】
【０００９】
この発明のソフトウェア生成方法は、インタフェース定義工程にて記述された排他制御フラグと、条件定義工程にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断し、この判断結果に基づいて、ソフトウェア生成時に排他制御プログラムを挿入するようにしたので、上流設計で実行時の動作不整合を解決することができる。
【図面の簡単な説明】
【００１０】
【図１】この発明の実施の形態１によるソフトウェア生成装置を示す構成図である。
【図２】この発明の実施の形態１によるソフトウェア生成装置のインタフェース定義言語の一例を示す説明図である。
【図３】この発明の実施の形態１によるソフトウェア生成装置の呼出関係の一例を示す説明図である。
【図４】この発明の実施の形態１によるソフトウェア生成装置の排他制御不要時のソースコードの生成例を示す説明図である。
【図５】この発明の実施の形態１によるソフトウェア生成装置の排他制御必要時のソースコードの生成例を示す説明図である。
【図６】この発明の実施の形態１によるソフトウェア生成装置の動作を示すフローチャートである。
【図７】この発明の実施の形態１によるソフトウェア生成装置の排他制御判断工程の詳細を示すフローチャートである。
【図８】この発明の実施の形態２によるソフトウェア生成装置を示す構成図である。
【図９】この発明の実施の形態３によるソフトウェア生成装置を示す構成図である。
【図１０】この発明の実施の形態３によるソフトウェア生成装置のインタフェース定義言語の一例を示す説明図である。
【図１１】この発明の実施の形態３によるソフトウェア生成装置のソースコードの生成例を示す説明図である。
【図１２】この発明の実施の形態４によるソフトウェア生成装置を示す構成図である。
【図１３】この発明の実施の形態４によるソフトウェア生成装置の状態遷移の定義例を示す説明図である。
【図１４】この発明の実施の形態４によるソフトウェア生成装置のソースコードの生成例の説明図である。
【図１５】この発明の実施の形態５によるソフトウェア生成装置を示す構成図である。
【図１６】この発明の実施の形態５によるソフトウェア生成装置のインタフェース定義言語の一例を示す説明図である。
【図１７】この発明の実施の形態５によるソフトウェア生成装置の外部状態定義の一例を示す説明図である。
【図１８】この発明の実施の形態５によるソフトウェア生成装置のソースコードの生成例の説明図である。
【発明を実施するための形態】
【００１１】
実施の形態１．
本発明は、ソフトウェア実行コードの呼出口となるインタフェースをインタフェース記述言語からコード生成するソフトウェアプラットフォームの開発過程において、各インタフェースが同時呼出可能かどうかを定義し、同時呼出不可でかつ同時呼出が発生する可能性がある場合にのみ排他制御コードを挿入することで、上流設計で実行時の動作不整合を解決するようにしたものである。
【００１２】
図１は、この発明の実施の形態１によるソフトウェア生成装置１００とソフトウェア実行装置１７０とを示す構成図である。
図において、ソフトウェア生成装置１００は、インタフェース定義手段１１０、呼出関係定義手段１２０、排他制御挿入判断手段１３０、ソースコード生成手段１４０、バイトコード生成手段１６０を備えている。インタフェース定義手段１１０は、プログラムモジュール間の窓口であるインタフェースを定義する手段である。呼出関係定義手段１２０は、インタフェース定義言語２００（後述する図２参照）で定義された少なくとも一つのインタフェースの呼出関係を定義する条件定義手段である。排他制御挿入判断手段１３０は、排他制御プログラムのソースコードの挿入が必要かどうかを判断する手段である。ソースコード生成手段１４０は、インタフェース定義手段１１０と呼出関係定義手段１２０と排他制御挿入判断手段１３０とからソースコードを生成する手段であり、排他制御挿入手段１５０を有している。この排他制御挿入手段１５０は、排他制御挿入判断手段１３０の判断結果を参照し、排他制御プログラムのソースコードの挿入が必要な場合には、排他制御を挿入する手段である。バイトコード生成手段１６０は、ソースコード生成手段１４０で生成されたソースコードをバイトコードに変換する手段である。
【００１３】
ソフトウェア実行装置１７０には、ソフトウェア生成装置１００のバイトコード生成手段１６０で生成されたバイトコードを格納する記憶装置１９０と、この記憶装置１９０に格納されたバイトコードを実行するプログラム実行手段１８０とを有している。
【００１４】
なお、これらソフトウェア生成装置１００及びソフトウェア実行装置１７０はコンピュータを用いて構成され、ソフトウェア生成装置１００におけるインタフェース定義手段１１０〜バイトコード生成手段１６０は、それぞれの機能に対応したソフトウェアをＣＰＵやメモリといったハードウェアで実行することで実現されている。
【００１５】
インタフェース定義手段１１０は、図２に示すようなインタフェース定義言語２００を生成するソフトウェアを用いて構成されている。本発明によるインタフェース定義手段１１０では、インタフェースによって呼び出される機能が、複数のプログラムモジュールから同時に呼び出された際に、正常に動作できるかどうかを示す排他制御必要フラグを定義することが可能である。インタフェース定義手段１１０の具体的実現手段としては、インタフェース定義専用のソフトウェアやテキストエディタを用いる。
【００１６】
インタフェース定義言語２００は、プログラムモジュール間の窓口となるインタフェースを規定する記述言語である。インタフェース記述言語では、プログラムモジュール間のインタフェースである関数名２１０、その関数の返り値２２０、引数２３０、排他制御必要フラグ２４０、さらにインタフェースの集合となる関数集合２５０を記述する。なお、この例では、排他制御必要フラグ２４０は関数名２１０に対して関連付けられているが、インタフェースの集合である関数集合２５０に対して定義してもよい。その場合は関数集合２５０内のすべての関数に対して排他制御必要フラグ２４０が定義されていることと同じ意味である。
【００１７】
呼出関係定義手段１２０は、図３に示すようなプログラムモジュール間のインタフェースの呼出関係を定義するソフトウェア３００を用いて構成されている。呼出関係定義手段１２０では、インタフェースの提供３１０とインタフェースの使用３２０を、該当するプログラムモジュールと線で結ぶことでグラフィカルに定義する。一つのインタフェースは一つのプログラムモジュールから提供され、一つ以上のプログラムモジュールから使用できる。ここで定義するインタフェースは、インタフェース定義言語の定義における関数名２１０またはインタフェースの集合と成る関数集合２５０のいずれでもよい。呼出関係定義手段１２０の具体的実現手段としては、ＵＭＬのコンポーネント図を作図するエディタのようなツールが該当する。
【００１８】
排他制御挿入判断手段１３０は、呼出関係定義手段１２０において、インタフェースが複数のプログラムモジュールからの呼出が定義されていることと、インタフェースに排他制御必要フラグ２４０が定義されていることによって、排他制御プログラムのソースコードの挿入が必要であることを判断する。
【００１９】
ソースコード生成手段１４０は、インタフェース定義手段１１０で定義されたインタフェースと、呼出関係定義手段１２０で定義されたプログラムモジュール間の呼出関係とから、インタフェースを提供するプログラムモジュールに対して、インタフェースが使用された際に実行するプログラムのソースコードを記述するための具体的実装のないスケルトンコード５００やヘッダファイル５１０を生成する。例えば図４に示すようにソースコードを生成する。またインタフェースを使用するプログラムモジュールに対して、インタフェースを使用するためのプロキシ関数のヘッダファイル５２０を生成する。さらにプログラムモジュールが同一のプロセスで動作するプログラムでない場合には、プロセス間やマイコン間通信を行うための共有メモリやＳｏｃｋｅｔを使った通信プログラムとの連携部分を生成する。具体的には、インタフェース提供側にはスケルトンコードを呼び出すソースコード５３０を生成し、インタフェース使用側には実際に通信先に送信するためのソースコード５４０を生成する。プロセス間通信やマイコン間通信等の基本的な通信機能については、ｄｂｕｓやＡｐａｃｈｅ  ｔｈｒｉｆｔなどの既存のＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）を用いても良い。
【００２０】
また、ソースコード生成手段１４０の排他制御挿入手段１５０は、排他制御挿入判断手段１３０の判断結果を参照し、排他制御プログラムのソースコードの挿入が必要な場合には、排他制御を挿入する。例えば、図５に示すように、生成したプロキシ関数のヘッダファイル５２０または通信先へ送信する際のソースコード５４０に存在するインタフェース呼出前に、インタフェースが使用可能かどうかを確認し使用できる場合に他プログラムモジュールからの呼出を制限する排他制御プログラム５５０を挿入する。また、インタフェース呼出後に、他プログラムモジュールからの呼出の制限を解除するプログラム５６０を挿入する。
【００２１】
排他制御の挿入は一例としてインタフェースを使用する側のプロキシ関数のヘッダファイル５２０やソースコード５４０に対して行ったが、インタフェースを提供する側のスケルトンコード５００やヘッダファイル５１０に対して行っても良い。
また、ソースコード生成手段１４０で生成されるソースコードは、アプリケーションプラットフォームのソースコードの全体または一部であり、アプリケーションプラットフォームに必要な残りのソースコードは人手またはモデルベースのコード生成など別の仕組みによって生成しても良い。
【００２２】
バイトコード生成手段１６０は、ソースコード生成手段１４０で生成されたソースコードを含むアプリケーションプラットフォームのソースコードをバイトコードに変換するソフトウェアを用いて構成されている。具体的にはソースコードの記述言語のコンパイラが対象となる。
【００２３】
ソフトウェア実行装置１７０の記憶装置１９０は、ソフトウェア生成装置１００のバイトコード生成手段１６０によって生成されたバイトコードを格納するための記憶装置である。この記憶装置１９０としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ｅＭＭＣ（ｅｍｂｅｄｄｅｄ  ＭｕｌｔｉＭｅｄｉａＣａｒｄ）、ＤＶＤ−ＲＯＭ、ＳＤメモリカードなどが該当する。
【００２４】
プログラム実行手段１８０は、記憶装置１９０に格納されたバイトコードを実行するプロセッサである。実際には、アプリケーションプラットフォームのバイトコードと、別の任意の仕組みで開発されたアプリケーションプログラムのバイトコードとを組合せてプログラム実行手段１８０が処理することで、アプリケーションプログラムを実行する。
【００２５】
次に、上記のように構成されたソフトウェア生成装置の動作について説明する。図６は全体の工程を示すフローチャートである。
まず、インタフェース定義工程（ステップＳＴ７１０）において、インタフェース定義手段１１０を用いてインタフェースを定義する。
次に、条件定義工程（ステップＳＴ７２０）において、呼出関係定義手段１２０を用いて、ステップＳＴ７１０で定義したインタフェースの呼出関係を定義する。
次に、第１のソースコード生成工程（ステップＳＴ７３０）において、ステップＳＴ７１０で定義されたインタフェースとステップＳＴ７２０で定義された呼出関係を基に一旦のソースコードを生成する。
【００２６】
さらに、排他制御挿入判断工程（ステップＳＴ７４０）において、ステップＳＴ７１０で定義したインタフェースに排他制御必要フラグ２４０が付与されているかの確認と、ステップＳＴ７２０で定義した呼出関係で、インタフェースが複数のプログラムモジュールから使用されているかの確認を行う。このステップＳＴ７４０の工程は、排他制御挿入判断手段１３０によって実行される。ステップＳＴ７４０の工程の詳細を図７に示す。即ち、複数のプログラムモジュールが使用されており（ステップＳＴ７４１）、かつ、排他制御必要フラグ２４０が付与されていた場合（ステップＳＴ７４２）は、排他制御挿入が必要と判定し、Ｙｅｓを出力する（ステップＳＴ７４３）。一方、ステップＳＴ７４１及びステップＳＴ７４２の少なくともいずれかで条件を満たさない場合、排他制御挿入は不要と判定し、Ｎｏを出力する（ステップＳＴ７４４）。
【００２７】
ステップＳＴ７４０の排他制御挿入判断工程においていずれの条件も満たす場合は、排他制御挿入工程である第２のソースコード生成工程（ステップＳＴ７５０）を実行する。第２のソースコード生成工程（ステップＳＴ７５０）は、排他制御挿入手段１５０によって実行され、ステップＳＴ７３０で生成されたソースコードを変更する。
【００２８】
以上の工程によって生成されたソースコードに対して、必要であれば人手等で修正を行う工程（ソースコードの修正及び追加：ステップＳＴ７６０）を行い、バイトコードを生成する工程（ステップＳＴ７７０）をバイトコード生成手段１６０によって実行する。生成したバイトコードは最後にプログラム実行手段１８０を用いて、プログラム実行工程（ステップＳＴ７８０）において実行される。
【００２９】
このように実施の形態１では、インタフェース定義手段１１０で定義された排他制御の必要または不必要と定義された呼出関係に応じて排他制御の挿入可否を判断し、ソースコードの一部を生成する。これにより、設計の上流で行われるインタフェース定義時にインタフェースの排他制御が挿入できることにより、下流のソフトウェアの実装時に排他制御を考える必要がなくなり、ソースコードを生成する下流の開発時にプログラムモジュール間の調整が不要となり、手戻りが少なくなり結果的に開発工数の削減が期待できる。また、この効果に付随して、排他制御をコード生成ツールにより統一的に挿入できるため、モジュール間で共通のコードを利用できることから、排他制御方法が異なることによる不具合を削減できる。
【００３０】
以上説明したように、実施の形態１のソフトウェア生成方法によれば、プログラムモジュール間のインタフェースを定義したインタフェース定義言語からソフトウェアのソースコードを生成するソフトウェア生成方法であって、インタフェース定義言語にインタフェースを同時使用できないことを示す排他制御フラグを記述するインタフェース定義工程と、インタフェース定義言語に記載のインタフェースに対して、同時使用が発生する条件を定義する条件定義工程と、インタフェース定義工程にて記述された排他制御フラグと、条件定義工程にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する排他制御挿入判断工程と、排他制御挿入判断工程の判断結果に基づいて、ソフトウェア生成時に排他制御プログラムを挿入するソースコード生成工程とを備えたので、インタフェース定義を設計するような上流工程において必要な箇所に排他制御プログラムを挿入することができ、上流設計で実行時の動作不整合を解決することができる。
【００３１】
また、実施の形態１のソフトウェア生成方法によれば、条件定義工程において、同時使用が発生する条件を、インタフェースを提供するプログラムモジュールと、インタフェースを使用するプログラムモジュールとの関係を定義することによって記述するようにしたので、インタフェースの呼出関係を定義することで排他制御プログラムを挿入することができる。
【００３２】
また、実施の形態１のソフトウェア生成装置によれば、プログラムモジュール間のインタフェースを定義するインタフェース定義言語からソフトウェアのソースコードを生成するソフトウェア生成装置であって、インタフェース定義言語にインタフェースを同時使用できないことを示す排他制御フラグを記述するインタフェース定義手段と、インタフェース定義言語に記載のインタフェースに対して、同時使用が発生する条件を定義する条件定義手段と、インタフェース定義手段にて記述された排他制御フラグと、条件定義手段にて定義された条件に基づいて、排他制御プログラムを挿入するかどうかを判断する排他制御挿入判断手段と、排他制御挿入判断手段の判断結果に基づいて、ソフトウェア生成時に排他制御プログラムを挿入するソースコード生成手段とを備えたので、インタフェース定義を設計するような上流工程において必要な箇所に排他制御プログラムを挿入することができ、上流設計で実行時の動作不整合を解決することができる。
【００３３】
実施の形態２．
実施の形態１においては、ソースコードの記述言語にＣ＋＋やＪａｖａ（登録商標／以下、記載を省略する）などのコンパイルを必要とする言語についての例を挙げたが、ソースコードの記述言語にＪａｖａＳｃｒｉｐｔやＰｅｒｌなどのスクリプト言語を用いてもよく、これを実施の形態２として以下に説明する。
【００３４】
図８は、実施の形態２におけるソフトウェア生成装置１００ａとソフトウェア実行装置１７０を示す構成図である。図面上の構成で実施の形態１と異なるのは、ソフトウェア生成装置１００ａにおいてバイトコード生成手段１６０を備えず、ソースコード生成手段１４０からソースコードが直接ソフトウェア実行装置１７０に出力されている点である。その他の構成は図１と同様であるため、対応する部分に同一符号を付してその説明を省略する。
【００３５】
ソースコードの記述言語にスクリプト言語を用いた場合、ソースコード生成手段１４０まではソフトウェア生成装置１００ａによって開発されるが、生成したソースコードをソフトウェア実行装置１７０の記憶装置１９０にコピーする。そして、プログラム実行手段１８０は、記憶装置１９０に格納されたソースコードをＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラやスクリプト実行エンジンによって、機械語に翻訳しながらプログラムを実行する。
【００３６】
この構成によれば、アプリケーションプラットフォームのソースコードをソフトウェア実行装置１７０にそのままコピーして利用できるため、ソフトウェア実行装置１７０上でのプログラムの修正や動作確認が容易となる。
【００３７】
実施の形態３．
図９は、実施の形態３のソフトウェア生成装置１００ｂとソフトウェア実行装置１７０とを示す構成図である。実施の形態３では、排他制御時の処理方法を定義する排他制御定義手段４１０をインタフェース定義手段１１０の後段側に設け、排他制御挿入手段１５０において挿入する排他制御コードを変更するようにしたものである。それ以外の構成は図１に示した実施の形態１と同様であるため、ここでの説明は省略する。
【００３８】
排他制御定義手段４１０は、インタフェース定義言語２００に情報を新たに付与するツールで、インタフェース定義手段１１０の拡張機能であるか、またはインタフェース定義手段１１０とは異なるインタフェース定義言語２００の編集ツールである。
【００３９】
図１０は、排他制御定義手段４１０を利用して定義したインタフェース定義言語２００の一例である。排他制御定義手段４１０の利用により、排他制御必要フラグ２４０に相当する部分に排他制御時の処理が付与され（４２０〜４４０）、これにより、排他制御挿入手段１５０によって挿入される排他制御プログラム５５０に相当する部分が変化する。
【００４０】
図１１は、排他制御定義手段４１０で定義したインタフェース定義言語２００からソースコード生成手段１４０によってソースコードを生成した例である。
処理をキューイングしてキューの先頭から順に処理する方式４２０を選択した場合、排他制御挿入手段１５０によってインタフェース使用側からアトミックなキューに対して処理要求を行い、処理要求がＰｏｐされた際に機能を呼び出す排他制御プログラム４６０を挿入する。
【００４１】
所定の時間待つ方式４３０を選択した場合、排他制御挿入手段１５０によってインタフェースが使用できない際に所定時間待つプログラム４７０を挿入する。
【００４２】
処理の呼出元の優先度に応じて処理を中断させて優先度の高い処理を実行する方式４４０を選択した場合、優先度の低い処理が実行されている場合には強制的に処理を中断するプログラム４８０を挿入する。
【００４３】
これにより、同時実行できない際のインタフェースの挙動を上流のソフトウェア全体設計時に設計できることにより、様々な排他制御コードの再利用が容易になるため、実装時の作業工数が削減できる。
【００４４】
以上説明したように、実施の形態３のソフトウェア生成方法によれば、ソースコード生成工程で挿入する排他制御プログラムは、ソフトウェア実行命令をキューイングするコードであるようにしたので、排他制御によってソフトウェアが使用できないときにキューに入れ、順番待ちすることができる。
【００４５】
また、実施の形態３のソフトウェア生成方法によれば、ソースコード生成工程で挿入する排他制御プログラムは、呼出元の優先度に応じて実行中の処理を中断または停止させるコードであるようにしたので、排他制御時に予め設定した優先度に従って、優先度の高いソフトウェアが使用する際に優先度の低いソフトウェアを中断または停止させることができる。
【００４６】
また、実施の形態３のソフトウェア生成方法によれば、ソースコード生成工程で挿入する排他制御プログラムは、インタフェースが使用できない際の待ち時間を設定するための排他待ち時間を定義するものであるようにしたので、排他時の処理の待ち時間を設定することができる。
【００４７】
また、実施の形態３のソフトウェア生成方法によれば、ソースコード生成工程で挿入する排他制御プログラムを選択するための排他制御定義工程を備えたので、インタフェース毎に排他時の制御を変更することができる。
【００４８】
実施の形態４．
実施の形態４は、インタフェースとなる関数またはインタフェースとなる関数の集合体に対して、状態を定義する状態遷移定義を可能にすることで、状態に関連付けて排他制御を実現するようにしたものである。
図１２は、実施の形態４のソフトウェア生成装置１００ｃとソフトウェア実行装置１７０とを示す構成図である。実施の形態４では、これまでの実施の形態１〜３とは異なり、呼出関係定義手段１２０の代わりに状態遷移定義手段６１０を備えている。これ以外の構成は図１に示す実施の形態１と同様であるため、ここでの説明は省略する。
【００４９】
図１３は、状態遷移定義手段６１０によって定義される状態遷移図６２０の一例である。定義対象６３０によって、インタフェースとなる関数または関数の集合体と状態遷移を関連付ける。状態遷移図６２０には、通常状態６４０とインタフェースの同時使用を制限する状態６５０を定義することができる。
【００５０】
排他制御挿入判断手段１３０は、実施の形態１〜３の呼出関係定義手段１２０によって定義される呼出関係ではなく、状態遷移定義手段６１０によって定義される状態遷移６２０を用いて排他制御挿入を判断する。具体的には、状態遷移図６２０に同時使用を制限する状態６５０が定義されている場合には、排他制御を挿入するという判断を行い、１つも定義されていない場合には挿入しないという判断を行う。
【００５１】
排他制御挿入手段１５０は、排他制御挿入判断手段１３０での判断を用いて、排他制御処理を挿入する。図１４は、排他制御挿入手段１５０によって排他制御が必要な状態時に排他制御を行うように出力されたコードの一例である。インタフェースの提供側で状態遷移を利用する必要があるため、状態を管理する状態管理クラス６６０を実装クラスに生成する。また、これまでの実施の形態と同様、インタフェース使用側で使用するプロキシ関数のヘッダファイル５２０を出力する。各関数の呼出時に現在の状態が排他制御を必要とする状態であるかを確認する状態確認コード６７０が排他制御挿入手段１５０によって挿入される。なお本実施の形態ではプログラムモジュールの関係を定義していないため、汎用的なヘッダファイルとなる。
【００５２】
これにより、既存のプログラムを拡張する際に既存の状態遷移図を本インタフェース定義に適用でき、移植時の工数削減が実現できる。また別の効果として、出荷後に後でインストールするようなアプリケーションでは、予めインタフェースがどのプログラムモジュールから使用されるかの予想が難しいが、インタフェースの同時使用の制限が必要であるかを状態で持たせることにより、インタフェースとプログラムモジュールとの関係が定義できない場合にでも排他制御を実現できる。
【００５３】
以上説明したように、実施の形態４のソフトウェア生成方法によれば、条件定義工程において、同時使用が発生する条件を、インタフェース提供側の状態遷移を定義することによって記述するようにしたので、インタフェースに関連する状態遷移に関連付けて、排他制御プログラムを挿入することができる。
【００５４】
実施の形態５．
実施の形態５は、外部の状態を参照することで、その外部の状態に関連付けて排他制御を実現するようにしたものである。
図１５は、実施の形態５におけるソフトウェア生成装置１００ｄとソフトウェア実行装置１７０とを示す構成図である。実施の形態５では、実施の形態１〜４とは異なり、参照する状態がインタフェース提供側のプログラムモジュールではなく、任意の外部プログラムの状態を参照する。すなわち、実施の形態１〜３の呼出関係定義手段１２０や実施の形態４の状態遷移定義手段６１０に代えて外部状態定義手段６８０を備える。この外部状態定義手段６８０は、外部状態を参照する場合のインタフェースと外部状態との関連を定義する手段である。また、実施の形態５のインタフェース定義手段１１０ａは、排他制御必要フラグとして、インタフェースの同時使用を許可する個数を定義するよう構成されている。その他の構成は図１に示した実施の形態１と同様であるため、ここでの説明は省略する。
【００５５】
図１６は、インタフェース定義手段１１０ａによって定義されたインタフェース定義言語２００ａの例である。実施の形態１とは異なり、排他制御必要フラグ６９０に所定の数字を定義することで、所定数の同時使用を実現する。図示例では所定数を３としたものである。
【００５６】
図１７は、外部状態定義手段６８０で定義したインタフェースと参照する外部状態の関連を記述した外部状態定義７１０の例である。外部状態を参照することを示す提供インタフェース７２０で、提供インタフェースが外部状態を参照することを示す。外部状態参照７３０は、外部状態を参照する提供インタフェース７２０が制限状態となる条件を記載する領域である。
【００５７】
図１８は、排他制御挿入手段１５０によって排他制御が必要な状態時に排他制御を行うように出力されたコードの一例である。各関数の呼出時に現在の状態が排他制御を必要とする状態であるかを確認する状態確認コード６７０を排他制御挿入手段１５０によって挿入する。また、インタフェース定義言語２００に定義された同時使用数の上限をセマフォに設定する排他制御プログラム５５０により、他のソフトウェアが使用している場合でも所定数の同時呼出まで対応できる。
【００５８】
これにより、インタフェースの提供または使用に関わらず、任意の外部の状態に応じて排他制御を実行するかどうかを決定でき、またインタフェースの同時使用の上限数を自由に設定できる。
【００５９】
以上説明したように、実施の形態５のソフトウェア生成方法によれば、条件定義工程において、同時使用が発生する条件を、任意の外部プログラムモジュールの状態を参照して定義することによって記述するようにしたので、外部状態によって変化するパラメータを用いて動的に排他制御を実行することができる。
【００６０】
また、実施の形態５のソフトウェア生成方法によれば、インタフェース定義工程において、インタフェースの同時使用を許可する個数を定義し、ソースコード生成工程において、挿入する排他制御プログラムを、インタフェースの同時使用を許可する個数のプログラムモジュールからの同時呼出までを上限とするコードとするようにしたので、上限を設定した排他制御を実現することができる。
【００６１】
また、実施の形態１〜５のソフトウェア実行装置によれば、与えられたソフトウェアを実行するプログラム実行手段を有するソフトウェア実行装置であって、ソフトウェアが実施の形態１から実施の形態５のうちのいずれかのソフトウェア生成方法によって作成されたものであるようにしたので、実施の形態１から５のうちのいずれかのソフトウェア生成方法によって生成されたソフトウェアを実行する装置を実現することができる。
【００６２】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００６３】
１００，１００ａ，１００ｂ，１００ｃ，１００ｄ  ソフトウェア生成装置、１１０，１１０ａ  インタフェース定義手段、１２０  呼出関係定義手段、１３０  排他制御挿入判断手段、１４０  ソースコード生成手段、１５０  排他制御挿入手段、１６０  バイトコード生成手段、１７０  ソフトウェア実行装置、１８０  プログラム実行手段、１９０  記憶装置、２００，２００ａ  インタフェース定義言語、２１０  関数名、２２０  返り値、２３０  引数、２４０  排他制御必要フラグ、２５０  関数集合、３００  プログラムモジュール間のインタフェースの呼出関係を定義するソフトウェア、３１０  インタフェースの提供、３２０  インタフェースの使用、４１０  排他制御定義手段、４２０  キューの先頭から順に処理する方式、４３０  所定の時間待つ方式、４４０  優先度の高い処理を実行する方式、４６０  排他制御プログラム、４７０  所定時間待つプログラム、４８０  強制的に処理を中断するプログラム、５００  スケルトンコード、５１０  ヘッダファイル、５２０  プロキシ関数のヘッダファイル、５３０，５４０  ソースコード、５５０  他プログラムモジュールからの呼出を制限する排他制御プログラム、５６０  他プログラムモジュールからの呼出の制限を解除するプログラム、６１０  状態遷移定義手段、６２０  状態遷移図、６３０  定義対象、６４０  通常状態、６５０  インタフェースの同時使用を制限する状態、６６０  状態管理クラス、６７０  状態確認コード、６８０  外部状態定義手段、６９０  排他制御必要フラグ、７１０  外部状態定義、７２０  提供インタフェース、７３０  外部状態参照。
【図１】
2015204014.tif 000003
【図２】
2015204014.tif 000004
【図３】
2015204014.tif 000005
【図４】
2015204014.tif 000006
【図５】
2015204014.tif 000007
【図６】
2015204014.tif 000008
【図７】
2015204014.tif 000009
【図８】
2015204014.tif 000010
【図９】
2015204014.tif 000011
【図１０】
2015204014.tif 000012
【図１１】
2015204014.tif 000013
【図１２】
2015204014.tif 000014
【図１３】
2015204014.tif 000015
【図１４】
2015204014.tif 000016
【図１５】
2015204014.tif 000017
【図１６】
2015204014.tif 000018
【図１７】
2015204014.tif 000019
【図１８】
2015204014.tif 000020