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

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

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

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

Python

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

Q&A

解決済

2回答

6325閲覧

C1を100%にするための、テストケースの数え方

umino

総合スコア54

Python 2.7

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

Python

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

0グッド

0クリップ

投稿2018/12/14 09:55

実現したいこと

単体試験(単体テスト、UnitTest、UT)で、「C1を100%にするためのテストケースの数え方」を知りたい。
カバレッジを取得した際に「C1が100%になれば」それでよいです。

前提

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

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

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

発生している問題

上司から「C1を100%にしたい。そのためのテスト数はいくつあるか数えて」と言われました。
しかし、目検で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

これらのようなテストケースを、すべて目検で拾うことが大変かなと、なにか効率よく数える方法はないかなと模索しているところです。

単体テストで、「C1が100%になるようなテストケースの数え方」について、よい手法を知りたいので、
知見のある方、お知恵を貸していただけませんでしょうか。

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

試したこと

ググって、テストケースの数え方について調べた。(コーディングの話が多くヒットして、実務の話がうまく見つけられなかった)

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

python2.7
IDEはpycharmを使っています
※テスト項目数とテストケースを混同しており、他の投稿で指摘していただいたため、修正して投稿し直しています。

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

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

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

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

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

guest

回答2

0

Sonarqubeというのが、Python(Plugin)でも使えるようです。

指標にCyclomatic Complexity 循環的複雑度というのがあるのですが、言語にPythonが載ってないのですよね。。。

仮に利用できるとすれば、循環的複雑度=C1テストケース数とありますので、まぁざっくり指標は出せると思いますが・・・

そもそも、導入するのにハードル高いので新人では環境作るほうが、目視でケースを
洗い出すより大変かもしれません。

正直、1回こっきりのために環境作るのは面倒なので、あまりオススメではないですが、
機械的にやってミスをなくしたいというのと、他の言語や違う観点でソースをチェックできるので
時間が許せば、チャレンジしてみるといいと思います。

で、やはり難しいというのであれば・・・

正確性がどの程度もとめられるか、わかりませんが、ソースをキーワードで検索して、出た数だけテストケースを増やす。でも、それなりのものはわかりますね。
つまり、Sonarqubeがやってることを自前でやる感じですね。
Pythonのキーワードが何になるか、わかりませんが。

泥臭い方法であれば、分岐のない部分をバッサリきって、分岐と例外をフローチャートような形で記録するのが確実です。
※後述するツールのリンクにある「関数のフローチャート」を自作する感じ

あとは、商用のツールですかね。

追記
あぁ。私、無知だったわ。
たぶん、https://radon.readthedocs.io/en/latest/
が、Pythonだと標準なのかも。
とはいえ、質問者さんの本来の目的には沿わないっぽくて、分岐の条件とか調査するなら
泥臭いやりかたしかないですね。

投稿2018/12/14 11:01

編集2018/12/14 11:18
momon-ga

総合スコア4820

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

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

umino

2018/12/14 11:47

回答ありがとうございます。 https://radon.readthedocs.io/en/latest/intro.html 教えていただいたページが、とても参考になりました! ifやwhileのほかにどのステートメントが、網羅率に影響を及ぼすか知りたかったんです。 コードメトリクス、や、循環性、といったワードを初めて知りました。 英語が読めず知識もないので、すべてを理解することは難しいですが、確かに知りたかったことのひとつです。 項目数抽出の際には、参考にします。 また、TechMatrix(商用のツール)について、このようなサービスがあることを初めて知りました。 視認性が高くてよさそうなので、体験版を使ってみようと思います。 大変勉強になりました。 丁寧な回答に深く感謝します。 ありがとうございました。
guest

0

自己解決

上司に相談して解決しました。

「今回のPJでは詳細設計書や関数仕様書は存在しないので、ソースコードをみながら試験項目を考えること。
数え方は、機械的に分岐数を数えるツールや手法は存在しない。
だから、ソースコードを上から見て、すべての分岐を通るテスト数を考えて、
さらに、品質向上になりそうなテストがあれば、それもプラスして試験項目数にいれること。」

とのことでした。
閲覧してくださった方々、ありがとうございました。

投稿2018/12/14 10:59

umino

総合スコア54

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問