SlideShare a Scribd company logo
任意粒度機能モデルに基づく
動的型付けプログラミング言語向け
ソースコード検索手法の提案
神谷年洋, はこだて未来大学
kamiya@fun.ac.jp
SIGSS 2015年1月研究会 於 鳥取 2015-01-27
神谷年洋, “任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコー
ド検索手法の提案”, 電子情報通信学会技術研究報告書, vol. 114, no. 415, pp.121-
126.
2
発表内容
今回はいわゆる「ツールデモペーパー」になっています
– 2013年10月の発表の拡張であり、原稿の方はその発表を
前提に
– 発表の構成は原稿とは変えてあります
(1) コード検索とは
(2) 小さなサンプルに対する適用(使い方)…3節
(3) アルゴリズム …4節
(4) より大きな例に対する適用例 …5節
(5) 議論 …6節
3
ソースコードを検索する様々な場面
 再利用可能な機能を持つコードを探す
「この機能って誰か作ってないかな?」
(再利用可能なコンポーネントになっているとは限らず、ベタ書きの
可能性も)
 APIの利用例を探す
「Aの典型的な使い方は?」
「AとBを組み合わせて使ってる例はないかな?」
 類似したコードを探す
ある修正を同じようなコードの全てに行いたい
 特定の実行に対応する場所を探す(デバッグ)
「このエラーメッセージはどこで作られたんだ?」
「このボタンを押したときの処理ってどこ?」
4
…およびそれらを支援する手法
●
鷲崎 , 深澤 , “ 有向置換性類似度に基づくコンポーネント検索方式
の実現と評価 ,” 情報処理学会論文誌 , Vol.43, No.6,pp.1638-
1652, 2002.
●
横森ら , “Java ソフトウェア部品検索システム SPARS-J,” 電子情報
通信学会論文誌 D-I, Vol.J87-D-I, No.12, pp.1060-1068, 2004.
●
S. Thummalapenta, Tao Xie, “Parseweb: a programmer
assistant for reusing open source code on the web,” Proc.
the 22nd IEEE/ACM Int’l Conf. Automated Softw. Eng.
(ASE’07), pp. 204-213, 2007.
●
泉田ら, “ ソフトウェア保守のための類似コード検索ツール ,” 電子情
報通信学会論文誌 , Vol.J86-D-I, No.12, pp.906-908, 2003.
●
D. Poshyvanyk, A. Marcus, “Combining Formal Concept
Analysis with Information Retrieval for Concept Location in
Source Code,” Proc. 15th IEEE Int’l Conf. Program
Comprehension(ICPC ’07), pp.37-48, 2007.
5
提案手法
プログラムの実行トレース内から、検索キーワードが含まれる部分
列を探す
入力1: 対象プログラム(→ 実行トレース)
入力2: 検索キーワード
– 関数やメソッドの名前
– 型の名前
– 整数や文字列の値(実引数や戻り値、リテラル)
出力: 検索キーワードを含むコールツリーの部分グラフ
→ 利用者になるべく小さな部分列を提示するため、ツリーの構
造を考慮したコンパクト化を行う
6
想定する利用場面
前述の「様々な場面」のうち、
 再利用可能な機能を持つコードを探す
 APIの利用例を探す
(例) 複数のメソッド名から、それらが同時に使われている例
を探す
 類似したコードを探す
 特定の実行に対応する場所を探す(デバッグ)
