SlideShare a Scribd company logo
1 of 25
Download to read offline
逆戻りデバッグ補助のための
嵌入的スパイの試作
神谷 年洋
島根大学大学院総合理工学研究科
かんにゅう
IEICE SIGSS 2016年7月研究会 於 札幌
神谷年洋, 逆戻りデバッグ補助のための嵌入的スパイの試作, 信学技報, vol. 116, no. 127, pp. 87-92, (2016-07-14)
逆戻りデバッグとは?
●
逆戻りデバッグ、backward-in-time debugging, omniscient
debugging[13]
●
逆向きにステップ実行ができるデバッガ(によるデバッグ)
� ステップ実行で行き過ぎる(原因であると思われる箇所を通り
すぎる) → 戻る
� 出力の文から逆向きにステップ実行していく
●
実装: 実行途中の状態をすべて保存する or
状態を復元できる実行トレースを保存する
[13] B. Lewis, M. Ducasse, Using Events to Debug Java
Programs Backwards in Time, OOPSLA’03
クラッシュしないバグとは?
クラッシュするバグ クラッシュしないバグ
現象 プログラムの実行が中
断する
プログラムの実行は終了す
るが振る舞いが予想外
デバッグの
起点
実行が中断した場所が
デバッグの起点になる
プログラムのどの部分がそ
の振る舞いに相当するのか
を調べるところから
原因 初期化し忘れなどの軽
微なエラーも含まれる
ロジックの誤り
⇒ クラッシュしないバグのほうが修正が難しい
クラッシュしないバグの デバッグ作業とは?
(1) 選択したプログラム(の一部分)を対象
として、
(2) プログラムの実行を通して、さまざまな
入力が与えられ出力が得られるのを観察し、
(3) それらの入出力が正しいか(期待した振る
舞いか)を判定する
(4) 上の(1)〜(3)を、対象を変化させつつ繰り
返し、不具合の原因を特定する
不具合の原因: 期待通りの入力に対して、期待した
出力をしない小さなプログラムの部分
クラッシュしないバグの特定 ≒ プログラム理解
完全には理解できていない、
文書化されていない
期待した振る舞い=仕様
仕様の復元、確認
スパイとは?
●
ユニットテストにおいて、オブジェクト
間でやり取りされるメッセージを捉える
機能
– Java向けのライブラリMockitoは、
スパイ、モック、スタブといった機
能を提供している
●
スパイを用いたテスト:
プログラムの実行中に実際に呼び出さ
れたメソッドのそれぞれについて、
その順序や引数の値が期待されるもの
と同じか確認する
– 実測値(actual) vs 期待値(expected)
「ケース」に対するメソッド呼び出し(実測値):
(1) ProductName()→ [“Oval”, “Duvel”]
(2) qty(“Oval”) → 4
ユーザ
在庫管理 ケース
在庫確認
productNames()
["Oval", "Duvel"]
qty("Oval")
4
在庫表示
「ケース」に対するメソッド呼び出し(期待値):
実行トレースの記録
●
実行トレースとは
– 対象プログラムを実行し
●
インストラクション(呼びだされた手続きや計算された式)
●
引数や戻り値(評価値)など
を時間順に記録したもの
– 手続き呼び出しについては、入る(呼び出しにより)と出る(リ
ターンや例外送出など)の2つのイベントを記録 → コールツリー
●
値の記録方法
– アトミックな値(intやboolなど)については、その値の表現(123
やTrue)を記録
– オブジェクト(内部構造; フィールドを持つ)については、IDを記録
●
フィールドの値が必要なときは、そのオブジェクトのフィールド
への参照や代入といったインストラクションを遡ることで再現
実行トレースの記録の方法のバリエーションとしては、オブジェクトの内部
のデータまで含めて記録、分岐ごとに1ビットでどちらをたどるか記録、等
:54568 1.1 load_const None
:54569 1.1 line file=cal.py line=2
:54570 1.1 load_const -1
:54571 1.1 load_const <tuple #5606>
:88854 1.1 line file=cal.py line=4
:88855 1.1 load_const <string #8171> text='Su Mo T
Sa'
:88856 1.1 line file=cal.py line=6
:88857 1.1 load_const <code #8172> name=print_c
file=cal.py line=6
:88858 1.1 line file=cal.py line=17
:88859 1.1 load_const <code #8173> name=main fi
line=17
:88860 1.1 line file=cal.py line=22
:88861 1.1 load_const <string #2832> text='__main
:88862 1.1 result True
:88863 1.1 line file=cal.py line=23
:88864 1.1 call <code #8173> name=main file=cal.p
:88865 1.1 line file=cal.py line=18
:88866 1.1 load_global_from <string #91> text='int'
:88867 1.1 result <type #92> name=int
:88868 1.1 load_global_from <string #2055> text='s
:88869 1.1 result <module #5>
:88870 1.1 call $LOAD_ATTR$
:88871 1.1 self.0 <module #5>
:88872 1.1 arg.1 <string #8174> text='argv'
:88873 1.1 return <list #8175>
:88874 1.1 load_const 1
:88875 1.1 call $BINARY_SUBSCR$
:88876 1.1 self.0 <list #8175>
:88877 1.1 arg.1 1
:88878 1.1 return <string #8176> text='2016'
:88879 1.1 line file=cal.py line=19
:88880 1.1 load_global_from <string #91> text='int'
:88881 1.1 result <type #92> name=int
:88882 1.1 load_global_from <string #2055> text='s
:88883 1.1 result <module #5>
:88884 1.1 call $LOAD_ATTR$
:88885 1.1 self.0 <module #5>
:88886 1.1 arg.1 <string #8174> text='argv'
実行トレースの記録
●
実行トレースとは
– 対象プログラムを実行し
●
インストラクション(呼びだされた手続きや計算された式)
●
引数や戻り値(評価値)など
を時間順に記録したもの
– 手続き呼び出しについては、入る(呼び出しにより)と出る(リ
ターンや例外送出など)の2つのイベントを記録 → コールツリー
●
値の記録方法
– アトミックな値(intやboolなど)については、その値の表現(123
やTrue)を記録
– オブジェクト(内部構造; フィールドを持つ)については、IDを記録
●
フィールドの値が必要なときは、そのオブジェクトのフィールド
への参照や代入といったインストラクションを遡ることで再現
実行トレースの記録の方法のバリエーションとしては、オブジェクトの内部
のデータまで含めて記録、分岐ごとに1ビットでどちらをたどるか記録、等
:54568 1.1 load_const None
:54569 1.1 line file=cal.py line=2
:54570 1.1 load_const -1
:54571 1.1 load_const <tuple #5606>
:88854 1.1 line file=cal.py line=4
:88855 1.1 load_const <string #8171> text='Su Mo T
Sa'
:88856 1.1 line file=cal.py line=6
:88857 1.1 load_const <code #8172> name=print_c
file=cal.py line=6
:88858 1.1 line file=cal.py line=17
:88859 1.1 load_const <code #8173> name=main fi
line=17
:88860 1.1 line file=cal.py line=22
:88861 1.1 load_const <string #2832> text='__main
:88862 1.1 result True
:88863 1.1 line file=cal.py line=23
:88864 1.1 call <code #8173> name=main file=cal.p
:88865 1.1 line file=cal.py line=18
:88866 1.1 load_global_from <string #91> text='int'
:88867 1.1 result <type #92> name=int
:88868 1.1 load_global_from <string #2055> text='s
:88869 1.1 result <module #5>
:88870 1.1 call $LOAD_ATTR$
:88871 1.1 self.0 <module #5>
:88872 1.1 arg.1 <string #8174> text='argv'
:88873 1.1 return <list #8175>
:88874 1.1 load_const 1
:88875 1.1 call $BINARY_SUBSCR$
:88876 1.1 self.0 <list #8175>
:88877 1.1 arg.1 1
:88878 1.1 return <string #8176> text='2016'
:88879 1.1 line file=cal.py line=19
:88880 1.1 load_global_from <string #91> text='int'
:88881 1.1 result <type #92> name=int
:88882 1.1 load_global_from <string #2055> text='s
:88883 1.1 result <module #5>
:88884 1.1 call $LOAD_ATTR$
:88885 1.1 self.0 <module #5>
:88886 1.1 arg.1 <string #8174> text='argv'
:88870 1.1 call $LOAD_ATTR$
:88871 1.1 self.0 <module #5>
:88872 1.1 arg.1 <string #8174> text='arg
:88873 1.1 return <list #8175>
●
逆戻りデバッグ(デバッガ)
●
クラッシュしないバグ
●
クラッシュしないバグのデバッグ作業
– プログラム理解
●
スパイ
●
嵌入的スパイ
●
嵌入的スパイによるデバッグ作業
逆戻りデバッグ補助のための嵌入的スパイ
アイデア: プログラム理解のための機能を強化し
たデバッガ
●
デバッグ中に動作を理解したいコード断片に
ついて
●
それをひとつの部品(オブジェクト)と捉え
たときの入出力を観察したい
●
プログラム実行(振る舞い)の全体(文脈)
を意識しながら
●
対話的に利用したい
かんにゅう
[スパイ]
必ずしも手続き単位ではない。
手続きの一部や、複数の手続きに
またがることも
[嵌入的; intrusive]
逆戻りデバッグ
実行トレースの記録があるので、
対話的なUIで(対象プログラムを再度実行
することなく)スパイを構成できる
デバッグ作業のモデル
●
前提: 再現するバグ
– 対象のプログラムに特定の入力を与えると
誤った出力(予想外の振る舞い)が得られ
る
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 通常のデバッガによるステップ実行
●
インストラクションをひとつ実行するたびに
(一時)停止して、
●
引数や戻り値を確認する
m
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 通常のデバッガによるステップ実行
●
インストラクションをひとつ実行するたびに
(一時)停止して、
●
引数や戻り値を確認する
n
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 通常のデバッガによるステップ実行
●
インストラクションをひとつ実行するたびに
(一時)停止して、
●
引数や戻り値を確認する
o
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 通常のデバッガによるステップ実行
●
インストラクションをひとつ実行するたびに
(一時)停止して、
●
引数や戻り値を確認する
q
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 通常のデバッガによるステップ実行
●
インストラクションをひとつ実行するたびに
(一時)停止して、
●
引数や戻り値を確認する
r
… 通り過ぎてしまった
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 逆戻り+トレース表示ありデバッガによるデ
バッグ
●
各インストラクションの実行を、任意の順番で
調べていく
m
n
o
p
q
r
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 嵌入的スパイによるデバッグ
●
(実行トレース上で連続したインストラクションに相当する)
コード断片を指定し
– 図のS, T, U
その入出力値を観察する
– 図のa, b, c, d, e
●
入出力値の観察を通して
– コードの仕様を理解する
– 値が予想通りか確認することで範囲を絞っていく
m
q
r
a
d e
S
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 嵌入的スパイによるデバッグ
●
(実行トレース上で連続したインストラクションに相当する)
コード断片を指定し
– 図のS, T, U
その入出力値を観察する
– 図のa, b, c, d, e
●
入出力値の観察を通して
– コードの仕様を理解する
– 値が予想通りか確認することで範囲を絞っていく
m
n
q
r
a
b
d e
S
T
デバッグ作業のモデル
●
前提: 再現するバグ
▷ 嵌入的スパイによるデバッグ
●
(実行トレース上で連続したインストラクションに相当する)
コード断片を指定し
– 図のS, T, U
その入出力値を観察する
– 図のa, b, c, d, e
●
入出力値の観察を通して
– コードの仕様を理解する
– 値が予想通りか確認することで範囲を絞っていく
m
n
o
p
q
r
a
b
c
d e
S
T
U
「コード断片」
実行トレース内のサブシーケンス(連続したインストラクション)
を「コード断片」とみなす
●
「コード断片」の入出力値を考えることができる → プログラム
理解
– 「入力値」: サブシーケンスの外で定義されサブシーケンス内
で利用される値
– 「出力値」: サブシーケンスの内で定義されサブシーケンス外
で利用される
●
実行トレース⇔ソースコードの対応を利用することで
– 対応するソースコードの断片がループの中にあるとき → 繰り
返しの各実行について、「コード断片」入出力値を比較できる
●
比較可能な「コード断片」を探しだして入出力値を比較(未実
装)
l
ll
l
嵌入的スパイツールの機能
ブラウズ: 実行トレースをツリーとして表示/折りたたみ
ソースコード参照: 実行トレースと対応するソースコードを並べて表示
検索: 実行トレース内で値、メソッド名、オブジェクトIDにより検索
キャプチャーポイント:
– 実行トレース内の指定した位置のメソッド呼び出し等の引数や戻
り値の値を表示
– ソースコード内の位置から指定して値を表示/比較
実際には、ソースコードの行毎に実行トレースを折りたたみ
→ 折りたたんだ位置の上でキャプチャーポイントを指定
→ 該当するすべての位置にキャプチャーポイントが設定される
実装
嵌入的スパイツールは、実行トレース取得ツールと実行トレースビューアからなる
●
実行トレース取得ツール
– Python 2.7.11インタープリタ(C言語)に860行の追加・修正
– インタプリタに手を入れることで
●
大域変数への代入や参照を記録
●
実行トレース全体で一意なオブジェクトIDを生成
●
実行トレースビューア
– 実行トレースの表示や折りたたみ、
キャプチャーポイント、検索
– lessコマンドに似せたUI
– 2375行のPythonコードにより実装
デバッガの
デバッグって
難しぃ�
例題/デモ?
まとめと展望
●
バグ位置の特定 ≒ プログラム理解
●
逆戻りデバッグのための嵌入的スパイを提案した
– プログラム理解のための機能を強化したデバッガ
– 入出力からコード断片(サブシーケンス)の機能を調べる
●
簡単な実装をおこなった
展望
●
大規模な実行トレースに対応できるように
– データ構造とアルゴリズムの設計
●
視覚的なフィードバックの強化
●
比較可能なサブシーケンスを発見する機能
Thanks to
フォント:
●
アームド・バナナ http://calligra-tei.oops.jp/ex-banana.html
●
りいてがき筆 http://www.kcc.zaq.ne.jp/in-mlg/freefont/riitf/
イラスト:
●
いらすとや http://www.irasutoya.com/

