発表の構成

  1. コーディング中のリアクションを記録
  2. ソースコードのコメント分析
スライド: https://euske.github.io/
CodeCAM - コーディング中の
リアクションを記録する
(MAINT 2018 投稿予定)
新山 祐介
権藤研 2017 冬ゼミ資料

1. やったこと

  1. コーディング中のリアクションを記録するシステムを実装。
  2. ソースコードから対応する表情を検索可能。
  3. 表情の変化からソースコード中の難しい部分を検出可能か?

2. 背景

技術的な背景

3. 問題点

解法 その1

解法 その2 (提案手法)

4. 実装上の問題

アルゴリズム

キー入力列と完成したソースコードを与えると、 対応する文字の写像を作成する。

観察

  1. 順列 ki および tj がユニークならば、一意に対応するはず。
    K T c c
  2. 連続したキー入力は、ソースコード上でも連続している。
  3. 連続した「キー入力 = テキスト対」をクラスタリングしていけば、 そのうちユニークな順列ができあがる。
    K T b a b a b

5. 実装

6. 実験結果

以下のプログラミング課題を遂行:
  1. Project Euler #89
  2. 自作の HTML5ゲーム
  3. Advent of Code 2017 - Day 19
Emacsでタイムスタンプつきの正解データを作成し比較。

7. 表情を抽出する

8. デモ

9. 今後の課題

  1. より精度を上げる。(コピペを記録する?)
  2. より多くのプログラミングを記録する。
  3. より多くの被験者を記録する。

10. 関連研究

ソースコード中の統計的な
詳細コメント解析
(ICPC 2018 投稿予定)
新山 祐介
権藤研 2017 冬ゼミ資料

1. やったこと

  1. ソースコード中のコメントのうち、プログラム理解に使えそうなものを分析した。
  2. 自動抽出・解析手法を提案し、その精度を測定した。
    (コメント解析ツール「CommentVonComment」を作成)

2. 背景

3. 関連研究

Tan, et al. "HotComments: How to Make Program Comments More Useful?", HOTOS 07
Linuxソースコードのコメントを分析し
"lock L must be obtained before entering F."
のようなパターンを見つけ、静的解析によりバグ発見。
Ying, et al. "Source code that talks: an exploration of Eclipse task comments and their implication to repository mining", MSR 05.
Eclipse中に含まれる "// TODO" コメントを人手で分析。

関連研究つづき

Steidl, et al. "Quality Analysis of Source Code Comments", ICPC 2013.
OSSプロジェクトから2,000ファイルのコメントを分類。
「コメント分類にはどんな種類があるか?」 「各カテゴリがどれくらい現れるか?」 「分類を自動化することは可能か?」
Pascarella and Bacchelli, "Classifying Code Comments in Java Open-source Software Systems" MSR 2017.
JavaおよびC++のコメントをそれぞれ830個と500個、手動で分類。 コメントの質を評価するための尺度を提案した:
coherence, usefulness, completeness および consistency.

4. Research Questions

Motivating Example

以下のようなコメントをきちんと区別したい:
  1. // バッファはリトルエンディアン。
    x = (b[1] << 8) | b[0];
    
  2. // バッファはリトルエンディアン。
    b[0] = x & 0xff;
    b[1] = (x >> 8) & 0xff;
    
例 a. はコードが実行されるの条件 (precondition)、 b. はコードが実行されたの効果 (postcondition) を表す。

コメントの「修飾する範囲」

  1. 左側の構文要素を修飾 (L):
    int pos = 123;  // 最初の位置。
    
  2. 右側の構文要素を修飾 (R):
    // ファイルを開く。
    reader = new FileReader(path);
    
  3. ブロック全体を修飾 (U):
    while (p[i] < v) {  // まだ小さい。
      i++;
    }
    

5. データセット

コメントの分類

コメントの分類

コメントの分類

コメントの分類

分類した1000件中の内訳

Postcondition - 実際の処理 613
Precondition - 前提条件 145
Nominal - 変数・値の説明 66
Commented out - コメントアウト 56
Instruction - TODO 42
Visual cue - 見た目用 38
Directive - コンパイラ用 26
Metadata - 作者・ライセンスなど 5
Unknown - 不明 9

分類基準はどれくらい妥当なのか?

  1. 権藤先生と荒堀先生にも100件ずつ分類してもらう。(TODO)
  2. どれくらい判断が一致しているかを測定。

6. コメント解析器の実装

  1. コメント区切り B/I/O の自動判定。(C4.5, TODO)
  2. コメント修飾範囲 L/R/U の自動判定。(C4.5, TODO)
  3. コメント分類の自動判定。
    • 頻繁に現れる Postcondition と Precondition を なんとかして区別したい。

洞察

処理内容に頻出する英語動詞 Top 10

  1. check (20)
  2. be (19)
  3. do (17)
  4. create (15)
  5. get (14)
  6. ignore (13)
  7. set (9)
  8. remove (9)
  9. make (9)
  10. ensure (8)

7. 他の言語・プロジェクトへの適用

8. 結論

  1. 従来あまり細かく分析されてこなかったコードの ふるまいに関するコメントを分析した。
  2. コメントの「修飾範囲」という概念に着目した。
  3. Precondition と Postcondition に着目した。
  4. 実際の自然言語表現 (英語) に着目した。