(例) 与えられた文字列をファイルに書き込んでいる部分を
探す
●
定数(リテラル)に限らず
8
デモ: 準備
(1) 対象プログラムを実行して実行トレースを取得
(2) 検索のインデックスを作成
(インデックスのデータ構造については後述)
対象プログラムと引数
実行トレースやインデックスを
格納するディレクトリ
実行結果は
通常の実行と同じ
9
デモ: 1回目の検索
目的: 対象プログラムが「2015-01-21」という文字列を受け
取って結果を印字する実行の全体像を調べたい
検索キーワード: v.2015-01-21 と f.write
検索結果:
– 関数mainの中で、文字列 “2015-01-21” を引数として メソッド
CalendarUtil.get_dayを呼び出す …①
– 同mainの中で、何らかのファイルに “Wed” を印字(write) …②
①
②
– paodate/Dateという型が利用されていることが判明 …①
「v.」は値、
「f.」は関数名/メソッド名
10
フォーマットの説明
●
手続きの呼び出し
– 呼び出しの入れ子関係はインデ
ントで表現
(returnも例外送出によるもの
も)
呼び出された手続き 呼び出した場所
: 実引数の値 …
> 戻り値
●
手続き
– パッケージ名/クラス名/メソッド名
– パッケージ名//関数名
●
値
– 文字列、数値 → 値を表現する文
字列
– それ以外のオブジェクト → <型>
手続きや値は検索キーワードに
マッチすると赤で印字される
①
11
デモ: 2回目の検索
目的: 1回目の検索で見つかった型Dateのオブジェクトがどこで生
成されたか知りたい
検索キーワード: f.Date/__init__ と v.2015-01-21
– 「__init__」はコンストラクタの名前(プログラミング言語の規約)
– (f.Date/__init__ だけだと関係ない検索結果も出てきてしまうので、
前回の v.2015-01-21 も追加)
検索結果: メソッド CalendarUtil.get_day の中でこのコンストラク
タを呼び出していた
「%Y-%m-%d」というそれらしいフォーマットが渡されている
→ このオブジェクトが文字列を時間データに変換するなど、
プログラムの重要な役割を担っている?(推測)
12
デモ: 3回目の検索
目的: 型Dateのオブジェクトに対する操作がどこで行われているかを
調べる
検索キーワード: t.Date
検索結果: オブジェクトの生成以外にも、引き算(メソッド__sub__の
呼び出し)が行われていた …③
「t.」は型名
③
13
デモ: 4回目の検索
目的: (これまでの検索結果を踏まえ)型Dateのオブジェクトに対する操
作を行い、その結果何かを印字するという実行系列の全体像を見たい
検索キーワード: f.Date/__init__, f.Date/__sub__, f.write
検索結果: 型Dateのオブジェクトを直接操作しているのは
– メソッド CalendarUtil.get_day と …④
– メソッド CalenderUtil.get_day_of_week である …⑤
– それら2つのメソッドを、関数mainが呼び出している …⑥
④
⑤
14
デモ: 4回目の検索
目的: (これまでの検索結果を踏まえ)型Dateのオブジェクトに対する操
作を行い、その結果何かを印字するという実行系列の全体像を見たい
検索キーワード: f.Date/__init__, f.Date/__sub__, f.write
検索結果: 型Dateのオブジェクトを直接操作しているのは
– メソッド CalendarUtil.get_day と …④
– メソッド CalenderUtil.get_day_of_week である …⑤
– それら2つのメソッドを、関数mainが呼び出している …⑥
④
⑤
⑥
15
デモのまとめ
 プログラムの仕様を手がかりとして始めた
– (途中でソースコードを参照することなく)
 対話的に検索を進めていくプロセス
