ソフトウェアテスト #2 Advent Calendar 2018 - Qiitaの12/15の記事になります。
ATestCovの使い方の一例紹介です。
atestcovを使って、テストケース削除時のnワイズカバレッジの変化を確認することで、nワイズテストにおける冗長なテストケースを検出できます。
pythonでのこの実装例を示します。
例は2ワイズカバレッジ(オールペア法)が対象です。テストケースを1つ削除した入力ファイルを全パターン生成し、atestcovで2ワイズカバレッジの変化を確認しています。
これにより、削除しても2ワイズカバレッジを下げないテストケースをピックアップします。
# check_2wise_testcase.py '''指定されたテストケースのうち、削除しても2ワイズカバレッジを低下させないテストケースを検出する''' import subprocess import sys import os import re def get_2wisecov(testcase_file, parameter_file): '''atestcovを実行し、2ワイズカバレッジ結果部分を抜き出す''' result = subprocess.check_output(f'atestcov.exe -t {testcase_file} -p {parameter_file}') return re.search('2wise coverage: ([0-9.]+)', result.decode('utf-8')).group(1) def check_test(testcase_file, parameter_file): '''削除しても2ワイズカバレッジが変化しないテストケースをピックアップする''' origin_cov = get_2wisecov(testcase_file, parameter_file) print(f'2wiseカバレッジ:{origin_cov}%') with open(testcase_file) as f: lines = f.readlines() filename = 'temp.txt' for i in range(1, len(lines)): with open(filename, mode='w') as f: for index, line in enumerate(lines): if index == i: remove_testcase = line.replace('\n', '') continue f.write(lines[index]) if get_2wisecov(filename, parameter_file) == origin_cov: print(f'-冗長なテストケース:{remove_testcase}({i+1}行目)') os.remove(filename) if __name__ == '__main__': if len(sys.argv) != 3: print("実行引数:python check_2wise_testcase.py テストケースファイルパス パラメータファイルパス") sys.exit(1) check_test(sys.argv[1], sys.argv[2])
実行例として、次の入力ファイルを用意します。
テストケース定義ファイル:SampleTestCase.txt
麺,スープ 細麺,豚骨 太麺,豚骨 細麺,醤油 太麺,醤油 太麺,豚骨
パラメータ定義ファイル:SampleParameter.txt
麺:細麺,太麺 スープ:豚骨,醤油
実行コマンドは次の通りです。
python check_2wise_testcase.py SampleTestCase.txt SampleParameter.txt
すると次のような結果が得られます。
2wiseカバレッジ:100.00% -冗長なテストケース:太麺,豚骨(3行目) -冗長なテストケース:太麺,豚骨(6行目)
これにより、2wiseカバレッジを基準とした場合、テストケース定義ファイルの3行目あるいは6行目のテストケースが冗長なのが分かります。