(58)【調査した分野】(Int.Cl.,DB名)
複数のアプリケーションを構成する複数のモジュールごとに、前記アプリケーションによって実行される複数の案件のうちどの案件における操作によって当該モジュールが更新されたかを示すバージョンが、時系列で記憶される更新履歴情報と、
前記案件が実行される順序を変更する場合における、可能な変更後の順序を示す変更パターンと、
を格納する記憶部と、
前記案件のうち既に終了している最新の案件において更新されたモジュールを削除し、前記最新の案件の直前の案件において更新されたモジュールを元にして、操作中の案件において前記モジュールを更新したい旨の要求を受け付け、
前記直前の案件に始まり前記最新の案件を経て前記操作中の案件に至る第1の更新順序を、前記直前の案件に始まり前記操作中の案件を経て前記最新の案件に至る第2の更新順序に変更することが可能であるか否かを、前記変更パターンを参照することによって判断し、
前記判断の結果が可能である場合は、前記更新履歴情報において、前記最新の案件についてのレコードを削除し、前記操作中の案件についてのレコードを記憶する制御部と、
を備えることを特徴とする案件保守管理装置。
【発明を実施するための形態】
【0010】
以降、本発明を実施するための形態(「本実施形態」という)を、図等を参照しながら詳細に説明する。
【0011】
図1に沿って、案件とモジュールとの関係を説明する。
案件とは、企業内において一般的に行われる業務である。いま、案件Aは「決算」という名称が付され、案件Bは「法人税納税」という名称が付され、案件Cは「資産税納税」という名称が付されている。単純化のために、1つの案件には1つのアプリケーションが使用されるものとする。そしてそのアプリケーションにもやはり、「決算」、「法人税納税」及び「資産税納税」という名称が付されているものとする。
【0012】
通常、「決算」が終了しなければその企業の年間利益が確定しないので、「法人税納税」を行うことはできない。「決算」が終了しなければ、企業が保有する償却資産の簿価が確定しないので、「資産税納税」を行うこともできない。その意味で、「決算」及び「法人税納税」は厳密な先後関係にある。同様に、「決算」及び「資産税納税」も厳密な先後関係にある。一方、「法人税納税」及び「資産税納税」は、相互にどちらが先であってもかまわない。このことは、「A<B=C」と表現される(詳細後記)。
【0013】
モジュールとは、前記したようにアプリケーションの構成要素である。
図1の例では、モジュールは5つ存在する。それらは、「利益算出」m1、「資産管理」m2、「売上経費管理」m3、「税額算出」m4及び「銀行振込」m5である。そして、アプリケーション「決算」は、モジュール「利益計算」m1、モジュール「資産管理」m2及びモジュール「売上経費管理」m3から構成される。同様に、アプリケーション「法人税納税」は、モジュール「利益計算」m1、モジュール「税額算出」m4及びモジュール「銀行振込」m5から構成される。アプリケーション「資産税納税」は、モジュール「資産管理」m2、モジュール「税額算出」m4及びモジュール「銀行振込」m5から構成される。
【0014】
案件A「決算」が始まると、まず、その年の税制等を反映させる保守が、モジュールm1、m2及びm3に対して行われる。そしてその後直ちに、保守後のモジュールm1、m2及びm3を使用して案件Aが障害なく実行されるか否かがテストされる。テストの結果に問題がなければ、保守後のモジュールm1、m2及びm3を更新(コミット)したうえで、実際の「決算」が行われる。
【0015】
同様に、案件B「法人税納税」が始まると、まず、その年の税制等を反映させる保守が、モジュールm1、m4及びm5に対して行われる。そしてその後直ちに、保守後のモジュールm1、m4及びm5を使用して案件Bが障害なく実行されるか否かがテストされる。いま、モジュールm1に注目すると、案件Aについて1度更新された後、案件Bについて再度更新されようとしている。したがって、再度の更新が、(翌年度の)案件Aに対して影響を与えることになるか否かを確認するために、案件A及びBの組合せテストを行う必要もある。そして、これらのテストの結果に問題がなければ、保守後のモジュールm1、m4及びm5を更新したうえで、実際の「法人税納税」が行われる。
【0016】
繰り返しの詳細説明は省略するが、同様に、案件C「資産税納税」について、モジュールm2、m4及びm5を更新するには、案件Cについてのテストだけではなく、案件A、B及びCの組合せテストを行い、テスト結果に問題がないことが条件となる。
【0017】
図2に沿って、モジュールが記憶される状態を説明する。
図2の左は、モジュールm1である。モジュールm1はメインデータ及びメタデータから構成される。メインデータは、「利益算出」を行うためのプログラムそのものである。モジュールm1のプログラムの機能は、例えば「売上経費期間配分」及び「資産減損処理」等である。メタデータは、モジュールを一意に特定する識別子(m1)、モジュールの名称及びモジュールが更新された年月日を有する。更新日に注目すると、「20130105」、「20130110」及び「20130112」の時点で、モジュールm1が更新され、それぞれの時点で更新された3つのモジュールm1が記憶されていることが分かる。モジュールm2(
図2の中央)及びモジュールm3(
図2の右)についても同様である。なお、実際は、年月日だけでなく時分秒単位で細かく更新時点が管理されているが、ここでは説明の単純化のために、年月日だけを記載した。
【0018】
図3に沿って、案件保守管理装置1の構成を説明する。案件保守管理装置1は、一般的なコンピュータである。案件保守管理装置1は、中央制御装置11、例えばマウス、キーボードのような入力装置12、例えばディスプレイのような出力装置13、主記憶装置14、補助記憶装置15及び通信装置16を有している。これらの各装置は、バスによって相互に接続されている。補助記憶装置15は、案件モジュール対応情報31、コミット順序情報32、更新履歴情報33、コミット順序変更情報34、コミット解除コスト算出情報35、案件詳細情報36及び案件評価情報37を格納している(いずれも詳細後記)。補助記憶装置15は、モジュール41(
図1における符号m1等)も格納している。
【0019】
主記憶装置14内に記載されている更新履歴管理部21は、プログラムである。本実施形態において、「○○部は」というように主体を記した場合は、中央制御装置11が、そのプログラムを補助記憶装置15から主記憶装置14にロードしたうえで、そのプログラムの機能(詳細後記)を実現するのとする。
案件保守管理装置1は、ネットワーク3を介して、端末装置2と接続されている。端末装置2もまた同様に、相互にバスで接続された、中央制御装置、入力装置、出力装置、主記憶装置、補助記憶装置及び通信装置(図示せず)を有している。端末装置2は通常複数存在し、複数のユーザが、端末装置2を介してモジュール41の保守を行う。もちろん、ユーザは、案件保守管理装置1を直接操作することによって、モジュール41の保守を行うこともできる。
【0020】
(案件モジュール対応情報)
図4(a)に沿って、案件モジュール対応情報31を説明する。案件モジュール対応情報31においては、案件ID欄101に記憶された案件IDに関連付けて、モジュールID欄102にはモジュールIDが記憶されている。
案件ID欄101の案件IDは、案件を一意に特定する識別子である。
モジュールID欄102のモジュールIDは、モジュールを一意に特定する識別子である。
図4(a)の例えば1行目に注目すると、案件IDが「A」である案件においては、モジュールIDが「m1」、「m2」及び「m3」である3つのモジュールから構成されるアプリケーションが使用されることがわかる。これは、
図1の、案件A「決算」、モジュールm1「利益算出」、モジュールm2「資産管理」及びモジュールm3「売上経費管理」の関係そのものである。
【0021】
(コミット順序情報)
図4(b)に沿って、コミット順序情報32を説明する。コミット順序情報32においては、案件ID欄111に記憶された案件IDに関連付けて、標準コミット順序欄112には標準コミット順序が記憶されている。
案件ID欄111の案件IDは、
図4(a)の案件IDと同じである。
標準コミット順序欄112の標準コミット順序は、モジュールを更新する順序であって、案件に対して定義される。「標準」とは、順序が変更可能であることを意味する(詳細後記)。
【0022】
案件ID「A」等は、
図1の「A」等に対応している。すると、
図4(b)の1〜3行目のレコードは、まず「決算」について使用されるモジュールが更新され、次に、「法人税納税」について使用されるモジュールが更新され、最後に、「資産税納税」について使用されるモジュールが更新されるべきであることを示すことになる。なお、例えば1行目のレコードは、「決算」において、モジュールm1、m2及びm3が、それぞれの間でどのような順序で更新されるかを決めているのではない。
【0023】
(更新履歴情報)
図5に沿って、更新履歴情報33を説明する。更新履歴情報33においては、履歴ID欄121に記憶された履歴IDに関連付けて、日時欄122には日時が、バージョン欄123には、バージョンが記憶されている。
履歴ID欄121の履歴IDは、更新履歴情報33のレコードを一意に特定する識別子である。
日時欄122の日時は、当該レコードが作成された年月日時分秒である。
バージョン欄123は、モジュールIDを見出しとする小欄123a〜123jを有している。小欄123a〜小欄123jのそれぞれには、バージョンが記憶されている。バージョンとは、案件ID(「A」、「B」等)又は文字列「org」である。「org」は、そのモジュールが初期状態であることを示す。「A」は、そのモジュールが、案件「A」に使用されることによって更新されたことを示す。
【0024】
図5の1行目のレコードに注目すると、日時「20130105 10:00:00」において、すべてのモジュールが初期状態にあることがわかる。
次いで、2行目のレコードに注目すると、日時「20130110 10:00:00」において、モジュールm1、モジュールm2及びモジュールm3が案件「A」に使用されることによって更新されており、他のモジュールは初期状態のままであることがわかる。
さらに、3行目のレコードに注目すると、日時「20130112 10:00:00」において、モジュールm1、モジュールm4及びモジュールm5が案件「B」に使用されることによって更新されていることがわかる。そして、モジュールm2及びモジュールm3は、前回の更新以降変化がなく、他のモジュールは依然として初期状態のままであることもわかる。
【0025】
最後に、4行目のレコードに注目すると、日時「20130115 10:00:00」において、モジュールm2、モジュールm4及びモジュールm5が案件「C」に使用されることによって更新されたことがわかる。そして、モジュールm1及びモジュールm3は、前回の更新以降変化がなく、他のモジュールは依然として初期状態のままであることもわかる。
【0026】
視点を変えて、モジュールm1についての小欄123aを列方向に見る。すると、モジュールm1は、初期状態から、案件「A」に使用されて一度更新され、その後、案件「B」に使用されて再度更新されていることがわかる。
図5からは直接わからないが、案件保守管理装置1は、モジュールm1の最新のバージョン「B」を補助記憶装置15に必ず記憶している。そして、次にモジュールm1が更新される際は、モジュールm1の最新のバージョン「B」が基準になる。バージョン「B」が基準になるとは、変更された箇所がバージョン「B」に上書きされ、変更されなかった箇所についてはバージョン「B」のその箇所が単純にコピーされることによって、新たなバージョンが作成されることを意味する。要するに、バージョン「B」がコピーを作成する元になることを意味する。
【0027】
案件保守管理装置1は、モジュールm1の旧バージョン「org」及びモジュールm1の旧バージョン「A」を記憶していてもかまわない(
図2参照)。ただし、旧バージョンがコピーを作成する元になることは稀である。したがって、案件保守管理装置1は、旧バージョンに対して、コスト削減のための措置を講じる。当該措置は、例えば、旧バージョンを、補助記憶装置15のうち比較的維持コストが小さい特定の領域に格納する、主記憶装置14にキャッシュとして取り出さない、所定の時間が経過すると消去する、最新バージョンとの差分データのみとして記憶する、等の措置を含む。
【0028】
(コミット推移)
図6及び
図7に沿って、コミット推移を説明する。
いま、案件Aが終了しており、案件Bも終了しており、案件Cが終了する直前の時点であるとする。更新履歴情報33は、
図6(a)の状態を経て、さらに
図6(b)の状態も経た後、
図6(c)の状態になっている。しかしながら、何らかの理由で、案件Bにおけるモジュールの更新はなかったこととして、案件Cにおけるモジュールの更新を行いたいような事情が生じたとする。
【0029】
このような事情は、
図1に示した「決算」、「法人税納税」及び「資産税納税」の例では発生しにくい。あえて想定すれば、「法人税納税」では、納税者が法人税(国税)を銀行口座に振込む際の手数料がかからないことを前提にモジュールm5の更新が行われていた。しかしながら、その後、「資産税納税」では、納税者が資産税(資産が所在する自治体の地方税)を銀行口座に振込む際の手数料が自治体ごとに異なることが判明した、のようなことはあり得る。このような場合、案件Bでのモジュールの更新を解除し、案件Cを開始し、案件Aで更新したモジュールをコピー元として、案件Cで使用したモジュールを更新したいという動機が生じる。そして、それは可能であるか否かが問題となる。
【0030】
それが可能であれば、更新履歴情報33は、
図6(c)の状態から
図7(d)の状態に遷移する。つまり、「H0003」のレコードが削除され、案件Bでのモジュールの更新が解除されることになる。このことを、「コミット解除」と呼ぶ。なお、
図7(d)の状態は
図6(b)の状態と同じである。その後、案件Aで更新したモジュールをコピー元として、案件Cで使用したモジュールが更新されると、更新履歴情報33は、
図7(e)の状態に遷移する。さらにその後、案件Cで更新したモジュールをコピー元として、案件Bで使用したモジュールが更新されると、更新履歴情報33は、
図7(f)の状態に遷移する。
【0031】
(標準コミット順序の変更)
標準コミット順序を変更することが可能であるか否かを判断する判断基準は3つ存在する。その第1は、コミット順序変更情報34(
図8)であり、その第2は、コミット解除コスト算出情報35(
図9(a))であり、その第3は、案件詳細情報(
図10(a))である。
【0032】
(コミット順序変更情報)
図8に沿って、コミット順序変更情報34を説明する。コミット順序変更情報34においては、パターンID欄131に記憶されたパターンIDに関連付けて、変更パターン欄132には変更パターンが、適用フラグ欄133には適用フラグが記憶されている。
パターンID欄131のパターンIDは、変更パターン(直ちに後記)を一意に特定する識別子である。
変更パターン欄132の変更パターンは、複数の案件IDを等号(=)又は不等号(<)で直列的に連結した数式であり、標準コミット順序に対して、どのような変更を行うことが可能であるかを示している。
適用フラグ欄133の適用フラグは、その変更パターンが実際に適用可能であることを示す情報であり、ここでは「○」である。
【0033】
変更パターンについて更に詳しく説明する。一般的に、「A<B」は、案件Bに使用されるモジュールの更新が、案件Aに使用されるモジュールの更新の後に行われなければならないことを示す。「A=B」は、案件Aに使用されるモジュールの更新と、案件Bに使用されるモジュールの更新との前後関係は問われないことを示す。そして、「A<B=C」は、「A<B」かつ「B=C」を意味する。『「A<B」かつ「B=C」』からは、当然に、「A<C」であることが導かれる。いま、案件の前後関係を「→」を使用して「前→後」のように表すことにする。すると、「A<B=C」は、「A→B→C」及び「A→C→B」を許容する一方、「B→A→C」、「B→C→A」、「C→A→B」及び「C→B→A」を許容しないことになる。
【0034】
(コミット解除コスト算出情報)
図9(a)に沿って、コミット解除コスト算出情報35を説明する。コミット解除コスト算出情報35においては、更新前案件ID欄141に記憶された更新前案件IDに関連付けて、更新後案件ID欄142には更新後案件IDが、差分データ量欄143には差分データ量が、作業時間欄144には作業時間が、作業賃金欄145には作業賃金が、テスト費用欄146にはテスト費用が記憶されている。
【0035】
更新前案件ID欄141の更新前案件IDは、モジュールのあるバージョンをコピー元にして他のバージョンを作成する場合の、「あるバージョン」が使用される案件の案件IDである。「*」については後記する。
更新後案件ID欄142の更新後案件IDは、モジュールのあるバージョンをコピー元にして他のバージョンを作成する場合の、「他のバージョン」が使用される案件の案件IDである。
「*」は、その案件に係るモジュールが、既に更新されたうえで、補助記憶装置15に記憶されていることを示す。「*」が付されていないということは、その案件に係るモジュールが更新されてはいないが、更新された状態を知ることができる状態にあることを示す。更新された状態を知ることができる状態とは、例えば、補助記憶装置15に更新された状態で記憶される直前の、主記憶装置14に一時的に記憶されている状態である。
【0036】
差分データ量欄143の差分データ量は、更新前案件IDが特定する案件において更新された(される予定の)モジュールと、更新後案件IDが特定する案件において更新される予定の(更新された)対応するモジュールとの間の差分のデータ量である。さらに詳しく言えば、対応するモジュール間の差分のデータ量を、すべてのモジュールについて合計したデータ量である。
作業時間欄144の作業時間は、更新後案件IDが特定する案件において、ユーザが差分データを作成するために要する時間である。
作業賃金欄145の作業賃金は、更新後案件IDが特定する案件において、ユーザが差分データを作成することに対して支払われる賃金である。
テスト費用欄146のテスト費用は、更新後案件IDが特定する案件におけるテストの費用である。ここで、テストとは、当該案件単体のテストであって、過去の案件分も併せた組合せテストではない。
【0037】
案件保守管理装置1の更新履歴管理部21は、案件Aが終了し、案件Bも終了した時点で、
図9(a)のレコードR
1を作成する。案件Aにおいて更新されたモジュール(「org」が元になっている)及び案件Bにおいて更新されたモジュール(「A」が元になっている)の両者が、補助記憶装置15に記憶されている。したがって、変更前案件ID欄141の「A」には「*」が付されており、変更後案件ID欄142の「B」にも「*」が付されている。
【0038】
更新履歴管理部21は、案件Aが終了し、案件Bも終了した後であって、案件Cが終了する直前の時点で、
図9(a)のレコードR
2、R
3及びR
4を作成する。この時点では、案件Aにおいて更新されたモジュール(「org」が元になっている)及び案件Bにおいて更新されたモジュール(「A」が元になっている)の両者が、補助記憶装置15に記憶されている。さらに、案件Cにおいて更新される直前のモジュールが主記憶装置14に一時的に記憶されている。したがって、変更前案件ID欄141及び変更後案件ID欄142の「C」には「*」が付されていない。
【0039】
すると、更新履歴管理部21は、「A」を元とする場合と、「B」を元とする場合の2つにわけて、案件Cにおいて変更が加えられたモジュールを更新する際の差分データ量を算出することができる。同様に、更新履歴管理部21は、将来に繰り返される案件Bにおいて「C」を元にしてモジュールを更新する際の差分データ量を算出することができる。さらに、更新履歴管理部21は、例えば差分データ量に対して所定の換算係数を乗じて、作業時間、作業賃金及びテスト費用(いずれも想定値)を決定することができる。
【0040】
案件A、案件B及び案件Cに使用されるモジュールが
図4(a)に示される通りであり、案件A、案件B及び案件Cの標準コミット順序が、
図4(b)に示される通りであるとする。このとき、コミットを解除するコストを、
図9(a)及び
図9(b)を用いて説明する。
【0041】
(想定1)
図9(b)の1行目に注目する。案件A、案件B及び案件Cが、その順に予定通りに進捗した場合、最終的にかかる費用は、作業賃金として30万円(欄153)であり、テスト費用として60万円(欄154)である。これらの値は、
図9(a)の、レコードR
1及びレコードR
3の作業賃金の和及びテスト費用の和である。同様に算出した最終的な差分データ量は3.0MB(欄151)であり、最終的な作業時間は30時間(欄152)である。なお、バージョン「org」からバージョン「A」に至るコスト等は捨象する(想定2でも同様)。
【0042】
(想定2)
続いて、
図9(b)の2行目に注目する。案件Aが終了し、案件Bも終了した後、案件Cを開始し、案件Bの終了はなかったことにして、案件Cを終了し、その後、案件Bをやり直す場合を考える。最終的にかかる費用は、作業賃金として22万円(欄153)であり、テスト費用として44万円(欄154)である。これらの値は、
図9(a)の、レコードR
1、R
2及びレコードR
4の作業賃金の和及びテスト費用の和である。同様に算出した最終的作業時間は22時間(欄152)である。最終的な差分データは、1.2MB(欄151)である。この値は、
図9(a)の、レコードR
2及びレコードR
4の差分データの和である。レコードR
1の「1.0MB」は、消去されてしまうものであり、加算する意味はない。
【0043】
(想定1と想定2の比較)
図9(b)の1行目及び2行目のレコードを比較すると、費用及び時間の観点からは、「想定1」の方が不利である。これは、案件Bで更新したモジュールをコピー元として案件Cで使用したモジュールを更新することは、案件Aで更新したモジュールをコピー元として案件Cで使用したモジュールを更新することに比して変更部分が多いことを意味する。当然その差は、作業時間、作業賃金及びテスト費用に反映される。
差分データ量の観点からは、想定1と想定2との最終的な差分データ量の差は、3.0−1.2=1.8MBであり、実際上無視できる水準である。しかしながら、この差が膨大になり、かつ有料の外部リソースに記憶されるような場合は、無視できなくなる。
【0044】
(案件詳細情報)
図10(a)に沿って、案件詳細情報36を説明する。案件詳細情報36においては、案件ID欄161記憶された案件IDに関連付けて、操作類型欄162には操作類型が、必要性類型欄163には必要性類型が、優先度欄164には優先度が、モジュール数欄165にはモジュール数が、更新回数欄166には更新回数が記憶されている。
案件ID欄161の案件IDは、
図4(a)の案件IDと同じである。
操作類型欄162の操作類型は、「画面系」又は「バッチ系」のいずれかである。「画面系」は、その案件が、画面項目の追加等、ユーザが視認する画面の構成に影響を与える案件であることを示す。「バッチ系」は、その案件が、夜間一括処理における演算方法の変更等、バッチ処理に影響を与える案件であることを示す。
【0045】
必要性類型欄163の必要性類型は、「M」又は「C」のいずれかである。「M」は、その案件が、バグ等の不具合に対する措置として必要であることを示す。「C」は、その案件が、制度の変更に伴う処理機能の追加等、業務の仕様を変更するために必要であることを示す。
優先度欄164の優先度は、案件の優先度を示す文字列であり、優先度が高い順に「緊急」、「高」、「中」及び「低」である。
モジュール数欄165のモジュール数は、その案件に使用されるアプリケーションを構成するモジュールの数である。
更新回数欄166の更新回数は、過去において、その案件が行われた結果、更新履歴情報33(
図5)のレコードが新たに作成された(更新された)回数である。
なお、「属性」には、操作類型、必要性類型、優先度、モジュール数及び更新回数が相当する。
【0046】
(案件詳細情報)
図10(b)に沿って、案件評価情報37を説明する。案件評価情報37においては、項目欄171に記憶された項目に関連付けて、選択肢欄172には選択肢が、点数欄173には点数が記憶されている。
項目欄171の項目は、案件を評価する際の区分であり、
図10(a)において説明した「操作類型」、「必要性類型」、「優先度」、「モジュール数」及び「更新回数」である。
選択肢欄172の選択肢は、
図10(a)においてその項目が示す各欄162〜166において、記憶される値そのもの、又は、記憶される値が属する数値範囲である。
点数欄173の点数は、案件に対して、その項目について与えられる部分点である。点数は、ユーザが任意に設定することができる。点数は、複数の案件間において、案件の重要度を示す尺度になる。点数が大きい案件は、点数が小さい案件が先に更新されていても、点数が小さい案件の更新を削除したうえで、更新されることができる。
【0047】
図10(b)のレコードを項目ごとに参照すると以下のことがわかる。
(1)操作類型(1及び2行目)
「バッチ系」の案件は、テスト後直ちに稼動されるとは限らない。したがって、「バッチ系」は、「画面系」よりも点数が低い。
(2)必要性類型(3及び4行目)
「M」の案件は、ユーザが現在直面している不具合を治癒するための案件である。したがって、「M」は、「C」よりも点数が高い。
(3)優先度(5〜8行目)
当然のことながら、優先度が高い案件であるほど、点数が大きい。
(4)モジュール数(9〜13行目)
案件を構成するモジュールの数が多いということは、他の案件に対する影響が大きいということである。したがって、モジュール数が多い案件であるほど、点数が大きい。
(5)更新回数(14〜17行目)
案件の更新回数が多いということは、その案件に対する変更要求が大きいということである。したがって、更新回数が多い案件であるほど、点数が大きい。
【0048】
(処理手順)
以降、処理手順を説明する。
図11の「第1の処理手順」は、コミット順序変更情報34(
図8)及びコミット解除コスト算出情報35(
図9(a))を使用する。
図12の「第2の処理手順」は、コミット順序変更情報34(
図8)及び案件詳細情報36(
図10(a))を使用する。いずれの処理手順も、コミット解除が可能であるか否かを判断するものであり、相互に代替的な関係にある。
【0049】
図11に沿って、第1の処理手順を説明する。第1の処理手順が開始される時点で以下の前提1〜5が成立しているものとする。
(前提1)案件モジュール対応情報31(
図4(a))、コミット順序情報32(
図4(b))及びコミット順序変更情報34(
図8)が、完成された状態で補助記憶装置15に記憶されている。
(前提2)案件A及び案件Bは既に終了している。したがって、更新履歴情報33(
図5)は、
図6(c)の状態で補助記憶装置15に記憶されている。
【0050】
(前提3)現在、案件Cが進行中であり、モジュールの変更(更新ではない)及びテストはすでに終了している。変更されたモジュールは、一時的に主記憶装置14に記憶されている。
(前提4)ユーザは、案件Bにおいて更新したモジュールに何らかの不具合を発見している。その結果、ユーザは、バージョン「B」を元としてバージョン「C」を更新するのではなく、バージョン「A」を元としてバージョン「C」を更新することを希望している。
(前提5)案件保守管理装置1は、現時点までに作成されたモジュールのバージョン「A*」、「B*」、「C」の内容及びテスト内容から、差分データ量、作業時間、作業賃金及びテスト費用を算出している。その結果、コミット解除コスト算出情報35(
図9(a))が、完成された状態で補助記憶装置15に記憶されている。
(前記6)ユーザは、端末装置2を使用して遠隔地より作業することも可能である。ただし、ここでは単純化のため、ユーザは案件保守管理装置1を使用して作業しているものとする。
【0051】
(用語)
説明を単純にするために、以下の通り語義の定義を行う。
「操作中案件」又は「操作中の案件」:ユーザが現在操作している案件であって、モジュールを更新する前の案件である。
「直前案件」又は「直前の案件」:ユーザがモジュールの更新をするに際し、コピー元とすることを希望する案件である。
「最新案件」又は「最新の案件」:現時点において記憶されている更新履歴情報33のレコードのうちの最新のレコードに初めて現れる案件である。
【0052】
ステップS201において、案件保守管理装置1の更新履歴管理部21は、モジュールを更新する旨の要求を受け付ける。具体的には、更新履歴管理部21は、ユーザが入力装置12を介して、当該要求を、直前案件ID及び操作中案件IDとともに入力するのを受け付ける。操作中案件IDとは、操作中案件の案件IDである。直前案件IDとは、直前案件の案件IDである。ここでは、直前案件IDとして「A」が受け付けられ、操作中案件IDとして「C」が受け付けられたものとして以降の説明を続ける。
【0053】
ステップS202において、更新履歴管理部21は、モジュールの更新を登録できるか否かを判断する。具体的には、更新履歴管理部21は、第1に、コミット順序情報32(
図4(b))から、直前案件ID及び操作中案件IDに対応する標準コミット順序を取得する。ここでは、直前案件IDについて「1」が、操作中案件IDについて「3」が取得される。
更新履歴管理部21は、第2に、更新履歴情報33から最新案件IDを取得する。最新案件IDとは、最新案件の案件IDである。ここでは、「B」が取得される。
【0054】
更新履歴管理部21は、第3に、以下の条件1及び条件2がすべて満たされるか否かを判断する。
(条件1)直前案件IDが最新案件IDに一致する。
(条件2)操作中案件IDに対応する標準コミット順序が、直前案件IDに対応する標準コミット順序の直後である。
ここでは、「条件1」は満たされず(A≠B)、「条件2」も満たされない(「3」は「1」の直後ではない)。
更新履歴管理部21は、第4に、判断の結果が「条件をすべて満たす」である場合(ステップS202“YES”)は、ステップS207に進み、それ以外の場合(ステップS202“NO”)は、ステップS203に進む。
【0055】
ステップS203において、更新履歴管理部21は、コミット順序を変更できるか否かを判断する。具体的には、更新履歴管理部21は、第1に、コミット順序変更情報34(
図8)から、適用フラグが記憶されているレコードの変更パターンを取得する。ここでは、「A<B=C」が取得される。
更新履歴管理部21は、第2に、ステップS203の「第1」において取得した変更パターンが、直前案件IDを「先」とし、操作中案件IDを「後」とし、最新案件IDを「そのさらに後」とする順序関係(この場合「A→C→B」)を許容するか否かを判断する。ここでは、「A<B=C」は、「A→C→B」を許容する。
更新履歴管理部21は、第3に、判断の結果が「許容する」である場合(ステップS203“YES”)は、ステップS204に進み、それ以外の場合(ステップS203“NO”)は、ステップS208に進む。
【0056】
ステップS204において、更新履歴管理部21は、コミット解除コストを算出する。具体的には、更新履歴管理部21は、第1に、更新履歴情報33及び操作中案件IDに基づいて、コミット解除を実行しない場合の第1の更新順序を作成する。いま、更新履歴情報33(
図6(c)の状態)の2行目にはバージョン「A」が記憶されており、3行目にはバージョン「B」が記憶されており、操作中案件IDは「C」である。したがって、第1の更新順序「A→B→C」が作成される。
更新履歴管理部21は、第2に、直前案件ID、操作中案件ID及び最新案件IDに基づいて、コミット解除を実行する場合の第2の更新順序を作成する。ここでは、第2の更新順序は、「直前案件ID→最新案件ID×,直前案件ID→操作中案件ID→最新案件ID」=「A→B×,A→C→B」となる。「×」は解除されるバージョンである。
【0057】
更新履歴管理部21は、第3に、
図9(a)及び
図9(b)の説明において前記した方法によって、第1の更新順序及び第2の更新順序の両者について、最終的な差分データ量、作業時間、作業賃金及びテスト費用を算出する。ここでは、
図9(b)に示した通りの算出結果となる。
更新履歴管理部21は、第4に、第1の比較値(直ちに後記)から第2の比較値(直ちに後記)を減算した結果である判断値を算出する。
【0058】
更新履歴管理部21は、第1の比較値として、以下の値を選択し得る。
(1):第1の更新順序についての最終的な作業賃金
(2):第1の更新順序についての最終的なテスト費用
(3):第1の更新順序についての最終的な作業時間
(4):第1の更新順序についての最終的な差分データ量
(5):(3)の値に所定の換算係数を乗算した金額
(6):(4)の値に所定の換算係数を乗算した金額
(7):(1)、(2)、(5)及び(6)の値のうちの、少なくとも2つ以上の和
更新履歴管理部21が、第2の比較値として、どのような値を選択し得るかについても全く同様である。
【0059】
ステップS205において、更新履歴管理部21は、判断値が閾値以上であるか否かを判断する。具体的には、更新履歴管理部21は、ステップS204の「第4」において算出した判断値が所定の閾値以上である場合(ステップS205“YES”)は、ステップS206に進み、それ以外の場合(ステップS205“NO”)は、ステップS208に進む。
【0060】
ステップS206において、更新履歴管理部21は、コミット解除を行う。具体的には、更新履歴管理部21は、更新履歴情報33から、最新案件IDに係るレコードを削除する。すると、更新履歴情報33は、
図6(c)の状態から、
図7(d)の状態に遷移する。さらに、更新履歴管理部21は、補助記憶装置15から、最新案件IDに係るモジュールそのものを削除する。
【0061】
ステップS207において、更新履歴管理部21は、コミットを行う。具体的には、更新履歴管理部21は、第1に、操作中案件IDを検索キーとして案件モジュール対応情報31(
図4(a))を検索し、該当するレコードのモジュールIDを取得する。
更新履歴管理部21は、第2に、更新履歴情報33(
図5)の新たなレコードを作成する。
更新履歴管理部21は、第3に、新たなレコードのバージョン欄123の小欄のうち、ステップS207の「第1」において取得したモジュールIDを見出しとして有する小欄に、操作中案件IDを記憶する。他の小欄には、直前のレコードのバージョンを記憶する。
更新履歴管理部21は、第4に、新たなレコードの履歴ID欄121及び日時欄122に、それぞれ、新たに採番した履歴ID及び現在の年月日時分秒を記憶する。この段階において、更新履歴情報33は、
図7(e)の状態になっている。
更新履歴管理部21は、第5に、直前案件IDに係るモジュールをコピー元として、操作中案件IDに係るモジュールを作成し、補助記憶装置15に記憶する。その後、処理手順を終了する。
【0062】
ステップS208において、更新履歴管理部21は、エラーメッセージを出力する。具体的には、更新履歴管理部21は、出力装置13にメッセージ「コミット順序を変更することはできません」を表示する。その後、処理手順を終了する。
【0063】
図12に沿って、第2の処理手順を説明する。第2の処理手順が開始される時点で、前記した「前提1」、「前提2」、「前提3」、「前提4」及び「前記6」が成立しているものとする。そして前記した「前提5」の代わりに、以下の「前提7」が成立しているものとする。
(前提7)案件詳細情報36(
図10(a))及び案件評価情報37(
図10(b))が、完成された状態で補助記憶装置15に記憶されている。
【0064】
第1の処理手順(
図11)と第2の処理手順(
図12)は、ステップS201〜S203及びS206〜S208を共有している。したがって、以降では、変更箇所であるステップS204b及びS205bのみを説明する。
【0065】
ステップS204bにおいて、更新履歴管理部21は、案件の合計点数を算出する。具体的には、更新履歴管理部21は、第1に、操作中案件IDを検索キーとして案件詳細情報36(
図10(a))を検索し、該当したレコードを取得する。
更新履歴管理部21は、第2に、ステップS204bの「第1」において取得したレコードの各欄の見出し及びその欄の値を検索キーとして、案件評価情報37(
図10(b))を検索し、該当する5つのレコードの点数を取得する。そして取得した点数を合計し、第1の合計点数とする。操作中案件IDは「C」であるので、合計点数は、「1+2+2+1+3=9」となる。
【0066】
更新履歴管理部21は、第3に、最新案件IDを検索キーとして案件詳細情報36(
図10(a))を検索し、該当したレコードを取得する。
更新履歴管理部21は、第4に、ステップS204bの「第3」において取得したレコードの各欄の見出し及びその欄の値を検索キーとして、案件評価情報37(
図10(b))を検索し、該当する5つのレコードの点数を取得する。そして取得した点数を合計し、第2の合計点数とする。最新案件IDは「B」であるので、第2の合計点数は、「2+3+3+1+3=12」となる。
更新履歴管理部21は、第5に、第1の合計点数から第2の合計点数を減算し、減算の結果を「合計点数の差」とする。このとき、合計点数の差は「9−12=△3」となる。
【0067】
ステップS205bにおいて、更新履歴管理部21は、合計点数の差が閾値以上であるか否かを判断する。具体的には、更新履歴管理部21は、ステップS204bの「第5」における「合計点数の差」が所定の閾値以上である場合(ステップS205“YES”)は、ステップS206に進み、それ以外の場合(ステップS205“NO”)は、ステップS208に進む。
ここで、所定の閾値が「0」であるとする。すると、「△3<0」であるので、更新履歴管理部21は、ステップS208に進むことになる。このことは、案件Bの重要度は、案件Cの重要度よりも大きく、案件Cは、案件Bにおけるモジュールの更新を解除することができない(案件Cは、案件Bを追い越せない)ことを示す。
【0068】
(第1の処理手順と第2の処理手順の組合せ)
第1の処理手順において、更新履歴管理部21は、ステップS205“YES”の場合、第2の処理手順のステップS204bを実行し、その後直ちに第2の処理手順のステップS205bを実行してもよい。
【0069】
(実施形態の効果)
本実施形態は、以下の効果を生む。
・複数のモジュールから構成されるアプリケーションを使用する複数の案件間のモジュールの更新順序について、更新済の案件の更新を解除して、操作中の案件を更新することが可能であるか否かが容易に判断できる。
・更新済の案件を元にして操作中の案件を更新する場合のコストと、更新済の案件の直前に更新された案件を元にして操作中の案件を更新する場合のコストと、を比較したうえで、前記判断をすることが可能になる。
・更新済の案件の重要度と、操作中の案件の重要度と、を比較したうえで、前記判断をすることが可能になる。
【0070】
なお、本発明は前記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、前記した実施例は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、前記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウエアで実現してもよい。また、前記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウエアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。