みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【C言語】単体テストのイメージが全くつかない

閲覧ありがとうございます。

C言語での改修案件に携わっているのですが、当方C言語も開発も経験のないものでして、単体テストについてお伺いしたいです。

システムBの単体テストをしたいとします。
システムBは、別サーバにあるシステムAからソケット通信で電文を受け取り、同サーバにあるシステムCにメッセージキューで電文を送ります。
また逆に、システムCからメッセージキューで電文を受け取り、システムAにソケット通信で電文を送ることもあります。
基本的にデータの中継を担うシステムです。

このとき、一体システムBの単体テストはどのような項目をやるのが正しいのでしょうか?
(※CUnit等は使えません)
JavaはJUnitを使っての単体テストの学習はしたことがあるのですが、C言語での単体テストの項目もやり方も全く想像がつきません。

私にPGの才能がないことは重々承知しておりますので、出来れば分かりやすくお教えいただければ幸いです。

よろしくお願いいたします。

投稿日時 - 2018-02-06 16:11:18

QNo.9426234

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>単体テストは詳細設計書を元に項目を作るものだと思ってました!ソースコードを元に書いてしまうと仕様通りにできてるか分からない気がしたので…

詳細設計書を元に項目を作るので合ってますよ。
ソースコードが詳細設計書に書かれた仕様に沿っているのかを調べるためのものなんですから、
ソースコードを元に作ってはいけません。

>何故かそれが結合なのか単体なのかよくわからなくなってしまったのです…。

あまり深く考えなくてもよろしいかと。
項目の作り方は単体でも結合でも変わらないですし、
単体テストもmain関数の階層に近づくにつれ結合ほとんど変わらなくなりますから。

投稿日時 - 2018-02-07 20:21:43

お礼

回答ありがとうございます。
そうなんですね!認識間違ってなかったようでよかったです。
確かに単体と結合の区別をきっちりつけようとして混乱していたのかもしれません。
スタブを作るにしても作り方が分からず大変ですが、シンプルに考えることもしてみようと思います。

投稿日時 - 2018-02-07 21:36:56

ANo.4

一般的に「単体テスト」とはメソッド(関数)レベルのデバックを言います。
あるメソッドが期待通りの動作をするかですね。
メソッドの引数に想定値、想定外値を入れて、内部のif文などが想定どおりの流れになるか、引数に応じた出力があるかを確認します。
ですから、システムAもBも関係ありません。

現場によってデバッカをつかう、テストプログラムをつくる、紙に出して机上で追うなど手法はいろいろあります。

投稿日時 - 2018-02-06 21:32:00

お礼

回答ありがとうございます。
そうですよね、それがJavaだと理解できるのですが、Cになると全く理解できなくなってしまって…。
Cでも関数ごとのテストができるんですよね、きっと…どうしてこんなにイメージが湧かないのか自分でも不思議です。
ありがとうございます。

投稿日時 - 2018-02-07 08:48:51

ANo.3

>このとき、一体システムBの単体テストはどのような項目をやるのが正しいのでしょうか?

システムBの行うべき処理(サーバーAから電文を受信し、サーバーCにどのような電文を送信するのかなど)を項目としてあげていけばいいです。
これはJavaで作ったシステムであろうがCで作ったシステムであろうが変わりません。
むしろ、それができないという事であればシステムBが何をするシステムなのか把握していないという事です。

やり方としてはサーバーA、サーバーCのダミーを用意して実際に電文の送受信したり、送受信部分の関数をスタブ化して行うなど色々あります。

投稿日時 - 2018-02-06 20:11:16

お礼

回答ありがとうございます。
何故かそれが結合なのか単体なのかよくわからなくなってしまったのです…。
単体テストがメソッドに引数を渡してその振る舞いを判定するものだと思ってるからだと思います。
回答で教えていただいたことをベースに考えてみたいと思います。ありがとうございます。

投稿日時 - 2018-02-07 08:53:05

ANo.2

単体テストはソースコードをもとに試験項目を作っていきます
なのでこの説明だけではまったく回答ができないのです

ソースの流れに対して、すべての条件において期待通りの動きをするか?を確かめていきます

分岐があるならどの条件で分岐するか?
繰り返し処理があるなら、入力があるなら、出力があるなら、とソースの動きに対して試験していきます

少なくともAからの電文が入ったらどうなるか?電文の最大値ではどうなるか?最大値以上でどうなるか?電文が来なかったらどうなるか?使用できない文字があったらどうなるか?などは試験項目になりうるのではないでしょうか?

投稿日時 - 2018-02-06 19:19:35

お礼

回答ありがとうございます。
単体テストは詳細設計書を元に項目を作るものだと思ってました!ソースコードを元に書いてしまうと仕様通りにできてるか分からない気がしたので…
情報が足りない中、アドバイスありがとうございます。
参考にさせていただきます。

投稿日時 - 2018-02-07 09:04:25

ANo.1

こんにちは。

チームで開発をされているのですよね?
指導(指示)してくださる方に、その辺は確認するべきではないでしょうか?

テスト結果も成果物のひとつとして必要な場合もありますから、勝手なことをしたところで、なんの意味も無い可能性があります。

投稿日時 - 2018-02-06 16:56:20

補足

回答ありがとうございます。もちろん実際にテストをするとなれば項目について確認します。
ですが、項目を作成する前段階で、全くどのようなテストをすればよいかイメージすら掴めないので、経験豊富な方に、こういうテスト項目、こういう観点、こういうやり方がある、というようなことをお伺いしたかったのです。
環境的に1から10まで教えてもらえるような環境ではないので、皆様の知恵をお借りしたく質問した所存です。
アドバイスありがとうございました。

投稿日時 - 2018-02-06 17:18:29

お礼

何度もすみません!私の質問の仕方が悪かったようです…。
正しいか?と聞かれればそれはその現場によるという風になってしまいますよね。
皆様ならどんなテストをしようと考えますか?というようなことが聞きたかったのですが、言葉を間違えてしまいました。
すみません。気付かせていただき、ありがとうございました!

投稿日時 - 2018-02-06 17:33:24

あなたにオススメの質問