(57)【要約】【課題】被験者に対して実務的な課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置、能力評価方法、及びコンピュータプログラムを提供する。【解決手段】被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析する。被験者が最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得し、各々の該中間成果物を取得する時点の時刻を記憶しておく。作成された各々の中間成果物が所定の条件を具備しているか否かを判断し、判断結果を表示出力する。各中間成果物の複雑さを定量的に示す複雑度を算出して、算出された各中間成果物に対応する複雑度と時刻記憶部で記憶された各中間成果物に対応する時刻とに基づいて被験者の作業能力を定量的に評価する評価値を算出する。【選択図】図８
2010033501.tif 000002
【特許請求の範囲】
【請求項１】
被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置であって、
前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得する中間成果物取得部と、
各々の該中間成果物を取得する時点の時刻を記憶する時刻記憶部と、
作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断する条件判断部と、
該条件判断部での判断結果を表示出力する判断結果表示部と、
前記各中間成果物の複雑さを定量的に示す複雑度を算出する複雑度算出部と、
該複雑度算出部にて算出された各中間成果物に対応する複雑度と前記時刻記憶部で記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出する評価値算出部と
を備えることを特徴とする能力評価装置。
【請求項２】
前記最終成果物を作成する作業は、システム開発におけるプログラミング作業であることを特徴とする請求項１記載の能力評価装置。
【請求項３】
前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する論理構造を示す図を作成する作業であることを特徴とする請求項１記載の能力評価装置。
【請求項４】
前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する自然言語による表現を作成する作業であることを特徴とする請求項１記載の能力評価装置。
【請求項５】
前記評価値算出部は、前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出するようにしてあることを特徴とする請求項１乃至４のいずれか一項に記載の能力評価装置。
【請求項６】
前記評価値算出部は、前記複雑度の時間経過に対する推移を曲線にて近似するようにしてあることを特徴とする請求項１乃至５のいずれか一項に記載の能力評価装置。
【請求項７】
前記評価値算出部は、近似された前記曲線に基づいて前記評価値を算出するようにしてあることを特徴とする請求項６記載の能力評価装置。
【請求項８】
前記評価値算出部は、前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出するようにしてあることを特徴とする請求項１乃至７のいずれか一項に記載の能力評価装置。
【請求項９】
被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置で実行することが可能な能力評価方法あって、
前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得し、
各々の該中間成果物を取得する時点の時刻を記憶し、
作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断し、
判断結果を表示出力し、
前記各中間成果物の複雑さを定量的に示す複雑度を算出し、
算出された各中間成果物に対応する複雑度と記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出することを特徴とする能力評価方法。
【請求項１０】
前記最終成果物を作成する作業は、システム開発におけるプログラミング作業であることを特徴とする請求項９記載の能力評価方法。
【請求項１１】
前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する論理構造を示す図を作成する作業であることを特徴とする請求項９記載の能力評価方法。
【請求項１２】
前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する自然言語による表現を作成する作業であることを特徴とする請求項９記載の能力評価方法。
【請求項１３】
前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出することを特徴とする請求項９乃至１２のいずれか一項に記載の能力評価方法。
【請求項１４】
前記複雑度の時間経過に対する推移を曲線にて近似することを特徴とする請求項９乃至１３のいずれか一項に記載の能力評価方法。
【請求項１５】
近似された前記曲線に基づいて前記評価値を算出することを特徴とする請求項１４記載の能力評価方法。
【請求項１６】
前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出することを特徴とする請求項９乃至１５のいずれか一項に記載の能力評価方法。
【請求項１７】
被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置で実行することが可能なコンピュータプログラムであって、
前記能力評価装置を、
前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得する中間成果物取得部、
各々の該中間成果物を取得する時点の時刻を記憶する時刻記憶部、
作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断する条件判断部、
該条件判断部での判断結果を表示出力する判断結果表示部、
前記各中間成果物の複雑さを定量的に示す複雑度を算出する複雑度算出部、及び
該複雑度算出部にて算出された各中間成果物に対応する複雑度と前記時刻記憶部で記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出する評価値算出部
として機能させることを特徴とするコンピュータプログラム。
【請求項１８】
前記評価値算出手段を、
前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出する手段として機能させることを特徴とする請求項１７記載のコンピュータプログラム。
【請求項１９】
前記評価値算出手段を、
前記複雑度の時間経過に対する推移を曲線にて近似する手段として機能させることを特徴とする請求項１７又は１８記載のコンピュータプログラム。
【請求項２０】
前記評価値算出手段を、
近似された前記曲線に基づいて前記評価値を算出する手段として機能させることを特徴とする請求項１９記載のコンピュータプログラム。
【請求項２１】
前記評価値算出手段を、
前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出する手段として機能させることを特徴とする請求項１７乃至２０のいずれか一項に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置、能力評価方法、及びコンピュータプログラムに関する。
【背景技術】
【０００２】
被験者の作業能力を評価する方法は、従来から様々な方法が提案されている。また、実際に入社試験、検定試験等で運用されている方法も多岐にわたっている。
【０００３】
例えば、特定業務分野の知識を問う試験を行って採点することで、試験の受験者の能力を評価する方法は広く実施されている。近年ではインターネットの普及に伴い、ＷＥＢ上で試験問題を提供するビジネスも増加している。業務分野やレベルに応じて様々な切り口の試験が存在しており、斯かる知識を問う試験は、設問作成、採点等が簡単なこともあって、各種の能力評価の中で最多数である。
【０００４】
知識を問う試験に次いで一般的なのが、繰り返し処理能力を問う試験を用いて評価する方法である。例えば計算問題、論理パズル的問題、知能テスト的問題等を多数準備しておき、所定の時間内に何問正解したかを採点する試験である。斯かる試験は、人材関連の事業者から提供されることが多い。
【０００５】
また企業の採用試験では、何らかの実務的な作業を実際にやらせてみることにより能力評価が行われる場合もある。いわゆる実技試験であり、技術者の採用にて実施されることが多い。例えばプログラマを採用する場合、小規模なプログラミング試験を与えてコーディング結果を評価する方法がこれに該当する。斯かる実技試験の評価基準は、企業が独自に工夫している場合が多い。
【０００６】
プログラマを採用する場合、プログラム教育支援プログラムの実行結果を応用する場合も増えている。例えば特許文献１に開示されているようなプログラミングの文字数を時系列に把握することで、試験を受験した学生のプログラミング能力の到達度を図っている。
【特許文献１】特開２００６−２２７２１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
知識を問う試験では、採点という形で容易に定量化することができる。しかし、知識は作業能力の高低を類推する一助にはなるものの、作業能力を直接評価することはできない。特に技術者を採用する場合、近年のインターネット検索の一般化により特殊な技術知識を暗記している事実の価値が低下しており、知識量と実務的な作業能力との相関が年々低下傾向にあるという問題がある。実際に、技術知識を覚えていなくても優秀な作業能力を有している技術者は多い。
【０００８】
また繰り返し処理能力を問う試験も、採点という形で容易に定量化することができる。しかし、採点の都合上、１つの正解しかないことが保証されている小規模な設問を多数用意する必要がある。したがって、実務と乖離した設問を準備する機会が多く、実務能力を正しく評価することが困難であるという問題がある。近年のコンピュータ技術の進展により、厳密な正解を有する問題は大半がシステム化により解決することが可能となっている。一方、人間の実務における作業内容は、所定の到達目標に対して様々な判断を行い、手段を取捨選択し、必要に応じて手段を生成し、組み合わせ、いかに効率よく到達したかが問われることが多い。繰り返し処理能力を問う試験では、そのような実務に即した作業能力を評価することができない。
【０００９】
また実務的な作業を実際にやらせてみる方法は、小規模な実務をやらせたとみなすことができ、実務的な作業能力との相関は認められる。しかし、依然として客観的評価、定量的評価を行うのは困難であるという問題がある。例えば上述のプログラミング試験では、被験者が作成したプログラムや作成過程を評価者が観察により評価することが多いことから、評価者のスキル、嗜好に評価が大きく左右される。
【００１０】
以上のように、従来の能力評価方法では、実務的な作業能力を定量的に評価することが困難である。すなわち、評価の客観性・定量性を確保しようとするほど実務的な作業能力との相関が薄くなる傾向にあり、実務的な作業能力との相関を上げようとするほど客観性が損なわれる傾向にある。
【００１１】
本発明は斯かる事情に鑑みてなされたものであり、被験者に対して実務的な課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置、能力評価方法、及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために第１発明に係る能力評価装置は、被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置であって、前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得する中間成果物取得部と、各々の該中間成果物を取得する時点の時刻を記憶する時刻記憶部と、作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断する条件判断部と、該条件判断部での判断結果を表示出力する判断結果表示部と、前記各中間成果物の複雑さを定量的に示す複雑度を算出する複雑度算出部と、該複雑度算出部にて算出された各中間成果物に対応する複雑度と前記時刻記憶部で記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出する評価値算出部とを備えることを特徴とする。
【００１３】
また、第２発明に係る能力評価装置は、第１発明において、前記最終成果物を作成する作業は、システム開発におけるプログラミング作業であることを特徴とする。
【００１４】
また、第３発明に係る能力評価装置は、第１発明において、前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する論理構造を示す図を作成する作業であることを特徴とする。
【００１５】
また、第４発明に係る能力評価装置は、第１発明において、前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する自然言語による表現を作成する作業であることを特徴とする。
【００１６】
また、第５発明に係る能力評価装置は、第１乃至第４発明のいずれか１つにおいて、前記評価値算出部は、前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出するようにしてあることを特徴とする。
【００１７】
また、第６発明に係る能力評価装置は、第１乃至第５発明のいずれか１つにおいて、前記評価値算出部は、前記複雑度の時間経過に対する推移を曲線にて近似するようにしてあることを特徴とする。
【００１８】
また、第７発明に係る能力評価装置は、第６発明において、前記評価値算出部は、近似された前記曲線に基づいて前記評価値を算出するようにしてあることを特徴とする。
【００１９】
また、第８発明に係る能力評価装置は、第１乃至第７発明のいずれか１つにおいて、前記評価値算出部は、前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出するようにしてあることを特徴とする。
【００２０】
次に、上記目的を達成するために第９発明に係る能力評価方法は、被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置で実行することが可能な能力評価方法あって、前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得し、各々の該中間成果物を取得する時点の時刻を記憶し、作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断し、判断結果を表示出力し、前記各中間成果物の複雑さを定量的に示す複雑度を算出し、算出された各中間成果物に対応する複雑度と記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出することを特徴とする。
【００２１】
また、第１０発明に係る能力評価方法は、第９発明において、前記最終成果物を作成する作業は、システム開発におけるプログラミング作業であることを特徴とする。
【００２２】
また、第１１発明に係る能力評価方法は、第９発明において、前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する論理構造を示す図を作成する作業であることを特徴とする。
【００２３】
また、第１２発明に係る能力評価方法は、第９発明において、前記最終成果物を作成する作業は、提示された課題の所定の条件を具備する自然言語による表現を作成する作業であることを特徴とする。
【００２４】
また、第１３発明に係る能力評価方法は、第９乃至第１２発明のいずれか１つにおいて、前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出することを特徴とする。
【００２５】
また、第１４発明に係る能力評価方法は、第９乃至第１３発明のいずれか１つにおいて、前記複雑度の時間経過に対する推移を曲線にて近似することを特徴とする。
【００２６】
また、第１５発明に係る能力評価方法は、第１４発明において、近似された前記曲線に基づいて前記評価値を算出することを特徴とする。
【００２７】
また、第１６発明に係る能力評価方法は、第９乃至第１５発明のいずれか１つにおいて、前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出することを特徴とする。
【００２８】
次に、上記目的を達成するために第１７発明に係るコンピュータプログラムは、被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析することにより前記被験者の作業能力を定量的に評価する能力評価装置で実行することが可能なコンピュータプログラムであって、前記能力評価装置を、前記被験者が前記最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得する中間成果物取得部、各々の該中間成果物を取得する時点の時刻を記憶する時刻記憶部、作成された各々の中間成果物が前記所定の条件を具備しているか否かを判断する条件判断部、該条件判断部での判断結果を表示出力する判断結果表示部、前記各中間成果物の複雑さを定量的に示す複雑度を算出する複雑度算出部、及び該複雑度算出部にて算出された各中間成果物に対応する複雑度と前記時刻記憶部で記憶された各中間成果物に対応する時刻とに基づいて前記被験者の作業能力を定量的に評価する評価値を算出する評価値算出部として機能させることを特徴とする。
【００２９】
また、第１８発明に係るコンピュータプログラムは、第１７発明において、前記評価値算出手段を、前記被験者の生産性能力の評価値及び品質能力の評価値を独立して算出する手段として機能させることを特徴とする。
【００３０】
また、第１９発明に係るコンピュータプログラムは、第１７又は第１８発明において、前記評価値算出手段を、前記複雑度の時間経過に対する推移を曲線にて近似する手段として機能させることを特徴とする。
【００３１】
また、第２０発明に係るコンピュータプログラムは、第１９発明において、前記評価値算出手段を、近似された前記曲線に基づいて前記評価値を算出する手段として機能させることを特徴とする。
【００３２】
また、第２１発明に係るコンピュータプログラムは、第１７乃至第２０発明のいずれか１つにおいて、前記評価値算出手段を、前記複雑度の時系列の変動回数及び／又は変動量に基づいて前記評価値を算出する手段として機能させることを特徴とする。
【００３３】
第１発明、第９発明、及び第１７発明では、被験者に所定の条件を含む課題を提示し、提示された課題を解決する最終成果物を作成する作業の内容を分析する。被験者が最終成果物を作成する過程で生成された複数の中間成果物を所定のタイミングで取得し、各々の該中間成果物を取得する時点の時刻を記憶する。作成された各々の中間成果物が所定の条件を具備しているか否かを判断し、判断結果を表示出力するとともに、各中間成果物の複雑さを定量的に示す複雑度を算出する。算出された各中間成果物に対応する複雑度と記憶された各中間成果物に対応する時刻とに基づいて被験者の作業能力を定量的に評価する評価値を算出する。中間成果物を取得した時刻により、被験者の生産性能力を評価し、中間成果物の複雑さを定量的に示す複雑度により、被験者の品質能力を評価することにより、被験者の作業能力を客観的に評価することができる評価値を算出することが可能となる。
【００３４】
第２発明及び第１０発明では、最終成果物を作成する作業が、システム開発におけるプログラミング作業であることにより、中間成果物を取得した時刻により、被験者のプログラム生産性能力を評価し、中間成果物の複雑さを定量的に示す複雑度により、被験者のプログラム作成の品質能力を評価することができる。したがって、被験者のプログラム作成能力を客観的に評価することができる評価値を算出することが可能となる。
【００３５】
第３発明及び第１１発明では、最終成果物を作成する作業が、提示された課題の所定の条件を具備する論理構造を示す図を作成する作業であることにより、被験者の論理構造把握における生産性能力を評価し、中間成果物の複雑さを定量的に示す複雑度により、被験者の論理構造把握の品質能力を評価することができる。したがって、被験者の論理構造把握能力を客観的に評価することができる評価値を算出することが可能となる。
【００３６】
第４発明及び第１２発明では、最終成果物を作成する作業が、提示された課題の所定の条件を具備する自然言語による表現を作成する作業であることにより、被験者の自然言語による論理構造表現の生産性能力を評価し、中間成果物の複雑さを定量的に示す複雑度により、被験者の自然言語による論理構造表現の品質能力を評価することができる。したがって、被験者の自然言語による論理構造表現能力を客観的に評価することができる評価値を算出することが可能となる。
【００３７】
第５発明、第１３発明、及び第１８発明では、被験者の生産性能力の評価値及び品質能力の評価値を独立して算出することにより、品質の高い最終成果物を早期に作成することができる被験者であるほど高い評価値となるようにすることができる。
【００３８】
第６発明、第１４発明、及び第１９発明では、複雑度の時間経過に対する推移を曲線にて近似することにより、被験者の生産性能力及び品質能力を視覚的に確認することが容易となる。
【００３９】
第７発明、第１５発明、及び第２０発明では、近似された曲線に基づいて評価値を算出することにより、手戻り等の突発的な障害発生に左右されることなく、被験者の平均的な生産性能力の評価値及び品質能力の評価値を算出することができる。
【００４０】
第８発明、第１６発明、及び第２１発明では、複雑度の時系列の変動回数及び／又は変動量に基づいて評価値を算出することにより、手戻り等の突発的な障害発生をも考慮に入れた、被験者の平均的な生産性能力の評価値及び品質能力の評価値を算出することができる。
【発明の効果】
【００４１】
上記構成によれば、中間成果物を取得した時刻により、被験者の生産性能力を評価し、中間成果物の複雑さを定量的に示す複雑度により、被験者の品質能力を評価することにより、被験者の作業能力を客観的に評価することができる評価値を算出することが可能となる。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の実施の形態に係る能力評価装置において、被験者にプログラミング作業の課題を提示し、プログラミング作業を実行させた場合を例に挙げて、図面に基づいて具体的に説明する。
【００４３】
図１は、本発明の実施の形態に係る能力評価装置を、ＣＰＵを用いて具現化した場合のハードウェア構成を示すブロック図である。図１において、本実施の形態に係る能力評価装置１０は、少なくとも、ＣＰＵ（中央演算装置）１１、ＲＡＭ１２、記憶装置１３、入力装置１４、出力装置１５、通信装置１６、可搬型ディスクドライブ１７及び上述したハードウェアを接続する内部バス１８で構成されている。
【００４４】
ＣＰＵ１１は、内部バス１８を介して能力評価装置１０の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置１３に記憶されているコンピュータプログラム１００に従って、種々のソフトウェア的機能を実行する。ＲＡＭ１２は、ＳＲＡＭ、ＳＤＲＡＭ等の揮発性メモリで構成され、コンピュータプログラム１００の実行時にロードモジュールが展開され、コンピュータプログラム１００の実行時に発生する一時的なデータ等を記憶する。
【００４５】
記憶装置１３は、内蔵される固定型記憶装置（ハードディスク）、ＲＯＭ等で構成されている。記憶装置１３に記憶されているコンピュータプログラム１００は、プログラム及びデータ等の情報を記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体９０から、可搬型ディスクドライブ１７によりダウンロードされ、実行時には記憶装置１３からＲＡＭ１２へ展開して実行される。もちろん、通信装置１６を介して外部のコンピュータからダウンロードされたコンピュータプログラムであっても良い。
【００４６】
記憶装置１３は、被験者のプログラミング作業の過程で発生する各種の情報を記憶する被験情報記憶部１３１を有している。記憶する被験情報は、プログラミング能力を評価するために必須の基本情報と、評価値に対して補正的に使用する補正情報とに大別することができる。ここで、基本情報とは、ソースコードの時系列の推移情報であり、基本情報記憶部１３１１に記憶される。補正情報とは、被験者が文法エラーチェックを行った時刻、発生した文法エラーの種類、発生した文法エラーの数、被験者が論理エラーチェックを行った時刻、発生した論理エラーの種類、発生した論理エラーの数等であり、補正情報記憶部１３１２に記憶される。
【００４７】
なお、基本情報と補正情報とを分離して記憶する構成に限定されるものではなく、一の記憶装置、一のファイルに記憶しても良いことは言うまでもない。また、プログラミング能力の評価には補正情報は参考情報として用いるものの必須情報ではないことから、補正情報は必ずしも記憶しておく必要はない。
【００４８】
図２は、被験情報記憶部１３１に記憶されるデータ構成の例示図である。図２（ａ）は、基本情報記憶部１３１１に記憶される入力情報テーブルのデータ構成の例示図である。基本情報であるソースコードの時系列の推移情報は、被験者のプログラミング作業における特定のタイミングにてソースコードが復元可能なフォーマットで記憶される。復元可能であればフォーマットは特に問わない。例えば図２（ａ）では、入力されたテキストデータ等を一文字ずつ入力時刻及び削除時刻とともに記憶している。入力情報テーブルを先頭から解析することにより、任意のタイミングでのソースコードを復元することができる。入力情報には、テキストデータだけではなく、改行、タブ、スペース、各種制御コード等を含めても良い。
【００４９】
また別の記憶方法として、一文字ずつの入力時刻と各入力時刻における全ソースコードとを対応付けて記憶しても良い。この場合、データ容量は比較的大きくなるものの、任意のタイミングにおけるソースコードの復元アルゴリズムは単純となる。
【００５０】
いずれの方法であっても、文字が入力されたタイミング毎に推移情報を記憶しているので、被験者のプログラミング作業における任意のタイミングでのソースコードを復元することができる。実際には必ずしも全てのタイミングでソースコードを復元する必要は無いが、後述する複雑度の時系列推移データからの近似曲線の算出において所定の精度を維持することが可能な程度のサンプリング数は必要となる。例えば、予め定めたキー入力の数の単位、リターンキーを操作したタイミング又は予め定めた特定の文字が入力されたタイミング等、予め定めた条件に合致した所定のタイミングにて中間成果物としてのソースコードを取得するようにしても良い。
【００５１】
図２（ｂ）は、補正情報記憶部１３１２に記憶される文法エラーテーブルのデータ構成の例示図であり、図２（ｃ）は、補正情報記憶部１３１２に記憶される論理エラーテーブルのデータ構成の例示図である。補正情報である文法エラーチェックに関する情報、論理エラーチェックに関わる情報は、例えば図２（ｂ）、（ｃ）に示すように、それぞれ文法エラーテーブル、論理エラーテーブルに記憶される。文法エラーの種類又は論理エラーの種類に対応付けて文法チェック実行時刻又は論理チェック実行時刻も記憶している。別途カウンタを用いて、文法エラー、論理エラーそれぞれの発生個数の累計値をカウントすることもできる。
【００５２】
課題情報記憶部１３２は、被験者に提示するプログラミング課題、その課題に対して論理テストを行うためのテストケース情報、その課題の被験情報から能力評価値を算出するための基準値等を記憶する。
【００５３】
通信装置１６は内部バス１８に接続されており、インターネット、ＬＡＮ、ＷＡＮ等の外部のネットワーク網に接続されることにより、外部のコンピュータ、外部の機器等とデータ送受信を行うことが可能となっている。例えば外部のコンピュータにてプログラミング作業を実行して、プログラミング過程の情報を、通信装置１６を介して収集しても良い。
【００５４】
入力装置１４は、キーボード及びマウス等のデータ入力媒体であり、出力装置１５は、ＣＲＴモニタ、ＬＣＤ等の表示装置、あるいはレーザプリンタ、ドットプリンタ等の印刷装置等である。なお、入力装置１４及び出力装置１５が一体化されたタッチパネルであっても良い。
【００５５】
図３は、本発明の実施の形態に係る能力評価装置１０の機能ブロック図である。課題表示部３０１は、プログラマが使用する表示装置にプログラミング課題を表示する。表示装置の画面上に表示することに限定されるものではなく、印刷装置等で出力しても良いことは言うまでもない。
【００５６】
中間成果物取得部３０２は、課題表示部３０１で課題が表示された後、表示された課題に対する中間成果物、例えばプログラミング課題が表示された場合には、プログラマによるコーディング入力等を受け付ける。一方で、課題表示部３０１で課題が表示された時点から、タイマ等で計時を開始しており、中間成果物取得部３０２にて所定のタイミングで複数の中間成果物を取得した各々の時刻を時刻記憶部３０３に随時記憶しておく。したがって、プログラミング課題を表示した時点から、上述した基本情報及び補正情報の被験情報記憶部１３１への記憶が開始される。
【００５７】
条件判断部３０４は、表示された課題の所定の条件を、取得した中間成果物が具備しているか否かを判断する。具体的には、文法エラー判断部３０４１にて、ソースコードに対する文法チェックを実行し、検出された文法エラーの種類及び数を被験者に提示する。これにより被験者は、ソースコード中に文法エラーが存在することを知ることができ、提示された情報を参考にしながら文法エラーの除去作業を行うことができる。
【００５８】
プログラミングに使用する言語がＣ言語等のコンパイラ言語である場合は、文法エラー判断部３０４１は、文法エラーをチェックすると同時に実行可能モジュールを出力する。これにより、出力された実行可能モジュールを後述の論理エラー判断部３０４２で使用できる。コンパイラ言語である場合、文法エラーチェックと同時に実行可能モジュールを出力することは、市販のコンパイラを流用することで容易に実現することができる。もちろん、構文解析等を含むコンパイラ相当のプログラムを自作しても良い。
【００５９】
コンパイラ言語であるかインタプリタ言語であるかに関わらず、あるいは市販のコンパイラを流用するか否かに関わらず、コンパイラ等の起動時刻、発生した文法エラーの種類及び数等を外部から取得することは容易である。したがって、これらの情報を補正情報記憶部１３１２に記憶すれば良い。また、実行可能ファイルも記憶装置１３に記憶される。
【００６０】
論理エラー判断部３０４２では、コンパイラ言語である場合は実行可能モジュールを、インタプリタ言語である場合はソースコード、中間言語データをメモリ中にロードし、課題ごとに事前に課題情報記憶部１３２に記憶されているテストケースを外部から付与して実行させる。そして、実行結果として想定している出力が得られているか否かを判断して、検出された論理エラーの種類及び数を被験者に提示する。すなわち被験者が作成した実行可能なプログラムに対して外部から自動的に単体テストを行い、結果を被験者に提示する。これにより被験者は、ソースコード中に論理エラーが存在することを知ることができ、提示された情報を参考にしながら論理エラーの除去作業を行うことができる。単体テストにより生じた論理エラーの種類及び数は、単体テストの実行時刻とともに補正情報として補正情報記憶部１３１２に記憶される。
【００６１】
なお、上述した文法エラーチェック及び論理エラーチェックの実行は、後述するように、入力装置１４を用いて、被験者がソースコード作成中又は作成完了後の任意のタイミングで、任意の回数、実行ボタンを操作することにより、実行される。
【００６２】
判断結果表示部３０５は、条件判断部３０４にて、表示された課題の所定の条件を、取得した中間成果物が具備しているか否かの判断結果、すなわち文法エラー及び論理エラーが生じた場合にはその内容を、生じない場合には生じない状態となった時点での中間成果物を最終成果物として表示出力する。なお、最終成果物を認識する別の手法としては、被験者自らが、図示しないインタフェース上に設けられる「完了ボタン」をクリックすることにより、その時点で作成されている中間成果物を最終成果物として認識させても良いし、プログラミング課題を被験者に提示した時点、あるいは被験者がプログラミングを開始した時点からタイマを自動的にスタートし、予め設定した時間が経過した時点での中間成果物を最終成果物として認識させても良い。
【００６３】
複雑度算出部３０６は、基本情報記憶部１３１１に記憶されているソースコードの時系列の推移情報に基づいて、複雑度の推移を時系列に演算した複雑度推移データを算出する。ここで「複雑度」とは、単に分岐が多い、階層が多い等の構造的複雑さを示す概念のみならず、ソースコード全体として無駄な論理構造、無駄なサブルーチン等を含むか否か等の評価も含む構造化されたソースコードであるか否かを評価する指標値を意味する概念である。一般にプログラム作成開始当初は複雑度は０（ゼロ）であり、コーディングが進むごとに上昇する。そして、プログラムの完成時期には特定の値に収束する。
【００６４】
「複雑度」の概念について、以下詳述する。本発明において、作成されたプログラムを完全にテストするのに必要なテストケース数（テストパターン数）、及び作成されたプログラムを変更、保守等するのに要する工数と相関のある定量値を、そのプログラムの複雑度と呼んでいる。テストケース数とプログラム変更、保守等に要する工数との間にも相互に相関があるので、概念としてどちらかに代表させても良い。以下、説明を簡単にするため、テストケース数のみを用いる場合について説明する。
【００６５】
図４は、提示されるプログラミング課題の具体例を示す例示図であり、図５は、提示されたプログラミング課題に応じて被験者が作成したＣ言語によるプログラムの例示図である。複雑度の算出には、プログラム中に現れる様々な定量値を用いることができる。          
【００６６】
最も一般的な複雑度は、プログラム中の分岐の数である。単純な数え方としては、図５のプログラムにはｉｆ文が６個（１３、２０、２１、３４、３６、３８行目）、ｗｈｉｌｅ文が１個（３３行目）存在するので、合計７個の分岐が存在する。一般に分岐の数は、他の条件が全て同じであれば、多ければ多いほど完全なテストをするためのテストケースが多くなることから、分岐数７は複雑度を示す定量値として用いることができる。
【００６７】
同じく分岐に着目する場合でも、２０行目のｉｆ文のように、１つのｉｆ文の中に２つの判定条件を含む場合には、このｉｆ文は分岐を２つ含むという数え方もある。また９行目のreturn文に含まれる判定条件も暗黙の分岐と考え、４つの分岐と数える場合もある。斯かる考え方で分岐数を数えた場合、図５のプログラム中に存在する分岐は、９行目に４個、１３行目に１個、２０行目に２個、２１行目に１個、２２行目に１個、２６行目に１個、３３行目に１個、３４行目に１個、３６行目に２個、３８行目に２個、それぞれ存在し、総分岐数は１６個となる。
【００６８】
また、テストケース数と相関のある定量値として、各言語仕様で定義されている様々な型の変数の数を用いても良い。例えば図５のプログラムには、５個のローカル変数が宣言されている（１８、１９、３０、３１、３２行目）ので、ローカル変数の数に着目すれば図５のプログラムの複雑度は５であると考えられる。これも、グローバル変数を加えても良いし、引数も一種の変数とみなして加えても良い。
【００６９】
また、複雑度としてインタフェース数を用いても良い。例えば図５のプログラムには、引数を１つ持つ関数が４個（７、１１、２４、２８行目）、引数を２つ持つ関数が１個（１６行目）含まれている。引数の数がインタフェース数であると考えた場合、このプログラムのインタフェース数として定量値６を得ることができる。インタフェース数は、どのような単位で外部とのインタフェースを考えるかにも依存する。例えばクラスにおけるパブリック関数の数、ファイル単位での外部公開関数の数等をインタフェース数としても良い。
【００７０】
同じ理由で、ネストレベルが採用される場合もある。例えば図５のプログラムには、３３行目のｗｈｉｌｅ文の中に３４行目のｉｆ文があり、さらにその中に３６行目のｉｆ文がある。つまり分岐が３段階の入れ子になっており、プログラム全体での最大ネストレベルとして定量値３が得られる。さらに、単に最大ネストレベルを用いるのではなく、例えば分岐の中にある分岐は悪影響が強い等の考え方で、各定量値にネストレベルに応じた重み付け係数を乗じた値として複雑度を算出しても良い。
【００７１】
他にも、例えば状態の数等の様々な定量値が採用されているが、一般にテストケース数、保守又は変更に要する工数と相関のある定量値であれば、複雑度として用いることができる。また、複雑度の計算精度を上げる目的で、複数の定量値を組み合わせても良い。例えば分岐数をＢ、変数の数をＶ、インタフェース数をＩ、ネストレベルをＮとして、ｆ（Ｂ、Ｖ、Ｉ、Ｎ）のように所定の重み付けを付して計算しても良い。計算方法は、プログラム全体で一括して計算しても良いし、関数等の単位ごとに個別に計算したものを全体として再計算しても良い。どの定量値を用い、どのように計算するかは、要求される計算精度や複雑度の算出目的に応じて決定すれば足りる。
【００７２】
また、複雑度を示す定量値は、使用するプログラミング言語の仕様を考慮して決定される場合もある。例えば図５のプログラムはＣ言語で記述されているが、Ｃ＋＋、ＪＡＶＡ（登録商標）等のようにクラスの概念を有する言語である場合、クラス構造の複雑度を評価する定量値を考慮しても良い。また、直接ソースコードから複雑度を算出することに限定されるものではなく、中間コード、フローチャート等の設計図から計算しても良い。
【００７３】
逆に、テストケース数、保守又は変更に要する工数との相関の無いパラメータは、複雑度を示す定量値として用いることはできない。例えば、ソースコードの単純な文字数、行数等は、事後メンテナンスを容易にするために丁寧にコメントを付したソースコードであるほど複雑度が高く評価されると考えられ、少なくとも単独では複雑度を示す指標として用いることは不適当である。また図５のプログラムでは、比較的長い変数名（３０、３１、３２行目）を使用しているが、このような長さ（トークンの長さ）はテストケース数とは全く関係なく、保守又は変更に要する工数の点でも一概に長い（短い）方が良いとは言えないので、少なくとも単独では複雑度として用いることはできない。ファンクションポイントの数、画面数等も、単独で複雑度として用いるには不適当である。一般に、単にソフトウェア規模を表すような定量値は、単独で複雑度として用いるには不適当である（ただし、複雑度を算出する場合に、本来の複雑度を表す定量値と共に計算される場合は除く）。
【００７４】
さらに、特定のコーディング規約に沿っているか否かを示す定量値等は、そもそも複雑度と無関係である場合が多く、少なくとも単独では複雑度として用いることはない。ただし、コーディング規約自体に複雑度を下げる効果が認められる場合に限り、用いる場合も生じうる。
【００７５】
図３に戻って、評価値算出部３０７は、複雑度算出部３０６によって算出された複雑度の時系列の推移データに基づいて、被験者の能力評価値を算出する。能力評価値は、複雑度数値が低い状態で推移した被験者であればあるほど、また短時間に完了した被験者であればあるほど能力が高いと評価する値とする。すなわち、より短時間によりシンプルな解を見つけた被験者ほど能力が高いと評価する値に設定する。
【００７６】
能力評価値は、品質能力に関する評価値と生産性能力に関する評価値とを独立して算出することができる。例えば複雑度は元来品質を示す指標であり、被験者Ａと被験者Ｂとが同程度の所要時間であり、Ａの複雑度がＢの複雑度よりも低く推移した場合、Ａの品質能力はＢの品質能力よりも高いと評価することができる。またＡの複雑度とＢの複雑度とは同程度で推移しているが、Ａの方がＢよりも短期間に完了した場合は、Ａの方がＢよりも生産性が高いと評価することができる。
【００７７】
さらに補正情報として記憶されている、被験者が文法エラーを発生させた時刻、エラーの種類、文法エラーの数の累計値、論理エラーを発生させた時刻、エラーの種類、論理エラーの数の累計値等々を使用して、評価者は、得られた評価値に被験者が実際に発生させたエラーという観点からの補正を加えることもできる。
【００７８】
以下、被験者にプログラミング課題を提示し、被験者のプログラミング作業から能力評価のためのデータを収集し、被験情報記憶部１３１に記憶するまでの処理手順を説明する。図６は、本発明の実施の形態に係る能力評価装置１０のＣＰＵ１１のデータ収集処理の手順を示すフローチャートである。
【００７９】
図６において、能力評価装置１０のＣＰＵ１１は、事前に課題情報記憶部１３２に記憶されているプログラミング課題を出力装置（表示装置）１５に表示する（ステップＳ６０１）。表示装置は、通信装置１６を介して接続されている外部コンピュータの表示装置であっても良い。また印刷装置を用いて印字出力しても良いし、あらかじめ印刷されたものを被験者に渡しても良い。また、被験者に口頭で課題内容を伝えても良い。
【００８０】
ＣＰＵ１１は、タイマによる計時を開始し（ステップＳ６０２）、入力装置１４又は通信装置１６を介して接続されている外部コンピュータから、文字入力を受け付けたか否かを判断する（ステップＳ６０３）。なお、文字入力とは、テキストデータの入力に限定されるものではなく、削除、改行、タブ、カーソル移動、コピー＆ペースト、検索操作等の編集操作に関連する制御コードの入力も含む。
【００８１】
ＣＰＵ１１が、文字入力を受け付けていないと判断した場合（ステップＳ６０３：ＮＯ）、ＣＰＵ１１は、文字入力の待ち状態となる。ＣＰＵ１１が、文字入力を受け付けたと判断した場合（ステップＳ６０３：ＹＥＳ）、ＣＰＵ１１は、被験者のプログラミング作業の任意のタイミングでのソースコードを復元することができるフォーマットで基本情報記憶部１３１１に記憶する（ステップＳ６０４）。なお、全ての基本情報を記憶しても良いし、評価値の算出精度を維持することができる範囲で間引いて記憶しても良い。
【００８２】
ＣＰＵ１１は、被験者から文法エラーチェックの開始指示を受け付けたか否かを判断し（ステップＳ６０５）、ＣＰＵ１１が、開始指示を受け付けていないと判断した場合（ステップＳ６０５：ＮＯ）、ＣＰＵ１１は、開始指示の待ち状態となる。ＣＰＵ１１が、開始指示を受け付けたと判断した場合（ステップＳ６０５：ＹＥＳ）、ＣＰＵ１１は、被験者が開始指示の受け付け時点で作成していたソースコードに対して文法エラーチェックを実行し、文法エラーチェックの開始指示を受け付けた時刻を補正情報記憶部１３１２に記憶して（ステップＳ６０６）、文法エラーが存在するか否かを判断する（ステップＳ６０７）。なお、文法エラーが存在するか否かは、コンパイラ言語である場合には、市販のコンパイラがコンパイル結果として出力する文字列に基づいて判断すれば良い。また同時に実行可能モジュールを生成しても良い。さらに、補正情報記憶部１３１２に文法エラーチェックの開始指示を受け付けた時刻を記憶することに限定されるものではなく、例えば文法エラーチェックの完了時刻であっても良い。
【００８３】
ＣＰＵ１１が、文法エラーが存在すると判断した場合（ステップＳ６０７：ＹＥＳ）、ＣＰＵ１１は、存在する文法エラーの種類及び数を、補正情報記憶部１３１２に追加して記憶し（ステップＳ６０８）、処理をステップＳ６０３へ戻して、上述した処理を繰り返す。なお、フローには示していないが、文法エラーが存在しない場合であっても、文法エラーが存在しない旨を示す情報は、文法エラーチェックの完了時刻に対応付けて補正情報記憶部１３１２に記憶される。
【００８４】
ＣＰＵ１１が、文法エラーが存在しないと判断した場合（ステップＳ６０７：ＮＯ）、ＣＰＵ１１は、ステップＳ６０８をスキップして、被験者から論理エラーチェックの開始指示を受け付けたか否かを判断する（ステップＳ６０９）。ＣＰＵ１１が、開始指示を受け付けていないと判断した場合（ステップＳ６０９：ＮＯ）、ＣＰＵ１１は、開始指示の待ち状態となる。ＣＰＵ１１が、開始指示を受け付けたと判断した場合（ステップＳ６０９：ＹＥＳ）、ＣＰＵ１１は、被験者が開始指示の受け付け時点で作成していたプログラムに対して、課題情報記憶部１３２に事前に記憶されているテストケースに従った単体テストを実行し、論理エラーチェックの開始指示を受け付けた時刻を補正情報記憶部１３１２に記憶して（ステップＳ６１０）、論理エラーが存在するか否かを判断する（ステップＳ６１１）。なお、論理エラーが存在するか否かは、テストケースの入力に対して、想定されている正しい出力を得ることができたか否かに基づいて判断すれば良い。
【００８５】
ＣＰＵ１１が、論理エラーが存在しないと判断した場合（ステップＳ６１１：ＮＯ）、ＣＰＵ１１は、プログラムが完成したと判断して処理を終了する。ＣＰＵ１１が、論理エラーが存在すると判断した場合（ステップＳ６１１：ＹＥＳ）、ＣＰＵ１１は、存在する論理エラーの種類及び数を、補正情報記憶部１３１２に追加して記憶し（ステップＳ６１２）、処理をステップＳ６０３へ戻して、上述した処理を繰り返す。なお、フローには示していないが、論理エラーが存在しない場合であっても、論理エラーが存在しない旨を示す情報は、論理エラーチェックの完了時刻に対応付けて補正情報記憶部１３１２に記憶される。また、被験者が、ソースコード整形等を行う意思を有する場合に備えて、処理を終了するか、さらにプログラミング作業を継続するかの判断を被験者に任せても良い。
【００８６】
以上のように図６のフローチャートには、文法エラー及び論理エラーが除去される除去過程が含まれている。該除去過程は外部仕様の同一性を保証する上で重要である。プログラミング課題が同一であっても、それだけでは作成されたプログラムの外部仕様が同一であることは保証されない。例えば被験者Ａのプログラムにはバグが残存し、被験者Ｂのプログラムにはバグが存在しない場合、これは外部仕様に相違があるのと等価であり、その相違は複雑度に影響する。この状態で被験者Ａと被験者Ｂとの複雑度推移を比較しても、その差異が外部仕様の差異によるのか被験者の能力の差異によるのか判別できない。図６のフローチャートでは、文法エラー及び論理エラーが除去される除去過程が含まれているので、このような懸念はない。
【００８７】
図７は、プログラミング課題の表示画面及び課題プログラムの編集画面の例示図である。図７において、課題／編集エリア７１では、作成すべきプログラミング課題の表示と、課題プログラムの編集を、タブ７７を選択することで随時切り替えながら行うことができる。
【００８８】
ビルド／実行結果表示エリア７２では、文法エラーチェック及び論理エラーチェックの結果等を表示する。文法エラーチェックの結果としては、文法エラーの種類を示すエラーコード、ソースコード上の位置等を示す情報が文法エラーごとに表示される。論理エラーチェックの結果としては、論理エラーの種類を示すエラーコード等の情報が表示される。
【００８９】
プログラミング課題の表示は、右上の開始ボタン７３がマウス等で選択された時点から開始される。文法エラーチェック処理は、ビルドボタン７４がマウス等で選択された時点から開始される。なお、図７の例ではコンパイラ言語であるＣ言語を用いていることを前提としているので、ビルドボタン７４としている。
【００９０】
論理エラーチェックは、完了ボタン７６がマウス等で選択されたタイミングで開始される。なお、図７の例では、被験者に対して、論理エラーチェックはプログラムが完成したという自信がある場合に起動するよう指導することを前提としており、ボタン名称を「完了」としている。また、実行ボタン７５がマウス等で選択されることにより、被験者は論理エラーチェックとは別に、自分でプログラムを走らせて結果を確認することもできる（いわゆるprintfデバッグである）。
【００９１】
いずれかのテストケースでエラーが発生した場合、論理エラーが存在することを示す情報がビルド／実行結果表示エリア７２に表示され、被験者に対してソースコードの修正を促す。全てのテストケースでエラーが無かった場合は終了となる。
【００９２】
以上、能力評価のためのデータ収集プロセスを説明したが、以下に能力評価装置１０が収集したデータに基づいて能力評価値を算出する処理手順を説明する。図８は、本発明の実施の形態に係る能力評価装置１０のＣＰＵ１１の能力評価値算出の処理手順のフローチャートを示す。
【００９３】
まずＣＰＵ１１は、基本情報記憶部１３１１に記憶されているソースコードの時系列の推移情報を用いてプログラミング作業の過程におけるソースコードを順次復元しながら複雑度を時系列に算出し、複雑度の時系列推移データを作成する（ステップＳ８０１）。
【００９４】
複雑度は、ソースコードを入力として算出される。簡便な算出方法として、例えばＭｃＣａｂｅの複雑度における判定条件（複合条件も含む）の数に１を加えた値である基本パス数を算出の基礎として用いても良い。基本パス数が増大するほど、複雑度も増大していると考えることができるからである。
【００９５】
より評価精度を上げる必要がある場合、上述した複雑度の算出の基礎に、変数の種類及び数、関数等の手続きの数、モジュール間インタフェースの数、ソースコードの規模（例えば語数）等のソースコードの複雑さに関連するパラメータを加え、所定の重み付けを行って演算しても良い。また算出の基礎としてＭｃＣａｂｅ以外の指標を用いることも可能である。
【００９６】
複雑度の算出に用いる指標、パラメータは、要求される評価精度に応じて決定すれば良い。例えば初心者に近いプログラマと、企業において定常的に高難易度モジュールを担当している優秀なプログラマとの差異を検出するのであれば、複雑度の差が非常に大きいと考えられることから、単にＭｃＣａｂｅ指標を適用するだけで能力の差異を検出することができる。一方、被験者Ａと被験者Ｂとの能力の差異が非常に小さい場合（例えば２倍程度の場合）は、より多面的な指標、パラメータ等を用いて複雑度の算出精度を上げれば良い。
【００９７】
図９は、プログラミング能力評価装置１０によって算出された複雑度の推移データの例示図である。図９に示すように、タイマによる計時を開始してからのサンプリング経過時間ごとの複雑度９１が算出されている。図９では、複雑度９１の算出に、上記ＭｃＣａｂｅ指標に加えてプログラムの語数も併用している。
【００９８】
図８に戻って、ＣＰＵ１１は、被験者の姿勢による影響を除去するため、得られた複雑度推移データから能力評価に使用する有効区間を抽出する。「被験者の姿勢による影響」とは、例えば被験者Ａは充分に単体テスト、ソース整形等を行いプログラミング作業を完了したのに対し、被験者Ｂはコーディング中に偶然論理エラーチェックが存在しないと判断され、そのままプログラミング作業を完了した、といった場合に発生する。この例では、たとえ被験者Ａと被験者Ｂとの所要時間、最終複雑度が同じであったとしても、当然ながら評価値としては被験者Ａの方が高く算出されなければならない。このような場合の評価値を正確に算出するために複雑度推移データから有効区間を抽出する。
【００９９】
有効区間を抽出するために、ＣＰＵ１１は、得られた複雑度の推移データに対して近似曲線を作成する（ステップＳ８０２）。近似曲線の作成方法としては、例えば二次曲線による最小二乗近似を組み合わせても良いし、あらかじめ複数の曲線パターンを課題情報記憶部１３２に記憶しておき、パターンマッチングにより最も近似する曲線パターンで近似しても良い。
【０１００】
なお、近似曲線は、原理的には数点のサンプリング点からでも作成することができるが、精度を確保する上では数十点以上のサンプリング点が存在することが望ましい。サンプリング点を決定する方法としては、所定時間毎にサンプリング点を設ける方法、所定個数の文字入力があったタイミングをサンプリング点とする方法等、特に限定されるものではない。また、サンプリング点における代表値の決定方法としては、上述した各所定時間又は各所定個数内の複雑度の平均値を求める方法等を用いることができる。
【０１０１】
図１０は、能力評価装置１０によって算出された近似曲線の例示図である。図１０では、所要時間を１００分割し、それぞれの区間の複雑度９１の平均値を代表値として近似曲線１０１を作成している。また近似方法としては、被験者が作成したソースコードの最終複雑度と所要時間から曲線の縦横比を決定した後に、あらかじめ課題情報記憶部１３２に記憶されている約２０００通りの曲線とのパターンマッチングを行っている。課題情報記憶部１３２に記憶されている曲線パターン群は、処理を簡便にするために、複雑度が一定時間０で推移した後に単調増加に転じ、ある複雑度で収束するパターンに統一している。
【０１０２】
図８に戻って、近似曲線１０１が得られた時点で、ＣＰＵ１１は有効区間を抽出する（ステップＳ８０３）。図１１は、能力評価装置１０によって抽出された有効区間の例示図である。有効区間１１２は、処理を簡便にするために、複雑度が０から単調増加に転じた点を起点とし、単調増加が終了した点を終点としている。有効区間１１２は、初期設計区間１１１やテスト区間１１３を含まない純粋なプログラミング作業部分とみなすことができる。ここで、初期設計区間１１１やテスト区間１１３を全て除外するのも精度上問題があるとの考え方もあるので、初期設計区間１１１やテスト区間１１３を所定の重み付けで考慮して有効区間１１２を抽出しても良い。
【０１０３】
図１２は、有効区間１１２を補正する必要がある場合の、能力評価装置１０によって作成された近似曲線１０１の例示図である。抽出される有効区間１１２としては、図１１では全体の１部分として抽出されている。しかし、図１２に示すように有効区間１１２は拡大された有効区間１１２’として抽出するべき場合もある。
【０１０４】
図１２に示すようなケースとしては、被験者がプログラミング中に試しに論理エラーチェックをした場合に、偶然にも論理エラーが検出されなかったケース、被験者がテストを軽視する姿勢であるケース等が想定される。斯かる場合、被験者は本来もっと所要時間がかかったものと解釈することができ、有効区間１１２を拡大して能力評価することが妥当である。
【０１０５】
図８に戻って、最後にＣＰＵ１１は、抽出された有効区間１１２に対して所定の演算を行い、能力評価値を算出する（ステップＳ８０４）。能力評価値の簡便な算出方法としては、例えば有効区間１１２の近似曲線１０１に対して積分値を求める方法がある。すなわち、時間軸と近似曲線１０１で囲まれた面積を求める方法である。斯かる面積は、被験者がプログラミング作業中に取り組んだ複雑度の総量であると考えられる。面積がより小さい被験者は、プログラミング課題を、より短時間に、よりシンプルに解決したことになるので、面積が小さいほど能力が高いと評価することができる。したがって、積分値（面積）がそのまま評価値となる。
【０１０６】
上記積分値（面積）は、絶対値を算出するのではなく、別途基準となる評価値を設けておき、基準となる評価値との比率で算出しても良い。例えば既知の被験者Ａに特定のプログラミング課題を解いてもらい、被験者Ａのデータを課題情報記憶部１３２に記憶しておく。そして、以後の未知の被験者に同じプログラミング課題を解いてもらう場合、記憶してある「被験者Ａのデータ」との比率で能力評価値を算出できる。このように既知の人物の能力との比率で算出する方法は、開発現場にとって評価値の意味合いを直感的に理解しやすいというメリットがある。
【０１０７】
また積分値（面積）の算出に当たって、近似曲線１０１を使用するのではなく、複雑度の生データを使用しても良い。例えば複雑度の推移データの区間平均値を加算する方法であっても良い。この場合、意味的には積分であっても、演算としては単なる加算となり、演算処理負荷を軽減することができる。
【０１０８】
さらに近似曲線１０１を用いた場合でも、曲線が充分に単純である場合は、有効区間１１２の時間幅と特定位置の複雑度データと所定の係数とを用いて、単なる乗算で評価値を算出しても良い。
【０１０９】
また別の側面からの能力評価として、上記有効区間１１２において、あるサンプリング点の複雑度が直前のサンプリング点の複雑度よりも小さくなった回数を計数して評価値としても良い。複雑度は、プログラミング作業が順調に進んでいるうちは単調に増加するが、被験者が設計の誤りに気付いた場合、文法エラーや論理エラー等による修正作業が発生した場合等には、一時的に複雑度が下がる場合がある。計数した回数が多い人ほど初期の設計の見通しが甘く、試行錯誤の度合が高いと判断することができる。
【０１１０】
有効区間１１２の抽出された位置、大きさ等から被験者の傾向を示す評価値も得ることができる。例えば抽出された有効区間１１２が複雑度の全推移データの中で極端に前半に位置していた場合は、プログラミング課題をよく読まずに取り掛かる傾向が強いと判断することができる。仕様をよく理解せずにプログラミングを開始するのは、品質に悪影響を与えやすい開発姿勢である。
【０１１１】
逆に、抽出された有効区間１１２が複雑度の全推移データの中で極端に後半に位置していた場合は、よく動作チェックを行わずに完了したと判断することができる。そのような姿勢は、当然ながら品質に悪影響を与える。また、全体の所要時間が非常に長いにも関わらず、抽出された有効区間１１２が極端に狭い場合は、仕様理解や動作チェックにあまりに時間をかけすぎた可能性があり、生産性改善の余地が大きいと判断することができる。有効区間１１２の位置の偏りや全体に占める比率を定量化することは容易である。
【０１１２】
能力評価値は、被験者の品質能力と生産性能力とに独立に算出することも可能である。これは複雑度の推移データ自体が、縦軸に品質に関連の深い複雑度をとり、横軸に生産性に関連の深い時間をとって作成されているからである。
【０１１３】
図１３は、特徴的な４名の被験者Ａ、Ｂ、Ｃ、Ｄの複雑度の推移データを示す例示図である。図１３において、被験者Ａは短時間に高い複雑度に到達したグラフとなっている。手は速いがコードは乱雑な傾向の被験者であり、生産性能力は高いが品質能力が低いパターンを有している。以下同様に、被験者Ｂは生産性能力も品質能力も低く、被験者Ｃは生産性能力も品質能力も高く、被験者Ｄは生産性能力は低いが品質能力は高い、と解釈することができる。
【０１１４】
品質や生産性に関する特性は容易に定量化することができる。最も簡便な定量化方法は、曲線を包含する矩形を描き、矩形の面積と縦横比とを得る方法である。面積と縦横比とに基づいて、図１３に示す４パターンのどこに位置するかを定量的に算出することができる。位置算出の結果は図１４のプロット（黒丸）で示されている。矩形を求めるに当たっては、複雑度の推移データ全体を用いても良いが、有効区間１１２の抽出を考慮した方が評価精度は高い。
【０１１５】
このように、複雑度の推移データを用いることで、近似曲線の作成、有効区間の抽出等を実行することにより、被験者の能力評価値のみならず特性にまで踏み込んだ定量値を算出することができる。上述した例の他にも、複雑度に基づいて算出され、プログラミング能力を評価するに値する評価指標であれば、評価値として用いることができる。
【０１１６】
ＣＰＵ１１は、算出した定量値を、一覧表又はグラフの形式にて評価者に提示する。提示方法は、出力装置１５に表示しても良いし、印刷しても良いし、後に他のソフトウェアや他のコンピュータで閲覧されることを想定して所定の形式で記憶又は送信しても構わない。
【０１１７】
最後にＣＰＵ１１は、記憶装置１３に記憶されている補正情報（被験者のエラーチェックタイミング、発生したエラーの情報等）を、一覧表又はグラフの形式にて評価者に提示する。提示するフォーマットは、その被験者が、いつエラーチェックを行い、そのときにどんなエラーが発生したのかが評価者にわかれば、どのようなフォーマットでも構わない。また提示方法は、出力装置１５に表示しても良いし、印刷しても良いし、後に他のソフトウェアや他のコンピュータで閲覧されることを想定して所定の形式で記憶又は送信しても構わない。
【０１１８】
図８のフローチャートでは、能力評価値の算出にあたって補正情報（被験者のエラーチェックタイミング、発生したエラーの情報等）を使用していない。使用しない理由は、能力評価装置１０を企業における入社試験等に利用する場合、３０分〜２時間程度で完了するプログラミング課題であることが望まれるが、そのような短時間で被験者が発生させるエラーは偶発性が強く（従って再現性が低く）、能力評価値のパラメータとしては不適当なためである。
【０１１９】
ただし、あまりにも極端なエラー状況であった場合、例えば文法エラーチェックも論理エラーチェックも１回で通過させるような優秀な被験者、逆にあまりにも大量のエラーを出しながらプログラミングを行う被験者等がいた場合は、能力評価値に加えてエラー情報も考慮すべきである。このような理由から、補正情報は能力評価値の算出には用いないが、評価者に提示はしている。
【０１２０】
しかし、被験者の時間的制約が緩い場合、例えば企業における教育研修で統計的に有意な期間（例えば数日等）が許される場合はこの限りではなく、補正情報を能力評価値の算出に用いても良い。
【０１２１】
その他、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種の変形、置換等が可能であることは言うまでもない。例えば、プログラミング能力評価装置をサーバとし、ユーザがコーディングするクライアントからの入力を受け付けるシステムであり、プログラマごとの評価情報をサーバにて一括管理しても良い。
【０１２２】
以上の実施例では、能力評価のため被験者にプログラミング作業をさせる場合について説明した。しかし、プログラミング作業は１つの例であり、本発明に係る能力評価値算出の本質ではない。作業内容としては、被験者によって作成される最終成果物及び中間成果物から複雑度を算出可能であれば、どのような作業であっても良い。
【０１２３】
例えば作業内容として作図作業を用いても良い。作図内容としては、構造設計的なものであればＣＡＤ等を用いて何らかの構造物を作図させる作業が考えられる。また論理設計的なものであれば、フローチャート、クラス図等を作成させる作業が考えられる。あるいは、そのような本格的なものでなくても、幼児でも理解できるような単純な図形を組み合わせて何かを作図させる作業でも良い。
【０１２４】
一般に、複数の図形要素を連結する形で何らかの構造を作図させる作業が、最も複雑度を計算しやすい。この場合、連結された複数の図形要素群を一種の回路網とみなすことが可能である。この網の閉領域の数、使用した要素群の数等を、プログラミングにおける分岐数、語数等に対応するものとみなせば、プログラミングにおける複雑度算出、評価値算出の処理をそのまま適用することができる。
【０１２５】
また、別の作業内容として、自然言語を用いて課題の解決手段を表現させる作業を用いても良い。この場合、自然言語をプログラミング言語の一種とみなして複雑度を計算する。ただし、自然言語はプログラミング言語と比較してはるかに自由度が高く、複雑度計算、仕様検証（課題の仕様を満たしていることの検証）が困難になるという問題がある。
【０１２６】
この問題を解決するため、高度な自然言語解析アルゴリズムを工夫しても良い。しかし、本発明の目的は自然言語解析そのものではなく能力評価であるので、自然言語の自由度を制限する方向で課題を作成するのが現実的である。
例えば、被験者が解決手段の表現に使用できる名詞、動詞、接続詞等を語群として提供し、提供された語群からの選択によって解決手段を表現するよう指示すればよい。制限を非常に強くした場合は、例えば「もし：Ａ：ならば：Ｂし、そうでなければ：Ｃする」のように自然言語でプログラミングを行っているのと等価になるので複雑度計算、仕様検証等は容易となる。どこまで制限を強くするかは、用いる自然言語解析アルゴリズムの性能との兼ね合いで決定すればよい。
【図面の簡単な説明】
【０１２７】
【図１】本発明の実施の形態に係る能力評価装置を、ＣＰＵを用いて具現化した場合のハードウェア構成を示すブロック図である。
【図２】被験情報記憶部に記憶されるデータ構成の例示図である。
【図３】本発明の実施の形態に係る能力評価装置の機能ブロック図である。
【図４】提示されるプログラミング課題の具体例を示す例示図である。
【図５】提示されたプログラミング課題に応じて被験者が作成したＣ言語によるプログラムの例示図である。
【図６】本発明の実施の形態に係る能力評価装置のＣＰＵのデータ収集処理の手順を示すフローチャートである。
【図７】プログラミング課題の表示画面及び課題プログラムの編集画面の例示図である。
【図８】本発明の実施の形態に係る能力評価装置のＣＰＵの能力評価値算出の処理手順のフローチャートを示す。
【図９】プログラミング能力評価装置によって算出された複雑度の推移データの例示図である。
【図１０】能力評価装置によって算出された近似曲線の例示図である。
【図１１】能力評価装置によって抽出された有効区間の例示図である。
【図１２】有効区間を補正する必要がある場合の、能力評価装置によって作成された近似曲線の例示図である。
【図１３】特徴的な４名の被験者の複雑度の推移データを示す例示図である。
【符号の説明】
【０１２８】
１０  能力評価装置
１１  ＣＰＵ
１２  ＲＡＭ
１３  記憶装置
１４  入力装置
１５  出力装置
１６  通信装置
１７  可搬型ディスクドライブ
１８  内部バス
９０  可搬型記録媒体
１００  コンピュータプログラム
１３１  被験情報記憶部
１３２  課題情報記憶部
【図１】
2010033501.tif 000003
【図２】
2010033501.tif 000004
【図３】
2010033501.tif 000005
【図４】
2010033501.tif 000006
【図５】
2010033501.tif 000007
【図６】
2010033501.tif 000008
【図７】
2010033501.tif 000009
【図８】
2010033501.tif 000010
【図９】
2010033501.tif 000011
【図１０】
2010033501.tif 000012
【図１１】
2010033501.tif 000013
【図１２】
2010033501.tif 000014
【図１３】
2010033501.tif 000015