– 開始から終了までの実行系列
– → 重要な機能を持つクラス
– → クラスのオブジェクトに対するすべての操作
– → そのオブジェクトの操作を含む開始から
終了までの実行系列
16
検索手法
データ構造
●
コールツリー
– 節点は手続き(関数、メソッド)の呼び出し
●
同じ関数が2回呼び出されれば、2つの子節点となる
– 呼び出しの順序=子節点の順序
– 節点は属性として、呼び出された手続きの名前、実引数
や戻り値を持つ
●
サマリ
– コールツリー内の各節点について、その子孫節点の手
続き名、実引数や戻り値を集めた集合
– 子節点のサマリ ⊆ 親節点のサマリ
入出力
●
入力: 対象プログラム、検索キーワード
●
出力: 検索キーワードを含むコールツリーの部分グラフ
17
検索手法(続き)
手順
ステップ1
検索対象プログラムを実行して実行トレース
を取得
ステップ2
実行トレースからコールツリーとサマリを生
成
→ 「インデックス」としてDBに保存
ステップ3前半
検索キーワードの全てを属性に含むコール
ツリー内で深さが極大の節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与
しない子孫節点を除去
ステップ1
実行トレース取得
ステップ2
インデックス生成
ステップ3
検索
検索
キーワード
対象プログラム
検索結果
18
ステップ2(インデックス生成)の図解
ステップ2
実行トレースからコールツリーとサマリを生成
call i
call h
call a
call a
return
call b
return
return
call f
call c
return
call d
return
return
call g
call e
return
return
return
return
簡単のため、
実引数や戻り値は省略
→ 属性は手続名のみ
19
ステップ2(インデックス生成)の図解
call i
call h
call a
call a
return
call b
return
return
call f
call c
return
call d
return
return
call g
call e
return
return
return
return
i
h
a f g
a b c d e
コールツリーに変換
ステップ2
実行トレースからコールツリーとサマリを生成
20
ステップ2(インデックス生成)の図解
A = { a } A = { b } A = { c } A = { d } A = { e }
A = { a } A = { f } A = { g }
A = { h }
A = { i }i
h
a f g
a b c d e
各節点の属性を求める
ステップ2
実行トレースからコールツリーとサマリを生成
21
ステップ2(インデックス生成)の図解
属性からサマリを求める
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
ステップ2
実行トレースからコールツリーとサマリを生成
22
ステップ3(検索)の図解
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
Q = { a, e, f }
「手続き a と e と f を呼
び出してるところ」
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
23
ステップ3(検索)の図解
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
Q = { a, e, f } A(n) ∪ S(n) ⊆ Q を満た
し、深さ極大の節点n
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
24
ステップ3(検索)の図解
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
Q = { a, e, f }
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
25
ステップ3の図解
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
Q = { a, e, f }
Q の要素それぞれについて、
サマリにその要素を含む
一番浅い節点を探す
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
26
ステップ3(検索)の図解
A = { a },
S = ϕ
A = { b },
S = ϕ
A = { c },
S = ϕ
A = { d },
S = ϕ
A = { e },
S = ϕ
A = { a },
S = { a, b }
A = { f },
S = { c, d }
A = { g },
S = { e }
A = { h },
S = { a, b, c, d, e, f, g }
A = { i },
S = { a, b, c, d, e, f, g, h }
Q = { a, e, f } 見つかった節点より深い
節点を全て除去する
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
27
ステップ3(検索)の図解
Q = { a, e, f }
h
a f g
e
call h
call a
return
call f
return
call g
call e
return
return
return
検索結果
実行トレースの一部を
取り出したもの
ステップ3前半
検索キーワードの全てを属性に含む「極小」(コールツリー内で深さが極大の)
節点を特定
ステップ3 後半
見つかった節点を根とする部分木から、寄与しない子孫節点を除去
28
オープンソースプロダクトへの適用実験
対象 markdown2
– https://github.com/trentm/python-markdown2
– Pythonで記述されている
– マークダウンと呼ばれる記法で記述されたテキスト
を、HTMLに変換するライブラリ
– ユニットテストが付属する
→ 実行トレースを取得するのに利用
対象プロダクトのサイズ
30
検索の内容
付属のユニットテスト
– 144個のマークダウンテキストをHTMLに変換する
– うち16個が失敗する
– 失敗するテストケースについては「FAIL」というメッセージが印字される
→ 失敗するテストケースがどのように実行されているか調べよう!
探したい実行系列
– 何らかのデータをファイルから読み込み、
– 関数convertで変換して、
– 「FAIL」という文字列を印字するもの
→ 検索キーワード: f.read f.convert v.FAIL
検索結果
16個の失敗するテストケー
スのそれぞれについて
– ファイルから読み込まれた
マークダウンテキスト、
– 関数convertの呼び出し、
–
32
議論(制限)
●
実行トレースのカバレッジ
– 実行されないコードは検索対象にならない
– → カバレッジが高い実行トレースが存在することが前提
●
実行トレースの粒度
– 言語のプリミティブ(文字列の連結)などは実行トレースには記録されない
●
スケーラビリティ?
– 2千行そこそこのコードのインデックスが247MiB
– 単純計算では2百万行だと2百GiB超え?(未確認)
●
実装
– ソースコードがすぐに参照できるようにする
●
ファイル名と行番号にすべき(現状ではバイトコードのアドレス)
– 既存の開発環境や解析ツールとの相互運用を考える
33
まとめ
●
ソースコード検索手法
– APIの利用例の検索やデバッグで利用することを想定
●
デモ
– 日付を曜日に変換するプログラムを例題とした利用シナリオ
●
アルゴリズム
– 実行トレース → コールツリー → 検索語を含む部分グラフ
●
オープンソースプロダクトへの一適用例
– 単体テストのメッセージから該当する処理を探す
●
議論
– 技術的な制約がまだ多い。未実装部分も
34
発表後の修正
●
タイトルページに原稿の出典を入れました
●
タイポ修正 「形」→「型」 p.5
●
アルゴリズムの説明の修正 p.25
– (原稿の説明は正しかったのですが、スライドの説明が簡略化
しすぎて間違っていました)
●
「v.convert」→「f.convert」 p.30

