JP2011215760A - 計算機システム、及び、モジュール実行方法 - Google Patents

計算機システム、及び、モジュール実行方法 Download PDF

Info

Publication number
JP2011215760A
JP2011215760A JP2010081827A JP2010081827A JP2011215760A JP 2011215760 A JP2011215760 A JP 2011215760A JP 2010081827 A JP2010081827 A JP 2010081827A JP 2010081827 A JP2010081827 A JP 2010081827A JP 2011215760 A JP2011215760 A JP 2011215760A
Authority
JP
Japan
Prior art keywords
module
storage area
data
computer
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2010081827A
Other languages
English (en)
Other versions
JP5428050B2 (ja
Inventor
Tomoyuki Mochizuki
智之 望月
Akitoshi Shimura
明俊 志村
Yuichi Kobayashi
悠一 小林
Takayuki Takesawa
隆之 武沢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2010081827A priority Critical patent/JP5428050B2/ja
Publication of JP2011215760A publication Critical patent/JP2011215760A/ja
Application granted granted Critical
Publication of JP5428050B2 publication Critical patent/JP5428050B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】システムの動作を継続させながら、モジュールの相違箇所を特定するための情報を収集する方法及び装置を提供する。
【解決手段】メモリを備え、計算機で実行可能なプログラムである複数のモジュールを実行する計算機を備える計算機システムであって、モジュールは、第2のモジュールと、第2のモジュールより古い世代の第1のモジュールとを含む、複数の世代のモジュールを含み、メモリは、第1の記憶領域と第2の記憶領域とを含み、計算機システムは、第1の記憶領域と第2の記憶領域とに同じデータを格納し、第1の記憶領域に格納されるデータを用いて、第1のモジュールを実行し、その後、第2の記憶領域に格納されるデータを用いて、第2のモジュールを実行し、第1のモジュールの実行結果と、第2のモジュールの実行結果とを比較する。
【選択図】図9

Description

本発明は、計算機システムに関し、特に、モジュールの実行を管理する計算機システムに関する。
鉄道運行管理システムのような情報制御システムは、システムが一度構築されると、10〜15年間程度、システムに含まれる既存のソースコードには手を加えられず、主に継ぎ足しによる部分的な改造又は改修がされる。このような改造又は改修が長年続くと、ソースコードが複雑化して読みにくいものとなる。また、有識者の異動又は退職によって、全体を俯瞰できる人材が少なくなる。その結果、システムがブラックボックス化してしまい、障害発生時の対策に多大な工数を要することになる。
そこで、システム内のブラックボックス化されたソースコードを、見通しの良いソースコード、すなわち、ユーザが理解しやすいソースコードへ移行することによって、これらの課題を解決することが求められている。特に、鉄道運行管理システムのような社会インフラシステムは、現行信頼性(すなわち、現行のシステムに備わる信頼性)の担保が強く求められるため、ソースコードをゼロから作り直すのではなく、すでにあるソースコードを元にホワイトボックス化して段階的に作り直す方法が取られる。
鉄道運行管理システムは、複数のモジュールを組み合わせて構築されるため、開発者はモジュールごとにホワイトボックス化し、モジュールを作り直す。そのため、モジュールの入出力及び機能が同じである複数のバージョンのモジュールが存在することになる。
これらのバージョンの異なる複数のモジュールのうち一つは、現行信頼性を有しているが、ブラックボックス化された旧バージョンのモジュール(以降、旧モジュールと記載)である。他の一つは、ホワイトボックス化されて見通しの良い構造となった新バージョンのモジュール(以降、新モジュールと記載)である。
この新モジュールは、旧モジュールのソースコードを受け継いでいるとはいえ、見通しの良い構造になるようにソースコードの構成を変更しているため、現行信頼性を保持しているか不安な面がある。万が一新モジュールにおいて障害が発生した場合、鉄道運行管理システムのような社会インフラシステムでは大きな問題となってしまう。また、鉄道運行管理システムは止めることができないため、すぐに復旧できるような仕組みが必要である。
このような中で、障害発生時に障害が発生したモジュールと置き換え可能なモジュールを検索し、障害発生モジュールと検索結果のモジュールとを置き換えることによって、システムとしての動作を継続させる技術が提案されている(例えば、特許文献1参照)。
特開2000−181753号公報
特許文献1に提案された技術は、障害が発生したモジュールを他の可換なモジュールと置き換えてしまう。このため、障害が発生したモジュールがどのような入力に対してどのように結果を出力するのか、どこに相違があるのかなどの、障害の原因を特定するための情報を取得することができず、改修が困難になる。また、改修箇所を特定するために、様々な入力データを用意して動作テストを行うこととなり、作業コストが膨大なものとなる。
本発明は、システムの動作を継続させながら、新モジュールの実行結果のどこに相違があるかを抽出し、モジュールに含まれるソースコードを修正するためのデータを取得することを目的とする。
本発明の代表的な一形態によると、メモリを備え、計算機で実行可能なプログラムである複数のモジュールを実行する計算機を備える計算機システムであって、前記モジュールは、第2の前記モジュールと、前記第2のモジュールより古い世代の第1の前記モジュールとを含む、複数の世代の前記モジュールを含み、前記メモリは、第1の記憶領域と第2の記憶領域とを含み、前記計算機システムは、前記第1の記憶領域と前記第2の記憶領域とに同じデータを格納し、前記第1の記憶領域に格納されるデータを用いて、前記第1のモジュールを実行し、その後、前記第2の記憶領域に格納されるデータを用いて、前記第2のモジュールを実行し、前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果とを比較する。
本発明の一実施形態によると、障害が発生したモジュールのうち、どこに相違があるのかを取得することができる。
本発明の実施形態のモジュール実行管理装置のシステム構成を示すブロック図である。 本発明の実施形態のモジュールが単独ランである場合のシステムを示す説明図である。 本発明の実施形態のモジュールの一部が共存ランである場合のシステムを示す説明図である。 本発明の実施形態のモジュール定義情報を示す説明図である。 本発明の実施形態のデータ定義情報を示す説明図である。 本発明の実施形態の比較結果情報を示す説明図である。 本発明の実施形態のモジュールが単独ランである場合のモジュール管理情報を示す説明図である。 本発明の実施形態のモジュールの一部が共存ランである場合のモジュール管理情報を示す説明図である。 本発明の実施形態のデータ管理情報を示す説明図である。 本発明の実施形態の時刻補正情報を示す説明図である。 本発明の実施形態のモジュール実行手段の処理を示すフローチャートである。 本発明の実施形態のモード変更手段による処理を示すフローチャートである。 本発明の実施形態の比較結果表示手段による表示例を示す説明図である。
以下、本発明の実施形態を、図1〜図11を参照して詳細に説明する。
図1は、本発明の実施形態のモジュール実行管理装置10のシステム構成を示すブロック図である。
なお、本実施形態のシステムには例として鉄道運行管理システムを用いるが、鉄道運行管理システムに限らず、プログラムによって動作するシステムであれば、本発明はいずれのシステムにおいても適用可能である。以下に記載されるシステムは、鉄道運行管理システムなどの社会インフラシステムとする。
モジュール実行管理装置10は、記憶部11、CPU12、メモリ13、入力部14、出力部15、及び、通信部16を備える。記憶部11は、データ及びプログラムを格納するハードディスクである。CPU12は、演算をすることによって、プログラムを実行するためのプロセッサである。メモリ13は、プログラム及び演算に関係する一時的な情報を記憶する。
入力部14は、ユーザによって、モジュール実行管理装置10にデータを入力するためのキーボード又はマウスなどの装置である。出力部15は、ユーザに実行結果等を表示するためのディスプレイなどの装置である。通信部16は、Ethernet(登録商標、以下同じ)又は、インターネットなどに接続するためのインターフェースである。
記憶部11は、モジュール定義情報21、データ定義情報22、比較結果情報23、モジュール管理情報31、データ管理情報32、及び、時刻補正情報33などのデータを保持する。また、記憶部11は、モジュール実行手段41、モード変更手段42、比較結果表示手段43、及び、モジュール50群などのプログラムを保持する。モジュール実行管理装置10は、プログラムを記憶部11からメモリ13にロードし、CPU12を用いて演算することによって、各種プログラムを実行する。
なお、本実施形態のシステムは、複数のモジュール50を組み合わせることによって構築されており、モジュール50が順番にロードされることによって動作する。システムが動作する際、モジュール50間のデータは、メモリ13に含まれる共有メモリを介してやり取りされる。具体的には、モジュール50への入力は、共有メモリに含まれるデータをモジュール50が読み込むことであり、モジュール50からの出力は、共有メモリに出力することである。
さらに、モジュール50には、アドレス解決手段501、時刻補正手段502、及び、ログ出力手段などの、モジュール50を実行するためのモジュール50が含まれる。
本実施形態におけるメモリ13は、共有メモリ(正)131、共有メモリ(副)132、及び、共有メモリ(保存用)133を保持する。共有メモリ(正)131、共有メモリ(副)132、及び、共有メモリ(保存用)133は、モジュール50への入力値を格納する領域であり、モジュール50による演算結果をモジュール50によって出力される領域である。なお、共有メモリ(正)131、共有メモリ(副)132、及び、共有メモリ(保存用)133は、各々が別のメモリ領域に実装されてもよいし、論理的にデータを分割されることによって実装されてもよい。
本実施形態において、システムの入出力となり、他のシステムへの入力となるデータは、共有メモリ(正)131に格納されるデータだけであり、共有メモリ(副)132及び共有メモリ(保存用)133に格納されるデータは、共有メモリ(正)131のコピーである。
また、モジュール50は、プログラム作成時、すなわちモジュール50作成時に他のプログラムと静的リンクされることによって一つのファイルとして作成される場合、及び、別のファイルとして作成され、動的にリンクされる場合がある。本発明はどちらのプログラム作成方法においても使用することができるが、本実施形態におけるモジュール50は、DLL(Dynamic Link Library)又はSO(Shared Object)のような別ファイルとして用意されるプログラムであり、動的リンクされ、呼び出されるものである。
図2A及び図2Bは、本発明の概要を示したものである。
モジュール実行管理装置10は、モジュール50A、モジュール50B、モジュール50Cの3種類のモジュール50を管理し、それぞれのモジュール50ごとに、旧バージョン(以降、旧モジュール50と記載)と新バージョン(以降、新モジュール50と記載)を管理する。
また、モジュール実行管理装置10は、モジュール50ごとに実行モードを持つ。実行モードには、「単独ラン」及び「共存ラン」の2つのモードがある。「単独ラン」は、旧モジュール50又は新モジュール50のいずれかのみが実行されるモードである。「共存ラン」は、旧モジュール50及び新モジュール50の双方が実行されるモードである。実行モードを変更することによって、新モジュール50において問題が発生した場合、システムとしての動作を継続させながら、問題解決のための情報を収集することができる。
なお、本実施形態において問題とは、モジュール50内にコーディングミスなどが存在することであり、これによって、本来システムが取得するべきデータが取得できなくなることを言う。
図2Aは、本発明の実施形態のモジュール50が単独ランである場合のシステムを示す説明図である。
図2Aは、モジュール50A、モジュール50B及びモジュール50Cのすべてが新バージョンの「単独ラン」によって実行されている。モジュール50A、モジュール50B及びモジュール50Cは、モジュール実行手段41によって制御され、モジュール50A、モジュール50B及びモジュール50Cの順に実行される。また、モジュール50A、モジュール50B及びモジュール50Cは、入力値を共有メモリ(正)131から取得し、出力結果を共有メモリ(正)131に返す。
ここで、モジュール50Aに問題が発生した場合、本実施形態のシステムは図2Bの状態となる。
図2Bは、本発明の実施形態のモジュール50の一部が共存ランである場合のシステムを示す説明図である。
図2Bにおけるモジュール50Aは、「共存ラン」によって実行され、モジュール50B及びモジュール50Cは、旧バージョンの「単独ラン」によって実行される。これは、図2Aに示す新バージョンのモジュール50Aにおいて問題が発生したため、実行モードを変更した結果である。
旧モジュール50A、旧モジュール50B及び旧モジュール50Cは、入力値を共有メモリ(正)131から取得し、出力結果を共有メモリ(正)131に返す。また、新モジュール50Aは、入力値を共有メモリ(副)132から取得し、出力結果を共有メモリ(副)132に返す。
図2Bに示すすべてのモジュール50において、旧モジュール50が実行されているため、システムとしての動作は、過去に動作の実績がある旧バージョンのモジュール50によって実行される。すなわち、より安全に動作が可能なバージョンに切り替わる。
また、問題のあったモジュール50Aについては、新モジュール50と旧モジュール50とが実行されており、旧モジュール50と新モジュール50との結果を比較することによって、新モジュール50の実行結果のどこに相違があったかを抽出することができる。そして、相違のある実行結果部分を生成している部分のソースコードを見直すことによって、新モジュール50のソースコードを容易に修正することができる。
なお、本実施形態においては、問題が発生したモジュール50を「共存ラン」にした際に、問題が発生していないモジュール50も旧モジュール50に置き換えたが、すべてのモジュール50が独立していれば、問題が発生していないモジュール50は新モジュール50のままでもよい。
以降では、システムの開発において、新モジュール50の開発が完了し、図2Aのようにすべて新バージョンの「単独ラン」によって実行させる場合と、モジュール50のうち新バージョンのモジュール50Aにおいて問題が発生し、図2Bのように「共存ラン」によって実行させる場合と、問題のあった新バージョンのモジュール50Aの修正が終わり、再び図2Aのようにすべて新バージョンの「単独ラン」モードによって実行させる場合について説明する。
図3は、本発明の実施形態のモジュール定義情報21を示す説明図である。
図3は、モジュール実行管理装置10が使用するモジュール50に関する定義情報を管理するための、モジュール定義情報21を示す。図3に示すモジュール定義情報21は、本実施形態のシステムが使用するモジュール50である、モジュール50A、モジュール50B及びモジュール50Cに関する定義情報を保持する。
図3に示すモジュール定義情報21は、モジュール名2101、バージョン2102、ファイル名2103及び依存モジュール2104を含む。また、依存モジュール2104には、名称2105及びバージョン2106が含まれる。
モジュール名2101は、モジュール50の名称を示す。モジュール名2101の順番によって、システム内のモジュール50は実行される。
バージョン2102には、モジュール50のバージョン番号を一意に示す識別子が含まれる。本実施形態において、旧バージョンの識別子は、「1」(以下において、バージョン1と記載)であり、新バージョンの識別子は、「2」(以下において、バージョン2と記載)である。図3のモジュール定義情報21に含まれるそれぞれのモジュール50には、旧バージョンのバージョン1と、新バージョンのバージョン2とがある。なお、本実施形態においてバージョン2102は、「1」及び「2」のみであるが、三つ以上のバージョンが格納されてもよい。
そしてファイル名2103は、それぞれモジュール50のソースコード等を格納するモジュールファイルの名前を示す。
モジュール50が他のモジュール50と依存関係にある場合、モジュール定義情報21には依存関係のあるモジュール50を定義することができる。依存モジュール2104は、モジュール名2101に示されたモジュール50と依存関係にあるモジュール50の情報を示す。名称2105は、モジュール名2101に示されたモジュール50と依存関係にあるモジュール50の名称を示し、バージョン2106は、モジュール名2101に示されたモジュール50と依存関係にあるモジュール50のバージョンを示す。
例えば、レコード213は、バージョン1のモジュール50Bを実行するためには、バージョン1のモジュール50Cを一緒に実行する必要があることを示す。
図4は、本発明の実施形態のデータ定義情報22を示す説明図である。
図4は、モジュール50が用いる共有メモリに含まれるデータに関する定義情報を管理するためのデータ定義情報22を示す。データ定義情報22は、データ名2201、サイズ2202、コピー規則2203、比較規則2204、共有メモリ(正)先頭アドレス2205、共有メモリ(副)先頭アドレス2206及び共有メモリ(保存用)先頭アドレス2207を含む。
データ名2201は、システムが使用する共有メモリに含まれるデータの名称を示す。本実施形態のデータ定義情報22は、データ名2201が「駅情報」、「列車情報」及び「信号機情報」である3種類のデータの定義を保持する。
サイズ2202は、データ名2201に示されるデータのサイズを示す。本実施形態において、サイズ2202の単位はバイトである。
コピー規則2203は、実行モードが「共存ラン」であるモジュール50が発生した場合に、データ名2201に示されるデータが、共有メモリ(正)131から共有メモリ(副)132及び共有メモリ(保存用)133にコピーする対象となるデータであるか否かを示す。
比較規則2204は、実行モードが「共存ラン」であるモジュール50が発生した場合に、データ名2201に示されるデータが、共有メモリ(正)131と共有メモリ(副)132との間で値の比較をする対象となるデータであるか否かを示す。本実施形態における比較は、データごとにデータサイズ分比較し、すべてが等しい場合か、それ以外かを判定する。
共有メモリ(正)先頭アドレス2205、共有メモリ(副)先頭アドレス2206、及び、共有メモリ(保存用)先頭アドレス2207は、それぞれのデータがマッピングされる共有メモリ上のアドレスのうち先頭のアドレスを示す。
例えば、データ名2201が「駅情報」であるデータは、モジュール50によって書き換えられないデータであるため、コピー規則2203、比較規則2204、共有メモリ(副)先頭アドレス2206及び共有メモリ(保存用)先頭アドレス2207に値を格納しない。これによってモジュール50は、データ名2201が「駅情報」であるデータを読み出す場合は、常に共有メモリ(正)131を用いる。
一方、データ名2201が「列車情報」及び「信号機情報」であるデータは、モジュール50によって書き換わるデータであるため、コピー規則2203、共有メモリ(副)先頭アドレス2206及び共有メモリ(保存用)先頭アドレス2207に値を格納する。これによって旧モジュール50と新モジュール50とは、アクセスする先のアドレスをデータによって変更することができる。
すなわち、旧モジュール50が「列車情報」のデータを読み出す場合、旧モジュール50は、共有メモリ(正)先頭アドレス2205が「12000」である領域を読み出す。また、新モジュール50が「列車情報」のデータを読み出す場合、新モジュール50は、共有メモリ(副)先頭アドレス2206が「22000」である領域を読み出す。
また、必要に応じて、比較規則2204に値を設定することによって、旧モジュールと新モジュールとの実行結果を、各々比較し、相違がないかを検証する。
なお、本実施形態におけるコピー規則2203及び比較規則2204には、「○」が格納される。コピー規則2203の値が「○」である場合、コピー規則2203は、データ名2201が示すデータの全領域をコピーすることを示し、比較規則2204の値が「○」である場合、比較規則2204は、データ名2201が示すデータの全領域を比較することを示す。
また、共有メモリ(正)先頭アドレス2205、共有メモリ(副)先頭アドレス2206、及び、共有メモリ(保存用)先頭アドレス2207は、格納される値が固定される方法と、格納される値が動的に割り当てられる方法とがある。
格納される値が固定される方法は、あらかじめどの領域が使用されるか決められ、モジュール実行管理装置10に備わるOSにそのアドレスの領域を予約するものである。また、動的に割り当てる方法は、モジュール実行管理装置10が起動時にデータ定義情報22を参照し、データのサイズ2202から必要なサイズを求め、共有メモリ(正)131、共有メモリ(副)132、及び、共有メモリ(保存用)133において、求められたサイズ分の領域を確保し、確保された共有メモリの領域のアドレスをデータ定義情報22に格納するものである。
図5は、本発明の実施形態の比較結果情報23を示す説明図である。
図5は、モジュール実行管理装置10が複数の新バージョン及び旧バージョンのモジュール50を実行した場合に、それぞれの実行結果を格納した共有メモリ(正)131と共有メモリ(副)132との内容、及び、その内容を比較した結果を格納する比較結果情報23を示す。比較結果情報23は、モジュール名2301、時刻2302、データ名2303、タイミング2304、データ2305及び判定結果2306を含む。
モジュール名2301は、新バージョン及び旧バージョンを共存して実行させたモジュール50の名称を示す。時刻2302は、比較のためにモジュール名2301に示されるモジュール50を実行し始めた時刻を示す。
またデータ名2303は、比較を行った対象のデータ名称を示す。タイミング2304は、データ2305に格納されるデータがどのタイミングにおいて取得されたかを示し、データ2305は、各モジュール50の実行によって取得されたデータの内容を示す。タデータ2305には、モジュール50を実行する前のデータ、旧モジュール50を実行した結果のデータ、及び、新モジュール50を実行した結果のデータとが格納される。
そして判定結果2306は、新バージョン及び旧バージョンのモジュール50の各々の実行結果を比較した結果を示す。判定結果2306には、新モジュール50の実行結果と旧モジュール50の実行結果とに相違がない場合、「OK」が格納され、新モジュール50の実行結果と旧モジュール50の実行結果とに相違がある場合、「NG」が格納される。
また、判定結果2306に「NG」が格納される場合、実行結果に相違があったデータの位置を、「NG」の値と共に格納してもよい。例えば、図5に示す判定結果2306において、相違があったデータの位置を示す「(2バイト目〜2バイト目)」が格納されてもよい。
図6Aは、本発明の実施形態のモジュール50が単独ランである場合のモジュール管理情報31aを示す説明図である。
図6Bは、本発明の実施形態のモジュール50の一部が共存ランである場合のモジュール管理情報31bを示す説明図である。
図6A及び図6Bは、実行対象となっているモジュール50に関する情報を管理するモジュール管理情報31を示す。図6Aは、図2Aの状態におけるモジュール管理情報31aであり、図6Bは図2Bの状態におけるモジュール管理情報31bを示す。
モジュール管理情報31は、実行する対象であるモジュール50ごとに、モジュール名3101、実行モード3102、単独ランのバージョン3103、共存ラン3104、旧バージョン3105及び新バージョン3106を含む。
モジュール名3101は、実行する対象であるモジュール50の名称を示す。実行モード3102は、モジュール名3101に示されるモジュール50の実行モードを示す。単独ランのバージョン3103は、モジュール名3101が示すモジュール50に「単独ラン」させる場合のモジュール50のバージョンを示す。
共存ラン3104に含まれる旧バージョン3105は、モジュール名3101が示すモジュール50に「共存ラン」させる場合の旧モジュール50のバージョンを示す。また、共存ラン3104に含まれる新モジュール50のバージョンを示す。
例えば、レコード31a1は、モジュール50Aの実行モードが「単独ラン」であり、バージョン2のモジュール50Aが実行されることを示す。また、レコード31b1は、モジュール50Aの実行モードが「共存ラン」であり、バージョン1の旧モジュール50と、バージョン2の新モジュール50とが、共存して実行されることを示す。
図7は、本発明の実施形態のデータ管理情報32を示す説明図である。
図7は、モジュール50によって参照されるデータを格納する共有メモリ上のアドレスについて管理するためのデータ管理情報32を示す。データ管理情報32は、実行モード及びデータの種類ごとに、共有メモリ(正)131及び共有メモリ(副)132のアドレスを保持する。
データ管理情報32は、データ名3201、単独ランの共有メモリ先頭アドレス3202、共存ラン3203、旧モジュール用共有メモリ先頭アドレス3204、及び、新モジュール用共有メモリ先頭アドレス3205を含む。
データ名3201は、共有メモリに格納されるデータの名称を示す。単独ランの共有メモリ先頭アドレス3202は、「単独ラン」においてデータが格納される共有メモリのアドレスのうち、先頭のアドレスを示す。単独ランの共有メモリ先頭アドレス3202は、すべて共有メモリ(正)のアドレスである。
共存ラン3203に含まれる旧モジュール用共有メモリ先頭アドレス3204は、「共存ラン」において旧モジュール50によって参照されるデータが格納される共有メモリのアドレスのうち、先頭のアドレスを示す。また、共存ラン3203に含まれる新モジュール用共有メモリ先頭アドレス3205は、「共存ラン」において新モジュール50によって参照されるデータが格納される共有メモリのアドレスのうち、先頭のアドレスを示す。
旧モジュール用共有メモリ先頭アドレス3204及び新モジュール用共有メモリ先頭アドレス3205の値は、データ定義情報22のコピー規則2203の値によって、単独ランの共有メモリ先頭アドレス3202と異なる。
例えば、データ名3201が「駅情報」のように、モジュール50によって値が変更されないデータの場合、図4に示すコピー規則2203に値が格納されないため、データが共有メモリ(正)131から共有メモリ(副)132にコピーされない。このため、図7に示すレコード321に示すように、旧モジュール50と新モジュール50とは、同じアドレスを参照する。
一方、データ名3201が「列車情報」及び「信号機情報」のように、モジュール50によって値が変更されるデータの場合、図4に示すコピー規則2203に値が格納されるため、データが共有メモリ間でコピーされる。このため、図7に示すレコード322に示すように、旧モジュールと新モジュールとは、異なる共有メモリのアドレスを参照する。
データ管理情報32は、図4に示すコピー規則2203に従って、データ定義22から生成される。このため、データ管理情報32は、共有メモリ(正)131、共有メモリ(副)132、及び、共有メモリ(保存用)133のアドレスと同じく、固定の値が格納される場合と、モジュール実行管理装置10の起動時に動的に値が格納される場合とがある。
図8は、本発明の実施形態の時刻補正情報33を示す説明図である。
図8は、実行モードが「共存ラン」において、旧モジュール50及び新モジュール50が実行される時刻の差を補正するための時刻補正情報33を示す。時刻補正情報33は、旧モジュールを実行開始する直前の時刻情報331と、新モジュールを実行する直前の時刻情報332とを保持する。
図9は、本発明の実施形態のモジュール実行手段41の処理を示すフローチャートである。
モジュール実行手段41は、モジュール定義情報21において決められた順番によって、モジュール50を順次実行する。
図2Aにおけるモジュール50Aの実行を例に説明する。
モジュール実行手段41は、モジュール管理情報31を参照し、実行させるモジュール50の実行モード3102を参照し、「単独ラン」であるか、「共存ラン」であるかを判定する(ステップ411)。モジュール実行手段41は、ステップ411において例えば、図6Aに示すモジュール管理情報31aのモジュール50Aに関するレコード31a1を参照し、実行モード3102が「単独ラン」であり、単独ランのバージョン3103が「2」である情報を取得する。そして、モジュール実行手段41は、実行モード3102が「単独ラン」であるため、ステップ412に進む。
次にモジュール実行手段41は、モジュール定義情報21を参照し、ステップ411において取得された情報に該当するモジュール50を実行する(ステップ412)。例えば、ステップ411において取得された、実行するモジュール50Aのバージョンが「2」である場合、モジュール実行手段41は、図3に示すモジュール定義情報21のレコード212を参照し、ファイル「ma.so.2」を実行する。
以上によって、図2Aにおけるモジュール50Aを実行する。
その後モジュール実行手段41は、21のモジュール名2101に示すモジュール50をループ処理によって順次実行する。
次に、図2Bにおけるモジュール50Aの実行を例に説明する。
モジュール実行手段41は、モジュール管理情報31を参照し、実行させるモジュール50の実行モード3102を参照し、「単独ラン」であるか、「共存ラン」であるかを判定する(ステップ411)。モジュール実行手段41は、ステップ411において、図6Bに示す31bのモジュール50Aに関するレコード31b1を参照し、実行モード3102が「共存ラン」であり、共存ラン3104に含まれる旧バージョン3105が「1」であり、共存ラン3104に含まれる新バージョン3106が「2」である情報を取得する。
そしてモジュール実行手段41は、実行モード3102が「共存ラン」であるため、ステップ413に進む。
モジュール実行手段41は、データ定義情報22とデータ管理情報32とを参照し、共有メモリ(正)131上のデータを、共有メモリ(副)132と共有メモリ(保存用)133とにコピーする(ステップ413)。
例えば、モジュール実行手段41はステップ413において、図4に示すデータ定義情報22を参照することによって、コピー規則2203に値が格納されているレコードが、データ名2201が列車情報であり、サイズ2202が2000であるレコード222と、データ名2201が信号機情報であり、サイズ2202が4000バイトであるレコード223のデータであることを取得する。すなわち、モジュール実行手段41は、データ名2201が「列車情報」(サイズ2202が2000バイト)であるデータとデータ名2201が「信号機情報」(サイズ2202が4000バイト)であるデータとがコピー対象であることを取得する。
さらにモジュール実行手段41は、図4に示すデータ定義情報22を参照し、共有メモリ上のコピー元とコピー先のアドレスとを取得する。モジュール実行手段41は、データ名2201が「列車情報」であるデータを示すレコード222の値によって、共有メモリ(副)132の先頭アドレス「22000」の領域と共有メモリ(保存用)133の先頭アドレス「32000」の領域との双方に、共有メモリ(正)131の先頭アドレス「12000」の「2000」バイト分の領域をコピーする。
さらにモジュール実行手段41は、データ名2201が「信号機情報」であるデータを示すレコード223の値によって、共有メモリ(副)132の先頭アドレス「26000」の領域と共有メモリ(保存用)133の先頭アドレス「36000」の領域との双方に、共有メモリ(正)131の先頭アドレス「16000」から「4000」バイト分の領域をコピーする。
ステップ413の後、モジュール実行手段41は、現在時刻をOSなどの機能によって取得し、取得された現在時刻を、時刻補正情報33に格納する(ステップ414)。ステップ414において取得される現在時刻は、旧モジュール50を実行する直前の時刻であり、旧モジュール50が開始される時刻の基点であるため、モジュール実行手段41は、図8に示す時刻補正情報33の旧モジュール実行開始時刻のレコードであるレコード331に、取得された現在時刻を格納する。
ステップ414の後、モジュール実行手段41は、モジュール定義情報21及びモジュール管理情報31を参照し、該当する旧モジュール50を実行する(ステップ415)。例えばモジュール実行手段41は、図6Bのモジュール管理情報31bのモジュール50Aに関するレコード31b1を参照し、旧モジュール50のバージョンが「1」である情報を取得する。そのため、モジュール実行手段41は、図3に示すモジュール定義情報21のレコード211を参照して、ファイル「ma.so.1」を実行する。
ステップ415の後、モジュール実行手段41は、現在時刻をOSなどの機能によって取得し、取得された現在時刻を、時刻補正情報33に格納する(ステップ416)。ステップ416において取得される現在時刻は、新モジュール50を実行する直前の時刻であり、新モジュール50が開始される時刻の基点であるため、モジュール実行手段41は、図8に示す時刻補正情報33の新モジュール実行開始時刻のレコードであるレコード332に、取得された現在時刻を格納する。
ステップ416の後、モジュール実行手段41は、モジュール定義情報21及びモジュール管理情報31を参照し、該当する新モジュール50を実行する(ステップ417)。例えばモジュール実行手段41は、図6Bのモジュール管理情報31bのモジュール50Aに関するレコード31b1を参照し、新モジュール50のバージョンが「2」である情報を取得する。そのため、モジュール実行手段41は、図3に示すモジュール定義情報21のレコード212を参照して、ファイル「ma.so.2」を実行する。
ステップ417の後、モジュール実行手段41は、データ定義情報22及びデータ管理情報32を参照し、旧モジュールの実行結果が出力された共有メモリ(正)131のデータと、新モジュールの実行結果が出力された共有メモリ(副)132のデータとを比較し、比較結果を比較結果情報23に格納する(ステップ418)。
例えばモジュール実行手段41は、図4のデータ定義情報22に示すレコード222及びレコード223を参照し、データ名2201が「列車情報」であり、サイズ2202が2000バイトであるデータと、データ名2201が「信号機情報」であり、サイズ2202が4000バイトであるデータとが、新旧モジュール50によって生成された結果を比較するデータであることを取得する。
そこで、モジュール実行手段41は、図4に示すデータ名2201が「列車情報」であるデータについては、図4のデータ定義情報22に示すレコード222に従い、共有メモリ(正)131の先頭アドレス「12000」を基点とする「2000」バイト分の領域と、共有メモリ(副)132の先頭アドレス「22000」を基点と「2000」バイト分の領域とを比較し、比較した結果を図5に示す比較結果情報23に出力する。
そしてモジュール実行手段41は、図5に示すレコード231、すなわち、モジュール名2301がモジュール50Aを示し、データ名2303が「列車情報」であるレコードについて、旧モジュール50の実行後のデータが「0010…」であることを取得する。また、レコード231によって、新モジュール50の実行後のデータが「0020…」であり、さらに新旧モジュール50の実行結果を比較した結果は、「NG(2バイト目〜2バイト目)」であることを取得する。前述の通り「NG」とは、新旧モジュール50の実行結果が相違することを意味する。
一方、モジュール実行手段41は、図4に示すデータ名2201が「信号機情報」であるデータについては、図4のデータ定義情報22のレコード223に従い、共有メモリ(正)131の先頭アドレス「16000」を基点とする「4000」バイト分の領域と、共有メモリ(副)132の先頭アドレス「26000」を基点とする「4000」バイト分の領域とを比較し、比較した結果を図5に示す比較結果情報23に出力する。
そしてモジュール実行手段41は、図5に示すレコード232、すなわち、モジュール名2301がモジュール50Aを示し、データ名2303が「信号機情報」であるレコードについて、旧モジュール50の実行後のデータが「3333…」であることを取得する。また、レコード232によって、新モジュール50の実行後のデータも「3333…」であり、さらに新旧モジュール50の実行結果比較した結果は、「OK」であることを取得する。前述の通り「OK」とは、新旧モジュール50の実行結果が等しいことを意味する。
また、新旧モジュール50を実行する前のデータが、共有メモリ(保存用)133に保存されているため、モジュール実行手段41は、比較結果情報23に前述のデータの比較結果を格納する際、共有メモリ(保存用)133を参照し、該当するデータを図5のタイミング2304が「実行前」であるデータ2305に、新旧モジュール50を実行する前のデータを格納する。
以上によって、図2Bにおけるモジュール50Aの実行、すなわち図9に示すステップ413〜ステップ418を終了する。この後、モジュール50Aに続けて実行するべきモジュール50がある場合、モジュール実行手段41は、図9に示すフローを繰り返す。
なお、モジュール実行手段41がステップ412、ステップ415、及び、ステップ417においてモジュール50を実行する際、モジュール実行手段41は、アドレス解決手段501、時刻補正手段502、及び、ログ出力手段503を用いる。
前述の通り、ステップ412、ステップ415、及び、ステップ417などのモジュール50が共有メモリ上のデータにアクセスする場合、実行モードによってアクセス先のアドレスが異なる。そのため、モジュール実行手段41は、ステップ412、ステップ415、及び、ステップ417において、これから実行するモジュール50の実行モードに従って、データ管理情報32のようなデータ名3201と共有メモリ上のアドレスとの対応表を、モジュール50のアドレス解決手段501に通知する。
アドレス解決手段501は、モジュール実行手段41から通知されたデータ名3201と共有メモリ上のアドレスとの対応表を参照し、アクセスしようとするデータ名3201からアドレスを解決してから、データにアクセスする。
さらに、実行モードが「単独ラン」である場合、モジュール実行手段41は現在の実時刻を使用すればよい。しかし、実行モードが「共存ラン」である場合、モジュール実行手段41は旧モジュール50を実行してから新モジュール50を実行するため、モジュール50実行時の時刻が異なる。システムにおけるわずかな時刻の差は、処理の結果に影響を与える可能性がある。
そこで時刻補正手段502は、時刻補正情報33を参照し、補正した時刻を算出し、ステップ417において、補正後の時刻を実行中のモジュール50に返す。補正後の時刻は、「実時刻−旧モジュール50と新モジュール50との実行開始時刻の差分+α」とする。「+α」は、処理の切り替え等のオーバーヘッドにかかる時間を調整するための値である。「α」は、負の値でもよい。
例えば、図8に示すように、旧モジュール50の実行開始時刻が「10:00:00.100」であり、新モジュール50の実行時刻が「10:00:00.150」である場合、旧モジュール50と新モジュール50との実行開始時刻の差分は0.050秒となる。さらに、ステップ417において、新モジュール50が実行中に取得する実際の時刻が「10:00:00.170」であり、「+α」が0である場合、時刻補正手段502は、「10:00:00.170」から0.050秒分だけ引いた「10:00:00.120」を算出し、算出された時刻を補正後の時刻として新モジュール50に返す。
このように、時刻補正手段502は、実行モードに従って時刻を補正し、現在として扱う時刻を取得して、モジュール50に返す。
なお、時刻補正手段502は、旧モジュール50の実行開始時刻を保存しておき、旧モジュール50及び新モジュール50が現在時刻取得要求をしたときに保存した旧モジュール50の実行開始時刻を返すことによって、時刻を補正してもよい。
さらに、モジュール50がログ(ジャーナル)をファイルに出力する場合、旧モジュール50と新モジュール50とが同じログファイルにログを出力すると、ログが混ざり、最終的に実行されたモジュール50がいずれのログを出力したのかが不明となり、また、いずれのモジュール50が実行されたのかも不明になる。そこで、ログ出力手段503は、「単独ラン」において実行されるモジュール50、及び、「共存ラン」において旧モジュール50として実行されるモジュール50に、本来のログファイルに出力させ、「共存ラン」において新モジュールとして実行されるモジュール50に別のログファイルに出力させる。
本実施形態のシステムは、旧モジュールの実行結果を実際のデータとして採用するため、ログ出力手段503によって、最終的に実行された処理のログが本来のログファイルに残される。なお、ログ出力手段503は、「共存ラン」において実行される新モジュール50の実行結果も、新モジュール50の実行結果であることが認識できるような情報を付加し、本来のログファイルにログを出力してもよい。
図10は、本発明の実施形態のモード変更手段42による処理を示すフローチャートである。
モード変更手段42は、モジュール実行手段41がモジュール50を実行した後、特にステップ412の後、ユーザによる実行結果の検証において、実行結果のデータに矛盾が検出され、そのままのシステムの動作が危険であると判定された場合、又は、外部コンソールなどの入力部14を介してユーザからパラメタの指定を受けた場合に起動する。すなわち、モード変更手段42は、システムに障害などの問題が発生した際、又は、ユーザによるテストを実施する際に、起動する。
モード変更手段42は、切り替えるモジュール50の名称、すなわち、障害などの問題が発生したモジュール50の名称、障害時フラグ、変更後の実行モード、及び、実行モードを変更した後のバージョンを指定され起動する。「障害時フラグ」は、前述のように特定のモジュール50において問題が発生した場合に、自動又は手動によって、モジュール実行管理装置10に格納されるフラグである。
以下では、モジュール50Aにおいて問題が発生した際、図2Aから図2Bに実行モードが変更する例について説明する。図10においてモード変更手段42は、モジュール50Aで問題が発生したため、モジュール50の名称が「A(モジュール50A)」であり、障害時フラグが「ON」であり、変更後の実行モードが「共存ラン」であるパラメタを指定され起動したものとする。
なお、本実施形態においては、実行モードが「共存ラン」になる場合、一つ前のバージョンと共存されることがあらかじめ指定されているが、ユーザによって任意のバージョンを指定されてよい。
モード変更手段42は、障害時フラグがONであるかOFFであるかを判定する(ステップ421)。ここでは、障害時フラグがONであるため、ステップ422に進む。
モード変更手段42は、指定されたモジュール50Aの実行モードを、「共存ラン」に変更する(ステップ422)。モード変更手段42は、ステップ422において、問題が発生するまで用いていたモジュール管理情報31のモジュール50Aに関するレコードを、図6Bのモジュール管理情報31bに示すレコード31b1の実行モード3102のように変更する。
さらにモード変更手段42は、図3に示すモジュール定義情報21を参照し、問題が発生するまでモジュール50Aとして実行されていたバージョン2の、前のバージョンが「1」であることを取得する。そして、モジュール管理情報31のモジュール50Aに関するレコードの旧バージョン3105に「1」を格納し、新バージョン3106に問題が発生するまでのモジュール50Aのバージョンである「2」を格納する。これによってモード変更手段42は、図6Bに示すレコード31b1を生成する。
ステップ422の後、モード変更手段42は、指定されたモジュール50A以外のモジュール50の実行モード3102を、旧モジュール50による「単独ラン」に変更する(ステップ423)。モード変更手段42は、ステップ423において、モジュール50Aの旧バージョン3105が「1」であるため、モジュール50Bに関するレコード及びモジュール50Cに関するレコードについても、図6Bのモジュール管理情報31bのレコード31b2、レコード31b3のように、実行モード3102に「単独ラン」を格納し、単独ランのバージョン3103に「1」を格納する。
これによってモード変更手段42は、図6Bに示すレコード31b2及びレコード31b3を生成する。なお、本実施形態において。モジュール50B及びモジュール50Cのバージョン3103は、モジュール50Aの旧バージョン3105と同じ「1」であるが、モジュール50Aのバージョン「1」とともに動作した場合に、システムが現行信頼性を保持できるバージョンであれば、いずれのバージョンでもよい。
以上によってモード変更手段42は、図2Aから図2Bのように、モジュール50Aの実行モードを「共存ラン」に変更する。
以下では、モジュール50Aの実行モードを、「共存ラン」から新モジュールによる「単独ラン」に変更する例について説明する。このため、モード変更手段42は、モジュール50の名称が「A(モジュール50A)」であり、障害時フラグが「OFF」であり、実行モードが「単独ラン」であり、バージョンが「2」であるパラメタを指定されて起動したものとする。
モード変更手段42は、障害時フラグがONであるかOFFであるかを判定し(ステップ421)、障害時フラグが「OFF」であるため、ステップ424に進む。
モード変更手段42は、指定されたモジュール50Aの実行モードを、指定されたバージョン「2」による「単独ラン」に変更する(ステップ424)。モード変更手段42は、ステップ424において、図6Aのモジュール管理情報31aのモジュール50Aに関するレコード31a1のように、実行モード3102に「単独ラン」を格納し、単独ランのバージョン3103に「2」を格納する。
モード変更手段42は、以上の処理をモジュール50A、モジュール50B、及び、モジュール50Cのすべてに繰り返すことによって、図2Bに示すような「共存ラン」の状態を、図2Aに示すようなすべて新モジュールによる「単独ラン」の状態に変更する。
以上によって、図2Bから図2Aのように、モジュール50Aの実行モードを新モジュール50による「単独ラン」に変更することができる。
なお、本実施形態のステップ422及びステップ424において、モード変更手段42は、指定されたモジュール50のみの実行モードを変更した。しかし、モジュール50の特定のバージョン間に依存関係がある場合、指定されたモジュール50の実行モードの変更とともに、依存関係のあるモジュール50についても、実行モードを変更する。
例えば、図3のモジュール定義情報21は、モジュール名称2101が「B」のモジュール50(モジュール50B)のバージョン2102「1」と、名称2105が「C」のモジュール50(モジュール50C)のバージョン2106「1」との間、及び、モジュール名称2101が「B」のモジュール50(モジュール50B)のバージョン2102「2」と、名称2105が「C」のモジュール50(モジュール50C)のバージョン2106「2」との間において、依存関係があることを示す。
本実施形態のシステムが図3に示すモジュール定義情報21の状態である場合、モード変更手段42は、モジュール50Bをバージョン1の「単独ラン」にする場合、モジュール50Cをバージョン1の「単独ラン」に変更する。また、モジュール50Bをバージョン1とバージョン2の「共存ラン」にする場合、モジュール50Cについてもバージョン1とバージョン2の「共存ラン」に変更する。
さらに、問題が発生したモジュール50Aと他のモジュール50に依存関係がある場合も、問題が発生したモジュール50Aの実行モードを「共存ラン」にするとともに、問題は発生していないがモジュール50Aと依存関係のある他のモジュール50の実行モードを「共存ラン」にする。
また、モード変更手段42は、前述のステップ423において、指定されていないモジュール50について、実行モードを旧バージョンにおける「単独ラン」に変更したが、新バージョンの信頼性が十分確認されている場合には、ステップ423を実施せず、新バージョンによる「単独ラン」のまま実行させてもよい。
図11は、本発明の実施形態の比較結果表示手段43による表示例を示す説明図である。
図11は、モジュール50が「共存ラン」によってモジュール実行手段41に実行される際に生成される比較結果情報23を、比較結果表示手段43がユーザに表示する例を示す。比較結果表示手段43は、比較されたモジュール50の一定期間分の比較結果情報23を集計し、集計結果を表示する。
比較結果表示手段43によって表示される内容には、比較されたモジュール名431、「共存ラン」によって実行された期間432、モジュール50が実行された回数433、比較の判定結果434がある。また、比較結果表示手段43は、モジュール50による実行結果を比較した結果を比較結果435に表示する。
図11に示す期間432において、図5に示す比較結果情報23の判定結果2306のうち「NG」が1つでもある場合、判定結果434には「NG」が表示される。また、図11に示す期間432において、図5に示す比較結果情報23の判定結果2306がすべて「OK」である場合、判定結果434には「OK」が表示される。
比較結果435には、データ名4351、位置4352、及び、NG回数4353が含まれる。比較結果情報23の判定結果2306のうち「NG」があった場合、比較結果表示手段43は、その「NG」となったデータ名2303を、データ名4351に表示し、どの位置のデータがNGであったのかを位置4352に表示し、そして、NGになったのはモジュール50が実行された回数433中、何回あったのかをNG回数4353に表示する。
位置4352は、図11に示す「進行許可フラグ」のデータ項目のように、データ構造定義(構造体定義:図示せず)を参照することによって、データ内のどのデータ項目が「NG」に該当するかを表示してもよい。
ユーザは、比較結果435を参照することによって、新モジュール50の実行結果のどこに相違があったかを抽出することができる。そして、相違のあった実行結果部分を生成しているソースコードの部分を見直すことによって、新モジュール50のソースコードの修正に結びつけることができる。
またユーザは、24時間などの長期間、新モジュール50を「共存ラン」によって試験することによって、新モジュール50が旧モジュール50と同じ処理を実行していることを確認することができる。長期間の試験において判定結果が「OK」であり、旧モジュール50と新モジュール50との実行結果が等しいことがわかれば、新モジュール50が現行信頼性(現行のモジュール50によってシステムに備わる信頼性)を持つことを確認できる。そして、新モジュール50が現行信頼性を持っている場合、ユーザは、「共存ラン」から新モジュールによる「単独ラン」に切り替えても良いと判断することができる。
なお、図4に示すデータ定義情報22の比較規則2204は、「○」が格納され、データのサイズ2202分等しいか否かを検証する「全比較」を示す。しかし、データのサイズ2202分すべての比較だけでなく、比較規則2204に比較しない領域を指定してもよい。
例えば、旧モジュール50から新モジュール50への開発にあたり、変更していないため比較による検証をする必要がない部分、又は、十分検証をしており更なる比較による検証が不要である場合、比較規則2204に指定された領域を比較範囲から外すよう、比較規則2204を設定してもよい。
また、旧モジュール50から新モジュール50への開発にあたり、機能拡張を行っているため、共有メモリへの出力が異なることがわかっている領域についても、その領域を比較範囲から外すよう比較規則2204の値を格納してもよい。さらに、比較する方法についても「等しい」だけでなく、データ内の特定のデータ項目について、比較規則2204を、「旧モジュール50の出力結果と新モジュール50の出力結果との相違が一定範囲以内」としてもよい。また、新モジュール50において機能拡張されたデータについては、「特定の値になっているか」を比較規則2204としてもよい。
また、一般的に旧モジュール50は、アドレス解決手段501のように参照先である共有メモリ上のアドレスを切り替える機能を持たず、固定の共有メモリ(正)131のアドレスを直接参照する場合が多い。本発明は、実行モードが「単独ラン」又は「共存ラン」のいずれであっても、旧モジュール50は常に共有メモリ(正)131を参照するために、アドレスを切り替える機能を持たなくても対応することができる。新モジュール50がアドレス解決手段501を持てばよい。特に、見通しの良いソースコードになるように新モジュール50を開発するにあたり、データと処理とを分離し、データを管理する部分をアドレス解決手段501が持つようにすることができる。
以上のように本発明は、鉄道運行管理システムのような長期間運用され高信頼が求められる大規模な情報制御システムにおいて、システムを構成するモジュール50を管理及び実行する。
本発明のシステムは、複数のバージョンのモジュール50を管理し、モジュール50ごとに単一バージョンの「単独ラン」モードと、複数バージョンの「共存ラン」モードの2種類の実行モードを持つ。そして、モジュール50において問題発生時に、システムは「単独ラン」モードから「共存ラン」モードに切り替わる。
「単独ラン」モードでは、共有メモリ(正)131を使用してモジュール50を実行する。「共存ラン」モードでは、モジュール50の入力となる共有メモリ(正)のデータを別の共有メモリ(副)132にコピーし、共有メモリ(正)131を使用して旧バージョンのモジュール50を実行し、共有メモリ(副)132を使用して新バージョンのモジュール50を実行する。旧バージョンのモジュール50の出力を格納する共有メモリ(正)131と、新バージョンのモジュール50の出力を格納する共有メモリ(副)132の内容を比較し、実行前のデータとともに、新旧の実行結果の違いを出力する。
本発明によれば、システムとしての動作を継続させながら、信頼性のある旧モジュール50の実行結果と、問題の発生した新モジュール50の実行結果を比較し検証することによって、新モジュール50の実行結果のどこに相違があるかを抽出することができる。そして、相違のある実行結果部分を生成している部分のソースコードを見直すことにより、新モジュール50のソースコードの修正に結びつけることができる。その際に、モジュール50を実行する前の入力となったデータを含めて参照することによって、どのような入力のときに相違が発生するかを把握することができる。
10 モジュール実行管理装置
11 記憶部
12 CPU
13 メモリ
14 入力部
15 出力部
16 通信部
21 モジュール定義情報
22 データ定義情報
23 比較結果情報
31、31a、31b モジュール管理情報
32 データ管理情報
33 時刻補正情報
41 モジュール実行手段
42 モード変更手段
43 比較結果表示手段
50、50A、50B、50C モジュール
131 共有メモリ(正)
132 共有メモリ(副)
133 共有メモリ(保存用)
501 アドレス解決手段
502 時刻補正手段
503 ログ出力手段

Claims (15)

  1. メモリを備え、計算機で実行可能なプログラムである複数のモジュールを実行する計算機を備える計算機システムであって、
    前記モジュールは、第2の前記モジュールと、前記第2のモジュールより古い世代の第1の前記モジュールとを含む、複数の世代の前記モジュールを含み、
    前記メモリは、第1の記憶領域と第2の記憶領域とを含み
    前記計算機システムは、
    前記第1の記憶領域と前記第2の記憶領域とに同じデータを格納し、
    前記第1の記憶領域に格納されるデータを用いて、前記第1のモジュールを実行し、
    その後、前記第2の記憶領域に格納されるデータを用いて、前記第2のモジュールを実行し、
    前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果とを比較することを特徴とする計算機システム。
  2. 前記計算機システムは、
    前記第2のモジュールにおいて問題が発生する前、前記第1の記憶領域に格納されるデータを用いて、前記第2のモジュールを実行し、
    前記第2のモジュールにおいて問題が発生した場合、前記第1のモジュールを実行した後、前記第2のモジュールを実行することを特徴とする請求項1に記載の計算機システム。
  3. 前記計算機システムは、
    前記複数のモジュール間の依存関係を保持し、
    前記第1のモジュールと第2のモジュールとを実行する場合、前記第2のモジュールと依存関係にある第4の前記モジュールを特定し、
    前記第1のモジュールと依存関係があり、かつ、前記第4のモジュールより古い世代の第3のモジュールを特定し、
    前記第3のモジュールと、前記第4のモジュールとを実行することを特徴とする請求項1又は2に記載の計算機システム。
  4. 前記計算機システムは、前記第1のモジュールと第2のモジュールとを実行する場合、依存関係にない前記モジュールのうち、第1のモジュールと整合する世代の前記モジュールを実行することを特徴とする請求項1から3のいずれか一つに記載の計算機システム。
  5. 前記計算機システムは、
    前記第2の記憶領域に複製されるデータを示す情報を保持し、
    前記保持される情報に従って、前記第1の記憶領域に格納されるデータを、前記第2の記憶領域に複製することによって、前記第1の記憶領域と前記第2の記憶領域とに同じデータを格納し、
    前記第2のモジュールは、その実行のために用いられるデータのうち、前記第2の記憶領域に格納されているデータは、当該第2の記憶領域に格納されたデータを用い、前記第2の記憶領域に格納されていないデータは、前記第1の記憶領域に格納されたデータを用いることを特徴とする請求項1から4のいずれか一つに記載の計算機システム。
  6. 前記計算機システムは、
    前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果とのうち、比較すべきデータを示す情報を保持し、
    前記比較すべきデータを示す情報に従って、前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果とを比較するためのデータを生成することを特徴とする請求項1から5のいずれか一つに記載の計算機システム。
  7. 前記メモリは、第3の記憶領域を含み、
    前記計算機システムは、
    前記第1の記憶領域に格納されるデータを、前記第3の記憶領域に複製し、
    前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果と、前記第3の記憶領域に複製されたデータとを、比較するためのデータを生成することを特徴とする請求項1から6のいずれか一つに記載の計算機システム。
  8. 前記計算機システムは、
    前記第1のモジュールが実行される時刻と、前記第2のモジュールが実行される時刻とを取得し、
    前記取得された第1のモジュールが実行される時刻と、前記取得された第2のモジュールが実行される時刻との時間差を算出し、
    前記取得された第2のモジュールが実行される時刻と、前記算出された時間差とによって、前記第2のモジュールを実行するために用いる時刻を補正することを特徴とする請求項1から7に記載の計算機システム。
  9. 前記計算機システムは、
    前記第1のモジュールが実行される時刻を取得し、
    前記第1のモジュールが実行される時刻によって、前記第1及び前記第2のモジュールを実行することを特徴とする請求項1から7に記載の計算機システム。
  10. メモリを備え、計算機で実行可能なプログラムである複数のモジュールを実行する計算機によるモジュール実行方法であって、
    前記モジュールは、第2の前記モジュールと、前記第2のモジュールより古い世代の第1の前記モジュールとを含む、複数の世代の前記モジュールを含み、
    前記メモリは、第1の記憶領域と第2の記憶領域とを含み
    前記方法は、
    前記計算機が、前記第1の記憶領域と前記第2の記憶領域とに同じデータを格納し、
    前記計算機が、前記第1の記憶領域に格納されるデータを用いて、前記第1のモジュールを実行し、
    その後、前記計算機が、前記データを複製された第2の記憶領域に格納されるデータを用いて、前記第2のモジュールを実行し、
    前記計算機が、前記第1のモジュールが実行された結果と、前記第2のモジュールが実行された結果とを比較することを特徴とするモジュール実行方法。
  11. 第2の前記モジュールにおいて問題が発生する前、前記計算機が、前記第1の記憶領域に格納されるデータを用いて、前記第2のモジュールを実行し、
    前記第2のモジュールにおいて問題が発生した場合、前記計算機が、前記第1のモジュールを実行した後、前記第2のモジュールを実行することを特徴とする請求項10に記載のモジュール実行方法。
  12. 前記計算機は、前記複数のモジュール間の依存関係を保持し、
    前記方法は、
    前記第1のモジュールと第2のモジュールとを実行する場合、前記計算機が、前記第2のモジュールと依存関係にある第4の前記モジュールを特定し、
    前記計算機が、前記第1のモジュールと依存関係があり、かつ、前記第4のモジュールより古い世代の第3のモジュールを特定し、
    前記計算機が、前記第3のモジュールと、前記第4のモジュールとを実行し、
    前記計算機が、依存関係にない前記モジュールのうち、第1のモジュールと整合する世代の前記モジュールを実行することを特徴とする請求項10又は11に記載のモジュール実行方法。
  13. 前記計算機は、前記第2の記憶領域に複製されるデータを示す情報を保持し、
    前記方法は、
    前記計算機が、前記保持される情報に従って、前記第1の記憶領域に格納されるデータを、前記第2の記憶領域に複製することによって、前記第1の記憶領域と前記第2の記憶領域とに同じデータを格納し、
    前記計算機が、前記第2のモジュールは、その実行のために用いられるデータのうち、前記第2の記憶領域に格納されているデータは、当該第2の記憶領域に格納されたデータを用い、前記第2の記憶領域に格納されていないデータは、前記第1の記憶領域に格納されたデータを用いることを特徴とする請求項10から12のいずれか一つに記載のモジュール実行方法。
  14. 前記計算機は、前第1のモジュールの実行結果と、前記第2のモジュールの実行結果とのうち、比較すべきデータを示す情報を保持し、
    前記メモリは、第3の記憶領域を含み、
    前記方法は、
    前記計算機が、前記第1の記憶領域に格納されるデータを、前記第3の記憶領域に複製し、
    前記計算機が、前記比較すべきデータを示す情報に従って、前記第1のモジュールが実行された結果と、前記第2のモジュールが実行された結果とを比較するためのデータを生成し、
    前記計算機が、前記第1のモジュールの実行結果と、前記第2のモジュールの実行結果と、前記第3の記憶領域に複製されたデータとを、比較するためのデータを生成することを特徴とする請求項10から13のいずれか一つに記載のモジュール実行方法。
  15. 前記方法は、
    前記計算機が、前記第1のモジュールが実行される時刻と、前記第2のモジュールが実行される時刻とを取得し、
    前記計算機が、前記取得された第1のモジュールが実行される時刻と、前記取得された第2のモジュールが実行される時刻との時間差を算出し、
    前記計算機が、前記取得された第2のモジュールが実行される時刻と、前記算出された時間差とによって、前記第2のモジュールを実行するために用いる時刻を補正することを特徴とする請求項10から14のいずれか一つに記載のモジュール実行方法。
JP2010081827A 2010-03-31 2010-03-31 計算機システム、及び、モジュール実行方法 Active JP5428050B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010081827A JP5428050B2 (ja) 2010-03-31 2010-03-31 計算機システム、及び、モジュール実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010081827A JP5428050B2 (ja) 2010-03-31 2010-03-31 計算機システム、及び、モジュール実行方法

Publications (2)

Publication Number Publication Date
JP2011215760A true JP2011215760A (ja) 2011-10-27
JP5428050B2 JP5428050B2 (ja) 2014-02-26

Family

ID=44945437

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010081827A Active JP5428050B2 (ja) 2010-03-31 2010-03-31 計算機システム、及び、モジュール実行方法

Country Status (1)

Country Link
JP (1) JP5428050B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018018121A (ja) * 2016-07-25 2018-02-01 富士通株式会社 データベース制御プログラム、データベース制御方法及びデータベース制御装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0962626A (ja) * 1995-08-21 1997-03-07 Hitachi Ltd 分散処理システムのオンラインテスト方法
JPH10320234A (ja) * 1997-05-21 1998-12-04 Hitachi Ltd ソフトウェアの自動テスト方法
JP2000293365A (ja) * 1999-02-03 2000-10-20 Matsushita Electric Ind Co Ltd プログラム構成管理装置
JP2005165600A (ja) * 2003-12-02 2005-06-23 Nec Corp トランザクション処理システム、トランザクション処理方法およびプログラム
JP2007241432A (ja) * 2006-03-06 2007-09-20 Mitsubishi Electric Corp ソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラム
JP2008077215A (ja) * 2006-09-19 2008-04-03 Toshiba Corp 精算プログラムの検査装置及び検査方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0962626A (ja) * 1995-08-21 1997-03-07 Hitachi Ltd 分散処理システムのオンラインテスト方法
JPH10320234A (ja) * 1997-05-21 1998-12-04 Hitachi Ltd ソフトウェアの自動テスト方法
JP2000293365A (ja) * 1999-02-03 2000-10-20 Matsushita Electric Ind Co Ltd プログラム構成管理装置
JP2005165600A (ja) * 2003-12-02 2005-06-23 Nec Corp トランザクション処理システム、トランザクション処理方法およびプログラム
JP2007241432A (ja) * 2006-03-06 2007-09-20 Mitsubishi Electric Corp ソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラム
JP2008077215A (ja) * 2006-09-19 2008-04-03 Toshiba Corp 精算プログラムの検査装置及び検査方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200100613014; 榊原 彰: 'IBMのITアーキテクトが実践手法を伝授 eシステム開発の品質にこだわる(第4回)' 月刊ソリューションIT 第13巻,第6号, 20010601, p.63-67, 株式会社リックテレコム *
JPN6013031497; 榊原 彰: 'IBMのITアーキテクトが実践手法を伝授 eシステム開発の品質にこだわる(第4回)' 月刊ソリューションIT 第13巻,第6号, 20010601, p.63-67, 株式会社リックテレコム *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018018121A (ja) * 2016-07-25 2018-02-01 富士通株式会社 データベース制御プログラム、データベース制御方法及びデータベース制御装置

Also Published As

Publication number Publication date
JP5428050B2 (ja) 2014-02-26

Similar Documents

Publication Publication Date Title
JP5970617B2 (ja) 開発支援システム
US10019256B2 (en) Systems and methods for incremental software development
JP6050342B2 (ja) リカバリーサイトにおけるレプリカされた仮想ストレージの管理
RU2554847C2 (ru) Контрольные точки для файловой системы
CN107102916B (zh) 在服务的次要位置重放作业
US20140351793A1 (en) Prioritizing test cases using multiple variables
Wang et al. Replication-based fault-tolerance for large-scale graph processing
US7509544B2 (en) Data repair and synchronization method of dual flash read only memory
CN111538719B (zh) 数据迁移方法、装置、设备及计算机存储介质
US10768928B2 (en) Software development work item management system
US10048978B2 (en) Apparatus and method for identifying a virtual machine having changeable settings
GB2500085A (en) Determining whether a standby database is synchronized with a primary database
Chen et al. Replication-based fault-tolerance for large-scale graph processing
US6073126A (en) Multi-computer system capable of abstractly and integrally describing system configuration and control contents
JP5428050B2 (ja) 計算機システム、及び、モジュール実行方法
CN111400256B (zh) 一种应用程序调用资源文件的方法及装置
WO2012104991A1 (ja) プログラムテスト方法、プログラムテストシステム及びプログラム
CN113448493B (zh) 用于备份数据的方法、电子设备和计算机可读介质
JP2007264814A (ja) レプリケーションデータ作成プログラム、レプリケーションデータ反映プログラムおよびデータベース装置
JP6327028B2 (ja) オブジェクトストレージシステムおよびその制御方法およびその制御プログラム
Miles et al. Software resilience using kokkos ecosystem
US20170357558A1 (en) Apparatus and method to enable a corrected program to take over data used before correction thereof
KR20110071218A (ko) 동적 업데이트 가능한 게임 서버 및 그 방법
WO2012066635A1 (ja) テスト方法、テスト装置及びテスト実行用プログラム
CN117170728A (zh) 分支处理方法、电子设备及计算机可读存储介质

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120312

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130626

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130702

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130830

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131111

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5428050

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150