[[ツール]] *Understandデータ取得ツール [#p243488b] *Jiraデータ取得ツール [#p243488b] *用途 [#vb427c0a] 不具合管理システム(BTS)から不具合票(HTML形式のデータ)を取得するツールのセットです.~ (取得した不具合票から目的のデータを取り出すスクリプトは別に用意して下さい.) Eclipseの場合の例) 本セットを使うと不具合票(不具合情報ページと変更履歴ページ)を半自動で取得できます.~ 取得した不具合票は以下のような,ディレクトリ構成で保存されます. 不具合情報ページ:https://bugs.eclipse.org/bugs/show_bug.cgi?id=365824~ 変更履歴ページ:https://bugs.eclipse.org/bugs/show_activity.cgi?id=365824 *ツール構成 [#y959ad36] -&attachref(GetBugData_1.zip); -作者:まさき(2012/05/05) 本ツールは以下のツールによって構成されています. - 不具合票取得関連スクリプト -- GetHTML:不具合票を取得するためのシェル生成スクリプト -- MoveScript:Mac側でファイルを移動させるためのシェル生成スクリプト -- CreateTeratermMacro:Teratermのマクロ生成スクリプト - 不具合票取得後の補助スクリプト -- ChangeFileName:ファイル名変更スクリプト -- SearchLostHTML:取得できていないファイルがないか(欠損ファイル)を探索するスクリプト - その他 -- Account:Eclipseのアカウント情報 *使い方 [#b7e05d46] 本ツールを使って,実際にEclipseの不具合票を37万件取得してみます.~ (別プロジェクトや任意のID間の不具合票を取得したい場合はスクリプト内の入力変数を直接変更してください) - 前提条件 -- Perlの実行環境が整っている. -- NAISTの共有PCを使用できるアカウントを持っている. -- EclipseのBugzillaのアカウントを持っている.(なければ,正木のを使ってください) - 推奨条件 -- PerlとLinuxの知識をある程度持っている. **手順1(生データ保存用のフォルダ作成) [#n1d73460] - 新規フォルダを作成する.(ここでは,新規フォルダ名を「Eclipse」とする:取得する不具合票のプロジェクト名推奨). - 手順1後の「Eclipse」フォルダ:~ &attachref(step1.jpg); **手順2(クッキーの保存) [#zb0dc2ab] - IEのクッキーを一旦削除する. - IEでEclipseのBugzillaにアクセスして,ログインする. - IEの「ファイル」→「インポートおよびエクスポート」から,「cookies.txt」を保存する. - 保存した「cookies.txt」を「Eclipse」フォルダにコピー&ペーストする. -(クッキーの保存方法の詳細については,http://mbsupport.dip.jp/mb/ie8_06.htmあたりを参照下さい). - 手順2後の「Eclipse」フォルダ:~ &attachref(step2.jpg); **手順3(不具合票取得スクリプトの作成) [#se4d2c19] - 「GetHTML」内の「GetBugHTML.pl」及び「GetActHTML.pl」を実行する. - 出力された全てのシェルスクリプトを「Eclipse」に移動させる. - 手順3後の「Eclipse」フォルダ:~ &attachref(step3.jpg); **手順4(ファイル移動スクリプトの作成) [#pd7b635e] - 「MoveScript」フォルダ内の「MoveScript.pl」を実行し,出力される「MoveScript.sh」を「Eclipse」フォルダに移動させる. (batファイルに変更した。なのでこの後すぐに実行すべき) - 手順4後の「Eclipse」フォルダ:~ &attachref(step4.jpg); **手順5(フォルダの移動(自分のPC → 共有PC)) [#ye77f6b1] - 「Eclipse」フォルダを共有パソコンにコピー&ペーストする. - (WinSCPなどを使ってコピー&ペーストすればおk.移動させる場所は任意だが,デスクトップに置くことを推奨する.) - 手順5後のWinSCP:~ &attachref(step5.jpg); **手順6(フォルダの整形) [#ib939e43] - TeraTermを使って,共有パソコンにリモート接続し,「MoveScript.sh」を実行する. -- 例) --- snowxxx.naist.jp> cd Desktop/Eclipse --- snowxxx.naist.jp> sh MoveScript.sh - (TeraTermは後でも使うし,インストール必須!!使い方は頑張って調べて!) - ※TeraTermの注意書き(NAISTの共有PCにアクセスする場合) -- 1. SSHで接続する. -- 2. チャレンジレスポンス認証を使う. - Teratermの認証1:~ &attachref(step6_1.jpg); - Teratermの認証2:~ &attachref(step6_2.jpg); - Teratermの実行図:~ &attachref(step6_3.jpg); - 手順6後のWinSCP:~ &attachref(step6_4.jpg); **手順7(使用可能な共有PCの探索) [#a4af1402] - 「CreateTeratermMacro」フォルダ内の「ServerList.txt」に接続できる共有パソコンのマシン名を書き込む. - (少なくとも10台は欲しい.Eclipseの場合,80台あれば1日で不具合票の取得ができる.) -- 例) --- TeraTermを使って,snow001.naist.jpからsnow140.naist.jpまで人力で探す・・・. --- 使用可能であれば,ログイン画面が表示され,使用不可であれば,固まるからそれで判断する. --- (誰か自動化お願いします) - 「ServerList.txt」:~ &attachref(step7.jpg); **手順8(Teratermマクロの作成) [#s781069d] - 「CreateTeratermMacro.pl」を開いて,入力変数を変更する. -- $WinDirectoryPathに「CreateTeratermMacro」フォルダまでの絶対パスを入力する. -- $MacDirectoryPathに「Eclipse」フォルダまでのパスを入力する. -- $UserNameに共有PCのIDを入力する. -- $Passwordに共有PCのパスワードを入力する.(直書きなので,ファイルの扱いに注意してください) - 「CreateTeratermMacro」フォルダ内の「CreateTeratermMacro.pl」を実行する. - 手順8後の「CreateTeratermMacro」フォルダ:~ &attachref(step8.jpg); **手順9(Teratermマクロの実行) [#ma9dc221] - 「CreateTeratermMacro」フォルダ内の手順8で出力された「ExecMacro.bat」を実行する. - (必要なやつだけ実行したい場合は個別にttlファイルを実行していく.) - 実行の様子:~ &attachref(step9.jpg); **手順10(フォルダの移動(共有PC → 自分のPC)) [#o5da111d] - 全てのダウンロードが完了したらWinSCPなどを使って,共有パソコンから自分のパソコンにコピー&ペーストする. - (容量が大きいと上手く圧縮できないので,そのままの状態でコピペすることを推奨します.ファイル数が多いため(70万以上),移動に数時間掛かりますが,気長に待ちましょう) - ファイルの移動が完了すれば,不具合票の取得完了です. - 「Eclipse」フォルダ:~ &attachref(step10_1.jpg); - 「Eclipse->bug」フォルダ:~ &attachref(step10_2.jpg); - 「Eclipse->bug->bug_0_1」フォルダ:~ &attachref(step10_3.jpg); - 「Eclipse->activity」フォルダ:~ &attachref(step10_4.jpg); **おまけ1(ファイル名の変更) [#l1d936d0] - 共有PC(Mac)から自分のPC(Windows)に不具合票を移動させると,エンコードの違いで,「show_bug.cgi?id=1」が「show_bug.cgi%3Fid=1」のようになってしまいます. - ファイルを読み込むときなどのエラーの原因となる可能性があるため,「show_bug.cgi%3Fid=1」を「show_bug.cgi_id=1」のように変更するスクリプトを作りました. - 実行には生データが保存されているフォルダの絶対パスなどを変更しなければいけません. -- 詳細については複雑なプログラムではないので,ソースを読んでください. **おまけ2(欠損ファイルの探索) [#o030d192] - HTMLを自動でダウンロードすると原因は不明ですが,たまにダウンロードできていないファイルが存在します. - 自力で探すと大変なので,自動で探してくれるスクリプトを作りました. -- ただ,欠損している不具合票のIDを取得するだけなので,それらを再度自動で取得するスクリプトはありません.誰か書いて! - 欠損ファイル数が多くなければ,自分でページを表示させて右クリックでファイルを保存しましょう(保存するときのファイル名は既存のものと同じになるように注意してください). -- だいたい,10000万ファイルあたり,0〜2個くらい欠損してます. *Q&A [#pcf858fe] -Q1.なぜ,クッキーをかませるのか? --A1.Bugzillaに登録されたアカウントのEmailアドレスを取得するため.ログインしていないとアカウント名しか表示されない. -Q2.任意のID間の不具合票を取得するには? --A2.スクリプトの中身の変数をいじればおk.例えばEclipseのID300000から370000までの不具合票を取得するには,$Min=30,$Max=37に変更すればいい. *成果 [#za852b31] 本ツールによって得られた成果(分析結果等)をまとめた論文. -正木仁,〜〜〜〜,奈良先端科学技術大学院大学,修士論文,2012. -正木仁,大平雅雄,伊原彰紀,松本健一,〜〜〜〜,情報処理学会論文誌「ソフトウェア工学」特集号,pp.xxxx-xxxx(投稿中). -正木仁,大平雅雄,伊原彰紀,松本健一,〜〜〜〜,ソフトウェアエンジニアリングシンポジウム2012,pp.xxxx-xxxx(投稿中).