(57)【要約】【課題】  プログラムのソースコードを見直す際に、開発者が影響範囲を容易に把握できる方法及び装置を提供する。【解決手段】  検証装置が、モジュール抽出部と、ソースコード特性判断部と、出力部とを備え、モジュール抽出部が、ソースコードが含まれるモジュールをプログラムより抽出し、第１のグループとし、ソースコードが含まれるモジュールと同種の処理を実行するためのモジュールを、プログラムより抽出し、第２のグループとし、ソースコード特性判断部が、第１のグループと第２のグループとを比較し、比較結果に基づいて、ソースコードが実行に用いられる処理の特性を判断し、出力部が、判断結果を表示装置に出力する。【選択図】  図１
2011138247.tif 000002
【特許請求の範囲】
【請求項１】
検証装置が、プログラムに含まれるソースコードの前記プログラムへの影響を検証するプログラム影響範囲検証方法であって、
前記検証装置は、モジュール抽出部と、ソースコード特性判断部と、出力部とを備え、
前記モジュール抽出部により、前記ソースコードが含まれるモジュールを前記プログラムより抽出し、第１のグループとする第１のステップと、
前記モジュール抽出部により、前記ソースコードが含まれるモジュールと同種の処理を実行するためのモジュールを、前記プログラムより抽出し、第２のグループとする第２のステップと、
前記ソースコード特性判断部により、前記第１のグループと前記第２のグループとを比較し、前記比較結果に基づいて、前記ソースコードが実行に用いられる処理の特性を判断する第３のステップと、
前記出力部により、前記判断結果を表示装置に出力する第４のステップとを
備えることを特徴とするプログラム影響範囲検証方法。
【請求項２】
請求項１に記載のプログラム影響範囲検証方法であって、
前記比較結果に基づいて、前記ソースコード特性判断部により、前記ソースコードが、前記プログラムに含まれる他のソースコードとの連動検証が必要なコードであるか否かを判断することを特徴とするプログラム影響範囲検証方法。
【請求項３】
請求項１または請求項２に記載のプログラム影響範囲検証方法であって、
前記比較の結果、前記第２のグループを構成するモジュールの全てが、前記第１のグループに含まれ、かつ前記第１のグループと前記第２のグループの構成が異なる場合は、前記ソースコード特性判断部により、前記ソードコードが複数の処理の実行のために共通して用いられるコードであると判断することを特徴とするプログラム影響範囲検証方法。
【請求項４】
請求項１ないし請求項３のいずれか１つに記載のプログラム影響範囲検証方法であって、
前記比較の結果、前記第１のグループを構成するモジュールの一部が、前記第２のグループに含まれ、かつ前記第１のグループと前記第２のグループの構成が異なる場合は、前記ソースコード特性判断部により、前記ソードコードが複数の処理の実行のために共通して用いられるコードであると判断することを特徴とするプログラム影響範囲検証方法。
【請求項５】
請求項１ないし請求項４のいずれか１つに記載のプログラム影響範囲検証方法であって、
前記比較の結果、前記第１のグループを構成するモジュールが、前記第２のグループに全て含まれる場合は、前記ソースコード特性判断部により、前記ソードコードが特定の処理の実行に用いられるコードであると判断することを特徴とするプログラム影響範囲検証方法。
【請求項６】
請求項１ないし請求項５のいずれか１つに記載のプログラム影響範囲検証方法であって、
前記検証装置は、さらに、影響度計算部を備え、
前記影響度計算部により、前記ソースコードの前記プログラムへの影響度を、前記前記ソースコードの前記プログラムにおける階層に基づいて計算する第５のステップを備え、
前記第４のステップにおいて、前記出力部により、さらに前記影響度を前記表示装置に出力することを特徴とするプログラム影響範囲検証方法。
【請求項７】
請求項１ないし請求項６のいずれか１つに記載のプログラム影響範囲検証方法であって、
前記検証装置は、さらに、改造可否判断部を備え、
前記改造可否判断部により、前記ソースコードが、改造禁止であると予め定められたコードであるか否かを判断する第６のステップを備え、
前記第４のステップにおいて、前記出力部により、前記改造可否判断部による判断結果を前記表示装置に出力することを特徴とするプログラム影響範囲検証方法。
【請求項８】
請求項１ないし請求項７のいずれか１つに記載のプログラム影響範囲検証方法であって、
前記プログラムは、鉄道運行管理システムを実行するプログラムであり、
前記ソースコード特性判断部により、前記比較結果に基づいて、前記ソースコードが特定の列車進路制御処理に用いられるコードであるか否かを判断することを特徴とするプログラム影響範囲検証方法。
【請求項９】
プログラムに含まれるソースコードの前記プログラムへの影響を検証するプログラム影響範囲検証装置であって、
モジュール抽出部と、ソースコード特性判断部と、出力部とを備え、
前記モジュール抽出部が、
前記ソースコードが含まれるモジュールを前記プログラムより抽出し、第１のグループとし、
前記ソースコードが含まれるモジュールと同種の処理を実行するためのモジュールを、前記プログラムより抽出し、第２のグループとし、
前記ソースコード特性判断部が、前記第１のグループと前記第２のグループとを比較し、前記比較結果に基づいて前記ソースコードが実行に用いられる処理の特性を判断し、
前記出力部が、前記判断結果を表示装置に出力することを特徴とするプログラム影響範囲検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェア開発方法に係り、特に部分改造時における既存プログラムへの影響範囲を開発者に提示するための方法および装置に関する。
【背景技術】
【０００２】
鉄道運行管理システムなどの大規模システムでは、システムが一度構築されると10〜15年間は部分的な改造や改修によって対応するため、その開発方法は信頼性や開発期間の観点から既存のソースコードに手を加えることのない継ぎ足しの開発が選択される。しかしシステム構築から10年以上経過すると、その間に有識者の異動や退職などによりシステムを俯瞰できる人材が少なくなり、結果として巨大なブラックボックスを作りこむことになる。その結果、例えばブラックボックス内の処理に障害が発生すると障害対策に多大な工数を要すると言った課題が発生する。
【０００３】
特に、鉄道運行管理システムのような社会インフラシステムでは現行信頼性の担保が強く求められるため、ブラックボックス化されたソースコードをホワイトボックス化して、段階的に作り直すことにより、上記の課題を解決することが現在強く求められている。ところが、継ぎ足しの開発を行ってきたシステムでは、ソースコード内の処理関数はプログラム内に冗長に散在しており、見直し対象の処理関数に関連する全ての処理関数を同時に改造する必要がある。一方、見直し工数はソースコードのステップ数が大規模になる程増大するため、人手で行うと見直し箇所を見落とすと言った問題も発生する。
【０００４】
こうした問題を鑑みて、仕様変更の過程で使用されなくなったプログラム部品を検出、除外し必要なプログラム部品のみを用いて見直しを行う方法が報告されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2009-93239号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１ではプログラム部品の中から既に使用されなくなった部品をプログラム部品どうしの依存関係に着目して抽出し除外することでプログラム保守時の効率化を図っている。
【０００７】
ところが特許文献１では、プログラム部品どうしの依存関係が無い場合にのみ不要部品と判断するため、依存関係が存在する全てのプログラム部品はそのままプログラム内に残ることになる。鉄道運行管理システムの様な大規模システムでは、使用されていないプログラム部品も多数存在するがその殆どは継ぎ足し開発時のコピー元となった部品である。つまり継ぎ足し開発によって発生した不要なプログラム部品とはシステム開発当初から肥大化した部分が対象となるため、そもそもプログラム規模の大きいシステムでは不要プログラム部品を取り除いた所で、人手による見直し効率が向上するとは言い難い。
【０００８】
そこで本発明の課題は、依存関係をもつプログラム部品、具体的には処理関数に対して修正・削除などの見直しを行った際の既存プログラムへの影響を開発者が容易に判断するための方法及び装置を提供することである。
【課題を解決するための手段】
【０００９】
本発明は、上記課題を解決するために、検証装置が、モジュール抽出部と、ソースコード特性判断部と、出力部とを備え、モジュール抽出部により、ソースコードが含まれるモジュールをプログラムより抽出し、第１のグループとし、モジュール抽出部により、ソースコードが含まれるモジュールと同種の処理を実行するためのモジュールを、プログラムより抽出し、第２のグループとし、ソースコード特性判断部により、第１のグループと第２のグループとを比較し、比較結果に基づいて、ソースコードが実行に用いられる処理の特性を判断し、出力部により、判断結果を表示装置に出力することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、プログラム開発における利便性を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施形態における影響範囲検証装置の画面構成例である。
【図２】本実施形態における影響範囲検証装置のソフトウェア構成例である。
【図３】本実施形態における影響範囲検証装置のハードウェア構成例である。
【図４】本実施形態における影響範囲検証装置の全体処理フローである。
【図５】本実施形態におけるモジュールテーブルのテーブル構成例である。
【図６】本実施形態におけるモジュールテーブルのテーブル構成例である。
【図７】本実施形態におけるグループテーブルのテーブル構成例である。
【図８】本実施形態における改造禁止関数テーブルのテーブル構成例である。
【発明を実施するための形態】
【００１２】
本発明を実施するための形態について説明する。
【００１３】
図１は開発者が関数改造時の影響範囲を把握するための影響範囲検証装置の画面構成例である。影響範囲検証装置１００の画面は関数選択窓１１０と入力窓１２０と出力窓１３０とを含んで構成される。関数選択窓１１０には対象とするプログラムの関数構造がメイン文から木構造となるように表示されており、開発者は関数選択窓１１０内の木構造から改造対象の関数を選択し入力窓１２０に登録する。
【００１４】
図１では例えばメイン文の直下に関数Func1、Func2がメイン関数から呼び出される順番に配置されており、またFunc1の配下にはFunc1＿1、Func1＿2がFunc1から呼び出される順番で配置されている。
【００１５】
以下、全ての関数が同様に上位の関数から呼び出される順番で配置される。尚、対象プログラムの全てのソースコードは開発者によって予め影響範囲検証装置１００に入力ファイルとして登録されているものとする。これにより開発者が、登録した対象プログラムを選択することで、影響範囲検証装置１００がソースコードをメイン関数から辿って木構造に関数を表示することができる。
【００１６】
入力窓１２０は選択関数表示部１２１と追加ボタン１２２と選択関数リスト１２３と影響確認ボタン１２４とを含んで構成されている。選択関数表示部１２１には関数選択窓１１０で選択された関数が表示され、追加ボタン１２２を押下することで、選択関数リスト１２３に登録される。
【００１７】
図１では例えばFunc1＿1＿1が改造を検討する関数として開発者によって選択されており、追加ボタン１２２を押下することでFunc1＿1＿1が改造対象関数として選択関数リスト１２４に登録される。全ての改造対象関数の登録を終えると、影響範囲検証装置１００は影響確認ボタン１２４の押下によって選択された全ての改造対象関数の特性判断、改造可否及び影響範囲について検証を開始する。
【００１８】
出力窓１３０は影響範囲１３１と影響度１３２及び１３３、メッセージ１３４とを含んで構成される。影響範囲１３１には選択関数リスト１２３に登録されている全ての関数に対して例えば改造対象関数と改造対象関数の改造に影響される関数(以下、被関数と呼ぶ)との呼出し関係が木構造で表示される。
【００１９】
図１では改造対象関数と被関数との呼び出し関係を表示した例を示しているが、例えばデータフロー図を使って表示することで改造に伴うデータへの影響と、該データを介した他関数への影響についても把握することが可能になる。この場合、対象プログラムに対応するデータフロー図を予め影響範囲検証装置１００に登録しておく必要がある。
【００２０】
影響度１３２は改造可能と判断した全ての改造対象関数を改造した時の既存プログラム全体への影響度合を表したものであり、影響度１３３は改造可能と判断した個々の関数を改造した時の既存プログラム全体への影響度合を表したものである。影響度１３２及び１３３により、開発者は開発期間を考慮しながら見直し対象関数を絞りこむ事が可能になる。例えば図１では影響度１３２に３０％、影響度１３３に１０％が表示されている。これは選択関数リスト１２３に登録されている関数の内、改造可能と判断した全ての関数を改造した場合の既存プログラムへの影響度は３０％であり、Func1＿1＿1のみを改造した場合の既存プログラムへの影響度は１０％であることを意味している。
【００２１】
メッセージ１３４には、影響度１３３と対で表示される改造時の注意メッセージである。例えば図１の例では影響度１３３は１０％と小さいが、メッセージ１３４には入換列車との入場デッドロック処理に影響を及ぼす事が示されているため、Func1＿1＿1を改造する場合には信頼性担保のためにも入場デッドロックに係るテストを一通り実施することが望ましく、テスト工数に時間を要すると言った判断を行うことができる。逆に影響度１３３は大きいがプログラム全体に渡って共通的に使用されている例えばデータ入出力操作等の共通関数を改造する場合などは、共通関数のデータ入出力が改造前後で変わらない事が保証されれば、関係する全関数との連動テストは必ずしも必要ない。このように改造対象関数の特性に応じたメッセージを影響度１３３と対で表示することにより、開発者は改造対象関数を開発期間や目的に応じて正確に絞り込むことが可能になる。
【００２２】
図２は影響範囲検証装置１００のソフトウェア構成例で、画面入力部２１０と関連モジュール抽出部２２０と関数特性判断部２３０と改造可否判断部２４０と影響度計算部２５０と画面出力部２６０とを含んで構成される。
【００２３】
画面入力部２１０では影響確認ボタン１２４押下をイベントとして選択関数リスト１２３に登録された全関数と各関数の最上位関数(メイン関数直下の関数)を入力として読み込み、関連モジュール抽出部２２０に通知する。
【００２４】
関連モジュール抽出部２２０はモジュールテーブル２２１を参照する。モジュールテーブル２２１は、鉄道運行管理システムの機能モジュールと各機能モジュールに対応する関数構造と処理グループ識別情報との対応を表したテーブルである。処理グループとは、鉄道運行管理システムの機能モジュールにおいて入場制御や出発制御やデッドロック判断などの共通的な処理を有する機能モジュールどうしをグループ化したものである。
【００２５】
モジュールテーブル２２１は対象プログラム毎に作成される。影響範囲検証装置１００に対象プログラムを登録する際に、開発者が機能モジュールと関数構造との対応関係及び処理グループの識別情報も合わせて登録すればよい。
【００２６】
関連モジュール抽出部２２０は、画面入力部２１０から通知を受け付けると、画面入力部２１０が読み込んだ選択関数リスト１２３に登録されている関数と同一の関数をモジュールテーブル２２１に登録されている関数構造から検索し、一致した場所で対応付けられる機能モジュールを全て抽出する。また画面入力部２１０が読み込んだ最上位関数をモジュールテーブル２２１から検索し、一致した場所で対応付けられる処理グループの識別情報を１つ抽出し、関数特性判断部２３０に通知する。
【００２７】
関数特性判断部２３０はグループテーブル２３１を参照する。グループテーブル２３１には複数の処理グループが登録されており、また各処理グループには鉄道運行管理システムにおいて互いに共通の処理を有する機能モジュールが登録されている。例えば、本線通過列車の単線区間における駅入場制御処理と本線停車列車の単線区間における駅入場制御処理とでは列車入場時に入場信号機を制御するという点で同様の入場制御処理を有している。こうした場合にこれら二つの機能モジュールは同じ処理グループに属することになる。
【００２８】
関数特性判断部２３０は関連モジュール抽出部２２０から通知を受け付けると、関連モジュール抽出部２２０が抽出した処理グループの識別情報に基づいてグループテーブル２３１に登録されている処理グループ内の機能モジュール群を抽出し、関連モジュール抽出部２２０が抽出した機能モジュール群との集合論理から関連モジュール抽出部２２０が読み込んだ関数の特性を判断する。
【００２９】
該関数を処理依存の関数と判断した場合、関数特性判断部２３０は判断結果を改造可否判断部２４０に通知する。改造可否判断部２４０は、改造禁止関数テーブル２３２を参照する。改造禁止関数テーブル２３２には開発者が処理の複雑性や改造リスクなどの事情で改造禁止としたい関数群が登録されている。グループテーブル２３１及び改造禁止関数テーブル２３２は対象プログラム毎に存在し、モジュールテーブル２２１の登録時に開発者によって一緒に登録されることとしてよい。
【００３０】
改造可否判断部２４０は、該関数から関連モジュール抽出部２２０が読み込んだ最上位関数に向かって上位に存在する関数が、改造禁止関数テーブル２３２に登録されているか否かを判断する。登録されている場合には該関数を改造不可と判断し、登録されていない場合には該関数を改造可と判断して、影響度計算部２５０に通知する。
【００３１】
関数特性判断部２３０は該関数を処理非依存の関数と判断した場合、改造禁止関数テーブル２３２を用いた判断は行わずに影響度計算部２５０に通知する。なお、改造可否判断部２４０による処理は、関数特性判断部２３０の処理より前に、行うこととしても良い。この場合は、まず改造可否判断部２４０が、改造禁止関数テーブル２３２を用いて該関数の改造の可否を判断し、改造可と判断した場合に、判断結果を関数特性判断部２３０に通知して、関数特性判断部２３０がグループテーブル２３１を用いて該関数の特性を判断する。
【００３２】
影響度計算部２５０は、関数特性判断部２３０が処理非依存と判断した関数および改造可否判断部２４０が改造可と判断した関数に対して影響度を計算する。この時、該関数だけでなく該関数から最上位関数に向かって上位に存在する全ての関数も改造されるものとして影響度を計算する。画面入力部２１０が読み込んだ全ての関数に対して影響度計算が終了すると、最後に改造可と判断された全ての関数を改造した場合の影響度を計算し、画面出力部２６０に通知する。画面出力部２６０では、改造可否判断部２４０が判断した結果と影響度計算部２５０が計算した影響度を出力窓１３０に表示する。画面入力部２１０および画面出力部２６０は、影響範囲検証装置１００とは異なる他の表示装置に接続して入出力を行う構成としてもよい。
【００３３】
図３は影響範囲検証装置１００のハードウェア構成例である。影響範囲検証装置１００はプログラム実行等の演算を行うプロセッサ３１０、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などの基本プログラムや基本データ、画面入力部２１０、関連モジュール抽出部２２０、関数特性判断部２３０、改造可否判断部２４０、影響度計算部２５０、および画面出力部２６０を実現するプログラムを格納するＲＯＭ３２０、プログラム実行時の処理領域や見直し対象関数の関連特性判断結果、改造可否判断結果などのデータの一時格納領域として使用するＲＡＭ３３０、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの大容量記憶装置３４１と接続するための大容量記憶装置インタフェース３４０、キーボードやマウス、ディスプレイなどの外部デバイス３６１と接続するための外部デバイスインタフェース３６０、Ｅｔｈｅｒｎｅｔ（登録商標）などの通信装置３５１と接続するための通信インタフェース３５０と無線ＬＡＮなどの無線通信装置３７１と接続するための無線通信装置インタフェース３７０とがバス３００を介して接続されている。大容量記憶装置３４１や外部デバイス３６１を含めた構成を影響範囲検証装置１００であるとしてもよい。
【００３４】
大容量記憶装置３４１にはモジュールテーブル２２１、グループテーブル２３１、改造禁止関数テーブル２３２などの各種テーブルや対象プログラムのソースコードが格納されており、ＲＯＭ３２０に格納された各種プログラムによって読み出され利用される。あるいは、画面入力部２１０、関連モジュール抽出部２２０、関数特性判断部２３０、改造可否判断部２４０、影響度計算部２５０、および画面出力部２６０を構成するプログラムの少なくとも一部についても、大容量記憶装置３４１に格納されることとしてもよい。各種処理実行の際に、プロセッサ３１０が、ＲＡＭ３３０に読み出してプログラムを実行する。
【００３５】
外部デバイス３６１は開発者とのインタフェースデバイス及び外部媒体に読み書き可能なドライブ装置などである。例えば開発者は見直し対象関数をキーボードやマウスやタッチパネルなどの入力デバイスを介して選択することができる。また、外部デバイス３６１に着脱可能で可搬性のある記憶媒体とデータの入出力を行う。
【００３６】
通信装置３５１及び無線通信装置３７１は、ネットワークを介してサーバ装置などの他の装置と接続することができる。図３の例では、影響範囲検証装置１００はＰＣ／ＡＴ互換機などの汎用計算機を想定しているが、例えばＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）などの携帯端末や専用装置で影響範囲検証装置１００を実現する場合、セキュリティやＨＤＤ容量などの理由で影響範囲検証装置１００に対象プログラムのソースコードや各種テーブルを格納できない場合がある。このような場合、社内ネットワーク上に設置されたサーバ装置（図示せず）に対象プログラムのソースコードや各種テーブルなどを格納しておくことが考えられる。
【００３７】
通信装置３５１や無線通信装置３７１はこうしたケースを想定して構成されたものであり、影響範囲検証装置１００はこれら通信装置を利用してサーバ装置に格納されたソースコードや各種テーブルにアクセスすることができる。
【００３８】
また、各機能部を実現するプログラムは、予めＲＯＭ３２０または大容量記憶装置３４１に格納されていてもよいし、必要に応じ、利用可能な媒体を介して、他の装置からＲＯＭ３２０または大容量記憶装置３４１に導入されてもよい。媒体とは、例えば、外部デバイス３６１に着脱可能な記憶媒体、または、ネットワークや、ネットワークを伝搬する搬送波やデジタル信号などの通信媒体を指す。
【００３９】
図４は本実施形態において見直し対象関数の特性判断、改造可否、影響範囲及び影響度を判断するための全体処理フローである。以下に示す処理は、影響範囲検証装置１００の備えるプロセッサ３１０が、ＲＡＭ３３０で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００４０】
画面入力部２１０が影響確認ボタン１２４からイベントを受け付けると、選択関数リストに登録された全関数と各関数の最上位関数を読み込み、関連モジュール抽出部２２０に通知する（ステップ４０１）。
関連モジュール抽出部２２０、関数特性判断部２３０、改造可否判断部２４０、影響度計算部２５０はステップ４０１で読み込んだ全ての関数に対して関連モジュール抽出処理、関数特性判断処理、改造可否判断処理、影響度計算処理を実行する（ステップ４０２）。
関連モジュール抽出部２２０は、読み込んだ関数と同一の関数をモジュールテーブル２２１から検索し、対応する機能モジュールを抽出する（ステップ４０３）。ステップ４０３の処理について、以下詳細に述べる。
【００４１】
まずモジュールテーブル２２１を図５及び図６に示す。
図５はモジュールテーブル２２１のうち、鉄道運行管理システムの進路制御機能に係る機能モジュールの分類に関する部分を示しており、大分類５０１と小分類５０２とモジュール＃５０３を含んで構成されている。鉄道運行管理システムにおける進路制御機能とは、対象とする列車や区間、駅の入場及び出発ごとに信号機やてこなどの地上設備を制御することで、列車の進路を決定するための機能であり、大きくは大分類５０１に示してあるように、本線通過列車と本線停車列車と入換列車ならびに単線区間と複線区間ごとの駅の入場と出発に分類される。また入場機能及び出発機能では、それぞれ他列車とのデッドロック判断処理を地上設備制御を実施する前に行う。
【００４２】
例えば、本線単線通過入場機能では、入換列車、到着番線在線列車、出発番線在線列車、対向列車とのデッドロック判断が実施され、本線単線停車入場機能では、入換列車、到着番線在線列車、対向列車とのデッドロック判断が実施され、本線単線停車出発機能では入換列車、通過列車、対向列車とのデッドロック判断が実施され、本線複線通過入場機能では、入換列車、到着番線在線列車、出発番線在線列車とのデッドロック判断が実施され、本線複線停車入場機能では、入換列車、到着番線在線列車とのデッドロック判断が実施され、本線複線停車出発機能では入換列車、通過列車とのデッドロック判断が実施され、入換入場機能では本線列車と到着番線在線列車とのデッドロック判断が実施され、入換出発機能では本線列車と出発番線在線列車とのデッドロック判断が実施される。
【００４３】
各入場機能及び出発機能ではこれらデッドロック判断が実施された後に、列車どうしのデッドロックが発生しないと判断すると、信号機やてこなどの地上設備を直接制御する連動装置に対して制御許可を発行する。
【００４４】
モジュール＃５０３には小分類５０２に対応した識別情報が登録されている。例えば本線単線通過入場機能のデッドロック判断処理にはモジュール＃１−１が、入場制御処理にはモジュール＃１−２が、本線単線停車入場機能のデッドロック判断処理にはモジュール＃２−１が、入場制御処理にはモジュール＃２−２が、本線単線停車出発機能のデッドロック判断処理にはモジュール＃３−１が、出発制御処理にはモジュール＃３−２が、本線複線通過入場機能のデッドロック判断処理にはモジュール＃４−１が、入場制御処理にはモジュール＃４−２が、本線複線停車入場機能のデッドロック判断処理にはモジュール＃５−１が、入場制御処理にはモジュール＃５−２が、本線複線停車出発機能のデッドロック判断処理にはモジュール＃６−１が、出発制御処理にはモジュール＃６−２が、入換入場機能のデッドロック判断処理にはモジュール＃７−１が、入場制御処理にはモジュール＃７−２が、入換出発機能のデッドロック判断処理にはモジュール＃８−１が、出発制御処理にはモジュール＃８−２が各々登録されている。尚、大分類５０１及び小分類５０２で分類された機能モジュールは鉄道運行管理システムに共通する機能モジュールであるため、対象プログラム毎に生成しなくてもよい。
【００４５】
図６は、モジュールテーブル２２１のうち、図５で示した各機能モジュール＃５０３に対応する階層化した関数構造６０１と処理グループ６０２の対応の部分を示している。例えばモジュール＃１−１の機能モジュールに対応する最上位関数にはFunc1が登録されており、Func1から呼び出される関数としてFunc1＿1とFunc1＿2が登録されている。以下同様に、呼び出される全ての関数が階層化されて登録されている。これは本線単線通過入場機能がFunc1とその配下に存在する全ての関数によって実現されることを意味する。処理グループ６０２には例えばグループ識別情報Ｇ＃３が登録されている。グループ識別情報はグループテーブル２３１に登録されているグループを識別するための情報である。
【００４６】
グループテーブル２３１の構成例を図７に示す。グループテーブル２３１はグループ＃７０１とモジュール＃７０２を含んで構成される。グループ＃７０１はグループ識別情報で、モジュール＃７０２に登録される機能モジュールどうしは互いに重複した処理をもつ。例えば、グループＧ＃１にはモジュール＃１−２とモジュール＃２−２とモジュール＃４−２とモジュール＃５−２とモジュール＃７−２が登録されており、これは入場制御を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃１に登録されている全ての機能モジュールには場内信号機制御などの制御処理が共通して含まれている。
【００４７】
グループＧ＃２にはモジュール＃３−２とモジュール＃６−２とモジュール＃８−２が登録されており、これは出発制御を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃２に登録されている全ての機能モジュールには出発信号機制御などの制御処理が含まれている。
【００４８】
グループＧ＃３にはモジュール＃１−１とモジュール＃３−１とモジュール＃７−１とモジュール＃８−１が登録されており、これは単線列車入場及び出発時のデッドロック判断を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃３に登録されている機能モジュールには単線区間での入換列車と本線列車の入場デッドロック処理ならびに出発デッドロック処理が含まれている。
【００４９】
グループＧ＃４にはモジュール＃２−１とモジュール＃７−１が登録されており、これは単線列車入場時のデッドロック判断を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃４に登録されている機能モジュールには単線区間での入換列車と本線列車の入場デッドロック処理が含まれている。
【００５０】
グループＧ＃５にはモジュール＃４−１とモジュール＃６−１とモジュール＃７−１とモジュール＃８−１が登録されており、これは複線列車入場及び出発時のデッドロック判断を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃５に登録されている機能モジュールには複線区間での入換列車と本線列車の入場デッドロック処理ならびに出発デッドロック処理が含まれている。
【００５１】
グループＧ＃６にはモジュール＃５−１とモジュール＃７−１が登録されており、これは複線列車入場時のデッドロック判断を行う機能モジュール群によって構成されたグループであることを意味する。即ち、グループＧ＃６に登録されている機能モジュールには複線区間での入換列車と本線列車の入場デッドロック処理が含まれている。
【００５２】
ステップ４０３の処理の説明に戻って、関連モジュール抽出部２２０は、画面入力部２１０から読み込んだ関数として例えばFunc1＿1＿1を受け付けると、モジュールテーブル２２１の関数構造６０１からFunc1＿1＿1が登録されている機能モジュールを全て抽出する。例えば、図６ではモジュール＃１−１とモジュール＃７−１にFunc1＿1＿1が登録されていることから、モジュール＃１−１とモジュール＃７−１を関数グループ（Ｆ）として抽出する。
【００５３】
また関連モジュール抽出部２２０は画面入力部２１０から読み込んだ最上位関数の１つとして例えばFunc1を受け付けると、モジュールテーブル２２１の関数構造６０１からFunc1が登録されている機能モジュールを検索し（モジュール＃１−１）、モジュール＃１−１が登録されている処理グループの識別情報としてＧ＃３を抽出する。関数グループ（Ｆ）と処理グループ（Ｐ）を抽出後、関数特性判断部２３０に通知する。
【００５４】
関数特性判断部２３０は、関数グループ（Ｆ）と処理グループ（Ｐ）の集合論理を確認し、確認結果に応じて関数特性を判断する（ステップ４０４）。
すなわち、たとえばＦ⊃Ｐなら読み込んだ関数を、特定の進路制御処理の実行のための関数ではなく、データ入出力操作など、複数の処理に共通して用いられる処理非依存の関数であると判断し、それ以外であれば特定の進路制御処理の実行のために用いられる処理依存の関数と判断する。
【００５５】
処理グループには互いに重複した処理をもつ機能モジュール群が登録されていることから、判断結果がＦ⊃Ｐである場合は、読み込んだ関数が処理グループに登録された全ての機能モジュールに使用され、またその他の機能モジュールにも使用されていることを意味する。こうした関数は、処理非依存の関数と判断できる。
【００５６】
また処理依存の関数であっても、（Ｆ∩Ｐ≠Φ）∩（Ｆ∪Ｐ≠Ｆ、Ｐ）となる場合は、処理間で共通的に使われる例えば連動装置への制御許可や指令員への警告表示などの共通関数であると判断する。Φは空集合である。読み込んだ関数が処理グループの一部の機能モジュールで使用され、かつその他の処理グループの機能モジュールにも使用されていることを意味しており、例えば制御許可や警告表示など、各種の制御処理を行った結果を出力する共通の関数について、対象列車や単線／複線区間ごとに関数を分けた結果、（Ｆ∩Ｐ≠Φ）∩（Ｆ∪Ｐ≠Ｆ、Ｐ）なる集合論理の結果を示したものと考えることができる。
【００５７】
また、こうした関数であっても、対象列車や単線／複線区間ごとに関数を区別しない場合はＦ⊃Ｐの結果となり、この場合は処理非依存の関数として判断される。
【００５８】
またＦ⊂ＰまたはＦ＝Ｐとなる場合には入場制御や出発制御などで使用される処理依存の制御関数と判断する。Ｆ⊂Ｐの場合とは、同一の処理グループに登録されている機能モジュールどうしであっても、対象列車毎に重複する処理が異なることを意味しており、例えば入場列車のデッドロック判断として集められた機能モジュールどうしであっても、入換列車と通過列車の入場デッドロック処理と出発番線在線列車と通過列車との出発デッドロック処理とでは対象列車が異なる事からデッドロック処理も異なる。このように対象列車に注目した時に、異なる判断処理がグループ内で混在しているとＦ⊂Ｐなる結果を得る。グループテーブル２３１に登録する機能モジュール群を予め異なる処理が完全に混在しない様に登録しておくことで、上記の結果を回避するようにしてもよい。
【００５９】
またＦ＝Ｐになる場合とは、読み込んだ関数が処理グループ内の機能モジュール群のみに登録されていることを意味するため、デッドロックまたは入場制御または出発制御などの特定の制御処理に依存した制御関数と判断することができる。尚、機能モジュールが複数の処理グループに属している場合、全ての処理グループの論理和から機能モジュールを判断して集合論理を確認すればよい。
【００６０】
以上の集合論理結果から、読み込んだ関数が処理非依存の関数または共通関数である場合には、関数特性判断部２３０は判断結果を影響度計算部２５０に通知する。また処理依存の制御関数である場合には、改造可否判断部２４０に通知し、改造可否判断部２４０が改造禁止関数テーブル２３２を用いた検証を実施する（ステップ４０５）。
【００６１】
改造禁止関数テーブル２３２を図８に示す。改造禁止関数テーブル２３２は改造禁止関数８０１によって構成されている。改造禁止関数８０１とは、開発者が改造を禁止したい関数であって、改造に伴うリスクが非常に高い事が経験上把握できている関数である。改造禁止関数８０１は、開発者によって予め改造禁止関数テーブル２３２に登録されることとしてよい。図８では例えば改造禁止関数としてFunc3、Func5＿4＿3、Func10＿2＿1などが登録されている。
【００６２】
改造可否判断部２４０は、関数グループ及び処理グループの集合論理によって制御関数と判断された関数が改造禁止関数テーブル２３２に登録されているか否かを検証し、登録されている場合には該関数への改造を不可と判断する。登録されていない場合、次に該関数の１つ上位の関数が改造禁止関数テーブル２３２に登録されているか否かを検証する。以下同様に最上位関数まで検証を進め、改造禁止関数テーブル２３２に上位関数が登録されている場合には、該関数の改造を不可と判断する。
【００６３】
例えば画面入力部２１０が読み込んだ関数がFunc1＿1＿1の場合、Func1＿1及び最上位関数であるFunc1共に改造禁止関数テーブル２３２には登録されていないので、Func1＿1＿1の改造は可と判断される。一方、画面入力部２１０が読み込んだ関数がFunc3＿1＿1の場合、最上位関数であるFunc3が改造禁止関数テーブル２３２に登録されていることから、Func3＿1＿1は改造不可と判断される。以上述べた判断により画面入力部２１０が読み込んだ関数に対する改造可否の判断を終えると、改造可否判断部２４０はその結果を影響度計算部２５０に通知する。
【００６４】
影響度計算部２５０は、関数特性判断部２３０が処理非依存または共通関数と判断した場合、あるいは改造可否判断部２４０が関数の改造可と判断した場合、関数改造に伴うプログラムへの影響度Ｒを次式に従って計算する（ステップ４０６）。
【００６５】
【数１】
2011138247.tif 000003
ここでjは対象プログラムの中で改造対象となる全関数の数で、Ｎｉはi番目の関数直下で呼び出される全関数の数で、ｎｉはi番目の関数直下で呼び出される関数の中で改造対象となる関数の数である。αは重み係数で、０＜α≦１の範囲で設定できる。
【００６６】
式（１）は対象プログラムの関数毎に影響度（改造関数の数／呼び出される関数の数）の割合を算出し、改造対象となる全関数分の総積をとったもので、改造対象となる関数が下位階層であるほど影響度が小さくなるように導出されたものである。これは処理非依存関数＞共通関数＞制御関数の順番で階層が深くなりやすいためで、階層が浅い関数程影響度が高くなる傾向をもつ。また関数毎に重みを設定することで、関数毎の影響度に差を持たせることができる。これにより例えば制御関数の中で改造に対する影響が大きいと推測される関数とそうでない関数があった場合には、両関数の影響度に差を持たせる事が可能になる。影響度は開発者が開発工数を見積もるための一つの指標として利用されることから、影響度が明らかに小さいと分かっている関数に対しては予め該関数に対して重みを設定しておくとよい。これにより開発者は混乱することなく影響度に基づいて開発工数を見積もることができる。
【００６７】
例えばFunc1＿1＿1を改造する場合、モジュールテーブル２２１に登録されている関数の中で改造対象関数はFunc1とFunc1＿1とFunc7＿1とFunc7とメイン関数であり、j＝５となる。またα＝１、メイン直下の関数の数Ｎ１＝５、Func1直下の関数の数Ｎ２＝２、Func1＿1直下の関数の数Ｎ３＝１、Func7直下の関数の数Ｎ４＝１、Func7＿1直下の関数の数Ｎ５＝１だったとすると影響度は１０％と計算される。影響度計算部２５０は画面入力部２１０が読み込んだ各関数に対して影響度を計算すると、次に画面入力部２１０が読み込んだ全関数の内、改造可と判断された関数全てを改造した場合の全体の影響度について式（１）を用いて計算し（ステップ４０７）、計算結果と、関数特性判断部２３０および改造可否判断部２４０の判断結果とを画面出力部２６０に通知する。
【００６８】
画面出力部２６０は影響度計算部２５０からの通知を受け付けると、関数特性判断部２３０および改造可否判断部２４０の判断結果に応じてメッセージを出力する。また影響度と影響範囲を出力窓に表示する（ステップ４０８）。
【００６９】
例えば、処理非依存の関数であれば「進路制御処理への直接的な影響はありませんが、改造する関数の入出力テストは網羅的に実施してください」などのメッセージを表示する。また例えば共通関数であれば「進路制御処理への影響はありますが、改造する関数の入出力テストを網羅的に実施しておけば問題はありません」などのメッセージを表示する。また例えば処理依存の制御関数であれば「入場制御処理の改造です。入場制御の組み合わせテストは網羅的に実施してください」などのメッセージを表示する。尚、制御関数の場合は、メッセージ文中に影響範囲の処理名を明示することが望ましい。処理名の特定には関数特性判断部２３０が集合論理で使用した処理グループの識別情報を用いればよい。
【００７０】
以上のように本実施形態によれば、関数改造に伴う影響度ならびに影響範囲を見直し対象関数の特性に応じてメッセージを付して開発者に提示できるため、開発者は提示内容に基づいて見直し対象関数の選択やテスト方案の作成を行うことができる。例えば改造リスクが非常に高い機能モジュールに含まれる処理依存の関数であれば、今回は改造しないで既存ソースコードのままで動作させると言った判断を容易に行うことができる。また例えば改造に伴い影響範囲がプログラム全体に及ぶような場合であっても、改造対象関数が処理非依存の共通関数であれば該関数の入出力を網羅的にテストすることで既存プログラムへの悪影響を防止できると言った判断も容易に行うことができる。
【００７１】
また関数改造に伴う既存プログラムへの影響範囲を関数構造またはデータフロー図で表示することで把握できるため、開発やテストの規模を把握し開発工数を容易に見積もることが可能になる。こうした開発を段階的に行うことにより、現行信頼性を担保しつつブラックボックス化されたソースコードを見通しのよいソースコードへと移行することが可能になる。
【００７２】
なお、本発明は記載した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【００７３】
１００…影響範囲検証装置、２１０…画面入力部、２２０…関連モジュール抽出部、２２１…モジュールテーブル、２３０…関数特性判断部、２３１…グループテーブル、２３２…改造禁止関数テーブル、２４０…改造可否判断部、２５０…影響度計算部、２６０…画面出力部
【図１】
2011138247.tif 000004
【図２】
2011138247.tif 000005
【図３】
2011138247.tif 000006
【図４】
2011138247.tif 000007
【図５】
2011138247.tif 000008
【図６】
2011138247.tif 000009
【図７】
2011138247.tif 000010
【図８】
2011138247.tif 000011