• 締切済み

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

閲覧ありがとうございます。 C言語での改修案件に携わっているのですが、当方C言語も開発も経験のないものでして、単体テストについてお伺いしたいです。 システムBの単体テストをしたいとします。 システムBは、別サーバにあるシステムAからソケット通信で電文を受け取り、同サーバにあるシステムCにメッセージキューで電文を送ります。 また逆に、システムCからメッセージキューで電文を受け取り、システムAにソケット通信で電文を送ることもあります。 基本的にデータの中継を担うシステムです。 このとき、一体システムBの単体テストはどのような項目をやるのが正しいのでしょうか? (※CUnit等は使えません) JavaはJUnitを使っての単体テストの学習はしたことがあるのですが、C言語での単体テストの項目もやり方も全く想像がつきません。 私にPGの才能がないことは重々承知しておりますので、出来れば分かりやすくお教えいただければ幸いです。 よろしくお願いいたします。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

>単体テストは詳細設計書を元に項目を作るものだと思ってました!ソースコードを元に書いてしまうと仕様通りにできてるか分からない気がしたので… 詳細設計書を元に項目を作るので合ってますよ。 ソースコードが詳細設計書に書かれた仕様に沿っているのかを調べるためのものなんですから、 ソースコードを元に作ってはいけません。 >何故かそれが結合なのか単体なのかよくわからなくなってしまったのです…。 あまり深く考えなくてもよろしいかと。 項目の作り方は単体でも結合でも変わらないですし、 単体テストもmain関数の階層に近づくにつれ結合ほとんど変わらなくなりますから。

sugaru1
質問者

お礼

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

  • DESTROY11
  • ベストアンサー率23% (808/3503)
回答No.4

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

sugaru1
質問者

お礼

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

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

>このとき、一体システムBの単体テストはどのような項目をやるのが正しいのでしょうか? システムBの行うべき処理(サーバーAから電文を受信し、サーバーCにどのような電文を送信するのかなど)を項目としてあげていけばいいです。 これはJavaで作ったシステムであろうがCで作ったシステムであろうが変わりません。 むしろ、それができないという事であればシステムBが何をするシステムなのか把握していないという事です。 やり方としてはサーバーA、サーバーCのダミーを用意して実際に電文の送受信したり、送受信部分の関数をスタブ化して行うなど色々あります。

sugaru1
質問者

お礼

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

noname#263248
noname#263248
回答No.2

単体テストはソースコードをもとに試験項目を作っていきます なのでこの説明だけではまったく回答ができないのです ソースの流れに対して、すべての条件において期待通りの動きをするか?を確かめていきます 分岐があるならどの条件で分岐するか? 繰り返し処理があるなら、入力があるなら、出力があるなら、とソースの動きに対して試験していきます 少なくともAからの電文が入ったらどうなるか?電文の最大値ではどうなるか?最大値以上でどうなるか?電文が来なかったらどうなるか?使用できない文字があったらどうなるか?などは試験項目になりうるのではないでしょうか?

sugaru1
質問者

お礼

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

  • sukeken
  • ベストアンサー率21% (1454/6647)
回答No.1

こんにちは。 チームで開発をされているのですよね? 指導(指示)してくださる方に、その辺は確認するべきではないでしょうか? テスト結果も成果物のひとつとして必要な場合もありますから、勝手なことをしたところで、なんの意味も無い可能性があります。

sugaru1
質問者

お礼

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

sugaru1
質問者

補足

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

関連するQ&A