More Related Content

What's hot

Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
KazuhiroSato8
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について
Yoshihiro Mizoguchi
 
Casual learning machine learning with_excel_no2
Casual learning machine learning with_excel_no2Casual learning machine learning with_excel_no2
Casual learning machine learning with_excel_no2
KazuhiroSato8
 
Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3
KazuhiroSato8
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回
Ryo Suzuki
 
DP特集
DP特集DP特集
DP特集
Dai Hamada
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ
Rei Takami
 
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
Tatsuki SHIMIZU
 
人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説
JustSystems Corporation
 
Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回
Ryo Suzuki
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
Kota Mizushima
 
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescppC++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
cocodrips
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
Masahiro Sakai
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
Hiroki Itô
 
Rustで始める競技プログラミング
Rustで始める競技プログラミングRustで始める競技プログラミング
Rustで始める競技プログラミング
Naoya Okanami
 
20170422 数学カフェ Part2
20170422 数学カフェ Part220170422 数学カフェ Part2
20170422 数学カフェ Part2
Kenta Oono
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
Hiromasa Ohashi
 
20150730 トピ本第4回 3.4節
20150730 トピ本第4回 3.4節20150730 トピ本第4回 3.4節
20150730 トピ本第4回 3.4節
MOTOGRILL
 
Casual learning machine_learning_with_excel_no7
Casual learning machine_learning_with_excel_no7Casual learning machine_learning_with_excel_no7
Casual learning machine_learning_with_excel_no7
KazuhiroSato8
 

What's hot (20)

Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
 
有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について有限オートマトンとスティッカー系に関するCoqによる形式証明について
有限オートマトンとスティッカー系に関するCoqによる形式証明について
 
Casual learning machine learning with_excel_no2
Casual learning machine learning with_excel_no2Casual learning machine learning with_excel_no2
Casual learning machine learning with_excel_no2
 
Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3Casual learning machine learning with_excel_no3
Casual learning machine learning with_excel_no3
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回
 
DP特集
DP特集DP特集
DP特集
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ
 
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~Magnitude ~ extend the Euler Characteristics via  Möbius Inversion ~
Magnitude ~ extend the Euler Characteristics via Möbius Inversion ~
 
