研究進捗報告:
"データフローを用いた
プログラムの文書化"
新山 祐介
2019年4月9日
https://euske.github.io/

一枚だけで概要説明

変数・関数の使われ方 = データパス

データパスの例

問. 以下の例で fp.readLine() の返り値は 2回利用される。どのように利用されているか?

private BufferedReader fp;

public String get() {
    String s = null;
    s = fp.readLine();
    int i = s.indexOf(' ');
    return s.substring(0, i);
}

グラフ化するとこうなる:

get() cluster_a N1 fp N2 readLine() N1->N2 #this N4 indexOf() N2->N4 #this N6 substring() N2->N6 #this N3 ' ' N3->N4 #arg0 N4->N6 #arg1 N5 0 N5->N6 #arg0 N7 return N6->N7

Interprocedural 化する

private BufferedReader fp;

public String get() {
    String s = null;
    s = fp.readLine();
    int i = s.indexOf(' ');
    return s.substring(0, i);
}

void show() {
    String x = get();
    System.out.println(x+"!!");
}

グラフ化するとこうなる:

A cluster_a get() cluster_b show() N1 fp N2 readLine() N1->N2 #this N4 indexOf() N2->N4 #this N6 substring() N2->N6 #this N3 ' ' N3->N4 #arg0 N4->N6 #arg1 N5 0 N5->N6 #arg0 N9 get() N6->N9 N11 + N9->N11 L N8 System.out N12 println() N8->N12 #this N10 !! N10->N11 R N11->N12 #arg0

データパスを収集する

ソースコード解析のいいところ

これまでの結果

これからの計画