(57)【要約】【課題】  被験者のスキルに応じた課題の出題を簡易に行うことによって、被験者に課題を出題する際の利便性を向上させる、スキル診断システム、サーバ、コンピュータプログラム、及びスキル診断方法を提供する。【解決手段】  課題出題者が操作するクライアント端末２Ａ及びサーバ１によって被験者に課題が出題され、クライアント端末２Ｂの操作により被験者が入力した課題に対する解答をサーバ１が取得することによって、被験者のスキルを診断するスキル診断システムであって、サーバ１で、被験者に出題する課題を登録し、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させ、選択された課題に対する解答を入力可能なリンク先のＵＲＬを設定するとともに、クライアント端末２ＢがそのＵＲＬにアクセスしてきたことを契機として、選択された課題に関する課題情報をクライアント端末２Ｂに送信し、選択された課題に対する被験者の解答入力を受け付ける。【選択図】          図１
2010282578.tif 000002
【特許請求の範囲】
【請求項１】
被験者が操作するクライアント端末とサーバが通信ネットワークを介して接続されるとともに、被験者に課題を出題し、前記クライアント端末の操作により被験者が入力した当該課題に対する解答を前記サーバが取得することによって、被験者のスキルを診断するスキル診断システムであって、
前記サーバは、
被験者に出題する課題を登録する課題登録手段と、
前記課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、
前記課題選択手段によって選択された課題に対する解答を前記クライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定手段と、
前記クライアント端末が前記ＵＲＬにアクセスしてきたことを契機として、前記課題選択手段によって選択された課題に関する課題情報を前記クライアント端末に送信する課題情報送信手段と、
前記課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段と、を備えることを特徴とするスキル診断システム。
【請求項２】
前記サーバは、前記クライアント端末の操作により入力された被験者の解答を表示させる解答表示手段を備えることを特徴とする請求項１記載のスキル診断システム。
【請求項３】
前記サーバは、
被験者が解答入力する過程で作成された中間作成物を前記クライアント端末から取得する中間作成物取得手段と、
前記中間作成物を取得した時点のタイミングを記憶するタイミング記憶手段と、
前記中間作成物の複雑さを定量的に示す複雑度を算出する複雑度算出手段と、
前記タイミングと前記複雑度に基づいて、被験者のスキルを定量的に評価するスキル評価手段と、を備えることを特徴とする請求項１又は２のいずれか記載のスキル診断システム。
【請求項４】
前記サーバは、課題出題者のログインＩＤの入力を受け付けるログインＩＤ入力受付手段を備え、
前記課題選択手段は、被験者に受けさせたい少なくとも一の課題を、前記ログインＩＤの入力を受け付けた課題出題者に選択させることを特徴とする請求項１から３のいずれか記載のスキル診断システム。
【請求項５】
前記ＵＲＬで示されたリンク先は、有効期限が設定されていることを特徴とする請求項１から４のいずれか記載のスキル診断システム。
【請求項６】
被験者が操作するクライアント端末と通信ネットワークを介して接続されるとともに、被験者に課題を出題し、前記クライアント端末の操作により被験者が入力した当該課題に対する解答を取得することによって、被験者のスキルを診断するスキル診断システムに用いられるサーバであって、
被験者に出題する課題を登録する課題登録手段と、
前記課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、
前記課題選択手段によって選択された課題に対する解答を前記クライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定手段と、
前記クライアント端末が前記ＵＲＬにアクセスしてきたことを契機として、前記課題選択手段によって選択された課題に関する課題情報を前記クライアント端末に送信する課題情報送信手段と、
前記課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段と、を備えることを特徴とするサーバ。
【請求項７】
被験者が操作するクライアント端末と通信ネットワークを介して接続されるとともに、被験者に課題を出題し、前記クライアント端末の操作により被験者が入力した当該課題に対する解答を取得することによって、被験者のスキルを診断するスキル診断システムに用いられるサーバとして、コンピュータを機能させるためのコンピュータプログラムであって、
被験者に出題する課題を登録する課題登録手段と、
前記課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、
前記課題選択手段によって選択された課題に対する解答を前記クライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定手段と、
前記クライアント端末が前記ＵＲＬにアクセスしてきたことを契機として、前記課題選択手段によって選択された課題に関する課題情報を前記クライアント端末に送信する課題情報送信手段と、
前記課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段と、を備えるサーバとして、コンピュータを機能させることを特徴とするコンピュータプログラム。
【請求項８】
被験者が操作するクライアント端末とサーバが通信ネットワークを介して接続されるとともに、被験者に課題を出題し、前記クライアント端末の操作により被験者が入力した当該課題に対する解答を前記サーバが取得することによって、被験者のスキルを診断するスキル診断方法であって、
前記サーバにおいて、
被験者に出題する課題を登録する課題登録ステップと、
前記課題登録ステップにより登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択ステップと、
前記課題選択ステップによって選択された課題に対する解答を前記クライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定ステップと、
前記クライアント端末が前記ＵＲＬにアクセスしてきたことを契機として、前記課題選択ステップによって選択された課題に関する課題情報を前記クライアント端末に送信する課題情報送信ステップと、
前記課題選択ステップによって選択された課題に対する被験者の解答入力を受け付ける解答入力受付ステップと、を含むことを特徴とするスキル診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、被験者にプログラミングなどの所定の課題を出題し、被験者から課題に対する解答を取得し、その課題の解決能力を診断するスキル診断システム、サーバ、コンピュータプログラム、及びスキル診断方法に関する。
【背景技術】
【０００２】
企業では、人材の考課や育成を目的として様々なスキル診断が行われている。例えば、プログラマを採用する際、小規模なプログラミング課題を与え、プログラマが作成した解答（ここではコーディング）の巧拙によって採用の要否を決定する場合がある。また、社員の昇進試験では、業務と関連する何らかの課題を与え、その課題に対する解答の出来具合によって昇進の認否を決定する場合がある。インターネット等の通信ネットワーク技術の発達に伴って、被験者への課題の出題、および被験者からの解答の取得は、ウェブベースで実施することができるようになってきた。
【０００３】
例えば、特許文献１に開示されたスキル診断システムは、企業が求めるスキルと関係付けられた質問の回答を社員に求め、その質問の回答を、通信ネットワーク回線を通じて効率的に集計・評価するシステムであって、その際、社員の所属部門ごとや役職ごとに集計・評価を行っている。これにより、所属部門の平均レベルに対する社員の到達状況を示したり、保有するスキルの状況を複数のレベルに分けて示したりすること（各種ナビゲーション処理）ができるようになっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−１４０４５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、スキル診断を行う前に、被験者のスキルについてある程度の見当がつく場合があり、この場合には、被験者のスキルに応じて課題の難易度や課題数をカスタマイズしたいときがある。しかしながら、特許文献１に開示されたスキル診断システムは、質問に対する回答（被験者からの解答）を取得した後の利便性を向上させるものであって、被験者に質問する（課題を出題する）際の利便性を向上させるものではない。具体的には、質問に対する回答の集計・評価の段階で、上述したような各種ナビゲーションを行って社員の能力向上を促すことはできるが、結局スキルの高い社員にも低い社員にも同じ質問がなされるため、被験者のスキルに応じた課題の出題を行うことは困難である。
【０００６】
この点、特許文献１に開示されたスキル診断システムにおいて、質問テーブルの内容を変更することによって、質問の難易度や質問数を変更することも考えられる。しかし、スキル診断サーバに格納された質問テーブルの内容変更には、一般にプログラミング等の専門知識が必要になり、煩雑な作業を伴う。
【０００７】
本発明は、以上の点に鑑みてなされたものであり、その目的は、被験者のスキルに応じた課題の出題を簡易に行うことによって、被験者に課題を出題する際の利便性を向上させるスキル診断システム、サーバ、コンピュータプログラム、及びスキル診断方法を提供することにある。
【課題を解決するための手段】
【０００８】
第１の発明に係るスキル診断システムは、被験者が操作するクライアント端末とサーバが通信ネットワークを介して接続されるとともに、被験者に課題を出題し、クライアント端末の操作により被験者が入力した課題に対する解答をサーバが取得することによって、被験者のスキルを診断するスキル診断システムであって、サーバは、被験者に出題する課題を登録する課題登録手段と、課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、課題選択手段によって選択された課題に対する解答をクライアント端末の操作により被験者が入力可能なリンク先のＵＲＬ（Uniform Resource Locator）を設定するＵＲＬ設定手段と、クライアント端末がＵＲＬにアクセスしてきたことを契機として、課題選択手段によって選択された課題に関する課題情報をクライアント端末に送信する課題情報送信手段と、課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段とを備える。
【０００９】
このような構成によれば、課題出題者は、課題登録手段を通じて事前に課題を登録しておき、スキル診断を行うにあたって、登録されている複数の課題の中から、課題選択手段を通じて被験者に受けさせたい少なくとも一の課題を選択することができる。被験者は、クライアント端末を操作して、課題出題者により選択された課題に対する解答を入力可能なＵＲＬにアクセスすることによって、その課題に関する課題情報を取得し、解答入力受付手段を通じて、その課題に対する解答の入力を行うことができる。したがって、課題出題者は、被験者のスキルに応じて、被験者に受けさせたい課題を選択・出題することができる。また、被験者に受けさせたい課題を選択するにあたって、プログラミングなどの専門知識や煩雑な作業は不要であるので、被験者に受けさせたい課題を簡易に出題することができる。このように、本発明によれば、課題を出題する際の利便性を向上させることができる。
【００１０】
ここで、「課題選択手段」は、サーバに接続されたコンピュータ上で課題を選択させてもよいし、サーバ上で課題出題者に課題を選択させてもよい。また、被験者に受けさせたい少なくとも一の課題を、「ＵＲＬ設定手段」によって一のＵＲＬと対応付けて設定してもよいし複数のＵＲＬと対応付けて設定してもよい。また、「ＵＲＬ設定手段」によって設定されるＵＲＬは、電子メールや郵送によって被験者に伝えてもよいし、口頭により被験者に伝えてもよい。また、「課題情報送信手段」によって送信される「課題情報」は、課題選択手段によって選択された課題の課題名及び課題内容の両方であってもよいし、その課題の課題名のみであってもよい。例えば、「課題情報送信手段」によって被験者には受けるべき課題名のみを送信し、課題の具体的な内容は、電子メールや郵送、口頭によって被験者に伝えてもよい。
【００１１】
また、「ＵＲＬ設定手段」によって、被験者に受けさせたい課題をＵＲＬと予め対応付けて設定しておけば、それ以降、課題出題者による課題の選択を省略してもよい。すなわち、スキル診断を行うたびに、課題出題者によって課題が選択され、その課題に対してＵＲＬが設定され、そのＵＲＬに被験者がアクセスすることで、課題に対する解答が入力されるようにするだけでなく、課題出題者による課題の選択とＵＲＬの設定を予め行っておき、スキル診断を行う際には、そのＵＲＬに被験者がアクセスするだけで課題に対する解答が入力されるようにしてもよい。
【００１２】
第２の発明に係るスキル診断システムでは、サーバは、クライアント端末の操作により入力された被験者の解答を表示させる解答表示手段を備える。
【００１３】
このような構成によれば、課題出題者は、被験者が入力した解答を例えばサーバの表示画面上で確認することができる。したがって、課題出題者は、その解答の出来具合を把握することができ、ひいては次の課題選択をする段階で、より適切な判断（被験者のスキルにより応じた課題の選択）を行うことができる。なお、「解答表示手段」は、サーバの表示画面だけでなく、サーバに接続されたＰＣ等の表示画面に、被験者の解答（内容）を表示させてもよい。
【００１４】
第３の発明に係るスキル診断システムでは、サーバは、被験者が解答入力する過程で作成された中間作成物をクライアント端末から取得する中間作成物取得手段と、中間作成物を取得した時点のタイミングを記憶するタイミング記憶手段と、中間作成物の複雑さを定量的に示す複雑度を算出する複雑度算出手段と、タイミングと複雑度に基づいて、被験者のスキルを定量的に評価するスキル評価手段と、を備える。
【００１５】
このような構成によれば、被験者が作成した中間作成物をクライアント端末から所定タイミングで取得し、そのタイミングと中間作成物の複雑度に基づいて、被験者のスキルを定量的に評価することができる。したがって、課題出題者は、次の課題を選択する際に、定量的な観点から、被験者のスキルに応じた課題の選択をすることができる。特に、例えばプログラミングや３次元ＣＡＤ製図など、時間の経過とともに中間作成物の複雑度が変化するような課題については、課題に対する被験者の作業能力を定量的に評価することができるので、その後のスキル診断において、より適切に、被験者のスキルに応じた課題の選択を行うことができる。
【００１６】
第４の発明に係るスキル診断システムでは、サーバは、課題出題者のログインＩＤの入力を受け付けるログインＩＤ入力受付手段を備え、課題選択手段は、被験者に受けさせたい少なくとも一の課題を、ログインＩＤの入力を受け付けた課題出題者に選択させる。
【００１７】
このような構成によれば、被験者に受けさせたい課題を選択することができるのは、ログインＩＤをもつ課題出題者のみとなり、スキル診断システムのセキュリティ性を高めることができる。
【００１８】
第５の発明に係るスキル診断システムでは、ＵＲＬで示されたリンク先は、有効期限が設定されている。
【００１９】
このような構成によれば、課題出題者が意図した被験者以外の者にＵＲＬが漏洩した場合であっても、有効期限が過ぎれば、そのＵＲＬでスキル診断システムを利用することができなくなるので、有効期限後のスキル診断システムの無断利用を防ぐことができる。
【００２０】
第６の発明に係るサーバは、被験者が操作するクライアント端末と通信ネットワークを介して接続されるとともに、被験者に課題を出題し、クライアント端末の操作により被験者が入力した課題に対する解答を取得することによって、被験者のスキルを診断するスキル診断システムに用いられるサーバであって、被験者に出題する課題を登録する課題登録手段と、課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、課題選択手段によって選択された課題に対する解答をクライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定手段と、クライアント端末がＵＲＬにアクセスしてきたことを契機として、課題選択手段によって選択された課題に関する課題情報をクライアント端末に送信する課題情報送信手段と、課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段と、を備える。
【００２１】
第７の発明に係るコンピュータプログラムは、被験者が操作するクライアント端末と通信ネットワークを介して接続されるとともに、被験者に課題を出題し、クライアント端末の操作により被験者が入力した課題に対する解答を取得することによって、被験者のスキルを診断するスキル診断システムに用いられるサーバとして、コンピュータを機能させるためのコンピュータプログラムであって、被験者に出題する課題を登録する課題登録手段と、課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段と、課題選択手段によって選択された課題に対する解答をクライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定手段と、クライアント端末がＵＲＬにアクセスしてきたことを契機として、課題選択手段によって選択された課題に関する課題情報をクライアント端末に送信する課題情報送信手段と、課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段と、を備えるサーバとして、コンピュータを機能させる。
【００２２】
第８の発明に係るスキル診断方法は、被験者が操作するクライアント端末とサーバが通信ネットワークを介して接続されるとともに、被験者に課題を出題し、クライアント端末の操作により被験者が入力した課題に対する解答をサーバが取得することによって、被験者のスキルを診断するスキル診断方法であって、サーバにおいて、被験者に出題する課題を登録する課題登録ステップと、課題登録ステップにより登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択ステップと、課題選択ステップによって選択された課題に対する解答をクライアント端末の操作により被験者が入力可能なリンク先のＵＲＬを設定するＵＲＬ設定ステップと、クライアント端末がＵＲＬにアクセスしてきたことを契機として、課題選択ステップによって選択された課題に関する課題情報をクライアント端末に送信する課題情報送信ステップと、課題選択ステップによって選択された課題に対する被験者の解答入力を受け付ける解答入力受付ステップとを含む。
【００２３】
このような構成によれば、上述した第１の発明に係るスキル診断システムと同様に、課題出題者は、プログラミング等の煩雑な作業をすることなく、被験者のスキルに応じた課題の出題を簡易に行うことができ、ひいては被験者に課題を出題する際の利便性を高めることができる。
【発明の効果】
【００２４】
以上説明したように、本発明によれば、サーバにおいて、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させ、選択された課題に対する解答を被験者が入力可能なリンク先のＵＲＬを設定し、課題に関する課題情報を被験者に伝えるとともに、選択された課題に対する被験者の解答入力を受け付けることとしたので、被験者のスキルに応じた課題の出題を簡易に行うことができ、ひいては被験者に課題を出題する際の利便性を向上させることができる。
【図面の簡単な説明】
【００２５】
【図１】本発明の第１の実施形態に係るスキル診断システムのシステム構成を示す概念図である。
【図２】サーバのハードウェア構成例を示すブロック図である。
【図３】クライアント端末のハードウェア構成例を示すブロック図である。
【図４】被験者のプログラミングスキルを診断する流れを示すフローチャートである。
【図５】ログイン画面の一例である。
【図６】トップメニュー画面の一例である。
【図７】課題登録画面の一例である。
【図８】登録設定ダイアログ画面の一例である。
【図９】課題ＵＲＬ発行画面の一例である。
【図１０】発行設定ダイアログ画面の一例である。
【図１１】被験者が操作するクライアント端末の表示部に表示させる発行画面の一例である。
【図１２】被験者が操作するクライアント端末における表示部のブラウザ上に表示されている画面の一例である。
【図１３】電子メールの新規作成ウィンドウにおいて、図１２に示す発行画面のＵＲＬがコピー＆ペーストされている様子を示す図である。
【図１４】図１３に示す新規作成ウィンドウにパスワードが書き込まれている様子を示す図である。
【図１５】被験者が解答入力を行うプログラミング画面の一例である。
【図１６】課題表示／編集エリアにまだ何も入力されていない様子を示す図である。
【図１７】課題出題者が被験者に受けさせたい課題の内容（課題文）が表示されている様子を示す図である。
【図１８】警告表示がなされている画面の一例である。
【図１９】エラー表示がなされている画面の一例である。
【図２０】課題出題者が被験者の解答を確認するための解答確認画面の一例である。
【図２１】生産性・品質チャートの表示画面の一例である。
【図２２】解答ＤＢに記憶されるデータ構成の例示図である。
【図２３】提示されるプログラミング課題の具体例を示す例示図である。
【図２４】提示されたプログラミング課題に応じて被験者が作成したＣ言語によるプログラムの例示図である。
【図２５】本発明の第１実施形態に係るスキル診断システムにおいて、サーバのＣＰＵのデータ収集処理の手順を示すフローチャートである。
【図２６】本発明の第１実施形態に係るスキル診断システムにおいて、ＣＰＵの能力評価値算出の処理手順のフローチャートである。
【図２７】サーバによって算出された複雑度の推移データの例示図である。
【図２８】サーバによって算出された近似曲線の例示図である。
【図２９】サーバによって抽出された有効区間の例示図である。
【図３０】有効区間を補正する必要がある場合の、サーバによって作成された近似曲線の例示図である。
【図３１】特徴的な４名の被験者Ａ、Ｂ、Ｃ、Ｄの複雑度の推移データを示す例示図である。
【図３２】課題ＵＲＬ発行画面の他の一例である。
【図３３】発行設定ダイアログ画面の他の一例である。
【図３４】課題が複数選択された場合におけるＵＲＬ対応テーブルの一例である。
【図３５】被験者が解答入力を行うプログラミング画面の他の一例である。
【図３６】図３２における課題一覧表の変形例となる課題グループ一覧表である。
【図３７】被験者のプログラミングスキルを診断する他の流れを示すフローチャートである。
【図３８】課題出題者が、課題を受けさせる被験者を選択するための画面の一例である。
【図３９】発行ＤＢに格納されたＵＲＬ対応テーブルの一例を示す図である。
【図４０】課題グループから構成されるＵＲＬ対応テーブルを示す図である。
【図４１】図４０に示すＵＲＬ対応テーブルに、有効／無効を対応づけたアクティベート機能付きＵＲＬ対応テーブルを示す図である。
【発明を実施するための形態】
【００２６】
以下、本発明の実施の形態に係るスキル診断システムについて、図面を参照しながら具体的に説明する。
【００２７】
［第１の実施形態］
図１は、本発明の第１の実施形態に係るスキル診断システムのシステム構成を示す概念図である。このスキル診断システムの利用形態の一例について説明すると、システム利用企業は、システム運用者と契約を結んでスキル診断システムの利用権限を得る。ここでいうシステム利用企業は、例えばプログラマを数多く抱えるソフトウェア会社などである。システム利用企業が保有する複数台のクライアント端末２（図１では課題出題者用のクライアント端末２Ａ及び被験者用のクライアント端末２Ｂ）は、インターネット等の通信ネットワーク１００を介して、システム運用者が所定のデータセンター内に設置したサーバ１に接続される。
【００２８】
システム利用企業に在籍している課題出題者（人事担当者など）は、自己のクライアント端末２Ａを操作してサーバ１にアクセスし、スキル診断システムにログインする。ログイン後、所定のメニュー画面から、被験者となる自社のプログラマに受験させるプログラミング課題を新規に登録し（或いは既存のものを選択し）、そのプログラミング課題に対する解答を入力可能なリンク先のＵＲＬを取得する。そして、そのＵＲＬを、被験者となるプログラマに電子メール等で別途連絡する。このＵＲＬは、サーバ１内に存在するプログラミング課題（ファイル）の場所を指し示すものである。
【００２９】
被験者となるプログラマは、自分の都合のよいとき、或いは決められた日時に、自己のクライアント端末２Ｂを操作して、課題出題者から電子メール等で知らされたＵＲＬが示すリンク先（ウェブページ）にアクセス（ジャンプ）する。そして、受けるべきプログラミング課題を確認した後、そのプログラミング課題に対する解答を入力する。入力された解答は（所定のタイミングで逐次）サーバ１に送られ、サーバ１内の所定の記憶領域に記憶される。プログラマによる解答入力が完了すると、上述したメニュー画面に解答入力が完了した旨の情報（新着解答情報）が掲載される。
【００３０】
課題出題者は、スキル診断システムにログインし、新着解答情報を見つけると、プログラマによって入力された解答の詳細（解答の内容）を確認し、評価する。解答内容を評価する際は、プログラムの複雑さを定量的に示す複雑度（詳細は後述）を用いて評価してもよい。
【００３１】
このように、システム利用企業は、本スキル診断システムを利用することによって、プログラミング課題を簡易に選択して、自社のプログラマに簡易に出題することができる。なお、上述した説明では、クライアント端末２Ａ，２Ｂを操作する課題出題者（人事担当者など）と被験者（プログラマ）は、同一企業内の社員であることを想定したが、同一企業内でなくても構わない。例えば、ある企業（ソフトウェエア会社やプログラマの人材派遣業者など）が、雇用しようとするプログラマのプログラミング能力を測りたいときは、課題出題者側のクライアント端末２Ａは、その企業内に設置されたＰＣ等とし、被験者側のクライアント端末２Ｂは、被験者の自宅内に配置されたＰＣ等としてもよい。
【００３２】
また、以下に説明する第１実施形態では、説明の便宜上、課題出題者が、１人の被験者に受けさせたい課題を１つだけ選択するケースについて説明するが、例えば、複数の被験者に対して課題を出題したり、複数の課題を選択するようにしたりしてもよい（後述する［第２実施形態］で詳しく説明する）。また、以下に説明する第１実施形態では、被験者となるプログラマは、電子メール等で知らされたＵＲＬが示すリンク先に直接アクセスするようにしたが、例えば、課題出題者がログインするための画面（例えば後述する図５）を介して、そのリンク先にアクセスするようにしてもよい（後述する［第３実施形態］で詳しく説明する）。この場合、そのリンク先と、課題出題者のログイン画面とは関連付けられる。
【００３３】
さらに、以下に説明する第１実施形態では、上述したようなＳａａＳ（Software as a Service）の形態で利用するスキル診断システムについて説明するが、本発明はこれに限られない。例えば、ソフトウェア会社にサーバ１を譲渡し、そのソフトウェア会社自体が、システム利用者（サーバ保有者）になることもできる。
【００３４】
図１に示すように、第１実施形態に係るスキル診断システムは、サーバ１と、課題出題者と被験者が操作するＰＣ（Personal Computer）等のクライアント端末２（２Ａ，２Ｂ）とが、通信ネットワーク１００を介して接続されている。クライアント端末２Ａ，２Ｂについては、ＰＣ以外にＰＤＡ（Personal Digital Assistant）などの携帯機器でもよく、端末の種類や端末数の如何は問わない。また、ＬＡＮ（Local Area Network），ＷＡＮ（Wide Area Network），インターネット，イントラネットなど、通信ネットワーク１００の種類や構成の如何も問わない。なお、サーバ１は、図１では説明の便宜上１台のみとしているが、もちろん複数台設置してもよい。また、図１では、クライアント端末２Ａ，２Ｂは一企業が保有することを想定しているが、例えばマルチテナント（複数の企業がシステム利用企業になること）を考えた場合には、更に多くのクライアント端末２がサーバ１に接続される。
【００３５】
図２は、サーバ１のハードウェア構成例を示すブロック図である。図２に示すように、サーバ１は、各種プログラムに基づき数値計算や情報処理を行うとともに、ハードウェア各部の制御を行うＣＰＵ（Central Processing Unit）１１と、起動プログラムや初期化プログラム等が格納されたＲＯＭ（Read Only Memory）１２と、ＣＰＵ１１が各種プログラムを実行する際のワークエリアとして機能するＲＡＭ（Random Access Memory）１３と、入力部１４及び表示部１５と、外部の通信ネットワーク１００と通信可能に接続される通信部１６と、補助記憶手段として機能するＨＤＤ（Hard Disk Drive）１７とを有しており、これらの間の通信は、データバスやアドレスバスなどのバスを介して行われる。なお、入力部１４及び表示部１５は、サーバ１に直接接続された入力装置（マウス等）及び出力装置（モニタ等）からなるが、省略することもできる。
【００３６】
サーバ１のＨＤＤ１７には、各種アプリケーションを実行するための機能や、表示部１５又はクライアント端末２の表示部２５において入力フォームや各種ボタン等のＧＵＩ（Graphical User Interface）を利用するための機能などを提供するとともに、サーバ１全体を統合的に管理するＯＳ（Operating System）がインストールされている（図示せず）。
【００３７】
また、ＯＳ上で実行されるアプリケーション（アプリ）として、電子メール（ＷＥＢメール等）の送受信を行う電子メールアプリ１７１と、被験者に出題する課題を選択して設定するとともに、被験者の解答を確認するための課題設定・解答確認アプリ１７２と、被験者に出題する課題文の作成等を行う文書作成・編集アプリ１７３と、被験者のスキルを定量的に評価する生産性・品質評価アプリ１７４と、クライアント端末２Ａ，２Ｂのウェブブラウザアプリ２７２からの要求に応じて、ＨＴＭＬ（Hyper Text Markup Language）文書やＸＭＬ（Extensible Markup Language）文書、画像などの情報をクライアント端末２Ａ，２Ｂに送信するウェブアプリ１７５がインストールされている。ウェブアプリ１７５のインストールによって、サーバ１はウェブサーバとして機能し得る。各アプリケーションは、アプリケーションプログラムがＨＤＤ１７からＲＡＭ１３にロード（展開）され、各アプリケーションプログラムに基づきＣＰＵ１１によって実行される。
【００３８】
さらに、サーバ１のＨＤＤ１７は、被験者に出題する課題を登録する課題ＤＢ（Database）１７６と、課題を受けさせたい被験者を登録する被験者ＤＢ１７７と、課題出題者を登録する出題者ＤＢ１７８と、クライアント端末２Ａ，２Ｂに送信するＨＴＭＬ文書や画像などが格納される発行ＤＢ１７９と、被験者から取得した解答を格納する解答ＤＢ１８０と、を有している。課題ＤＢ１７６は、過去の課題（ソフトウェア資産）を容易に再利用することができるようにするために、課題出題者によって作成された課題の課題名や課題内容を登録（記憶）しておくＤＢである。被験者ＤＢ１７７は、後述する電子メールアプリ１７１を実行する際に、電子メールの送り先となる被験者のメールアドレスを登録しておくＤＢである。後述する電子メールアプリ１７１が実行される際に、この被験者ＤＢ１７７から所定のメールアドレスが読み出される。
【００３９】
出題者ＤＢ１７８は、課題出題者としてスキル診断システムの利用する権限があるか否かを確認するために、課題出題者のログインＩＤやパスワードを登録しておくＤＢである。発行ＤＢ１７９は、被験者が課題に対する解答を入力するための画面を被験者のクライアント端末２に表示させるＨＴＭＬ文書や画像などを格納しておくＤＢである。それらのＨＴＭＬ文書や画像などは、後述するウェブブラウザアプリ２７２（図３）からの要求に応じて、被験者のクライアント端末２Ｂに自動送信される。解答ＤＢ１８０は、被験者から取得した解答、すなわち（被験者がソースコードを１文字入力するごとに）クライアント端末２Ｂから送られてきたログデータ（被験者が作成したソースコード）を格納（記憶）しておくＤＢである。また、詳細は後述するが、そのログデータをサーバ１が受信したタイミングも解答ＤＢ１８０に格納される。したがって、解答ＤＢ１８０が、被験者のクライアント端末２Ｂから受信したログデータ及びその受信タイミングの双方を格納することにより、課題出題者は、被験者が、どのくらいの時間で、どのくらいの量のソースコードを記述できたかを視認することができる。
【００４０】
なお、サーバ１のＨＤＤ１７は、フラッシュメモリやＵＳＢ（Universal Serial Bus）メモリ（及びメモリコントローラ）、光ディスクドライブ等で代替してもよい。また、各アプリケーションプログラムは、予めＨＤＤ１７に格納されていてもよいし、ＣＤやＤＶＤ等の記録媒体からＨＤＤ１７に格納されてもよいし、通信ネットワーク１００を介して外部のコンピュータからダウンロードされ、ＨＤＤ１７に格納されてもよい。さらに、説明の便宜上、上述したアプリは別々に一のＨＤＤ１７に格納されていることとするが、複数のＨＤＤ１７に分散して格納されていてもよいし、また、複数のアプリが統合されたものが一のＨＤＤ１７に格納されていてもよい。
【００４１】
図３は、クライアント端末２のハードウェア構成例を示すブロック図である。なお、課題出題者が操作するクライアント端末２Ａのハードウェア構成と、被験者が操作するクライアント端末２Ｂのハードウェア構成とは同様であるので、特に区別することなく、クライアント端末２のハードウェア構成を説明する。また、本実施形態では、課題出題者はサーバ１の電子メールアプリ１７１を使用し、被験者は自己のクライアント端末２Ｂの電子メールアプリ２７１を使用するようにしているが、課題出題者も、自己のクライアント端末２Ａの電子メールアプリ２７１を使用するようにしてもよい。図３に示すように、クライアント端末２は、ＣＰＵ２１と、ＲＯＭ２２と、ＲＡＭ２３と、入力部２４と、表示部２５と、通信部２６とがバスを介して接続されている。これら各部が提供する機能は、基本的にサーバ１の対応する各部と同様である。また、クライアント端末２はＨＤＤ２７を有しており、このＨＤＤ２７には、入力部２４及び表示部２５による入出力機能や、各種アプリケーションを実行するための機能、および、表示部２５においてＧＵＩを利用するための機能などを提供するとともに、クライアント端末２全体を統合的に管理するＯＳがインストールされている（図示せず）。
【００４２】
また、ＯＳ上で実行されるアプリケーション（アプリ）として、電子メールの送受信を行う電子メールアプリ２７１と、課題出題者が出題した課題をウェブ上で閲覧するためのウェブブラウザアプリ２７２とがインストールされている。ウェブブラウザアプリ２７２のインストールによって、クライアント端末２はウェブクライアントとして機能し得る。これらの各アプリケーションは、アプリケーションプログラムがＨＤＤ２７からＲＡＭ２３にロード（展開）され、各アプリケーションプログラムに基づきＣＰＵ２１によって実行される。なお、サーバ１のＨＤＤ１７と同様に、クライアント端末２のＨＤＤ２７も、フラッシュメモリやＵＳＢメモリ（及びメモリコントローラ）、光ディスクドライブ等で代替することが可能である。
【００４３】
以上のようなシステム構成からなるスキル診断システムを用いて、課題出題者は自己のクライアント端末２Ａを操作して、サーバ１に課題を登録し、登録された課題の中から被験者に受けさせたい課題を選択し、ＵＲＬを発行することで被験者に課題を出題する一方、被験者はクライアント端末２Ｂを操作して課題に対して解答し、その解答をサーバ１が取得することによって、被験者のスキルを診断する。なお、本実施形態では、診断対象となるスキルは、被験者のプログラミングスキルを考える。
【００４４】
図４は、被験者のプログラミングスキルを診断する流れを示すフローチャートである。なお、ステップＳ１〜ステップＳ４までの処理（図中の点線より上側）は、課題出題者のクライアント端末２Ａの操作により行われる処理であって、ステップＳ５〜ステップＳ８までの処理（図中の点線より下側）は、被験者のクライアント端末２Ｂの操作により行われる処理である。課題出題者のクライアント端末２Ａの操作により行われる処理は、入力部１４等によりサーバ１上で行われてもよい。図４に示すように、まず、課題出題者のログインが行われる（ステップＳ１）。具体的には、課題出題者が自己のクライアント端末２Ａのウェブブラウザを立ち上げ、通信ネットワーク１００を介してサーバ１に（所定のリンク先に）アクセスする。そうすると、サーバ１のＣＰＵ１１は、表示部２５にログイン画面を表示させるためのＨＴＭＬ文書等を、クライアント端末２Ａに送信する。
【００４５】
図５は、ログイン画面の一例である。課題出題者は、自己のクライアント端末２Ａの入力部２４（キーボード）の操作により、ログインＩＤ入力フォーム５１に自己のログインＩＤを入力し、また、パスワード入力フォーム５２にパスワードを入力する。そして、課題出題者が入力部２４（マウス）を操作してログインボタン５３をクリックすると、ログインＩＤとパスワードがサーバ１に送られ、それらの照合が行われた後、課題出題者のログインが完了する。ログインＩＤやパスワードの照合は、ＣＰＵ１１がＨＤＤ１７内の出題者ＤＢ１７８にアクセスすることによって行う。これにより、課題出題者にスキル診断システムの利用権限があることが確認され、ＣＰＵ１１によって課題設定・解答確認アプリ１７２が実行される。なお、照合に失敗した場合には、ログインを拒否される。
【００４６】
なお、本実施形態では、ステップＳ１においてログインＩＤとパスワードの照合が成功すると課題設定・解答確認アプリ１７２が実行されるようにしたが、課題出題者がサーバ１にアクセスしてきた段階で（ログイン時に）課題設定・解答確認アプリ１７２が実行されるようにしてもよい（つまり、課題設定・解答確認アプリ１７２の実行中に照合を行ってもよい）。また、ステップＳ２以降の処理では、課題設定・解答確認アプリ１７２が実行され続けているものとするが、必要に応じて、実行が途切れるようにしてもよい（例えば、後述するＵＲＬ設定（ステップＳ４）とＵＲＬアクセス（ステップＳ５）との間で、一旦、課題設定・解答確認アプリ１７２の実行が途切れてもよい。また、ＣＰＵ１１や出題者ＤＢ１７８などは、課題出題者のログインＩＤの入力を受け付けるログインＩＤ入力受付手段の一例として機能する。また、図５に示すログイン画面など、課題出題者に視認させる画面は、ＨＤＤ１７の所定領域に格納されているものとし、ＣＰＵ１１及び通信部１６によって課題出題者のクライアント端末２Ａに送られ、その表示部２５に表示される。
【００４７】
課題出題者のログインが完了すると、プログラミングスキル診断システムのトップメニューが表示される。具体的には、サーバ１のＣＰＵ１１は、クライアント端末２Ａの入力部２４からの操作信号を受信して、課題出題者のログインを認識すると、クライアント端末２Ａの表示部２５にトップメニュー画面を表示させる。図６は、トップメニュー画面の一例である。図６に示すトップメニュー画面には、第１の実施形態に係るスキル診断システムの主要機能である、新規課題の登録や課題内容の編集を行うための課題登録ボタン６１と、プログラミング課題を出題するためのＵＲＬを設定して発行するための課題ＵＲＬ発行ボタン６２と、被験者の解答を確認するための解答確認ボタン６３とが、上からこの順で配置されている。このように、トップメニュー画面の一画面上に、課題登録、ＵＲＬ発行、課題確認を行うためのボタンが配置されることで、課題出題者は、これらの作業を容易かつ迅速に行うことができる。
【００４８】
解答確認ボタン６３の右方には、新着解答の件数を示す解答新着件数表示欄６４が配置されている。これにより、課題出題者は、トップメニュー画面を視認すると同時に、被験者からの解答がサーバ１に届いているかどうかを確認することができる。また、解答確認ボタン６３の下方には、システム管理ボタン６５が配置されている。課題出題者がこのシステム管理ボタン６５をクリックすると、システム管理者向けの管理画面（図示せず）が開く。なお、このシステム管理ボタン６５を通じて、スキル診断システムの各種動作設定（メンテナンスのためにシステム利用時間に制限を設ける等）や発行済みＵＲＬの管理（発行済みＵＲＬを取り消す操作（無効化する操作）を行ったり、ＵＲＬで示されたリンク先のアクセス有効期限を変更したりする等）を行うことができる。
【００４９】
また、システム管理ボタン６５の下方には、お知らせエリア６６が表示されている。これにより、システム仕様に対して変更・追加等を行った場合などに、課題出題者（或いはユーザ側管理者）に対して適切な情報提供（例えばスキル診断システムに新機能を追加した場合に、それを被験者に伝える等）を行うことができる。また、お知らせエリア６６の右下近傍には、マニュアルページ（図示せず）へのリンクが張られた文字「マニュアルページへ」６７が表示されており、これをクリックすることでシステムの詳しい利用方法が書かれたマニュアルを参照することができる。
【００５０】
次に、課題出題者は、トップメニュー画面から課題の登録を行う（図４のステップＳ２）。具体的には、課題出題者によってトップメニュー画面の課題登録ボタン６１がクリックされると、クライアント端末２Ａの表示部２５に課題登録画面が表示される。図７は、課題登録画面の一例である。図７に示す課題登録画面の上方には、既に課題出題者によって登録された課題の一覧が表示される。これにより、課題出題者は、被験者に受けさせることが可能な課題を一目で容易に確認することができる。なお、課題出題者によって登録された課題が未だ存在しない場合には、空欄表示になる。
【００５１】
課題一覧表の表示項目は、左欄より、課題名６１１、言語６１２、登録者６１３、難易度６１４の順で並んでおり、課題名６１１と言語６１２については、後述するように課題登録時に必須の入力項目となるので、必ず表示される。一方、登録者６１３と難易度６１４については、課題出題者が備忘のために記入するコメントであるので、必ずしも全て表示されない。ただし、登録者６１３や難易度６１４が表示されるようにしておくことで、課題出題者が課題を選択する際の選択基準を増やすことができる。例えば、以前課題出題者Ｂさんによって作成・登録された課題「英単語カウント」は評判が良かったので、今回は、Ｂさんによって登録された課題を使わせてもらおう、といった具合である。本実施形態では、必ず表示される項目を黒色で表示し、必ずしも表示されないコメントを緑色で表示している。これにより、課題出題者は、必須入力項目と任意入力のコメントを一目で見分けることができる。
【００５２】
課題一覧表には、縦スクロールバー６１５と横スクロールバー６１６が設けられている。これらのスクロールバーは、上述したＧＵＩによって実現される。課題一覧表を縦スクロールすれば、更に下に位置する課題を確認することができる。課題一覧表を横スクロールすれば、コメントを追加可能な空列が現れる。これにより、課題出題者は、ウィンドウサイズを一定の大きさに制限しつつ、課題登録者が追加したコメントを容易に確認することができる。
【００５３】
また、課題一覧表において編集したい課題については、選択行の色を変えてカーソル選択を行う（例えば、背景が白色のとき、カーソルで選択された行の背景を水色にする）。カーソル選択は、課題出題者が入力部２４を通じて、キーボードの上下ボタンで行ってもよいし、マウスにより所望の行を選択することで行ってもよい。また、課題一覧表に対しては、既に登録されている課題を削除したり、コメント部分のコピーや削除をしたり、列の幅を広げたりする等、様々な編集操作が可能である。
【００５４】
なお、課題一覧表の編集操作を行うにあたっては、汎用の表計算ソフトを用いることもできる。例えば、インターネット上で使用可能な表計算ソフトを予めインストールしておき、ＣＰＵ１１が、課題設定・解答確認アプリ１７２とともにそのソフトを実行し、課題登録画面に課題一覧表を表示させてもよい。これにより、表計算ソフトが有するソート（並び替え）機能などを利用することができる。
【００５５】
図７に示す課題登録画面において、課題一覧表の下方には、新しい課題を登録するための新規登録ボタン６１７と、選択されている課題を編集目的で開くための開くボタン６１８とが配置され、これらのボタンの更に下方に、トップメニュー画面にリンクが張られた文字「ＴＯＰ」６１９が表示されている。
【００５６】
本実施形態に係るスキル診断システムでは、課題の登録手順として、上述した新規登録ボタン６１７をクリックして新しく課題を登録するか、上述した開くボタン６１８をクリックして過去の課題を編集するか、の２種類がある。いずれの手順でも、登録設定ダイアログ画面が表示され、登録条件の設定に移る。図８は、登録設定ダイアログ画面の一例である。
【００５７】
なお、図８に示す登録設定ダイアログ画面は、開くボタン６１８をクリックしてダイアログ画面が表示された直後のイメージであり、新規登録ボタン６１７をクリックした場合には、ダイアログ画面は全て未設定状態（空欄表示）になる。このように、開くボタン６１８を新規登録ボタン６１７の下に並べて配置しておき、開くボタン６１８のクリックにより、過去の課題が自動的に読み込まれた登録設定ダイアログ画面が表示されるようにすることで、課題出題者は、過去の課題（過去の資産）を容易に再利用することができる。
【００５８】
例えば、課題「英単語カウント」の派生課題を作りたい場合には、図７に示す課題一覧表において「英単語カウント」にカーソルをあわせ、開くボタン６１８のクリックによりこれを開く。そして、図８に示す登録設定ダイアログ画面上で内容をアレンジし、課題名テキストボックス６１８１上で別の課題名（「英単語カウント２」など）を入力し、登録ボタン６１８９をクリックすればよい。すなわち、クライアント端末２Ａの入力部２４からの操作信号を受信したＣＰＵ１１は、ＨＤＤ１７の課題ＤＢ１７６に登録されている過去の課題（課題名「英単語カウント」）をＲＡＭ１２に読み出して、入力部２４からの操作信号に基づきＲＡＭ１２上で内容のアレンジを行った後、ＨＤＤ１７の課題名「英単語カウント」が格納されている記憶領域とは別の記憶領域に書き込む。これにより、課題出題者は、過去の課題の派生課題を容易に作ることができる。
【００５９】
なお、別の課題名を入力せずに登録ボタン６１８９をクリックすると、課題内容が変更（上書き）される。すなわち、クライアント端末２Ａの入力部２４からの操作信号を受信したＣＰＵ１１は、ＨＤＤ１７の課題ＤＢ１７６に登録されている過去の課題（課題名「英単語カウント」）をＲＡＭ１２に読み出して、入力部２４からの操作信号に基づきＲＡＭ１２上で内容のアレンジを行った後、ＨＤＤ１７の課題名「英単語カウント」が格納されている記憶領域と同じ記憶領域に書き込む（上書きする）。これにより、課題出題者は、過去の課題内容をアレンジや変更も容易に行うことができる。
【００６０】
また、図８に示す登録設定ダイアログ画面では、課題は課題名で管理・識別されるため、例えば「英単語カウント」という課題のＣ版とＪＡＶＡ（登録商標）版を同一の課題名で登録することはできない。「英単語カウント（Ｃ版）／英単語カウント（ＪＡＶＡ（登録商標）版）」などのように、課題名を変更する必要がある。
【００６１】
図８に示す登録設定ダイアログ画面の上方には、課題名を新規入力できる課題名テキストボックス６１８１、ＣかＪＡＶＡ（登録商標）などの言語を選択できる言語リストボックス（プルダウンメニュー）６１８２が設けられている。課題名テキストボックス６１８１を設けておけば、上述したように、容易に派生課題を作ることができる。また、言語リストボックス６１８２を設けておけば、課題出題者がＣ言語かＪＡＶＡ（登録商標）言語かを自由に選択することができるとともに、将来的に、課題サポート言語（Ｒｕｂｙなど）が増えた場合に容易に追加することができる。
【００６２】
言語リストボックス６１８２の下方には、課題内容を直接入力するための課題内容登録エリア６１８３が配置されている。文章のみの課題の場合には、テキスト形式で課題を作成することができるし、課題に図を入れたい場合には、ＰＤＦ形式で課題を作成することができる。本実施形態では、課題内容登録エリア６１８３の初期状態はテキストボックスとしている。したがって、課題出題者が課題文を登録するときには、この課題内容登録エリア６１８３に直接課題文を書いてもよいし、別の文書からコピー＆ペーストしてもよい。
【００６３】
また、予め作成したテキストファイルを、課題内容登録エリア６１８３にドラッグ＆ドロップしてもよい。すなわち、課題出題者は、自分の使いやすいテキストエディタで課題を作成し、テキストファイルで保存した後、そのテキストファイルをスキル診断システムに容易に取り込んでもよい。
【００６４】
なお、課題内容登録エリア６１８３以外でテキスト文書等を作成・編集するために、サーバ１のＨＤＤ１７には文書作成・編集アプリ１７３（テキストエディタ）がインストールされている。ＣＰＵ１１は、これを実行することによって、課題出題者に通信ネットワーク１００を介してテキスト文書等を作成・編集させることもできる。また、テキストファイルだけではなく、ＰＤＦファイルをドラッグ＆ドロップすることもできる。ＰＤＦファイルをドラッグ＆ドロップすると、課題内容登録エリア６１８３内には、そのＰＤＦファイルの内容が表示される。そして、課題内容登録エリア６１８３は、ＰＤＦのビューエリアになる。それ以後、テキストファイルを課題内容登録エリア６１８３にドラッグ＆ドロップするか、或いは、内容のクリアボタン６１８４をクリックすることによって、課題内容登録エリア６１８３を、テキストを直接入力できる状態に戻すことができる。このようにして、ＰＤＦファイルをスキル診断システムに取り込むことも、この取り込みを解除することも、容易に行うことができる。
【００６５】
課題内容登録エリア６１８３の下方には、自動単体テスト（詳細は後述する）のためのテストコードを直接入力し、登録するためのテストコード登録エリア６１８５が配置されている。本実施形態では、テストコード登録エリア６１８５はテキストボックスとしている。課題内容登録エリア６１８３と同様に、テストコード登録エリア６１８５にも、テキストファイルをドラッグ＆ドロップすることが可能である。内容のクリアボタン６１８６をクリックすれば、テストコード登録エリア６１８５に入力した内容が消去される。
【００６６】
自動単体テストは、課題出題者がテストボタン６１８７をクリックすることによって行われるテストである。具体的に説明すると、自動単体テストは、課題に対する解答されたソースコードが論理的に正しいか否かを自動的にチェックするためのテストである。図８に示すテストコード登録エリア６１８５には、main関数と、TestCaseという名前の構造体（struct）が記述されている（一部抜粋である）。課題出題者がテストボタン６１８７をクリックすると、図１５に示すプログラミング画面（詳細は後述する）が、課題出題者のクライアント端末２Ａの表示部２５に表示される。すなわち、ＣＰＵ１１は、表示部２５に、図１５に示すプログラミング画面を表示させる。そして、課題出題者は、プログラミング画面の課題表示／編集エリア９０１に、課題に解答するソースコードを試しに記述してみる。図１５では、CountWord関数が記述されている途中の様子を示している。課題出題者は、CountWord関数の記述が全て終了すると、図１５のプログラミング画面下方のテストボタン９０５をクリックする。そうすると、課題表示／編集エリア９０１に記述されたソースコードに、図８に示すテストコード登録エリア６１８５を通じて登録されたテストコードがマージされ、ビルド（コンパイルとリンクを連動させて実行形式のファイルを自動生成する処理）が行われる。すなわち、サーバ１のＨＤＤ１７には、コンパイラやリンカとしての機能を提供するプログラミングアプリケーション（図２では図示せず）がインストールされており、ＣＰＵ１１は、そのプログラミングアプリケーションを実行することによって、上述したソースコードとテストコードをマージしたもののビルドを行う。
【００６７】
ソースコードとテストコードのマージ方法は、如何なる方法であってもよい。例えば、課題表示／編集エリア９０１に記述されたソースコードの中に、main関数に相当する記述があった場合には、その部分を削除したり、（テストコード中のmain関数が真のmain関数となるように）属性変更を行ったりするなど、必要に応じて編集を行った上で、ソースコードとテストコードをマージすればよい。ビルドが完了すると、ＣＰＵ１１は、得られた実行形式のファイルを実行し、出力結果を表示部２５（図１５に示すプログラミング画面の出力エリア９０２）に表示する。
【００６８】
このようにして、課題出題者は、図８に示すテストボタン６１８７をクリックすることにより、試しに課題を解いてみることができる。つまり、自分が作成した模範ソースコードによって、意図した出力結果が得られるか否かを試すことができる。また、テストコード登録エリア６１８５を通じてテストコードを予め登録しておけば、試しに記述したソースコードをデバッグすることができると同時に、テストコードをデバッグすることもできる。なお、ここでは「英単語カウント」の課題について自動単体テストを行うため、上述のようなテストコードとソースコードをマージするようにしたが、他の課題では、例えば課題出題者が入力値として数値Ｘを入力したとき、適切な出力値として数値Ｙが出力されるか否かのテストコードとソースコードをマージするようにしてもよい。
【００６９】
図８において、登録設定ダイアログ画面の下方に配置された登録ボタン６１８９は、課題内容登録エリア６１８３やテストコード登録エリア６１８５に入力した設定内容に従って、課題を登録するためのボタンであり、キャンセルボタン６１８８は、課題内容登録エリア６１８３やテストコード登録エリア６１８５に入力した設定内容を破棄してダイアログを閉じるボタンである。前者の登録ボタン６１８９について具体的に説明すると、（登録ボタン６１８９の）操作信号を受信したＣＰＵ１１は、課題内容登録エリア６１８３やテストコード登録エリア６１８５に入力された設定内容を、ＨＤＤ１７の課題ＤＢ１７６に登録する。したがって、ＣＰＵ１１や課題ＤＢ１７６は、被験者に出題する課題を登録する課題登録手段の一例として機能する。
【００７０】
なお、図８に示す登録設定ダイアログ画面の設定項目のうち、課題名テキストボックス６１８１の入力と言語リストボックス６１８２の選択は必須である。一方で、課題内容登録エリア６１８３やテストコード登録エリア６１８５への入力は省略することができる。例えば、簡単な課題を別途（文書や口頭で）被験者に伝えた場合には、課題内容登録エリア６１８３への入力を省略してもよい（課題内容が複雑な場合には、課題を既に被験者に伝えていても、課題内容登録エリア６１８３への入力を省略しない方が好ましい）。また、課題出題者が、被験者のプログラミング結果を確認することだけを目的とする場合や、プログラミング過程を監視すること（定性的な観察）だけを目的とする場合には、テストコード登録エリア６１８５への入力を省略してもよい。もちろん、課題内容が簡単であって、プログラミング結果の確認だけを目的とする場合等には、課題内容登録エリア６１８３とテストコード登録エリア６１８５との双方への入力を省略してもよい。
【００７１】
次に、課題出題者は、図６に示すトップメニュー画面に戻って、課題の選択を行う（図４のステップＳ３）。具体的には、課題出題者によってトップメニュー画面の課題ＵＲＬ発行ボタン６２がクリックされると、クライアント端末２Ａの表示部２５に課題ＵＲＬ発行画面が表示される。図９は、課題ＵＲＬ発行画面の一例である。図９に示す課題ＵＲＬ発行画面の上方には、既に課題出題者によって登録されている課題の一覧（課題一覧表６２０ａ）が表示される。課題一覧表６２０ａは、図７に示す課題一覧表と同じものである。したがって、課題一覧表は、図７と図９で２箇所表示されることになり、両方の画面で課題出題者が記入したコメント等は互いに反映させる必要がある。
【００７２】
また、課題一覧表６２０ａの下方には、発行履歴一覧表６２０ｂが表示されており、その表示項目は、左欄より、発行日６２１、課題名６２２、有効期限６２３、発行者６２４、目的６２５の順で並んでいる。課題一覧表６２０ａと同様に、発行日６２１、課題名６２２、有効期限６２３の項目は、システムによって自動的に表示される項目であり、発行者６２４、目的６２５の項目は、課題出題者が任意に記入するコメントである。特に、有効期限６２３について更に詳述すると、課題出題者が発行したＵＲＬ（で示されたリンク先）の有効期限が過ぎたか否か（そのＵＲＬを用いて被験者が受験可能か否か）を示しており、有効期限が過ぎていない場合には、黒丸印がついている。仮に、黒丸印がついている課題を出題した場合には、今回の被験者だけでなく、既にその課題を出題されている被験者からも解答が送られてくる可能性があり、管理が煩雑になる（黒丸印がついていない課題については、解答画面へのアクセス有効期限が過ぎているために、今回の被験者以外の者から解答が送られてくることはない）。したがって、有効期限６２３の項目を設けることによって、課題発行管理の利便性を高めることができる。また、黒丸印がついている課題を既に出題されている被験者が解答画面へまだアクセスできる状態で、新たにその課題が出題されるとなると、今回の被験者に課題内容が事前に漏れたり、場合によっては解答内容が漏れたりする虞がある。したがって、有効期限６２３の項目を設けることによって、このような事態をできる限り抑えて、スキル診断の信頼性を高めることができる。なお、ＵＲＬ（で示されたリンク先）の有効期限の詳細については、図１０を用いて後述する。また、本明細書で用いられるＵＲＬは、ＵＲＩ（Uniform Resource Identifier）と称することもできる。
【００７３】
図９に示す課題ＵＲＬ発行画面から、課題ＵＲＬを発行する手順としては２つある。１つは、登録されている課題を選択して、新規発行ボタン６２７をクリックする方法であり、もう１つは、過去の発行履歴を選択して、修正／再発行ボタン６２９をクリックする方法である。これらのいずれの手順でも、後述する発行設定ダイアログ画面（図１０参照）が表示部２５に表示される。発行設定ダイアログが開いたときの各設定項目は、新規発行ボタン６２７がクリックされたときには、課題名のみがセットされて他は全て未設定状態で表示（空欄表示）される一方、修正／再発行ボタン６２９がクリックされたときには、過去に発行したときの条件がセットされた状態で表示される。これにより、過去に発行したＵＲＬを再利用する場合には、課題出題者が条件を再度入力する手間を省くことができる。図１０は、修正／再発行ボタン６２９をクリックして発行設定ダイアログ画面が表示された直後の状態である。特に、発行履歴が複数パターン溜まってくると、修正／再発行ボタン６２９の利便性が高まる。
【００７４】
図９の課題ＵＲＬ発行画面において、課題出題者は、課題一覧表６２０ａの中から、或いは、発行履歴一覧表６２０ｂの中から、被験者に受けさせたい課題について選択行の色を変えてカーソル選択を行った後、新規発行ボタン６２７又は修正／再発行ボタン６２９をクリックする。すなわち、表示部２５におけるカーソル選択と新規発行ボタン６２７又は修正／再発行ボタン６２９のクリックがなされていることに基づいて、ＣＰＵ１１は、カーソル選択に対応する課題を課題ＤＢ１７６から読み出して、ＲＡＭ１３に一時記憶させる（課題そのものを一時記憶してもよいし、課題の格納場所を示すインデックスを一時記憶してもよい）。このとき、複数行の色を変えてカーソル選択を行った場合には、カーソル選択に対応する複数の課題を課題ＤＢ１７６から読み出す。したがって、クライアント端末２Ａの入力部２４や表示部２５（或いはサーバ１の入力部１４や表示部１５）、ＣＰＵ１１や課題ＤＢ１７６等は、課題登録手段に登録されている複数の課題の中から、被験者に受けさせたい少なくとも一の課題を課題出題者に選択させる課題選択手段の一例として機能する。
【００７５】
なお、課題や発行履歴について、より詳しい情報を参照したいときのために、課題情報ボタン６２６と発行情報ボタン６２８が用意されている。課題情報ボタン６２６がクリックされると、選択されている課題の詳細が表示部２５に表示される。例えば、課題出題者が入力した課題内容に関するコメントが表示されるようにしてもよい。発行情報ボタン６２８がクリックされると、選択されている発行履歴の詳細が表示部２５に表示される。例えば、課題出題者が入力した発行履歴に関するコメントが表示されるようにしてもよい。
【００７６】
次に、図９に示す新規発行ボタン６２７又は修正／再発行ボタン６２９がクリックされると、表示部２５に発行設定ダイアログ画面が表示される。図１０は、発行設定ダイアログ画面の一例である。図１０に示す発行設定ダイアログ画面の一番上には、現在登録されている課題を課題名ごとに選択できるリストボックス７０１が表示される。これにより、過去の発行履歴と全く同じ設定にしつつ、被験者に出題する課題だけを変更してＵＲＬを発行するような場合に、ＵＲＬ有効期限などを何度も設定する手間を省くことができる。
【００７７】
リストボックス７０１の下には、発行するＵＲＬ（で示されたリンク先）の有効期限を設定するために、テキストボックス等から構成されるＵＲＬ有効期限入力欄７０２が表示される。ＵＲＬ有効期限入力欄７０２では、日時を指定する、発行からの期間を指定する、或いは、最終アクセスからの期間を指定する、という３種類の条件でＵＲＬ（で示されたリンク先）の有効期限を設定することができる。これにより、仮にＵＲＬが漏洩した場合であっても、有効期限経過後のスキル診断システムの無断利用を防ぐことができる。また、ＵＲＬ（で示されたリンク先）の有効期限を設定することができれば、図９を用いて前述したように、有効期限が過ぎているリンク先のＵＲＬを一目で把握することができるので、課題発行管理の利便性を高めることができる。
【００７８】
なお、ＵＲＬ有効期限設定における３種類の条件はＯＲ条件であるので、いずれか一つが成立した時点でＵＲＬ（で示されたリンク先）の有効期限は過ぎることになる（ＵＲＬは無効になる）。また、３条件とも設定しなければ、ＵＲＬの有効期限はなしになり、無期限となる。ＵＲＬの無効化については、ＵＲＬで示されるリンク先が視認できない状態になれば、如何なる態様で無効化してもよい。例えば、ＨＤＤ１７内の発行ＤＢ１７９に、「有効期限が過ぎました」といったメッセージを表示させるＨＴＭＬ文書を予め用意しておき、ＣＰＵ１１は、内蔵タイマや外付けタイマ等を用いて時刻計測を行い、有効期限が過ぎたと判定した場合には、ＵＲＬのリンク先を上述のＨＴＭＬ文書に基づくウェブページに切り替えればよい。
【００７９】
ＵＲＬ有効期限入力欄７０２の下には、課題解答時に被験者にパスワード入力を要求するかどうかを設定するパスワード入力欄７０３が表示されている。パスワード入力欄７０３は、チェックボックスにチェックを入れることによって入力可能状態となり、同一パスワードで何回までログインできるかも設定することができる。この場合、ＣＰＵ１１は、内蔵カウンタや外付けカウンタによって、パスワード入力回数をカウントすることができる。これにより、パスワードを伝えた被験者以外の者によって受験されること、すなわち被験者のなりすましを防ぎ、ひいてはスキル診断の信頼性を高めることができる。このように、ＵＲＬ有効期限入力欄７０２において、ＵＲＬで示されたリンク先の有効期限を設定したり、パスワード入力欄７０３において、パスワードを設定したり、パスワード入力回数の上限を設定したりすることによって、なりすまし受験を防ぎ、ひいてはスキル診断の信頼性を高めている。
【００８０】
パスワード入力欄７０３の下には、時間制限入力欄７０４が表示されており、課題に対する解答時間を制限する場合には、制限時間を入力する。これにより、被験者は制限時間を超えてプログラミング作業を行うことができないので、解答時間の観点から試験の公平性を保つことができる。なお、解答時間の制限も、上述したＣＰＵ１１の内蔵タイマや外付けタイマ等を用いることによって実現することができる。
【００８１】
時間制限入力欄７０４の下には、発行タイトル入力欄７０５とメッセージ入力エリア７０６、及び解答入力フィールド設定欄７０７が表示されている。これらは、被験者が操作するクライアント端末２Ｂの表示部２５に表示させる画面をカスタマイズする設定欄・設定エリアである。特に、解答入力フィールド設定欄７０７は、被験者が自分の氏名を入力する場合に、入力可能な文字数を制限することを可能にするとともに、被験者が自分の携帯メールアドレスを入力する場合に、入力可能な文字数を制限することを可能にする欄である。図１０では、解答者氏名の文字数は３０文字に制限され、携帯メールアドレスの文字数は５０文字に制限されている。いずれも最右欄「有効」にチェックを入れることで、文字数制限が可能であり、このチェックを外すことで、文字数制限を解除することができる。また、携帯メールアドレスの方は「再入力」の欄にチェックが入っており、入力間違いを防ぐために、被験者に２回入力させるようになっている（詳細は、図１１を用いて後述する）。このように、解答入力フィールド設定欄７０７は、被験者の解答入力を受け付けるリンク先において入力制限を課すための欄である。
【００８２】
図１０に示す発行設定ダイアログ画面の一番下には、テストボタン７０８、キャンセルボタン７０９、発行ボタン７１０が横に並べて配置されている。テストボタン７０８は、設定内容に従って図１１に示す発行画面を表示するボタンであり、課題出題者が、実際に被験者に表示される内容を確認するためのボタンである。このテストボタン７０８は、あくまで確認用の発行画面を表示するためのボタンであって、実際に課題は発行されない。すなわち、後述するように、実際に図１０に示す設定内容と課題が対応付けられて発行ＤＢ１７９に格納されるわけではない。また、キャンセルボタン７０９は、設定内容を破棄して、発行設定ダイアログを閉じるためのボタンである。
【００８３】
そして、発行ボタン７１０は、設定内容に従って、図１１に示す発行画面を表示部２５に表示させるためのボタンである（実際のブラウザ上には、後述する図１２に示すような画面が表示される）。課題出題者によって発行ボタン７１０がクリックされると、図１０に示す設定内容に従って、図１１に示す発行画面が自動的に生成され、その発行画面が表示部２５に表示される。この処理について具体的に説明すると、発行ボタン７１０の操作信号を受信したＣＰＵ１１は、課題ＤＢ１７６から被験者に受けさせたい課題（図１０でいえば課題「英単語カウント」）をＲＡＭ１３上にコピーして読み出す。また、その課題に対し、図１０に示す設定内容を対応付けて、ＨＤＤ１７内の発行ＤＢ１７９に格納する。このように、テストボタン７０８と異なり、発行ボタン７１０をクリックすることによって、実際に課題と設定内容が対応付けられて、ＨＤＤ１７内の発行ＤＢ１７９に格納される。なお、格納された課題と設定内容は、両者を対応付けるＩＮＤＥＸで管理されてもよいし、両者を統合した一つのファイルで管理されてもよい。発行ＤＢ１７９に格納されるファイルは、図１１に示す発行画面を、表示部２５に表示させるために、ＨＴＭＬ文書やＸＭＬ文書等で格納される。
【００８４】
なお、発行ＤＢ１７９に格納された課題の内容（課題名や発行者名など）は、上述した発行履歴一覧表６２０ｂに反映される。また、サーバ１にインストールされたウェブアプリ１７５は、ウェブブラウザとしても機能する。
【００８５】
図１１は、課題出題者が操作するクライアント端末２Ａの表示部２５に表示される発行画面の一例であるとともに、被験者が操作するクライアント端末２Ｂの表示部２５に表示させる画面の一例でもある。また、図１２は、図１１に示す発行画面が、課題出題者のクライアント端末２Ａにおける表示部２５のブラウザ上に表示されている一例を示す。上述のようにして自動的に生成された図１１の発行画面（被験者が課題を受けるリンク先）のＵＲＬ（http://www.abc000・・・）、すなわち図１２に示すＵＲＬ１０００は、課題出題者が被験者に受けさせたい課題（本実施形態では一の課題）、図１０に示すＵＲＬ有効期限入力欄７０２に入力された有効期限、図１０に示すパスワード入力欄７０３に入力されたパスワードなどと対応付けられる。また、図１０の発行タイトル入力欄７０５とメッセージ入力エリア７０６に入力した内容が表示されている。なお、ＣＰＵ１１やＲＡＭ１３、課題ＤＢ１７６や発行ＤＢ１７９は、課題出題者によって選択された課題に対する解答をクライアント端末２Ｂの操作により被験者が入力可能な、リンク先のＵＲＬを設定するＵＲＬ設定手段の一例として機能する。
【００８６】
次に、課題出題者が、図１２に示す発行画面のＵＲＬ１０００をコピー＆ペーストして、電子メールで被験者に送った後、電子メールを受信した被験者は、クライアント端末２Ｂを操作してそのＵＲＬにアクセスする（図４に示すステップＳ５）。図１３は、電子メールの新規作成ウィンドウにおいて、図１２に示す発行画面のＵＲＬ１０００がコピー＆ペーストされている様子を示す図である。具体的に説明すると、サーバ１のＣＰＵ１１は、被験者のクライアント端末２Ａの入力部２４からの操作信号に基づいて、ＨＤＤ１７内の電子メールアプリ１７１を実行するとともに、被験者ＤＢ１７７から送り先となる被験者の電子メールアドレスを読み出す。そして、入力部２４からの電子メール送信命令に基づいて（課題出題者が電子メール送信ボタンをクリックすると）、上述したＵＲＬが付された電子メールを被験者のクライアント端末２Ｂに送信する。
【００８７】
被験者のクライアント端末２ＢのＣＰＵ２１は、入力部２４からの操作信号に基づいて、電子メールアプリ２７１を実行し、その電子メールを受信する。そして、入力部２４からの操作信号に基づいて、ウェブブラウザアプリ２７２を実行し、課題出題者によって選択された課題に対する解答を入力可能なウェブページを取得するために、電子メールに付されたＵＲＬにアクセスする（被験者は、ハイパーリンクされたＵＲＬをクリックする）。このとき、図１４に示すように、ＵＲＬの連絡とともに被験者用のパスワードを連絡することもできる。ここでのパスワード「test2009」は、図１０に示すパスワード入力欄７０３に入力されたものと同一のパスワードを用いる。
【００８８】
サーバ１は、クライアント端末２Ｂのウェブブラウザアプリ２７２からの要求に応じて、発行ＤＢ１７９に格納されているＨＴＭＬ文書等をＲＡＭ１３上にコピーして読み出して、通信部１６を介して、それをクライアント端末２Ｂに自動的に送信する。これにより、課題出題者によって選択された課題に関する課題情報を被験者に伝えることができる。特に、課題情報としては、課題名だけであってもよいし（この場合、課題内容は、別途口頭で伝える必要がある）、課題名に加えて課題文等の課題内容の全てであってもよい。被験者からのアクセスの時に、課題文等の課題内容の全てを伝えるようにすることで、被験者への課題の出題を、全て通信ネットワーク１００上で行うことができる。例えば、課題内容が複雑な場合（例えば課題文が長文の場合等）であっても、口頭で伝えなくてよく、課題内容を誤解することなく正確に被験者に伝えることができる。
【００８９】
また、被験者に受けさせたい課題の種類や内容を変えたい場合に、課題出題者は、被験者に受けさせたい課題を編集・選択し直して（図８及び図９参照）、選択した課題に応じたＵＲＬを発行し（図９及び図１０参照）、そのＵＲＬを電子メール等で被験者に伝えるだけでよいので、課題変更を迅速かつ容易に行うことができる。
【００９０】
さらには、被験者のクライアント端末２Ｂが地理的に離れた場所にあっても、通信ネットワーク１００を介して課題変更を迅速かつ容易に行うことができるので、課題を出題する際の利便性を大きく向上させることができる。なお、ＣＰＵ１１や通信部１６、発行ＤＢ１７９などは、クライアント端末２ＢがＵＲＬにアクセスしてきたことを契機として、課題選択手段によって選択された課題に関する課題情報をクライアント端末２Ｂに送信する課題情報送信手段の一例として機能する。
【００９１】
次に、被験者は、クライアント端末２Ｂの表示部２５に表示された、図１２に示す発行画面を閲覧して、必要事項を入力した後、課題に対する解答入力を行う。すなわち、サーバ１側からみれば、課題に対する解答入力の受付を行う（ステップＳ６）。
【００９２】
図１２に示す発行画面には、上から順に、ＵＲＬ１０００、課題出題者が発行タイトル入力欄７０５（図１０）に入力した内容８０１、パスワード入力欄８０２、課題出題者がメッセージ入力エリア７０６（図１０）に入力した内容（符号省略）、解答者氏名入力欄８０３、携帯メールアドレス入力欄８０４、携帯メールアドレス再入力欄８０５、スタートボタン８０６が表示される。なお、「ファイル」「編集」「表示」「ツール」「お気に入り」や、「戻る」「進む」「中止」「更新」「ホーム」などの項目は、一般的なブラウザの項目と同様であるので、詳細な説明を省略する。
【００９３】
被験者は、パスワード入力欄８０２にパスワード「test2009」を入力し、解答者氏名入力欄８０３及び携帯メールアドレス入力欄８０４に氏名とメールアドレスを入力した後に、スタートボタン８０６をクリックする。そうすると、クライアント端末２Ｂの表示部２５にプログラミング画面（図１５）が表示される。具体的には、サーバ１のウェブアプリ１７５は、クライアント端末２Ｂのウェブブラウザアプリ２７２からの要求に応じて、発行ＤＢ１７９から、表示部２５にプログラミング画面を表示させるためのＨＴＭＬ文書等をＲＡＭ１３上にコピーして読み出して、それをクライアント端末２Ｂに送信する。これにより、被験者にプログラミング環境を提供する。なお、図１６は、課題表示／編集エリア９０１にまだ何も入力されていない様子を示している。
【００９４】
図１５は、被験者が解答入力を行うプログラミング画面の一例である。図１５に示すプログラミング画面のＵＲＬは、図１１に示す発行画面のＵＲＬと同様に、課題出題者が被験者に受けさせたい課題、有効期限、パスワードなどと対応付けられている。そのため、図１５に示すプログラミング画面中、課題表示／編集エリア９０１の「課題」タブをクリックすると、例えば図１７に示すように、課題出題者が被験者に受けさせたい課題の内容（課題文）が表示される。上述したように、課題内容が省略されている場合（課題内容は口頭で既に伝えている場合）には、「課題」タブをクリックしても空欄表示となる（「課題」タブ自体を除去してもよい）。
【００９５】
図１５において、課題表示／編集エリア９０１は、「課題」タブによって課題内容を表示するエリアであるとともに、「編集」タブによってソースコードの作成・編集を行わせるエリアである。プログラミングをしている最中に、課題表示とソースコード編集は随時切り替えることができる。これにより、課題内容が省略されていなければ、被験者は、課題を忘れた場合であっても課題内容を適宜確認することができる。
【００９６】
課題表示／編集エリア９０１の下に表示される出力エリア９０２は、被験者にとって標準出力（ＳＴＤＯＵＴ）エリアになる。ここにはビルド結果やプログラムの出力結果などが表示される。例えば、図１８に示すような警告表示がなされたり、図１９に示すようなエラー表示がなされたりする。出力エリア９０２の下には、ビルドボタン９０３、実行ボタン９０４、テストボタン９０５、及び完了ボタン９０６が左から順に並んでいる。
【００９７】
ビルドボタン９０３は、サーバ１において作成中プログラムのビルドを行う。具体的に説明すると、被験者が課題表示／編集エリア９０１に入力したソースコードは、順次サーバ１に送られる。例えば、JavaScriptを利用して非同期通信を行い、サーバ１とクライアント端末２Ｂの間でＸＭＬデータのやり取りを行うＡｊａｘ（Asynchronous JavaScript＋ＸＭＬ）を用いることができる。これにより、クライアント端末２Ｂは、被験者のプログラミング過程データ（ログデータ）をサーバ１に非同期で送り続けることができる。
【００９８】
なお、ログデータは、被験者がソースコードを１文字入力するごとに送られてもよいし、所定のブロック（例えば任意の関数）を完成させるごとに送られてもよい。本実施形態では、被験者がソースコードを１文字入力するごとに、ログデータ（それまで被験者が記述したソースコード）がサーバ１に送られるものとする。これにより、通信障害等で送信されたログデータが一部失われたとしても、サーバ１は、それ以降のログデータを受信することにより、ログデータを回復（欠落部分を補充）することができ、ひいてはビルド対象となるログデータの信頼性を高めることができる。また、Ａｊａｘ以外にも、サーバ１がログデータを受信できる技術であれば、如何なる技術を採用してもよい。例えば、サーバ１との同期通信を行うＤＨＴＭＬ（Dynamic Hyper Text Markup Language）を用いて、所定のタイミング（例えばリロードタイミング）でログデータをサーバ１に送ってもよい。その他、プラグインのインストールを前提に、より自由度の高いＦｌａｓｈ（登録商標）を用いてもよい。
【００９９】
サーバ１のＣＰＵ２１は、クライアント端末２Ｂから送られてきたログデータを、通信部１６を介して受信すると、解答した被験者と対応付けてＨＤＤ１７内の解答ＤＢ１８０に順次格納する。このとき、ＣＰＵ１１の内蔵タイマ又は外付けタイマ、或いは時計機能等によって、通信部１６においてログデータを受信したタイミングが解答ＤＢ１８０に格納される。このタイミングは、後述する［定量的なスキル評価法］に用いられる。
【０１００】
このように、解答ＤＢ１８０にログデータが順次格納されている状態において、被験者がビルドボタン９０３をクリックすると、クライアント端末２ＢのＣＰＵ２１は、通信部２６を介してビルド実行命令をサーバ１に送信する。サーバ１のＣＰＵ１１は、通信部１６を介してビルド実行命令を受信すると、解答ＤＢ１８０から現在格納されているログデータ（それまで被験者が作成したソースコードに相当）を読み出して、ビルドを行う。ビルドについては、上述同様、コンパイルとリンクを連動させて実行形式のファイルを自動生成する処理である。ビルドの過程で、論理エラーがあった場合等には、コンパイラのメッセージは出力エリア９０２に表示される。なお、本実施形態では、ビルドを行うタイミングで解答ＤＢ１８０からログデータを読み出すこととしたが、仮にログデータの欠落があった場合には、ビルド結果の信頼性が低下する。そこで、例えばサーバ１は、ビルド実行命令を受けたタイミングで、再度ログデータを取り直すこともできる。これにより、ログデータの欠落が状態でビルドできるので、ビルド結果の信頼性を高めることができる。
【０１０１】
実行ボタン９０４は、作成中のプログラムを実行するためのボタンであり、これをクリックすることによって、ビルドにより自動生成された実行形式のファイルが開かれる。プログラムからの標準出力は、出力エリア９０２に表示される。作成中のソースコードに変更があった状態で実行ボタン９０３がクリックされると、変更後のソースコードについて未だビルドが行われていないので、「ビルドを行いますか？」といった表示とともに、ビルドを許容するＯＫボタンが、例えばポップアップウィンドウにより自動的になされる。そして、被験者は、ビルドボタン９０３を直接クリックすることによって、或いは、実行ボタン９０４をクリックした後に、ポップアップウィンドウのＯＫボタンをクリックする等してビルドを許容することで、自分が記述したソースコードに、文法エラーがないか否か、論理エラーがないか否か等を確認することができる。なお、「ビルドを行いますか？」といった表示をせず、実行ボタン９０４がクリックされたときにビルドされていないときに、自動的にビルドされ、その後、自動的に実行形式のファイルが開かれるようにしてもよい。
【０１０２】
しかし、文法エラー等がない場合であっても、課題出題者が意図した出力結果が得られない可能性はある。そこで、被験者は、テストボタン９０５を利用する。テストボタン９０５については、図８に示すテストボタン６１８７と同様の機能がある。すなわち、テストボタン９０５がクリックされると、被験者によって課題表示／編集エリア９０１に記述されたソースコードに、図８に示すテストコード登録エリア６１８５を通じて課題出題者が登録したテストコードがマージされ、ビルドが行われる。その後、自動生成された実行形式のファイルが開かれ、出力結果が出力エリア９０２に表示される。このようにして、被験者は、課題出題者が意図した出力結果が得られるか否かを、課題提出前に確認することができる。
【０１０３】
最後に、被験者が完了ボタン９０６をクリックすると、課題の受験は終了する。ただし、テストボタン９０５による自動テストに合格していない場合は、「全てのテストケースを通過していません。終了しますか？」というメッセージが表示される。すなわち、入力部２４からの操作信号を受信したＣＰＵ２１は、その旨をサーバ１に知らせる受験完了信号を送信する一方で、サーバ１のＣＰＵ１１は、その受験完了信号を受信すると、解答ＤＢ１８０にアクセスして、テストボタン９０５による自動テストの合否履歴を確認する。なお、ここでいう全てのテストケースとは、図８に示すテストコード登録エリア６１８５を通じて課題出題者が登録したテストコード（例えば、ある変数に第１の値を代入すると、出力結果として第２の値が出力される等）の全てのケースを意味する。そして、自動テストで一度も合格していないと判定した場合には、上述したメッセージを表示させるＨＴＭＬ文書を、クライアント端末２Ｂに送信する。これにより、課題出題者が作った自動テストで合格した後に課題提出することを、被験者に促すことができる。
【０１０４】
このように、サーバ１の通信部１６やＣＰＵ１１、ＨＤＤ１７の解答ＤＢ１８０は、課題選択手段によって選択された課題に対する被験者の解答入力を受け付ける解答入力受付手段の一例として機能する。
【０１０５】
完了ボタン９０６のクリックによって、被験者による課題の受験が終了すると、上述した図６に示すトップメニュー画面の解答新着件数表示欄６４が１だけインクリメントされる。すなわち、サーバ１のＣＰＵ１１は、クライアント端末２Ｂからの受験完了信号を受信すると、解答新着件数表示欄６４に表示された数字に１を加算する。そうすると、課題出題者は、図６に示すトップメニュー画面の解答確認ボタン６３をクリックすることにより、解答確認画面上で被験者の解答を確認することができる（図４に示すステップＳ７）。図２０は、課題出題者が被験者の解答を確認するための解答確認画面の一例である。
【０１０６】
図２０に示す解答確認画面には、トップメニュー画面に表示されていた解答新着件数表示欄６４と同じく、解答新着件数表示欄６３１が表示されている。また、解答新着件数表示欄６３１の下には、被験者が解答した課題の一覧（結果一覧）が表示される。この結果一覧において、基準６３２、課題名６３３、解答日６３４は、システムによって必ず表示される項目であり、黒色で表示される。基準６３２の欄については、後述する［定量的なスキル評価法］に用いられる。また、解答者氏名６３５、メールアドレス６３６は、図１１の発行画面において被験者が入力した内容が表示される項目であり、緑色で表示される。このように色分け表示することによって、どこが被験者によって任意入力された箇所かを一目で見分けることができる。また、図２０では特に現れていないが、この結果一覧も１０列存在し、横スクロールすれば空列が現れるようになっている。これにより、課題出題者は備忘用のコメントを自由に入力することができる。
【０１０７】
結果一覧の下方には、チャート表示ボタン６３７、ダウンロードボタン６３８、課題情報ボタン６３９、発行情報ボタン６４０が表示されている。結果一覧では、これら４個のボタンのいずれによっても開かれていない新着解答データについては、太字で示されるようになっている。これにより、課題出題者は、まだ開いていない新着データを容易に把握することができる。
【０１０８】
チャート表示ボタン６３７は、後述する［定量的なスキルの評価法］の評価結果をチャート（図２１に示す生産性・品質チャート）で表示するためのボタンである。ダウンロードボタン６３８は、解答ＤＢ１８０から被験者の解答を読み出してダウンロードするためのボタンである。
【０１０９】
具体的には、課題出題者のクライアント端末２Ａの表示部２５上で、ダウンロードボタン６３８がクリックされると、サーバ１のＣＰＵ１１は、解答ＤＢ１８０に格納された被験者の解答（完成ソースプログラム）を読み出して、クライアント端末２Ａに対して送信する。その結果、課題出題者のクライアント端末２Ａは、被験者の解答をダウンロードできる。ダウンロードの対象となるのは、図２０に示す解答確認画面において、カーソル選択されている者の解答（解答データ）である。また、課題情報ボタン６３９は、どのような課題であったかを表示するためのボタンであり、発行情報ボタン６４０は、どのような発行条件であったかを表示するためのボタンである。表示の対象となるのは、カーソル等によって現在選択されているカレントデータである（図２０では、Ｎｏ．３の解答者Ｑが作成した解答データ）。
【０１１０】
このように、クライアント端末２Ａの表示部２５に被験者の解答を表示させる、サーバ１のＣＰＵ１１や解答ＤＢ１８０などは、クライアント端末２Ｂの操作により入力された被験者の解答を表示させる解答表示手段の一例として機能する。
【０１１１】
最後に、被験者のスキル評価を行うことで（図４に示すステップＳ８）、被験者のスキルを診断することができる。ここでいうスキル評価は、様々な方法が考えられる。例えば、課題出題者は、ダウンロードボタン６３８をクリックして、被験者の解答（完成ソースプログラム）を閲覧することで、コーディングの巧拙を評価してもよい。また、本実施形態では、上述したように、被験者がソースコードを１文字入力するごとにログデータがサーバ１に送られており（例えば１００文字からなるソースコードであれば、１００回ログデータが送られている）、かつ、サーバ１がログデータを受信したタイミングも併せて解答ＤＢ１８０に格納されている。したがって、サーバ１のＣＰＵ１１がこれら（ログデータとタイミング）を読み出して、表示部２５等に表示することによって、課題出題者は、被験者が、どのくらいの時間で、どのくらい量のソースコードを記述できたか（記述量）を視認することができる。
【０１１２】
［定量的なスキル評価法］
ただし、上述したスキル評価は、あくまで定性的なスキル評価であって、被験者のスキルを定量的に評価しているとはいえない。例えば、読みやすさを追求してコメントが多く書かれたソースコードが、必ずしも品質の悪いソースコードとは限らない。かといって、一課題に対し、あまりに多くの時間が掛かったのでは生産性の観点から好ましいとはいえない。
【０１１３】
そこで、本実施形態では、被験者のスキルをなるべく定量的に評価するために、生産性・品質評価アプリ１７４（図２参照）を用いる。すなわち、ＣＰＵ１１は、生産性・品質評価アプリ１７４を実行するとともに、解答ＤＢ１８０から上述したログデータやタイミングを読み出して、定量的なスキル評価を行う。以下、詳細に説明する。
【０１１４】
サーバ１の解答ＤＢ１８０には、ソースコードの時系列の推移情報となる基本情報と、被験者が文法エラーチェックを行った時刻、発生した文法エラーの種類、発生した文法エラーの数、被験者が論理エラーチェックを行った時刻、発生した論理エラーの種類、発生した論理エラーの数等の補正情報とが記憶される。なお、図１５を用いて上述したように、ビルドボタン９０３やテストボタン９０５をクリックした時刻、その結果、出力された文法エラーの種類や数などが記憶される。
【０１１５】
図２２は、解答ＤＢ１８０に記憶されるデータ構成の例示図である。図２２（ａ）は、入力情報テーブルのデータ構成の例示図である。基本情報であるソースコードの時系列の推移情報は、被験者のプログラミング作業における特定のタイミングにてソースコードが復元可能なフォーマットで記憶される。復元可能であればフォーマットは特に問わない。例えば図２２（ａ）では、入力されたテキストデータ等を一文字ずつ入力時刻及び削除時刻とともに記憶している。入力情報テーブルを先頭から解析することにより、任意のタイミングでのソースコードを復元することができる。入力情報には、テキストデータだけではなく、改行、タブ、スペース、各種制御コード等を含めてもよい。また別の記憶方法として、一文字ずつの入力時刻と、各入力時刻における全ソースコードとを対応付けて記憶してもよい。この場合、データ容量は比較的大きくなるものの、任意のタイミングにおけるソースコードの復元アルゴリズムは単純となる。
【０１１６】
いずれの方法であっても、文字が入力されたタイミング毎に推移情報を記憶しているので、被験者のプログラミング作業における任意のタイミングでのソースコードを復元することができる。実際には必ずしも全てのタイミングでソースコードを復元する必要はないが、後述する複雑度の時系列推移データからの近似曲線の算出において、所定の精度を維持することが可能な程度のサンプリング数は必要となる。例えば、予め定めたキー入力の数の単位、リターンキーを操作したタイミング又は予め定めた特定の文字が入力されたタイミング等、予め定めた条件に合致した所定のタイミングにて中間作成物としてのソースコードを取得するようにしてもよい。
【０１１７】
図２２（ｂ）は、文法エラーテーブルのデータ構成の例示図であり、図２２（ｃ）は、論理エラーテーブルのデータ構成の例示図である。補正情報である文法エラーチェックに関する情報、論理エラーチェックに関わる情報は、例えば図２２（ｂ）、（ｃ）に示すように、それぞれ文法エラーテーブル、論理エラーテーブルに記憶される。文法エラーの種類又は論理エラーの種類に対応付けて文法チェック実行時刻又は論理チェック実行時刻も記憶している。別途カウンタを用いて、文法エラー、論理エラーそれぞれの発生個数の累計値をカウントすることもできる。これらの各種テーブルは、解答ＤＢ１８０に格納することができる。なお、上述したように、文法エラーチェックの実行時刻は、ビルドボタン９０３又は実行ボタン９０４（図１８）がクリックされたタイミングを認識することで記憶可能であるし、また、論理エラーチェックの実行時刻は、テストボタン９０５（図１８）がクリックされたタイミングを認識することで記憶可能である。
【０１１８】
サーバ１のＣＰＵ１１は、ソースコードの時系列の推移情報に基づいて、複雑度の推移を時系列に演算した複雑度推移データを算出する。ここで「複雑度」とは、単に分岐が多い、階層が多い等の構造的複雑さを示す概念のみならず、ソースコード全体として無駄な論理構造、無駄なサブルーチン等を含むか否か等の評価も含む構造化されたソースコードであるか否かを評価する指標値を意味する概念である。一般にプログラム作成開始当初は、複雑度は０（ゼロ）であり、コーディングが進むごとに上昇する。そして、プログラムの完成時期には特定の値に収束する。
【０１１９】
「複雑度」の概念について、以下詳述する。本実施形態では、作成されたプログラムを完全にテストするのに必要なテストケース数（テストパターン数）、及び作成されたプログラムを変更、保守等するのに要する工数と相関のある定量値を、そのプログラムの複雑度と呼んでいる。テストケース数とプログラム変更、保守等に要する工数との間にも相互に相関があるので、概念としてどちらかに代表させてもよい。説明を簡単にするため、テストケース数のみを用いる場合について説明する。
【０１２０】
図２３は、提示されるプログラミング課題の具体例を示す例示図であり、図２４は、提示されたプログラミング課題に応じて被験者が作成したＣ言語によるプログラムの例示図である。複雑度の算出には、プログラム中に現れる様々な定量値を用いることができる。最も一般的な複雑度は、プログラム中の分岐の数である。単純な数え方としては、図２４に示すプログラムには、ｉｆ文が６個（１３、２０、２１、３４、３６、３８行目）、ｗｈｉｌｅ文が１個（３３行目）存在するので、合計７個の分岐が存在する。一般に分岐の数は、他の条件が全て同じであれば、多ければ多いほど完全なテストをするためのテストケースが多くなることから、分岐数７は複雑度を示す定量値として用いることができる。
【０１２１】
同じく分岐に着目する場合でも、２０行目のｉｆ文のように、１つのｉｆ文の中に２つの判定条件を含む場合には、このｉｆ文は分岐を２つ含むという数え方もある。また９行目のreturn文に含まれる判定条件も暗黙の分岐と考え、４つの分岐と数える場合もある。斯かる考え方で分岐数を数えた場合、図２４に示すプログラム中に存在する分岐は、９行目に４個、１３行目に１個、２０行目に２個、２１行目に１個、２２行目に１個、２６行目に１個、３３行目に１個、３４行目に１個、３６行目に２個、３８行目に２個、それぞれ存在し、総分岐数は１６個となる。
【０１２２】
また、テストケース数と相関のある定量値として、各言語仕様で定義されている様々な型の変数の数を用いてもよい。例えば図２４に示すプログラムには、５個のローカル変数が宣言されている（１８、１９、３０、３１、３２行目）ので、ローカル変数の数に着目すれば図２４のプログラムの複雑度は５であると考えられる。これも、グローバル変数を加えてもよいし、引数も一種の変数とみなして加えてもよい。
【０１２３】
また、複雑度としてインタフェース数を用いてもよい。例えば図２４に示すプログラムには、引数を１つ持つ関数が４個（７、１１、２４、２８行目）、引数を２つ持つ関数が１個（１６行目）含まれている。引数の数がインタフェース数であると考えた場合、このプログラムのインタフェース数として定量値６を得ることができる。インタフェース数は、どのような単位で外部とのインタフェースを考えるかにも依存する。例えばクラスにおけるパブリック関数の数、ファイル単位での外部公開関数の数等をインタフェース数としてもよい。
【０１２４】
同じ理由で、ネストレベルが採用される場合もある。例えば図２４に示すプログラムには、３３行目のｗｈｉｌｅ文の中に３４行目のｉｆ文があり、さらにその中に３６行目のｉｆ文がある。つまり分岐が３段階の入れ子になっており、プログラム全体での最大ネストレベルとして定量値３が得られる。さらに、単に最大ネストレベルを用いるのではなく、例えば分岐の中にある分岐は悪影響が強い等の考え方で、各定量値にネストレベルに応じた重み付け係数を乗じた値として複雑度を算出してもよい。
【０１２５】
他にも、例えば状態の数等の様々な定量値が採用されているが、一般にテストケース数、保守又は変更に要する工数と相関のある定量値であれば、複雑度として用いることができる。また、複雑度の計算精度を上げる目的で、複数の定量値を組み合わせてもよい。例えば、分岐数をＢ、変数の数をＶ、インタフェース数をＩ、ネストレベルをＮとして、ｆ（Ｂ、Ｖ、Ｉ、Ｎ）のように所定の重み付けを付して計算してもよい。計算方法は、プログラム全体で一括して計算してもよいし、関数等の単位ごとに個別に計算したものを全体として再計算してもよい。どの定量値を用い、どのように計算するかは、要求される計算精度や複雑度の算出目的に応じて決定すれば足りる。
【０１２６】
また、複雑度を示す定量値は、使用するプログラミング言語の仕様を考慮して決定される場合もある。例えば図２４に示すプログラムはＣ言語で記述されているが、Ｃ＋＋、ＪＡＶＡ（登録商標）等のようにクラスの概念を有する言語である場合、クラス構造の複雑度を評価する定量値を考慮してもよい。また、直接ソースコードから複雑度を算出することに限定されるものではなく、中間コード、フローチャート等の設計図から計算してもよい。
【０１２７】
逆に、テストケース数、保守又は変更に要する工数との相関の無いパラメータは、複雑度を示す定量値として用いることはできない。例えば、ソースコードの単純な文字数、行数等は、事後メンテナンスを容易にするために丁寧にコメントを付したソースコードであるほど複雑度が高く評価されると考えられ、少なくとも単独では複雑度を示す指標として用いることは不適当である。また図２４のプログラムでは、比較的長い変数名（３０、３１、３２行目）を使用しているが、このような長さ（トークンの長さ）はテストケース数とは全く関係なく、保守又は変更に要する工数の点でも一概に長い（短い）方が良いとは言えないので、少なくとも単独では複雑度として用いることはできない。ファンクションポイントの数、画面数等も、単独で複雑度として用いるには不適当である。一般に、単にソフトウェア規模を表すような定量値は、単独で複雑度として用いるには不適当である（ただし、複雑度を算出する場合に、本来の複雑度を表す定量値と共に計算される場合は除く）。
【０１２８】
さらに、特定のコーディング規約に沿っているか否かを示す定量値等は、そもそも複雑度と無関係である場合が多く、少なくとも単独では複雑度として用いることはない。ただし、コーディング規約自体に複雑度を下げる効果が認められる場合に限り、用いる場合も生じうる。
【０１２９】
また、サーバ１のＣＰＵ１１は、複雑度の時系列の推移データに基づいて、被験者の能力評価値を算出する。能力評価値は、複雑度数値が低い状態で推移した被験者であればあるほど、また短時間に完了した被験者であればあるほど、能力が高いと評価する値とする。すなわち、より短時間によりシンプルな解を見つけた被験者ほど能力が高いと評価する値に設定する。
【０１３０】
能力評価値は、品質能力に関する評価値と生産性能力に関する評価値とを独立して算出
することができる。例えば、複雑度は元来品質を示す指標であり、被験者Ａと被験者Ｂとが同程度の所要時間であり、Ａの複雑度がＢの複雑度よりも低く推移した場合、Ａの品質能力はＢの品質能力よりも高いと評価することができる。またＡの複雑度とＢの複雑度とは同程度で推移しているが、Ａの方がＢよりも短期間に完了した場合は、Ａの方がＢよりも生産性が高いと評価することができる。
【０１３１】
さらに補正情報として記憶されている、被験者が文法エラーを発生させた時刻、エラー
の種類、文法エラーの数の累計値、論理エラーを発生させた時刻、エラーの種類、論理エ
ラーの数の累計値等々を使用して、評価者は、得られた評価値に被験者が実際に発生させ
たエラーという観点からの補正を加えることもできる。
【０１３２】
以下、被験者にプログラミング課題を提示（出題）し、被験者のプログラミング作業から能力評価のためのデータを収集するまでの処理手順を説明する。図２５は、本発明の第１実施形態に係るスキル診断システムにおいて、サーバ１のＣＰＵ１１のデータ収集処理の手順を示すフローチャートである。
【０１３３】
図２５において、サーバ１のＣＰＵ１１は、クライアント端末２Ｂの表示部２５に、図１１を用いて前述したように、プログラミング課題の課題名を表示させる（ステップＳ１１）。そして、クライアント端末２Ｂから、プログラミング開始を示唆するスタートボタン８０６（図１１参照）の操作信号を受信すると、タイマによる計時を開始し（ステップＳ１２）、文字入力を受け付けたか否かを判断する（ステップＳ１３）。なお、文字入力とは、テキストデータの入力に限定されるものではなく、削除、改行、タブ、カーソル移動、コピー＆ペースト、検索操作等の編集操作に関連する制御コードの入力も含む。
【０１３４】
ＣＰＵ１１が、文字入力を受け付けていないと判断した場合（ステップＳ１３：ＮＯ）、ＣＰＵ１１は、文字入力の待ち状態となる。ＣＰＵ１１が、文字入力を受け付けたと判断した場合（ステップＳ１３：ＹＥＳ）、ＣＰＵ１１は、被験者のプログラミング作業の任意のタイミングでのソースコードを復元することができるフォーマットで解答ＤＢ１８０に記憶する（ステップＳ１４）。なお、全ての基本情報を記憶してもよいし、評価値の算出精度を維持することができる範囲で間引いて記憶してもよい。
【０１３５】
ＣＰＵ１１は、被験者から文法エラーチェックの開始指示を受け付けたか否か（すなわち、図１５に示すプログラミング画面において、ビルドボタン９０３がクリックされたか否か）を判断し（ステップＳ１５）、ＣＰＵ１１が、開始指示を受け付けていないと判断した場合（ステップＳ１５：ＮＯ）、ＣＰＵ１１は、開始指示の待ち状態となる。ＣＰＵ１１が、開始指示を受け付けたと判断した場合（ステップＳ１５：ＹＥＳ）、ＣＰＵ１１は、被験者が開始指示の受け付け時点で作成していたソースコードに対して文法エラーチェックを実行し、文法エラーチェックの開始指示を受け付けた時刻を解答ＤＢ１８０に記憶して（ステップＳ１６）、文法エラーが存在するか否かを判断する（ステップＳ１７）。なお、文法エラーが存在するか否かは、コンパイラ言語である場合には、市販のコンパイラがコンパイル結果として出力する文字列に基づいて判断すればよい。また同時に実行可能モジュールを生成してもよい。さらに、解答ＤＢ１８０に文法エラーチェックの開始指示を受け付けた時刻を記憶することに限定されるものではなく、例えば文法エラーチェックの完了時刻であってもよい。
【０１３６】
ＣＰＵ１１が、文法エラーが存在すると判断した場合（ステップＳ１７：ＹＥＳ）、ＣＰＵ１１は、存在する文法エラーの種類及び数を、解答ＤＢ１８０に追加して記憶し（ステップＳ１８）、処理をステップＳ１３へ戻して、上述した処理を繰り返す。なお、フローには示していないが、文法エラーが存在しない場合であっても、文法エラーが存在しない旨を示す情報は、文法エラーチェックの完了時刻に対応付けて解答ＤＢ１８０に記憶される。
【０１３７】
ＣＰＵ１１が、文法エラーが存在しないと判断した場合（ステップＳ１７：ＮＯ）、ＣＰＵ１１は、ステップＳ１８をスキップして、被験者から論理エラーチェックの開始指示を受け付けたか否か（すなわち、図１５に示すプログラミング画面において、テストボタン９０５がクリックされたか否か）を判断する（ステップＳ１９）。ＣＰＵ１１が、開始指示を受け付けていないと判断した場合（ステップＳ１９：ＮＯ）、ＣＰＵ１１は、開始指示の待ち状態となる。ＣＰＵ１１が、開始指示を受け付けたと判断した場合（ステップＳ１９：ＹＥＳ）、ＣＰＵ１１は、被験者が開始指示の受け付け時点で作成していたプログラムに対して、テストケースに従った単体テストを実行し、論理エラーチェックの開始指示を受け付けた時刻を解答ＤＢ１８０に記憶して（ステップＳ２０）、論理エラーが存在するか否かを判断する（ステップＳ２１）。なお、論理エラーが存在するか否かは、テストケースの入力に対して、想定されている正しい出力を得ることができたか否かに基づいて判断すればよい。
【０１３８】
ＣＰＵ１１が、論理エラーが存在しないと判断した場合（ステップＳ２１：ＮＯ）、ＣＰＵ１１は、プログラムが完成したと判断して処理を終了する。ＣＰＵ１１が、論理エラーが存在すると判断した場合（ステップＳ２１：ＹＥＳ）、ＣＰＵ１１は、存在する論理エラーの種類及び数を、解答ＤＢ１８０に追加して記憶し（ステップＳ２２）、処理をステップＳ２３へ戻して、上述した処理を繰り返す。なお、フローには示していないが、論理エラーが存在しない場合であっても、論理エラーが存在しない旨を示す情報は、論理エラーチェックの完了時刻に対応付けて解答ＤＢ１８０に記憶される。また、被験者が、ソースコード整形等を行う意思を有する場合に備えて、処理を終了するか、さらにプログラミング作業を継続するかの判断を被験者に任せてもよい。
【０１３９】
以上のように図２５に示すフローチャートには、文法エラー及び論理エラーが除去される除去過程が含まれている。該除去過程は外部仕様の同一性を保証する上で重要である。プログラミング課題が同一であっても、それだけでは作成されたプログラムの外部仕様が同一であることは保証されない。例えば被験者Ａのプログラムにはバグが残存し、被験者Ｂのプログラムにはバグが存在しない場合、これは外部仕様に相違があるのと等価であり、その相違は複雑度に影響する。この状態で被験者Ａと被験者Ｂとの複雑度推移を比較しても、その差異が外部仕様の差異によるのか被験者の能力の差異によるのか判別できない。図２５に示すフローチャートでは、文法エラー及び論理エラーが除去される除去過程が含まれているので、このような懸念はない。
【０１４０】
以上、定量的なスキル評価のためのデータ収集プロセスを説明した。なお、図２５では説明の便宜上、ビルドによって文法エラーを検出し、単体テストによって論理エラーを検出することとしたが、ビルドによって両者を検出してもよいし、単体テストによって両者を検出してもよい。また、ＣＰＵ１１やＲＡＭ１３、生産性・品質評価アプリ１７４や課題ＤＢ１８０などは、被験者が解答入力する過程で作成された中間作成物をクライアント端末２Ｂから取得する中間作成物取得手段の一例として、また、中間作成物を取得した時点のタイミングを記憶するタイミング記憶手段の一例として機能する。以下、サーバ１が収集したデータに基づいて能力評価値を算出する処理手順を説明する。図２６は、本発明の第１実施形態に係るスキル診断システムにおいて、ＣＰＵ１１の能力評価値算出の処理手順のフローチャートを示す。
【０１４１】
まずＣＰＵ１１は、解答ＤＢ１８０に記憶されているソースコードの時系列の推移情報を用いて、プログラミング作業の過程におけるソースコードを順次復元しながら複雑度を時系列に算出し、複雑度の時系列推移データを作成する（ステップＳ３１）。
【０１４２】
複雑度は、ソースコードを入力として算出される。簡便な算出方法として、例えばＭｃＣａｂｅの複雑度における判定条件（複合条件も含む）の数に１を加えた値である基本パス数を算出の基礎として用いてもよい。基本パス数が増大するほど、複雑度も増大していると考えることができる。
【０１４３】
より評価精度を上げる必要がある場合、上述した複雑度の算出の基礎に、変数の種類及び数、関数等の手続きの数、モジュール間インタフェースの数、ソースコードの規模（例えば語数）等のソースコードの複雑さに関連するパラメータを加え、所定の重み付けを行って演算してもよい。また算出の基礎としてＭｃＣａｂｅ以外の指標を用いることも可能である。
【０１４４】
複雑度の算出に用いる指標、パラメータは、要求される評価精度に応じて決定すればよい。例えば初心者に近いプログラマと、企業において定常的に高難易度モジュールを担当している優秀なプログラマとの差異を検出するのであれば、複雑度の差が非常に大きいと考えられることから、単にＭｃＣａｂｅ指標を適用するだけで能力の差異を検出することができる。一方、被験者Ａと被験者Ｂとの能力の差異が非常に小さい場合（例えば２倍程度の場合）は、より多面的な指標、パラメータ等を用いて複雑度の算出精度を上げればよい。
【０１４５】
図２７は、サーバ１によって算出された複雑度の推移データの例示図である。図２７に示すように、タイマによる計時を開始してからのサンプリング経過時間ごとの複雑度９１が算出されている。図２７では、複雑度９１の算出に、上記ＭｃＣａｂｅ指標に加えてプログラムの語数も併用している。なお、ＣＰＵ１１やＲＡＭ１３、生産性・品質評価アプリ１７４や課題ＤＢ１８０などは、中間作成物の複雑さを定量的に示す複雑度を算出する複雑度算出手段の一例として機能する。
【０１４６】
図２６に戻って、ＣＰＵ１１は、被験者の姿勢による影響を除去するため、得られた複雑度推移データから能力評価に使用する有効区間を抽出する。「被験者の姿勢による影響」とは、例えば、被験者Ａは充分に単体テスト、ソース整形等を行い、プログラミング作業を完了したのに対し、被験者Ｂはコーディング中に偶然論理エラーチェックが存在しないと判断され、そのままプログラミング作業を完了した、といった場合に発生する。この例では、たとえ被験者Ａと被験者Ｂとの所要時間、最終複雑度が同じであったとしても、当然ながら評価値としては被験者Ａの方が高く算出されなければならない。このような場合の評価値を正確に算出するために複雑度推移データから有効区間を抽出する。
【０１４７】
有効区間を抽出するために、ＣＰＵ１１は、得られた複雑度の推移データに対して近似曲線を作成する（ステップＳ３２）。近似曲線の作成方法としては、例えば二次曲線による最小二乗近似を組み合わせてもよいし、あらかじめ複数の曲線パターンを解答ＤＢ１８０に記憶しておき、パターンマッチングにより最も近似する曲線パターンで近似してもよい。
【０１４８】
なお、近似曲線は、原理的には数点のサンプリング点からでも作成することができるが、精度を確保する上では数十点以上のサンプリング点が存在することが望ましい。サンプリング点を決定する方法としては、所定時間毎にサンプリング点を設ける方法、所定個数の文字入力があったタイミングをサンプリング点とする方法等、特に限定されるものではない。また、サンプリング点における代表値の決定方法としては、上述した各所定時間又は各所定個数内の複雑度の平均値を求める方法等を用いることができる。
【０１４９】
図２８は、サーバ１によって算出された近似曲線の例示図である。図２８では、所要時間を１００分割し、それぞれの区間の複雑度９１の平均値を代表値として近似曲線１０１を作成している。また近似方法としては、被験者が作成したソースコードの最終複雑度と所要時間から曲線の縦横比を決定した後に、あらかじめ解答ＤＢ１８０に記憶されている約２０００通りの曲線とのパターンマッチングを行っている。解答ＤＢ１８０に記憶されている曲線パターン群は、処理を簡便にするために、複雑度が一定時間０で推移した後に単調増加に転じ、ある複雑度で収束するパターンに統一している。
【０１５０】
図２６に戻って、近似曲線１０１が得られた時点で、ＣＰＵ１１は有効区間を抽出する（ステップＳ３３）。図２９は、サーバ１によって抽出された有効区間の例示図である。有効区間１１２は、処理を簡便にするために、複雑度が０から単調増加に転じた点を起点とし、単調増加が終了した点を終点としている。有効区間１１２は、初期設計区間１１１やテスト区間１１３を含まない純粋なプログラミング作業部分とみなすことができる。ここで、初期設計区間１１１やテスト区間１１３を全て除外するのも精度上問題があるとの考え方もあるので、初期設計区間１１１やテスト区間１１３を所定の重み付けで考慮して有効区間１１２を抽出してもよい。
【０１５１】
図３０は、有効区間１１２を補正する必要がある場合の、サーバ１によって作成された近似曲線１０１の例示図である。抽出される有効区間１１２としては、図２９では全体の一部分として抽出されている。しかし、図３０に示すように有効区間１１２は拡大された有効区間１１２’として抽出するべき場合もある。
【０１５２】
図３０に示すようなケースとしては、被験者がプログラミング中に試しに論理エラーチェックをした場合に、偶然にも論理エラーが検出されなかったケース、被験者がテストを軽視する姿勢であるケース等が想定される。斯かる場合、被験者は本来もっと所要時間がかかったものと解釈することができ、有効区間１１２を拡大して能力評価することが妥当である。
【０１５３】
図２６に戻って、最後にＣＰＵ１１は、抽出された有効区間１１２に対して所定の演算を行い、能力評価値を算出する（ステップＳ３４）。能力評価値の簡便な算出方法としては、例えば有効区間１１２の近似曲線１０１に対して積分値を求める方法がある。すなわち、時間軸と近似曲線１０１で囲まれた面積を求める方法である。斯かる面積は、被験者がプログラミング作業中に取り組んだ複雑度の総量であると考えられる。面積がより小さい被験者は、プログラミング課題を、より短時間に、よりシンプルに解決したことになるので、面積が小さいほど能力が高いと評価することができる。したがって、積分値（面積）がそのまま評価値となる。
【０１５４】
上記積分値（面積）は、絶対値を算出するのではなく、別途基準となる評価値を設けておき、基準となる評価値との比率で算出しても良い。例えば既知の被験者Ａに特定のプログラミング課題を解いてもらい、被験者Ａのデータを課題情報記憶部１３２に記憶しておく。そして、以後の未知の被験者に同じプログラミング課題を解いてもらう場合、記憶してある「被験者Ａのデータ」との比率で能力評価値を算出できる。このように既知の人物の能力との比率で算出する方法は、開発現場にとって評価値の意味合いを直感的に理解しやすいというメリットがある。
【０１５５】
また積分値（面積）の算出に当たって、近似曲線１０１を使用するのではなく、複雑度の生データを使用してもよい。例えば複雑度の推移データの区間平均値を加算する方法であってもよい。この場合、意味的には積分であっても、演算としては単なる加算となり、演算処理負荷を軽減することができる。さらに近似曲線１０１を用いた場合でも、曲線が充分に単純である場合は、有効区間１１２の時間幅と特定位置の複雑度データと所定の係数とを用いて、単なる乗算で評価値を算出してもよい。
【０１５６】
また別の側面からの能力評価として、上記有効区間１１２において、あるサンプリング点の複雑度が直前のサンプリング点の複雑度よりも小さくなった回数を計数して評価値としてもよい。複雑度は、プログラミング作業が順調に進んでいるうちは単調に増加するが、被験者が設計の誤りに気付いた場合、文法エラーや論理エラー等による修正作業が発生した場合等には、一時的に複雑度が下がる場合がある。計数した回数が多い人ほど初期の設計の見通しが甘く、試行錯誤の度合が高いと判断することができる。
【０１５７】
有効区間１１２の抽出された位置、大きさ等から被験者の傾向を示す評価値も得ることができる。例えば抽出された有効区間１１２が複雑度の全推移データの中で極端に前半に位置していた場合は、プログラミング課題をよく読まずに取り掛かる傾向が強いと判断することができる。仕様をよく理解せずにプログラミングを開始するのは、品質に悪影響を与えやすい開発姿勢である。
【０１５８】
逆に、抽出された有効区間１１２が複雑度の全推移データの中で極端に後半に位置していた場合は、よく動作チェックを行わずに完了したと判断することができる。そのような姿勢は、当然ながら品質に悪影響を与える。また、全体の所要時間が非常に長いにもかかわらず、抽出された有効区間１１２が極端に狭い場合は、仕様理解や動作チェックにあまりに時間をかけすぎた可能性があり、生産性改善の余地が大きいと判断することができる。有効区間１１２の位置の偏りや全体に占める比率を定量化することは容易である。
【０１５９】
能力評価値は、被験者の品質能力と生産性能力とに独立に算出することも可能である。これは複雑度の推移データ自体が、縦軸に品質に関連の深い複雑度をとり、横軸に生産性に関連の深い時間をとって作成されているからである。なお、ＣＰＵ１１やＲＡＭ１３、生産性・品質評価アプリ１７４や課題ＤＢ１８０などは、タイミング（図２２に示す各時刻、或いは、図２５のステップＳ１６やステップＳ２０で記憶した開始指示受付時刻など）と、上述した複雑度とに基づいて、被験者のスキルを定量的に評価するスキル評価手段の一例として機能する。
【０１６０】
図３１は、特徴的な４名の被験者Ａ、Ｂ、Ｃ、Ｄの複雑度の推移データを示す例示図である。図３１において、被験者Ａは短時間に高い複雑度に到達したグラフとなっている。手は速いがコードは乱雑な傾向の被験者であり、生産性能力は高いが品質能力が低いパターンを有している。以下同様に、被験者Ｂは生産性能力も品質能力も低く、被験者Ｃは生産性能力も品質能力も高く、被験者Ｄは、生産性能力は低いが品質能力は高い、と解釈することができる。
【０１６１】
品質や生産性に関する特性は容易に定量化することができる。最も簡便な定量化方法は、曲線を包含する矩形を描き、矩形の面積と縦横比とを得る方法である。面積と縦横比とに基づいて、図３１に示す４パターンのどこに位置するかを定量的に算出することができる。位置算出の結果は図３１のプロット（黒丸）で示されている。矩形を求めるに当たっては、複雑度の推移データ全体を用いても良いが、有効区間１１２の抽出を考慮した方が評価精度は高い。
【０１６２】
このように、複雑度の推移データを用いることで、近似曲線の作成、有効区間の抽出等を実行することにより、被験者の能力評価値のみならず特性にまで踏み込んだ定量値を算出することができる。上述した例の他にも、複雑度に基づいて算出され、プログラミング能力を評価するに値する評価指標であれば、評価値として用いることができる。
【０１６３】
最後にＣＰＵ１１は、解答ＤＢ１８０に記憶されている補正情報（被験者のエラーチェックタイミング、発生したエラーの情報等）を、一覧表又はグラフの形式にて評価者に提示する。提示するフォーマットは、その被験者が、いつエラーチェックを行い、そのときにどんなエラーが発生したのかが評価者にわかれば、どのようなフォーマットでも構わない。また提示方法は、課題出題者のクライアント端末２Ａの表示部２５（或いはサーバ１の表示部１５）に表示してもよいし、印刷してもよいし、後に他のソフトウェアや他のコンピュータで閲覧されることを想定して所定の形式で記憶又は送信しても構わない。
【０１６４】
図２６のフローチャートでは、能力評価値の算出にあたって補正情報（被験者のエラーチェックタイミング、発生したエラーの情報等）を使用していない。使用しない理由は、サーバ１を企業における入社試験等に利用する場合、３０分〜２時間程度で完了するプログラミング課題であることが望まれるが、そのような短時間で被験者が発生させるエラーは偶発性が強く（従って再現性が低く）、能力評価値のパラメータとしては不適当なためである。
【０１６５】
ただし、あまりにも極端なエラー状況であった場合、例えば文法エラーチェックも論理エラーチェックも１回で通過させるような優秀な被験者、逆にあまりにも大量のエラーを出しながらプログラミングを行う被験者等がいた場合は、能力評価値に加えてエラー情報も考慮すべきである。このような理由から、補正情報は能力評価値の算出には用いないが、評価者に提示はしている。
【０１６６】
しかし、被験者の時間的制約が緩い場合、例えば企業における教育研修で統計的に有意な期間（例えば数日等）が許される場合はこの限りではなく、補正情報を能力評価値の算出に用いてもよい。
【０１６７】
以上、能力評価のため被験者にプログラミング作業をさせる場合について説明した。しかし、プログラミング作業は１つの例であり、ここでの能力評価値算出の本質ではない。作業内容としては、被験者によって作成される最終作成物及び中間作成物から複雑度を算出可能であれば、どのような作業であってもよい。
【０１６８】
例えば作業内容として作図作業を用いてもよい。作図内容としては、構造設計的なものであればＣＡＤ等を用いて何らかの構造物を作図させる作業が考えられる。また論理設計的なものであれば、フローチャート、クラス図等を作成させる作業が考えられる。あるいは、そのような本格的なものでなくても、幼児でも理解できるような単純な図形を組み合わせて何かを作図させる作業でもよい。
【０１６９】
一般に、複数の図形要素を連結する形で何らかの構造を作図させる作業が、最も複雑度を計算しやすい。この場合、連結された複数の図形要素群を一種の回路網とみなすことが可能である。この網の閉領域の数、使用した要素群の数等を、プログラミングにおける分岐数、語数等に対応するものとみなせば、プログラミングにおける複雑度算出、評価値算出の処理をそのまま適用することができる。
【０１７０】
また、別の作業内容として、自然言語を用いて課題の解決手段を表現させる作業を用いてもよい。この場合、自然言語をプログラミング言語の一種とみなして複雑度を計算する。ただし、自然言語はプログラミング言語と比較してはるかに自由度が高く、複雑度計算、仕様検証（課題の仕様を満たしていることの検証）が困難になるという問題がある。この問題を解決するため、高度な自然言語解析アルゴリズムを工夫してもよい。しかし、自然言語の自由度を制限する方向で課題を作成するのが現実的である。
【０１７１】
例えば、被験者が解決手段の表現に使用できる名詞、動詞、接続詞等を語群として提供し、提供された語群からの選択によって解決手段を表現するよう指示すればよい。制限を非常に強くした場合は、例えば「もし：Ａ：ならば：Ｂし、そうでなければ：Ｃする」のように自然言語でプログラミングを行っているのと等価になるので複雑度計算、仕様検証等は容易となる。どこまで制限を強くするかは、用いる自然言語解析アルゴリズムの性能との兼ね合いで決定すればよい。
【０１７２】
以上説明した［定量的なスキル評価法］によれば、被験者が作成したソースコードの中間作成物（ログデータ）をクライアント端末２Ｂから所定タイミングで取得し、そのタイミングと中間作成物の複雑度に基づいて、被験者のスキルを定量的に評価できるので、被験者のスキルを容易に客観的に評価することができる。その結果、課題出題者は、次の課題を選択する際に、被験者のスキルに応じた課題の選択を客観的に行うことができる。
【０１７３】
具体的に説明すると、課題出題者が視認し得る図２０に戻って、チャート表示ボタン６３７をクリックすれば、例えば図２１に示す生産性・品質チャート６３７１の表示画面が現れる。この図２１に示すチャート表示画面は、図３１に示す例示図によって示される画面に相当するものであり、被験者のプログラミングにおける生産性能力や品質能力を相対的に図示している。横軸は、品質能力（図３１では品質と表記）を示し、縦軸は生産性能力（図３１では生産性と表記）を示している。また、図２１では、図３１と異なり正方向を逆転させている。すなわち、図２１では、横軸の品質能力についていえば、左方向に行くほど品質能力が高くなり、縦軸の生産性能力についていえば、下方向に行くほど生産性能力が高くなる。また、図２１では、被験者２（四角枠で囲まれた２で示す）、被験者３（四角枠で囲まれた３で示す）、被験者５（四角枠で囲まれた５で示す）、被験者６（四角枠で囲まれた６で示す）の能力評価を行っているが、これは、図２０に示す解答確認画面において、課題出題者がＮｏ．２、Ｎｏ．３、Ｎｏ．５、Ｎｏ．６を選択したからである。
【０１７４】
図２１に示すように、被験者３の生産性、品質は、ともに２．０である。また、被験者６の生産性、品質は、ともに６．０である。これは、被験者３が被験者６と比べて生産性が２．５倍高く、品質が約２．３倍良いことを意味する（つまり、生産性・品質チャート６３７１の左下にいくほど能力が高いように配置される）。したがって、仮に、被験者６が既存の社員で、被験者２，３，５が採用試験の応募者である場合には、被験者３は既存のある社員（被験者６）よりも数倍能力が高いため採用する、といった適切な判断を下すことができる。このように、被験者のスキルを相対的に判断するためには、生産性・品質チャートで基準となるデータが必要になるため、図２０に示す基準６３２の項目を設けている。そして、図２１に示す生産性・品質チャート６３７１で、被験者６（基準となる者）を示す四角枠内に色を着けることによって、課題出題者は被験者のスキルを容易に相対判断することができる。
【０１７５】
また、図２１では、基準となる者の位置を自由に変更することができるように、基準位置調整ボックスが表示されている。詳細には、生産性能力基準位置調整ボックス６３７２、このボックス内の数値を増減させるスピンボタン６３７３、品質能力基準位置調整ボックス６３７４、このボックス内の数値を増減させるスピンボタン６３７５が表示されている。変更ピッチは、０．１刻みである。また、基準位置のデフォルトは、（５．０，５．０）である。基準位置を変更する場合には、課題出題者は、スピンボタン６３７３やスピンボタン６３７５をクリックすればよい。
【０１７６】
さらに、図２１では、生産性・品質チャート６３７１に面積一定線６３７７を描画するか否かを選択するためのチェックボックス６３７６が設けられている。生産性・品質チャート６３７１内に描画された面積一定線６３７３は、生産性能力値×品質能力値が一定になるように一本又は複数本描画される。これにより、各被験者のスキルを、基準となる被験者６と比べて、総合的に優れているか劣っているかを相対判断することができる。なお、閉じるボタン６３７８がクリックされると、図２１に示す画面は閉じられる。
【０１７７】
［第１の実施形態の主な効果］
以上説明したように、本発明の第１実施形態に係るスキル診断システム、サーバ１、コンピュータをサーバ１として機能させるコンピュータプログラム、及びスキル診断方法（図４参照）によれば、課題出題者は、被験者のスキルに応じて、クライアント端末２Ａを通じて被験者に受けさせたい課題を選択・出題（図９参照）することができる。また、図９に示されるように、被験者に受けさせたい課題を選択するにあたって、プログラミングなどの専門知識や煩雑な作業は不要であるので、被験者に受けさせたい課題を簡易に出題することができる。このようにして、本発明の第１実施形態に係るスキル診断システム等は、課題を出題する際の利便性を向上させることができる。
【０１７８】
また、図２０に示されるように、クライアント端末２Ａの表示部２５において、被験者の解答を確認することができるので、例えば誰が期限内に解答したかどうかを容易に把握することができる。また、ダウンロードボタン６３８をクリックして、被験者が解答した内容（ソースコード）を確認することによって、解答の出来具合を把握することができ、次の課題選択をする段階で、被験者のスキルにより応じた課題の選択を行うことができる。
【０１７９】
特に、第１の実施形態に係るスキル診断システム等によれば、［定量的なスキル評価法］において詳述したように、サーバ１は、被験者が作成したソースコード（ログデータ）をクライアント端末２Ｂから所定タイミングで取得する。そして、そのタイミングとログデータの複雑度に基づいて、被験者のスキルを定量的に評価する（図２１参照）。これにより、課題出題者は、チャート表示ボタン６３７をクリックして、生産性・品質チャート６３７１を確認することによって、次の課題を選択する際に、被験者のスキルにより応じた課題の選択をすることができる。
【０１８０】
また、図５に示されるように、ログインＩＤを要求するログイン画面を設けているので、ログインＩＤをもたない課題出題者は、被験者に受けさせたい課題を選択することができず、スキル診断システムのセキュリティ性を高めることができる。また、課題出題者が意図した被験者以外の者にＵＲＬが漏洩した場合であっても、予め設定した有効期限（図１０参照）が過ぎれば、そのＵＲＬで本実施形態に係るスキル診断システムを利用することができなくなる。したがって、有効期限後のスキル診断システムの無断利用を防ぐことができる。
【０１８１】
［第２の実施形態］
次に、本発明の第２の実施形態に係るスキル診断システムについて説明する。第１の実施形態では、課題出題者は、課題ＤＢ１７６に登録されている複数の課題の中から、被験者に受けさせたい“一の”課題を選択した（図９及び図１０参照）。第２の実施形態では、課題ＤＢ１７６に登録されている複数の課題の中から、被験者に受けさせたい“２以上の”課題を選択する。
【０１８２】
図３２は、課題ＵＲＬ発行画面の他の一例である。図９に示す課題ＵＲＬ発行画面と異なる点は、課題一覧表６２０ａの左側にチェックボックス６２００が設けられている点である。課題出題者は、課題一覧表６２０ａに掲げられている課題の中から、被験者に受けさせたい課題を複数同時に選択することができる（選択されている様子を黒丸で示す）。すなわち、ＣＰＵ１１は、入力部２４からの操作信号に基づいて、複数の課題が選択されたことを認識する。なお、本実施形態では、課題一覧表６２０ａの左側にチェックボックス６２００を設けることとしたが、発行履歴一覧表６２０ｂの左側にチェックボックス６２００を設けてもよい。もちろん、チェックボックス６２００を配置する位置はどこでもよい。
【０１８３】
課題を複数選択した場合には、図１０に示す発行設定ダイアログ画面は、例えば図３３に示す発行設定ダイアログ画面に変更すればよい。図１０と異なる点は、発行ボタン７１０が「次へ」ボタン７１０’に変わっている点である。課題出題者は、図３２に示す課題ＵＲＬ発行画面の状態で、新規発行ボタン６２７をクリックすると、課題出題者のクライアント端末２Ａの表示部２５には、図３３に示す発行設定ダイアログ画面が表示される。図３２では、「英単語カウント」と「金種計算」の課題が選択されていることから（チェックボックス６２００参照）、まずは「英単語カウント」の課題について発行設定が行われる。詳細は、図１０を用いて前述したとおりである。「英単語カウント」の課題についての発行設定が終了すると、課題出題者は、図３３に示す「次へ」ボタン７１０’をクリックし、今度は「金種計算」の課題について発行設定が行われる。この発行設定を行った発行設定ダイアログ画面（図示せず）では、図１０と同様に右下に発行ボタン７１０が表示されている。したがって、課題出題者は、「英単語カウント」の課題についての発行設定も終了すると、発行ボタン７１０をクリックして、ＵＲＬの発行を行う。
【０１８４】
図３４は、課題が複数選択された場合におけるＵＲＬ対応テーブルの一例である。このＵＲＬ対応テーブルは、発行ＤＢ１７９に格納されるテーブルであって、ＣＰＵ１１によって読み出される。ＵＲＬ対応テーブルの態様については、いくつか考えられる。例えば図３４（ａ）に示すように、「英単語カウント」の課題（課題番号１）に一つのＵＲＬを対応付け、「金種計算」の課題（課題番号２）に一つのＵＲＬを対応付けてもよい。各ＵＲＬは、第１の実施形態と同様に、被験者に受けさせたい課題だけでなく、ＵＲＬ有効期限入力欄７０２に入力された有効期限、パスワード入力欄７０３に入力されたパスワードなどと対応付けられる。このように、異なる課題に対して異なるＵＲＬを対応付けた場合には、被験者は、各ＵＲＬにアクセスして、それぞれ対応する課題を受けることになる。一方で、図３４（ｂ）に示すように、「英単語カウント」の課題（課題番号１）と「金種計算」の課題（課題番号２）の双方で共通のＵＲＬを対応付けてもよい。この場合には、被験者は、一のＵＲＬにアクセスして、２つの課題を受けることになる。
【０１８５】
図３５は、図３４（ｂ）に示すようにＵＲＬが対応付けられた場合に、被験者が解答入力を行うプログラミング画面の一例である。図３５に示すプログラミング画面では、課題表示／編集エリア９０１の上部に、「課題１」タブ及び「編集１」タブ、並びに「課題２」タブ及び「編集２」タブが設けられている。被験者は、それぞれのタブをクリックすることで、課題表示／編集エリア９０１の表示を切り替えることができる。例えば、「英単語カウント」の課題の内容を表示する場合には、「課題１」タブをクリックし、この課題に対して解答する場合には、「編集１」タブをクリックすればよい。
【０１８６】
また、課題出題者が複数の課題を選択するにあたって、図３２では、個々の課題を一つずつ選択できるようにチェックボックス６２００を設けることとしたが、例えば、いくつかの課題を一つのグループにまとめた上で、そのグループを選択できるようにチェックボックスを設けてもよい。図３６は、図３２における課題一覧表６２０ａの変形例となる課題グループ一覧表である。
【０１８７】
図３６に示すように、課題グループ一覧表は、初級グループと上級グループの２つのグループから構成されている。初級グループは、レベル１の課題１（Ｌ１）、レベル３の課題２（Ｌ３）、レベル５の課題３（Ｌ５）から構成されており、一のＵＲＬと対応付けられている。上級グループは、レベル２の課題１（Ｌ２）、レベル４の課題２（Ｌ４）、レベル６の課題３（Ｌ６）から構成されており、一のＵＲＬと対応付けられている。なお、難易度が高くなるほどレベルは大きくなる。
【０１８８】
図３６では、課題出題者は上級グループのチェックボックスにチェックを入れている。これにより、ここでは上級グループに属する課題を一度に選択することができ、これらの課題を一度に受けるためのＵＲＬを発行することができる。図３４（ａ）で説明したように、個々の課題に一のＵＲＬを対応付けてもよい。このように、グループ単位で課題の選択を行うことができれば、課題の数が増えた場合であっても、容易に課題選択を行うことができる。
【０１８９】
また、重要度によってグループを分けることも可能である。例えば、高重要度グループと低重要度グループに分けておき、重要な課題は前者に属するように対応付け、重要でない課題は後者に属するように対応付けておく。これにより、課題出題者は、重要度の高低に応じて課題を整理することができる。なお、図３６では、２つのグループに分ける構成としたが、初級・中級・上級と３つのグループにしたり、個々のグループの課題の種類や数を変更したり、課題出題者はグループ構成を自由にカスタマイズしてもよい。
【０１９０】
第２の実施形態では、被験者に受けさせたい課題を複数にしたが、例えば、課題を受けさせたい被験者を複数にしてもよい。課題出題者は、課題を受けさせたい被験者のメールアドレスを予め被験者ＤＢ１７７に登録しておく。例えば、新入社員１００人のメールアドレスを予め被験者ＤＢ１７７に登録しておく。サーバ１のＣＰＵ１１は、電子メールアプリ１７１を実行すると同時に、被験者ＤＢ１７７から所定のメールアドレスを読み出して、ＵＲＬの送信先として自動的に設定する。これにより、新入社員１００人にＵＲＬ付きの電子メールを一斉送信することができ、課題を出題する際の利便性を向上させることができる。
【０１９１】
また、被験者に受けさせたい課題と、課題を受けさせたい被験者との双方を複数にして、課題を出題する出題態様について柔軟性を高めることができる。例えば、新入社員１００人のうち、入社する前のテストでスキル低と判明した新入社員５０人に対しては、初級グループの課題を受けさせ、入社する前のテストでスキル高と判明した新入社員５０人に対しては、上級グループの課題を受けさせる、といったことが可能になる（図３６参照）。
【０１９２】
［第３の実施形態］
第１の実施形態および第２の実施形態では、いずれも課題出題者が課題を選択し、ＵＲＬを設定し、その後、被験者がＵＲＬアクセスし、入力された解答の確認・評価という流れでプログラミングスキルの診断を行った（図４参照）。第３の実施形態に係るスキル診断システムでは、予め課題出題者が課題選択とＵＲＬ設定を行っておき、被験者のログインによって直ちにプログラミングスキルの診断が行われる。
【０１９３】
図３７は、被験者のプログラミングスキルを診断する他の流れを示すフローチャートである。図３７に示すフローチャートが図４に示すものと異なる点は、課題の登録（図４のステップＳ２）、課題の選択（図４のステップＳ３）、ＵＲＬ設定（図４のステップＳ４）がない点である。これらの処理は、課題出題者によって予め行われ、その結果、ＵＲＬ対応テーブルが作成される。まず、このＵＲＬ対応テーブルの作成について説明する。
【０１９４】
図３９は、第３の実施形態に係るスキル診断システムにおいて用いられるＵＲＬ対応テーブルである。このＵＲＬ対応テーブルは、発行ＤＢ１７９に格納される。
【０１９５】
まず、課題出題者は、第１の実施形態と同様に、図９及び図１０を通じて課題選択と発行設定を行う。その後、発行ボタン７１０をクリックすると、課題を受けさせる被験者を選択するための画面が表示される。図３８は、課題出題者が、課題を受けさせる被験者を選択するための画面の一例である。図３８に示すように、被験者候補一覧の中から、チェックボックスの選択により、課題を受けさせる被験者を選択する。ここでは被験者Ｐと被験者Ｒが選択されている。なお、チェックボックスの選択により行うこととしたが、カーソル選択でもよい。
【０１９６】
そして、被験者を選択した後、一番下の登録ボタン３０００をクリックする。これにより、サーバ１のＣＰＵ１１は、発行ＤＢ１７９内に、被験者と、課題と、その課題に対する解答を入力するためのリンク先のＵＲＬ（図１０を通じて行った発行設定を含む）とが対応付けられたＵＲＬ対応テーブルを作成する。
【０１９７】
図３９は、発行ＤＢ１７９に格納されたＵＲＬ対応テーブルの一例を示す図である。図３９に示すＵＲＬ対応テーブル２行目には、被験者Ｏと、課題「合同三角形のカウント」と、その課題に対する解答を入力するためのリンク先のＵＲＬ（http://www.abc000・・・）とが対応付けられている。課題出題者は、課題選択と発行設定を繰り返し行うことによって、ＵＲＬ対応テーブルに対応関係を追加していくことができる。すなわち、図３９に示すＵＲＬ対応テーブルの３行目には被験者Ｐが課題「英単語カウント」に対応付けられ、４行目には被験者Ｑが課題「英単語カウント」に対応付けられ、５行目には被験者Ｒが課題「金種計算」に対応付けられている。なお、図４０は、課題グループから構成されるＵＲＬ対応テーブルを示している。図３６と同様に、各被験者に課題グループを対応付けることもできる。このようにして、ＵＲＬ対応テーブルが発行ＤＢ１７９に作成・格納される。
【０１９８】
図３７に戻って、本実施形態に係るスキル診断システムでは、課題出題者ではなく被験者が、図５に示すログイン画面からログインし（ステップＳ４１）、その直後、ＵＲＬアクセスを自動的に行う（ステップＳ４２）。具体的には、被験者は、図５に示すログイン画面において、ログインＩＤ入力フォーム５１に自己のＩＤを入力し、また、パスワード入力フォーム５２にパスワードを入力する。被験者のＩＤやパスワードの照合は、ＣＰＵ１１がＨＤＤ１７内の被験者ＤＢ１７７にアクセスすることによって行う。
【０１９９】
また、本実施形態では、ＣＰＵ１１は、ＨＤＤ１７内の発行ＤＢ１７９にもアクセスし、ログインしようとしている被験者が、上述したＵＲＬ対応テーブルに登録されている被験者か否かを判断する。上述したＵＲＬ対応テーブルに登録されている被験者である場合には、クライアント端末２ＢからのＵＲＬアクセスを受け付ける。すなわち、ＵＲＬ対応テーブルに登録されている被験者がログインボタン５３をクリックすると、クライアント端末２Ｂのウェブブラウザアプリ２７２は、ＵＲＬアクセス要求信号を送信する。サーバ１のＣＰＵ１１は、通信部２６及び通信部１６並びに通信ネットワーク１００を介して、この要求信号を受信すると、ＨＤＤ１７の発行ＤＢ１７９にアクセスして、ログインしようとしている被験者が、ＵＲＬ対応テーブルに登録されている被験者か否かを判断する。ＵＲＬ対応テーブルに登録されている被験者である場合には、ＵＲＬ対応テーブルで対応付けられているＵＲＬが示すリンク先をクライアント端末２Ｂの表示部２５に表示させるために、ＨＴＭＬ文書を送信する。これにより、クライアント端末２Ｂの表示部２５に、図１１に示す発行画面が表示される。なお、図１１に示す発行画面の表示を省略し、いきなり図１５に示すプログラミング画面が表示されてもよい。
【０２００】
なお、本実施形態では、ＵＲＬ対応テーブルに登録されているか否かで、被験者からのＵＲＬアクセスを受け付けるかどうかを決定するようにしたが、これでは、一度ＵＲＬ対応テーブルに登録してしまうと、課題を受けさせたくない被験者からのアクセスも受け付けてしまうことになる。そこで、ＵＲＬ対応テーブルの機能として、アクティベート機能を付加してもよい。図４１は、図４０に示すＵＲＬ対応テーブルに、有効／無効を対応づけたアクティベート機能付きＵＲＬ対応テーブルを示している。この有効／無効は、被験者が対応するＵＲＬにアクセスしてきたときに、受け付けるか受け付けないかをコントロールするための機能であって、図４１に示すＵＲＬ対応テーブルの最左欄（チェックボックス）と対応付けられている。実際には、発行ＤＢ１７９内にフラグを立てる／立てない等によってコントロールすればよい。
【０２０１】
例えば図４１では、被験者Ｐと被験者Ｒのアクセスのみが有効となっている（チェックボックスに黒丸印がついている）。したがって、被験者Ｏと被験者Ｑは、ＵＲＬ対応テーブルに登録されていても、ＵＲＬにアクセスすることができない。このように、アクティベート機能を付加することによって、ＵＲＬ対応テーブルに被験者を追加したり、ＵＲＬ対応テーブルから被験者から削除したりしなくても、課題を受けさせる被験者を簡易にコントロールすることができる。
【符号の説明】
【０２０２】
１  サーバ
２  クライアント端末
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  入力部
１５  表示部
１６  通信部
１７  ＨＤＤ
１００  通信ネットワーク
１７１  電子メールアプリ
１７２  課題設定・解答確認アプリ
１７３  文書作成・編集アプリ
１７４  生産性・品質評価アプリ
１７５  ウェブアプリ
１７６  課題ＤＢ
１７７  被験者ＤＢ
１７８  出題者ＤＢ
１７９  発行ＤＢ
１８０  解答ＤＢ
【図１】
2010282578.tif 000003
【図２】
2010282578.tif 000004
【図３】
2010282578.tif 000005
【図４】
2010282578.tif 000006
【図５】
2010282578.tif 000007
【図６】
2010282578.tif 000008
【図７】
2010282578.tif 000009
【図８】
2010282578.tif 000010
【図９】
2010282578.tif 000011
【図１０】
2010282578.tif 000012
【図１１】
2010282578.tif 000013
【図１２】
2010282578.tif 000014
【図１３】
2010282578.tif 000015
【図１４】
2010282578.tif 000016
【図１５】
2010282578.tif 000017
【図１６】
2010282578.tif 000018
【図１７】
2010282578.tif 000019
【図１８】
2010282578.tif 000020
【図１９】
2010282578.tif 000021
【図２０】
2010282578.tif 000022
【図２１】
2010282578.tif 000023
【図２２】
2010282578.tif 000024
【図２３】
2010282578.tif 000025
【図２４】
2010282578.tif 000026
【図２５】
2010282578.tif 000027
【図２６】
2010282578.tif 000028
【図２７】
2010282578.tif 000029
【図２８】
2010282578.tif 000030
【図２９】
2010282578.tif 000031
【図３０】
2010282578.tif 000032
【図３１】
2010282578.tif 000033
【図３２】
2010282578.tif 000034
【図３３】
2010282578.tif 000035
【図３４】
2010282578.tif 000036
【図３５】
2010282578.tif 000037
【図３６】
2010282578.tif 000038
【図３７】
2010282578.tif 000039
【図３８】
2010282578.tif 000040
【図３９】
2010282578.tif 000041
【図４０】
2010282578.tif 000042
【図４１】
2010282578.tif 000043