#author("2022-03-15T04:35:40+00:00","","") #author("2022-03-15T04:49:43+00:00","","") [[野口]] *Memo [#a11824de] [[研究テンプレート]]~ [[研究室タスク管理:https://docs.google.com/spreadsheets/d/1yvgRGxTOrHRpvd1xt3etVEwwVunkwxjAt0t8HjttxW0/edit?usp=sharing]]~ [[ガントチャート:https://docs.google.com/spreadsheets/d/1eIkoG4X4Bd8c5Xzhkqv_E4RRH1NC3SCbCCUSf0_NRs0/edit?usp=sharing]] #ls *Schedule [#c92c4e93] |CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c | |''Mon'' |''Tue'' |''Wed'' |''Thu''|''Fri''|h |1| | MT | | | | |2| | 生態 | 全M | | 情ネ | |3| ソ特 | TA | | 大ゼ | | |4| ソ特 | TA | | 環境 | | |5| | | | | | ~ *ソースコード,実験データの保存場所 [#z2d86421] -ソースコード,実験データ:bitbucketのICMS_CUIに配置 -実験用仮想マシン:OSS-BRAINのE:\user\noguchi\VM\buggy_clone_detection *査読結果 [#z2d86421] *ミーティング [#w8be4d79] *12/17 [#qfd39bad] -コードレビュー時にコードクローンもレビューされているかどうかで,コードクローンがソースコードの品質に悪影響を与えているかどうかを見ようか考えている *11/19 [#ka0de68d] **DONE [#s0f74f11] -変更箇所の特定には2つのファイルの差分をASTのノード単位で取得するツールGumTreeを用いるようにする --GumTree:Fine-grained and Accurate Source Code Differencing ASE'14 Pages 313-324 --Javaプログラム上でGumTreeを実行できるようになった -先行研究のデータセットにContext Bugのデータがあると思っていたが,クローンやクローン系譜のデータしか存在していなかった -Context Bugを取得するにはContext Bugの研究で配布されているプログラムを実行することで得られるが,そのままではうまく実行できない -Context Bugを取得するプログラムを実行できるように変更する必要があるが,まだ変更が完了していない *11/12 [#s1071fe5] - 先行研究ではContext Bugはどの部分が適切に変更されなかったことで発生するのかを明らかにしていない -- Context Bugを修正する際にどの部分に変更が加えられたかを分析 -- コード複製時に複製先で変更すべき箇所の候補を特定するアルゴリズムを構築 --- 複製するコード片の外部と関連がある部分を特定し,要変更箇所の候補とする --- アルゴリズムでは分析結果をもとに,特に変更に気をつけるべき部分の特定を行う -- アルゴリズムが特定した変更すべき箇所の候補とコード複製時に加えられた適切な変更がどれだけ一致しているかを評価 **DONE [#k735d851] -先行研究のContext Bugのデータセットを使えることがわかった *11/5 [#g6012307] **DONE [#bde0f7a0] -欠陥修正箇所が重複したコードに含まれる場合の修正の難しさを明らかにするための分析内容を考えた --欠陥修正箇所が重複したコードに含まれる不具合票とそうでない不具合票との間で以下のメトリクスを比較 ---Maintainability Index(保守のし易さを示すメトリクス) ---不具合が報告されてからクローズされるまでの時間 -Maintainability Indexの調査 --以下の式で求められる ---Maintainability Index = 171 - 5.2 * ln(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * ln(Lines of Code) --JavaのプロジェクトのMaintainability Indexを計測するフリーソフトを発見 ---https://github.com/rasioatmaja29/MaintainabilityIndex *10/29 [#ga4138e9] **DONE [#t32f3a5e] -2章(背景目的の部分)だけ書いた --クローン片を変更することで同じクローン集合に属するクローン片や関連するコード片に加えるべき変更を特定する手法を構築 --クローンに加えるべき変更の調査手順を減らしつつ安全に変更を加える作業を進めることができる. -大まかな特定手順 --変更を加える部分がクローン片かどうかをチェック --クローン片ならばクローン片とペアを成すクローン集合を検出 --クローン集合内で変更が必要なクローン片を特定 --同時に変更が必要なクローン片の内部で変更が必要な箇所を特定 --クローン片と関連する部分で変更が必要な箇所を特定 -気になること --影響波及解析の手法が使えるかどうか -「クローンに限らず変更予測は必要では?」という疑問に対して -- 変更範囲が広くなると考えられることからどの部分を変更すべきか把握しきれなくなるためクローン変更時の変更予測の必要性が増す **TODO [#g5ba6703] -Maintainability Indexの調査 --欠陥混入クローンの修正の難しさを測定したい -Maintainability Indexが使えるかの調査 -使える場合はMaintainability Index用いて欠陥混入クローンの *10/24 [#w7a715f8] **DONE [#a8ddff69] -どのようなクローンにどのような変更を加えるとBTSで報告されるような欠陥が混入するかを分析 --クローンのブロックの種類(for文,if文など) --加えた変更(メソッド呼び出しを追加,宣言文を削除など) --扱う不具合票は「Bug」とカテゴライズされたものに絞る -変更を加えるクローンの内部の状態やクローン周辺の状態によってコードクローンに欠陥が混入しやすくなるか --内部の状態(クローンの複雑度,規模) --周辺(データフローや制御フローに関連がある部分,同じファイルのクローン以外の部分) *10/15 [#y25a0edb] **DONE [#k1fea2d7] -分析方法 --クローンにどのような変更が加えられたかを調査し、クローンに特有の欠陥混入の原因となるような変更を明らかにする *9/12 [#r0d94706] **DONE [#xd1d70e0] -Antlr4で構文木を作るところまではできた -コード片をCRD形式に出力する方法を模索中 *9/5 [#h92ca784] **DONE [#j91c2c0d] -ツール実装のために必要な技術を勉強中 *8/20 [#t3dad7ac] **DONE [#e4cbdbd1] -ツールは一通り完成 -処理の並列化の途中 **TODO [#uae4f463] -ツールの欠陥混入クローン特定方法の厳密さに難あり -見直す必要あり -変更追加リビジョンで変更されたクローンが修正リビジョンで壊れていないかを確認する処理を追加する *8/7 [#x74a7de4] **DONE [#tebfb4e2] -ECTECのCRD生成部分のコード理解の途中 **TODO [#kc34aaba] -クローンの位置特定の別の方法も考えてみる -なければCRD生成部分理解,移植続行 *8/1 [#r44d8050] **DONE [#wc935390] -AST生成方法の調査 --ECTECではASTの生成はJavaのみに対応している(ライブラリは[[JDT:https://www.eclipse.org/jdt/]]を使用) --C/C++やPythonなどの言語を用いたプロジェクトも分析対象としたいためそれらの言語のASTを生成する方法を調査 --[[antlr4:https://www.antlr.org/]]を用いてCとPythonの構文木を抽出するところまではできた -CRDの理解 --ECTECのCRD生成部分のソースコードを読んだ --CRDを生成するためにASTを生成することができるライブラリを正しく理解する必要がある **TODO [#uf60068b] -とにかくECTECのCRD生成機能を使う *7/25 [#t880e791] **DONE [#ce05eecb] -欠陥混入クローンが修正されたことを確認するためにCRDを使おうか検討中 --欠陥混入リビジョンで変更が加えられたクローンが修正リビジョンのどこにあるのかを特定する際にCRDを使いたい --リビジョンをまたいだクローンの位置特定ができていないので欠陥混入クローン収集ツールを動かせるところまで行けていない *7/11 [#v12cc99b] **DONE [#v9220fa9] -NiCadとCP-Minerの比較 *6/18 [#c98c0de4] **DONE [#fa3934cf] -CP-Minerの入手方法の調査 --CP-Minerを参照している論文を50本ほど見たが,使用している可能性がある論文が1本だけ ---Scenario-Based Comparison of Clone Detection Techniques ICPC '08 --ある論文では,「CP-Minerの代わりにオープンかつ広く使われているCCFinderとNiCadを使用」という記述があった ---How Often Do Unintended Inconsistencies Happen? — Deriving Modification Patterns and Detecting Overlooked Code Fragments — ICSM '12 -ツールのクローン取り出す部分の修正が完了 -ツールの修正されたクローンの特定する部分の修正中 **TODO [#j9ef930d] -NICadとCP-Minerの比較 --出力するクローンに違いがあるかなどに注目しながら比較 *6/10 [#ra5da683] **DONE [#eb2b4991] -ツールを動かしてみてもまだ思うように動かない状態 *5/30 [#x9e46ac7] **DONE [#q4930bb0] -もう少しで実装完了 --修正クローンの特定の実装がほぼ完了 **TODO [#nf93b057] *5/23 [#aad156c0] **DONE [#v507917e] -ツール実装中 --クローンの収集部分は実装できた --修正クローンの特定の実装に悩んでる途中 **TODO [#cee3d7fb] -Javaのみで実装してみる *5/7 [#f1a1d154] **DONE [#wad33534] -ツール実装中 **TODO [#h76b1339] -SZZアルゴリズム関連の理解 -ツールの実装 -commit guruの調査 **TODO [#cf5e4f50] *4/18 [#tf4c516e] **DONE [#r8b42c33] -修正クローン検出ツール設計書 --&attachref(修正クローン検出ツール設計.pdf); **TODO [#y0fd21e1] -引き続きRepo Toolsのコード理解 -ツール実装に入る *4/11 [#t92f9f50] -研究計画 --&attachref(研究計画.pdf); *4/3 [#p3692e6a] -コードクローン検出ツール調査 --&attachref(クローン検出ツール調査.pdf); *3/14(進捗報告) [#c11043f0] -以下の論文を読んだ --Clone Region Descriptors: Representing and Tracking Duplication in Source Code --Enhancement of CRD-Based Clone Tracking -ECTECのソースコード理解途中 -目標はECTECに以下の機能を追加し,欠陥混入クローンの分析を行えるようになること --欠陥混入クローンの特定 --タイプ3のクローンの検出(できれば) *1日の活動報告 [#tb6f135c] **12/11〜12/18 [#g0a8225e] -卒論の2章,3章の執筆 --RQを設定した理由などを書いた **12/10 [#ub7b39b4] -クローンとメトリクスの情報を結びつける処理の記述中(メトリクス集計の一歩手前) --Understandが取得したメトリクスの情報で,オーバーロードした関数の識別ができていないことが分かった --オーバーロードした関数を含むクローンは正しくメトリクスを持ってこれない場合がある **12/6 [#ed706026] -クローンIDからクローンのコードの情報を得る処理を行うプログラムの大体完成 **12/5 [#ed706026] -クローンIDからクローンのコードの情報を得る処理を行うプログラムの作成途中 **12/4 [#d7bb7b78] -欠陥修正クローンを欠陥混入リビジョンまで遡る処理を行った -欠陥混入クローンがどのリビジョンに存在するかを判別する処理を行った **11/29 [#j4e68949] -クローンセットの親子関係を始点と終点を指定してその範囲内の親子関係のあるクローンセットIDを取ってくるプログラムが完成 **11/28 [#o7b4354d] -久木田さんの修論を再び読んだ -クローンセットの親子関係の情報から欠陥混入クローンの追跡が可能かも知れない --クローンセットの親子関係はCCTで取得済 *ミーティング [#raa74cf2] *11/8 [#d1d4d749] **DONE [#o2f90936] -メトリクス計測完了 -RQ1分析途中 *11/1 [#ac513be3] **DONE [#e6b55fca] -RQ1の分析の下準備中 **TODO [#w073e965] -分析の続き --メトリクス結果:11/4(日曜日)まで 済 --RQ1結果:11/7(水曜日)まで --RQ2-2,3:11/9(金曜日)まで --RQ2-1:11/10(土曜日)から *10/25 [#sce30294] **DONE [#h36a5b4b] -分析手順を考えた:&attachref(分析手順.pdf); -質問内容 --メソッドに欠陥がある場合,その影響が及ぶのはそのメソッドを呼び出した側と考えていいのか **TODO [#j3090857] -分析開始 *10/18 [#a33840ee] **DONE [#rb75603d] -RQについては先週考えたものの他に思いつくものがなかった -Understandについて少しだけ調べた --brainで使えることを確認 --コマンドラインで使えることがわかった **TODO [#a5ae20cd] -分析設計を完了する *10/11 [#o8ff60a8] **DONE [#u3cdf6a8] -RQを考えた **TODO [#nb9ca828] -RQをもうすこし熟考する -実験方法を考える *10/4 [#a4846198] **DONE [#obf4ced1] -背景,目的の整理 **TODO [#z788a818] -RQを再び決める -決まって実験が出来るようであればする *9/18 [#re2b9217] **DONE [#w4128ace] -RQ1の実験の途中 **TODO [#vd26e80f] -RQ1の実験 -RQ2の実験の用意 *9/11 [#zbd1ce1e] **DONE [#tdf4197b] -2,3章の修正,bibtexの導入 **TODO [#ja9e3aae] -RQ1の実験を行う -できればRQ2の実験も行う *8/28 [#qe9c8b85] **論文注意点 [#p981593e] -「かなり」,「手軽な」などの主観がこもった表現を使わない -2章のタイトルがまずい -論文参照の部分を作る(bibtexを使う) -一度全体を箇条書きで書きなおす -何を解決するか決めるためにRQを設定する **その他問題点 [#t403f3de] -静的解析ツールで検出されなかったクローンは動的解析ツールでないと検出できないのでは? -目視は何を知りたいかでどのようなことに注目して行うかを決める.闇雲にやると時間を大きく浪費する *8/20 [#md61396a] **DONE [#tcf14532] -2章書いた *8/6 [#ab144c5d] **DONE [#fe4b5726] -Texで卒論を書けるようになるまで準備を整えた -クローンのメトリクスを分析した論文を見つけた --Comparing Quality Metrics for Cloned and Non Cloned Java Methods **TODO [#cd1778b0] -先に目次を作る.次に実験→分析→アプローチなどの順番で卒論を書く -分析を進める *7/30 [#lb5a0e4d] **DONE [#wadf99b6] -UnderstandがOSS-BRAINにインストールされていることがわかった -どのようなソースコードメトリクスを使うべきか論文を読むなどして考えたが,これといったものは見つからなかった **TODO [#s2d755ab] -卒論を書いてみる(先輩の論文を参考にする,先輩に見せる) -Texを使ってみる *7/23 [#g4bf5eda] **DONE [#j51e1863] -久木田さんに疑問点について質問し,szzClones.csvからバグ票に結びついたクローンを問題なく探し出すことが出来ることが分かった -不具合修正コミットで変更があったクローンの情報を収集した(csvファイルにまとめた) **TODO [#x55f656e] -ソースコードメトリクスを測るためのツール「Understand」をどうすれば使えるかを聞く -どのようなメトリクスを使うべきかを考える(論文を読む) *7/11 [#gd4e17e6] **DONE [#t455c7b5] -今までCCTのDBにあるSZZテーブルはバグ票に結びついたクローンを集めたものと思い込んでいたが、そうでは無いことが判明 -バグ票に結びついたクローンはszzClones.csvというファイルにまとめられていることが分かった。しかし、バグ票に結びついたクローンを探す処理の部分が怪しい **TODO [#u75af396] -久木田さんにメール *7/2 [#n302d7f5] **DONE [#y8379c0e] -片桐さんのツールの出力結果が正しいことを確かめた **TODO [#od3dbab7] -片桐さんが出したクローン数などのデータが正しいかどうかを確かめる *6/25 [#z8d35d8b] **DONE [#xc8e0d50] -RQ1を調べた:&attachref(fb_szz.xlsx); --片桐さんのFindBugsのデータの中からBugラベルが付いたクローンのsource_commit_idに該当する部分を抽出した **TODO [#x8b5fc6d] -片桐さんが出したデータを再現できるかどうかを調べる -再現できそうなら再現してみる *6/19 [#w0126299] **DONE [#ec13e6c9] -RQを考えてきた --RQ1:バグが混入しているクローンに頻出するFindBugsのバグカテゴリーはあるか --RQ2:バグが混入しているクローンの中でFindBugsでは見つけられなかったバグはどれだけ存在するか --RQ3:バグが混入しているクローンの内FindBugsでは見つけることが出来なかったもののソースコードにはどのような特徴があるか --RQ4:クローンに結びついていてFindBugsでは見つけられなかったバグの不具合票にはどのような特徴があるか **TODO [#h207ff02] -RQ1について調べてくる *6/11 [#cd81b1a9] **DONE [#y5a7f416] -久木田さんにメールで質問をした --rootCloneIdは追跡の起点となるクローン集合のIDのこと --cloneTraceStatus.csvはクローンの追跡の助けになるもの -RQはまだ思いついていない **TODO [#gc7e929d] -片桐さんのRQの差分を考える -findbugsの結果が実際のバグとどう関係があるかを調べる -findbugsで見つけられなかったバグでクローンに結びついているものにはどのような特徴があるか *6/4 [#g68fca5d] **DONE [#kdf669de] -目視完了:&attachref(bug_labbeld_clone.xlsx); --「observable、observer」、「競合」、「backpressure」、「onNext」という語が比較的頻繁に出現 --例外処理によるバグはプロジェクトの初期から少し経った辺りまでに頻出 --まだ調べるべきことがないか少し不安 -不具合票に結びついたクローン系譜を見るためのプログラムを作成途中 -RxJavaの勉強をしたが、難しい部分があるため十分に理解できていない **TODO [#e26120a9] -RQを4つほど考えて卒論を書いてみる -CCTの動作が正しいかどうか確かめる(久木田さんにメールする) *5/28 [#l5f86b20] **DONE [#fb3ec3ec] -30個ほど目視した --オペレータ以外の目立った特徴は見られなかったが、見落としている可能性がある。 **TODO [#s876d6f4] -RxJavaについてより詳しく理解する -残りの目視を行う -クローン系譜を見る **DOING [#a1838e41] *5/21 [#l5f86b20] **DONE [#fb3ec3ec] -bugラベルがついたクローンに特徴があるかどうかを目視で分析 --operatorというディレクトリの下にあるソースコードに不具合混入クローンが集中していることがわかった --しかし、bugラベルがついたissue全体でoperatorの下のソースコードにバグが集中している -ちなみに、RxJavaでのoperatorとはデータの流れを操作したりするために重要なものであるため、この部分にバグが混入するするとRxJavaのユーザに大きな損失を被る **TODO [#ic4a96a0] -残りissueを目視 -クローン系譜も見てみる **DOING [#t5e627f9] *5/14 [#tf45ea40] **DONE [#y89dffe4] -bugラベルがついたgithubのissueとクローンが結びついたものをcsvファイルで出力した --issueのみに結びついたものは142個中、19個(片桐さんが調べた期間範囲) --プルリクエストを含むissueに結びついたものは351個中、108個(片桐さんが調べた期間範囲) **TODO [#te2b27fa] -bugラベルがついたissueを目視する(例外処理があれば見ないようにする) -特徴があれば続行、なければ相談 **DOING [#s99775c9] --Bug Propagation/FindBugsの論文で使っているプロジェクトとツールを使って野口卒業研究を実施する *5/7 [#tf45ea40] **DONE [#y89dffe4] -RxJavaのCCTのデータからクローンと結びついた不具合票をいくつか見た --バグに関することだけでなくリファクタリングを行うなどの内容も多かった --あるリビジョンでクローンに多くの不具合が混入した ---変更を加えられたファイルの数は1032個 ---挿入された行数は134671行 ---削除された行数は134674行 --実際は不具合票に対してどのような分析を行うべきかまだ決まっていない **TODO [#q21637c6] -ラベルが「bug」であるissueの内、クローンと結びついているものを検出する -不具合票に対してどのような分析を行うべきかを考える **DOING [#s99775c9] --Bug Propagation/FindBugsの論文で使っているプロジェクトとツールを使って野口卒業研究を実施する *4/23 [#tf45ea40] **DONE [#y89dffe4] -RxJavaのクローンとバグの分析を少しだけ行った --&attachref(RxJavaのクローンとバグの分析(途中).pdf); **TODO [#q21637c6] -CCTのデータを使って分析を開始する **DOING [#s99775c9] --Bug Propagation/FindBugsの論文で使っているプロジェクトとツールを使って野口卒業研究を実施する *4/16 [#tf45ea40] **DONE [#y89dffe4] -既存研究と自分がしたい研究の差分を考えた --&attachref(研究テーマ案.pdf); **TODO [#q21637c6] --RxJavaのデータで分析開始 -- **DOING [#y56e9355] --Bug Propagation/FindBugsの論文で使っているプロジェクトとツールを使って野口卒業研究を実施する **DOING [#q044dd96] --CCTのソースコード読解,テーブル理解 --大石さんの卒論を読む --研究テーマを具体的に絞り込む *4/9 [#tf45ea40] **DONE [#y89dffe4] -森脇さんのクローン系譜の論文を読んだ --メモ:&attachref(クローン系譜_森脇_修論(メモ).pdf); -CCTのソースコードを少しだけ読んだ --メモ:&attachref(cct_source_understand.pdf); -研究テンプレートに必要事項を記入した --&attachref(研究テンプレート.pdf); **TODO [#q21637c6] --研究テーマスライド作成:既存研究(片桐先輩)との差分をみんなが理解できるように **DOING [#q044dd96] --CCTのソースコード読解,テーブル理解 --大石さんの卒論を読む --研究テーマを具体的に絞り込む *4/2 [#tf45ea40] **DONE [#y89dffe4] -以下の論文を読んだ --A Comparative Study of Bug Patterns...の残り ---メモ:&attachref(A Comparative Study of Bug Patterns in Java Cloned and Non-cloned Code.txt); --Bug Propagation through Code Cloning:... ---メモ:&attachref(Bug Propagation through Code Cloning: An Empirical Study.txt); **TODO [#q21637c6] --コードクローンの系譜:http://sel.ist.osaka-u.ac.jp/lab-db/Mthesis/archive/121/121.pdf **DOING [#q044dd96] --CCTのソースコード読解,テーブル理解 --大石さんの卒論を読む --研究テーマを具体的に絞り込む *3/29 [#tf45ea40] **DONE [#y89dffe4] -以下の論文を読んだ --片桐さんの卒論 --A Comparative Study of Bug Patterns...の7ページまで **TODO [#q21637c6] --読解が難しかったところを報告する(読んでもらう) --A Comparative Study of Bug Patterns in Java Cloned and Non-cloned Codeの続き --Bug Propagation through Code Cloning: AnEmpirical Study **DOING [#q044dd96] --CCTのソースコード読解,テーブル理解 --大石さんの卒論を読む --研究テーマを具体的に絞り込む *3/23 [#q5874f1c] **DONE [#o8fee665] -CCTの使い方を不具合の紐付けのやり方以外覚えた -コードクローンの論文を5つほど読んだ --久木田さんの論文 --生成抑止,分析効率化,不具合検出を中心としたコードクローン管理支援技術に関する研究動向 --An Empirical Study of the Impacts of Clones --Evaluating Code Clone Genealogies at Release Level --Frequency and Risks of Changes to Clones **TODO [#q044dd96] --片桐さんの卒論を読む --A Comparative Study of Bug Patterns in Java Cloned and Non-cloned Code ---http://ieeexplore.ieee.org/document/6975632/ ---論文(&attachref(A Comparative Study of Bug Patterns in Java Cloned and Non-cloned Code.pdf);) --Bug Propagation through Code Cloning: AnEmpirical Study ---論文(&attachref(Bug_Propagation_through_Code_Cloning.pdf);) **DOING [#q044dd96] --CCTのソースコード読解,テーブル理解 --大石さんの卒論を読む --研究テーマを具体的に絞り込む *3/8 [#q5874f1c] **DONE [#o8fee665] **TODO [#q044dd96] -大石さんと片桐さんの研究の引き継ぎ -CCTの使い方を覚える -コードクローン関係の論文を読む