図1は、管理サーバの概要を示す図である。管理サーバ101は、プログラムの開発と検証を支援する管理サーバである。開発システム111は、開発者がプログラムの開発に用いるシステムである。管理サーバ101は、LAN(Local Area Network)などのネットワークを介して開発システム111と接続している。
管理サーバ101は、資産管理部103、メンバー管理部105、ワークフロー管理部107及び品質管理部109を有している。資産管理部103は、プログラムを資産として管理するモジュールである。メンバー管理部105は、開発者などのメンバーについての属性データを管理するモジュールである。ワークフロー管理部107は、プログラム検証のワークフローを管理するモジュールである。品質管理部109は、修正されたプログラムに関わる検証結果である品質記録を管理するモジュールである。
図2は、資産管理部とメンバー管理部のモジュール構成例を示す図である。資産管理部103は、プログラム格納部201、管理データ格納部203、貸出部205及び返却部207を有している。
プログラム格納部201は、プログラムを格納している。管理データ格納部203は、プログラムの管理データを格納している。貸出部205は、プログラムを開発者に貸し出すように動作する。返却部207は、貸し出したプログラムの返却を受け付けるように動作する。
メンバー管理部105は、更新部209とメンバーデータ格納部211とを有している。更新部209は、プログラムの開発と検証に関わるメンバーのデータを更新するように動作する。メンバーデータ格納部211は、上記メンバーデータを格納している。
管理データ格納部203は、プログラム格納部201におけるプログラムの格納位置を記憶している。貸出部205は、開発システム111からプログラムの指定を受け付け、指定されたプログラムをプログラム格納部201から読み出し、開発システム111へ送信する。貸出部205は、転送したプログラム名に対応付けて、貸出日、貸し出した開発者名を、管理データ格納部203に記憶させる。
借り受けた開発者は、開発システム111を用いて、借り受けたプログラムを修正し、修正されたプログラムを返却部207に送信する。
返却部207は、開発システム111から返却されたプログラムを受信し、プログラム格納部201に記憶させる。返却部207は、返却されたプログラム名に対応付けて、返却日とプログラム格納部201の格納位置を管理データ格納部203に記憶させる。
更新部209は、プログラムの修正の都度、管理データ格納部203の管理データに基づいて修正前のプログラムと修正後のプログラムを特定し、当該プログラムを修正した開発者についての属性を更新する。
メンバーデータ格納部211は、メンバー毎にメンバーデータを有している。図3に、メンバーデータの例を示す。メンバーデータは、プログラムの開発と検証に関わる可能性のあるメンバー毎に、名前、所属グループ、メンバー属性、修正プログラム数、修正プログラム、修正回数、修正ステップ数、経験外部モジュール及び経験OSSの項目を有している。
名前は、そのメンバーの名前である。所属グループは、そのメンバーの属するグループである。メンバー属性は、そのメンバーが果たすプログラムの開発と検証における役割である。メンバー属性には、例えば、リーダ、開発者あるいはテスターなどの役割が割り当てられる。名前と、所属グループと、メンバー属性とは、予め設定されている。
修正プログラム数は、そのプログラマが修正したプログラムの数である。メンバーデータは、修正プログラム数分の修正プログラムと修正回数と修正ステップ数のデータを含んでいる。
修正プログラムは、そのプログラマが修正したプログラムの名前を示す。修正回数は、そのメンバーがそのプログラムを修正した回数である。修正ステップ数は、そのメンバーがそのプログラムに対して修正したステップ数である。
経験外部モジュールは、そのメンバーが用いたことがある外部モジュールである。経験OSS(Open Source Software)は、そのメンバーが用いたことがある外部OSSである。外部モジュールとOSSは、処理単位の例である。メンバーデータは、処理単位として、そのプログラマが用いたことがある内部モジュールである経験内部モジュールを含むようにしてもよい。
図4に、ワークフロー管理部のモジュール構成例を示す。ワークフロー管理部107は、受付部401、比較部403、比較データ記憶部405、標準ワークフロー格納部407、生成部409、個別ワークフロー格納部411、特定部413及び出力部415を有している。
受付部401は、ワークフローの生成などの指示を受け付けるように動作する。受付部401は、実行したアクティビティの実行日と実行結果を受け付け、個別ワークフローに含まれるアクティビティデータに設定する動作も行う。比較部403は、修正前のプログラムと修正後のプログラムを比較し、比較データを得るように動作する。比較データは、比較部403による比較結果を含むデータである。比較データ記憶部405は、比較データを記憶する。
標準ワークフロー格納部407は、修正されたプログラムの検証を行う標準の手順を定めた標準ワークフローを格納している。生成部409は、標準ワークフローに含まれる複数のアクティビティの各々について、比較結果がアクティビティの有効条件を満たすか否かを判定し、有効条件を満たす一又は複数のアクティビティからなる個別ワークフローを生成するように動作する。個別ワークフロー格納部411は、修正されたプログラムに対して生成される個別ワークフローを格納する。
特定部413は、メンバーの属性が、個別ワークフローのアクティビティにおける実行者の選定条件を満たすか否かを判定し、アクティビティを実行するメンバーを特定するように動作する。出力部415は、個別ワークフローをチャートとして表示するように動作する。
以下、ワークフローを生成する処理について説明する。この例では、プログラム修正の量や質に応じて、実行すべきアクティビティを選び出し、個別のワークフローを生成する。
図5は、ワークフローの生成処理フローの例を示す図である。まず、受付部401は、ワークフローを生成する指示を受け付ける(S501)。ワークフローを生成する指示には、検証対象となる修正プログラムを特定する情報が含まれている。あるいは、受付部401は、生成の指示と別に、検証対象となる修正プログラムを特定する情報を受け付ける。
S503〜S511で、比較部403は、修正前のプログラムと修正後のプログラムを比較する。この比較により、比較データが得られる。以下、比較データの例とともに処理について説明する。
図6に、比較データの例を示す。この比較データの例は、修正割合と、複雑度比と、追加外部モジュールと、追加OSSとを有している。
修正割合は、プログラムに対する修正の割合である。つまり、修正割合は、全体のコードと修正したコードの量的な比を意味する。複雑度比は、修正前プログラムの複雑度と修正後プログラムの複雑度の比である。複雑度比は、アルゴリズムの難解さが増したことを示す指標である。
追加外部モジュールは、修正により追加された外部モジュールである。追加OSSは、修正により追加されたOSSである。追加外部モジュールと追加OSSは、修正後プログラムにおいて、修正前プログラムに対して追加した処理単位の例である。
この例では、プログラム単位の修正割合、複雑度比、追加外部モジュール及び追加OSSを示したが、プログラムの集合であるコンポーネント単位の修正割合、複雑度比、追加外部モジュール及び追加OSSを、比較データとして用いてもよい。更に、コンポーネントの集合であるシステム単位の修正割合、複雑度比、追加外部モジュール及び追加OSSを、比較データとして用いてもよい。
図5の処理に戻って、比較部403は、修正前プログラムを取得し(S503)、修正前プログラムの属性データを求める(S505)。比較部403は、例えば、修正前プログラムの複雑度を算出する。プログラムの複雑度の算出は、周知の方法により実施できるので、説明を省略する。更に、比較部403は、修正前プログラムで利用している外部モジュールを特定し、更に修正前プログラムで利用している外部OSSも特定する。
比較部403は、続いて、修正後プログラムを取得し(S507)、修正後プログラムの属性データを求める(S509)。比較部403は、例えば、修正後プログラムのステップ数を算出し、修正後プログラムの複雑度を算出する。更に、比較部403は、修正後プログラムで利用している外部モジュールを特定し、修正後プログラムで利用している外部OSSも特定する。
そして、比較部403は、比較データを求める(S511)。比較部403は、例えば、修正後プログラムと修正前プログラムを比較し、修正ステップ数を算出する。そして、修正ステップ数を修正後プログラムのステップ数で除して、修正割合を求める。また、比較部403は、修正後プログラムの複雑度を修正前プログラムの複雑度で除して、複雑度比を求める。
更に、比較部403は、修正後プログラムで利用している外部モジュールのうち、修正前プログラムで利用している外部モジュールを除いて、追加外部モジュールを特定する。同様に、比較部403は、修正後プログラムで利用している外部OSSのうち、修正前プログラムで利用している外部OSSを除いて、追加外部OSSを特定する。比較部403は、求めた修正割合と、求めた複雑度比と、特定した追加外部モジュールと、特定した追加外部OSSとを、比較データ記憶部405に記憶させる。
図5の処理に戻って、生成部409は、標準ワークフローに含まれるアクティビティ毎に以下の処理を繰り返す(S513)。
ここで、標準ワークフローについて説明する。標準ワークフローは、修正されたプログラムの検証を行う標準の手順を定めたワークフローである。標準ワークフローは、一般的にプログラムの開発と検証を行う組織において規定される検証プロセスに従って設定される。
図7に、標準ワークフローのチャート例を示す。この例のワークフローは、始端と終端を除く10個のノードと、そのノード間を方向付ける矢印から構成されている。
ノード「1.グループ内ソースレビュー」は、実行順位が「1」であり、アクティビティの内容が「グループ内ソースレビュー」であることを示している。「開始」から「1.グループ内ソースレビュー」への矢印は、「1.グループ内ソースレビュー」のアクティビティが最初に実行されることを意味している。また、現時点で、「1.グループ内ソースレビュー」のアクティビティは未実行であることを示している。
以下同様に、ノード「2.リーダの承認(A)」は、実行順位が「2」であり、アクティビティの内容が「リーダの承認(A)」であることを示している。リーダの承認(A)は、グループ内ソースレビューに対する承認である。「1.グループ内ソースレビュー」から「2.リーダの承認(A)」への矢印は、「1.グループ内ソースレビュー」のアクティビティの実行後に、「2.リーダの承認(A)」のアクティビティが実行されることを意味している。また、現時点で、「2.リーダの承認(A)」のアクティビティは未実行であることを示している。
ノード「3.経験者によるソースレビュー」は、実行順位が「3」であり、アクティビティの内容が「経験者によるソースレビュー」であることを示している。「2.リーダの承認(A)」から「3.経験者によるソースレビュー」への矢印は、「2.リーダの承認(A)」のアクティビティの実行後に、「3.経験者によるソースレビュー」のアクティビティが実行されることを意味している。また、現時点で、「3.経験者によるソースレビュー」のアクティビティは未実行であることを示している。
ノード「4.リーダの承認(B)」は、実行順位が「4」であり、アクティビティの内容が「リーダの承認(B)」であることを示している。リーダの承認(B)は、経験者によるソースレビューに対する承認である。「3.経験者によるソースレビュー」から「4.リーダの承認(B)」への矢印は、「3.経験者によるソースレビュー」のアクティビティの実行後に、「4.リーダの承認(B)」のアクティビティが実行されることを意味している。また、現時点で、「4.リーダの承認(B)」のアクティビティは未実行であることを示している。
ノード「5.モジュールテスト」は、実行順位が「5」であり、アクティビティの内容が「モジュールテスト」であることを示している。「4.リーダの承認(B)」から「5.モジュールテスト」への矢印は、「4.リーダの承認(B)」のアクティビティの実行後に、「5.モジュールテスト」のアクティビティが実行されることを意味している。また、現時点で、「5.モジュールテスト」のアクティビティは未実行であることを示している。
ノード「6.リーダの承認(C)」は、実行順位が「6」であり、アクティビティの内容が「リーダの承認(C)」であることを示している。リーダの承認(C)は、モジュールテストに対する承認である。「5.モジュールテスト」から「リーダの承認(C)」への矢印は、「5.モジュールテスト」のアクティビティの実行後に、「リーダの承認(C)」のアクティビティが実行されることを意味している。また、現時点で、「リーダの承認(C)」のアクティビティは未実行であることを示している。
ノード「7.コンポーネントテスト」は、実行順位が「7」であり、アクティビティの内容が「コンポーネントテスト」であることを示している。「6.リーダの承認(C)」から「7.コンポーネントテスト」への矢印は、「6.リーダの承認(C)」のアクティビティの実行後に、「7.コンポーネントテスト」のアクティビティが実行されることを意味している。また、現時点で、「7.コンポーネントテスト」のアクティビティは未実行であることを示している。
ノード「8.リーダの承認(D)」は、実行順位が「8」であり、アクティビティの内容が「リーダの承認(D)」であることを示している。リーダの承認(D)は、コンポーネントテストに対する承認である。「7.コンポーネントテスト」から「8.リーダの承認(D)」への矢印は、「7.コンポーネントテスト」のアクティビティの実行後に、「8.リーダの承認(D)」のアクティビティが実行されることを意味している。また、現時点で、「8.リーダの承認(D)」のアクティビティは未実行であることを示している。
ノード「9.システムテスト」は、実行順位が「9」であり、アクティビティの内容が「システムテスト」であることを示している。「8.リーダの承認(D)」から「9.システムテスト」への矢印は、「8.リーダの承認(D)」のアクティビティの実行後に、「9.システムテスト」のアクティビティが実行されることを意味している。また、現時点で、「9.システムテスト」のアクティビティは未実行であることを示している。
ノード「10.リーダの承認(E)」は、実行順位が「10」であり、アクティビティの内容が「リーダの承認(E)」であることを示している。リーダの承認(E)は、システムテストに対する承認である。「9.システムテスト」から「10.リーダの承認(E)」への矢印は、「9.システムテスト」のアクティビティの実行後に、「10.リーダの承認(E)」のアクティビティが実行されることを意味している。また、現時点で、「10.リーダの承認(E)」のアクティビティは未実行であることを示している。
標準ワークフロー格納部407は、上記の各ノードに相当する各アクティビティデータを記憶している。続いて、アクティビティデータについて説明する。
図8に、アクティビティデータの例を示す。アクティビティ番号、実行順位、アクティビティの内容、有効条件、有効フラグ、選定条件、評価条件、省略条件、省略フラグ、実行メンバー、実行日、実行結果及び品質評価の項目を有している。
アクティビティ番号は、アクティビティの識別情報である。実行順位は、アクティビティを実行する順番を定める情報である。アクティビティの内容は、アクティビティにより実行する手続の内容である。
有効条件は、修正されたプログラムを検証するために、アクティビティが有効となる条件である。有効フラグは、有効なアクティビティであるか否かを定めるフラグである。選定条件は、アクティビティを実行する者の条件である。評価条件は、アクティビティにおける品質評価を定める条件である。省略条件は、アクティビティの実行を省略する場合の条件である。省略フラグは、アクティビティの実行を省略するか否かを定めるフラグである。
実行メンバーは、アクティビティを実行する者である。実行日は、アクティビティを実行した日である。実行結果は、アクティビティを実行した結果である。品質評価は、修正されたプログラムの品質についての評価である。
この例は、アクティビティ番号「A_03」、実行順位「3」であるアクティビティの内容「経験者によるソースレビュー」について、有効条件「プログラムの修正割合>5%」と選定条件「同一グループ and 開発者 and 修正ステップ数最大」と評価条件「高:レビュー結果のNG件数/時間<0.1、低:高以外」と省略条件「なし」を定めている。
有効条件「プログラムの修正割合>5%」は、プログラムの修正割合が5%より大きい場合に、このアクティビティが有効となることを示している。選定条件「同一グループ and 開発者 and 修正ステップ数最大」は、修正した開発者が属するグループと同じグループに属し、かつメンバー属性が開発者である者のうち、修正ステップ数の合計が最大である者が実行メンバーとして選ばれることを示している。
この選定条件の例は、1番目の条件がグループに関する条件であり、2番目の条件がメンバー属性に関する条件であり、3番目の条件が経験に関する条件であるという前提で構成されている。但し個々の条件の順番を固定しない場合には、「所属グループ=修正メンバーの所属グループ」、「メンバー属性=開発者」、あるいは「修正ステップ数=MAX」など、項目を含む条件式を設定するようにしてもよい。
評価条件「高:レビュー結果のNG件数/時間<0.1、低:高以外」は、レビュー結果に含まれるNG件数/時間の値が0.1より小さい場合に「高」と判定し、「高」と判定しない場合に「低」と判定することを示している。有効フラグと省略フラグは、初期値「OFF」が設定されている。実行メンバー、実行日、実行結果及び品質評価の初期値は「未定」であり、具体的なデータは、ワークフローの実行段階で受付部401を介して設定される。
図9に、アクティビティ番号「A_04」、実行順位「4」であるアクティビティの内容「リーダの承認(B)」のアクティビティデータの例を示す。
有効条件「A_03が有効な場合」と選定条件「同一グループ and リーダ」と評価条件「高:実行結果が承認済みの場合、低:高以外」と省略条件「A_03を省略する場合」を定めている。
有効条件「A_03が有効な場合」は、アクティビティ番号A_03のアクティビティが有効である場合に、このアクティビティが有効となることを示している。選定条件「同一グループ and リーダ」は、修正した開発者が属するグループと同じグループに属し、かつメンバー属性がリーダである者が実行メンバーとして選ばれることを示している。評価条件「高:実行結果が承認済みの場合、低:高以外」は、実行結果が承認済みの場合に「高」と判定し、「高」と判定しない場合に「低」と判定することを示している。有効フラグ、省略フラグ、実行メンバー、実行日、実行結果及び品質評価については、図8と同様である。
図10に、アクティビティ番号「A_07」、実行順位「7」であるアクティビティの内容「コンポーネントテスト」のアクティビティデータの例を示す。
有効条件「常に」と選定条件「同一グループ and 開発者」と評価条件「高:テスト結果のNG件数/8時間<2の場合、低:高以外」と省略条件「A_01〜A06がすべて高の場合」を定めている。
有効条件「常に」は、常にこのアクティビティが有効となることを示している。選定条件「同一グループ and 開発者」は、修正した開発者が属するグループと同じグループに属し、かつメンバー属性が開発者である者が実行メンバーとして選ばれることを示している。評価条件「高:テスト結果のNG件数/8時間<2の場合、低:高以外」は、テスト結果に含まれるNG件数/8時間が2より小さい場合に「高」と判定し、「高」と判定しない場合に「低」と判定することを示している。有効フラグ、省略フラグ、実行メンバー、実行日、実行結果及び品質評価については、図8と同様である。
図11は、アクティビティ番号「A_08」、実行順位「8」であるアクティビティの内容「リーダの承認(D)」のアクティビティデータの例を示す。
有効条件「A_07が有効な場合」と選定条件「同一グループ and リーダ」と評価条件「高:実行結果が承認済みの場合、低:高以外」と省略条件「A_07を省略する場合」を定めている。
有効条件「A_07が有効な場合」は、アクティビティ番号A_07のアクティビティが有効である場合に、このアクティビティが有効となることを示している。選定条件「同一グループ and リーダ」は、修正した開発者が属するグループと同じグループに属し、かつメンバー属性がリーダである者が実行メンバーとして選ばれることを示している。評価条件「高:実行結果が承認済みの場合、低:高以外」は、実行結果が承認済みの場合に「高」と判定し、「高」と判定しない場合に「低」と判定することを示している。有効フラグ、省略フラグ、実行メンバー、実行日、実行結果及び品質評価については、図8と同様である。他のアクティビティについても、アクティビティデータが設定されている。
図5の処理に戻って、生成部409は、アクティビティに含まれる有効条件を満たすか否かを判定する(S515)。図8のアクティビティデータの例では、プログラムの修正割合を比較データ記憶部405から取得し、5%より大きいか否かを判定する。プログラムの修正割合が5%より大きい場合に、有効条件を満たすと判定し、プログラムの修正割合が5%以下の場合に、有効条件を満たさないと判定する。
図9のアクティビティデータの例では、アクティビティ番号「A_03」のアクティビティデータの有効フラグがONの場合に、有効条件を満たすと判定し、アクティビティ番号「A_03」のアクティビティデータの有効フラグがOFFの場合に、有効条件を満たさないと判定する。
図10のアクティビティデータの例では、常に有効条件を満たすと判定する。
図11のアクティビティデータの例では、アクティビティ番号「A_07」のアクティビティデータの有効フラグがONの場合に、有効条件を満たすと判定し、アクティビティ番号「A_07」のアクティビティデータの有効フラグがOFFの場合に、有効条件を満たさないと判定する。
比較データを用いる有効条件の例として、修正割合が所定値より大きい条件を示したが、修正割合が所定値以上の条件、修正割合が所定値より小さい条件、あるいは修正割合が所定値以下の条件であってもよい。
更に、複雑度比が所定値より大きい条件、複雑度比が所定値以上の条件、複雑度比が所定値より小さい条件、あるいは複雑度比が所定値以下の条件であってもよい。
追加外部モジュールについては、特定のモジュールが追加外部モジュールに含まれることを条件としてもよい。また、追加外部モジュールの数が所定値より大きい条件、追加外部モジュールの数が所定値以上の条件、追加外部モジュールの数が所定値より小さい条件、あるいは追加外部モジュールの数が所定値以下の条件であってもよい。
追加OSSについては、特定のOSSが追加OSSに含まれることを条件としてもよい。また、追加OSSの数が所定値より大きい条件、追加OSSの数が所定値以上の条件、追加OSSの数が所定値より小さい条件、あるいは追加OSSの数が所定値以下の条件であってもよい。
追加外部モジュールと追加OSSの総数が所定値より大きい条件、追加外部モジュールと追加OSSの総数が所定値以上の条件、追加外部モジュールと追加OSSの総数が所定値より小さい条件、あるいは追加外部モジュールと追加OSSの総数が所定値以下の条件であってもよい。
プログラム単位の修正割合、複雑度比、追加外部モジュール及び追加OSSに関する条件以外に、コンポーネント単位の修正割合、複雑度比、追加外部モジュール及び追加OSSに関する条件を用いてもよい。あるいは、システム単位の修正割合、複雑度比、追加外部モジュール及び追加OSSに関する条件を用いてもよい。
また、上記の条件を、任意にAND条件あるいはOR条件で組み合わせるようにしてもよい。
アクティビティに含まれる有効条件を満たさないと判定した場合には、S519へ移る。この場合、有効フラグは初期値のOFFのままである。アクティビティに含まれる有効条件を満たすと判定した場合には、生成部409は、有効フラグをONに設定する(S517)。
生成部409は、すべてのアクティビティについて処理したか否かを判定する(S519)。まだ処理していないアクティビティがあると判定した場合には、S513の処理へ戻る。すべてのアクティビティについて処理したと判定した場合には、端子Aを介して、図12のS1201の処理へ移る。
このようにアクティビティの有効条件を判定するので、プログラム修正の量や質に応じて、実行すべきアクティビティを選び出すことができる。
例えば、修正割合が所定値より大きい場合に動作テストのアクティビティが有効となるように有効条件を設定してもよい。このようにすると、修正割合が少ない場合には、ソースコードのレビューによる検証で品質の担保が可能であるので、動作テストを省き、一方修正割合が多い場合には、ソースコードのレビューによる確認だけでは不十分なので、十分に動作テストを行う運用ができる。
例えば、複雑度比が所定値より大きい場合にソースコードレビューのアクティビティが有効となるように有効条件を設定してもよい。このようにすると、プログラムの修正内容が単純である場合には、動作テストによる動作環境への適応の確認のみで足るのでソースコードレビューを省き、一方修正内容が複雑である場合には、動作テストのみでは本質的なアルゴリズムの欠点を見つけ出せないので、ソースコードレビューを行う運用ができる。
続いて、アクティビティの実行内容に応じて実行者を自動的に選定する処理について説明する。図12に、ワークフローの生成処理フローの続きを示す。
特定部413は、個別ワークフローに含まれるアクティビティ毎に以下の処理を繰り返す(S1201)。特定部413は、アクティビティの選定条件に合うメンバーを特定する(S1203)。
図8のアクティビティデータの例では、プログラムを修正した開発者の所属グループを特定し、その所属グループと同じ所属グループであり、メンバー属性が開発者であるメンバーのうち、修正ステップ数の合計が最大の者を特定する。
図9のアクティビティデータの例では、プログラムを修正した開発者の所属グループを特定し、その所属グループと同じ所属グループであり、メンバー属性がリーダである者を特定する。
図10のアクティビティデータの例では、プログラムを修正した開発者の所属グループを特定し、その所属グループと同じ所属グループであり、メンバー属性が開発者である者を特定する。
図11のアクティビティデータの例では、プログラムを修正した開発者の所属グループを特定し、その所属グループと同じ所属グループであり、メンバー属性がリーダである者を特定する。
上述の例では、所属グループとメンバー属性の他に、修正ステップ数の条件を設定する例を示したが、修正プログラム数あるいは修正回数の合計が、所定値以上(あるいは所定値より大きい)などの条件を用いてもよい。また、特定の外部モジュールが経験外部モジュールに含まれることを条件としてもよい。同様に、特定のOSSが経験OSSに含まれることを条件としてもよい。更に、修正ステップ数、修正プログラム数、修正回数、経験外部モジュール及び経験OSSの条件を、AND条件あるいはOR条件で、任意に組み合わせるようにしてもよい。
特定部413は、特定したメンバーをアクティビティの実行メンバーに設定する(S1205)。特定部413は、標準ワークフローに含まれるすべてのアクティビティについて処理したか否かについて判定する(S1207)。まだ処理していないアクティビティがあると判定した場合には、S1201の処理へ戻る。
すべてのアクティビティについて処理したと判定した場合には、出力部415は、個別ワークフローのチャートを生成する(S1209)。具体的には、出力部415は有効フラグがONであるアクティビティを実行順位に従ってノードとして配列し、隣接するノード間を実行順位に従って矢印で連結する。
出力部415は、生成した個別ワークフローのチャートを表示する(S1211)。上述のように処理することによって、プログラムの修正の実績に基づいて、開発者としての経験を反映した実行者の選定ができるようになる。
図13に、個別ワークフローのチャート例を示す。このチャートは、プログラムの修正割合が5%以下であり、アクティビティ番号「A_03」が有効とならない例を示している。また、アクティビティ番号「A_03」が有効ではないので、「4.リーダの承認(B)」も有効とならない。従って、図7の個別ワークフローのチャート例に比べて、「3.経験者によるソースレビュー」と「4.リーダの承認(B)」のアクティビティが省かれている。このチャートで、「2.リーダの承認(A)」から「5.モジュールテスト」への矢印は、「2.リーダの承認(A)」のアクティビティの実行後に、「5.モジュールテスト」のアクティビティが実行されることを意味している。
続いて、ワークフローの実行中の動作について説明する。図14は、品質管理部とワークフロー管理部のモジュール構成例を示す図である。登録部1401は、アクティビティを実行した結果得られた品質記録を受け付け、登録するように動作する。品質記録は、例えば、ソースレビューのレビュー結果であり、動作テストのテスト結果である。ソースレビューのレビュー結果には、例えばNG件数/時間の値が含まれる。動作テストのテスト結果には、例えばNG件数/8時間の値が含まれる。これらの品質記録は、アクティビティの実行結果の例である。
本形態では、品質管理部109を資産管理部103と別に設ける例を示したが、品質管理部109を資産管理部103に含めるようにしてもよい。また、プログラム格納部201と、管理データ格納部203と、品質記録格納部1403とをまとめて、資産リポジトリと呼ぶこともある。
評価部1405は、評価条件に従って、修正されたプログラムの品質についての評価を求めるように動作する。
変更部1407は、実行済みのアクティビティの実行結果が未実行のアクティビティの省略条件を満たす場合に、未実行のアクティビティを省略するように個別ワークフローを変更するように動作する。この例で、アクティビティの実行結果は、品質評価を介して間接的に判定される場合がある。省略条件は、アクティビティの実行結果を直接判定する条件でもよい。例えば、直前のアクティビティにおけるテスト結果のNG件数/8時間が2より小さい場合に省略する省略条件を用いてもよい。あるいは、直前のアクティビティにおけるレビュー結果のNG件数/時間が0.1より小さい場合に省略する省略条件を用いてもよい。
図15に、ワークフローの省略処理フローの例を示す。評価部1405は、個別ワークフローに含まれるアクティビティ毎に以下の処理を繰り返す(S1501)。評価部1405は、そのアクティビティが評価済みであるか否かを判定する(S1503)。具体的には、品質評価が設定されている場合に評価済みであると判定し、品質評価が未定の場合に評価済みでないと判定する。アクティビティが評価済みであると判定した場合には、S1511の処理へ移る。
アクティビティが評価済みでないと判定した場合には、評価部1405は、品質記録又は実行結果を取得する(S1505)。具体的には、評価条件が、図8に示したアクティビティデータのようにレビュー結果に関する条件である場合には、品質記録格納部1403からレビュー結果を取得する。評価条件が、図10に示したアクティビティデータのようにテスト結果に関する条件である場合には、品質記録格納部1403からテスト結果を取得する。評価条件が、図9と図11に示したアクティビティデータのように実行結果に関する条件である場合には、アクティビティデータから実行結果を取得する。実行結果は、例えば承認済みを示す。実行結果は、適時受付部401を介して個別ワークフロー格納部411に格納されている。
そして、評価部1405は、品質記録又は実行結果があったか否かを判定する(S1507)。アクティビティが未実行の場合には、取得しようとした品質記録又は実行結果が得られない。このように、品質記録又は実行結果が無かったと判定した場合には、S1511の処理へ移る。
一方、品質記録又は実行結果があったと判定した場合には、評価部1405は、評価条件に従って判定し、品質評価を得る(S1509)。評価部1405は、得た品質評価をアクティビティデータに設定する。この例では、「高」あるいは「低」の2値の評価値が得られる。評価部1405は、3値以上の評価値を得るようにしてもよい。
評価部1405は、個別ワークフローに含まれるすべてのアクティビティについて処理したか否かについて判定する(S1511)。まだ処理していないアクティビティがあると判定した場合には、S1501の処理へ戻る。すべてのアクティビティについて処理したと判定した場合には、端子Bを介して、図16のS1601の処理へ移る。
図16に、ワークフローの省略処理フローの例を示す。変更部1407は、個別ワークフローに含まれるアクティビティ毎に以下の処理を繰り返す(S1601)。変更部1407は、アクティビティが未実行であるか否かを判定する(S1603)。具体的には、変更部1407は、アクティビティデータの実行日が設定されていない場合に、未実行であると判定し、アクティビティデータの実行日が設定されている場合に、未実行でないと判定する。実行日は、適時受付部401を介して個別ワークフロー格納部411に格納されている。
未実行でないと判定した場合には、S1609の処理に移る。省略の対象とならないからである。未実行であると判定した場合には、変更部1407は、アクティビティの省略条件を満たすか否かを判定する(S1605)。
図8のアクティビティデータの例では、省略条件はないので、常に省略条件を満たさないと判定する。
図9のアクティビティデータの例では、アクティビティ番号「A_03」のアクティビティデータの省略フラグがONの場合に、省略条件を満たすと判定し、アクティビティ番号「A_03」のアクティビティデータの省略フラグがOFFの場合に、省略条件を満たさないと判定する。
図10のアクティビティデータの例では、アクティビティ番号「A_01」からアクティビティ番号「A_06」までのアクティビティデータの品質評価がすべて「高」の場合に、省略条件を満たすと判定し、アクティビティ番号「A_01」からアクティビティ番号「A_06」までのアクティビティデータにおける品質評価のいずれかが「高」でない場合に、有効条件を満たさないと判定する。
図11のアクティビティデータの例では、アクティビティ番号「A_07」のアクティビティデータの省略フラグがONの場合に、省略条件を満たすと判定し、アクティビティ番号「A_07」のアクティビティデータの省略フラグがOFFの場合に、省略条件を満たさないと判定する。
アクティビティの省略条件を満たさないと判定した場合には、S1609の処理に移る。省略条件を満たさない場合には、アクティビティを省略しないからである。アクティビティの省略条件を満たすと判定した場合には、変更部1407は、省略フラグをONに設定する(S1607)。変更部1407は、個別ワークフローに含まれるすべてのアクティビティについて処理したか否かについて判定する(S1609)。まだ処理していないアクティビティがあると判定した場合には、S1601の処理へ戻る。
すべてのアクティビティについて処理したと判定した場合には、出力部415は、個別ワークフローのチャートを生成する(S1611)。このとき、出力部415は、省略フラグがONであるアクティビティのノードをチャートに含めない。また、出力部415は、実行済みのアクティビティのノードを太枠で示し、実行済みの表示を付す。そして、出力部415は、個別ワークフローのチャートを表示する(S1613)。
図17は、省略された個別ワークフローのチャート例を示す図である。図13の個別ワークフローのチャート例に比べて、「7.コンポーネントテスト」と「8.リーダの承認(D)」のアクティビティが省かれている。このチャートは、アクティビティ番号「A_01」〜アクティビティ番号「A_06」のアクティビティデータの品質評価がすべて「高」であり、アクティビティ番号「A_07」のアクティビティが省略され、アクティビティ番号「A_07」のアクティビティが省略されるので、アクティビティ番号「A_08」のアクティビティも省略される例を示している。「6.リーダの承認(C)」から「9.システムテスト」への矢印は、「6.リーダの承認(C)」のアクティビティの実行後に、「9.システムテスト」のアクティビティが実行されることを意味している。
太枠で示した「1.グループ内ソースレビュー」と「2.リーダの承認(A)」と「5.モジュールテスト」と「6.リーダの承認(C)」は、現時点で実行済みであることを意味している。「9.システムテスト」と「10.リーダの承認(E)」は、現時点で未実行である。
このように省略する処理を行うことによって、前のアクティビティによる検証手続きで高い信頼性が確認され、プログラムの修正による品質低下のリスクが少ないと想定される場合に、後の検証手続きのアクティビティを省くように運用することができるようになる。
以上本技術の一実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上述の機能ブロック構成は必ずしも実際のプログラムモジュール構成に対応するものではない。
また、上で説明した各記憶領域の構成は一例であって、必ずしも上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、上で述べた管理サーバ101と開発システム111は、コンピュータ装置であって、図18に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた実施の形態をまとめると、以下のようになる。
本実施の形態に係る管理装置は、(A)修正前のプログラムと修正後のプログラムを比較する比較部と、(B)修正されたプログラムの検証を行う標準の手順を定めた第1のワークフローに含まれる複数のアクティビティの各々について、比較結果が当該アクティビティの有効条件を満たすか否かを判定し、当該有効条件を満たす一又は複数のアクティビティからなる第2のワークフローを生成する生成部とを含む。
このようにすれば、プログラム修正の量や質に応じて、実行すべきアクティビティを選び出した個別のワークフローを生成することができる。例えば、修正の量が少ない場合には、ソースコードのレビューによる検証で品質の担保が可能であるので、一部の動作テストを省き、一方修正の量が多い場合には、ソースコードのレビューによる確認だけでは不十分なので、十分に動作テストを行うなどのワークフローの設定の判断を、自動的かつ客観的に行うことができるようになる。また、プログラムの修正内容が単純である場合には、動作テストによる動作環境への適応の確認のみで足り、一方修正内容が複雑である場合には、動作テストのみでは本質的なアルゴリズムの欠点を見つけ出せないので、ソースコードのレビューが有効であるなど、アクティビティの実行内容の特性も考慮したワークフローの設定が可能となる。
また、プログラムの修正の都度、修正前のプログラムと修正後のプログラムに基づいて、当該プログラムを修正した開発者についての属性を更新する更新部を有するようにしてもよい。更に、上記属性が、個別のワークフローのアクティビティにおける実行者の選定条件を満たすか否かを判定し、当該アクティビティを実行する開発者を特定する特定部を有するようにしてもよい。
このようにすれば、アクティビティの実行内容に応じて実行者を自動的に選定できるようになる。また、プログラムの修正の実績に基づいて、開発者としての経験を反映した実行者の選定ができるようになる。
また、個別のワークフローのアクティビティにおける実行結果を登録する登録部を有するようにしてもよい。更に、上記実行結果が、個別のワークフローにおいて未実行であるアクティビティの省略条件を満たす場合に、当該未実行のアクティビティを省略するように個別のワークフローを変更する変更部を有するようにしてもよい。
このようにすれば、前の検証手続きで高い信頼性が確認され、プログラムの修正による品質低下のリスクが少ないと想定される場合に、後の検証手続きを省くように運用することができるようになる。
また、上記比較結果は、当該プログラムの修正割合であってもよい。
このようにすれば、プログラムの修正による品質低下のリスクを、全体のコードと修正したコードの量的な比により推し量り、アクティビティによる検証の要否をより的確に判定できるようになる。
また、上記比較結果は、修正前のプログラムの複雑度と、修正後のプログラムの複雑度の比であってもよい。
このようにすれば、プログラムの修正による品質低下のリスクを、アルゴリズムの難解さを基準に推し量り、アクティビティによる検証の要否をより的確に判定できるようになる。
また、上記比較結果は、修正後のプログラムにおいて、修正前のプログラムに対して追加した処理単位であってもよい。
このようにすれば、プログラムの修正による品質低下のリスクを、追加した処理を基準に推し量り、アクティビティによる検証の要否をより的確に判定できるようになる。例えば、エラーを生じさせやすい処理を追加した場合には、品質低下のリスクは高まることになる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
修正前のプログラムと修正後のプログラムを比較する比較部と、
修正されたプログラムの検証を行う標準の手順を定めた第1のワークフローに含まれる複数のアクティビティの各々について、比較結果が当該アクティビティの有効条件を満たすか否かを判定し、当該有効条件を満たす一又は複数のアクティビティからなる第2のワークフローを生成する生成部と
を含む管理装置。
(付記2)
更に、
プログラムの修正の都度、修正前のプログラムと修正後のプログラムに基づいて、当該プログラムを修正した開発者についての属性を更新する更新部と、
前記属性が、前記個別のワークフローのアクティビティにおける実行者の選定条件を満たすか否かを判定し、当該アクティビティを実行する開発者を特定する特定部と
を含む付記1記載の管理装置。
(付記3)
更に、
前記個別のワークフローのアクティビティにおける実行結果を登録する登録部と、
前記実行結果が、前記個別のワークフローにおいて未実行であるアクティビティの省略条件を満たす場合に、当該未実行のアクティビティを省略するように前記個別のワークフローを変更する変更部と
を含む付記1又は2記載の管理装置。
(付記4)
前記比較結果は、当該プログラムの修正割合である
付記1記載の管理装置。
(付記5)
前記比較結果は、前記修正前のプログラムの複雑度と、前記修正後のプログラムの複雑度の比である
付記1記載の管理装置。
(付記6)
前記比較結果は、前記修正後のプログラムにおいて、前記修正前のプログラムに対して追加した処理単位である
付記1記載の管理装置。
(付記7)
修正前のプログラムと修正後のプログラムを比較する処理と、
修正されたプログラムの検証を行う標準の手順を定めた第1のワークフローに含まれる複数のアクティビティの各々について、比較結果が当該アクティビティの有効条件を満たすか否かを判定し、当該有効条件を満たす一又は複数のアクティビティからなる第2のワークフローを生成する処理と
を含む管理方法。
(付記8)
修正前のプログラムと修正後のプログラムを比較する処理と、
修正されたプログラムの検証を行う標準の手順を定めた第1のワークフローに含まれる複数のアクティビティの各々について、比較結果が当該アクティビティの有効条件を満たすか否かを判定し、当該有効条件を満たす一又は複数のアクティビティからなる第2のワークフローを生成する処理と
をコンピュータに実行させるためのプログラム。