SlideShare a Scribd company logo
1 of 20
Download to read offline
A Tool to Suggest Similar Program
Element Modifications
早稲田大学 情報理工学研究科 楊 玉江
国立情報学研究所 坂本 一憲
早稲田大学 情報理工学部 鷲崎 弘宜
早稲田大学 情報理工学部 深澤 良彰
研究概要と貢献内容
2
 特定のタスクで最少キー入力回数が減少できると
 プログラミング手間が減少
 プログラミングの生産性が向上
 プログラミングタスクは連続した類似作業を必要とする
 連続した変更作業、変更すべき箇所を見逃すことが多い
 貢献内容:連続した変更作業の支援
 類似したプログラム要素検出のアプローチの提案
 キーボード操作支援ツールの開発
 変更可能な要素をハイライトしてプログラマーに提案
 次の変更にキーボード操作の支援、キー入力回数を減少
 ツールの利用による生産性向上の評価
研究概要と貢献内容
3
 簡易プレビュー(動画)
研究の目的: 類似した要素のパターン
4
 類似した要素:類似したソースコード断片に位置と特徴も類似して
いるプログラム要素
 類似した要素に対する代表的なパターン
 パターン 1: メソッドのパラメータ(Method parameters)
 パターン 2: switchブロックのcase値(Case values)
switch (intSelector) {
case 111:
this.GetMultiply(local_int_1, strNum[intSelector]);
Console.WriteLine("The first case.");
break;
case 222:
this.GetMultiply(local_int_2, strNum[intSelector]);
Console.WriteLine("The second case.");
break;
case 333:
this.GetMultiply(local_int_3, strNum[intSelector]);
Console.WriteLine("The third case.");
break;
....... }
この例、アプローチ
の紹介にも使用
Method parameters
Case
values
研究の目的: 類似した要素のパターン
5
 類似した要素における代表的なパターン
 パターン 3: 配列の要素(Array elements)
 パターン 4: ローカル変数名または値(Local variables)
 パターン 5: メソッド名(Method names)
void function_A (int a, int b) {
string[] strNum = new string[] {
"one", "two", "three", "four", "five", "six",
"seven", "eight", "nine",
};
}
void function_B () {
int local_int_C = 111;
string local_String_D = "Hello world";
}
Method
names
Local variables
Array elements
研究の目的: 従来の操作方法
6
 要素を変更する操作方法
 テキストを消してから入力(BackSpaceキー)
 テキストをセレクトしてから入力 (本稿対象)
 要素のテキストのセレクト方法
 マウス派
 Double-Click
 Click-and-Drag
 キーボード派
 [Shift]+arrow
 [Ctrl]+[Shift]+[Right arrow] | [Left arrow]
問題: コーディング中のキー操作コスト
7
 変更すべき要素が多かったり、ソースコードに散らばって
いたりする場合
 変更すべき要素を見逃
さないため、時間を要する
 次々と要素を見つける
のに、時間を要する
 連続したキーボード
操作が面倒
問題: コーディング中のキー操作コスト
8
 キーボード派の方を対象とした実験
 パターンごとに類似した要素が九つあり、各要素のテキストを
書き直し
 最少キー入力原則
 セレクトと移動操作が全体に占める割合を求め
結果:コーディングの中、セレクトと移動操作のコストが無視できない存在
セレクトと
移動操作
その他の操作
(要素の入力)
全体の33%
SimilarHighlightの全体像
9
Code2Xml
ソースコード
パーサ
要素の部分木を比較
4
7 8
20
16
候補ノード
集合
Visual Studio IDE
dll
1
5
9 10
2 3
4
7 8
6
11 12
構文木
...
...
全ての候補ノードが類似
度パターンと比較
要素をハイライト
構文木
に変換
候補ノード
タイプ(TOP)
候補ノード網羅
類似した要素
(マッチした要素)
TOP
YYY ZZZ
類似度
パターン32
24
11
5
9 10
TOP
YYY AAA
Targe
t
TOP
YYY
..
..
構文木に変換、対応するノードの確定
10
 ソースコードがCode2Xmlライブラリにより構文木に変更
 Console.WriteLine("The first case."); のXMLテキスト(簡略)
