質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2801閲覧

単体試験項目数、よりよい抽出方法を知りたい

umino

総合スコア54

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/14 07:45

編集2018/12/14 09:30

実現したいこと

単体試験(単体テスト、UnitTest、UT)で、「分岐網羅できるだけの単体試験項目数」を抽出するよい手法を知りたい。

前提

・新人の開発エンジニアです。仕事で、単体テストを担当することになりました。プログラミング経験はほぼゼロです。

・言語はpythonで、テストフレームワーク(pytest)やC1カバレッジの取得方法(pycov)などの準備は事前に済ませています。

・テスト対象のモジュールは40ほどです。テスト対象のコードを1つ開いたところ、行数が2000行ありました。
単純計算で2000*40=80000行のコードに対して項目数を抽出する必要があるようです。

発生している問題

上司から「テスト項目数を抽出するように」と言われたのですが、目検で80000行すべての項目を抽出するとなると、時間がかかりすぎるし間違えそうです。
また、まわりに単体テスト経験者がおらず、一般的にどのような手法で項目数を抽出しているか聞くことができません。

if文のみで構成されている場合は2パターン×条件数でよいかな?という認識はあるのですが、例えば下記のような場合、if文はないけれど、試験項目数は戻り値が0か-1の、2つになると思います。

python

1def piyo(foo,bar): 2 ret = 0 3 fuga = "hogehoge" 4 try: 5 subprocess.call(fuga, shell=True) 6 except Exception as e: 7 ret = -1 8 9 return ret

これらのような分岐を、すべて目検で拾うことが大変かなと、なにか効率よく抽出するほうほうはないかなと模索しているところです。

単体試験(単体テスト、CT)で、「分岐網羅できるだけの項目数」を抽出するよい手法を知りたいので、
知見のある方、お知恵を貸していただけませんでしょうか。

一発で済む魔法はないと思うのですが、おすすめのツールやフレームワーク、また経験談などあれば助かります...
正解がないので難しい話だとは思うのですが、よろしくおねがいします。

試したこと

ググって、単体テスト項目数抽出の手法を調べた。(コーディングの話が多くヒットして、実務の話がうまく見つけられなかった)

補足情報(FW/ツールのバージョンなど)

python2.7
IDEはpycharmを使っています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

テスト項目とテストケースが混同されてるように感じます。

テスト項目であれば、ソースを確認するものでなくモジュールの仕様から起こします。
逆にいうとソースの通りにテスト項目を作成してもコーディングミスは見つかりません。
ソースと仕様が違うことを発見したいからです。

対してC1用のテストケースであれば、kasa0さんの回答のように分岐がいくつあるかと、その分岐を通るケースを考えればよいです。

たとえば、分岐の無い2000行のソースのテストケースは1つです。

では、テストケースが1つであれば、テスト項目も1つかというと、そうではなく。
戻り値の確認だけでも、戻り値がオブジェクトであれば、その属性について、確認が必要ですし、
データベースを更新するなら、更新した先の確認や、
非機能要件としてログ出力があるなら、その確認も必要になるなど

テスト項目は、1つのテストケースに対して1つ以上になります。
というか、1つ以上にしないとテストが終わらない・・・

今一度、やろうとしていることを確認してみてはいかがでしょうか。

投稿2018/12/14 09:21

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2018/12/14 09:37

回答ありがとうございます。 なるほどですね。私は、そのふたつの違いを理解していませんでした。(というよりも、ふたつの概念が存在することを知らず...) 目先の目標は「C1を100%にするための、C1用テストコードの作成」なので、私が知りたいことは、正しくは「テストケース数のよりよい数えかた」でした。 テスト項目は存在しない(作らない)ようなので、ソースコードを見てテストケースを数えることになりそうです。 大変わかりやすい回答に感謝します。 ありがとうございました。
guest

0

C1レベルなのでif文等の分岐命令で、true/falseの2パターンを項目を考えればよいです。

投稿2018/12/14 08:44

kasa0

総合スコア578

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2018/12/14 09:18

回答ありがとうございます。 if文のみで構成されている場合は2パターン×条件数でよいかな?という認識はあるのですが、例えば下記のような場合、 def piyo(foo,bar): ret = 0 fuga = "hogehoge" try: subprocess.call(fuga, shell=True) except Exception as e: ret = -1 return ret if文はないけれど、試験項目数は2になると思います(0か-1)。 これらのような分岐を、すべて目検で拾うことが大変かなと、なにか効率よく抽出するほうほうはないかなと模索しているところです。 参考になりました。ご回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問