(57)【要約】【課題】ソフトウェア開発に係る作業計画を効率よく適切に立案する。【解決手段】ソフトウェア開発における作業計画の立案に際し、作業計画立案支援装置１０が、ソフトウェア開発における複数の作業間の競合関係を制約条件とし、複数の作業を組み合わせることにより得られる作業群の効果を目的関数とする組合せ最適化問題を解くことにより、作業の部分集合を決定する。より具体的には、作業計画立案支援装置１０は、上記組合せ最適化問題を解くことにより、目的関数が最大となるもしくは所定の閾値を超える作業群を作業部分集合として決定する。目的関数は、例えば、作業群を構成する作業ごとの効果を表わす指標である作業期待値の総和を算出する関数である。作業計画立案支援装置１０は、作業の量を示す情報と、作業の夫々について設定される優先度とに基づき、作業期待値を算出する。【選択図】図２
2015219747.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア開発における作業計画の立案を支援する方法であって、
情報処理装置が、ソフトウェア開発における複数の作業間の競合関係を制約条件とし、複数の前記作業を組み合わせることにより得られる作業群の効果を目的関数とする組合せ最適化問題を解くことにより、前記作業の部分集合を決定する、
作業計画の立案を支援する方法。
【請求項２】
請求項１に記載の作業計画の立案を支援する方法であって、
前記情報処理装置が、前記組合せ最適化問題を解くことにより、前記目的関数が最大となるもしくは所定の閾値を超える前記作業群を作業部分集合として決定する、
作業計画の立案を支援する方法。
【請求項３】
請求項１又は２に記載の作業計画の立案を支援する方法であって、
前記目的関数は、前記作業群を構成する前記作業ごとの効果を表わす指標である作業期待値の総和を算出する関数である、
作業計画の立案を支援する方法。
【請求項４】
請求項３に記載の作業計画の立案を支援する方法であって、
前記情報処理装置が、前記作業の量を示す情報と、前記作業の夫々について設定される優先度とに基づき、前記作業期待値を算出する、
作業計画の立案を支援する方法。
【請求項５】
請求項１又は２に記載の作業計画の立案を支援する方法であって、
前記情報処理装置が、
ソフトウェア開発における、ソースコード又はドキュメントを分析することにより、前記作業の間の競合関係に関する情報である作業競合情報を生成し、
前記作業競合情報に基づく競合関係を前記制約条件として用いる
作業計画の立案を支援する方法。
【請求項６】
請求項１又は２に記載の作業計画の立案を支援する方法であって、
前記制約条件は、前記作業の工数、前記作業に要する時間、前記作業の量のうちの少なくともいずれかに関するものである
作業計画の立案を支援する方法。
【請求項７】
請求項６に記載の作業計画の立案を支援する方法であって、
前記情報処理装置は、前記作業の工数及び前記作業に要する時間を制約条件とする
作業計画の立案を支援する方法。
【請求項８】
請求項７に記載の作業計画の立案を支援する方法であって、
前記作業に要する時間の制約条件が、反復型開発における反復周期の倍数のタイミングで前記作業を完了させるものである
作業計画の立案を支援する方法。
【請求項９】
請求項７に記載の作業計画の立案を支援する方法であって、
前記情報処理装置は、動的計画法、分枝限定法、遺伝的アルゴリズムのうちの少なくともいずれかにより組合せ最適化問題を解く
作業計画の立案を支援する方法。
【請求項１０】
ソフトウェア開発における作業計画の立案を支援する情報処理装置であって、
ソフトウェア開発における複数の作業間の競合関係を制約条件とし、複数の前記作業を組み合わせることにより得られる作業群の効果を目的関数とする組合せ最適化問題を解くことにより、前記作業の部分集合を決定する作業部分集合決定部、
を備える作業計画立案支援装置。
【請求項１１】
請求項１０に記載の作業計画立案支援装置であって、
前記作業部分集合決定部は、前記組合せ最適化問題を解くことにより、前記目的関数が最大となるもしくは所定の閾値を超える前記作業群を作業部分集合として決定する、
作業計画立案支援装置。
【請求項１２】
請求項１０に記載の作業計画立案支援装置であって、
前記目的関数は、前記作業群を構成する前記作業ごとの効果を表わす指標である作業期待値の総和を算出する関数である、
作業計画立案支援装置。
【請求項１３】
請求項１２に記載の作業計画立案支援装置であって、
前記作業の量を示す情報と、前記作業の夫々について設定される優先度とに基づき、前記作業期待値を算出する作業期待値決定部を備える、
作業計画立案支援装置。
【請求項１４】
請求項１０に記載の作業計画立案支援装置であって、
ソフトウェア開発における、ソースコード又はドキュメントを分析することにより、前記作業の間の競合関係に関する情報である作業競合情報を生成する作業分析部を備え、
前記作業部分集合決定部は、前記作業競合情報に基づく競合関係を前記制約条件として用いる、
作業計画立案支援装置。
【請求項１５】
請求項１０に記載の作業計画立案支援装置であって、
前記制約条件は、前記作業の工数、前記作業に要する時間、前記作業の量のうちの少なくともいずれかに関するものである、
作業計画立案支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発における作業計画の立案を支援する方法、及び作業計画立案支援装置に関する。
【背景技術】
【０００２】
特許文献１には、ファイル間のクローンコードの検出処理及びソースコード評価において、クローンコードの過検出を防ぎ、クローンコードを効率的に正しく評価・分析すべく、クローンコード検出対象のファイルにおける所定の単位のデータ毎の区間情報を検出テーブルに登録し、クローンコード検出対象のファイルとの比較対象となるファイルにおける所定の単位のデータ毎の区間情報を検出テーブルに登録し、検出テーブルにおける所定の単位のデータ間の区間情報が所定の条件を満たす場合、検出テーブルにおける該当する区間情報をファイル毎に結合し、検出テーブル内の区間情報を抽出してクローンコードテーブルに登録し、クローンコードテーブルに登録された区間情報よりファイルの品質へ及ぼす影響度合いを評価することが記載されている。
【０００３】
特許文献２には、開発中のソフトウェアのソースコードを管理するソースコード管理システムに関し、 開発中のソフトウェアのソースコードをリポジトリに管理し、共通化されたソースコードだけをリポジトリに登録し、ソースコードに対する共通化実施方法を提示し、ソースコード中に含まれるコードクローンを検出して、当該ソースコードが共通化されているか否かを判定し、ユーザが共通化を実施したソースコードを、メトリクスから算出したソースコードの改善率を用いて評価し、最善の共通化実施結果を選出することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−４８６３９号公報
【特許文献２】特開２００９−８６８１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般にソフトウェア開発において、投入可能な工数内で作業を完了することができ、かつ、効果が最大となるように適切な作業計画を立案することは容易ではない。その理由の一つとして、作業に係る制約の存在がある。上記制約として、異なる作業が何らかの理由で競合し、双方を同時に選択できない排他的な関係（競合関係）の存在がある。排他的な関係とは、複数の作業方針が存在し、それらを両立させることができない関係である。両立させることができない関係は、例えば、一つの案に従って作業を行うと他の案が成立しなくなる場合、時間やリソースの制約によって一方を実施することができない場合である。こうした作業間の排他的な関係を考慮しつつ適切に作業計画を立案しようとすれば、同時に実施可能な作業の組合せを選択した上で効果を算出する必要があり、実施する作業の追加や取り消しを行う度に排他的な関係を確認しつつ効果を検証する必要があり、煩雑かつ膨大な計算を行う必要がある。
【０００６】
本発明では、効率よく適切に作業計画を立案することが可能な、ソフトウェア開発における作業計画の立案を支援する方法、及び作業計画立案支援装置を提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記目的を達成するための本発明の一つは、ソフトウェア開発における作業計画の立案を支援する方法であって、情報処理装置が、ソフトウェア開発における複数の作業間の競合関係を制約条件とし、複数の前記作業を組み合わせることにより得られる作業群の効果を目的関数とする組合せ最適化問題を解くことにより、前記作業の部分集合を決定する。
【０００８】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【０００９】
本発明によれば、ソフトウェア開発に係る作業計画を効率よく適切に立案することができる。
【図面の簡単な説明】
【００１０】
【図１】作業計画立案支援装置１０の概略的な構成を示す図である。
【図２】作業期待値決定処理Ｓ２００を説明するデータフロー図である。
【図３】作業情報２５１の一例である。
【図４】作業期待値ポリシー２５２の一例である。
【図５】作業優先度情報２５３の一例である。
【図６】作業期待値情報２５５の一例である。
【図７】作業競合情報２５４の一例である。
【図８】作業部分集合情報２５６の一例である。
【図９】作業部分集合決定処理Ｓ９００を説明するフローチャートである。
【図１０】作業の組合せと制約条件を満たすか否かの関係を示す表である。
【図１１】図１０の一部の行を抜粋した図である。
【図１２】第２実施形態の作業計画立案支援装置１０の概略的な構成を示す図である。
【図１３】対象ソフトウェアの構成を説明する図である。
【図１４】コードクローン分布解析処理Ｓ１４００を説明するデータフロー図である。
【図１５】構成要素情報２６２の一例である。
【図１６】コードクローン検出結果２６４の一例である。
【図１７】コードクローン分布情報２６５の一例である。
【図１８】作業分析処理Ｓ１８００を説明するフローチャートである。
【図１９】コードクローン分布解析処理１８１３を説明するフローチャートである。
【図２０】作業競合情報生成処理Ｓ１８１５を説明するデータフロー図である。
【図２１】テーブル２０００の一例である。
【図２２】作業競合情報（辺リスト形式）２５４Ａの一例である。
【図２３】作業競合情報（マトリクス形式）２５４Ｂの一例である。
【図２４】作業競合情報生成処理Ｓ１８１５を説明するフローチャートである。
【図２５】作業期待値決定処理Ｓ２５００を説明するデータフロー図である。
【図２６】量的制約ポリシー２５８の一例である。
【図２７】作業部分集合、所要時間、及び期待値の関係を列挙した表である。
【発明を実施するための形態】
【００１１】
以下、実施形態について図面とともに説明する。
【第１実施形態】
【００１２】
図１に第１実施形態において説明する情報処理装置（コンピュータ）である作業計画立案支援装置１０の概略的な構成を示している。作業計画立案支援装置１０は、ソフトウェア開発における作業計画の立案を支援するための情報を生成する。作業計画立案支援装置１０は、作業の効果を表す指標である作業期待値に基づく目的関数について、複数の作業の間の競合関係を制約条件とする組合せ最適化問題（組合せ計画問題）を解くことにより、複数の作業の中から目的関数が最大となる作業群（以下、これを作業部分集合とも称する。）を決定する。上記作業部分集合の決定において、作業計画立案支援装置１０には、作業に関する情報（作業情報）、作業期待値を規定する作業期待値ポリシー、制約条件が記述される作業競合情報、及び作業の優先度に関する情報等が与えられる。また作業計画立案支援装置１０は、上記作業部分集合の決定に際して作業間の排他的な関係に着目し、動的計画法、分枝限定法、遺伝的アルゴリズム等を随時適用することにより、一度解いた部分問題を重複して解かないように、もしくは不必要な部分問題を解かないようにすることにより、処理の煩雑さや負荷の軽減を図る。
【００１３】
図１に示すように、作業計画立案支援装置１０は、プロセッサ１１、記憶装置１２、入力装置１３、表示装置１４、及び通信装置１５を備える。これらはバス等の通信手段を介して通信可能に接続されている。
【００１４】
プロセッサ１１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）を用いて構成されている。プロセッサ１１が記憶装置１２に格納されているプログラムを読み出して実行することにより、作業計画立案支援装置１０の様々な機能が実現される。記憶装置１２（主記憶装置、補助記憶装置、外部記憶装置を含む）は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、ＮＶＲＡＭ（Non Volatile RAM）、ハードディスクドライブ、ＳＳＤ（Solid State Drive）、光学式記憶装置（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）である。
【００１５】
入力装置１３は、ユーザから情報や指示の入力を受け付けるユーザインタフェースであり、例えば、キーボード、マウス、タッチパネルである。表示装置１４は、ユーザに情報を提供するユーザインタフェースであり、例えば、液晶モニタ、ＬＣＤ（Liquid Crystal Display）である。通信装置１５は、通信ネットワーク５を介して外部装置２と通信する通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）である。記憶装置１２には、例えば、通信ネットワーク５を介して外部装置２からダウンロードされたプログラムやデータが格納される。
【００１６】
同図に示すように、記憶装置１２は、作業期待値決定ＰＧ２１１及び作業部分集合決定ＰＧ２１２を記憶する。以下の説明において、これらのプログラムによって実現される機能のことを、順に、作業期待値決定部２７１、作業部分集合決定部２７２とも称する。作業期待値決定ＰＧ２１１及び作業部分集合決定ＰＧ２１２は、ＯＳ（Operating System）の配下で動作するものであってもよいし、そうでなくてもよい。また作業期待値決定ＰＧ２１１及び作業部分集合決定ＰＧ２１２は、仮想化ソフトウェアによって実現される仮想マシン上で実行されるものであってもよい。
【００１７】
同図に示すように、記憶装置１２は、作業情報２５１、作業期待値ポリシー２５２、作業優先度情報２５３、作業競合情報２５４、作業期待値情報２５５、及び作業部分集合情報２５６を記憶する。
【００１８】
図２は作業計画立案支援装置１０において行われる処理（以下、作業期待値決定処理Ｓ２００とも称する。）の流れを説明するデータフロー図である。以下、同図とともに作業計画立案支援装置１０が備える機能について説明する。
【００１９】
作業期待値決定部２７１は、作業情報２５１、作業期待値ポリシー２５２、及び作業優先度情報２５３に基づき、作業情報２５１に記載されている各作業の期待値（以下、作業期待値とも称する。）を求め、各作業の作業期待値を記載した作業期待値情報２５５を生成する。
【００２０】
図３に作業情報２５１の一例を示す。同図に示すように、作業情報２５１は、作業ＩＤ２５１１、対象ファイル２５１２、対象ファイル数２５１３、及び対象ステップ数２５１４の各項目からなる複数のレコードで構成されている。このうち作業ＩＤ２５１１には、作業ごとに付与される識別子（以下、作業ＩＤとも称する。）が設定される。対象ファイル２５１２には、作業の対象となるファイル(以下、対象ファイルとも称する。）の識別子（以下、ファイルＩＤとも称する。）が設定される。対象ファイル数２５１３には、その作業の対象ファイルの数が設定される。対象ステップ数２５１４には、対象ファイルに記述されているプログラムのステップ数が設定される。尚、本実施形態では、作業の対象がファイルである場合を例示するが、作業の対象はモジュール等の他の種類のものであってもよい。
【００２１】
図４に作業期待値ポリシー２５２の一例を示す。この作業期待値ポリシー２５２は、どの程度の量の成果物を作業対象として処理することができたかという視点で作業の効果を判断する場合の一例であり、成果物の量をソースコードのステップ数等で把握している。作業期待値ポリシー２５２には、作業情報２５１に記載されている各作業の作業期待値を求めるための情報が含まれている。同図に示す作業期待値ポリシー２５２には、「ｃ」を作業ＩＤ、「Ｆ」をファイル数、「Ｓ」をステップ数（例えばファイル１件あたりのステップ数）、「Ｐ」を優先度に応じた値をとる計数（以下、優先度計数とも称する。）とした場合に次式から求められる値「value(c)」を、各作業の作業期待値を求めるための関数とすることが規定されている。
value(c)＝Ｐ×Ｆ×Ｓ      ・・・式１
【００２２】
尚、作業期待値ポリシー２５２には、優先度（ランクＡ〜Ｄ）と優先度計数Ｐとの対応を示す情報（優先度のランクＡ〜Ｄに対応して優先度計数Ｐを順に「３．０」、「２．０」、「１．０」、「０．５」とする旨の情報）も記述されている。
【００２３】
図５に作業優先度情報２５３の一例を示す。同図に示すように、作業優先度情報２５３には、各作業（作業ＩＤ２５３１）について設定される作業優先度２５３２を示す情報が含まれている。ユーザ等は作業優先度情報２５３に適切に各作業の優先度を設定することで目的関数に各作業の優先度を反映させることができ、作業計画立案支援装置１０による作業部分集合の決定に各作業の優先度を反映させることができる。
【００２４】
図６に作業期待値情報２５５の一例を示す。同図に示すように、作業期待値情報２５５には、各作業（作業ＩＤ２５５１）の作業期待値２５５２が記載されている。尚、同図に示す作業期待値情報２５５は、図３の作業情報２５１、図４の作業期待値ポリシー２５２、及び図５の作業優先度情報２５３に基づき生成されている。例えば、図３の作業情報２５１の作業ＩＤが「１」の作業については、図５の作業優先度情報２５３から作業優先度２５３２が「Ｂ」と特定され、図４の作業期待値ポリシー２５２から優先度係数Ｐが２．０と特定される。そして図３の作業情報２５１から、作業ＩＤが「１」の作業のファイル数は「３」、ステップ数は「１２」であるので、作業期待値ポリシー２５２から、作業ＩＤが「１」の作業の作業期待値は、
value(c)＝Ｐ×Ｆ×Ｓ＝２．０×３．０×１２＝７２
と求まり、図６の作業期待値情報２５５には、作業ＩＤが「１」の作業について作業期待値「７２」が設定されている。
【００２５】
図２に戻り、作業部分集合決定部２７２は、作業期待値決定部２７１が生成した作業期待値情報２５５と作業競合情報２５４とに基づき組合せ最適化計算を行い、目的関数（例えば実施する作業の組合せにおけるvalue(c)の総和（＝Σvalue(c)））を最大にする作業部分集合を決定し、決定した作業部分集合を記載した作業部分集合情報２５６を生成する。
【００２６】
図７に作業競合情報２５４の一例を示す。作業競合情報２５４には、競合関係にある作業（作業ＩＤ）の組合せが記載されている。同図において、例えば「（１，２）」は、作業ＩＤが「１」の作業と作業ＩＤが「２」の作業が競合関係にあることを示している。例えば、作業がコードクローンの修正（除去）作業であり、作業ＩＤが「１」の作業がコードクローンＡの修正作業、作業ＩＤが「２」の作業がコードクローンＢの修正作業である場合、コードクローンＡの修正作業とコードクローンＢの修正作業とが競合関係にあることを示している（コードクローンＡ及びコードクローンＢが同じ一つのファイル（もしくはモジュール）に含まれており、同時に共通化することが難しい場合等）。尚、競合する作業の表現の態様は同図に示すものに限定されない。例えば、検証を同時に行うことが難しい（競合関係にある）モジュールの識別子の組合せや、検証を同時に行うことが難しい（競合関係にある）ドキュメントの識別子（例えば、章や節の番号、ページ番号）の組合せ等であってもよい。
【００２７】
図８に作業部分集合情報２５６の一例を示す。作業部分集合情報２５６には、作業部分集合の構成要素（作業）を示す情報が記載されている。同図に示す作業部分集合情報２５６は、競合関係にない、作業ＩＤが「２，３，６，１０，１３，２４，２７，３５」の作業が作業部分集合であることを示している。
【００２８】
図９は、作業部分集合の決定に際して作業計画立案支援装置１０が行う処理（以下、作業部分集合決定処理Ｓ９００とも称する。）を説明するフローチャートである。
【００２９】
まず作業計画立案支援装置１０は、作業情報２５１、作業期待値ポリシー２５２、作業優先度情報２５３、及び作業競合情報２５４を取得し、これらを記憶装置１２に記憶する（Ｓ９１１）。これらの情報は、例えば、ユーザ等が予め設定して作業計画立案支援装置１０に入力してもよいし、作業計画立案支援装置１０が通信ネットワーク５を介して外部装置２から取得してもよい。
【００３０】
続いて、作業計画立案支援装置１０は、作業情報２５１、作業期待値ポリシー２５２、及び作業優先度情報２５３に基づき、作業情報２５１の各作業の作業期待値を決定し、その結果を記載した作業期待値情報２５５を生成する（Ｓ９１２）。
【００３１】
続いて、作業計画立案支援装置１０は、作業競合情報２５４、及びＳ９１２で生成した作業期待値情報２５５に基づき、組合せ最適化計算を行う（Ｓ９１３）。この処理の詳細については後述する。
【００３２】
続いて、作業計画立案支援装置１０は、作業期待値情報２５５に記載されている作業の作業期待値に基づく目的関数を最大化する作業部分集合情報を決定する（Ｓ９１４）。
【００３３】
続いて、作業計画立案支援装置１０は、決定した作業部分集合情報２５６を表示装置１４に表示する（Ｓ９１５）。
【００３４】
次に、図９の組合せ最適化計算Ｓ９１３及び作業部分集合の決定Ｓ９１４について詳細に説明する。組合せ最適化計算は、組合せ計画問題における手法を最適化したものである。
【００３５】
作業計画立案支援装置１０は、例えば次の定義に基づき組合せ最適化計算Ｓ９１３を行う。
「定義：
作業の全集合をTasks、各作業c∈Tasksで得られる効果（利得）をvalue(c)として抽象化する。このとき作業の集合Tasksから次のような部分集合ChosenTasksを選び出す．そして、制約を満たす範囲で、部分集合ChosenTasksにおけるvalue(c)の総和（＝Σvalue(c)）が最大になるものを作業部分集合として抽出する。
maximize Σvalue(c)
c ∈ChosenTasks⊆Tasks
但し、∀c1、 c2（c1≠c2） ∈ChosenTasks ;c1とc2の作業が競合しない
尚、∀x ∈ S; P(x) は、集合 S の任意の元 x に対して命題 P(x) が成立することを表す。」
【００３６】
ここでこの定義は、以下に示す等価な計算式に変換することができる。
まず作業ci(i=1,2,・・・,n)の選択有無の操作を次のように表現する。
ci∈{0,1} (i=1,2,・・・,n)                              ・・・式２
【００３７】
また作業期待値情報２５５（ここでは一例として図６に示す作業期待値情報２５５）から、目的関数は、
Σvalue(c)=72×c1+50×c2+48×c3+14×c4+20×c5+36×c6  ・・・式３
となる。
【００３８】
ここで作業ciを選択する場合は「ci=1」、作業ciを選択しない場合は「ci=0」となり、例えば、作業１〜４を選択する場合、c1〜c4は「1」、c5とc6は「0」となり、式３は、
Σvalue(c)＝72*1＋50*1＋48*1＋14*1＋20*0＋36*0
となる。また例えば作業１，４のみを選択する場合、c1とc4は「1」、他は「0」となり、
Σvalue(c)＝72*1＋50*0＋48*0＋14*1＋20*0＋36*0 = 72*1＋14*1
となる。
【００３９】
上記定義のうち「∀c1、 c2（c1≠c2） ∈ChosenTasks に対しc1とc2の作業が競合しない」については、式２から次のように表わすことができる：
ci+cj ∈{0,1}  (i≒j) ・・・式５
式５はciとcjの両方を選択する（ci=1かつcj=1）場合、即ちci+cj=2を排除することを意味しており、例えば図７に示した作業競合情報２５４であれば次のように表すことができる。
c1+c2∈{0、1}
c2+c3∈{0、1}
c2+c4∈{0、1}
c3+c4∈{0、1}
c1+c5∈{0、1}
【００４０】
図１０は、図６に示した作業期待値情報２５５における作業ＩＤが「１」〜「６」の６つの作業（以下、C1〜C6とする。）の夫々について{作業を行う、 作業を行わない}の全ての組合せ、即ち異なる６つのものからr個（r=1、2、・・・６）を選ぶ全ての組合せを列挙したものである。同図において、表中の数字「1」は、その作業（C１、C2・・・C6のいずれか）を選択することを、「0」はその作業を選択しないことを意味している。例えば、No.40の行は「（C1、C2、C3、C4、C5、C6）=(0、0、1、1、0、1)」となっているが、これは「C1＝0（選択しない）かつC2＝0（選択しない）かつC3＝1（選択する）かつC4＝1（選択する）かつC5＝0（選択しない）かつC6＝1（選択する）」の意味である。
【００４１】
ここで作業競合情報２５４が図７の内容である場合、「∀c3、c4 ∈ChosenTasks」 に対しc3とc4の２つの作業は競合しない」、即ち「c3+c4∈{0、1}」であるが、No.40のケースでは、「c3+c4=2」となるのでこの条件を満たさない、即ちNo.40の行の組合せは選択できず、No.40の「可否」には、この組合せが選択できないことを意味する「×」が設定されている。一方、作業が競合しない組合せについては「可否」に「○」が設定される。同図の場合は２２個の行の「可否」に「○」が設定されており、作業計画立案支援装置１０は、これらの行に対応する作業の組合せを作業部分集合として決定する。
【００４２】
図１１は、図１０の一部の行を抜粋し、「期待値」の列を追加したものである。この「期待値」の列には、式３に従って計算したΣvalue(c)の値が設定されている。
【００４３】
ここで「可否」に「○」が設定されている行のうち、Σvalue(c)が最大(maximize Σvalue(c))のものはNo.31の行（（C1、C2、C3、C4、C5、C6）=(1、0、0、1、0、1)，Σvalue(c)=１５８）であり、作業計画立案支援装置１０は図９のＳ９１４において作業部分集合{c1、c4、c6｝を生成する。
【００４４】
尚、一般的な組合せ計画問題の手法において、作業間の排他的な関係（競合関係）を考慮しつつ最適化の精度を向上させるには、同時に実施可能な作業の組合せを適切に選択した上で効果を算出する必要があり、作業の追加や取り消しを行う度に排他的な関係を確認する必要があり煩雑かつ膨大な計算を行う必要がある。例えば、コードクローンの数が１０００個である場合、{修正する、修正しない}の２通りの全ての組合せの数は２＾１０００通りとなり、現実的な時間内で探索を完了することが難しくなる。
【００４５】
そこで組合せの数が膨大な場合は、例えば、動的計画法、分枝限定法、遺伝的アルゴリズム等を適用して処理の煩雑さや負荷の軽減を図るようにしてもよい。この場合、分枝した部分問題に対する探索を省略する方法として作業間の排他関係を利用し、一度解いた部分問題を重複して解かないようにもしくは不必要な部分問題を解かないようにする。例えば、図１０に示した６４通りの組合せのうち「可否」に「×」が付与されている４２通りについては処理を省略することができる。
【００４６】
一例として分枝限定法を適用する場合を示す。分枝限定法とは、ある部分問題が実行不能であるあるいは最適解が得られないと判断される場合に、その部分問題を無視する（限定操作を行う）探索手法である。具体的には次のようになる。
（１）作業ciを含むペアと含まないペアの部分集合に分けて総期待値を各々評価する。
（２）最大の評価値を得る部分集合を採択する。
【００４７】
（１）では次の（１−ａ），（１−ｂ）のように分枝と評価を繰り返していく。
（１−ａ）  作業ciを含む組合せの中でもっとも期待値が大きいペアを見つける。
→以下、再帰的に注目するファイルを順次変えていき「含む組合せ」と「含まない組合せ」に分けて同様に評価する。
（１−ｂ）  作業ciを含まない組合せの中でもっとも期待値が大きいペアを見つける。
→  以下、再帰的に注目するファイルを順次変えていき「作業ciを含む組合せ」と「作業ciを含まない組合せ」に分けて同様に評価する。
【００４８】
分枝限定法では、一度解いた部分問題や不必要な部分問題を解かないことにより無駄な探索を省略して計算量を削減する。具体的には、上記（１−ａ）、（１−ｂ）の評価に際し、作業間の排他的な関係を制約として活用する。例えば、コードクローンＡの修正作業とコードクローンＢの修正作業との間に競合関係（排他関係）があり、コードクローンＡを修正する作業を選択するとコードクローンＢを修正する作業は選択できないとすれば、コードクローンＡを修正する作業とコードクローンＢを修正する作業の組合せについては探索の対象から除外する。
【００４９】
以上に説明したように、本実施形態においては、作業間の排他的な関係に基づく制約条件の下で複数の作業の中から目的関数が最大となるように選択した作業を作業部分集合として決定するので、ソフトウェア開発に係る作業計画の立案に際して有用な情報をユーザ等に提供することができる。このため、ソフトウェア開発において効率よく適切に作業計画を立案することができる。また作業間の排他的な関係に着目し、動的計画法、分枝限定法、遺伝的アルゴリズム等を随時適用するので、処理の煩雑さや負荷の軽減を図ることができる。
【００５０】
尚、以上では、複数の作業の中から目的関数が最大となる作業群を作業部分集合として決定したが、例えば、目的関数が所定の閾値を超える作業群を作業部分集合として決定するようにしてもよい。
【第２実施形態】
【００５１】
第１実施形態では、作業情報２５１、作業優先度情報２５３、及び作業競合情報２５４を外部から作業計画立案支援装置１０に与えているが、第２実施形態ではこれらを作業計画立案支援装置１０が生成する。また第２実施形態では、ソフトウェア開発における作業としてコードクローンの除去に関する作業を取り上げる。例えば、公知のコードクローン解析ツールに大規模のソースコードを入力すると数千から数万個のコードクローンが出力される場合もあるが、修正作業にかけられる工数には限りがあるため、これらのうちどのコードクローンを修正するかを決定（選択）する必要がある。第２実施形態では、作業計画立案支援装置１０が、コードクローンの修正作業を最適化（制約条件の下で効果を最大化）する情報を生成する構成を例として説明する。以下、第１実施形態との差異点を中心として説明する。
【００５２】
図１２に第２実施形態の作業計画立案支援装置１０の概略的な構成を示している。第２実施形態の作業計画立案支援装置１０は、第１実施形態の作業計画立案支援装置１０と同様の構成を備える。また第２実施形態の作業計画立案支援装置１０は、記憶装置１２に、作業分析ＰＧ２２０（コードクローン検出ＰＧ２２１、コードクローン分布解析ＰＧ２２２、コードクローン修正優先度決定ＰＧ２２３、及び作業競合情報生成ＰＧ２２４を含む。）、対象ソフトウェア２６１、構成要素情報２６２、修正優先度ポリシー２６３、コードクローン検出結果２６４、及びコードクローン分布情報２６５を記憶している点において第１実施形態の作業計画立案支援装置１０と構成が異なる。
【００５３】
以下の説明において、作業分析ＰＧ２２０によって実現される機能のことを作業分析部２８０と、また、コードクローン検出ＰＧ２２１、コードクローン分布解析ＰＧ２２２、コードクローン修正優先度決定ＰＧ２２３、及び作業競合情報生成ＰＧ２２４の夫々によって実現される機能のことを、順に、コードクローン検出部２８１、コードクローン分布解析部２８２、コードクローン修正優先度決定部２８３、及び作業競合情報生成部２８４とも称する。
【００５４】
第２実施形態では、第１実施形態における組合せ計画問題における「作業が競合しない」状況を、次のように表現する。
「作業が夫々、修正対象となるコードクローンの一つに対応づけられているものとしてコードクローンの修正にかかる作業（コードクローンの共通化等）の全集合を Clones、各コードクローンの修正作業c∈Clonesにおける各コードクローンが含まれているファイルの集合をFiles(c)とし、
∀c1、 c2 ∈ChosenTasks に対しFiles(c1)∩Files(c2)=φ」
尚、上記表現は、例えば、コードクローンＡとコードクローンＢとが同一のモジュール（ファイル）に存在し、コードクローンＡを修正することによりファイルの内容が変更されてファイルのコードクローンＢが消失してしまう等の理由によりコードクローンＢの修正が行えないといった状況を想定している。例えば、コードクローンＡがソースコード（ファイル）の１０行目から２０行目までを含み、コードクローンＢが同じソースコード（ファイル）の１５行目から３０行目までを含んでいる場合である。第２実施形態における作業競合情報２５４は、このような想定に基づき、１度選択したモジュール（ファイル）に関わるコードクローンの修正作業を２度は選択することができない（２つの修正作業が競合している（排他的な関係にある））という関係をコードクローンの識別子（以下、クローンＩＤとも称する。）のペアとして表現している。
【００５５】
図１３は、以下の説明に用いる、作業分析部２８０が作業分析の対象とするソフトウェア（以下、対象ソフトウェア２６１とも称する。）の構成を説明する図である。対象ソフトウェア２６１は、複数の構成要素（モジュール）を含んで構成されている。ここではこのように対象ソフトウェア２６１の構成要素がモジュールである場合を例として説明するが、構成要素は、例えばファイルや関数等であってもよい。
【００５６】
同図に示すように、対象ソフトウェア２６１は、モジュールｍ１，ｍ２，・・・，ｍ５を含む。また対象ソフトウェア２６１には、複数のコードクローン（クローンＩＤが夫々「１」、「２」、「３」、「４」、「５」の５つのコードクローン）が存在する。例えば、モジュールｍ１には、クローンＩＤが夫々「１」、「２」の２つのコードクローンが存在する。
【００５７】
図１４は、作業計画立案支援装置１０が、コードクローンの分布解析に際して行う処理（以下、コードクローン分布解析処理Ｓ１４００とも称する。）の流れを説明するデータフロー図である。
【００５８】
コードクローン検出部２８１は、対象ソフトウェア２６１に対して、例えば、公知のコードクローン検出ツール（例えば「CCFinderX」）を実行することにより、対象ソフトウェア２６１のソースコード内のコードクローンを検出する。
【００５９】
コードクローン分布解析部２８２は、対象ソフトウェア２６１の構成要素情報２６２、及びコードクローン検出結果２６４に基づき、対象ソフトウェア２６１におけるコードクローンの分布解析を行い、対象ソフトウェア２６１におけるコードクローンの分布が記載されたコードクローン分布情報２６５を生成する。
【００６０】
図１５に構成要素情報２６２の一例を示す。同図に示すように、構成要素情報２６２には、ファイル（ファイル名）とモジュール（モジュール名）との対応を示す情報が記載されている。
【００６１】
図１６にコードクローン検出結果２６４の一例を示す。同図に示すように、コードクローン検出結果２６４には、コードクローン検出ツールにより検出されたコードクローン（クローンＩＤ）とそのコードクローンを含むファイル（ファイル名）との対応を示す情報が記載されている。
【００６２】
図１７にコードクローン分布情報２６５の一例を示す。同図に示すように、コードクローン分布情報２６５には、コードクローン（クローンＩＤ）とモジュール（モジュール名）との対応を示す情報が含まれている。
【００６３】
図１４に戻り、コードクローン修正優先度決定部２８３は、コードクローン分布情報２６５及び修正優先度ポリシー２６３に基づきコードクローンの修正優先度を決定し、決定した修正優先度を記載した作業優先度情報２５３を生成する。修正優先度ポリシー２６３及び作業優先度情報２５３の詳細については後述する。
【００６４】
作業競合情報生成部２８４は、コードクローン分布情報２６５及び構成要素情報２６２に基づき作業競合情報２５４（作業競合情報（辺リスト形式）２５４Ａ及び作業競合情報（マトリクス形式）２５４Ｂ）を生成する。
【００６５】
このように第２実施形態においては、作業計画立案支援装置１０が、作業情報２５１、作業優先度情報２５３、及び作業競合情報２５４を自動的に生成するので、ユーザ等は外部から作業計画立案支援装置１０にこれらの情報を与えることなく、作業計画の立案を支援するための情報を得ることができる。
【００６６】
図１８は、作業計画立案支援装置１０の作業分析部２８０が、対象ソフトウェア２６１を分析して作業競合情報２５４を生成する際に行う処理（以下、作業競合情報生成処理Ｓ１８００とも称する。）を説明するフローチャートである。
【００６７】
まず作業計画立案支援装置１０は、対象ソフトウェア２６１及び構成要素情報２６２を取得して記憶装置１２に記憶する（Ｓ１８１１）。
【００６８】
続いて、作業計画立案支援装置１０は、コードクローン検出ツールを実行し、対象ソフトウェア２６１に含まれているコードクローンを検出し、コードクローン検出結果２６４を生成する（Ｓ１８１２）。
【００６９】
続いて、作業計画立案支援装置１０は、構成要素情報２６２とコードクローン検出結果２６４とに基づきコードクローンの分布を解析してコードクローン分布情報２６５を生成する（Ｓ１８１３）。この処理（以下、コードクローン分布解析処理Ｓ１８１３とも称する。）の詳細については後述する。
【００７０】
続いて、作業計画立案支援装置１０は、修正優先度ポリシー２６３に従い、コードクローン分布情報２６５に含まれている各コードクローンの修正優先度を決定する（Ｓ１８１４）。
【００７１】
続いて、作業計画立案支援装置１０は、構成要素情報２６２とコードクローン分布情報２６５に基づき作業競合情報２５４を生成する（Ｓ１８１５）。この処理（以下、作業競合情報生成処理Ｓ１８１５とも称する。）については後述する。
【００７２】
続いて、作業計画立案支援装置１０は、Ｓ１８１５で生成した作業競合情報２５４を表示装置１４に表示する（Ｓ１８１６）。
【００７３】
図１９は、図１８のコードクローン分布解析処理Ｓ１８１３の詳細を説明するフローチャートである。
【００７４】
まず作業計画立案支援装置１０は、変数Ｎに１を設定する（Ｓ１８１３１）。
【００７５】
次に作業計画立案支援装置１０は、コードクローン検出結果２６４のＮ行目の内容を取り出し、クローンＩＤの列の値を変数ＣＩＤ、ファイル名の列の値を変数ＦＩＬＥに代入する（Ｓ１８１３２）。
【００７６】
次に作業計画立案支援装置１０は、構成要素情報２６２から、ファイル名の列が変数ＦＩＬＥの値と一致する行を検索し、見つかった行のモジュール名の列の値を変数ＭＯＤＵＬＥに代入する（Ｓ１８１３３）。
【００７７】
次に作業計画立案支援装置１０は、コードクローン分布情報２６５のＮ行目のクローンＩＤの列に変数ＣＩＤの値、モジュール名の列に変数ＭＯＤＵＬＥの値を入力する（Ｓ１８１３４）。
【００７８】
次に作業計画立案支援装置１０は、Ｎ行目がコードクローン検出結果２６４の最終行であるか否かを判定する（Ｓ１８１３５）。Ｎ行目がコードクローン検出結果２６４の最終行であれば（Ｓ１８１３５：ＹＥＳ）、作業計画立案支援装置１０は、コードクローン分布解析処理Ｓ１８１３を終了する。Ｎ行目がコードクローン検出結果２６４の最終行でなければ（Ｓ１８１３５：ＮＯ）、作業計画立案支援装置１０は、Ｎ＝Ｎ＋１（Ｓ１８１３６）とし、その後、処理はＳ１８１３２に戻る。
【００７９】
図２０は、図１８の作業競合情報生成処理Ｓ１８１５を説明するデータフロー図である。同図に示すように、作業競合情報生成部２８４は、テーブル生成部２８４１、競合判定部２８４２、及びマトリクス要素入力部２８４３を含む。
【００８０】
テーブル生成部２８４１は、コードクローン分布情報２６５に基づき、コードクローンのクローンＩＤを行及び列とするテーブル２０００を生成する。
【００８１】
図２１にテーブル２０００の一例を示す。同図に示すように、テーブル２０００の行及び列には、コードクローン検出処理で検出された各コードクローンのクローンＩＤ（この例では「１，２，３，４，５」）が列挙されている。
【００８２】
図２０に戻り、競合判定部２８４２は、コードクローン分布情報２６５に基づき、コードクローンの組合せについて修正が競合するかどうかを判定し、判定した結果を作業競合情報（辺リスト形式）２５４Ａとして出力する。一方、マトリクス要素入力部２８４３は、作業競合情報（辺リスト形式）２５４Ａに基づき、テーブル生成部２８４１が生成したテーブル２０００にデータを入力して作業競合情報（マトリクス形式）２５４Ｂを生成する。
【００８３】
図２２に作業競合情報（辺リスト形式）２５４Ａの一例を示す。同図において、例えば「（１，２）」は、クローンＩＤが「１」のコードクローンの修正とクローンＩＤが「２」のコードクローンの修正が競合関係にあることを表している。
【００８４】
図２３に作業競合情報（マトリクス形式）２５４Ｂの一例を示す。作業競合情報（マトリクス形式）２５４Ｂは、コードクローン間の修正作業の競合関係をマトリクス形式で表したものである。コードクローン間に修正作業の競合関係がある場合は対応するセルに「×」が入力される。同図において、例えば、１行２列のセルに「×」が入力されている。これはクローンＩＤが「１」のコードクローンとクローンＩＤが「２」のコードクローンとの間に競合関係があることを示している。
【００８５】
図２４は、図１８における作業競合情報生成処理Ｓ１８１５の詳細を説明するフローチャートである。以下、同図とともに説明する。
【００８６】
まず作業計画立案支援装置１０は、コードクローン分布情報２６５に基づきテーブル２０００を生成する（Ｓ１８１５１）。
【００８７】
続いて、作業計画立案支援装置１０は、コードクローン分布情報２６５に基づき、夫々のコードクローンの組に対して修正作業が競合するかどうかを判定し、結果を作業競合情報２５４として出力する（Ｓ１８１５２）。例えば、図１７に示したコードクローン分布情報２６５においては、モジュール名が「ｍ１」の行が２つ（クローンＩＤが「１」の行とクローンＩＤが「２」の行）含まれているが、この場合、作業計画立案支援装置１０は、コードクローンの組（１，２）は「競合する」と判定する。
【００８８】
続いて、作業計画立案支援装置１０は、作業競合情報２５４を参照し、テーブル２０００の対応する箇所に「×」を入力する。そして作業競合情報２５４の全ての内容についてテーブル２０００への入力が完了すると、作業計画立案支援装置１０は、テーブル２０００を作業競合情報（マトリクス）２５４Ｂとして出力する（Ｓ１８１５３）。
【００８９】
続いて、図１４において、作業計画立案支援装置１０のコードクローン優先度決定部２８３が、修正優先度ポリシー２６３及びコードクローン分布情報２６５に基づき作業優先度情報２５３を生成する処理について説明する。
【００９０】
作業計画立案支援装置１０は、例えば、コードクローンの規模の大きさ、修正の容易さ、チーム担当範囲を跨ぐか否か等を基準として修正作業の優先度を決定する。例えば、規模の大きいコードクローンほど修正による改善効果が大きいことから、作業計画立案支援装置１０は、規模の大きいコードクローンほど修正作業の優先度を高く設定する。また例えば、修正が容易なコードクローンほど少ない工数で修正を完了できることから、作業計画立案支援装置１０は、修正が容易なコードクローンほど修正作業の優先度を高く設定する。また例えば、チーム担当範囲を跨ぐようなコードクローンは保守困難化の原因となることから、作業計画立案支援装置１０は、そのようなコードクローン程、修正作業の優先度を高く設定する。
【００９１】
図１４に示した修正優先度ポリシー２６３には、このような優先度を決定する際の指針となる情報が設定される。例えば「規模が大きいコードクローンほど優先度が高い」という指針であれば、例えば「３０行以上のコードクローンならば優先度Ａ、１０行以上２９行以下のコードクローンならば優先度Ｂ、９行以下のコードクローンならば優先度Ｃとする」といった内容が修正優先度ポリシー２６３に設定される。
【００９２】
尚、複数の指針によって優先度を決定するようにしてもよい。例えば、コードクローンの規模と修正の容易さの２つの指針によって優先度を決定するようにしてもよい。一例として、コードクローンの規模により第１優先度Ａ、Ｂ、Ｃを決定し、続いて、修正の容易さにより第２優先度ａ、ｂ、ｃを決定し、これらの第１及び第２優先度の組合せ（（Ａ、ａ）、（Ａ、ｂ）、（Ａ、ｃ）、（Ｂ、ａ）、（Ｂ、ｂ）、（Ｂ、ｃ）、（Ｃ、ａ）、（Ｃ、ｂ）、（Ｃ、ｃ）等）について優先度を設定するようにする。優先度としては、例えば、各組合せに辞書式に優先度を設定する方法、第１及び第２優先度が共に高い（又は低い）場合に高い（又は低い）優先度を設定し、その他の場合は複合優先度が等しいと判定する方法等が考えられる。コードクローン修正優先度決定部２８３は、このようにして設定された修正優先度ポリシー２６３に従ってコードクローン分布情報２６５に含まれる各コードクローンの修正優先度を決定する。
【第３実施形態】
【００９３】
第１実施形態及び第２実施形態では、作業計画立案支援装置１０が作業部分集合を決定するにあたり制約条件として作業競合情報２５４（複数の作業の間の競合関係）を課していたが、第３実施形態では、制約条件としてさらに作業の投入量に関する条件（時間制約等）を課す。例えば、アジャイルソフトウェア開発（agile software development)においては、リスクの最小化等を目的として、所定の短い周期（例えば１〜４週間）で 計画、要求分析、設計、実装(コーディング)、テスト、文書化等の作業が繰り返し発生する。このような開発手法においては作業計画の立案に際して周期的な反復時間単位（イテレーション等）内に同程度の作業量（作業時間あるいは工数）が配分されるようにすることが望ましい。そこで第３実施形態の作業計画立案支援装置１０は、所定時間において最大の効果が得られるように作業部分集合を選択する。
【００９４】
ここで第１実施形態の作業の選択問題に作業の投入量に関する条件（［制約条件２］）を課して定義し直すと次のようになる。
「定義：
maximize Σvalue(c)
c ∈ChosenTasks⊆Tasks
但し、
c1、 c2（c1≠c2） ∈ChosenTasks に対しc1とc2の作業が競合しない  
・・・［制約条件１］
Σcost(c) ≦投入可能な工数や作業時間                 
・・・［制約条件２］」
【００９５】
また第２実施形態のコードクローンの検出結果に基づく修正作業の選択問題について作業の投入量に関する条件（［制約条件２］）を課して定義し直すと次のようになる。
「定義：
maximize Σvalue(c)
c ∈ChosenClones⊆Clones
但し、
∀c1、 c2 ∈ChosenClones に対しFiles(c1)∩Files(c2)=φ  
・・・［制約条件１］
Σcost(c) ≦投入可能な工数や作業時間                    
・・・［制約条件２］」
【００９６】
尚、以上の各定義においては、クローン解析ツールが出力したクローンの全集合を Clones、クローンc∈Clonesに属するファイルの集合をFiles(c)、それを共通化して得られる共通ソフトウェアの価値（利得）をvalue(c)とし、そのコスト（共通化の工数等）をcost(c)としている。
【００９７】
図２５は、第３実施形態の作業計画立案支援装置１０が行う処理（以下、作業期待値決定処理Ｓ２５００とも称する。）の概略を説明するデータフロー図である。図２の作業期待値決定処理Ｓ２００との差異は、作業計画立案支援装置１０の作業部分集合決定部２７２が作業部分集合情報２５６を生成する際に上記［制約条件２］として量的制約ポリシー２５８を参照する点である。
【００９８】
図２６に量的制約ポリシーの例（量的制約ポリシー２５８Ａ，２５８Ｂ）を示す。量的制約ポリシー２５８Ａには、上記［制約条件２］として投入資源量上限工数２５８１（例えば、イテレーション周期の指定）が指定されている。一方、量的制約ポリシー２５８Ｂは、作業（修正）の容易性等の基準に基づき複数段階にカテゴライズして量的制約ポリシーを指定する形態となっている。
【００９９】
以下、第２実施形態の作業計画立案支援装置１０の構成において［制約条件２］を課した場合を例として、第３実施形態における作業計画立案支援装置１０の機能について説明する。尚、第２実施形態では、作業が対象ソフトウェア２６１のソースコードに含まれているコードクローンの修正作業である場合を例として説明したが、第３実施形態では、作業が対象ソフトウェア２６１のテストである場合を例として説明する。第３実施形態の作業計画立案支援装置１０の基本的な機能については、クローンＩＤをテスト項目と読み替えた場合における第２実施形態の作業計画立案支援装置１０の機能と同様である。第３実施形態では、図７における作業競合情報２５４はテスト項目の競合関係を示すものであり、例えば、図７の(１，２)は、テスト項目１とテスト項目２とが排他関係にあることを示す。また第３実施形態では図９の組合せ最適化計算処理Ｓ９１３に［制約条件２］に関する処理が含まれる。以下、第２実施形態の作業計画立案支援装置１０との差異を中心として説明する。
【０１００】
図２７は、図１１の表に「所要時間」の列と「全体可否」の列を追加したものである。「所用時間」の欄には、当該行の図２７の量的制約ポリシー２５８Ｂのcost(c)の総和（Σcost(c)）が５０以上であれば「２」が、総和（Σcost(c)）が５０未満であれば「１」が設定される。「可否」の欄には［制約条件１］成否（成立する場合は「○」、成立しない場合は「×」）が、「全体可否」の欄には［制約条件１］及び［制約条件２］の双方が成立するか否か（双方がともに成立する場合は「○」、それ以外は「×」）が設定される。図２７は［制約条件２］として「所要時間の上限が３以下」が課されている場合である。      
【０１０１】
前述した定義における「maximize Σvalue(c)」は、全体可否が「○」の行の「期待値」である。この例では、No.12の「期待値」である「１０８」がmaximize Σvalue(c)となり、作業計画立案支援装置１０は、図９のＳ９１４において作業部分集合情報２５６として{c1、c6｝を決定する。尚、図９の組合せ最適化計算処理Ｓ９１３において分枝限定法を適用する場合は、例えば［制約条件１］に加えて［制約条件２］に係るΣcost(c)の上限（例えば、総許容工数）以降の枝を除外することになる。
【０１０２】
ところで、作業部分集合情報２５６として、作業計画立案支援装置１０が、最適解（目的関数を最大化する解）だけでなく、次善の作業部分集合や近似解を併せて生成出力する形態であってもよい。例えば、作業部分集合情報２５６として、
（i）所要時間の上限を「３」から「４」に増やした状態（即ち少しだけ制約を緩和した状態）でmaximize Σvalue(c)を得るような作業部分集合、及びその場合のmaximize Σvalue(c)の変化量、
（ii）イテレーションの周期の長さが所要時間上限として指定されている場合、その周期の倍数に相当する時間（例えば、所要時間の上限が「６」（＝現在の「３」の２倍））でmaximize Σvalue(c)を得る作業部分集合、及びその場合のmaximize Σvalue(c)の変化量を最適解とともに生成出力するようにしてもよい。この場合、例えば、制約の微小な緩和等の操作によるmaximize Σvalue(c)の変化量が大きい場合は作業計画において［制約条件２］の変更を容認する判断を促しうる。上記（ii）は例えば複数のチーム間でイテレーション終了のタイミングで同期を取りつつ作業を進める開発形態での利用が想定される。例えば、他のチームがイテレーションの周期の倍数に相当する終了タイミングで作業を完了させるようにすれば、maximize Σvalue(c)の値を踏まえつつチーム間で作業の同期を取るタイミングを確保しつつ作業を進めるといった計画を立案することができる。
【０１０３】
尚、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１０４】
上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウエアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置や、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１０５】
制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【０１０６】
以上の実施形態では、対象ソフトウェア２６１のソースコードの管理（コードクローンの除去）に関する作業について作業部分集合を決定する場合を一例として説明したが、本発明は、例えば、対象ソフトウェア２６１のドキュメント類の管理に関する作業について作業部分集合を決定する場合にも適用することができる。
【０１０７】
また本発明は、ソフトウェアが正しく動作するか確認するためのコードであるテストコードの管理に関する作業について拡張して適用することができる。テストコードの管理に関する制約条件としては、例えば、複数のチームでテストを分担して作業を進める場合に、あるチームの修正作業が他のチームに影響してチーム間の調整作業や他のチームの作業待ちが発生しうる関係にある複数のテスト項目を複数チームに跨がって分担させないように（例えば、あるテスト項目をあるチームが選択した場合に、同一のイテレーションの期間内に他のテスト項目を他のチームが選択しないように）するといったものが考えられる。このような制約を課すことで、作業待ち時間の発生等、開発の迅速性が損なわれるリスクを回避することができる。
【符号の説明】
【０１０８】
１０  作業計画立案支援装置、２５１  作業情報、２５２  作業期待値ポリシー、２５３  作業優先度情報、２５４  作業競合情報、２５５  作業期待値情報、２５６  作業部分集合情報、２６１  対象ソフトウェア、２６２  構成要素情報、２６３  修正優先度ポリシー、２６４  コードクローン検出結果、２６５  コードクローン分布情報、２８０  作業分析部、２８１  コードクローン検出部、２８２  コードクローン分布解析部、２８３  コードクローン修正優先度決定部、２８４  作業競合情報生成部、２７１  作業期待値決定部、２７２  作業部分集合決定部、Ｓ２００  作業期待値決定処理、Ｓ９００  作業部分集合決定処理、Ｓ１４００  コードクローン分布解析処理、Ｓ１８００  作業競合情報生成処理、Ｓ１８１３  コードクローン分布解析処理、Ｓ１８１５  作業競合情報生成処理
【図１】
2015219747.tif 000003
【図２】
2015219747.tif 000004
【図３】
2015219747.tif 000005
【図４】
2015219747.tif 000006
【図５】
2015219747.tif 000007
【図６】
2015219747.tif 000008
【図７】
2015219747.tif 000009
【図８】
2015219747.tif 000010
【図９】
2015219747.tif 000011
【図１０】
2015219747.tif 000012
【図１１】
2015219747.tif 000013
【図１２】
2015219747.tif 000014
【図１３】
2015219747.tif 000015
【図１４】
2015219747.tif 000016
【図１５】
2015219747.tif 000017
【図１６】
2015219747.tif 000018
【図１７】
2015219747.tif 000019
【図１８】
2015219747.tif 000020
【図１９】
2015219747.tif 000021
【図２０】
2015219747.tif 000022
【図２１】
2015219747.tif 000023
【図２２】
2015219747.tif 000024
【図２３】
2015219747.tif 000025
【図２４】
2015219747.tif 000026
【図２５】
2015219747.tif 000027
【図２６】
2015219747.tif 000028
【図２７】
2015219747.tif 000029