IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-16741情報処理プログラム、情報処理方法、および情報処理装置
<>
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図1
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図2
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図3
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図4
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図5
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図6
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図7
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図8
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図9
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図10
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図11
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図12
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図13
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図14
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図15
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図16
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図17
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図18
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図19
  • 特開-情報処理プログラム、情報処理方法、および情報処理装置 図20
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024016741
(43)【公開日】2024-02-07
(54)【発明の名称】情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
   G06F 8/73 20180101AFI20240131BHJP
【FI】
G06F8/73
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022119065
(22)【出願日】2022-07-26
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】西村 駿人
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BB11
5B376BC38
5B376DA22
(57)【要約】
【課題】アノテーション作業の作業者にかかる作業負担の低減化を図ること。
【解決手段】情報処理装置は、ソースコード群1500={ソースコードA,B,C,D}を取得する。情報処理装置は、ソースコードBとソースコードCとが、対応するソースコードの組み合わせであると特定する。情報処理装置は、対応するソースコードBとソースコードCとの組み合わせが、同一の作業者に割り当てられるよう、ソースコードA,B,C,Dを、作業者X,Yに割り当てる。
【選択図】図15
【特許請求の範囲】
【請求項1】
複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
前記展開する処理は、
前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの名前の置き換えを含む当該モジュールの定義が含まれる場合、当該ソースコードのうち当該モジュールの名前の置き換えを解除する、ことを特徴とする請求項1に記載の情報処理プログラム。
【請求項3】
前記展開する処理は、
前記複数のソースコードそれぞれについて、クラスの定義と、当該クラスの名前を用いたインスタンスの呼び出しとが含まれる場合、当該ソースコードのうち当該クラスの名前を用いたインスタンスの呼び出しを、当該クラスの定義と統合する、ことを特徴とする請求項1または2に記載の情報処理プログラム。
【請求項4】
前記特定する処理は、
展開後の前記複数のソースコードそれぞれに対応する抽象構文木を生成し、
生成した前記抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする請求項1または2に記載の情報処理プログラム。
【請求項5】
前記特定する処理は、
展開後の前記複数のソースコードそれぞれに変数名が含まれれば、当該変数名をマスクデータに置き換えた、当該ソースコードに対応する抽象構文木を生成し、
生成した前記抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする請求項1または2に記載の情報処理プログラム。
【請求項6】
前記特定する処理は、
生成した前記抽象構文木のうち、同一の式構造を表現する部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする請求項4に記載の情報処理プログラム。
【請求項7】
複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項8】
複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、教師あり学習のために、複数のデータに対するアノテーション作業を、複数の作業者が分担して実施することがある。アノテーション作業は、データにラベルを付与することである。データは、例えば、ソースコードである。アノテーション作業は、具体的には、ソースコードの各行に、当該行の処理内容に対応するラベルを付与することである。
【0003】
先行技術としては、例えば、複数のソースコードそれぞれにおける処理構造を表す複数のグラフそれぞれに対して、知識情報に基づき、グラフ内の各ノードに対応する要素情報から特定される概念情報を、当該ノードに関連する属性情報として付与するものがある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】国際公開第2020/049622号
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、アノテーション作業の作業者にかかる作業負担の増大化を抑制することが難しい。例えば、作業者が、互いに関連しない2以上のソースコードに対するアノテーション作業を担当する場合、作業負担が増大する傾向がある。
【0006】
1つの側面では、本発明は、アノテーション作業の作業者にかかる作業負担の低減化を図ることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様によれば、複数のソースコードを取得し、取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する情報処理プログラム、情報処理方法、および情報処理装置が提案される。
【発明の効果】
【0008】
一態様によれば、アノテーション作業の作業者にかかる作業負担の低減化を図ることが可能になる。
【図面の簡単な説明】
【0009】
図1図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
図2図2は、情報処理システム200の一例を示す説明図である。
図3図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
図4図4は、情報処理装置100の機能的構成例を示すブロック図である。
図5図5は、情報処理システム200の機能的構成例を示すブロック図である。
図6図6は、ソースコードを変換する一例を示す説明図(その1)である。
図7図7は、ソースコードを変換する一例を示す説明図(その2)である。
図8図8は、ソースコードを変換する一例を示す説明図(その3)である。
図9図9は、ソースコードを変換する一例を示す説明図(その4)である。
図10図10は、ソースコードを変換する一例を示す説明図(その5)である。
図11図11は、ソースコード群を作業者数分のグループに分類する一例を示す説明図(その1)である。
図12図12は、ソースコード群を作業者数分のグループに分類する一例を示す説明図(その2)である。
図13図13は、ソースコード群を作業者数分のグループに分類する一例を示す説明図(その3)である。
図14図14は、ソースコード群を作業者数分のグループに分類する一例を示す説明図(その4)である。
図15図15は、ソースコード群を複数の作業者に割り当てる一例を示す説明図である。
図16図16は、展開する関数を選別する効果の一例を示す説明図である。
図17図17は、全体処理手順の一例を示すフローチャート(その1)である。
図18図18は、全体処理手順の一例を示すフローチャート(その2)である。
図19図19は、全体処理手順の一例を示すフローチャート(その3)である。
図20図20は、変換処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
【0011】
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、アノテーション作業を支援するためのコンピュータである。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0012】
アノテーション作業は、例えば、教師あり学習に用いられる教師データを生成するために実施され、データにラベルを付与することにより教師データを生成する。データは、例えば、ソースコードである。ラベルは、例えば、ソースコードの各行に付与され、当該行の処理内容に対応する属性を示す情報である。
【0013】
複数のソースコードに対するアノテーション作業を実施する場合、複数のソースコードに対するアノテーション作業を複数の作業者が分担して実施することにより、複数のソースコードに対するアノテーション作業の作業効率の向上を図ることがある。
【0014】
ここで、ラベルを付与する対象となるソースコードの数が多くなるほど、アノテーション作業を分担して実施するそれぞれの作業者にかかる作業負担が増大する傾向があるため、それぞれの作業者にかかる作業負担の増大化を抑制することが望まれる。
【0015】
しかしながら、従来では、アノテーション作業を分担して実施するそれぞれの作業者にかかる作業負担の増大化を抑制することが難しい。
【0016】
例えば、ソースコードの内容に依らず、複数のソースコードをそれぞれの作業者に均等に割り当てて、それぞれの作業者が自身に割り当てられた2以上のソースコードに対するアノテーション作業を実施する手法が考えられる。具体的には、複数のソースコードを無作為にそれぞれの作業者に均等に割り当てることが考えられる。
【0017】
この手法では、作業者に、互いに関連しない2以上のソースコードが割り当てられ、当該作業者が、互いに関連しない2以上のソースコードに対するアノテーション作業を実施することになる場合がある。この場合、作業者は、自身に割り当てられた2以上のソースコードのうち、いずれかのソースコードに対するアノテーション作業を実施した結果および経験などを、他のソースコードに対するアノテーション作業を実施する際に活用することができない。そして、作業者は、それぞれのソースコードに対するアノテーション作業を独立して実施することになる。従って、作業者にかかる作業負担の増大化を抑制することが難しい。
【0018】
また、この手法で、偶然、作業者に、互いに関連する異なるソースコードのペアを含む2以上のソースコードが割り当てられ、当該作業者が、当該ペアを含む2以上のソースコードに対するアノテーション作業を実施することになる場合が考えられる。この場合、作業者は、いずれのソースコードのペアが関連するのかを把握することができない。このため、作業者は、自身に割り当てられた2以上のソースコードのうち、いずれかのソースコードに対するアノテーション作業を実施した結果および経験などを、他のソースコードに対するアノテーション作業を実施する際に活用することができない。そして、作業者は、それぞれのソースコードに対するアノテーション作業を独立して実施することになる。従って、作業者にかかる作業負担の増大化を抑制することが難しい。
【0019】
ここで、複数のソースコードのうち、互いに関連する異なるソースコードの組み合わせを含む2以上のソースコードを同一の作業者に割り当てれば、当該作業者にかかる作業負担の増大化を抑制し易くなると考えられる。
【0020】
これに対し、上記参考文献1を参照して、それぞれのソースコードに対応する抽象構文木に基づいて、互いに関連する異なるソースコードの組み合わせを特定し、当該組み合わせを含む2以上のソースコードを同一の作業者に割り当てようとする手法が考えられる。
【0021】
例えば、前提となる知識情報に基づいて、それぞれのソースコードを抽象構文木に変換し、変換した抽象構文木同士を比較することにより、互いに関連する異なるソースコードの組み合わせを特定する。知識情報は、例えば、ソースコードに現れる単語などの要素と、当該要素を纏める概念情報などを示す。
【0022】
この手法でも、作業者にかかる作業負担の増大化を抑制することが難しい場合がある。例えば、ソースコード内の関数が呼び出す処理内容を適切に考慮することができず、互いに関連する異なるソースコードの組み合わせを特定することが難しくなる。また、例えば、ソースコード内のモジュールに命名する定義文を適切に考慮することができず、互いに関連する異なるソースコードの組み合わせを特定することが難しくなる。また、例えば、ソースコード内のクラスのインスタンス化を適切に考慮することができず、互いに関連する異なるソースコードの組み合わせを特定することが難しくなる。
【0023】
これらのことから、この手法では、互いに関連する異なるソースコードの組み合わせを特定することが難しく、当該組み合わせを含む2以上のソースコードを同一の作業者に割り当てることは難しい。一方で、ソースコード内のすべての関数が呼び出す処理内容を考慮した上で、ソースコードを抽象構文木に変換するとすれば、変換にかかる処理負担の増大化を招くという問題が発生することになる。
【0024】
そこで、本実施の形態では、アノテーション作業の作業者にかかる作業負担の低減化を図ることができる情報処理方法について説明する。以下の説明では、抽象構文木を「AST(Abstract Syntax Tree)」と表記する場合がある。
【0025】
図1において、(1-1)情報処理装置100は、複数のソースコード101を取得する。情報処理装置100は、例えば、複数のソースコード101を、他のコンピュータから受信することにより取得する。情報処理装置100は、例えば、自装置利用者の操作入力に基づき、複数のソースコード101の入力を受け付けることにより、複数のソースコード101を取得してもよい。情報処理装置100は、例えば、自装置に接続された記録媒体から、複数のソースコード101を読み出すことにより取得してもよい。
【0026】
(1-2)情報処理装置100は、取得した複数のソースコード101それぞれについて、当該ソースコード101にモジュールの定義が含まれるか否かを判定する。モジュールの定義は、例えば、import文である。モジュールの定義は、例えば、モジュールを読み込むことである。モジュールの定義は、例えば、モジュールに命名することを含んでいてもよい。情報処理装置100は、ソースコード101にモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれるか否かを判定する。所定のライブラリは、ソースコード101の開発者が開発したモジュールではなく、公開されたモジュールを規定するライブラリである。
【0027】
情報処理装置100は、ソースコード101にモジュールの定義が含まれ、当該モジュールが所定のライブラリに含まれなければ、当該ソースコード101のうち当該モジュールに対応する関数を検索する。モジュールに対応する関数は、モジュールに規定された関数である。情報処理装置100は、当該ソースコード101のうち検索した関数を展開する。展開は、関数を、関数が呼び出す処理内容そのものに置き換えることである。情報処理装置100は、例えば、複数のソースコード101のうち少なくとも1以上のソースコード101に含まれる関数を展開する。これにより、情報処理装置100は、ソースコード101内の関数が呼び出す処理内容を考慮して、ソースコード101同士の類似性を評価可能にすることができる。
【0028】
(1-3)情報処理装置100は、展開後の複数のソースコード101それぞれを比較した結果に基づいて、複数のソースコード101のうち、アノテーション作業を共に実施する2以上のソースコード101を含むグループを特定する。展開後の複数のソースコード101は、例えば、少なくとも1以上のソースコード101に含まれる関数を展開した後の複数のソースコード101である。
【0029】
情報処理装置100は、例えば、展開後の複数のソースコード101それぞれを比較した結果に基づいて、複数のソースコード101のうち、処理内容が類似する異なる2以上のソースコード101の組み合わせを特定する。情報処理装置100は、例えば、特定した組み合わせが同一のグループに含まれるよう、複数のソースコード101を複数のグループに分類することにより、特定した組み合わせを含めたグループを特定する。
【0030】
情報処理装置100は、具体的には、展開後の複数のソースコード101それぞれに対応する抽象構文木を生成する。情報処理装置100は、具体的には、生成した抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木の組み合わせを特定する。情報処理装置100は、具体的には、特定した組み合わせのそれぞれの抽象構文木に対応するソースコード101を含めたグループを特定する。これにより、情報処理装置100は、ソースコード101同士の類似性を評価し、互いに関連する2以上のソースコード101を同一のグループに分類することができる。
【0031】
(1-4)情報処理装置100は、アノテーション作業を共に実施する2以上のソースコード101の対応関係を作業者が把握可能に、当該2以上のソースコード101を含むグループを作業者が参照可能に出力する。これにより、情報処理装置100は、アノテーション作業を実施する作業者にかかる作業負担の増大化を抑制することができる。
【0032】
情報処理装置100は、例えば、作業者が、互いに関連する2以上のソースコード101を含むグループを担当可能にし、アノテーション作業を実施可能にすることができる。また、情報処理装置100は、例えば、作業者が、互いに関連する2以上のソースコード101を把握しつつアノテーション作業を実施可能にすることができる。
【0033】
結果として、情報処理装置100は、例えば、作業者が、いずれかのソースコード101に対するアノテーション作業を実施した結果および経験などを、他のソースコード101に対するアノテーション作業を実施する際に活用し易くすることができる。従って、情報処理装置100は、例えば、アノテーション作業を実施する作業者にかかる作業負担の増大化を抑制することができる。
【0034】
情報処理装置100は、ソースコード101内の関数が呼び出す処理内容を適切に考慮して、互いに関連する2以上のソースコード101を含むグループを精度よく特定可能にすることができる。このため、情報処理装置100は、アノテーション作業を実施する作業者にかかる作業負担の増大化を抑制し易くすることができる。
【0035】
例えば、図1において、ソースコードA~Hが存在し、ソースコードC,Fが互いに関連し、アノテーション作業を実施する作業者X,Yが存在する状況について説明する。ソースコードA,B、C,F,Gは、それぞれ50行のソースコードであるとする。ソースコードD,Eは、それぞれ30行のソースコードであるとする。ソースコードHは、60行のソースコードであるとする。
【0036】
ここで、ソースコードA~Hを、無作為に作業者X,Yに均等に割り当てた場合、ソースコードC,Fがそれぞれ別の作業者に割り当てられることがある。例えば、符号110に示すように、作業者Xに、ソースコードA~Dが割り当てられ、作業者Yに、ソースコードE~Hが割り当てられる。結果として、作業者Xには、180行分の作業負担がかかることになり、作業者Yには、190行分の作業負担がかかることになる。
【0037】
一方で、情報処理装置100は、ソースコードC,Fを特定し、同一の作業者Xに割り当て可能にすることができる。例えば、符号120に示すように、作業者Xに、ソースコードA,C,D,Fが割り当てられ、作業者Yに、ソースコードB,E,G,Hが割り当てられる。これにより、情報処理装置100は、作業者Xが、ソースコードCに対してアノテーション作業を実施した経験および結果を、ソースコードFに対してアノテーション作業を実施する際に活用可能にすることができる。
【0038】
このため、作業者Xは、ソースコードFに対してアノテーション作業を実施する際にかかる作業負担を削減または低減することができる。例えば、作業者Xは、ソースコードFに対してアノテーション作業を実施する際にかかる作業負担を0にすることができる。結果として、作業者Xには、130行分の作業負担がかかることになり、作業者Yには、190行分の作業負担がかかることになる。このように、情報処理装置100は、作業者Xにかかる作業負担の増大化を抑制することができる。
【0039】
ここでは、情報処理装置100が、単独で動作する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のコンピュータと協働する場合があってもよい。例えば、複数のコンピュータが協働して、情報処理装置100としての機能を実現する場合があってもよい。具体的には、クラウド上に、情報処理装置100としての機能が実現される場合があってもよい。
【0040】
(情報処理システム200の一例)
次に、図2を用いて、図1に示した情報処理装置100を適用した、情報処理システム200の一例について説明する。
【0041】
図2は、情報処理システム200の一例を示す説明図である。図2において、情報処理システム200は、情報処理装置100と、クライアント装置201とを含む。
【0042】
情報処理システム200において、情報処理装置100とクライアント装置201とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
【0043】
情報処理装置100は、複数のソースコードを複数の作業者に割り当てて、作業者のアノテーション作業を支援するためのコンピュータである。作業者は、アノテーション作業を実施する人員である。情報処理装置100は、複数のソースコードを取得する。
【0044】
情報処理装置100は、取得した複数のソースコードそれぞれを加工してから、当該ソースコードに対応するASTに変換する。加工は、例えば、関数の展開を含んでいてもよい。加工は、例えば、モジュールの名前解決を含んでいてもよい。加工は、具体的には、モジュールの名前の置き換えを解除することを含む。加工は、例えば、クラスのインスタンス化と、インスタンスの呼び出しとの統合を含んでいてもよい。加工は、具体的には、クラスの名前を用いたインスタンスの呼び出しを、モジュールの名前を用いたインスタンスの呼び出しに変換することを含む。加工の具体例については、例えば、図6図16を用いて後述する。
【0045】
情報処理装置100は、変換したAST同士を比較することにより、複数のソースコードのうち、互いに対応するソースコードの組み合わせを特定する。対応は、例えば、処理内容が関連することである。情報処理装置100は、特定した組み合わせを同一のグループに含むよう、複数のソースコードを複数のグループに分類する。複数のグループは、例えば、作業者数分のグループである。情報処理装置100は、分類した複数のグループを、それぞれ異なる作業者に割り当てることにより、複数のソースコードを、複数の作業者に割り当てる。
【0046】
情報処理装置100は、複数の作業者それぞれに割り当てたグループを、当該作業者が参照可能に出力する。情報処理装置100は、グループと共に、当該グループに含まれる互いに対応するソースコードの組み合わせを特定する情報を出力してもよい。情報処理装置100は、例えば、複数の作業者それぞれに割り当てたグループを、当該作業者に対応するクライアント装置201に送信する。情報処理装置100は、例えば、複数の作業者それぞれに割り当てたグループと共に、当該グループに含まれる互いに対応するソースコードの組み合わせを特定する情報を、当該作業者に対応するクライアント装置201に送信する。
【0047】
これにより、情報処理装置100は、作業者に割り当てた、アノテーション作業の対象となるソースコードを、クライアント装置201が出力可能にすることができる。情報処理装置100は、互いに対応するソースコードの組み合わせを、クライアント装置201が出力可能にすることができる。そして、情報処理装置100は、クライアント装置201を介して、作業者にアノテーション作業を依頼すると共に、作業者にかかる作業負担の低減化を図ることができる。情報処理装置100は、例えば、サーバ、または、PCなどである。
【0048】
クライアント装置201は、アノテーション作業を実施する作業者によって用いられるコンピュータである。クライアント装置201は、グループを、情報処理装置100から受信する。クライアント装置201は、グループと共に、当該グループに含まれる互いに対応するソースコードの組み合わせを特定する情報を、情報処理装置100から受信してもよい。クライアント装置201は、グループを、作業者が参照可能に出力する。クライアント装置201は、グループと共に、当該グループに含まれる互いに対応するソースコードの組み合わせを特定する情報を、作業者が参照可能に出力してもよい。
【0049】
これにより、クライアント装置201は、作業者に割り当てられた、アノテーション作業の対象となるソースコードを、作業者が把握可能にすることができる。クライアント装置201は、互いに対応するソースコードの組み合わせを、作業者が把握可能にすることができる。そして、クライアント装置201は、作業者にかかる作業負担の低減化を図ることができる。クライアント装置201は、例えば、PC、タブレット端末、または、スマートフォンなどである。
【0050】
ここでは、情報処理装置100が、クライアント装置201とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、クライアント装置201としての機能を有し、クライアント装置201としても動作可能である場合があってもよい。
【0051】
(情報処理装置100のハードウェア構成例)
次に、図3を用いて、情報処理装置100のハードウェア構成例について説明する。
【0052】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
【0053】
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることにより、コーディングされている処理をCPU301に実行させる。
【0054】
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
【0055】
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
【0056】
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
【0057】
(クライアント装置201のハードウェア構成例)
クライアント装置201のハードウェア構成例は、具体的には、図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0058】
(情報処理装置100の機能的構成例)
次に、図4を用いて、情報処理装置100の機能的構成例について説明する。
【0059】
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、変換部402と、特定部403と、出力部404とを含む。
【0060】
記憶部400は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
【0061】
取得部401~出力部404は、制御部の一例として機能する。取得部401~出力部404は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
【0062】
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。アノテーション作業の対象となる複数のソースコードを記憶する。ソースコードは、例えば、モジュールの定義を含む。モジュールの定義は、ソースコードに対してモジュールを読み込むことを規定する。モジュールの定義は、例えば、モジュールに命名し、モジュールの名前を、元の名前から指定の名前に置き換える命令文を含んでいてもよい。モジュールの定義は、具体的には、モジュールのimport文である。
【0063】
ソースコードは、例えば、関数を含む。ソースコードは、具体的には、モジュールに関する関数を含む。モジュールに関する関数は、例えば、モジュールに定義された関数である。ソースコードは、例えば、クラスの定義を含む。クラスの定義は、例えば、クラスの命名を含む。ソースコードは、具体的には、モジュールに関するクラスの定義を含む。ソースコードは、例えば、クラスの名前を用いたインスタンスの呼び出しを含む。ソースコードは、例えば、取得部401によって取得される。
【0064】
取得部401は、各機能部の処理に用いられる各種情報を取得する。取得部401は、取得した各種情報を、記憶部400に記憶し、または、各機能部に出力する。また、取得部401は、記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。取得部401は、例えば、自装置利用者の操作入力に基づき、各種情報を取得する。取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
【0065】
取得部401は、例えば、アノテーション作業の対象となる複数のソースコードを取得する。取得部401は、具体的には、複数のソースコードを、他のコンピュータから受信することにより取得する。取得部401は、具体的には、複数のソースコードの入力を受け付けることにより、複数のソースコードを取得する。取得部401は、例えば、複数のソースコードを含む割当依頼を取得することにより、複数のソースコードを取得してもよい。
【0066】
取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、自装置利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。取得部401は、具体的には、複数のソースコードを取得したことを、変換部402と特定部403との処理を開始する開始トリガーとして受け付ける。
【0067】
変換部402は、複数のソースコードのうち少なくともいずれかのソースコードを加工する。変換部402は、例えば、ソースコード内の関数を展開することにより、当該ソースコードを加工する。展開は、具体的には、関数の呼び出し文の記述を、関数の呼び出し文によって呼び出される関数の処理内容の記述に置き換えることである。
【0068】
変換部402は、具体的には、取得した複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれるか否かを判定する。モジュールの定義は、例えば、モジュールのimport文である。変換部402は、より具体的には、複数のソースコードそれぞれについて、当該ソースコードにモジュールのimport文が含まれるか否かを判定する。
【0069】
変換部402は、具体的には、ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれるか否かを判定する。所定のライブラリは、例えば、ベンダにより公開されたライブラリである。ベンダは、例えば、プログラム言語のベンダである。所定のライブラリは、例えば、ソースコードの開発者により開発されたモジュールではなく、ベンダにより公開されたモジュールを規定する。
【0070】
変換部402は、より具体的には、ソースコードにモジュールの定義が含まれる場合、当該モジュールが、所定のライブラリに含まれれば、開発者により開発されたモジュールではないと判定する。変換部402は、より具体的には、ソースコードにモジュールの定義が含まれる場合、当該モジュールが、所定のライブラリに含まれなければ、開発者により開発されたモジュールであると判定する。
【0071】
変換部402は、具体的には、ソースコードにモジュールの定義が含まれ、当該モジュールが所定のライブラリに含まれない場合、当該ソースコードのうち当該モジュールに対応する関数を展開する。これにより、変換部402は、特定部403で、ソースコード同士を比較する際に、関数の処理内容を考慮可能にすることができ、互いに対応するソースコードの組み合わせを特定し易くすることができる。変換部402は、ソースコードに含まれる一部の関数を選択的に展開することができ、加工にかかる処理負担の増大化を抑制することができる。変換部402は、ソースコードに対応するASTの規模の増大化を抑制することができる。
【0072】
変換部402は、例えば、複数のソースコードそれぞれについて、当該ソースコードにモジュールの名前の置き換えを含む当該モジュールの定義が含まれるか否かを判定する。変換部402は、具体的には、複数のソースコードそれぞれについて、当該ソースコードに、モジュールの名前の置き換えを含む、当該モジュールのimport文が含まれるか否かを判定する。
【0073】
変換部402は、例えば、ソースコードにモジュールの名前の置き換えを含む当該モジュールの定義が含まれる場合、当該ソースコードのうち当該モジュールの名前の置き換えを解除することにより、当該ソースコードを加工する。変換部402は、具体的には、ソースコードに含まれる当該モジュールの置き換え後の名前を、当該モジュールの置き換え前の名前に変換する。これにより、変換部402は、特定部403で、ソースコード同士を比較する際に、モジュールの名前の置き換えを考慮可能にすることができ、互いに対応するソースコードの組み合わせを特定し易くすることができる。
【0074】
変換部402は、例えば、複数のソースコードそれぞれについて、クラスの定義が含まれるか否かを判定する。クラスの定義は、例えば、クラスのインスタンス化を含み、クラスの命名を含む。変換部402は、例えば、ソースコードに、クラスの定義が含まれる場合、当該ソースコードのうち当該クラスの名前を用いたインスタンスの呼び出し文を検索する。
【0075】
変換部402は、例えば、ソースコードのうち、検索したクラスの名前を用いたインスタンスの呼び出し文を、クラスの定義と統合することにより、当該ソースコードを加工する。これにより、変換部402は、特定部403で、ソースコード同士を比較する際に、クラスのインスタンスの呼び出しを考慮可能にすることができ、互いに対応するソースコードの組み合わせを特定し易くすることができる。
【0076】
特定部403は、互いに対応するソースコードの組み合わせを特定し、特定した組み合わせを含むソースコードのグループを特定する。組み合わせは、アノテーション作業を共に実施する対象とする2以上のソースコードの集合である。
【0077】
特定部403は、例えば、加工後の複数のソースコードそれぞれを比較した結果に基づいて、複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードの組み合わせを特定する。特定部403は、例えば、特定した2以上のソースコードの組み合わせを含むグループを特定する。
【0078】
特定部403は、具体的には、加工後の複数のソースコードそれぞれに対応する抽象構文木を生成する。特定部403は、具体的には、生成した抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードの組み合わせを特定する。特定部403は、具体的には、特定した組み合わせを含めたグループを特定する。
【0079】
これにより、特定部403は、互いに対応し、アノテーション作業に関して作業内容が共通する確率が比較的高いソースコードの組み合わせを特定することができ、アノテーション作業を共に実施する対象に設定することができる。このため、特定部403は、同一の作業者に割り当てることが好ましいソースコードの組み合わせを特定することができ、作業者にかかる作業負担の増大化を抑制可能にすることができる。
【0080】
特定部403は、具体的には、加工後の複数のソースコードそれぞれに変数名が含まれれば、当該変数名をマスクデータに置き換えた、当該ソースコードに対応する抽象構文木を生成する。特定部403は、具体的には、生成した抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードの組み合わせを特定する。特定部403は、具体的には、特定した組み合わせを含めたグループを特定する。
【0081】
これにより、特定部403は、互いに対応し、アノテーション作業に関して作業内容が共通する確率が比較的高いソースコードの組み合わせを特定することができ、アノテーション作業を共に実施する対象に設定することができる。このため、特定部403は、同一の作業者に割り当てることが好ましいソースコードの組み合わせを特定することができ、作業者にかかる作業負担の増大化を抑制可能にすることができる。
【0082】
特定部403は、具体的には、生成した抽象構文木のうち、同一の式構造を表現する部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードの組み合わせを特定する。特定部403は、具体的には、特定した組み合わせを含めたグループを特定する。
【0083】
これにより、特定部403は、互いに対応し、アノテーション作業に関して作業内容が共通する確率が比較的高いソースコードの組み合わせを特定することができ、アノテーション作業を共に実施する対象に設定することができる。このため、特定部403は、同一の作業者に割り当てることが好ましいソースコードの組み合わせを特定することができ、作業者にかかる作業負担の増大化を抑制可能にすることができる。
【0084】
出力部404は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部404は、少なくともいずれかの機能部の処理結果を自装置利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
【0085】
出力部404は、特定したグループを示す情報を出力する。出力部404は、特定したグループを示す情報を、クライアント装置201に送信する。これにより、出力部404は、特定したグループを作業者に割り当てることができ、作業者にアノテーション作業を実施させることができる。出力部404は、互いに対応する2以上のソースコードの組み合わせに対するアノテーション作業を、同一の作業者に実施させることができ、作業者にかかる作業負担の増大化を抑制することができる。
【0086】
出力部404は、特定したグループを示す情報を、互いに対応する2以上のソースコードの組み合わせを特定可能にする情報と共に出力してもよい。これにより、出力部404は、互いに対応する2以上のソースコードの組み合わせを作業者が把握可能にすることができ、アノテーション作業を作業者が実施し易くすることができ、作業者にかかる作業負担の増大化を抑制することができる。
【0087】
ここでは、情報処理装置100が、取得部401と、変換部402と、特定部403と、出力部404とを含む場合について説明したが、これに限らない。例えば、情報処理装置100が、変換部402を含まない場合があってもよい。具体的には、情報処理装置100が、変換部402を含む他のコンピュータと通信可能であり、他のコンピュータを介して変換部402を利用する場合があってもよい。
【0088】
(情報処理システム200の機能的構成例)
次に、図5を用いて、情報処理システム200の機能的構成例について説明する。
【0089】
図5は、情報処理システム200の機能的構成例を示すブロック図である。図5において、情報処理装置100は、ソースコードDB(DataBase)500と、出題DB510とを有する。ソースコードDB500は、ソースコードを記憶する。出題DB510は、ソースコードのグループを記憶する。
【0090】
情報処理装置100は、モジュール情報取得部501と、ソースコード変換処理部502と、AST変換処理部503と、情報付与部504と、出題分配部505と、表示制御部506とを含む。モジュール情報取得部501と、ソースコード変換処理部502と、AST変換処理部503と、情報付与部504と、出題分配部505と、表示制御部506とは、図6に示した各機能部を実現する。
【0091】
モジュール情報取得部501は、対象のソースコード群とモジュール情報とを取得する。モジュール情報は、ソースコード群の開発者が開発したモジュールを識別する識別子を含まず、ベンダが開発したモジュールを識別する識別子を含む。
【0092】
ソースコード変換処理部502は、モジュール情報を参照して、対象のソースコード群の変換処理を実施することにより、対象のソースコード群のそれぞれのソースコードを加工する。変換処理の具体例については、図20を用いて後述する。
【0093】
ソースコード変換処理部502は、例えば、それぞれのソースコードに、開発者が開発したモジュールに対応する関数が含まれれば、当該ソースコードにおける、当該モジュールに対応する関数を展開する。ソースコード変換処理部502は、例えば、それぞれのソースコードに、モジュールの名前の置き換え命令文が含まれれば、当該ソースコードにおける、モジュールの名前の置き換えを解除する。
【0094】
ソースコード変換処理部502は、例えば、それぞれのソースコードに、クラスのインスタンス化の命令文と、インスタンスの呼び出しの命令文とが別個に含まれれば、それぞれの命令文を統合する。これにより、ソースコード変換処理部502は、対象のソースコード群のそれぞれのソースコードの記述形式を統一し、ソースコード同士の処理内容を比較し易くすることができる。
【0095】
AST変換処理部503は、変換処理後の対象のソースコード群のそれぞれのソースコードを、当該ソースコードに対応するASTに変換する。情報付与部504は、それぞれのソースコードに対応するASTを比較することにより、互いに対応するソースコードの組み合わせを特定する。情報付与部504は、例えば、ソースコードiに対応するASTiとソースコードjに対応するASTjとに同一の部分木が含まれれば、ソースコードiとソースコードjとが対応すると判定する。
【0096】
情報付与部504は、例えば、それぞれのソースコードに対応するASTにおける変数名に関する要素をマスクしてもよい。マスクは、例えば、異なる変数名を同一のダミーの変数名に置き換えて扱うことである。マスクは、例えば、対象のノードを取り除くこと、または、対象のノード以下の部分木を取り除くことであってもよい。対象のノードは、例えば、変数名に関する要素のノードである。情報付与部504は、例えば、ソースコードiに対応するマスク後のASTiとソースコードjに対応するマスク後のASTjとに同一の部分木が含まれれば、ソースコードiとソースコードjとが対応すると判定してもよい。
【0097】
情報付与部504は、例えば、ソースコードiに対応するASTiとソースコードjに対応するASTjとに同一の式構造を表す部分木が含まれれば、ソースコードiとソースコードjとが対応すると判定してもよい。これにより、情報付与部504は、同一の作業者に割り当てて同一の作業者がアノテーション作業を実施することが好ましいソースコードの組み合わせを特定することができる。
【0098】
出題分配部505は、特定したソースコードの組み合わせが同一のグループに含まれるよう、対象のソースコード群を作業者数分のグループに分類する。出題分配部505は、作業者数分のグループを、出題DB510に記憶する。出題分配部505は、例えば、作業者数分のグループを、当該グループに含まれる互いに対応するソースコードの組み合わせを特定可能にする情報と対応付けて、出題DB510に記憶してもよい。これにより、出題分配部505は、それぞれの作業者に割り当てるソースコードのグループを特定することができ、それぞれの作業者にソースコードを割り当て可能にすることができる。
【0099】
表示制御部506は、アノテーションツールに対応する。表示制御部506は、出題DB510を参照して、それぞれの作業者に割り当てたソースコードのグループを、当該作業者に対応するクライアント装置201に送信する。表示制御部506は、例えば、それぞれの作業者に割り当てたソースコードのグループを、当該グループに含まれる互いに対応するソースコードの組み合わせを特定可能にする情報と対応付けて、当該作業者に対応するクライアント装置201に送信してもよい。
【0100】
これにより、表示制御部506は、それぞれの作業者が、当該作業者に割り当てられたソースコードのグループに対するアノテーション作業を実施可能にすることができる。表示制御部506は、互いに対応するソースコードの組み合わせに対するアノテーション作業を、同一の作業者が実施可能にすることができる。このため、表示制御部506は、アノテーション作業を実施する作業者にかかる作業負担の増大化を抑制することができる。
【0101】
ここでは、出題分配部505が、対象のソースコード群を作業者数分のグループに分類する場合について説明したが、これに限らない。例えば、出題分配部505が、対象のソースコード群を作業者数より多い数のグループに分類する場合があってもよい。この場合、出題分配部505は、例えば、いずれかの作業者に、2以上のグループを割り当てることになる。
【0102】
(情報処理装置100の動作例)
次に、図6図16を用いて、情報処理装置100の動作例について説明する。まず、図6図10を用いて、情報処理装置100が、ソースコードを変換する一例について説明する。そして、図11図14を用いて、情報処理装置100が、変換後のソースコードに基づいて、ソースコード群を作業者数分のグループに分類する一例について説明する。その後、図15を用いて、情報処理装置100が、グループを出力する一例について説明する。
【0103】
図6図10は、ソースコードを変換する一例を示す説明図である。図6において、情報処理装置100は、ソースコード群を取得したとする。情報処理装置100は、ソースコード群に含まれるソースコードを変換する。ここでは、情報処理装置100が、ソースコード群に含まれるソースコード600を処理対象とする場合について説明する。
【0104】
情報処理装置100は、ソースコード600から、モジュールのimport文を検索し、ソースコード600に、モジュールのimport文が含まれるか否かを判定する。図6の例では、情報処理装置100は、モジュールのimport文601,602を発見し、ソースコード600に、モジュールのimport文601,602が含まれると判定する。
【0105】
情報処理装置100は、検索したモジュールのimport文601,602が、開発者が開発したモジュールのimport文であるか否かを判定する。開発者は、例えば、ソースコード600を作成した作成者である。ここで、図7の説明に移行し、情報処理装置100が、開発者が開発したモジュールのimport文であるか否かを判定する一例について説明する。
【0106】
図7において、情報処理装置100は、モジュール情報を取得する。モジュール情報は、ソースコード群の開発者が開発したモジュールを識別する識別子を含まず、ベンダが開発したモジュールを識別する識別子を含む。情報処理装置100は、モジュール情報を参照して、検索したモジュールのimport文601,602が、開発者が開発したモジュールのimport文であるか否かを判定する。
【0107】
図7の例では、情報処理装置100は、具体的には、Pythonのパッケージ管理ツールにおいて、pip freezeコマンドを実行し、インストール済みのライブラリの一覧を、requirements.txtファイルに出力する。情報処理装置100は、requirements.txtファイルを、モジュール情報として利用する。
【0108】
情報処理装置100は、具体的には、requirements.txtファイルから、検索したモジュールのimport文601,602に記述された当該モジュールの名前を検索する。情報処理装置100は、具体的には、モジュールの名前を検索した結果に基づいて、モジュールのimport文601,602が、開発者が開発したモジュールのimport文であるか否かを判定する。
【0109】
図7の例では、情報処理装置100は、具体的には、ファイル700を、requirements.txtファイルとして取得したとする。情報処理装置100は、具体的には、ファイル700に、import文601のモジュールの名前“pandas”を発見したため、当該import文601が、開発者が開発していないモジュールのimport文であると判定する。一方で、情報処理装置100は、具体的には、ファイル700に、import文602のモジュールの名前“mylibraly”を発見しないため、当該import文602が、開発者が開発したモジュールのimport文であると判定する。
【0110】
図6の説明に戻り、情報処理装置100は、ソースコード600に含まれるモジュールのimport文において、モジュールの名前の置き換えが存在するか否かを判定する。図6の例では、情報処理装置100は、モジュールのimport文601において、モジュールの名前“pandas”から“pd”への置き換えが存在すると判定する。また、情報処理装置100は、モジュールのimport文602において、モジュールの名前の置き換えが存在しないと判定する。
【0111】
情報処理装置100は、ソースコード600に含まれるモジュールのimport文において、モジュールの名前の置き換えが存在すれば、モジュールの名前の置き換えを解除する。図6の例では、情報処理装置100は、モジュールのimport文601において、モジュールの名前“pandas”から“pd”への置き換えが存在するため、モジュールのimport文601から、モジュールの名前を置き換える部分を削除する。
【0112】
また、情報処理装置100は、モジュールのimport文601において、モジュールの名前“pandas”から“pd”への置き換えが存在するため、命令文603に含まれるモジュールの名前“pd”を“pandas”に戻す。ここで、図8の説明に移行し、情報処理装置100が、モジュールの名前の置き換えを解除した後のソースコード600の一例について説明する。
【0113】
図8に示すように、情報処理装置100は、具体的には、import文601を、モジュールの置き換えがないimport文801に変換し、命令文603を、命令文802に変換した状態になるよう、ソースコード600を更新する。ソースコード600において、import文602は、更新されていない。次に、図9の説明に移行する。
【0114】
図9において、情報処理装置100は、ソースコード600のうち、開発者が開発したモジュールに関する関数を展開する。図9の例では、情報処理装置100は、ソースコード600が、開発者が開発したモジュール“mylibrary”に関する関数の呼び出し文901を含むため、関数の呼び出し文901を展開する。
【0115】
図9の符号900に示すように、情報処理装置100は、具体的には、関数の呼び出し文901を、モジュール“mylibrary”に規定された当該関数の処理内容を表す記述902に変換することにより、ソースコード600を更新する。
【0116】
また、例えば、図9の符号910に示すように、関数の呼び出し文901を含むソースコード600に、モジュールを介さず直接当該関数の処理内容を表す記述903が含まれる場合が考えられる。この場合、情報処理装置100は、関数の呼び出し文901を、当該関数の処理内容を表す記述903に変換し、元の記述903を削除することにより、ソースコード600を更新する。
【0117】
符号900に示すソースコード600の更新後の状態と、符号910に示すソースコード600の更新後の状態とは、共に、符号920に示すソースコード600の状態になる。符号900に示すソースコード600の更新後の状態は、例えば、関数の呼び出し文901に代わり、関数の処理内容を表す記述902に対応する記述911を含む。
【0118】
一方で、符号910に示すソースコード600の更新後の状態は、例えば、関数の呼び出し文901と、元の記述903との組み合わせに代わり、関数の処理内容を表す記述911を含むことになる。このように、情報処理装置100は、処理内容が同一であり形式が異なるソースコードを、同一のソースコードに加工することができる。
【0119】
また、情報処理装置100は、ソースコード600に、クラスのインスタンス化と、インスタンスの呼び出しとが別個に存在すれば、クラスのインスタンス化と、インスタンスの呼び出しとを統合する。図9の例では、情報処理装置100は、ソースコード600が、クラスのインスタンス化の命令文912と、インスタンスの呼び出しを含む記述911とを含むと判定する。
【0120】
このため、情報処理装置100は、クラスのインスタンス化の命令文912と、インスタンスの呼び出しを含む記述911とを統合する。ここで、図10の説明に移行し、情報処理装置100が、クラスのインスタンス化の命令文912と、インスタンスの呼び出しを含む記述911とを統合した後のソースコード600の一例について説明する。
【0121】
図10に示すように、情報処理装置100は、具体的には、クラスのインスタンス化の命令文912と、インスタンスの呼び出しを含む記述911とを、命令文1001に変換した状態になるよう、ソースコード600を更新する。これにより、情報処理装置100は、同一の作業者に割り当てることが好ましいソースコードの組み合わせを特定する観点で、適切にソースコード同士を比較可能になるよう、ソースコードを変換することができる。
【0122】
情報処理装置100は、例えば、ソースコード内の関数を展開することができる。このため、情報処理装置100は、例えば、処理内容をそのまま記述したソースコードと、当該処理内容を関数として呼び出すソースコードとを、同一の処理内容を含むソースコードの組み合わせと特定し易くすることができる。従って、情報処理装置100は、例えば、同一の処理内容を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定し易くすることができる。
【0123】
情報処理装置100は、例えば、ソースコード内のモジュールの名前の置き換えを解除することができる。このため、情報処理装置100は、例えば、モジュールの名前をそのまま利用するソースコードと、モジュールの名前を置き換えて利用するソースコードとを、同一のモジュールを利用するソースコードの組み合わせと特定し易くすることができる。従って、情報処理装置100は、同一のモジュールを利用するため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定し易くすることができる。
【0124】
情報処理装置100は、例えば、ソースコード内のクラスのインスタンス化と、インスタンスの呼び出しとを統合することができる。このため、情報処理装置100は、例えば、同一のインスタンスを利用するものの、インスタンスの記述が異なる2以上のソースコードを特定し易くすることができる。このため、情報処理装置100は、同一のインスタンスを利用するため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定し易くすることができる。
【0125】
ここで、情報処理装置100は、ソースコード同士を比較するためにソースコードを変換するため、変換後のソースコードを、必ずしも実行可能な形式にしなくてもよい。次に、図11図14を用いて、情報処理装置100が、変換後のソースコードに基づいて、ソースコード群を作業者数分のグループに分類する一例について説明する。
【0126】
図11図14は、ソースコード群を作業者数分のグループに分類する一例を示す説明図である。図11において、情報処理装置100は、変換後のソースコードに対応するASTを生成する。ASTは、変換後のソースコードに現れるモジュール、関数、配列、または、値などの要素を表すノードを含み、要素間の関係性をエッジにより表現する木構造である。図11の木構造1100は、具体的には、変換後のソースコード600に対応するASTのうち、変換後のソースコード600におけるBMIを計算する処理内容を表現する木構造の一部を示す。
【0127】
情報処理装置100は、生成したASTを比較することにより、同一の作業者に割り当てることが好ましい、互いに対応するソースコードの組み合わせを特定する。互いに対応するソースコードの組み合わせは、例えば、同一または類似の処理内容を含むソースコードの組み合わせである。ここで、図12の説明に移行し、情報処理装置100が、互いに対応するソースコードの組み合わせを特定する一例について説明する。
【0128】
図12において、情報処理装置100は、変換処理後、異なる2以上のソースコードそれぞれに対応するASTが、同一の部分木を含むか否かを判定する。情報処理装置100は、変換処理後、異なる2以上のソースコードそれぞれに対応するASTが、同一の部分木を含んでいれば、当該2以上のソースコードが対応すると判定する。これにより、情報処理装置100は、同一の処理内容を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。
【0129】
例えば、情報処理装置100が、処理内容をそのまま記述したソースコード1200と、当該処理内容を関数として呼び出すソースコード1210とを取得した場合が考えられる。この場合、変換処理後では、ソースコード1200に対応するASTと、ソースコード1210に対応するASTとは、同一のASTになる。このため、情報処理装置100は、変換処理により、同一の処理内容を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。
【0130】
これに対し、変換処理なしに、ソースコード1200に対応するASTと、ソースコード1210に対応するASTとを比較すると、ソースコード1200に対応するASTと、ソースコード1210に対応するASTとは、異なるASTと判定される。従って、従来では、ソースコード1200と、ソースコード1210とが対応すると判定することができない。このため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができない。次に、図13の説明に移行し、情報処理装置100が、互いに対応するソースコードの組み合わせを特定する別の例について説明する。
【0131】
図13において、情報処理装置100は、変換処理後、異なる2以上のソースコードそれぞれに対応するASTにおける変数名をマスクしてから、マスク後のASTそれぞれが同一の部分木を含むか否かを判定する。情報処理装置100は、具体的には、ASTにおけるConstant(value=文字列)以下の要素をマスクし、任意の要素として扱う。
【0132】
情報処理装置100は、マスク後、異なる2以上のソースコードそれぞれに対応するASTが、同一の部分木を含んでいれば、当該2以上のソースコードが対応すると判定する。これにより、情報処理装置100は、類似の処理内容を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。情報処理装置100は、例えば、扱う変数名のみ異なる処理内容を含む2以上のソースコードの組み合わせを特定することができる。
【0133】
例えば、情報処理装置100が、“体重”および“身長”などの変数名を含むソースコード1300と、“weight”および“height”などの変数名を含むソースコード1310とを取得した場合が考えられる。この場合、マスク後では、ソースコード1300に対応するASTと、ソースコード1310に対応するASTとは、同一のASTとして扱われる。このため、情報処理装置100は、マスクにより、類似の処理内容を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。
【0134】
また、情報処理装置100は、マスクにより、“体重”と“weight”との対応関係などの知識情報がなくても、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。
【0135】
これに対し、マスクなしに、ソースコード1300に対応するASTと、ソースコード1310に対応するASTとを比較すると、ソースコード1300に対応するASTと、ソースコード1310に対応するASTとは、異なるASTと判定される。従って、従来では、ソースコード1300と、ソースコード1310とが対応すると判定することができない。このため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができない。次に、図14の説明に移行し、情報処理装置100が、互いに対応するソースコードの組み合わせを特定する別の例について説明する。
【0136】
図14において、情報処理装置100は、変換処理後、異なる2以上のソースコードそれぞれに対応するASTの一部をマスクしてから、マスク後のASTそれぞれが同一の式構造を表す部分木を含むか否かを判定する。情報処理装置100は、例えば、ASTにおけるSubscript以下の要素をマスクし、任意の要素として扱い、マスク後のASTそれぞれが同一の式構造を表す部分木を含むか否かを判定する。マスク後のASTは、例えば、図14に示すAST1400である。
【0137】
情報処理装置100は、マスク後、異なる2以上のソースコードそれぞれに対応するASTが、同一の式構造を表す部分木を含んでいれば、当該2以上のソースコードが対応すると判定する。これにより、情報処理装置100は、同一の式構造を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができる。
【0138】
従来では、マスクなしに、AST同士を比較する。このため、同一の式構造を含むため、同一の作業者に割り当てることが好ましいと考えられるソースコードの組み合わせを特定することができない。次に、図15の説明に移行し、情報処理装置100が、ソースコード群を複数の作業者に割り当てる一例について説明する。
【0139】
図15は、ソースコード群を複数の作業者に割り当てる一例を示す説明図である。図15において、情報処理装置100は、ソースコード群1500={ソースコードA,B,C,D}を取得していたとする。情報処理装置100は、ソースコードBとソースコードCとが、対応するソースコードの組み合わせであると特定したとする。情報処理装置100は、対応するソースコードBとソースコードCとの組み合わせが、同一の作業者に割り当てられるよう、ソースコードA,B,C,Dを、作業者X,Yに割り当てる。
【0140】
情報処理装置100は、例えば、ソースコードBとソースコードCとの組み合わせが、同一のグループに含まれるよう、ソースコードA,B,C,Dを、作業者数分のグループに分類する。情報処理装置100は、具体的には、ソースコードA,Dを、作業者Xに対応するグループ1510に分類し、ソースコードB,Cを、作業者Yに対応するグループ1520に分類する。
【0141】
情報処理装置100は、グループ1510を、作業者Xに対応するクライアント装置201に送信することにより、グループ1510のソースコードA,Dに対するアノテーション作業を、作業者Xに依頼する。情報処理装置100は、グループ1520を、作業者Yに対応するクライアント装置201に送信することにより、グループ1520のソースコードB,Cに対するアノテーション作業を、作業者Yに依頼する。
【0142】
情報処理装置100は、アノテーション作業時、変換処理後のソースコードを、作業者が参照可能にしてもよい。情報処理装置100は、アノテーション作業時、変換処理前のソースコードを、作業者が参照可能にしてもよい。これにより、情報処理装置100は、作業者の作業負担の増大化を抑制しつつ、複数の作業者で分担してアノテーション作業を実施可能にすることができる。
【0143】
以上により、情報処理装置100は、ソースコード群を、2以上の作業者に割り当てる際に、ソースコード間の重複箇所、同一箇所、または、類似箇所などを考慮可能にすることができ、作業者にかかる作業負担の増大化を抑制することができる。情報処理装置100は、例えば、作業者がソースコードを精査する作業負担の増大化を抑制することができる。情報処理装置100は、具体的には、作業者が、いずれかのソースコードに対するアノテーション作業を実施後、当該ソースコードと重複箇所を有する他のソースコードに対するアノテーション作業を実施時、当該重複箇所を考慮可能にすることができる。
【0144】
情報処理装置100は、関数を展開してからソースコード同士を比較することができるため、処理内容が共通するソースコード同士を精度よく特定することができる。情報処理装置100は、関数を呼び出すソースコードと、呼び出される関数が記述されたソースコードとを対応付けてしまうことを防止することができる。情報処理装置100は、処理内容が共通し、同一の作業者に割り当てて、アノテーション作業を共に実施することが好ましいソースコードの組み合わせを特定することができ、作業者の作業負担の増大化を抑制し易くすることができる。
【0145】
情報処理装置100は、開発者が開発したモジュールに関する関数であるか否かに基づいて、展開する関数を選別することができる。このため、情報処理装置100は、ソースコードの加工にかかる処理負担の低減化を図ることができる。また、情報処理装置100は、ソースコードに対応するASTのサイズの増大化を抑制することができ、ASTの比較にかかる処理負担の低減化を図ることができる。ここで、図16を用いて、情報処理装置100が、展開する関数を選別する効果の一例について説明する。
【0146】
図16は、展開する関数を選別する効果の一例を示す説明図である。図16に示すように、開発者が開発していない外部モジュール1611を呼び出すソースコード1601と、外部モジュール1611とバージョンが異なる開発者が開発していない外部モジュール1612を呼び出すソースコード1602とが存在するとする。
【0147】
ここで、開発者が開発していない外部モジュール1611に関する関数を展開し、開発者が開発していない外部モジュール1612に関する関数を展開すると、展開後のソースコード1601と、展開後のソースコード1603とが一致する場合がある。しかしながら、開発者が開発していないモジュールは、アノテーション作業において考慮しなくてもよいことがある。例えば、開発者が開発していないモジュールは、ブラックボックスとして扱われる傾向があり、アノテーション作業において考慮しない方が好ましいことがあると考えられる。
【0148】
一方で、開発者が開発したモジュールは、ソースコードの処理内容との関連性が比較的強く、アノテーション作業において考慮する方が好ましいことがあると考えられる。情報処理装置100は、開発者が開発していないモジュールに関する関数を展開せずに済ませることができる。これに対し、図16に示すように、情報処理装置100は、外部モジュール1611,1612のバージョン違いを考慮せずに、ソースコード1601,1602が対応すると特定することができる。
【0149】
このように、情報処理装置100は、アノテーション作業において考慮しない方が好ましい関数を展開せず、アノテーション作業において考慮する方が好ましい関数を展開することができる。このため、情報処理装置100は、アノテーション作業の効率化を図ることができ、作業者にかかる作業負担の増大化を抑制することができる。
【0150】
(全体処理手順)
次に、図17図19を用いて、情報処理装置100が実行する、全体処理手順の一例について説明する。全体処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0151】
図17図19は、全体処理手順の一例を示すフローチャートである。図17において、情報処理装置100は、対象のソースコード群とモジュール情報とを取得する(ステップS1701)。そして、情報処理装置100は、n=0に設定する(ステップS1702)。
【0152】
次に、情報処理装置100は、対象のソースコード群のうちソースコードnの変換処理を実施する(ステップS1703)。そして、情報処理装置100は、変換処理後のソースコードnに対応するASTnを生成する(ステップS1704)。
【0153】
次に、情報処理装置100は、n≧Nであるか否かを判定する(ステップS1705)。Nは、ソースコードの数である。ここで、n≧Nではなくn<Nである場合(ステップS1705:No)、情報処理装置100は、n++に設定し(ステップS1706)、ステップS1703の処理に戻る。一方で、n≧Nである場合(ステップS1705:Yes)、情報処理装置100は、図18のステップS1801の処理に移行する。ここで、図18の説明に移行する。
【0154】
図18において、情報処理装置100は、i=0に設定する(ステップS1801)。そして、情報処理装置100は、j=i+1に設定する(ステップS1802)。
【0155】
次に、情報処理装置100は、変換処理後のソースコード群のうちソースコードiに対応するASTiとソースコードjに対応するASTjとを取得する。そして、情報処理装置100は、取得したソースコードiに対応するASTiとソースコードjに対応するASTjとに同一の部分木が含まれるか否かを判定する(ステップS1803)。ここで、同一の部分木が含まれる場合(ステップS1803:Yes)、情報処理装置100は、ステップS1806の処理に移行する。一方で、同一の部分木が含まれない場合(ステップS1803:No)、情報処理装置100は、ステップS1804の処理に移行する。
【0156】
ステップS1804では、情報処理装置100は、取得したソースコードiに対応するASTiとソースコードjに対応するASTjとに含まれる変数名に関する要素をマスクした後、同一の部分木が含まれるか否かを判定する(ステップS1804)。ここで、同一の部分木が含まれる場合(ステップS1804:Yes)、情報処理装置100は、ステップS1806の処理に移行する。一方で、同一の部分木が含まれない場合(ステップS1804:No)、情報処理装置100は、ステップS1805の処理に移行する。
【0157】
ステップS1805では、情報処理装置100は、取得したソースコードiに対応するASTiとソースコードjに対応するASTjとに同一の式構造を表す部分木が含まれるか否かを判定する(ステップS1805)。ここで、同一の式構造を表す部分木が含まれる場合(ステップS1805:Yes)、情報処理装置100は、ステップS1806の処理に移行する。一方で、同一の式構造を表す部分木が含まれない場合(ステップS1805:No)、情報処理装置100は、ステップS1807の処理に移行する。
【0158】
ステップS1806では、情報処理装置100は、ソースコードiとソースコードjとを対応付けて出題DBに記録する(ステップS1806)。そして、情報処理装置100は、ステップS1807の処理に移行する。
【0159】
ステップS1807では、情報処理装置100は、j<Nであるか否かを判定する(ステップS1807)。ここで、j<Nである場合(ステップS1807:Yes)、情報処理装置100は、j++に設定し(ステップS1808)、ステップS1803の処理に戻る。一方で、j<Nではなくj≧Nである場合(ステップS1807:No)、情報処理装置100は、ステップS1809の処理に移行する。
【0160】
ステップS1809では、情報処理装置100は、i<Nであるか否かを判定する(ステップS1809)。ここで、i<Nである場合(ステップS1809:Yes)、情報処理装置100は、i++に設定し(ステップS1810)、ステップS1802の処理に戻る。一方で、i<Nではなくi≧Nである場合(ステップS1809:No)、情報処理装置100は、図19のステップS1901の処理に移行する。ここで、図19の説明に移行する。
【0161】
図19において、情報処理装置100は、作業者数の入力を受け付ける(ステップS1901)。次に、情報処理装置100は、それぞれ異なる作業者に対応する、入力された作業者数分のグループを設定する(ステップS1902)。
【0162】
そして、情報処理装置100は、出題DBを参照して、対応付けられたソースコード同士が同一のグループに含まれるよう、対象のソースコード群を作業者数分のグループに分類する(ステップS1903)。
【0163】
次に、情報処理装置100は、それぞれの作業者に対応するグループを、当該作業者が参照可能に出力する(ステップS1904)。そして、情報処理装置100は、全体処理を終了する。これにより、情報処理装置100は、アノテーション作業を実施する際に作業者にかかる作業負担の増大化を抑制することができる。
【0164】
(変換処理手順)
次に、図20を用いて、情報処理装置100が実行する、変換処理手順の一例について説明する。変換処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0165】
図20は、変換処理手順の一例を示すフローチャートである。図20において、情報処理装置100は、外部モジュールリストを参照して、ソースコードnに含まれるモジュールに、開発者が開発したモジュールであるか否かを示すフラグ情報を付与する(ステップS2001)。
【0166】
次に、情報処理装置100は、ソースコードnに含まれるimport文に対して名前解決を実施する(ステップS2002)。そして、情報処理装置100は、フラグ情報を参照して、ソースコードnに含まれる開発者が開発していないモジュールに対応する関数を展開する(ステップS2003)。
【0167】
次に、情報処理装置100は、ソースコードnに含まれるクラスのインスタンス化とインスタンスの呼び出しとを統合する(ステップS2004)。そして、情報処理装置100は、変換処理を終了する。これにより、情報処理装置100は、異なるソースコードの処理内容を適切に比較し易くなるよう、ソースコードを変換することができる。
【0168】
ここで、情報処理装置100は、図17図20の各フローチャートの一部ステップの処理の順序を入れ替えて実行してもよい。例えば、ステップS1803~S1805の処理の順序は入れ替え可能である。また、情報処理装置100は、図17図20の各フローチャートの一部ステップの処理を省略してもよい。例えば、ステップS1803~S1805の処理は省略可能である。
【0169】
以上説明したように、情報処理装置100によれば、複数のソースコードを取得することができる。情報処理装置100によれば、取得した複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれるか否かを判定することができる。情報処理装置100によれば、モジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開することができる。情報処理装置100によれば、展開後の複数のソースコードそれぞれを比較した結果に基づいて、複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定することができる。これにより、情報処理装置100は、互いに対応する2以上のソースコードを、同一の作業者に割り当て易くすることができ、アノテーション作業を実施する作業者にかかる作業負担の増大化を抑制可能にすることができる。
【0170】
情報処理装置100によれば、複数のソースコードそれぞれについて、当該ソースコードにモジュールの名前の置き換えを含む当該モジュールの定義が含まれるか否かを判定することができる。情報処理装置100によれば、ソースコードに、モジュールの名前の置き換えを含む当該モジュールの定義が含まれる場合、当該ソースコードのうち当該モジュールの名前の置き換えを解除することができる。これにより、情報処理装置100は、モジュールの名前の置き換えを考慮して、互いに対応する2以上のソースコードを精度よく特定することができる。
【0171】
情報処理装置100によれば、複数のソースコードそれぞれについて、当該モジュールに関するクラスの定義が含まれるか否かを判定することができる。情報処理装置100によれば、ソースコードに、クラスの定義が含まれる場合、当該ソースコードのうち当該クラスの名前を用いたインスタンスの呼び出しを、当該モジュールの名前を用いたインスタンスの呼び出しに変換することができる。これにより、情報処理装置100は、クラスのインスタンス化を考慮して、互いに対応する2以上のソースコードを精度よく特定することができる。
【0172】
情報処理装置100によれば、展開後の複数のソースコードそれぞれに対応する抽象構文木を生成することができる。情報処理装置100によれば、生成した抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めたグループを特定することができる。これにより、情報処理装置100は、アノテーション作業を共に実施することが好ましい互いに対応する2以上のソースコードを精度よく特定することができる。
【0173】
情報処理装置100によれば、展開後の複数のソースコードそれぞれに変数名が含まれれば、当該変数名をマスクデータに置き換えた、当該ソースコードに対応する抽象構文木を生成することができる。情報処理装置100によれば、生成した抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めたグループを特定することができる。これにより、情報処理装置100は、アノテーション作業を共に実施することが好ましい互いに対応する2以上のソースコードを精度よく特定することができる。
【0174】
情報処理装置100によれば、生成した抽象構文木のうち、同一の式構造を表現する部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めたグループを特定することができる。これにより、情報処理装置100は、アノテーション作業を共に実施することが好ましい互いに対応する2以上のソースコードを精度よく特定することができる。
【0175】
情報処理装置100によれば、特定したグループに含まれる2以上のソースコードそれぞれを示す情報を対応付けて出力することができる。これにより、情報処理装置100は、作業者にアノテーション作業を依頼することができる。情報処理装置100は、互いに対応する2以上のソースコードを作業者が把握可能にすることができ、作業者にかかる作業負担を低減し易くすることができる。
【0176】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した情報処理プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0177】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0178】
(付記1)複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0179】
(付記2)前記展開する処理は、
前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの名前の置き換えを含む当該モジュールの定義が含まれる場合、当該ソースコードのうち当該モジュールの名前の置き換えを解除する、ことを特徴とする付記1に記載の情報処理プログラム。
【0180】
(付記3)前記展開する処理は、
前記複数のソースコードそれぞれについて、クラスの定義と、当該クラスの名前を用いたインスタンスの呼び出しとが含まれる場合、当該ソースコードのうち当該クラスの名前を用いたインスタンスの呼び出しを、当該クラスの定義と統合する、ことを特徴とする付記1または2に記載の情報処理プログラム。
【0181】
(付記4)前記特定する処理は、
展開後の前記複数のソースコードそれぞれに対応する抽象構文木を生成し、
生成した前記抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする付記1または2に記載の情報処理プログラム。
【0182】
(付記5)前記特定する処理は、
展開後の前記複数のソースコードそれぞれに変数名が含まれれば、当該変数名をマスクデータに置き換えた、当該ソースコードに対応する抽象構文木を生成し、
生成した前記抽象構文木のうち、同一内容の部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする付記1または2に記載の情報処理プログラム。
【0183】
(付記6)前記特定する処理は、
生成した前記抽象構文木のうち、同一の式構造を表現する部分木を含む異なる2以上の抽象構文木それぞれに対応するソースコードを含めた前記グループを特定する、ことを特徴とする付記4に記載の情報処理プログラム。
【0184】
(付記7)特定した前記グループに含まれる前記2以上のソースコードそれぞれを示す情報を対応付けて出力する、ことを特徴とする付記1または2に記載の情報処理プログラム。
【0185】
(付記8)複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0186】
(付記9)複数のソースコードを取得し、
取得した前記複数のソースコードそれぞれについて、当該ソースコードにモジュールの定義が含まれる場合、当該モジュールが所定のライブラリに含まれなければ、当該ソースコードのうち当該モジュールに対応する関数を展開し、
展開後の前記複数のソースコードそれぞれを比較した結果に基づいて、前記複数のソースコードのうち、アノテーション作業を共に実施する2以上のソースコードを含むグループを特定する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【0187】
100 情報処理装置
101,600,1200,1210,1300,1310,1601,1602 ソースコード
110,120 符号
200 情報処理システム
201 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
400 記憶部
401 取得部
402 変換部
403 特定部
404 出力部
500 ソースコードDB
501 モジュール情報取得部
502 ソースコード変換処理部
503 AST変換処理部
504 情報付与部
505 出題分配部
506 表示制御部
510 出題DB
601,602,801 import文
603,802,912,1001 命令文
700 ファイル
901 文
902,911 記述
1100 木構造
1400 AST
1510,1520 グループ
1611,1612 外部モジュール
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20