<brackets_or_arguments id="257">
<arguments id="276">
<TOKENS id="char_literal279">
<TOKEN id="char_literal279" …>(</TOKEN>
</TOKENS>
<argument_list id="280">
<STRINGLITERAL id="set1275">
<TOKEN id="set1275" startline="86"
startpos="38" end-line="86" endpos="55">
"The first case."</TOKEN>
</STRINGLITERAL>
</argument_list>
<RPAREN id="char_literal281">
<TOKEN id="char_literal281" …>)</TOKEN>
</RPAREN>
</arguments>
</brackets_or_arguments>
位置情報
最外有効先祖(Outermost ancestor)
先祖ノードの中、ほかの直接子ノード
がなく一番外側のノード
最外有効先祖のノードタイプ
プログラム要素のタイプとみなす
タイプ
argument_list
STRINGLITERAL
"The first case."
TOKEN
構
文
木
中
の
表
現
ノード省略
部分木の比較
11
 "The first case." と "The second case."の部分木の比較
 構文木に要素に対応するノードの位置の確定
brackets_or_arguments
(
"The first case."
一部ノード省略
Console
.
WriteLine
argument_list )
Console.WriteLine("The second case.");
brackets_or_arguments
(
"The second case."
Console
.
WriteLine
argument_list )
Console.WriteLine("The first case.");
TOKEN TOKEN
類似度パターン: 周囲ノード集合の比較
12
 要素の周囲ノード集合の比較
 周囲ノード(先祖ノード、兄弟ノード、子孫ノード)の網羅
一部データ省略
ノード集合
[23]:argument_list280
[24]:argument_list>'"
The first case."'
[25]:argument_list-'('
[26]:argument_list-')'
[28]:argument_list-
TOKENSchar_literal279(
[29]:argument_list-
RPARENchar_literal281)
ノード集合
[23]:argument_list280
[24]:argument_list>'"
The second case."'
[25]:argument_list-'('
[26]:argument_list-')'
[28]:argument_list-
TOKENSchar_literal279(
[29]:argument_list-
RPARENchar_literal281)
"The first case."のノード集合 "The second case."のノード集合
類似度
パターン
[23]:argument_list280
[25]:argument_list-'('
[26]:argument_list-')'
[28]:argument_list-
TOKENSchar_literal279(
[29]:argument_list-
RPARENchar_literal281)
20
類似度パターンにマッチした要素の網羅
13
 候補ノードタイプを利用して候補ノードを抽出
候補ノードタイプ
(argument_lis)
t
20
16
候補ノード
集合
32
2411
類似度パターン
brackets_or_arguments
(
"The first case."
argument_list )
brackets_or_arguments
(
"The second case."
argument_list )
brackets_or_arguments
( argument_list )
argument_list
各自の周囲ノード集合
候補ノード
抽出
共通データ数 敷値 類似した要素
比較
>
...
11 16 ...
Visual Studioの拡張機能
14
 連続してセレクトされた要素に類似した要素を全てハイライト
 ショートカットキーの利用により前か次の要素がすぐ見つかり
 要素のテキストがセレクトされる状態
• 右側にマーカーバーを追加、要
素の相対位置を表示
• “Similar”のアウトプットウィンド
ウを追加、類似した要素の情報
を提供
• 機能の有効化または無効化
敷値などの設定機能
評価1: 最少キー入力回数の減少
15
 実験1:従来の方法での実験結果と比較
 研究目的の実験を再実施
 セレクトと移動操作における最少キー入力原則
 ツールの利用すると従来方法の比較
結果:セレクトと移動操作がツールの利用によってほとんど70%減少
評価2: 手間の減少による生産性の向上
16
 実験2: 10個のcaseブロック、4種類の要素の修正を要する
 対象:情報系修士の学生8人
switch(intSelector) {
case 111:
this.GetMultiply(intOne, strNum[intTwo]);
Console.WriteLine("one 1");
break;
case 111:
this.GetMultiply(intOne, strNum[intTwo]);
Console.WriteLine("one 1");
break;
case 111:
this.GetMultiply(intOne, strNum[intTwo]);
Console.WriteLine("one 1");
break;
case 111:
this.GetMultiply(intOne, strNum[intTwo]);
Console.WriteLine("one 1");
break;
… … }
switch (intSelector) {
case 111:
this.GetMultiply(intOne, strNum[intTwo]);
Console.WriteLine("one 1");
break;
case 222:
this.GetMultiply(intTwo, strNum[intThree]);
Console.WriteLine("two 2");
break;
case 333:
this.GetMultiply(intThree, strNum[intFour]);
Console.WriteLine("three 3");
break;
case 444:
this.GetMultiply(intFour, strNum[intFive]);
Console.WriteLine("four 4");
break;
… … }
変更前 変更後
修正点① 修正点② 修正点③
修正点④
評価2: 手間の減少による生産性の向上
17
 実験2:一つswitchブロックにcaseブロックが10個ある
 ツールの利用すると利用しない場合
 時間、キー入力回数を測定
