dポイントプレゼントキャンペーン実施中!

前回単体試験に関して質問させていただいたものです。

前回の質問では記載情報が不足していた為(指摘あり)再度質問させていただきます。

現在単体試験の試験項目書を作るしております。その際どういった試験項目をつければいいのかが分からなくなり質問に至りました。

単体試験というものは色々な用途があると思いますが今回は「プログラムのロジック検証」をする為に行います。

調べた結果以下を満たすものという結論になりました。

・全ての条件式処理の正当性検証
  ⇒Aの場合、Bの場合、それ以外の場合などという条件が、
   仕様通りに処理されるかどうか。
・限界値分析による処理の正当性検証
  ⇒処理を行う上での最大値、最小値、対象外値が、
   仕様通りに処理されるかどうか。
・同値分割による処理の正当性検証
  ⇒いくつかのグループから代表値を設け、その値を処理させた時に
   仕様通りに処理されるかどうか。
  

これらを念頭に入れたうえで前回のコピーになりますが以下5パターンに関しては
どういった試験項目を作成すべきかをご教授いただきたいと考えています。

【パターン1】
private void Run()
{
FormatCheck();
AutoRun();
}

【パターン2】
private void Run()
{
//g_Lenghtはグローバル変数
g_Length = 10;
AutoRun();
}

【パターン3】
private void Run()
{
//g_Length、rec_Length共にグローバル変数
g_Length = rec_Length;
AutoRun();
}

【パターン4】
private void Run()
{
if(g_Length == 10)
{
g_Length = rec_Length;
}
else if(g_Length == 4)
{
g_Length += 1;
}
}

【パターン5】
private string GetString(string c)
{
return c + "\n";
}

※この5パターンはこういうときはどういった試験項目になるんだろうと、イメージしながら
適当に作った例です。その為プログラムに意味は全くありません。

以上、ご教授お願い致します。

A 回答 (5件)

> 次の作業として他言語間のコンバート作業が予定されているのですがプログラムの仕様書が残ってないそうなのですがこの場合コンバートした結果を単体試験で確認するには、どうすべきですか?



正攻法としては。
(1)旧プログラムは「仕様通りに作成されていると仮定」して、プログラムを解読して、「仕様書」を作る
(1-1)仕様を確認して、期待される処理と一致しているか、等の確認を行う。
(1-2) 上記仕様書を基にテストパターンを作成し、旧プログラムをテストして、仕様書が正しいかどうか確認する
(2) (1)で作った仕様書を基に、新言語でプログラムを作成する。
(2-1) 仕様書を基にテストパターンを作成し、新プログラムをテストする。
(2-2)旧プログラムと新プログラムとで、動作に差は無いか確認する
    • good
    • 0
この回答へのお礼

お礼遅くなりました。
ありがとうございました。

お礼日時:2013/05/19 21:01

>調べた限りでは単体試験は各モジュールごとのIN(引数及び外部変数)とOUT(戻り値及び外部変数)が正しく出ているかを調べる



それは試験項目ではなく、単体試験とは何をするものかの説明なだけでは(辞書に「単体試験」という項目があって、その説明みたいな)?
他の人もいわれていますし私も何度も書いていますが、試験項目は関数やモジュールなどの仕様がわからないことには出せません。
    • good
    • 0

少し難しく考えすぎているように感じます。


そもそも「コードを提示して、そのコードにあった試験項目を作る」という考え方が
単体試験の意味からずれています。
「この入力に対してはこの出力を期待する」というパターンのリストを作ればいいだけです。

private void Run()
{
FormatCheck();
AutoRun();
}
……と、コードだけを提示されても単体テストのテスト項目は作れません。
・何を意図して作られた関数か?
・システムとして、どういう入力を想定しているか?
・システムとして、どういう処理・出力を期待しているか?
という部分がはっきりして初めて単体テストが行えるわけです。
    • good
    • 0

ソフトウェアのテストの技法とか本を入手して、まず多くの知識に目を通した方がいいですよ。


圧倒的な知識不足です。
学生かプロかも提示して欲しいですね。
それに一言単体テストと言いますが、少なくとも3つの方法があるでしょう。
どの方法を取っているのか、質問文の読み手としては気になるところです。

またプログラム的に意味のないものは検討の価値がありません。
この手のものは形から入ろうとしてもダメで、意味から入る必要があります。
なので、テスト対象の具体的な仕様があってこそ、どのテスト項目をどう採用すべきかなどが決まるわけです。

この回答への補足

次の作業として他言語間のコンバート作業が予定されているのですがプログラムの仕様書が残ってないそうなのですがこの場合コンバートした結果を単体試験で確認するには、どうすべきですか?

※私はIT企業の研修生です。

補足日時:2013/05/15 07:58
    • good
    • 0

>・全ての条件式処理の正当性検証


>  ⇒Aの場合、Bの場合、それ以外の場合などという条件が、
>   仕様通りに処理されるかどうか。
(略)

「仕様通りに」と書かれていますが、その「仕様」はどこですか?

前の回答でも同じような事書いたと思いますけど。

int
foo(int a, int b)
{
return a + b;
}

という(間違っているかもしれない)コードから本当の仕様がわかりますか?

テスト対象となるコードから想定するテスト項目は、そのコードが正しいという仮定の上で作成される事になるので、テスト項目としての意味はありません。

この回答への補足

調べた限りでは単体試験は各モジュールごとのIN(引数及び外部変数)とOUT(戻り値及び外部変数)が正しく出ているかを調べる

こういう試験ってないのでしょうか?
認識間違ってるのかな

補足日時:2013/05/15 07:54
    • good
    • 0

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