(57)【要約】【課題】  多人数で一つのプログラムの編集作業を行う場合の効率を向上させる。【解決手段】  プログラムを構成要素に分類し、これら構成要素毎に編集の可否を示す情報をロック情報２３として記憶する。プログラム更新手段１２やプログラム読み出し手段１４は、プログラムの更新や読み出しを行う場合、ロック手段１５を介して、そのプログラムの構成要素の編集の可否の状態をロック情報２３から求める。対象となる構成要素が編集不可ではなかった場合は、その構成要素の更新や読み出しを行う。【選択図】        図１
2005084733.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを構成要素に分類して、各構成要素毎に編集の可否を示すロック情報と、
前記プログラムに対する編集指示を受けた場合、前記ロック情報を参照して、各構成要素単位で編集を許可するか否かを判定する編集手段とを備えたことを特徴とするプログラム管理システム。
【請求項２】
ロック情報は、編集を行っているユーザの識別情報を有し、
編集手段は、任意のユーザから構成要素の更新指示を受けた場合、前記ロック情報を参照して、当該構成要素が編集不可とされているか、また、編集不可とされている場合は編集を行っているユーザが前記更新指示のユーザであるかを判定し、編集不可とされており、かつ、ユーザが一致した場合に、当該ユーザからの前記構成要素の更新指示を受け付けることを特徴とする請求項１記載のプログラム管理システム。
【請求項３】
編集手段は、任意の構成要素を読み出す場合、ロック情報を参照して、当該構成要素が編集不可とされているかを判定し、編集不可ではない場合に前記構成要素の読み出しを行い、かつ、当該構成要素を編集不可とするための指示を行うことを特徴とする請求項２記載のプログラム管理システム。
【請求項４】
編集手段は、構成要素として、当該構成要素から構成されるプログラム以外のプログラムから参照されないものを分類し、編集可でかつ前記自プログラム以外のプログラムから参照されない構成要素については、編集操作を許可することを特徴とする請求項１記載のプログラム管理システム。
【請求項５】
構成要素が編集不可から編集可となった場合に、これを通知するユーザを登録し、前記編集不可から編集可となった場合に、前記登録したユーザに、前記編集不可から編集可になったことを通知するロック手段を備えたことを特徴とする請求項１記載のプログラム管理システム。
【請求項６】
編集手段は、構成要素毎に編集前と編集後の比較を行い、当該構成要素毎の変更点を検出し、これを編集データとして出力することを特徴とする請求項１記載のプログラム管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータやシーケンサ等で実行するプログラムの作成、保存を管理するプログラム管理システムに関するものである。更に詳細には、例えば、シーケンス・プログラム言語規格のIEC61131-3およびIEC61149のファンクションブロックに基づくプログラム言語で記述されたプログラムを管理するプログラム管理システムに関するものである。
【背景技術】
【０００２】
従来、シーケンス・プログラムの作成支援や管理支援を目的としたプログラム管理システムとしては、ソフトウェア部品を格納するデータベースに対し、ソフトウェア部品の格納・取り出しおよび整理・分類を司るライブラリと、ソフトウェア部品に基づいてデータフロー図等を生成するＣＡＤ装置とを設けたものがあった（例えば、特許文献１参照）。
【０００３】
このようなプログラム管理システムでは、ＳＴ（構造化テキスト）またはＩＬ（命令リスト）などのプログラミング言語で記述されたサブルーチンや関数をソフトウェア部品の形態とし、データベースに登録して提供する。これにより、ユーザは、このデータベースから所望の機能を実現するソフトウェア部品を選択し、ＣＡＤ装置で各々のソフトウェア部品を接続することによりカスタマイズや変更が容易になる。また、ユーザの要求によって拡張ファンクションブロック（ＦＢ）に個別に対応する場合でも、開発時間と開発コストを低減することができる。更に、ユーザは簡単にソフトウェアが作成でき、その妥当性が検証可能となるので、メーカによる個別対応の負担が大幅に軽減される。また、簡単な構成によりデバッグが可能となるので、プログラム開発の設計段階で仕様の精度を向上させることができ、手戻りも防止できて開発効率が向上する。      
【０００４】
【特許文献１】特開２０００−２４２４７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のプログラム管理システムでは、複数のプログラマがソフトウェア部品を利用する場合、あるプログラマにより部品が編集中であれば他のプログラマがその部品の編集が完了するまでそのソフトウェア部品を利用できず作業が中断するため、複数プログラマによる作業効率が良くないという問題があった。
【０００６】
また、先にソフトウェア部品を引用してプログラムを作成している場合、後から別のプログラマが引用ソフトウェア部品を編集・更新すると、作成プログラムに部品インタフェースの不整合が起きたかもしれないが、先にプログラムを作成しているプログラマはその部品更新の発生を知ることができない。従って、このような場合は、作成したプログラムの確認や試験が行われないといった問題があった。
【０００７】
また、プログラマが利用しようとしたソフトウェア部品がロックされている場合、プログラマはその部品がロック解除されるとすぐに作業を継続して進めたい。しかしながら、従来ではロック解除を、待ちプログラマに伝える手段がないため、プログラマは時々該当ソフトウェア部品にアクセスしてロック解除されたかどうかをプログラマ自身が確認する必要があった。これは、プログラマの作業効率を損なう問題であった。
【０００８】
また、利用したいソフトウェア部品が他プログラマによってロックされているとき、プログラマはロック解除までプログラミング作業を行うことができない。しかし、プログラマがチームで作業している場合、複数プログラマが同一ソフトウェア部品を手分けして改修変更することがしばしば行われる。この場合、後から編集作業を始めたプログラマが、ロックされたソフトウェア部品のソースコードを複製した上で編集し、ロック解除後に自分が加えた変更を他プログラマの編集結果に反映させる。この反映作業をマージという。しかしながら、従来、このようなマージを行う場合、そのプログラマは、他のプログラマが変更した内容と自身が変更した内容について両者のソースコードを比較し、その意味的な差を読み取って他プログラマの変更分に影響を与えないように自分の変更内容を追加しなければならなかった。
【０００９】
本発明は上記のような課題を解決するためになされたもので、第１の目的は、一つのプログラムを複数のプログラマで編集する場合の作業効率を向上させることのできるプログラム管理システムを得るものである。
また、第２の目的は、ソフトウェア部品をインタフェースと内部処理に分けて、それぞれを独立してロックし、複数プログラマによる同時作業における部品ロック解除待ちを縮小することのできるプログラム管理システムを得るものである。
【００１０】
さらに、第３の目的は、プログラムの読み出しや更新が行われた場合に、指定したユーザにその通知を行うことのできるプログラム管理システムを得るものである。
また、第４の目的は、プログラムが編集された場合に、プログラマ自身がその比較を行う必要のないプログラム管理システムを得るものである。
【課題を解決するための手段】
【００１１】
この発明に係るプログラム管理システムは、プログラムを構成要素に分類して、各構成要素毎に編集の可否を示すロック情報を設け、プログラムに対する編集指示を受けた場合、ロック情報を参照して、各構成要素単位で編集の可否を判定するようにしたものである。
【発明の効果】
【００１２】
この発明のプログラム管理システムは、一つのプログラムを意味的に一つ以上の構成要素に分類し、分類された構成要素単位で編集の可否を制御するようにしたので、多人数で一つのプログラムの編集作業を行うことができ、作業効率を向上させることができる。
【発明を実施するための最良の形態】
【００１３】
実施の形態１．
以下、この発明の実施の一形態を説明する。
図１は、この発明の実施の形態１によるプログラム管理システムを示す構成図である。
図において、プログラム監視システムは、プログラム管理部１０、情報記憶部２０、プログラム構成要素記憶部３０を備えている。プログラム管理部１０は、プログラマ１００のログイン、プログラムソースの編集、更新等を管理する機能部であり、ログイン手段１１、プログラム更新手段１２、プログラム解析手段１３、プログラム読み出し手段１４、ロック手段１５を備えている。また、情報記憶部２０は、ユーザ情報２１、要素定義情報２２、ロック情報２３を記憶するための記憶部である。
【００１４】
ログイン手段１１は、プログラマ（ユーザ）１００が本システムにログインする場合に、ユーザ情報２１を参照して、そのログイン処理を行うための機能部である。プログラム更新手段１２は、プログラマ１００からの更新指示に従って、プログラムの更新処理を行う機能部である。プログラム解析手段１３は、プログラムを要素定義情報２２に基づいて構成要素に分類する機能部である。プログラム読み出し手段１４は、プログラマ１００からの指示に従ってプログラム構成要素記憶部３０からプログラム構成要素を読み出す機能部である。
【００１５】
また、プログラム更新手段１２とプログラム読み出し手段１４とにより、編集手段が構成されている。この編集手段は、プログラマ１００からの編集指示を受けた場合、ロック情報２３を参照して、各構成要素単位で編集の可否を判定する機能を実現するものである。ロック手段１５は、プログラム更新手段１２やプログラム読み出し手段１４からの指示に基づき、ロック情報２３を参照して、プログラム構成要素のロックや、そのロックの解除を行う機能部である。ここで、構成要素に対するロックとは、その構成要素を、読み出し不可および更新不可といった編集不可状態とすることを指し、また、ロックの解除とは、編集不可状態から編集可状態にすることを意味している。
【００１６】
情報記憶部２０のユーザ情報２１は、各プログラマ１００を識別するためのユーザＩＤやパスワードといったユーザ情報である。要素定義情報２２は、プログラムの構成要素の要素名、その構成要素の開始文字列や終了文字列および属性定義といった各項目毎の情報からなるものである。ロック情報２３は、どの構成要素がどのユーザによってロックされているか、即ち、各構成要素毎に編集の可否を示すと共に、編集を行っているユーザの識別情報を示す情報である。尚、これらユーザ情報２１〜ロック情報２３については、後で詳細に説明する。
プログラム構成要素記憶部３０は、プログラム解析手段１３によって分類されたそれぞれのプログラム構成要素を記憶するための記憶部である。
【００１７】
尚、上記のようなプログラム管理システムは、例えば、サーバコンピュータと複数台のクライアント（プログラマ端末）がネットワーク接続されたサーバ−クライアントシステムで実現されており、上記のプログラム管理部１０、情報記憶部２０およびプログラム構成要素記憶部３０は、例えばサーバに設けられ、プログラマ１００が自身のクライアント端末からサーバにアクセスするといった構成となっている。
【００１８】
次に、上記のように構成されたプログラム管理システムの動作について説明する。
プログラマ１００は、ログイン手段１１によりシステムにログインする。
図２は、ログイン処理を示すフローチャートである。
先ず、プログラマ１００がシステムにログインする場合は、ユーザＩＤ、パスワードを入力する（ステップＳＴ１０１）。各プログラマ１００のユーザＩＤやパスワード等の情報は、ユーザ情報２１に記憶されており、ログイン手段１１は、入力されたプログラマ１００のユーザＩＤやパスワードが、このユーザ情報２１中の情報と一致するかを判定し（ステップＳＴ１０２）、一致した場合にログインを許可し、指定されたユーザがログイン状態であることをユーザ情報２１に記録する（ステップＳＴ１０３）。一方、ステップＳＴ１０２の判定処理において、ユーザ情報が一致しなかった場合は、そのまま終了する。
【００１９】
次に、プログラマ１００が作成したプログラムを本システムに登録する場合の動作について説明する。
図３は、プログラム更新処理を示すフローチャートである。
プログラマ１００が、任意のプログラムを登録しようとした場合、プログラム更新手段１２は、先ず、ロック手段１５を介してロック情報２３を参照し、そのプログラムがロックされているか否かを判定する（ステップＳＴ２０１）。このステップＳＴ２０１において、ロックされていなかった場合はプログラム解析手段１３によって構成要素に分類し、これら構成要素をプログラム解析手段１３はプログラム構成要素記憶部３０に記憶する（ステップＳＴ２０２）。尚、プログラムを新規に登録する場合は、ロック情報２３に該当する要素が登録されていないため、ロックなしの処理を行う。
【００２０】
一方、ステップＳＴ２０１において、そのプログラムがロックされていた場合、プログラム更新手段１２は、ロック手段１５を介してロック情報２３を取得し（ステップＳＴ２０３）、プログラム更新要求を行っているユーザは、ロックしているユーザであるかを判定する（ステップＳＴ２０４）。ここで、ユーザの情報が一致すれば、プログラムの更新処理を行い（ステップＳＴ２０５）、同プログラムのロックの解除要求をロック手段１５に送出する（ステップＳＴ２０６）。また、ステップＳＴ２０４において、更新要求したユーザがロックしたユーザと異なっている場合は更新処理を行わずに終了する。
【００２１】
次に、プログラムの解析処理を説明する。
図４は、解析するプログラムの一例を示す説明図である。この例では、解析するプログラムとして、プログラムＰＲＧ＿１を示している。
ここではプログラムＰＲＧ＿１は二つの入力変数ＶＡＲ＿１とＶＡＲ＿２、二つのアルゴリズムＡ＿１とＡ＿２を持つことを示している。
【００２２】
図５は、プログラム解析手段１３により、プログラムＰＲＧ＿１を解析した結果を示す説明図である。解析の結果、生成される構成要素には、Ｒ（ルート要素）、Ｅ（通常の要素）、Ａ（属性要素）の３種類がある。Ｒ要素は解析された全ての要素の親にあたる要素であり、一つのプログラムに対して一つだけ生成される。Ｒ要素は子供の要素としてＡあるいはＥの要素を持つことができ、Ｅ要素はＡあるいはＥ要素を持つことができる、Ａ要素は子供の要素は持つことができない。各要素には値を持つことができ、図中では各要素の下側のフィールドが値を示している。
【００２３】
図５に示すように、要素Ｐｒｏｇｒａｍは属性としてＮａｍｅを持つ。Ｎａｍｅはプログラム名を示し、ここではＰＲＧ＿１が属性の値になる。要素ＩｎｐｕｔＶａｒｓは入力変数を示す要素の集まりを示す要素であり、その要素の中にＶＡＲ＿１，ＶＡＲ＿２の変数要素が含まれる。変数要素には変数名（Ｎａｍｅ）、変数のデータ型（Ｔｙｐｅ）の二つの属性を持ち、変数ＶＡＲ＿１ではそれぞれＶＡＲ＿１，ＳＩＮＴ（８バイト整数型）であることを示している。一方、要素Ａｌｇｏｒｉｔｈｍは一つのアルゴリズムを示しており、アルゴリズム名を示すＮａｍｅ属性を持ち、この要素の値がアルゴリズムのコードになる。プログラム構成要素記憶部３０は、分類された要素の階層構造を保持しながら構成要素を記憶する。各構成要素は要素型名と属性値で識別される。
【００２４】
プログラム解析手段１３は、要素定義情報２２を参照して解析を行う。
図６は、要素定義情報２２を示す説明図である。
要素定義情報２２にはどの要素がプログラムソース中でどのような開始文字列と終了文字列で切り出すことができるか、また各要素は切り出されたソースの中でどのような区切り文字により属性が記述されているかが示されている。
【００２５】
図７は、構成要素解析処理を示すフローチャートであり、（ａ）は、全体の動作、（ｂ）は、要素の作成処理を示している。
図７（ａ）に示すように、先ず、プログラム解析手段１３は、プログラムソースを１行読み込む（ステップＳＴ３０１）。次に、その行がプログラムソースの最後であるかを判定し（ステップＳＴ３０２）、そうであれば終了する。そうでなければ、図６に示した要素定義情報２２中に示す要素の開始文字列があるかどうか判定する（ステップＳＴ３０３）。開始文字列が見つかればその開始文字列で定義される要素を作成する（ステップＳＴ３０４）。例えばＰＲＯＧＲＡＭが見つかれば要素Ｐｒｏｇｒａｍを作成する。
【００２６】
次に、プログラム解析手段１３は、図７（ｂ）に示すように、ステップＳＴ３０３で見つかった開始文字列に対応する終了文字列が見つかるまでソースファイル読み込み、その内容をバッファに格納する（ステップＳＴ３０５）。次に、ステップＳＴ３０５で読み込んだ内容に対する要素を生成し、この生成した要素に定義されている属性の区切り文字が見つかるかどうかスキャンを行う（ステップＳＴ３０６）。このステップＳＴ３０６において、区切り文字が見つかれば、Ａ要素を作成する（ステップＳＴ３０７）。次に、現在のバッファに更に子要素となる要素が含まれているかどうかを検査し（ステップＳＴ３０８）、あった場合は、ステップＳＴ３０９において再帰的に要素を生成する。以上の動作をステップＳＴ３１０において、バッファの最後になるまで繰り返す。例えば、要素ＶＡＲが作成されているとき、読み込まれた内容が「ＶＡＲ＿２：ＳＩＮＴ＝１０」であれば、定義情報に従って、属性要素Ｎａｍｅ，Ｔｙｐｅ，ＩｎｉｔｉａｌＶａｌｕｅを作成し、その要素の値にＶＡＲ＿２  ＳＩＮＴ  １０を設定する。
【００２７】
プログラム読み出し手段１４は、要素定義情報２２を使ってプログラム構成要素を読み出すことができる。プログラム読み出し手段１４は、指定された識別子を持つプログラム要素を検索し、この要素を親として子供となる全ての要素をプログラム構成要素記憶部３０から読み出す。読み出した要素は要素定義情報２２を使って登録された形式、つまりプログラム言語に依存した形に変換されて読み出される。プログラムが読み出されるとプログラム読み出し手段１４は、ロック手段１５に対して、この要素のロック要求を通知する。
【００２８】
図８は、プログラム読み出し手段１４における処理の流れを示すフローチャートである。
プログラム読み出し手段１４は、ロック情報２３を参照し、読み出すプログラム構成要素がロック状態にあるかを判断する（ステップＳＴ４０１）、ここでロックされていれば読み出し処理を行わず終了する。一方、ステップＳＴ４０１において、ロック状態ではなかった場合は、このプログラム要素のロック要求をロック手段１５に対して通知する（ステップＳＴ４０２）。次に、プログラム構成要素記憶部３０から読み出すプログラム要素を親とする子供の要素全てを読み出す（ステップＳＴ４０３、ＳＴ４０４）。次に、要素定義情報２２を参照し（ステップＳＴ４０５）、読み出した構成要素に基づいて元のプログラムソースを生成する（ステップＳＴ４０６）。
【００２９】
図９は、ロック手段１５が参照・更新するロック情報２３の一例を示す説明図である。
ロック情報２３は、その時点でロック状態にある構成要素の情報であり、読み出しを行った構成要素の型名、要素が持つ属性Ｎａｍｅの値を有している。ここでは、ＰＲＧ＿１がユーザＩＤ：Ｎａｋａｇａｗａに、また、ＰＲＧ＿２がユーザＩＤ：Ｓｕｚｕｋｉにより読み出されて編集中であることを示している。ロック手段１５はロック情報２３を参照し、プログラムを構成要素単位でロックあるいはロック解除することができる。
【００３０】
尚、ロック情報２３として、図９に示した構成以外にも、ロック状態にある構成要素に対してロックの開始時刻と終了時刻を記録する等、ロック状態の履歴を備えるよう構成してもよい。また、全ての構成要素に対してロックの有無を示すようにしたり、全ての要素に対してロックの履歴を取るようにしてもよい。
【００３１】
図１０は、ロック手段１５の動作を示すフローチャートである。
先ず、ロック手段１５は、何らかの処理要求があった場合、その処理がロック要求であるかロック解除であるかを判定する（ステップＳＴ５０１）。処理がロック要求であった場合、ロック情報２３を参照し、指定された構成要素がロックされているか判定する（ステップＳＴ５０２）。このステップＳＴ５０２において、ロックされていない場合は、要求された構成要素をロックし（ステップＳＴ５０３）、ロック情報２３に登録して（ステップＳＴ５０４）、終了する。
【００３２】
一方、ステップＳＴ５０２において、ロックされている場合は、処理要求されたプログラム更新手段１２またはプログラム読み出し手段１４に対して、その構成要素がロック状態であることを示すロック情報を出力して（ステップＳＴ５０５）、終了する。
【００３３】
また、ステップＳＴ５０１において、処理要求がロック解除、即ち、プログラム更新手段１２において、対象となる構成要素が更新され、その構成要素へのロック解除要求がなされた場合、ロック要求を行ったユーザと、その構成要素をロックしたユーザが同一であるかを判定する（ステップＳＴ５０６）。このステップＳＴ５０６において、もしユーザが異なっていれば、ユーザが異なっている旨の情報を示すロック情報を送出して（ステップＳＴ５０７）、終了する。一方、ステップＳＴ５０６において、ユーザが同一であれば、ロック解除を行い（ステップＳＴ５０８）、ロック情報２３の登録を解除し（ステップＳＴ５０４）、終了する。即ち、この場合は、ステップＳＴ５０４において、該当する構成要素のロック情報を消去する。
【００３４】
このようにプログラムを構成する要素に分類し、その構成要素に対してロックを行うことができるので同一のプログラムを複数のプログラマが同時に編集を行うことが可能になり生産性が向上する。
【００３５】
以上のように、実施の形態１によれば、プログラムを機能別に構成要素に分類し、各構成要素毎にロックを制御するようにしたので、複数のプログラムがソフトウェア部品を利用する場合でも、その作業効率を向上させることができる。
【００３６】
実施の形態２．
実施の形態２は、編集プログラムをロックする場合に、編集するプログラム内で参照されている他のプログラムをロックするようにしたものである。
【００３７】
実施の形態２における図面上の構成は、図１に示した実施の形態１と同様であるため、図１を援用して説明する。
実施の形態２では、プログラムの構成要素として、外部（自プログラム以外のプログラム）から参照されるものと、外部から参照されないものとに分類し、編集手段（プログラム更新手段１２およびプログラム読み出し手段１４）は、この分類に基づいて、外部から参照されない構成要素については編集操作を許可するよう構成されている。また、外部からの参照の有無を示す分類情報は、例えば要素定義情報２２に設けられている。他の各構成は実施の形態１と同様であるため、ここでの説明は省略する。
【００３８】
次に、実施の形態２の動作について説明する。
図１１は、実施の形態２におけるソフトウェア部品を含むプログラムを示す説明図である。図中、上位プログラムが左側のＰＲＧ＿２であり、そこで宣言されている局所変数ＡＩ−１０１，ＡＯ−１０２は図中右側で定義されるファンクションブロック型ＡＩ、ＡＯのソフトウェア部品である。ソフトウェア部品はプログラム内で使われるサブプログラムの役割を示し、通常のプログラムと同様変数とアルゴリズムを持つことができるものである。
【００３９】
実施の形態２では、あるプログラムを構成する構成要素について、その構成要素が外部から参照されるものとされないものとに予め分類を行っておく。例えば図１１のようにＡＩ，ＡＯの型宣言のうち外部が参照されるものは入力、出力変数の宣言の内容であり、これら以外は外部から参照されることはない。図示例ではＡＩ，ＡＯのアルゴリズムＡＩ＿１，ＡＯ＿１は外部から参照されない構成要素にあたる。このような情報を、例えば要素定義情報２２に記録しておく。
【００４０】
実施の形態２では、例えばプログラムが読み出される場合、プログラム読み出し手段１４は、読み出したプログラムと関連するプログラムを検出し、そのプログラムの構成要素の中で外部から参照される部分だけをロックするようロック手段１５に対して通知する。また、プログラムの更新が行われる場合もプログラム更新手段１２は同様のロック指示をロック手段１５に行う。これにより、外部から参照されない構成要素に関してはプログラムの更新や読み出しといった操作を他のプログラマ１００も行うことができる。
【００４１】
図１２は、実施の形態２におけるプログラムＰＲＧ＿２を解析した結果を示す説明図である。図示のプログラムＰＲＧ＿２をロックした場合、従来は同図の全ての構成要素が全てロックされていたのに対し、アルゴリズムの要素であるＡＩ＿１，ＡＯ＿１はロックされないので他のプログラマが編集を行うことが可能になる。
【００４２】
以上のように、実施の形態２によれば、外部から参照されない構成要素に関しては、ロックしないようにしたので、ロックの範囲を小さくすることができ、実施の形態１の効果に加えて更に他のプログラマの編集の自由度を大きくすることができ、作業効率の向上を図ることができる。
【００４３】
実施の形態３．
実施の形態３は、ロック状態に設定されている構成要素に対してロック解除があった場合に通知先となるユーザを登録し、ロック解除された場合にその登録されたユーザに対して通知するようにしたものである。
【００４４】
実施の形態３においても、図面上の構成は図１と同様であるため、これを援用して説明する。実施の形態３のロック手段１５は、通知先情報を有しており、この通知先情報に基づいて、通知先ユーザへの通知を行うよう構成されている。他の各構成は実施の形態１と同様であるため、ここでの説明は省略する。
【００４５】
図１３は、通知先情報を示す説明図である。
ここではプログラムＰＲＧ＿１に対してユーザＩＤ：Ｓｕｚｕｋｉが、また、プログラムＰＲＧ＿２に対してユーザＩＤ：ｎａｋａｇａｗａが通知先情報として設定されている例を示している。このような通知先情報の登録は、ユーザＩＤ等のユーザ識別情報とプログラムの構成要素の識別子等が指定されることによりロック手段１５が行う。そして、ロック手段１５は対象となる構成要素に対して、ロック解除が発生した場合、通知先情報に登録されたユーザＩＤからユーザ情報にあるメールアドレスを取得し、そのアドレスに通知を行う。
【００４６】
図１４は、通知された情報を受け取り、ダイアログを使って表示した例を示す説明図である。ここではプログラムＰＲＧ＿１に対して操作したユーザＩＤがｎａｋａｇａｗａであり、操作内容は、ＶＡＲ＿１の局所変数が追加され、入力変数ＶＡＲ＿２が削除されたことを示している。尚、通知される情報は、少なくともその構成要素が編集不可から編集可となったこと、即ち、ユーザがロック解除を認識できるものであればどのようなものであってもよい。
【００４７】
図１５は、実施の形態３におけるロック手段１５の動作を示すフローチャートである。
先ず、ロック手段１５は、何らかの処理要求があった場合、その処理がロック要求であるかロック解除であるかを判定する（ステップＳＴ６０１）。処理がロック要求であった場合、ロック情報２３を参照し、指定された構成要素がロックされているか判定する（ステップＳＴ６０２）。このステップＳＴ６０２において、ロックされていない場合は、要求された構成要素をロックし（ステップＳＴ６０３）、ロック情報２３に登録して（ステップＳＴ６０４）、終了する。即ち、これは、実施の形態１における図１０に示した動作と同様である。
【００４８】
一方、ステップＳＴ６０２において、ロックされている場合は、ロック要求されたユーザを通知先情報として記録する（ステップＳＴ６０５）。そして、処理要求されたプログラム更新手段１２またはプログラム読み出し手段１４に対して、その構成要素がロック状態であることを示すロック情報を出力して（ステップＳＴ６０６）、終了する。
【００４９】
また、ステップＳＴ６０１において、処理要求がロック解除、即ち、プログラム更新手段１２において、対象となる構成要素が更新され、その構成要素へのロック解除要求がなされた場合、ロック要求を行ったユーザと、その構成要素をロックしたユーザが同一であるかを判定する（ステップＳＴ６０７）。このステップＳＴ６０７において、もしユーザが異なっていれば、ユーザが異なっている旨の情報を示すロック情報を送出して（ステップＳＴ６０８）、終了する。一方、ステップＳＴ６０７において、ユーザが同一であれば、ロック解除を行い（ステップＳＴ６０９）、通知先情報にその構成要素に対する通知先が設定されているかを調べ（ステップＳＴ６１０）、設定されていた場合は、該当するユーザ宛に通知を行うと共に、通知先情報の該当するユーザの情報を削除する（ステップＳＴ６１１）。その後は、ロック情報２３の登録を解除し（ステップＳＴ６０４）、終了する。また、ステップＳＴ６１０において、通知先が設定されていなかった場合は、そのままステップＳＴ６０４に移行する。
【００５０】
以上のように、実施の形態３によれば、ロックを解除した場合に通知するユーザを登録し、ロック解除がなされた場合は、登録されているユーザにこれを通知するようにしたので、あるプログラマの編集作業をリアルタイムに他のプログラマが知ることができ、従って、不必要な待ち時間が発生せず、効率良く多人数で作業が行える。また、通知先情報をプログラムの参照関係により自動的に設定することもできる。例えばプログラムＡとプログラムＡから参照されるプログラムＢがあり、それぞれが違うユーザでロックされている場合、プログラムＢの通知先を参照元であるプログラムＡを編集しているユーザに設定しておけば、参照先のプログラムＢのロックが完了したら参照元のプログラムＡを編集しているユーザに通知することができ、更新されたプログラムの動作確認を即座に検証することができる。
【００５１】
実施の形態４．
実施の形態４は、構成要素毎に編集前と編集後の比較を行って、構成要素毎の変更点を編集データとして出力するようにしたものである。
【００５２】
実施の形態４においても、図面上の構成は図１と同様であるため、これを援用して説明する。実施の形態４のプログラム更新手段１２は、プログラムの構成要素毎に編集前と編集後の比較を行って構成要素毎の変更点を検出し、これを編集データとして出力するよう構成されている。他の各構成は図１と同様であるため、ここでの説明は省略する。
【００５３】
次に、実施の形態４の動作について説明する。
図１６は、プログラム更新手段１２が出力する編集データの一例を示す説明図である。
図示のように、編集データは、三つのコマンドを使って構成される。
図中のＡＤＤは構成要素が追加されたことを示し、ＤＥＬＥＴＥは要素が削除されたことを示す。またＭＯＤＩＦＹは要素の持つＡ要素の内容や要素の値が変更されたことを示す。各コマンドには属性としてＴａｒｇｅｔがあり、この値はコマンドの対象となった要素を識別するＩＤが設定される。この例ではＡＤＤコマンドのＴａｒｇｅｔに指定される識別子はＰｒｏｇｒａｍの要素名を持ち、その属性Ｎａｍｅの値がＰＲＧ＿１である要素の子供の要素ＩｎｐｕｔＶａｒｓが対象となる要素であることを示している。ここではその要素に対して新たに要素名Ｖａｒ、その属性Ｎａｍｅの値がＶＡＲ＿１、属性Ｔｙｐｅの値がＤＩＮＴである要素が追加されたことを示している。
【００５４】
同様にコマンドＭＯＤＩＦＹにおけるＴａｒｇｅｔはＰｒｏｇｒａｍの要素名を持ち、その属性Ｎａｍｅの値がＰＲＧ＿１である要素の子要素ＩｎｐｕｔＶａｒｓの更に子要素Ｖａｒの中で属性ＮａｍｅがＶＡＲ＿３である要素が対象となる要素であることを示している。この例ではその要素に対して、属性Ｎａｍｅの値がＶＡＲ＿３からＶＡＲ＿４に変更されたことを示している。
【００５５】
図１７は、編集データ生成動作を示すフローチャートである。
プログラム更新手段１２は、プログラマ１００からプログラムの更新が要求されると、プログラム構成要素記憶部３０にあるプログラムの構成要素を比較元とし、更新されるプログラムを、プログラム解析手段１３により構成要素に分類したデータを比較先として要素単位で比較する。即ち、プログラム更新手段１２は次のような動作を行う。
【００５６】
先ず、比較元の最初の要素を読み込み（ステップＳＴ７０１）、比較先に同じ要素が含まれているかを検査する（ステップＳＴ７０２）。同じ要素であるかの判断は要素名と要素の属性Ｎａｍｅが持つ値が同じであるかを持って判断する。もし比較先に要素がなかった場合は、コマンドＤＥＬＥＴＥがログに書き込まれる（ステップＳＴ７０３）。ここでログとは編集データを格納するバッファのことである。ＤＥＬＥＴＥコマンドの属性Ｔａｒｇｅｔには現在比較を行っている親の要素を識別する値が設定される。次に、現在比較している要素を示すデータがログに追加される（ステップＳＴ７０４）。
【００５７】
上記のステップＳＴ７０２において比較先に同じ要素があった場合、要素の持つ属性が比較される（ステップＳＴ７０５）。ここで属性が同じかどうかは属性名と値が同じであるかを持って判断される。例えば、比較元には属性名Ｎａｍｅ（値：ＶＡＲ＿１）があり、比較先に属性名Ｎａｍｅ（値ＶＡＲ＿２）があるとすれば、この場合は一致していないと判断される。その結果、コマンドＭＯＤＩＦＹがログに出力され（ステップＳＴ７０６）、また、変更結果がログに出力される（ステップＳＴ７０７）。
【００５８】
先の例では、変更結果は、Ａｔｔｒｉｂｕｔｅ  ＩＤ＝”Ｎａｍｅ”ｏｌｄＶａｌｕｅ＝”ＶＡＲ＿１”ｎｅｗＶａｌｕｅ＝”ＶＡＲ＿２”になる。ここでＩＤは変更のあった属性の属性名、ｏｌｄＶａｌｕｅは変更前の属性の値、ｎｅｗＶａｌｕｅは変更後の属性の値を示す。要素と属性の比較が終わると、要素の持つ子供の要素についてステップＳＴ７０１から行われた比較が繰り返される（ステップＳＴ７０８）。次に、比較元に処理されない要素があるかを判定し（ステップＳＴ７０９）、あった場合は、コマンドＡＤＤがログに出力され（ステップＳＴ７１０）、処理されなかった要素がログに出力される。このときＡＤＤの属性Ｔａｒｇｅｔは処理されなかった要素を持つ比較先の親要素になる（ステップＳＴ７１１）。一方、ステップＳＴ７０９において、処理されない要素がなかった場合は、そのまま終了する。
【００５９】
図１８は、実施の形態４の効果を表すための説明図である。
ここでは編集前と編集後の二つのプログラムをテキストベースで比較した例である。ここでプログラムはＲＥＡＬ（実数）型の入力変数ＶＡＲ＿１，ＶＡＲ＿２を持つことが宣言されている。これを、ＤＩＮＴ（倍精度整数）型の入力変数ＶＡＲ＿３の追加、ＶＡＲ＿１，ＶＡＲ＿２宣言の書式変更の編集を行う。編集前後のファイルの差分をテキストとして取り出すと図中右ファイルとなり、ＶＡＲ＿１，ＶＡＲ＿２：ＲＥＡＬが削除と３行の追加となる。しかし、この編集内容は実際には変数ＶＡＲ＿３の追加だけであるが、この”意味的な差”は従来ではプログラマが求める必要があった。これに対し、本実施の形態では、このような変更内容を図１６に示したような編集データとして出力するため、プログラマがわざわざ比較を行う必要がない。
【００６０】
以上のように、実施の形態４によれば、プログラムを構成要素に分類しておき、構成要素毎に比較を行うことでプログラム間の“意味的な差”を求めることができる。そのためマージの際に必要な比較作業をプログラマが行う必要がないため、プログラムの生産性向上を行うことができる。
【００６１】
以上に述べたように、本発明では、プログラムを構成要素に分類し、各構成要素毎に編集の可否を制御を行うようにしたので、多人数で一つのプログラムを編集する場合に、その作業効率を向上させることができる。
【００６２】
また、編集を行っているユーザの情報を設け、プログラムの更新を行う場合は、更新要求したユーザが、編集を行っているユーザであるかを判定し、ユーザが一致した場合に編集を許可するようにしたので、編集を行っていないプログラムに対しては誰でも自由に編集操作を行えると共に、編集を行っているユーザは、プログラムの更新を自由に行うことができる効果がある。
【００６３】
また、構成要素を読み出す場合は、その構成要素が編集不可とされているかを判定し、編集不可ではない場合に、その読み出しを許可し、かつ、編集不可とするための指示を行うようにしたので、編集を行っていないプログラムに対しては誰でも自由に読み出しを行えると共に、プログラムを読み出した場合は、編集を行っているユーザ以外からはプログラムの読み出しが行えないようにすることができる効果がある。
【００６４】
また、プログラムの構成要素として、外部から参照されるものと、外部から参照されないものとを分類して、その分類に従って編集の可否の制御を行うようにしたので、編集不可とする構成要素の範囲を小さくすることができ、従って、同時に多くのプログラマが編集を行うことができ、更に作業効率を向上させることができる。
【００６５】
また、任意の構成要素に対して、編集不可から編集可となった場合に通知するユーザを登録するようにしたので、例えば、プログラムの編集完了した場合に、直ちに、そのプログラムの編集完了を待つプログラマに通知するといったことが可能であり、従って、不必要な編集完了待ち時間をなくすことができ、作業効率の向上に寄与することができる。
【００６６】
また、構成要素毎に編集前と編集後の比較を行い、構成要素毎の変更点を検出し、これを編集データとして出力するようにしたので、プログラムの意味的な差をシステムから出力することができるため、マージの際に必要な比較作業をプログラマ自身が行う必要がなく、プログラムの生産性向上を図ることができる。
【産業上の利用可能性】
【００６７】
以上のように、この発明に係るプログラム管理システムは、多人数で一つのプログラムの編集作業を行う場合の効率向上を実現する。そして、シーケンス・プログラムの作成支援や管理支援を行うシステムに適している。
【図面の簡単な説明】
【００６８】
【図１】この発明の実施の形態１によるプログラム管理システムを示す構成図である。
【図２】ログイン処理を示すフローチャートである。
【図３】プログラム更新処理を示すフローチャートである。
【図４】解析するプログラムの一例を示す説明図である。
【図５】図４のプログラムを解析した結果を示す説明図である。
【図６】要素定義情報を示す説明図である。
【図７】構成要素解析処理を示すフローチャートである。
【図８】プログラム読み出し処理を示すフローチャートである。
【図９】ロック情報の一例を示す説明図である。
【図１０】ロック処理を示すフローチャートである。
【図１１】実施の形態２で解析するプログラムの一例を示す説明図である。
【図１２】図１１のプログラムを解析した結果を示す説明図である。
【図１３】通知先情報を示す説明図である。
【図１４】通知された情報の表示例を示す説明図である。
【図１５】実施の形態３におけるロック処理を示すフローチャートである。
【図１６】実施の形態４における編集データの一例を示す説明図である。
【図１７】編集データ生成のアルゴリズムを示すフローチャートである。
【図１８】実施の形態４の効果を表すための説明図である。
【符号の説明】
【００６９】
１２  プログラム更新手段、１３  プログラム解析手段、１４  プログラム読み出し手段、１５  ロック手段、２２  要素定義情報、２３  ロック情報、３０  プログラム構成要素記憶部。
【図１】
2005084733.tif 000003
【図２】
2005084733.tif 000004
【図３】
2005084733.tif 000005
【図４】
2005084733.tif 000006
【図５】
2005084733.tif 000007
【図６】
2005084733.tif 000008
【図７】
2005084733.tif 000009
【図８】
2005084733.tif 000010
【図９】
2005084733.tif 000011
【図１０】
2005084733.tif 000012
【図１１】
2005084733.tif 000013
【図１２】
2005084733.tif 000014
【図１３】
2005084733.tif 000015
【図１４】
2005084733.tif 000016
【図１５】
2005084733.tif 000017
【図１６】
2005084733.tif 000018
【図１７】
2005084733.tif 000019
【図１８】
2005084733.tif 000020