人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説人工無脳バトル 1st STEP 回答と解説
人工無脳バトル 1st STEP 回答と解説
 
Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescppC++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
C++と仲良くなるためのn問 ~ポインタ編~ #ladiescpp
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
 
Rustで始める競技プログラミング
Rustで始める競技プログラミングRustで始める競技プログラミング
Rustで始める競技プログラミング
 
20170422 数学カフェ Part2
20170422 数学カフェ Part220170422 数学カフェ Part2
20170422 数学カフェ Part2
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
20150730 トピ本第4回 3.4節
20150730 トピ本第4回 3.4節20150730 トピ本第4回 3.4節
20150730 トピ本第4回 3.4節
 
Casual learning machine_learning_with_excel_no7
Casual learning machine_learning_with_excel_no7Casual learning machine_learning_with_excel_no7
Casual learning machine_learning_with_excel_no7
 

Similar to 任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案

Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
Takaaki Suzuki
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
 
C09
C09C09
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説JPCERT Coordination Center
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI
 
XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」takepu
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
wada, kazumi
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
Masahiro Sakai
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しよう
Yasutaka Kawamoto
 

Similar to 任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案 (13)

Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
C09
C09C09
C09
 
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
代数的実数とCADの実装紹介
代数的実数とCADの実装紹介代数的実数とCADの実装紹介
代数的実数とCADの実装紹介
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しよう
 

More from Kamiya Toshihiro

ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
Kamiya Toshihiro
 
Code Difference Visualization by a Call Tree
Code Difference Visualization by a Call TreeCode Difference Visualization by a Call Tree
Code Difference Visualization by a Call Tree
Kamiya Toshihiro
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
Kamiya Toshihiro
 
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
Kamiya Toshihiro
 
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作
Kamiya Toshihiro
 
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis MethodsIntroducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
Kamiya Toshihiro
 
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
Kamiya Toshihiro
 
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
Kamiya Toshihiro
 
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
Kamiya Toshihiro
 
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
Kamiya Toshihiro
 
An Algorithm for Keyword Search on an Execution Path
An Algorithm for Keyword Search on an Execution PathAn Algorithm for Keyword Search on an Execution Path
An Algorithm for Keyword Search on an Execution Path
Kamiya Toshihiro
 
PBLへのアジャイル開発手法導入の試み
PBLへのアジャイル開発手法導入の試みPBLへのアジャイル開発手法導入の試み
PBLへのアジャイル開発手法導入の試みKamiya Toshihiro
 
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
Kamiya Toshihiro
 
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
Kamiya Toshihiro
 

More from Kamiya Toshihiro (14)

ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
 
Code Difference Visualization by a Call Tree
Code Difference Visualization by a Call TreeCode Difference Visualization by a Call Tree
Code Difference Visualization by a Call Tree
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
 
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
コードクローン研究 ふりかえり ~ストロング・スタイルで行こう~
 
逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作逆戻りデバッグ補助のための嵌入的スパイの試作
逆戻りデバッグ補助のための嵌入的スパイの試作
 
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis MethodsIntroducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
Introducing Parameter Sensitivity to Dynamic Code-Clone Analysis Methods
 
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
 
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
An Execution-Semantic and Content-and-Context-Based Code-Clone Detection and ...
 
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
Web アプリケーションの UI 機能テストの ための HTML 構造パターンの抽出手法
 
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
WebアプリケーションのUI機能テストのためのHTML構造パターンの提案
 
An Algorithm for Keyword Search on an Execution Path
An Algorithm for Keyword Search on an Execution PathAn Algorithm for Keyword Search on an Execution Path
An Algorithm for Keyword Search on an Execution Path
 
PBLへのアジャイル開発手法導入の試み
PBLへのアジャイル開発手法導入の試みPBLへのアジャイル開発手法導入の試み
PBLへのアジャイル開発手法導入の試み
 
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
 
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
 

任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案