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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

709閲覧

単体試験のテストパターンを早く作るのコツを教えてください

hasune

総合スコア18

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2019/08/04 11:36

お世話になります。
C言語の単体試験のテストパターンを作ることが苦手で、
ひとつの関数で遅いと2日3日かかっているため周りに迷惑をかけてしまっています。
皆さんがテストパターンを作る際、
具体的にどのように行っているのか、どのようにして作業を時短して1日の間に多くのテストパターンを作成しているのかを教えていただきたいです。

時間がかかる関数の傾向は同じ変数が何度も登場をして、
最終的にどこに何の値が入っているのか分からなくなるものです。(下記の例のようなものです)
そこからifの入れ子が多いものや境界値のチェック、演算、上下限のチェックとかが入ってくると思考停止してしまいます。

今行っている対策は、ソース内の同じ変数に色をつけて分かりやすくして少しでも混乱を減らすことのみで、
私が思いついたのはこれのみです。
仕事が遅く、周りに迷惑をかけているため本当に苦しいです。
下記のパターンを例にしなくとも、
コードを見たら自分はまずこうしてテストパターンを考えてるでも結構です。
どうかお知恵をお貸しください。
よろしくお願い申し上げます。

例)(いろいろと省いているので分かりづらかったらすみません)
Aのソフトにある関数
hensuu = hensuu2
anohensuu_1 = kansuu1(hensuu/10)

if(anohensuu_1 > 10)
{
bnohensuu = kansuu2(hensuu2100);
}
else if(result == 1)
{
bnohensuu2 = kansuu2(hensuu2
1000);
}
else
{
bnohensuu3 = kansuu2(hensuu2*10000);
}

Bのソフト(定数の記述がある)
#define hensuu2 10.0

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

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

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

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

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

guest

回答3

0

単体テストならテスト対象の関数の作者は普通ご自分かと思います.
もしそうでしたら, 関数の規模がテスト作成力とあっていないと思いますので, もっと関数を細分化するという方法もあります.

投稿2019/08/04 16:06

jimbe

総合スコア12646

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

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

hasune

2019/08/05 11:20

すみません、記載していませんでしたが、単体テストは業務で行っています・・・。
gentaro

2019/08/05 11:48

業務で行う単体テストは通常対象のコードを書いた本人が作成するものだ、という意味でおっしゃっているんだと思いますが。(私もそう思います)
hasune

2019/08/05 12:02

>gentaroさん そういう意味だったのですね。すみません。 今まで他人が書いたコードの単体テストしかなかったので、 それが普通だと思っていました。
jimbe

2019/08/05 12:45

作者は他の方でしたか, 失礼しました. gentaroさんフォローありがとうございます.
guest

0

そこからifの入れ子が多いものや境界値のチェック、演算、上下限のチェックとかが入ってくると思考停止してしまいます。

テスト対象のコードの複雑度にもよると思いますけど、思考停止しちゃうのは一度に複数のことを考えるからじゃないですか?ひとつのテストコードで複数の確認をしようとしてたり、とか。

単体テストなんて所詮は「入力値-期待値」のペアを作っていく作業に過ぎないのだから、まずひとつの入力値に着目して、その値の取りうる範囲でテストが必要な項目(最小・最大値とかゼロ値とか境界値とか)を列挙し、他の入力値はテストが通る最低限の値を入れてばーっと組み合わせを作る作業を繰り返せば、結構なカバレッジのテストはできると思います。

それが終わってから、複合条件をひとつひとつ洗い出してテストを書いていけばいいので、思考が停止してても機械作業でできるんじゃないかと思いますが。

投稿2019/08/04 12:04

gentaro

総合スコア8949

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

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

hasune

2019/08/05 11:35

>思考停止しちゃうのは一度に複数のことを考えるからじゃないですか? 仰る通り、一度に複数のことを考えないといけない場合に頭がパンクしてしまいます。 例として挙げたような、関数の中に何度も同じ変数があった場合は辛いです。 >ひとつの入力値に着目して、その値の取りうる範囲でテストが必要な項目(最小・最大値とかゼロ値とか境界値とか)を列挙し、他の入力値はテストが通る最低限の値を入れて この部分を読んで思ったのが、 大きな関数で同じ変数が登場するとテストが通る最低限の値が何なのか分からなくなる時が多いです。 だから機械作業にできていないのかも・・・。 メモをしながら作業をしていますが、 そのメモの仕方も悪いのかもしれません・・・。
guest

0

  1. テキトーにテストをいくつか書く
  2. カバレージを取りつつテストする
  3. 2の結果から、通ってないトコを見つけ、そこを通るテストを追加。
  4. 2に戻る。

ってやってます。

投稿2019/08/04 11:41

episteme

総合スコア16614

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

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

hasune

2019/08/05 11:38

単体テストというのはシンプルな話にすると、 epistemeさんのコメントになるのですね。 私は難しく考えすぎなのかもしれません・・・。 コードを見た時に分かる箇所からテストパターンを考えるのはありかもしれません。
episteme

2019/08/05 11:41 編集

その例だとif文ふたつあるから、パターンは高々4通り。 てかそもそも、コードからテストを作っちゃダメ。仕様から作るべし。
hasune

2019/08/05 12:28

今回の例だと、私は変数(特に同じ変数)に注目していました。 if文がいくつあるかをまず見るのは私にはない視点でした。 それが頭がパンクする一因だったかもしれません。コメントありがとうございます! 仕様書ですが、仕様書が読めない(英語&図しかない)ので読んでませんでした・・・。 仕様書は大事ですね・・・目を通すことからはじめて慣れていきます。
episteme

2019/08/05 12:34

コードからテスト作ったら全部成功するに決まってるっしょ? 検証したいのは「思った通りに動くか」であって「作った通りに動くか」ではないんだから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問