(57)【要約】      （修正有）【課題】プログラムの開発者の過去の開発実績から得られた能力に基づいて工数を見積もる。【解決手段】開発者による第１のプログラムの過去の開発実績を用いて算出される見積対象となる第２のプログラムの作業工数を見積もるための見積要求に応じて、第１のプログラムの過去の開発実績が記憶された開発実績情報と、第１のプログラムの編集履歴が記憶された編集履歴情報とを収集する実績情報収集部と、開発実績情報と編集履歴情報とに基づいて、開発者の開発能力を算出し、算出した開発者の開発能力と第２のプログラムのサイズが記憶されたサイズ管理情報とに基づいて、開発者による第２のプログラムの作業工数を算出する工数算出部と、を備える。【選択図】図１０
2019008455.tif 000002
【特許請求の範囲】
【請求項１】
開発者による第１のプログラムの過去の開発実績を用いて算出される見積対象となる第２のプログラムの作業工数を見積もるための見積要求に応じて、前記第１のプログラムの過去の開発実績が記憶された開発実績情報と、前記第１のプログラムの編集履歴が記憶された編集履歴情報とを収集する実績情報収集部と、
前記開発実績情報と前記編集履歴情報とに基づいて、前記開発者の開発能力を算出し、算出した前記開発者の開発能力と前記第２のプログラムのサイズが記憶されたサイズ管理情報とに基づいて、前記開発者による前記第２のプログラムの作業工数を算出する工数算出部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記実績情報収集部からの要求に応じて、前記開発者により編集された前記第１のプログラムの開発工程を含む開発工程管理情報を出力する案件情報管理部をさらに備え、
前記工数算出部は、前記案件情報管理部が出力した前記開発工程管理情報に基づいて、前記開発者による前記第１のプログラムの開発期間を算出し、算出した前記開発期間と前記開発実績情報と前記編集履歴情報とに基づいて、前記開発者による前記第２のプログラムの作業工数を算出する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記工数算出部は、前記開発者の前記開発実績情報から開発言語と開発フレームワークとにより開発された前記第１のプログラムの単位期間あたりの編集サイズである編集行数を抽出し、抽出した前記編集行数と前記編集履歴情報とに基づいて、前記開発者の開発能力を算出する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記工数算出部は、前記編集行数が抽出できない場合、前記開発言語に類似する言語と前記類似する言語の開発フレームワークとにより開発された第３のプログラムの前記編集行数を抽出し、抽出した前記編集行数と前記編集履歴情報とに基づいて、前記開発者の開発能力を算出する、
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記工数算出部は、文法が前記開発言語に類似する言語で編集された前記第３のプログラムの前記編集行数を抽出する、
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
開発者による第１のプログラムの過去の開発実績を用いて算出される見積対象となる第２のプログラムの作業工数を見積もるための見積要求の入力を受け付ける入力部と、
前記見積要求により見積もられた結果を表示する表示部と、を備えた端末装置と、
前記端末装置からの前記見積要求に応じて、前記開発者による前記第１のプログラムの過去の開発実績が記憶された開発実績情報と、前記第１のプログラムの編集履歴が記憶された編集履歴管理情報とを収集する実績情報収集部と、
前記開発実績情報と前記編集履歴情報とに基づいて、前記開発者の開発能力を算出し、算出した前記開発者の開発能力と前記第２のプログラムのサイズが記憶されたサイズ管理情報とに基づいて、前記開発者による前記第２のプログラムの作業工数を算出する工数算出部と、を備える情報処理装置と、
を備えることを特徴とする工数見積システム。
【請求項７】
表示部と、
第１のプログラムの開発者と、前記開発者の人件費と、前記第１のプログラムの過去の開発実績を用いて算出される見積対象となる第２のプログラムを識別するための情報と、を含む第１の画面と、前記第２のプログラムのサイズが記憶されたサイズ管理情報と、前記開発者による前記第１のプログラムの過去の開発実績が記憶された開発実績情報と前記第１のプログラムの編集履歴が記憶された編集履歴管理情報とに基づいて算出された前記開発者の開発能力と、前記開発者の開発能力と前記第２のプログラムのサイズが記憶されたサイズ管理情報とに基づいて算出された前記開発者による前記第２のプログラムの作業工数と、を含む第２の画面と、を前記表示部に表示する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの開発者の能力を算出して工数を見積もる情報処理装置、及び、工数見積システムに関するものである。
【背景技術】
【０００２】
従来、プログラムの改変に伴う作業工数を見積もる場合、改変対象のプログラムの数量を明らかにした上で、固定的な単位作業量を掛け合わせ全体の作業工数を見積もっていた。  
具体的には特許文献１に開示されているものがある。特許文献１によると、過去にプログラムを実装した期間の情報に基づいて開発に必要な作業時間および開発人数を見積ることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−０３００３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
現在、オープンソースソフトウェア（以下、「ＯＳＳ」と記す。）と称するソフトウェアが世界中で公開されており、ＯＳＳを活用したシステム開発が主流になりつつある。  
特に、ＧＩＴと呼ばれるソースコードを共有するＯＳＳが普及しており、システムエンジニア（以下「ＳＥ」と記す）は、完成されたソフトウェアを利用するだけでなく、既存のソフトウェアのソースコードを活用して新たなソフトウェアを開発する形態が浸透し始めている。ＧＩＴを活用することで、ＳＥは、公開されている膨大な数量のソースコードから自らの要件に合致するものを見つけ出し、流用してシステムを構築できるようになった。
【０００５】
そこで、システム構築の際に、スクラッチから構築するか、公開されているソースコードを改変するかを選択するために、公開されているソースコードを自身の要件に合わせて改変するための工数・費用を見積もり、可視化する技術が求められている。例えば、特許文献１に示す従来技術では、定められた作業に対する工数・想定費用を積み上げることで、作業工数・コストを明らかにしていた。
【０００６】
しかし、ソースコードの改変を担当する作業者には、習熟している開発言語や開発フレームワーク、言語のバージョンの差異が存在する。したがって、改変を行う作業者の能力や作業実績、改変しようとするソースコードの特徴を把握し、工数・想定費用を見積もることが望ましいが、従来技術では作業者の能力を考慮できない。
【０００７】
そこで本発明の目的は、プログラムの開発者の過去の開発実績から得られた能力に基づいて工数を見積もることが可能な情報処理装置、及び、工数見積システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明にかかる情報処理装置は、開発者による第１のプログラムの過去の開発実績を用いて算出される見積対象となる第２のプログラムの作業工数を見積もるための見積要求に応じて、前記第１のプログラムの過去の開発実績が記憶された開発実績情報と、前記第１のプログラムの編集履歴が記憶された編集履歴情報とを収集する実績情報収集部と、前記開発実績情報と前記編集履歴情報とに基づいて、前記開発者の開発能力を算出し、算出した前記開発者の開発能力と前記第２のプログラムのサイズが記憶されたサイズ管理情報とに基づいて、前記開発者による前記第２のプログラムの作業工数を算出する工数算出部と、を備えることを特徴とする情報処理装置として構成される。  
また、本発明は、上記情報処理装置を備えた工数見積システムとしえも把握される。
【発明の効果】
【０００９】
本発明によれば、プログラムの開発者の過去の開発実績から得られた能力に基づいて工数を見積もることができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態によるプログラム編集工数見積システムの全体構成を示すブロック図の例である。
【図２】開発者管理テーブルの例である。
【図３】収集データ管理テーブルの例である。
【図４】類似言語テーブルの例である。
【図５】能力推定結果テーブルの例である。
【図６】工程データの例である。
【図７】開発プログラムメタ情報の例である。
【図８】評価対象コードメタ情報の例である。
【図９】工数見積装置と管理端末との間の処理手順を示すフローチャートの例である。
【図１０】システムを構成する各処理部や見積担当者との間の処理相互作用を示すシーケンス図の例である。
【図１１】工数見積装置内のプログラムの工数算出部が開発者の能力を算出する処理手順を示すフローチャートの例である。
【図１２】工数見積装置内のプログラムの工数算出部がプログラムの編集工数を算出する処理手順を示すフローチャートの例である。
【図１３】プログラム編集工数見積システムの操作画面の例である。
【発明を実施するための形態】
【実施例１】
【００１１】
以下図面について、本発明の一実施の形態を詳述する。  
（本実施の形態によるプログラム編集工数見積システムの構成）
図１において、本実施の形態によるプログラム編集工数見積システム（以下、これをシステムと呼ぶ）１は、以下のように構成される。すなわち、システム１は、ネットワーク５４を介して相互に接続された工数見積装置１００とスクリプト共有装置１２０と、案件情報管理装置１３０と、工数見積装置管理端末（以下、これを管理端末と呼ぶ）１４０と、プログラム開発端末１５０と、を備えて構成される。
【００１２】
■各装置の構成
工数見積装置１００、スクリプト共有装置１２０、案件情報共有装置１３０、管理端末１４０、プログラム開発端末１５０は、それそれ、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、主記憶装置１０２、外部インターフェース１０３、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の二次記憶装置１０４等の構成要素を備えた、ハードウェアとしては一般的なコンピュータ装置である。なお図１では図示していないが、スクリプト共有装置１２０、案件情報共有装置１３０もハードウェアとしては一般的なコンピュータ装置であり、上記同様の構成要素を有している。
【００１３】
工数見積装置１１０の二次記憶装置１０４には、データ群１１５、プログラム群１１６の他、各種ファイルやデータを格納する。  
スクリプト共装置１２０の二次記憶装置１２１には、データ群１２７、プログラム群１２６の他、各種ファイルやデータを格納する。  
案件情報管理装置１３０の二次記憶装置１３１には、データ群１３６、プログラム群１３５の他、各種ファイルやデータを格納する。
【００１４】
なお、各装置及び構成要素は複数の装置に分かれている必要はなく、１つの装置で構成されてもよい。以下、プログラム群を構成する各プログラムや処理部が行為主体であるかのように記載する場合があるが、実際には、各コンピュータ装置が具備するオペレーティングシステム（以下ＯＳと記す）、ドライバソフトウェアの制御管理処理と連携しながら、コンピュータ装置のＣＰＵが、当該プログラムを実行して処理を行う主体であることはいうまでもない。
【００１５】
■工数見積装置１００のデータ群１１５の構成
データ群１１５は、後述するデータベース管理部１１４が管理する複数の管理テーブルを備える。データ群１１５には、開発者管理テーブル１０５、収集データ管理テーブル１０６、能力算出結果テーブル１０７、類似言語テーブル１０８が含まれる。なお、各テーブルの構成は後述する。
【００１６】
■工数見積装置１００のプログラム群１１６の構成
プログラム群１１６は、実績情報収集部１１０、工数算出部１１１、周辺装置疎通確認部１１２、実行基盤部１１３、データベース管理部１１４を有する。
【００１７】
周辺装置疎通確認部１１２は、スクリプト共有装置１２０、案件情報管理装置１３０、管理端末１４０の各装置との疎通を確認し、開発者氏名と開発者認証情報を開発者管理テーブル１０５に格納する。
【００１８】
実行基盤部１１３は、前述のデータベース管理部１１４と、後述する実績情報収集部１１０、工数算出部１１１、周辺装置疎通確認部１１２の各部との間のデータの入出力や実行制御を行う。実行基盤部１１３の実装形態としては、例えばＲｕｂｙ  ｏｎ  Ｒａｉｌｓ（ＲｏＲ）やＪａｖａプログラム実行処理系等の実行基盤がある。これらの実行処理系・実行基盤の構成・作用の詳細については多数の公開情報があるため説明は割愛する。なお実行基盤部１１３の実装形態はＲｏＲやＪａｖａ（登録商標）に限定されるものではなく、他の実行処理系・実行基盤であってもよい。
【００１９】
データベース管理部１１４は、前述のデータ群１１５の管理と、後述する実行基盤部１１３との間のデータ入出力を実行・制御する。
【００２０】
実績情報収集部１１０は、後述する工数算出部１１１のサブルーチンである。実績情報収集部１１０は、案件情報管理装置１３０の案件情報管理部１３２から工程データ１３４を収集し、スクリプト共有装置１２０の開発物管理部１２２を介して開発プログラム群メタ情報１２５を収集する。また、実績情報収集部１１０は、収集した工程データ１３４と開発プログラム群メタ情報１２５から、開発者が工程データ１３４に示した開発期間中に編集した1日毎の行数を抽出し、収集データ管理テーブル１０６に格納する。また、実績情報収集部１１０は、上記格納が完了した後に工数算出部１１１へ情報収集完了を通知する。
【００２１】
工数算出部１１１は、開発者管理テーブル１０５から、特定の開発者氏名と開発者認証情報を抽出し、見積対象コードを開発物管理部１２２に登録する。また、工数算出部１１１は、前述の実績情報収集部１１０の処理を実行し、特定の開発者の能力を算出するとともに、見積対象コードの編集工数を算出する。見積対象コードは、編集対象となるプログラムを識別するための情報である。開発者能力算出方法および工数算出方法の詳細は図１１と図１２で詳述する。
【００２２】
■スクリプト共有装置１２０の構成
スクリプト共有装置１２０のプログラム群１２６は開発物管理部１２２から構成される。  
開発物管理部１２２は、管理端末１４０およびプログラム開発端末１５０からの処理要求に応じて、開発物または見積対象コードを登録し、登録された開発物および見積対象コードのメタ情報（例えば、開発言語、編集日時、編集行数など）を抽出する。
【００２３】
また、開発物管理部１２２は、実績情報収集部１１０からの開発者の全開発物の名称の抽出要求に応じて、開発者識別子を検索キーとして開発プログラムメタ情報１２５から開発物名を検索して抽出する。また、開発物管理部１２２は、実績情報収集部１１０からの開発者の開発プログラムメタ情報（開発物の行数、開発言語、編集日時）の処理要求に応じて、開発者の開発物名および開発物の開発期間を検索キーとして、開発プログラムメタ情報１２５から上述のメタ情報を検索して抽出する。工数算出部１１１が実績情報収集部１１０と送受信するデータの実装形態の例は後述する。
【００２４】
データ群１２７は、開発担当者４が開発したプログラムを格納する開発プログラム群１２３、開発者氏名と開発者認証情報が格納された開発者管理テーブル１２４、開発担当者によって開発されたプログラムの作者名や開発言語、編集日時、行数を含む開発プログラムメタ情報１２５から構成される。開発者管理テーブル１２４、開発プログラムメタ情報１２５の例については後述する。
【００２５】
■案件情報管理装置１３０の構成
案件情報管理装置１３０のプログラム群１３５は案件情報管理部１３２から構成される。案件情報管理部１３２は、実績情報収集部１１０から開発物に関わる開発期間情報の処理要求を受信すると、処理要求とともに受信した開発物名を検索キーとして工程データ１３４から、該当する開発期間情報を抽出し、抽出結果を実績情報収集部１１０へ返信する。このとき、案件情報管理部１３２が実績情報収集部１１０と送受信するデータの実装形態の例については、後述する。
【００２６】
データ群１３６は、開発者管理テーブル１３３、工程データ１３４から構成される。開発者管理テーブル１３３、工程データ１３４の例については後述する。
【００２７】
■管理端末１４０の構成
管理端末１４０は、ハードウェアとしては一般的なコンピュータ装置であり、各種ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）画面を表示させる。  
例えば、管理端末１４０は、ネットワーク５４を介して工数見積装置１００、スクリプト共有装置１２０、案件情報管理装置１３０との間でデータを交換するブラウザや、ブラウザにより表示された内容を画面に表示する表示装置１４２、各種情報の入力を受け付ける入力装置１４３を備える。表示装置１４２は、ＬＣＤ（Liquid Crystal Display）等の一般的なディスプレイ装置であり、入力装置１４３は、キーボード等の一般的な入力装置である。
【００２８】
■プログラム開発端末１５０の構成
プログラム開発端末１５０は、管理端末１４０と同様にハードウェアとしては一般的なコンピュータ装置である。プログラム開発端末１５０は、開発担当者からのプログラミング操作を受け付けてクライアントプログラム１５０を生成し、生成されたクライアントプログラム１５０をスクリプト共有装置１２０にアップロードする。プログラム開発端末１５０は、管理端末１４０と同様、ハードウェアとしては一般的な表示装置１５２、入力装置１５３を備える。
【００２９】
■各テーブルの構成
図２〜図４は、各装置がもつテーブルの構成である。  
各テーブルは、行毎にデータを格納する領域（この領域を以降「レコード」と記す）があり、各レコードにはそれを一意に識別するための識別子を格納する領域（２０１、４００、７０１、８０１）を含む。これらの識別子は、レコードを新規に追加する時点で、他のレコードの識別子とは重複しない一意の数値を生成し欄に数値が格納される。そしてレコードを削除すると当該識別子は破棄し、再利用しない。
【００３０】
図２は、開発者管理テーブル１０５、１２４、１３３の構成である。これらのテーブルは、工数見積装置１００、スクリプト共有装置１２０、案件情報管理装置１３０にそれぞれ記憶されており、同じ構成のテーブルである。  
以下では、これらのテーブルを代表して開発者管理テーブル１０５について説明する。
開発者管理テーブル１０５は、開発者に関する管理情報を一意に識別するための開発者識別子欄２０１、氏名情報欄２０２、開発者認証情報欄２０３、を含む。そして各欄には、図２に示すように数値や文字列値が格納される。
【００３１】
例えば、開発者識別子欄２０１には開発者ごとに付された「００１」、「００２」などの番号が格納され、氏名情報欄２０２には「日立太郎」、「日立次郎」などの開発者氏名を表現する文字列が格納される。また、例えば、開発者認証情報欄２０３は、実績情報収集部１１０および工数算出部１１１がスクリプト共有装置１２０および案件情報管理装置１３０から開発プログラムメタ情報１２５および工程データ１３４をそれぞれ収集するために、ａｂｃｄｅ１２３４やｆｇｈｊｋｌ３２１４といった認証情報（トークン）を格納している。開発者認証情報欄２０３は、見積担当者３が入力しても、開発担当者４が入力してもよい。
【００３２】
なお、図面では開発者管理テーブルはスクリプト共有装置１２０、案件情報管理装置１３０の各々でも有しているが、スクリプト共有装置１２０、案件情報管理装置１３０を工数見積装置１００の内部に設置する場合は、開発者管理テーブル１０５、開発者管理テーブル１２３、開発者管理テーブル１３３は１つであってよい。
【００３３】
図３は、収集データ管理テーブル１０６の構成を示す。収集データ管理テーブル１０６は、収集データを一意に識別するための収集データ識別子欄７０１、開発者識別子欄７０２、開発者１日毎編集行数欄７０３、編集日時欄７０４、開発言語欄７０５、開発フレームワーク欄７０６を含む。そして各欄には、図３に示すように数値や文字列が格納される。
【００３４】
例えば、開発者１日毎編集行数欄７０３には、実績情報管理部１３２が受信した開発期間内の開発者の１日毎のコード編集行数が格納される。図面には記載しないが、開発者１日毎編集行数は、スクリプト共有装置１２０の開発物管理部１２２から受信した数値そのものでもよいし、開発物管理部１２２から受信した数値を実績情報収集部１１０が統計処理してもよい。統計処理した数値とは、例えば開発者が1日の間に開発物を加筆または修正した延べ行数がある。さらに、統計処理したデータには、開発者が新規に作成または削除した行数を含めても良い。なお、図３では、単位期間あたりの編集サイズである開発者によるコードの編集行数の単位を１日毎の期間として例示しているが、時間単位、週単位、月単位等、他のスケールで上記編集の単位を定めてもよい。
【００３５】
例えば、編集日時欄７０４は、２０１６／１２／２０や２０１６／１１／１７の様に、開発者がコードを編集した日時が格納される。例えば、開発言語欄７０５は、ＲｕｂｙやＪａｖａＳｃｒｉｐｔ（登録商標）のように、コードの開発言語の名称が格納される。開発言語の名称は開発担当者が手動で入力しても、開発物メタ情報１２５から抽出してもよい。
【００３６】
例えば、開発フレームワーク欄７０６は、Ｒｕｂｙ  ｏｎ  ＲａｉｌｓやＮｏｄｅ．ｊｓの様なコードの開発フレームワークの名称を示している。これらの開発フレームワークの名称は開発担当者が手動で入力しても、開発プログラムメタ情報１２５からメタ情報を抽出した結果を入力してもよい。
【００３７】
図４は、工数見積装置１００が保持する類似言語テーブル１０８の概略構成を示す。類似言語テーブル１０８は、記法や文法が似た言語を分類したテーブルであり、開発言語を一意に識別するための識別子欄４００、開発言語欄４０１、開発フレームワーク欄４０２、類似言語項番４０３を含む。そして各欄には、図４に示すように数値や文字列が格納される。
【００３８】
類似言語テーブル１０８は、見積担当者３が開発担当者４の能力を算出する際に利用する。これらの分類は見積担当者３または開発担当者４が追加あるいは削除する。
【００３９】
例えば、開発言語欄４０１は、ＰＨＰやＪａｖａＳｃｒｉｐｔ等の開発言語の名称が格納される。例えば、開発フレームワーク欄４０２は、Ｎｏｄｅ．ｊｓやＲａｉｌｓ等の開発フレームワーク名が格納される。例えば、類似言語項番４０３は、開発言語及び開発フレームワークが似ていることを示すため、１や２など、似ている開発言語及び開発フレームワークと、似ていない開発言語及び開発フレームワークとを識別するための数字が格納される。類似開発言語及び開発フレームワークの識別には、数字や記号だけでなく色等の識別情報を用いてもよい。
【００４０】
図４に示した類似言語テーブル１０８は、ＣはＣ＋＋やＪａｖａと文法が類似しているため、同じ類似言語項番２を割り当てることで、言語が類似していることを示している。本システムは類似する言語の分類結果を参照することで、例えばこれから開発担当者４が見積対象コードでの開発経験がない場合でも、類似する言語での開発経験から見積もり対象コードにより識別されるプログラムの編集工数を見積もることが可能になる。
【００４１】
図５は、工数見積装置１００が保持する能力算出結果テーブル１０７の構成を示す。能力算出結果テーブル１０７は、工数算出部１１１が算出した開発担当者４の能力に関する情報を格納するテーブルであり、開発担当者４の過去の開発物の評価結果がレコードとして格納される。能力算出結果テーブル１０７は、評価結果を一意に識別するための評価結果識別子欄８０１、開発者識別子欄８０２、開発者１日毎編集行数の最大値と最小値欄８０３、開発言語欄８０４、開発フレームワーク欄８０６、類似言語項番８０７とを含む。
【００４２】
そして各欄には、図５に示すように、数値や文字列や日付値や論理値が格納される。例えば、開発者識別子欄８０２には、開発者管理テーブル１０５に示した開発者識別子が格納される。例えば、開発者１日毎編集行数の最大値と最小値欄８０３は、収集データ管理テーブル１０６の開発者１日毎編集行数欄７０３から抽出した、編集行数の最大値と最小値が格納される。
【００４３】
図５では、２０１６年１１月１５日から２０１６年１２月２０日までに開発言語がＲｕｂｙ、開発フレームワークがＲａｉｌｓであった場合、開発者１日毎編集行数７０３の最大値は１００、最小値は８０であるため、開発者１日毎編集行数の最大値と最小値欄８０３には最大値の１００と最小値の８０がそれぞれ格納される。
【００４４】
開発言語欄８０５と開発フレームワーク欄８０６は、収集データ管理テーブル１０６の開発言語欄７０６、開発フレームワーク欄７０７と同様であるため、説明は割愛する。類似言語項番８０７も類似言語テーブル１０８の類似言語項番４０３と同様であるため、説明を割愛する。なお、図５では、開発者によるコードの編集行数の単位を１日毎として例示しているが、図３の場合と同様、他のスケールにより上記編集単位を定めてもよい。
【００４５】
図６は、案件情報管理装置１３１が保持する開発工程管理情報を示す工程データの例１３４ａの例を示す。また、当該データは、案件情報管理部１３２が工数見積装置１００の実績情報収集部１１０へ送信するデータ形式でもある。
【００４６】
工程データの例１３４ａは、開発物の開発日程に関する情報を管理するデータであり、
開発物の名称、開発者、開発期間を含む。
【００４７】
例えば、工程データの例１３４ａは開発物「Ｄａｓｈｂｏａｒｄ」の開発者と開発期間を表しており、開発物が図中点線枠内に示す２０１６／８／２１から２０１６／１２／２０の期間で実装されたことを示している。  
なお、実施例では、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ）形式で表現しているが、他の形式の場合も同様である。
【００４８】
図７は、スクリプト共有装置１２０が保持する開発プログラムメタ情報１２５の例１２５ａを示す。また、当該データは、開発物管理部１２２が工数見積装置１００の実績情報収集部１１０へ送信するデータ形式でもある。
【００４９】
開発プログラムメタ情報の例１２５ａは、スクリプト共有装置１２０において管理される、開発物の作成、改変、削除を含む編集履歴である編集履歴情報を管理するデータであり、開発担当者４の開発物の名称、編集開始日、編集終了日、ファイルを編集した日時、編集行数、を含む。編集開始日と編集終了日は、開発担当者４が開発物の編集後に開発物をスクリプト共有装置１２０に登録した日時であり、開発開始日と開発終了日とは異なることに注意する。
【００５０】
例えば、開発プログラムメタ情報の例１２５ａでは、開発物「Ｄａｓｈｂｏａｒｄ」はウェブアプリケーションであり、ｆｉｌｅ１．ｒｂから成り、２０１６／８／２１から２０１６／１２／２０の間にＲｕｂｙ  ｏｎ  Ｒａｉｌｓのフレームワークで開発され、２０１６／１２／２０に１００行、２０１６／１２／１９に８５行編集されたことを示している。
【００５１】
開発物メタ情報１２５ａの実装形態は、ＪＳＯＮやＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）等のデータ形式等があるが、他の形式の場合も同様である。
【００５２】
図８は、スクリプト共有装置１２０が保持する見積対象コードメタ情報１２５の例１２５ｂを示す。また、当該データは、開発物管理部１２２が工数見積装置１００の工数算出部１１１へ送信するデータ形式でもある。
【００５３】
見積対象コードメタ情報の例１２５ｂは、スクリプト共有装置１２０において管理される、見積対象コードにより識別されるプログラムのファイルとそのサイズを管理するサイズ管理情報を示すデータであり、例えば、見積対象コードの名称、開発言語、開発フレームワーク、ファイルの場所、行数に関する情報を管理するデータを含む。
【００５４】
例えば、見積対象コードメタ情報の例１２５ｂは、開発物「Ｓｙｓｔｅｍ  ｄｅｐｌｏｙｍｅｎｔ」は、Ｒｕｂｙ  ｏｎ  Ｒａｉｌｓで開発されたプログラムであり、その内訳は行数が１０００行のｆｉｌｅ１．ｒｂと行数が５００行のｆｉｌｅ２．ｓｈから成ることを示している。見積対象コードメタ情報１２５ｂの実装形態は、ＪＳＯＮやＸＭＬ等のデータ形式等があるが、これらの形式に限定しない。
【００５５】
（管理装置と端末間の処理）
次に、工数見積装置１００と管理端末１４０との間の処理について説明する。  
図９に示すように、工数見積装置１００と管理端末１４０は所謂サーバ〜クライアント型のアーキテクチャであり、工数見積装置１００がサーバ側、管理端末１４０がクライアント側に位置づけられる。
【００５６】
本システムはスクリプト共有装置１２０、案件情報管理装置１３０、管理端末１４０が最初に起動していることが前提である。
【００５７】
工数見積装置１００のハードウェアを起動すると、ＯＳ等基本機能がロードされた後、データベース管理部１１４と実行基盤部１１３が起動する（Ｓ９０１）。  
実行基盤部１１３は、データベース管理部１１４へ接続してデータ群１１５をロードし、周辺装置疎通確認部１１２を起動する（Ｓ９０２）。
【００５８】
周辺装置疎通確認部１１２が起動すると、周辺装置疎通確認部１１２はスクリプト管理装置１２０、案件情報管理装置１３０の場所を指定し、アクセス可否を確認する（Ｓ９０３）。アクセス可否確認の実装形態としては、例えばスクリプト管理装置１２０、案件情報管理装置１３０、管理端末１４０の場所のＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｅｒ）を指定して、周辺装置疎通確認部１１２からＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）リクエストを送信し、特定のＨＴＴＰレスポンスを受信するスクリプト等がある。
【００５９】
周辺装置疎通確認部１１２がアクセス可を確認できたか否かを判定し、アクセス可否で条件を分岐する（Ｓ９０４）。周辺装置疎通確認部１１２がアクセス可能であると判定した場合は（Ｓ９０４；Ｙｅｓ）ステップ９０６〜９１４に移り、アクセス不可であると判定した場合は（Ｓ９０４；Ｎｏ）処理を終了する（Ｓ９０５）。
【００６０】
周辺装置疎通確認部１１２がアクセス可を確認できたと判定し（Ｓ９０４；Ｙｅｓ）、アクセス可能であれば、全開発者のトークンを開発者管理テーブル１２４または開発者管理テーブル１３３から取得して開発者管理テーブル１０５に格納し（Ｓ９０６）、管理端末１０４からのリクエストを待つ（Ｓ９０７）。以降の処理（Ｓ９０８〜Ｓ９１４）は、管理端末１４０のブラウザ１４１からのリクエストを契機に処理が実行される。
【００６１】
管理装置１４０はブラウザ１４１を経由して見積担当者３の入力の内容を工数見積装置１００に送信し（Ｓ９１３）、プログラム（実績情報収集部１１０、工数算出部１１１、周辺装置疎通確認部１１２、実行基盤部１１３、データベース管理部１１４）の少なくとも１つが生成した画面データを受信すると、受信結果を管理端末１４０のブラウザ１４１へ返す（Ｓ９１４）。
【００６２】
ブラウザ１４１からのリクエストには、初期画面要求（ＧＥＴ）、見積対象コードの登録（ＰＵＴまたはＰＯＳＴ）、開発者のコード編集工数見積要求（ＧＥＴ）、等がある。括弧内はＨＴＴＰでのリクエスト種別である。
【００６３】
工数見積装置１００の実行基盤部１１３はこれらのリクエストがあったか否かを判定し、その有無で条件を分岐する（Ｓ９０８）。実行基盤部１１３は、リクエストがあったと判定した場合は（Ｓ９０８；Ｙｅｓ）、ステップ９０９〜ステップ９１１に移る。リクエストがない場合は）Ｓ９０８；Ｎｏ）、リクエストを受信するまで待機しつづける。
【００６４】
リクエストがあった場合の説明に移る。実行基盤部１１３は、リクエストがあったと判定した場合は、リクエストの内容を解析して（Ｓ９０９）、後述するデータ処理を上記プログラム１１０〜１１４の少なくとも１つに割り当てて、プログラム処理を行う（Ｓ９１０）。ステップ９１０の詳細については、図１０、図１１、図１２を用いて詳述する。
【００６５】
ステップ９１０が完了した後、工数見積装置１００は管理端末１４０のブラウザ１４１に対して、ブラウザにより表示装置１４２に表示する画面情報（ＨＴＭＬデータや集計データ（ＪＳＯＮ形式やＸＭＬ形式のデータ）を送信する（Ｓ９１１）。
【００６６】
（工数見積システムのデータ処理）
図１０は、管理端末１４０および工数見積装置１００側のプログラム（実績情報収集部１１０、工数算出部１１１）の動作フローの一例を示すシーケンスチャートである。  
図１０は、見積担当者３が管理端末１４０で見積対象コードを登録し、開発者により過去に開発実績があるプログラム（第１のプログラム）を用いて、見積対象コードにより識別される見積対象となるプログラム（第２のプログラム）を編集する場合の工数を見積もる処理の例である。
【００６７】
見積担当者３が管理端末１４０のブラウザ１４１を起動し、管理端末１４０が工数見積装置１１０の工数算出部１１１に対して図１３に示すメイン画面１４０１（第１の画面）をリクエストする（Ｓ１００１、Ｓ１００２）。リクエストの実装形態としては、例えばＨＴＴＰリクエスト等がある。メイン画面１４０１の詳細については図１３で詳述する。
【００６８】
引き続き、工数算出部１１１は、開発者管理テーブル１０５から、氏名情報２０２を取得して（Ｓ１００３）、図１３に示す開発者欄１４０２に示す開発者の一覧を含むブラウザ１４１のメイン画面１４０１のデータを送信する（Ｓ１００４）。
【００６９】
管理端末１４０は工数見積管理装置１００から受信した上記メイン画面１４０１のデータを表示装置１４２に表示し（Ｓ１００５）、見積担当者３はその内容を認識する。見積担当者３は、管理端末１４０のブラウザ１４１により表示装置１４２に表示された画面に表示されている見積対象コード登録ボタン１４０６をクリックすると、管理端末１４０は、当該操作を受けて工数見積装置１００の工数算出部１１１に対して見積対象コードを含めての当該コードの登録処理を要求する（Ｓ１００６、Ｓ１００７）。登録リクエストの実施形態は、例えばＷＥＢ  ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）やＰｙｔｈｏｎ等のインタプリタプログラム実行基盤等があるが、これらの形式に限定しない。
【００７０】
引き続き、工数算出部１１１は、スクリプト共有装置１２０の開発物管理部１２２に見積対象コードを含む当該コードの登録処理を要求する（Ｓ１００８）。登録リクエストの実装形態としては、例えばＷＥＢ  ＡＰＩを用いてもよいし、ＧＩＴ等のスクリプト共有システムのＣＬＩ（コマンドラインインターフェース）を用いてもよい。
【００７１】
開発物管理部１２２は、見積対象コードの登録を完了すると、見積対象コードの名称及び完了通知を工数算出部１１１に送信する（Ｓ１００９）。完了通知の実装形態としては、例えばＨＴＴＰレスポンスコードでもよいし、ＪＳＯＮやＸＭＬ等のデータ形式等でもよい。
【００７２】
工数算出部１１１は、開発物管理部１２２から登録完了通知を受け取ると、ブラウザ１４１に図１３に示す見積対象コード欄１４０３に示す見積対象コードの場所を含むブラウザ１４１のメイン画面１４０１のデータを送信する（Ｓ１０１０）。管理端末１４０は工数見積管理装置１００から受信した上記メイン画面１４０１のデータを表示装置１４２に表示し（Ｓ１０１１）、見積担当者３は見積対象コードの登録完了をブラウザ１４１で確認する。ここまでのステップは、見積対象コードを登録する処理であるため、以降では、開発者が見積対象コードを編集する工数を見積もるステップについて説明する。
【００７３】
管理端末１４０のブラウザ１４１は、メイン画面１４０１から編集する開発担当者の氏名、見積対象コード、開発担当者の人件費の入力を受け付ける（Ｓ１０１２）。開発担当者の人件費は、あらかじめ開発担当者ごとに定められ、あるいは見積担当者３により入力されるものとする。
【００７４】
ブラウザ１４１は見積担当者３からの入力を受け付けると、その後、ブラウザ１４１が図１３に示す工数見積開始ボタン１４０５の押下を受け付け、工数算出部１１１に開発担当者の氏名、人件費、見積対象コードの場所を含む見積要求を送信する（Ｓ１０１３）。
【００７５】
工数算出部１１１はブラウザ１４１からの入力を受け取ると、実績情報収集部１１０に、開発担当者の開発物情報収集処理の開始を通知する（Ｓ１０１４）。開発物情報の収集処理開始通知の実装形態としては、例えばｌｉｂｃｕｒｌ等のＵＲＬ転送ライブラリを用いてもよいし、Ｐｙｃｕｒｌ等のインタプリタプログラム実行基盤上で動作する転送ライブラリを用いてもよい。
【００７６】
実績情報収集部１１０は、工数算出部１１１から情報収集処理開始の通知を受信すると、開発物管理部１２２に開発者の全開発物の名称をリクエストする（Ｓ１０１５）。図面には記載しないが、リクエストする際は開発者管理テーブル１０５に記載された開発者識別子２０１及び開発者認証情報２０３の情報を送信してよい。また、リクエストの送信には、例えばＧＩＴＬＡＢ等のスクリプト共有システムのＷＥＢ  ＡＰＩを用いてよい。
【００７７】
開発物管理部１２２は、実績情報収集部１１０から開発者の全開発物の名称リクエストを受信すると、その開発者の全ての開発物の名称及び開発物識別子を実績情報収集部１１０に送信する（Ｓ１０１６）。  
開発物管理部１２２が、例えばＧＩＴＨＵＢやＧＩＴＬＡＢである場合は、ＧＩＴＨＵＢやＧＩＴＬＡＢが公開するＡＰＩを使用したデータの送受信方法がある。また、開発物管理部１２２が送信するデータの例としては、例えばＪＳＯＮやＸＭＬ等のデータ形式等があるが、これらの形式に限定しない。
【００７８】
実績情報収集部１１０は、開発物管理部１２２から開発物名称を受信すると、案件情報管理部１３２に、開発物名称と開発物の開発期間情報のリクエストを送信する（Ｓ１０１７）。
【００７９】
例えば、案件情報管理部１３２がＲｅｄｍｉｎｅである場合は、Ｒｅｄｍｉｎｅが公開するＡＰＩを使用して実績情報収集部１１０からリクエストを送信する方法がある。実績情報収集部１１０が送信するリクエストの実装形態としては、例えばｌｉｂｃｕｒｌ等のＵＲＬ転送ライブラリを用いてもよいし、Ｐｙｃｕｒｌ等のインタプリタプログラム実行基盤上で動作する転送ライブラリを用いてもよい。
【００８０】
案件情報管理部１３２は、実績情報収集部１２２から開発物名称と開発物の開発期間情報のリクエストを受信すると、例えば図６の工数データの例１３４ａに示したＪＳＯＮやＸＭＬ等のデータ形式等によって工程データ１３４を送付する（Ｓ１０１８）。
【００８１】
図面には記載しないが、ステップ１０１８が実行されると、実績情報収集部１１０は工程データ１３４から開発期間に関する情報を抽出する。例えば、工数データの例１３４ａからは、実績情報収集部１１０はｐｈａｓｅ＿ｎａｍｅの”ｃｏｄｉｎｇ”を検索キーとして、同じオブジェクト値の中にある”ｓｔａｒｔ＿ｄａｔｅ”：”２０１６／８／２１”と”ｅｎｄ＿ｄａｔｅ”：”２０１６／１２／２０”を抽出して、開発開始日時の２０１６年８月２１日と開発終了日時の２０１６年１２月２０日等をメモリ上に保持し、開発開始日時から開発終了日時までの期間を開発期間とする。
【００８２】
実績情報収集部１１０は工程データ１３４を受信すると、開発物管理部１２２に、開発物名称、開発期間をキーとして開発プログラムメタ情報をリクエストする（Ｓ１０１９）。実装形態としては、例えばＧＩＴＬＡＢが公開するデータ送受信のためのＡＰＩを使用する方法等がある。
【００８３】
開発物管理部１２２は実績情報収集部１１０から開発物名称と開発期間を受信すると、開発物名称と開発期間を検索キーとして、開発プログラムメタ情報１２５を抽出し、送信する（Ｓ１０２０）。送信するデータの実装形態としては、ＪＳＯＮやＸＭＬ等のデータ等がある。
【００８４】
実績情報収集部１１０は開発プログラムメタ情報１２５を受信すると、上述の開発者識別子、開発者１日毎編集行数、編集日時、開発言語、開発フレームワークを、収集データ管理テーブル１０６の７０１〜７０６欄に格納する（Ｓ１０２１）。格納完了後、実績情報収集部１１０は工数算出部１１１に情報収集管理通知を送信する（Ｓ１０２２）。通知の実装形態としては、例えばＨＴＴＰレスポンス等がある。ステップ１０１４〜１０２２の処理が実行されることにより、工数算出部１１１は開発者の開発物ごとの様々な開発期間における過去の開発実績を示す開発実績情報を得ることができる。
【００８５】
工数算出部１１１は実績情報収集部１１０から開発者に関連する情報の収集完了通知を受信すると、開発物管理部１２２に見積対象コードメタ情報１２５のリクエストを送信する（Ｓ１０２３）。リクエストの実装形態としては、たとえばＧＩＴＬＡＢが公開するＷＥＢ  ＡＰＩ等がある。開発物管理部１２２が見積対象コードメタ情報１２５のリクエストを受信すると、見積対象コードメタ情報１２５を送信する（Ｓ１０２４）。見積対象コードメタ情報１２５の実装形態としては、例えば図８に示した見積対象コードメタ情報の例１２５ｂがある。
【００８６】
工数算出部１１１が開発物管理部１２２から見積対象コードメタ情報１２５を受信すると、開発者能力算出と、工数算出を行う（Ｓ１１０１）。ステップ１１０１の詳細については図１１および図１２で詳述する。
【００８７】
開発者能力算出および工数算出が終了すると、工数算出部１１１は管理端末１４０のブラウザ１４１に結果画面１４１１（第２の画面）の画面データを送信する（Ｓ１０２５）。
【００８８】
管理端末１４０は工数見積管理装置１００から受信した上記結果画面１４１１のデータを表示装置１４２に表示し（Ｓ１０２６）、見積担当者３はブラウザ１４１に表示された結果画面１４１１を閲覧し、開発者が見積対象コードを編集する工数を認識する。
【００８９】
図１１および図１２は、工数見積装置１００のプログラム群１１６の工数算出部１１１の動作処理フロー１１０１の一例を示す図である。処理フローの全体（Ｓ１１１０〜Ｓ１２０６）は、開発者能力を見積もるステップ群（Ｓ１１１０〜Ｓ１１２６）と、開発者能力に応じた見積対象コードの編集工数を見積もるステップ群（Ｓ１２０１〜Ｓ１２０６）の２つの処理に分けられる。
【００９０】
まず、図１１では開発者能力を見積もるステップ群について説明する。工数算出部１１１は、開発物管理部１２２から見積対象コードメタ情報１２５ｂを受け取ると、受け取った情報から見積対象コードの開発言語の名称、開発フレームワークの名称、コード数量を抽出し、保持する（Ｓ１１１０、Ｓ１１１１）。保持する場所はメモリや二次記憶装置とし、揮発性、不揮発性を問わない。
【００９１】
次に、工数算出部１１１は、ステップ１１１１で抽出した開発言語の名称、開発フレームワークの名称、コード数量を含む見積対象コード情報１４１２を含む結果画面１４１１の画面データを作成する（Ｓ１１１２）。  
次に、工数算出部１１１は、ステップ１１１１で抽出した見積対象コードの開発言語の名称、開発フレームワークの名称を検索キーとして、収集データ管理テーブル１０６から開発言語の名称、開発フレームワークの名称ごとの開発者１日毎編集行数を抽出し、メモリや二次記憶装置上に保持する（Ｓ１１１３）。
【００９２】
工数算出部１１１は、ステップ１１１３における検索および抽出処理により抽出できたか否かを判定し、その結果に応じて処理を分岐する（Ｓ１１１４）。  
工数算出部１１１は、ステップ１１１４で抽出できたと判定した場合は（Ｓ１１１４；Ｙｅｓ）、ステップ１１１５へ処理を移し、抽出できなかったと判定した場合は（Ｓ１１１４；Ｎｏ）、ステップ１１１９、１１２０、１１２１、１１２２、１１２３、１１２４、１１２５、１１２６へ処理を移す。
【００９３】
工数算出部１１１は、ステップ１１１４で抽出できたと判定した場合は、ステップ１１１３で抽出した開発者１日毎編集行数の最大値および最小値を算出する（Ｓ１１１５）。ここで、ステップ１１１５で算出する統計値は最大値および最小値以外にも、例えば平均値や極大値などが考えられ、見積担当者３が任意に変更してよい。ステップ１１１５で最大値および最小値を算出した後は、ステップ１１１６へ処理を移す。
【００９４】
工数算出部１１１は、ステップ１１１４で抽出できなかったと判定した場合は、見積対象コードの開発言語の名称、開発フレームワークの名所を検索キーとして、類似言語テーブル１０８から、開発言語と類似言語項番４０３が同じである同系統の言語を類似する言語として抽出する（Ｓ１１１９）。このような処理を実行することにより、開発言語と同じ言語が抽出できない場合でも、文法が類似する言語により工数を見積もることができる。
【００９５】
工数算出部１１１は、ステップ１１１９における検索および抽出処理により抽出できたか否かを判定し、その結果に応じて処理を分岐する（Ｓ１１２０）。  
工数算出部１１１は、ステップ１１２０で抽出できたと判定した場合は（Ｓ１１２０；Ｙｅｓ）、ステップ１１２１、１１２２、１１２３へ処理を移し、抽出できなかったと判定した場合は（Ｓ１１２０；Ｎｏ）、ステップ１１２４、１１２５へ処理を移す。
【００９６】
工数算出部１１１は、ステップ１１２０で抽出できなかったと判定した場合は、見積担当者３に「見積対象コードの開発言語と類似する言語が類似言語テーブル中に存在せず、開発者能力を算出できない」等のエラーメッセージを管理端末１４０のブラウザ１４１に出力するための画面データを作成し（Ｓ１１２４）、処理を終了する（Ｓ１１２６）。ステップ１１２４で作成されるエラーメッセージの画面データには、例えば「見積対象コードの開発言語のデータを類似言語テーブル１０８に登録してください」等とエラーの回避方法を記載してもよい。
【００９７】
工数算出部１１１は、ステップ１１２０で抽出できたと判定した場合は、ステップ１１１９で抽出した同系統の開発言語及び開発フレームワークを検索キーとして、収集データ管理テーブル１０６から同系統の開発言語、開発フレームワークごとの開発者１日毎編集行数の最大値及び最小値を抽出する（Ｓ１１２１）。
【００９８】
工数算出部１１１は、ステップ１１２１における検索および抽出処理により抽出できたか否かを判定し、その結果に応じて処理を分岐する（Ｓ１１２２）。  
工数算出部１１１は、ステップ１１２２で抽出できたと判定した場合は（Ｓ１１２２；Ｙｅｓ）、ステップ１１２３、１１１６、１１１７へ処理を移し、抽出できなかったと判定した場合は（Ｓ１１２２；Ｎｏ）、ステップ１１２５、１１２６へ処理を移す。
【００９９】
工数算出部１１１は、ステップ１１２２で抽出できたと判定した場合は、ステップ１１２１で抽出した、見積対象コードと類似する開発言語、開発フレームワークのプログラム（第３のプログラム）の開発者１日毎編集行数の最大値および最小値を算出する（Ｓ１１２３）。なお、ステップ１１１５と同様に、算出する統計値は最大値および最小値以外にも、例えば平均値や極大値などが考えられ、見積担当者３が任意に変更してよい。
【０１００】
工数算出部１１１は、ステップ１１２２で抽出できなかったと判定した場合は、見積担当者３に「見積対象コードの開発言語、またはその類似言語で開発した実績が存在せず、開発者能力を算出できない」とエラーメッセージを管理端末１４０のブラウザ１４１に出力するための画面データを作成し（Ｓ１１２５）、処理を終了する（Ｓ１１２６）。
【０１０１】
ステップ１１１５、またはステップ１１２３の後の処理について説明する。工数算出部１１１は、ステップ１１１５またはステップ１１２３においてを算出した後は、見積対象コードの開発言語、開発フレームワーク、類似言語項番、および開発者１日毎編集行数の最大値と最小値を能力算出テーブル１０７に格納する（Ｓ１１１６）。さらに、管理端末１４０のブラウザ１４１に出力する開発者能力１４１３を含む結果画面１４１１の画面データを作成する（Ｓ１１１７）。
【０１０２】
次に、図１２では、開発者能力に応じて見積対象コードの編集工数を見積もるステップ群について説明する。  
工数算出部１１１は、まず、ステップ１１１１でメモリまたは二次記憶装置に保持した見積対象コードのコードを、能力算出結果テーブル１０７に格納した開発者の１日毎編集行数の最大値と最小値で割り、予測工数を算出し、保持する（Ｓ１２０１）。保持する場所はメモリや二次記憶装置とし、揮発性、不揮発性を問わない。  
工数算出部１１１は、さらに、ステップ１２０１で算出した予測工数に対して、見積対象コードの開発言語毎のコード量で重み付けし、合計予測工数を算出し、メモリ上に保持する（Ｓ１２０２）。
【０１０３】
以下にステップ１２０１と１２０２で算出する予測工数と合計予測工数の算出方法の一例を示す。開発担当者４が１日で書く開発言語毎のコード量が、見積対象コード全体から見た特定の開発言語の割合に基づくとみなし、開発担当者が１日の見積対象コードの開発言語「ｉ」のコード量を「Xｉ」、見積対象コードの開発言語（あるいは見積対象コードと類似する開発言語）「ｉ」の、開発担当者の予測工数を「Yｉ」とすると、合計予測工数Ｚは下記の式（１）で算出される。
【０１０４】
【数１】
2019008455.tif 000003
【０１０５】
ここで、「ｎ（ｎは正の整数）」は、見積対象コードにおける開発言語の数であり、「Ｚｎ」は、開発言語ごとの予測工数である。
【０１０６】
工数算出部１１１は、ステップ１２０２で合計予測工数を算出した後、メイン画面１４０１で見積担当者３が設定した開発者の月毎の人件費１４０４から日毎の人件費を算出し、保持する（Ｓ１２０３）。保持する場所はメモリや二次記憶装置とし、揮発性、不揮発性を問わない。また、日毎の人件費の算出には、月毎の平日の日数を用いてもよいし、開発者の時間給および勤務時間を用いてもよい。
【０１０７】
工数算出部１１１は、ステップ１２０３で算出した日毎の人件費を、ステップ１２０２で算出した合計予測工数にかけて、費用予測値を算出し、保持する（Ｓ１２０４）。保持する場所はメモリや二次記憶装置とし、揮発性、不揮発性を問わない。
【０１０８】
そして、工数算出部１１１は、ステップ１２０１、ステップ１２０２、ステップ１２０４でそれぞれ算出した予測工数、合計予測工数、費用予測値を、見積担当者３に示すための画面データ１４１４を含む結果画面１４１１を作成し（Ｓ１２０５）、処理を終了する（Ｓ１２０６）。
【０１０９】
ステップ１１１０からステップ１２０６までのフローの一例を図２から図８、図１３を用いて説明する。  
まず、ステップ１１１０とステップ１１１１では、工数算出部１１１は、図８に示した見積対象コードメタ情報１２５ｂから、開発言語の名称として「Ｒｕｂｙ」、開発フレームワークの名称として「Ｒａｉｌｓ」、開発物の行数から「１０００」「５００」を抽出し、保持する。
【０１１０】
ステップ１１１２で、工数算出部１１１は、抽出した「Ｒｕｂｙ」、「Ｒａｉｌｓ」、「１０００」「５００」の内容を見積対象コード情報１４１２の画面データとして作成する。
【０１１１】
ステップ１１１３で、工数算出部１１１は、図３の収集データ管理テーブル１０６から、「Ｒｕｂｙ」「Ｒａｉｌｓ」を検索キーとして、開発者１日毎編集行数７０３で「Ｒｕｂｙ」かつ「Ｒａｉｌｓ」をもつレコードとして「２０１６／１２／２０」の「１００」、「２０１６／１２／１３」の「８５」、「２０１６／１１／１５」の「８０」を抽出して保持する。
【０１１２】
ステップ１１１４では、工数算出部１１１は、ステップ１１１３で「２０１６／１２／２０」の「１００」、「２０１６／１２／１３」の「８５」、「２０１６／１１／１５」の「８０」を抽出したため、ステップ１１１５に移る。  
ステップ１１１５で、工数算出部１１１は、最大値として１００、最小値として８０を算出する。
【０１１３】
ステップ１１１６で、工数算出部１１１は、開発者「００１」による「Ｒｕｂｙ」「Ｒａｉｌｓ」の最大値「１００」、最小値「８０」、類似言語項番「１」を能力算出結果テーブル１０７に格納し、ステップ１１１７で画面データを作成する。
【０１１４】
ステップ１２０１で、工数算出部１１１は、見積対象コードの「Ｒａｉｌｓ」「１０００」行と、「Ｓｈｅｌｌ」「５００」行、開発者能力「Ｒａｉｌｓ」「８０−１００」、「Ｓｈｅｌｌ」「２０−５０」に対して、予測工数「Ｒａｉｌｓ」「１５−１９」、「Ｓｈｅｌｌ」「３０−７５」を算出する。
【０１１５】
ステップ１２０２で、工数算出部１１１は、合計予測工数「４５−９４」を算出する。  
ステップ１２０３で、工数算出部１１１は、日毎の人件費「１６６６６６」を算出する。  
ステップ１２０４で、工数算出部１１１は、費用予測値「７５００００〜１５６６６６７」を算出する。ステップ１２０５で、工数算出部１１１は、予測工数、合計予測工数、図１３に示す費用予測の画面データを作成する。ステップ１２０６で、処理を終了する。
【０１１６】
（各種画面の構成）
次に、工数見積装置１００の工数算出部１１１が生成した、管理端末１４０のブラウザ１４１により表示装置１４２に表示されるＧＵＩ画面について説明する。
【０１１７】
図１３は、見積担当者３が管理端末１４０のブラウザ１４１を通じて管理端末１４０のブラウザ１４１へのアクセス（リクエスト要求、画面操作、等）に応じて、工数見積装置１００の工数算出部１１１が生成するメイン画面１４０１と、結果画面１４１１である。メイン画面１４０１の実装形態としては、例えばＤｊａｎｇｏのように、Ａｐａｃｈｅ等のＷＥＢサーバプログラムと連携し、Ｐｙｔｈｏｎ言語等で記述したプログラムの処理実行や、ブラウザ１４１に対して送信するデータ（ブラウザ１４１により表示装置１４２で表示するデータ）を生成する方法がある。
【０１１８】
（５−１）メイン画面
図１３のメイン画面１４０１には、開発者欄１４０２、見積対象コード欄１４０３、人件費欄１４０４、工数見積開始ボタン１４０５、見積対象コード登録ボタン１４０６が設けられている。
【０１１９】
開発者欄１４０２では開発人員の氏名がプルダウンで表示され、見積担当者３はプルダウンリストの中から編集工数を見積もる開発者氏名を選択し、管理端末１４０のブラウザ１４１がその選択を受け付ける。なお、図面には示さないが、開発者欄１４０２で複数の開発人員を選択可能にしてもよい。その場合、選択された複数の開発人員毎に、処理ステップ１０１３からステップ１０２６を繰り返し、各開発者の能力と工数の結果に応じて順位を決定し表示する画面を設けてもよい。
【０１２０】
見積対象コード欄１４０３では見積担当者３が見積対象コードの場所を指定し、管理端末１４０のブラウザ１４１がその指定を受け付ける。人件費欄１４０４では見積担当者３が開発者欄１４０２で指定した開発者の月毎の人件費をフリーフォームで入力し、管理端末１４０のブラウザ１４１がその入力を受け付ける。
【０１２１】
工数見積開始ボタン１４０５は、見積担当者３が開発者欄１４０２に開発者氏名、見積対象コード欄１４０３に見積対象コード、人件費欄１４０４に人件費を入力した後に押下し、管理端末１４０のブラウザ１４１がその押下を受け付けることで、工数見積部１１１に工数見積のリクエストが送信される。管理端末１４０のブラウザ１４１は、開発者氏名、見積対象コード、人件費のいずれかが不足している状態で工数見積開始ボタンが押下された場合は、「見積もるためのデータが不足しています」などのエラーメッセージを表示してもよい。
【０１２２】
見積対象コード登録ボタン１４０６は、見積担当者３がプログラム開発端末１５０上にある見積対象コードの場所を指定して押下すると、管理端末１４０のブラウザ１４１がその押下を受け付け、見積対象コードがスクリプト共有装置１２０に登録される。見積対象コード登録ボタン１４０６は、見積対象コードがスクリプト共有装置１２０から参照できない場所にある場合に用いる。（５−２）結果画面
図１３の結果画面１４１１には、見積対象コード情報欄１４１２、開発者能力１４１３、費用予測欄１４１４、「戻る」ボタン１４１５が設けられている。
【０１２３】
結果画面１４１１は、見積担当者３がメイン画面１４０１の工数見積開始ボタン１４０５を押下すると、管理端末１４０のブラウザ１４１がその押下を受け付け、工数見積部１１１が作成した画面データを表示装置１４２に表示する。  
見積対象コード情報欄１４１２は、工数算出部１１１がステップ１１１２で作成した、見積対象コードの名称、開発言語、コード量の画面データを表示装置１４２に表示する。
【０１２４】
開発者能力欄１４１３は、工数見積部１１１がステップ１１１７で作成した、特定の開発者の能力（開発言語、１日毎の編集可能な行数の最大値と最小値）の画面データを表示装置１４２に表示する。
【０１２５】
費用予測欄１４１４は、工数見積部１１１がステップ１２０５で作成した、特定の開発者による見積対象コードの編集工数（予測工数、合計予測工数、費用予測値）の画面データを表示装置１４２に表示する。
【０１２６】
「戻る」ボタン１４１５は、見積担当者３が結果画面１４１１を閲覧した後で押下すると、管理端末１４０のブラウザ１４１がその押下を受け付け、メイン画面１４０１に遷移する。
【０１２７】
以上により、システム１によれば、工数見積担当者が開発者の氏名、人件費、編集が必要なコードの仕様、開発者の開発実績から、開発者がこれからコードを編集するために要する費用および期間を、開発者の開発実績を元に算出することができ、開発者の能力不足による想定外の工数増大によって、開発期間が延長することを未然に防ぐことが可能になる。すなわち、編集作業を行う人員の能力を過去のプログラム開発実績から数値化すると共に、編集対象となるソースコードの種類を測定し、前記数値化した能力にも基づいて作業工数と想定費用を予測できるようにする。
【０１２８】
例えば、ＧＩＴのようなソースコード共有システム上にあるソースコードを分析することで、プログラム開発者の能力を数値化し、開発者がプログラムを改変する作業工数と想定費用を算出するしたがって、プログラム開発者の能力を過去の開発物の情報に基づいて数値化することで、当該開発者が既存プログラムを編集する際にかかる工数・費用を、前記数値を加味して見積もることができる。
【符号の説明】
【０１２９】
１００…工数見積装置、１０１…ＣＰＵ、１０２…主記憶装置（一次記憶装置、メモリ、ＲＡＭ）、１０３…外部インターフェース（ＮＩＣ、ネットワーク接続インターフェース）、１０４…二次記憶装置（ＨＤＤ、ＳＳＤ，フラッシュ、ＲＡＭ、等、１２１、１３１も同）、１０５…開発者管理テーブル（１２４、１３３も同）、１０６…収集データ管理テーブル、１０７…能力算出結果テーブル、１０８…類似言語テーブル、１１０…実績情報収集部、１１１…工数算出部、１１２…周辺装置疎通確認部、１１３…実行基盤部、１１４…データベース管理（ＤＢＭＳ）部、１１５…データベース群（データベース）部、１１６…プログラム群部、１２０…スクリプト共有装置、１２１…スクリプト共有装置の二次記憶装置、１２２…開発物管理部（例えばＧＩＩＨＵＢやＧＩＴＬＡＢ）、１２３…開発プログラム群、１２５…開発プログラムメタ情報群、１２６…プログラム群、１２７…データ群、１３０…案件情報管理装置。１３２…案件情報管理部（例えばＲｅｄｍｉｎｅ）、１３４…工程データ群、１３５…プログラム群、１３６…データ群、１４０…管理端末、１４１…クライアントプログラム（ブラウザ）
【図１】
2019008455.tif 000004
【図２】
2019008455.tif 000005
【図３】
2019008455.tif 000006
【図４】
2019008455.tif 000007
【図５】
2019008455.tif 000008
【図６】
2019008455.tif 000009
【図７】
2019008455.tif 000010
【図８】
2019008455.tif 000011
【図９】
2019008455.tif 000012
【図１０】
2019008455.tif 000013
【図１１】
2019008455.tif 000014
【図１２】
2019008455.tif 000015
【図１３】
2019008455.tif 000016