プロが教える店舗&オフィスのセキュリティ対策術

完全未経験からSierとして働いてます。扱っているのはC言語です。
今はwinAMSを使って単体試験をしていますが、私はwinAMSは触っておらず、試験パターンを考えています。

単体試験を振ってきたプロパーの人から事前に作業説明はありましたが、経験者向けの専門用語だらけの説明で条件網羅した試験を行うこと以外全く頭に入ってきませんでした。
コードは変数と関数だらけでどういう値を入れたら試験になるのか皆目見当ができません。
今まで勉強してきたif文や配列などのコードと実務で使われているコードのレベルが違いすぎて調べても解決しないことばかりです。

それでも、他のSierの人に聞きながらなんとか作業を進めようとしていますが、ひとつ聞いては自分で調べて考えて・・・結局分からず聞いて解決、そしてまたつまづくの繰り返しです。
関数や変数をgrep検索して元を探しても、コードによってはそこからどうすればいいのか分かりません。

今回が初めての出向でC言語を使った仕事も今回が初めてです。
他のSierの人はコードを見たらささっと入力値と出力値を考えてテストパターンを考えてますが、経験がないこともあり、私にはそれが考えられません。
皆さんは単体試験ではまずコードを見て一体どのように考えてテストパターンを考えるのでしょうか?
どうかお力をお貸しください。どうぞよろしくお願いします。

A 回答 (1件)

単体試験(=[U]nit [T]est=UT)と一言で言っても、私の経験の場合は現場によって内容も濃度も結構違います。


とりあえず、私の解釈として書いてみます。
基本的には、処理の流れを網羅することです。
網羅と言っているのは、プログラムには流れがあり、それを制御する制御文があると思います。
C言語ならばifやfor等、上から1つずつ順に1度実行するだけではなく、場合分けしたり、繰り返したりのことです。
場合分けしている場合は、条件によって通らない処理があると思います。
そこは条件を満たして通す。
通し方もいろいろあります。
濃度があり、C0等があります。
(「ソフトウェアテスト」wikipediaの「命令網羅 (statement coverage) (C0)」
当然濃い試験をすればする程時間はかかります。)
何を確認するかと言えば、期待した流れになっているかどうかです。
(期待した条件になっているか等。)
注意は、ソースから試験内容を作ってはいけないということです。
例えば、「if (a > 0)」という分岐があったら、aが0の場合とaが1の場合に真偽両方の流れを流れるかという試験内容を作ってしまいます。
UTは文法の正しさを確認することではありません。
(ビルド保障を前提としたため、文法やリンク等の参照エラーは無いものとしています。)
真偽それぞれの流れが期待した条件で流れているかどうかです。
正しくは「if (a >= 0)」にしなければいけないとしたら、それが正しいかどうかはそうしなければいけないという意味を知っていなければ試験内容を作ることができません。
(これは手法になってきますが、ソースから試験内容を作り、それを意味を知っている人がレビュー等で正しいか確認するというのは問題ないと思います。)
私個人のUTの意義は、上記だと思っているので、自動プログラムやデバッガ等で機械的に行う必要は必ずしもはないと思っています。
試験内容を作れる時点で意味を知っているため、意味とソースを照合すれば正しいかどうかわかってしまうからです。
ただ、複雑な条件によるヒューマンエラー防止だったり、UTを行った証(=エビデンス=evidence)を業務として残さなければならないという点で、大抵は機械的に行います。
※参考
wikipedia「ソフトウェアテスト」
wikipedia「コード網羅率」
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!