結果:全体的に時間が27%減少、キー入力回数が40%減少
時
間
キ
ー
入
力
回
数
被験者
ツール有りツール無し
評価3: ツールの実行効率
18
 RQ2:SimilarHighlightがスムーズに動作するか?
 五つソースファイルで五つパターンの実行時間を測定
棒の長さ:平均実行時間(ミリ秒) SLOC: ソースコード行数
棒の上の数値: 類似した要素の数
結果:類似した要素がハイライトされるまで1秒もかからない
(ソースコード行数が5000以下の場合)
1000行以下の場合、400ms以下
1秒以下
関連研究
19
 コードクローン (Code Clone) 検出のメイン技術
 文字列 (string-based)
 トークン (token-based)
 構文木 (tree-based) 我々のアプローチ
 プログラム依存グラフ (PDG-based)
まとめと今後の展望
20
 類似したプログラム要素検出のアプローチの提案
 SimilarHighlight:キーボード操作支援のツール
 変更可能な要素をハイライトしてプログラマーに提案
 次の変更にキーボード操作の支援、キー入力回数を減少
 評価結果
 キーボードのキー入力回数と作業時間の減少を実現、プログ
ラミング生産性の向上に成功
 今後の展望
 ツールの実行効率の向上
 類似した要素の検出精度向上
 もっと多くのプログラミング言語の支持
 もっと多くの類似した要素のパターンの抽出
 類似した要素の修正内容提案の補完機能追加

More Related Content

Viewers also liked

ビッグデータとクラウドソーシング
ビッグデータとクラウドソーシングビッグデータとクラウドソーシング
ビッグデータとクラウドソーシングtokyowebmining-common
 
エンターテイメント業界におけるAWS活用事例
エンターテイメント業界におけるAWS活用事例エンターテイメント業界におけるAWS活用事例
エンターテイメント業界におけるAWS活用事例Amazon Web Services Japan
 
Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Atsushi Tsuchiya
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくるAtsushi Hayakawa
 
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開Atsushi Fujita
 
クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門Naoto MATSUMOTO
 

Viewers also liked (7)

ビッグデータとクラウドソーシング
ビッグデータとクラウドソーシングビッグデータとクラウドソーシング
ビッグデータとクラウドソーシング
 
VIOPS10: DMM.comのインフラのこれから
VIOPS10: DMM.comのインフラのこれからVIOPS10: DMM.comのインフラのこれから
VIOPS10: DMM.comのインフラのこれから
 
エンターテイメント業界におけるAWS活用事例
エンターテイメント業界におけるAWS活用事例エンターテイメント業界におけるAWS活用事例
エンターテイメント業界におけるAWS活用事例
 
Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版Spark勉強会_ibm_20151014-公開版
Spark勉強会_ibm_20151014-公開版
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくる
 
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開
アプリストア最適化 (ASO) 虎の巻 - ASOコンサルティングのノウハウ公開
 
クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門
 

Similar to SimilarHighlight(A Tool to Suggest Similar Program Element Modifications)

DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDaiyu Hatakeyama
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatusOfficial
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04openrtm
 
自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案拓也 岸本
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京tuchimur
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Shotaro Suzuki
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generatorOda Shinsuke
 
2019 summercamp 04
2019 summercamp 042019 summercamp 04
2019 summercamp 04openrtm
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
Oracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろうOracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろう良 亀井
 
「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?Keiichiro Ono
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreShotaro Suzuki
 

Similar to SimilarHighlight(A Tool to Suggest Similar Program Element Modifications) (16)

DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
Java勉強会2017.3.17
Java勉強会2017.3.17Java勉強会2017.3.17
Java勉強会2017.3.17
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04
 
自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
2019 summercamp 04
2019 summercamp 042019 summercamp 04
2019 summercamp 04
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
Oracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろうOracle APEX もくもく会 プラグインを作ろう
Oracle APEX もくもく会 プラグインを作ろう
 
「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?
 
積算ソフト虎の巻
積算ソフト虎の巻積算ソフト虎の巻
積算ソフト虎の巻
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net core
 

SimilarHighlight(A Tool to Suggest Similar Program Element Modifications)