Wakayama-SocSEL / Technical-Debt

0 stars 0 forks source link

Spotbugsの環境構築とその結果 #3

Open YutaShiotani opened 4 years ago

YutaShiotani commented 4 years ago

https://spotbugs.readthedocs.io/ja/latest/running.html#executing-spotbugs を参考しています

YutaShiotani commented 4 years ago

SpotBugsのファイルをダウンロードはできたのですが,実行のための環境構築に手こずってます.(進捗報告)

akinori-i commented 4 years ago

がんばれ!もし調査が必要であれば教えてください.あと,このissueのdescriptionとして,どのサイトを参考に構築しているのかを記載しておいてください.

YutaShiotani commented 4 years ago

わかりました.ありがとうございます. https://spotbugs.readthedocs.io/ja/latest/running.html#executing-spotbugs このサイトを参考にしています

YutaShiotani commented 4 years ago

対象プロジェクトをcommons-copdecにしました.(伊原先生からいただいた資料の10位だったので調査するのに良いと思いました)

各コミットのコミットIDは取れたので,1コミットだけでもspotbugsにかけてみようと思います.(水曜日まで)

akinori-i commented 4 years ago

別にいいんだけど,なぜjunitではない?テスト的にやるには規模が大きすぎる?

YutaShiotani commented 4 years ago

ほんとに適当に選んだだけなので,そっちの方が良いですか?? 結果がはたく欲しいので僕的にも規模が小さい方がいいので,junitにします

YutaShiotani commented 4 years ago

対象:junit4 SootBugs javaファイルで解析可能だと思っていたのですが,.jarに変換しないといけないみたいなのでそれをしています java→jar やること JDK versionが1.5なのでそこを自分のMacのversionと同じにする

akinori-i commented 4 years ago

わからなかったら、javaエキスパートの福元くんに聞きや

ghost commented 4 years ago

上記のサイト内に検知可能なバグの種類が載ってるので確認したほうがいいかも? https://spotbugs.readthedocs.io/ja/latest/bugDescriptions.html

YutaShiotani commented 4 years ago

なんちゃんのissueを参考にしています. (行っていること) 各コミットごとのjunit4のjavaファイルをローカルにコピーしています.

(コード)

import os
import glob
import pandas as pd
import shutil
import time
import sys

def write_file_at_new_dir(new_dir_path, file_name, mode, path_list): #新しいディレクトリ内にテキストファイルに.pyファイルの絶対パスを書き込む
    os.makedirs(new_dir_path, exist_ok=True) #新しいディレクトリを作成する
    with open(os.path.join(new_dir_path, file_name), mode) as _write_file: #テキストファイルに1行ずつ絶対パスを書き込む
        for path_data in path_list:
            _write_file.writelines('\n'.join(path_data) + '\n') #改行しながら1行ずつテキストファイルに書き込む

commit_Hash_log = pd.read_csv('/Users/yuta-s/junit4_commit.csv', header=None) #csvファイルを読み込む
commit_Hash_list = commit_Hash_log[0].tolist() #列を指定してtolist()を用いてDataFrame型からList型に変換する
path = '/Users/yuta-s/Google Drive/junit4_java_project/junit4'
i = 0

