#author("2017-03-09T15:38:16+09:00","","") #author("2017-03-09T15:54:06+09:00","","") [[研究グループ]] *コードクローン研究グループ [#ua92c5d8] **Missions [#y8baf188] - コードクローンの作成と利用がソフトウェア品質に与える影響の解明 - コードクローンの作成と利用における属人性の影響の解明 **Projects [#z0be04a2] -[[Projects/CodeClone]]:ECTECの使い方等の資料 -[[Projects/]]:研究テーマ1(To be updated) --FindBugsを使ってバグ票から見つからないバグとクローンの関係 -[[Projects/]]:研究テーマ2(To be updated) --可視化ツール作成 **CC班コアタイム [#m4bcd5d9] - 13:30〜16:30 -- 来れない場合は連絡 **Members [#k1ca915a] - 大平 - 久木田 - 片桐 - 上西 **資料 [#o1703b4b] -2016/01/27: 久木田大ゼミ資料 --&attachref(60160037_久木田 雄亮_ver3.key); --&attachref(60160037_久木田 雄亮_ver3.pdf); -日付:資料名 --&attachref(); --&attachref(); *ミーティング議事録 [#q43045e9] **2017年3月9日 [#n36def60] ***大石 [#m07665af] -DONE --久木田先輩の論文を読む(3章) -TODO --プログラムの中身を理解 --D3,jsの勉強 --見せ方のイメージを作ってくる -MEMO --どんな見せ方にしたら分析に役立つかを考える ***久木田 [#pd86a4dc] -TODO --プロジェクト解析やりなおし --ツール公開準備(Bitbucketで公開リポジトリ作成) **2017年3月1日 [#g2e69879] ***大石 [#m5d620fd] -DONE --久木田先輩の論文を読む(2章まで) -TODO --プログラムの中身を理解 --論文3章読む -MEMO --視覚化 ---クローンがどこで変更されたか、俯瞰して見れるように **2017年2月9日 [#g18c3800] ***久木田 [#paeb27c4] -DONE --修論発表資料作成 --発表練習 --修論発表会 -TODO --修論修正 ---説明の追加 ---実験のやり直し ---Pajakの書き直し -MEMO --やることの優先度を決める(やるべきこと,余裕があればすること,簡単にできること) ***上西 [#lee452f1] -DONE --ケーススタディしながら執筆中... -TODO --ケーススタディ,考察,まとめ,関連研究 **2017年2月9日 [#p8a19845] ***久木田 [#paeb27c4] -DONE --修論提出 -TODO --修論発表資料作成 --発表練習 ***上西 [#e4a10466] -DONE --2,3章の第一版 --アプリ間類似スコアをネットワーク図的に表現しようとした? ---例(&attachref(app_distance_v0.pdf);) -TODO --for 各閾値について: ---全パターンのアプリの順位を人力で出してみて比べる ---いつかのクラスを対象に出るべき差分が出ているか見てみる --RQは2つに --ケーススタディ,考察,まとめ,関連研究 **2017年2月2日 [#p8a19845] ***久木田 [#paeb27c4] -DONE --評価実験 ---クローン追跡精度(1年間の新規・削除クローンの目視) --評価実験結果を論文に乗せる表にする --論文2,4章執筆 -TODO --論文残りを仕上げる --研究発表会資料作成 -MEMO --4章の評価実験で既存ツールと同じAntを使ったものにする(論文再提出の際に) --5章の分析事例1のプロジェクトを増やす ***上西 [#rf8114e2] -DONE --論理展開見直し中(&attachref(研究発表上西0202.pdf);) --LSIにかける場合の次元数を割合で指定するように変更 --LSI無効時に各クラスが持つメソッドも出力する機能を追加 -TODO --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2017年01月25日 [#p8a19845] ***久木田 [#q1850532] -DONE --評価実験 ---クローン追跡ツールの処理時間計測 -TODO --評価実験 ---クローン追跡精度(1年間の新規・削除クローンの目視) --評価実験結果を論文に乗せる表にする -MEMO -- ***上西 [#bf243a32] -DONE --論理展開見直し --実験対象のアプリを絞って処理にかけてみた ---Googleが提供しているサンプルアプリのコードがGitHubにあったのでコンパイルして利用 --実験プログラムで変更できる変数 ---「android.」から始まるクラスを除去 [(bool) True, False] ---クラスが含むメソッド数でフィルターするための閾値 [(int)] ---LSIにかけるか [(bool) True, False] ---LSIにかける場合の次元数 [(int)] ---クラス間類似度でフィルターするための閾値 [(float) -1.0~1.0] ---比較できるアルゴリズムは(今のところ)4つ用意 -TODO --実験の設計を考えてまとめる(アルゴリズムを複数決めてどのアルゴリズムがいいかを調べる方向で) --複数のジャンルからシンプルなアプリを2、3個取ってきて入れてみる(メモ帳など単機能っぽい系、音楽やPDFなどメディア系、カメラ系、メールやSNSなどインターネット系、などを想定) --一部のクラスを追加したアプリを比べる --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2017年01月19日 [#f833113c] ***久木田 [#q1850532] -DONE --大ゼミ発表向けのポスター作成 -TODO --評価実験 ---クローン追跡精度(1年間の新規・削除クローンの目視) ---クローン追跡ツールの処理時間集計 -MEMO -- ***上西 [#k39abe36] -DONE --出力をCSV形式を使ってとりあえず見やすくした --アプリ間類似度スコアが1にならない問題について、アルゴリズムのため1にできないことを理解した --論文タイトル「標準API呼び出しの共起関係を利用したアプリ検索手法の提案(仮)」 --論理展開を見直し中 -TODO --実験の設計を考えてまとめる(アルゴリズムを複数決めてどのアルゴリズムがいいかを調べる方向で) --複数のジャンルからシンプルなアプリを2、3個取ってきて入れてみる(メモ帳など単機能っぽい系、音楽やPDFなどメディア系、カメラ系、メールやSNSなどインターネット系、などを想定) --一部のクラスを追加したアプリを比べる --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2017年01月12日 [#b07c5951] ***久木田 [#q1850532] -DONE --論文に乗せる表の作成 --クローンAuthorShip(回数Ver,変更行数Ver)の計測 -TODO --大ゼミ発表向けのポスター作成 -MEMO -- ***上西 [#h0724dee] -DONE --動くもの↓を作成 --同じアプリに含まれるクラス間の類似度を計算しないように実装を変更 --2アプリ間の差分クラス(と類似クラス)を計算するアルゴリズム(以下)を実装 クラス間類似度群 = calc_class_sim(アプリ1の各クラス, アプリ2の各クラス) 類似クラス群 = filter(類似度 >= 閾値, クラス間類似度群) 差分クラス群 = filter(類似度 < 閾値 and not in 類似クラス群, クラス間類似度群) ---差分クラスとは類似したクラスが1つもないクラスのこと ---ここで類似するとは閾値以上の類似度を持つことをいう --アプリ間類似度スコアを計算するアルゴリズム(以下)を実装 入力アプリ = アプリ間類似度計算の中心にするアプリ 被検索対象アプリ群 = 入力アプリ以外のアプリ群 for 対象アプリ in 被検索対象アプリ群: クラス間類似度群 = calc_class_sim(入力アプリの各クラス, 対象アプリの各クラス) filter(入力側クラスが重複ならmax値のもの, クラス間類似度群) filter(対象側クラスが重複ならmax値のもの, クラス間類似度群) # ↓そこまで類似していないくせに中途半端に高い類似度などを無効にする filter(類似度 >= 閾値, クラス間類似度群) # ↓類似したクラス以外に関係ないクラスをたくさん持つアプリはスコアが減る 対象アプリのスコア = sum(クラス間類似度群) / 対象アプリの全クラス数 ---スコアに使う類似度は両アプリの各クラスにとってmaxのものだけ //---ここまで書いて、なぜ差分を出すときと違うようにしたのかわからなくなった(差分を出すときもmaxのものだけにすべきか) --どのメソッドが類似度に影響したかなどは出力できない //--(実装していない)(実装できるのかも知らない) -TODO --実験の設計を考えてまとめる(アルゴリズムを複数決めてどのアルゴリズムがいいかを調べる方向で) --複数のジャンルからシンプルなアプリを2、3個取ってきて入れてみる(メモ帳など単機能っぽい系、音楽やPDFなどメディア系、カメラ系、メールやSNSなどインターネット系、などを想定) --一部のクラスを追加したアプリを比べる --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年12月22日 [#oefc6713] ***久木田 [#ue5d5213] -DONE --FindBugsからの撤退(ソースをbuildする際のJavaバージョン切り替えが困難なため) -TODO --論文に乗せる表の作成 --クローンAuthorShipの計測 --似たプロジェクトでの比較(クローン含有率など) -MEMO --追跡している感じを表の上で表現する ***上西 [#mc1907f8] -DONE --横森先生とSkypeミーティング --とりあえずそれっぽく動くものは作成(正しく動作するとは言ってない) ---↑正しくなかったことが判明 -TODO --動くものを作成 --共通部分、差分を出して見やすいように --論文を書く --一部のクラスを削除したアプリを比べるのは? --同じアプリに含まれるクラス間の類似度を計算しないように実装を変更 --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年12月15日 [#x9082220] ***久木田 [#ue5d5213] -DONE --Issue作成者,割り当て者,クローン変更者を紐づけて目視調査を行う ---&attachref(Derby目視確認.pdf); ---Derbyの修正漏れの例のように修正漏れが起きないように事前に発見する必要がある ---全く変更がないコードがバグ修正の過程で削除されるのであれば,事前に見つけることができるはず ---strutsでは良い例が見つからなかった(対象としているコンポーネントが悪い?DERBYよりクローンとBugIssueの紐づいている数が少ないからか?) -TODO --FindBugsとSZZを比較するために,FindBugsをかけてみる ***上西 [#e105c0ff] -DONE --研究発表会 --標準APIも難読化されているアプリを見つけて顔面蒼白(https://fossdroid.com/a/ldto-companion.html) ---「コードとリソースの圧縮」(https://developer.android.com/studio/build/shrink-code.html) ---そもそもAndroidアプリの難読化はProGuardというツールで行われるらしい ---リソースまで圧縮する機能はshrinkResourcesプロパティで設定可能だがデフォルトでは無効化されているらしい(圧縮がバグを起こしやすいから) ---ProGuardは難読化結果との対応を示したmapping.txtも出力するらしい --アプリをノード、類似度をエッジの重みに利用したネットワーク図を作成すれば視覚的に評価しやすい? -TODO --とりあえず動くものを実装中(DONE : データの保存形式をSQLiteに変更した) --同じアプリに含まれるクラス間の類似度を計算しないように実装を変更 --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年12月08日 [#x9082220] ***久木田 [#ue5d5213] -DONE --struts(Component)の目視調査 ---&attachref(struts目視確認.pdf); ---メソッド単位のクローンが存在していた ---マージによるクローンの変更が多い ---Derbyと同じくメソッドの呼び出し方法の変更も見ることができた ---クローンが別のところに再利用されているものが見ることができた --CCTの追跡機能のバグ修正(間違った追跡を行っていた) -TODO --Issue作成者,割り当て者,クローン変更者を紐づけて目視調査を行う -MEMO --なぜIssueとクローンが紐づいているのか --クローンとIssueが紐づいたのであれば,どのように修正すれば良いのか,はじめからクローンを作らなければよいのかなどを考えながら目視しないと解決方法を見つけることができない ***上西 [#td6018f6] -DONE --アプリをビルドしてみた → 確かにソースにない.classが生成された --今回の手法は''「似ているアプリを検索する段階」''と''「差分の機能を示す段階」''の2段階に分けて考える必要があるのでは? --''「似ているアプリを検索する段階」'' ---とにかく似ているアプリを検索する(差分のことは気にしない) ---クラス間ではなくきちんとアプリ間の類似度を測りたい? ---クラスがベクトルなのでアプリはベクトル空間になる... ---相互部分空間法を使えばできる? ---&attachref(最近の技術動向: 相互部分空間法への拡張と その応用事例.pdf); ---&attachref(部分空間法と識別器.pdf); --''「差分の機能を示す段階」'' ---特定の2アプリ間(もしくは前の段階で挙げられた各アプリ間)における差分を探す ---クラス間類似度(今までやってきたやつ)がより小さいものを提示すればいい?(メソッド数の少ないクラスの扱いが重要になりそう) --実験ではそれぞれの段階を評価する? ---1段階目について、目視でアプリを確認しておいて、出力を見て考察する? ---1段階目について、F-Droidにおけるアプリのカテゴリは正解集合として使える?(使うべきではなさそう) ---2段階目について、目視でアプリの機能を確認しておいて、出力を見て考察する? -TODO --とりあえず前回の手法を進める --同じアプリに含まれるクラス間の類似度を計算しないように実装を変更 --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年11月29日 [#se499a41] ***久木田 [#qdeabab5] -DONE --どのクローンを見るのか観点を決める(変更ありとなし,一人の開発者と複数の開発者,Issueありとなし) --クローンの作成・変更がなぜ起きたのかを理解するために ---コメント,コード,Issue Reportを見る ---特定のモジュールでどんなソースコードがクローンとして作成されているのかを見る ---クローンに紐づいているIssueはどんなIssueなのかIssue Reportを見る --コードクローン内の処理自体の変更は確認できず,メソッドの呼び出し方法や型キャストの方法の変更が多く,他のコード(メソッド)などの変更に伴うものが多い -TODO --strutsプロジェクトで目視を行う ***上西 [#ref54267] -DONE --enum型は内部では特殊なクラスとして表現されているらしい(別の.classファイルとして生成される) --単語数が極端に少ない文書の扱いについて(除去していいのか?) --内部クラスが含む標準API呼び出しの数を調べてみた ---内部クラス($マーク付きクラス)&br;(161個, 平均値=3.987578)&br;[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 14, 16, 16, 22, 28, 30, 37, 37, 41, 104] ---普通のクラス&br;(55個, 平均値=28.527273)&br;[0, 0, 1, 1, 1, 1, 1, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 8, 8, 9, 10, 11, 12, 14, 16, 16, 19, 22, 23, 25, 27, 27, 27, 28, 29, 31, 32, 37, 38, 38, 40, 42, 42, 57, 57, 58, 61, 70, 74, 79, 79, 79, 82, 90, 103] --Android Studioでビルドできずに困っている -TODO --引き続き2つのアプリに含まれるクラスをソースなどと比較して確認する ---''アプリをビルドしたときに生成されるファイル(APK化前のファイル群)を確認する'' --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 -MEMO --ビルドシステムを確認してからビルドすること(笑) **2016年11月24日 [#se499a41] ***久木田 [#qdeabab5] -DONE --1つのクローンの追跡調査 ---作成されてから削除されるまで一度も変更がないものがいくつかある ---削除されたクローンは長い間変更されていないものが多い ---一人の開発者のみが変更に関わっているクローンは比較的短い期間での変更が多い ---クローンの作成・変更によってIssueが埋め込まれ,クローンの変更・削除によってIssueがFixされているものがあまり見られなかった -TODO --どのクローンを見るのか観点を決める(変更ありとなし,一人の開発者と複数の開発者,Issueありとなし) --クローンの作成・変更がなぜ起きたのかを理解するために ---コメント,コード,Issue Reportを見る ---特定のモジュールでどんなソースコードがクローンとして作成されているのかを見る ---クローンに紐づいているIssueはどんなIssueなのかIssue Reportを見る ***上西 [#w4899cb9] -DONE --2つのアプリに含まれる全クラス同士の組み合わせのうち類似度の大きいものを順に出力。上位をソースなどと比較して確認した ---クラスがネストされていることがある($マーク) ---たった1つ(ごく少数)の標準APIしか呼んでいないクラスが含まれている? -TODO --引き続き2つのアプリに含まれるクラスをソースなどと比較して確認する ---''アプリをビルドしたときに生成されるファイル(APK化前のファイル群)を確認する'' --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年11月16日 [#se499a41] ***久木田 [#qdeabab5] -DONE --モジュール(クローンを含む)毎に分けて追跡,バグがあるものとないものの比較(derbyのjava/engine/org/apache/derby/impl/storeを調査) --issueがどこで,だれによって埋め込まれたか -TODO --1つのクローンの追跡調査 --pajekでクローンと開発者のグラフで,クローンの変更回数とクローンノードの大きさを比例させる -MEMO --1つのクローンにおいて,だれが作成・変更し,いつだれがBugを埋め込み,修正していったのかを見ることによって, --複数人が1か月に変更が行われていれば,共同のownerであるかもしれない ***上西 [#a89f33a7] -DONE --&attachref(1116class_id.csv); --&attachref(1116sim_all_0.txt); --&attachref(); -TODO --''2つのアプリに含まれる全クラス同士の組み合わせのうち類似度の大きいものを順に出力。上位をソースなどと比較して確認する'' --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年11月10日 [#ec7960f4] ***久木田 [#qdeabab5] -DONE --プロジェクトのissue混入率ランキング --クローンの増減に関わった開発者の調査 -TODO --issueがどこで,だれによって埋め込まれたか --モジュール(クローンを含む)毎に分けて追跡,バグがあるものとないものの比較(derbyのjava/engineを調査) -MEMO --クローンに関係のあるIssue数/全Issue数 --Issueの分類 --IssueでBugだったものと紐づいたクローンはあるのか derbyとstrutsをまず見る ***上西 [#m02ad6ab] -DONE --研究発表会 --コードがカオスだったので少しだけリファクタリング? -TODO --少数のアプリなどでLSI部分テスト --検索部分の仕組み(LSIの結果を見る部分)実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年11月04日 [#bf9dd9b8] ***久木田 [#e00c76b7] -DONE --LOCとクローンLOCの時系列データのスムージング --バグ有・無クローンの比較(検定) -TODO --クローンの増減に関わった開発者の調査 --issueがどこで,だれによって埋め込まれたか --モジュール(クローンを含む)毎に分けて追跡,バグがあるものとないものの比較 --プロジェクトのissue混入率ランキング -MEMO --古くから存在するクローンにissueが埋め込まれた場合,作成者と埋め込んだ人が違う開発者であれば,管理者が変わったことで発生した事象かも --バグが埋め込まれたクローンは誰が作成者・利用者・管理者か ***上西 [#f9e28b6a] -DONE --前回実装完了部分を改良 --検索部分の仕組みを思いついた -TODO --検索部分の仕組み(LSIの結果を見る部分)実装中 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --トピック数、評価方法についての考察 **2016年10月27日 [#bf9dd9b8] ***久木田 [#e00c76b7] -DONE --修論目次案 --LOCとクローンLOCの時系列データ作成 -TODO --修論目次修正 --バグ有・無クローンの比較(検定) --プロジェクトごとの運用の違いは? ***上西 [#qaf2a137] -DONE --StigmataCSV→コーパス変換部分実装完了 --tfidf、LSI部分実装完了 --アプリ収集用スクレイパー実装完了 -TODO --LSIの結果を見る部分実装 --読み込ませるアプリやクラス、メソッドの種類、数についての考察 --なぜLSIなのか **2016年10月20日 [#h90a5e1c] ***久木田 [#e00c76b7] -DONE --大ゼミ質疑回答(今日中) -TODO --修論目次 --バグ有・無クローンの比較(検定) --共同作業を多くしている開発者グループの抽出 --分析・ケーススタディ・RQの設定 -MEMO --コードクローンを安全に管理するはGoalにならない --プロセスを見るとは --バグでなくIssueで --ユニーククローン数(累積クローン数)とは --クローン含有率=クローン行数/全体コード行数(今日中) --プロジェクトごとにリビジョン系列でクローン含有率計算してグラフを書く ***上西 [#w110671c] -DONE --ガントチャートらしきものを作成 --目次らしきものを作成 --StigmataCSV取得部分実装 -TODO --LSIで実装(さすがに今週中) --(アプリ収集) **2016年10月13日 [#p5782410] ***久木田 [#e00c76b7] -DONE --大ゼミスライド -TODO --大ゼミ質疑回答(今日中) --分析・ケーススタディ・RQの設定 ***上西 [#n718417b] -DONE --簡易版ガントチャート作成&br; ---2016/10/&br; ---Python、Gensim理解(13,14,15)&br; ---コーパス作成部分実装(13,14,15)&br; ---LSI部分実装(15,16,17)&br; ---アプリ収集(17,18) --PythonやGensimの理解を進めている -TODO --LSIで実装 --(アプリ収集) **2016年10月6日 [#v645f9d6] ***久木田 [#e00c76b7] -DONE -TODO --大ゼミスライド ***上西 [#m23b41d9] -DONE --環境構築完了 -TODO --LSIで実装 --(アプリ収集) --ガントチャート作成 **2016年9月29日 [#adcaaa61] ***久木田 [#r42c740a] -DONE --関西支部大会発表 --コードクローンの作成・利用過程の分析が必要な理由についてのスライド --Research Questions のスライド --Apache Strutsのクローン変更回数と変更間隔の集計(バグありとバグなしの比較) -TODO --大ゼミスライド ***上西 [#m617a32a] -DONE --やはりStigmataを使う方針に決めた --実際のアプリにStigmataを適用して、出力をソースコードと比較した ---smcモードは、各「クラス」の中に書かれているAPI呼び出しの順列を取るだけだった(メソッド単位ではなかった) ---クラス単位ではAPI呼び出しの「順列」に意味はないと考えられる --オープンラボ用ポスターの作成にあたってざっくりと手順を書いた ---ポスター : (&attachref(上西_2016年度オープンラボ用ポスター.pdf);) ---LSIやLDAあたりを使う予定のため、久木田さんから頂いた資料も使って勉強中 -TODO //--LSI、LDAが何なのかを理解する //--手法決定 --とりあえずLSIで実装してみる **2016年9月9日 [#ab5583c8] ***久木田 [#r42c740a] -DONE --データリストで未完了の解析を行う(28プロジェクト完了) --Birdのmissing linksの論文を読む --分析方法・結果のスライド作成 -TODO --共同ファイル変更数の調査 --共同変更を多く行っている開発者が関わっているクローンの中身を見る -MEMO --クローンサイズの分布をみることで大きなクローン,小さなクローンを定義する --インデントなどのバグに直接影響を与えることがないものは省きたい --Pajekのデータを使ってクローンまたはバグを介してつながりが太い開発者を見つけ出す --Birdの論文からサブグループとは何かを読む ***上西 [#ed41f2f6] -DONE --玉田先生にStigmataについてメールで質問した --今回はStigmataを使わない方針に決めた(ソースコードを解析する) --既存の手法を意識して考えることにした ---阪大のアプリ比較ツール(&attachref(Androidアプリケーション比較ツールの試作.pdf);) ---連続して呼び出されている標準API呼び出しの順列を調べていた ---この手法では順列を完全一致で調べていた?(もう少しゆるくていい?) --機能抽出過程 ---標準API呼び出しの順列は機能を表すはず ---メソッドごとに標準API呼び出し順列を取得 ---tf-idf的フィルタリング? ---BoW化? ---いい感じにゆるめな手法を探している... --ラベル付け過程 ---エンドユーザーにもわかる抽象度の機能名は、クラス名やメソッド名にも表れているはず ---識別子名に対する自然言語処理(tf-idf的フィルタリング?) -TODO --実際の簡単なアプリの標準API呼び出し順列を確認、比較する **2016年8月31日 [#ab5583c8] ***久木田 [#r42c740a] -DONE --データリストで未完了の解析を行う --スライドの分析の内容の枠組みを考える -TODO --データリストで未完了の解析を行う(残り19プロジェクト) --Birdのmissing linksの論文を読む --分析方法・結果のスライド作成 ***上西 [#e0992628] -DONE --feature locationは実装位置を特定するが、今回は実装位置の情報はいらないことを認識 --LSIが何なのかを(なんとなくだが)理解 --Marcus et al.の論文の1つ(&attachref(Feature location using probabilistic ranking of methods.pdf);)の一部を読んだ ---各メソッドの識別子名やコメントを1つのドキュメントとしてコーパスを作成する -TODO --Stigmataの詳細を聞く **2016年8月26日 [#ab5583c8] ***久木田 [#r42c740a] -DONE --現状集まっているデータと集めているデータ(リポジトリとバグと解析完了か否か) --ファイルとクローンで違いがあるかどうか(ファイルバージョンのPajekデータ作成) -TODO --データリストで未完了の解析を行う --Birdのmissing linksの論文を読む --スライドの分析の内容の枠組みを考える ***上西 [#aca72bcd] -DONE --全体MTGのスライド→&attachref(研究発表会/2016年度/研究発表_0.pdf); --Chen et al.の手法はCVSの各リビジョンのdiff結果とコミットメッセージを紐付ける。アプリ検索には重い? --Marcus et al.の手法はソースコード内の識別子名やコメントを基にLSI(潜在意味解析)を行う。 -TODO --手法の決定 **2016年8月10日 [#g78c4a29] ***久木田 [#r42c740a] -DONE --複数プロジェクトのPajekデータ作成 --Pajekのデータからクローン同士,バグ同士の2モードネットワーク構築 --媒介中心性の高いバグ票の目視(Ant,Struts) -TODO --現状集まっているデータと集めているデータ(リポジトリとバグと解析完了か否か) --ファイルとクローンで違いがあるかどうか --Birdのmissing linksの論文を読む -MEMO --3年寝太郎:クローンの平均変更期間を出して --クローンのミッシングリンクをネットワーク分析で繋げれそう ***上西 [#h6482cf2] -DONE --研究の背景、動機の、自分なりに納得のいく説明ができた ---&attachref(研究発表(仮)0810.pdf); -TODO --手法の決定、実験? **2016年8月4日 [#aad162de] ***久木田 [#w4320dce] -DONE --SZZデータの利用方法変更 --Pajekデータ作成:(人(fixした人) - バグID - クローンID) --関西支部大会原稿作成 -TODO --複数プロジェクトのPajekデータ作成 --Pajekのデータからクローン同士,バグ同士の2モードネットワーク構築 --ファイルとクローンで違いがあるか -MEMO --Birdの研究との違いをどうするか --CCの管理においてよくないこととは? ---CCの問題? ---バグの内容の問題?(媒介中心性が高いやつ?) ---人の問題? ***上西 [#q4a52b47] -DONE --word2vecをインストールした --webで見つけたサンプル的なものを動かしてみた -TODO --word2vecの詳しい使い方を調べて実践 --サーベイ論文を途中までしか読んでないので続きを読む -今後の方針? --stigmataで取得できるクラス名、メソッド名をword2vecしてみて、どんな類似語が出るか確かめる? -ひとまずの機能の定義 --機能はメソッドの集合で構成される --それを一定のルールでまとめたものがクラスであり、機能と関連する **2016年7月28日 [#aad162de] ***久木田 [#w4320dce] -DONE -- FOSEに向けたデータ作成 ---SZZ出力確認 ---Pajekデータ作成:5プロジェクト分 ---クローンサイズ:行数+ブロック(トークン数) -TODO --SZZデータの利用方法変更 --Pajekデータ作成:(人(fixした人) - バグID - クローンID) --関西支部大会原稿作成 ***上西 [#o9c7e28c] -DONE --word2vecの論文を読んだ ---&attachref(ショートメッセージの部分空間表現と宛先推定.pdf); --実験の方法をいろいろ考えてメモしていた --さらに読むべき論文を昨日教えてもらった ---&attachref(動的機能捜索における関連度と探索戦略.pdf); ---&attachref(The Role of Concepts in Program Comprehension.pdf); ---&attachref(Feature location in source code a taxonomy and survey.pdf); -TODO --教えてもらった論文を読む **2016年7月21日 [#aad162de] ***久木田 [#w4320dce] -DONE -- SIGSEのデータ作成 -TODO -- FOSEに向けたデータ作成 ---SZZ出力確認 ---Pajekデータ作成:5プロジェクト分 ---クローンサイズ:行数+ブロック(トークン数) ***上西 [#ta56eece] -DONE --論文を読んだ --Stigmataの出力の意味など詳しい使い方を調べたが、わからなかった --Stigmata以外の指標も考えてみたが、するならまずはStigmataからしてみよう --birthmarkそのままだと量が多いので、無駄なものを減らす工夫が必要 -TODO --玉田先生に聞く? ---Stigmataの機能、出力、各birthmarkの意味 --word2vecも見てみる **2016年6月30日 [#aad162de] ***久木田 [#w4320dce] -DONE -- プロジェクトのデータ取得(残りはeclipseとant) -- コードクローン集計プログラム作成 -TODO -- 取得したGitHubIssuesの整形 ***上西 [#u1adb551] -DONE --CyberAgent内定 -TODO --具体的な実験方法を考える --論文読む --簡単なAndroidアプリを作ってみる **2016年6月23日 [#aad162de] ***久木田 [#w4320dce] -DONE -- クローンの類似性を用いて追跡できていないクローンを減らす -- プロジェクトのデータ取得(Spring Framework) -- GitHub API を使ったIssue取得プログラム -TODO -- プロジェクトのデータ取得 ***上西 [#ba0f2467] -DONE --Stigmataで実際のアプリを解析してみた --Stigmataの出力を整形してソートしてみた(が、現時点では意味不明) -TODO --具体的な実験方法を考える --論文を読む **2016年6月16日 [#n92c98f0] ***久木田 [#w4320dce] -DONE -- Ant分析のテーブルを埋める -- SIGSE投稿 -- 削除されたコードクローンの確認 -TODO -- プロジェクトのデータ取得 -- クローンの類似性を用いて追跡できていないクローンを減らす ***上西 [#w4260ecc] -DONE --Stigmataの使い方を理解した --前田さんから読むべき論文をもらった -TODO --Stigmataで実際のアプリを解析してみる --論文を読む **2016年6月9日 [#n92c98f0] ***久木田 [#w4320dce] -DONE -- クローンを変更した人,クローンを増やした人の調査 -TODO -- テーブルを埋める ***上西 [#q13501cf] -DONE --論文を1つ読んだ --データベース演習をがんばった --輪講資料を作った --考えた ---検索するには、各アプリが使用しているクラスを見て機能を取得し、その機能ごとに重みを付けておく必要がある --- ---- 機能の取り出し方はどうする? --- ---- 機能を自動で取得するには? --- -------- 機械学習する? --- ------------ 何を正解にする? --- -------- ラベルを参考にする? --- ---- 最適な重みは機械学習する? -TODO --さらに論文を読む --研究の進め方を確定させて、それに伴う何かをする **2016年5月30日 [#k4ff1dff] ***久木田 [#e088a67d] -DONE -- クローン統計量調査 -TODO -- クローンを変更した人,クローンを増やした人の調査 ***上西 [#w38b9f43] -DONE --論文を2つ読んだ -TODO --さらに論文を読む --研究の進め方?を考える **2016年5月26日 [#k4ff1dff] ***久木田 [#e088a67d] -DONE --クローンセットがどのように追跡できなくなったかの目視確認 --jEditに対してECTECとCCTをかける -TODO --jEditのECTECバージョンとCCTバージョンの比較 --追跡ツール試作の章を書く ***上西 [#e97596fe] -DONE --バースマークというものを教えていただいた -TODO --バースマークや深層学習について調べる **2016年5月19日 [#j32fa732] ***久木田 [#zc2c7945] -DONE --SZZ(verGitHub)の実装 --取得したプロジェクトに対してSZZの適用 -TODO --クローン追跡がどの程度できているかの調査 --対象外にすべきディレクトリの特定 ***松浦 [#zc2c7945] -DONE --東先輩からいただいた本の一章を読み終えた -TODO --いただいた本を読み進めライセンスがどういうものなのか理解していく *** 上西 [#b2e16207] -DONE --輪講で発表した -TODO --進路について本気出して考えてみる(やっと) **2016年5月12日 [#p31465a8] ***松浦 [#s0ef3e4b] -DONE --論文を読んだ -TODO --東先輩が提案してくれた研究テーマを進めていく ***久木田 [#s0ef3e4b] -DONE --いろんなプロジェクトに対してCCTをかける(JUnit,struts,jabref,Ant) --取得したデータの確認 -TODO --SZZ(verGitHub)の実装 --取得したプロジェクトに対してSZZの適用 ***上西 [#a33412c6] -DONE --自動バグ修正に興味を持った -TODO --論文読む **2016年4月28日 [#mfbb805c] ***久木田 [#s0ef3e4b] -DONE --大ゼミ発表 -TODO --いろんなプロジェクトに対してCCTをかける(現状あるのはstruts) --取得したデータの確認 ***松浦 [#s0ef3e4b] -DONE --研究テーマを考える --&attachref(修正忘れが起きるコードの.pptx); -TODO --生データをみていく --修正漏れの論文を調べていく ***上西 [#j8b2ad1f] - DONE -- リファクタリングに関することも考えることにしてみた - TODO -- 一貫性のある変更とは?を考える -- 最低限読むべき論文がたくさんあるので読む **2016年4月21日 [#r7e1f0d3] ***松浦 [#s0ef3e4b] -DONE -- 研究テーマを考える --&attachref(消滅をみてなにがわかるか.pptx); -TODO -- ソフトウェアエンジニアリング基礎知識体系を読んで勉強する ***久木田 [#s0ef3e4b] -DONE -- nokogiri動作確認(特にマージコミット部分) -- nokogiriバグ修正 -- スライド(ツール説明) -TODO --大ゼミ発表 ***上西 [#s7303cdb] - DONE -- - TODO -- 一貫性のある変更とは?を考える **2016年4月14日 [#r7e1f0d3] ***久木田 [#s0ef3e4b] -DONE -- 全メソッドのつなぎ合わせ -TODO -- nokogiri動作確認(特にマージコミット部分) -- 大ゼミ資料作りはじめ ***松浦 [#s0ef3e4b] -DONE -- 実装希望報告 -TODO -- 論文を読み研究 **2016年4月8日 [#e1d4170a] ***上西 [#d1d0d19f] - DONE -- ついさっきDB.getParentsCommitInfo()を実装 -- 全体MTGの輪講とデータベース演習を頑張ってました - TODO -- もっと論文を読む *** 松浦 [#ie58bfd5] - DONE - TODO ***片桐 [#ofa56a76] ***久木田 [#s0ef3e4b] -DONE -- Diffを用いたコード片特定 -TODO -- 全メソッドのつなぎ合わせ -- 大ゼミ資料作りはじめ **2016年4月1日 [#v8dcedc0] ***上西・松浦 [#tb120a97] -DONE -- Nokogiri担当分(CommitInfoExtractor)完成 -TODO --論文を読む ***松尾大典 [#ofa56a76] -DONE -- 自宅に環境構築 -- 全然進んでないです、むしろ後退 -TODO -- ***片桐 [#ofa56a76] -DONE -- CodeFragmentDetector, CloneDetectorの移行 -TODO -- DBの仕様に合わせた変更 ***久木田 [#s0ef3e4b] -DONE -- コード片特定,クローン特定 -- コードクローンの追跡(まだバグあり) -TODO -- 実装:マージ発生時のコード片,コードクローンの処理 **2016年3月24日 [#l4778a6b] ***松尾大典 [#z18ffa9f] -DONE -- コード片変更箇所の特定フロー(進捗5割?) --- DiffやDB接続は他から拝借するので独自部分は後はほぼ無い --- DIffのとり方の変更に対応 -TODO -- DB接続、確認クエリ、格納クエリ -- 動作確認 -- コーディング規約を周りに合わせる ***久木田 [#m287df95] -DONE -- データベース設計・実装(クローン部分のみ) -TODO -- 実装:マージ発生時のコード片,コードクローンの処理 --- コードクローンの追跡 + Diffに含まれるファイルからコード片抽出 + DBに格納されている前のリビジョンでのコード片と比較 + 一致するコード片があればコードクローンとして追跡する --- クローンのマージ --- クローン情報のデータベースへの格納 --- 動作確認 ***片桐 [#i04c2cc0] -DONE -- フローの1, 2番目まで --- コミットIDの取得 --- 任意のコミットIDのスナップショット中に存在するファイルリストの取得 -- コード片特定に必要なライブラリの移動 -TODO -- コード片特定 -- クローンの組特定 -MEMO -- ***上西・松浦 [#s6cd9011] -DONE -- DB関連(ダミーデータは挿入できる) -TODO -- JGitを使ってデータを取得する部分の実装 **2016年3月17日 [#y747cf74] ***久木田 [#m287df95] -DONE -- 実装:マージ発生時のコード片,コードクローンの処理 --- Diff取得(ファイル,行数,属性) --- Diff比較 -- クローンのデータベース設計 -TODO -- 実装:マージ発生時のコード片,コードクローンの処理 --- Diffに含まれるクローンの比較 --- クローンのマージ -- データベース設計・実装 ***片桐 [#i04c2cc0] -DONE -- フローの1, 2番目まで -TODO -- codeFragmentの特定部分作成中です -MEMO -- ***上西・松浦 [#c3e2e501] -DONE -- -TODO -- 実装 ***大典 [#de5f624b] -DONE -- 既存コードを読んだ -- 火曜に久木田さんと簡易MTGでDBを決定 -TODO -- 担当フロー部分の実装(久木田さん作のDiffを流用) -MEMO -- 用事で午前中居ないかもしれないです **2016年3月11日 [#y747cf74] ***久木田 [#m287df95] -DONE -- 動作手順フローチャート作成 --- マージ発生時のコード片,コードクローンの処理(久木田) -TODO -- 実装 --- マージ発生時のコード片,コードクローンの処理 ***片桐 [#i04c2cc0] -DONE -TODO -- フローチャート作成後,実装 -MEMO - フローチャート -- あるリビジョンのすべてのファイルをスキャンし,コード片とコードクローンを特定し,データベースに挿入 -- できたら,確認してもらった後,実装開始. ***上西・松浦 [#c3e2e501] -DONE -- 大まかな流れ図を作成 -TODO -- 実装 **2016年3月3日 [#y747cf74] ***CC班コアタイム [#m4bcd5d9] 13:30〜16:30 ***久木田 [#m287df95] -DONE -- コードクローンの追跡方法のスライド --- &attachref(KCTECドキュメント.pptx); -TODO -- 動作手順フローチャート作成 --- リビジョン情報・関係を取り出す(松浦・上西) --- コードクローンの特定(最初のリビジョンのスキャン)(片桐) --- コードクローン変更箇所(コミット)の特定(大典) --- マージ発生時のコード片,コードクローンの処理(久木田) -- データベースの再設計(一人ではできないので手伝ってほしいです) ***上西 [#c3e2e501] -DONE -- 複数の論文のアブストを読んだ -TODO -- 論文を読む **2016年2月26日 [#y747cf74] ***久木田 [#m287df95] -DONE -- この設計のままでは,計算量が膨大になり,クローンを追跡できないことが判明 -TODO -- データベースの再設計 ***片桐 [#i04c2cc0] -TODO -- FileDetector作成中です -- JGitの実装でモタついてます・・・。 ***上西 [#c3e2e501] -DONE --久木田さんにCommitDetector作成を依頼→完成 -TODO --論文を読む **2016年2月17日 [#y747cf74] ***久木田 [#m287df95] -DONE -- ECTEC(ver.kukita)作成 --- コード片特定機能作成 --- コードクローン特定機能作成 -TODO -- コミット親子関係取得機能作成 ***片桐 [#i04c2cc0] -DONE -- 無いです・・・ -TODO -- FileDetector作成中です ***上西 [#c3e2e501] -TODO --CommitDetectorの作成 **2016年2月10日 [#y747cf74] ***大平 [#db9734ad] -TODO -- ひとつのバグに対して同時修正を必要としたクローンを含むファイルの割合はどうか ***久木田 [#m287df95] -DONE -- ECTEC(ver.kukita)機能の書き出し -TODO -- ECTEC(ver.kukita)作成 --- コード片特定機能作成 **2016年2月5日 [#sc48a859] ***久木田 [#m287df95] -DONE -- ECTEC(ver.kukita)作成 --- データベース作成機能 -- 大ゼミ回答提出 -TODO -- ECTEC(ver.kukita)機能の書き出し **2016年1月29日 [#q328fe49] ***大平 [#db9734ad] -DONE --コードクローン班用wikiページ作成 --研究テーマ2件のラフ設定 ---コードクローン作成パターンの時系列分析(プロジェクト開始から現在までのクローン作成の特徴を開発者別に時系列分析しパターン化する) ---コードクローンの作成/利用における人間関係の分析(第三者のコードクローンを利用する際の人間関係とコード品質との関係を分析する) -TODO --疑問を解消する(サーベイ?):研究する意味あるのかを再度確認するため. ---不具合修正に占めるコードクローンの修正割合は? (modified clones/modified bugs) ---不具合修正とは無関係な変更に占めるクローンの変更割合は?(modified clones/changes) ***久木田 [#m287df95] -DONE -- ECTEC(ver.kukita)のデータベース設計 -- 大ゼミ発表 -TODO -- ECTEC(ver.kukita)作成 --- データベース作成機能 -- 大ゼミ回答提出 --コードクローンの作成理由の調査 ***片桐 [#i04c2cc0] -DONE -TODO --来週のMTGに参加 --エントリーシート作成 --大家さんに会いに行く -ResearchQuestions --開発者によってコードの再利用を行いやすい・されやすい傾向があるか --プロジェクトに長く携わることで再利用傾向に変化があるか --他者の書いたコードを再利用することは不具合の混入に起因するか