More Related Content

Similar to 逆戻りデバッグ補助のための嵌入的スパイの試作

第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016kyoto university
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share久司 中村
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...Insight Technology, Inc.
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallなおき きしだ
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-Takakiyo Tanaka
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。Matsushita Satoshi
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオンシンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン健一 茂木
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Daiyu Hatakeyama
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理土岐 孝平
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)fumoto kazuhiro
 

Similar to 逆戻りデバッグ補助のための嵌入的スパイの試作 (20)

第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016第3回 JavaScriptから始めるプログラミング2016
第3回 JavaScriptから始めるプログラミング2016
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
 
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオンシンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
シンプルな9つのサンプルで学ぶJava Script初心者のためのAngularJS超入門ハンズオン
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版Azure Machine Learning Services 概要 - 2019年2月版
Azure Machine Learning Services 概要 - 2019年2月版
 
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
 

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 TreeKamiya Toshihiro
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案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
 
任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案
任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案
任意粒度機能モデルに基づく動的型付けプログラミング言語向けソースコード検索手法の提案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 PathKamiya Toshihiro
 
And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用Kamiya Toshihiro
 
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善Kamiya Toshihiro
 
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法Kamiya Toshihiro
 

More from Kamiya Toshihiro (12)

ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
ソースコード推薦あるいは修正の情報源としての質問掲示板とソースコードレポジトリの比較
 
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
 
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案実行トレース間のデータの差異に基づくデータフロー解析手法の提案
実行トレース間のデータの差異に基づくデータフロー解析手法の提案
 
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
 
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
 
And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用
 
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
任意粒度機能モデルに基づくコードクローン検出手法の大規模プログラムの適用に向けた改善
 
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
任意粒度機能モデルに基づくバイトコードからのコードクローン検出手法
 

逆戻りデバッグ補助のための嵌入的スパイの試作