for commit_Hash in commit_Hash_list: #ハッシュ値をfor文で回す
    i = i + 1 #コミット履歴順にファイルを管理するためにファイル番号を1ずつ増やしていく
    print(str(commit_Hash) + '\n')
    #if str(i) < args[1]: #ファイル番号が第一引数より小さい限りfor文ループを飛ばす
        #continue
    os.chdir('/Users/yuta-s/Google Drive/junit4_java_project/junit4')
    new_dir_path = path + '/Junit4_log_list/' + str(i) + '_' + str(commit_Hash) #新しいディレクトリパス
    python_dir_path = path + '/Junit4_log_list/' + str(i) + '_' + str(commit_Hash) + '/java_file'
    file_name = 'junit4_path_list.csv' #.pyファイルの絶対パスを書き込むファイル
    path = path + '/junit4_java_project/junit4/' #ディレクトリパスを指定する
    path_list = [] #.pyファイルの絶対パスを保存するためのリスト

    os.system('git checkout ' + str(commit_Hash)) #ハッシュ値によってbranchを切り替える

    for d, s, f in os.walk('/Users/yuta-s/Google Drive/junit4_java_project/junit4'): #ディレクトリ内の全てのファイルを探索する
        python_file_list = glob.glob(os.path.join(d, '*.java')) #.pyの拡張子を持つファイルの絶対パスをリストに保存する
        if python_file_list:
            path_list.append(python_file_list)

    write_file_at_new_dir(new_dir_path, file_name, 'w', path_list) #新しいディレクトリ内にテキストファイルに.pyファイルの絶対パスを書き込む
    os.makedirs('/Users/yuta-s/Google Drive/Junit4_log_list' + str(i) + '_' + str(commit_Hash), exist_ok=True) #新しいディレクトリを作成する
    with open('/Users/yuta-s/Google Drive/Junit4_log_list/' + str(i) + '_' + str(commit_Hash) + '/junit4_path.csv', 'w') as _write_file: #テキストファイルに1行ずつ絶対パスを書き込む
        for path_data in path_list:
            _write_file.writelines('\n'.join(path_data) + '\n') #改行しながら1行ずつテキストファイルに書き込む
    #os.makedirs('/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/Pylint_log_list/' + str(i) + '_' + str(commit_Hash) + '/python_file', exist_ok=True) #.pyファイルを保存するディレクトリを作成する

    absolute_path_list = pd.read_csv('/Users/yuta-s/junit4_path_list.csv', header=None) #ディリクトリ内の.pyフ>ァイルに対する絶対パスが書かれたcsvファイルを読み込む
    absolute_path_list = absolute_path_list[0].tolist() #valuesのtolist()を用いてDataFrame型からList型に変換する
    #if os.path.exists('/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/python_project/airflow/pylintrc'):
    #start = time.time() #全ファイルにPylint適用にする際の時間を測る
    #if os.path.exists('/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/python_project/airflow/pylintrc'):
    #try:
        #shutil.copy('/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/python_project/airflow/pylintrc', '/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/Pylint_log_list/' + str(i) + '_' + str(commit_Hash) + '/') #pylintrcファイルを保存する(.pylintrcの場合もある)
    for absolute_path in absolute_path_list:
        #with open('/mnt/data1/minami/iwesep2019/pylintrc_file_count.csv', 'a') as _write_test:
                #_write_test.writelines(str(i) + '_' + str(commit_Hash) + '\n')
        shutil.copy(''.join(absolute_path), '/Users/yuta-s/Google Drive/Junit4_log_list/' + str(i) + '_' + str(commit_Hash) + '/java_file/') #.javaファイルを保存する 
            #os.system('pylint --rcfile=/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/python_project/airflow/pylintrc ' + str(absolute_path) + ' >> /mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/Pylint_log_list/' + str(i) + '_' + str(commit_Hash) + '/pylint_log.txt')

         #with open('/mnt/data1/minami/iwesep2019/Terminal_' + args[3] + '/Pylint_log_list/' + str(i) + '_' + str(commit_Hash) + '/pylint_log.txt', 'w') as _write_file_2:
                #_write_file_2.writelines('***'+ str(commit_Hash) + '**********\n')
    #except:
    #else:
        #print('pylintrc file not exist')
    #elapsed_time = time.time() - start
    #print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
    i = i + 1 #コミット履歴順にファイルを管理するためにファイル番号を1ずつ増やしていく
    #if str(i) == args[2]: #ファイル番号と第2引数が同じになれば処理を終える
        #break

(エラー) File "get_commit.py", line 40, in with open('/Users/yuta-s/Google Drive/Junit4_loglist/' + str(i) + '' + str(commit_Hash) + '/junit4_path.csv', 'w') as _write_file: #テキストファイルに1行ずつ絶対パスを書き込む FileNotFoundError: [Errno 2] No such file or directory: '/Users/yuta-s/Google Drive/Junit4_log_list/1_2df7e0882128d551565f87f688bbe745d85aacba/junit4_path.csv'

テストがあるので,続きは終わってからします.