1

2 日前、私は面接に参加しました。質問をされましたが、まだ答えを見つけていません。質問は、c の atof(const char *str) 関数のテスト ケースを教えてくれました

  1. 指定された文字列に数値のみが含まれている必要があることを確認する必要があります。
  2. 指定された文字列には小数点が 1 つ含まれます。
  3. 変換後にオーバーフローしてはなりません。
  4. 文字列を null にすることはできません。

しかし、インタビュアーは満足せず、構造化された形式で回答を求めました。私の質問は、この回答を構造化された形式で表現して、将来同じ間違いを犯さないようにする方法です。

4

4 に答える 4

2

インタビュアーが「構造化形式」とはどういう意味かはわかりませんが、浮動小数点数のBNF構文(C言語で指定)を書き留めてから、各パスをテストするテストケースを提示することでこれを行います。構文。あなたのケースは特に符号や指数をカバーしておらず、数字に小数点を含める必要はありません。

構造的アプローチは、問題をサブ問題に分解します。構文は1つのサブ問題であり、構文チャートまたはBNFは、それをサブ問題に分解する自然な方法を提供します。追加のサブ問題は境界条件です...最小(> 0)と最大の有効な値のテストケースがあるはずです。無効な入力を処理するためのテストケースもあるはずですが、コメントで説明されているように、atof無効な入力の動作が定義されていないため、それは不可能です。

于 2012-09-24T09:02:38.823 に答える
2

たぶん、あなたはあなたがテストしているものによってあなたの答えを構造化することができます、例えば悪いフォーマットの文字列(null、空など)を与えることによってそして悪い「数字」(0プレフィックス/サフィックス2.0、0.4など...)のような悪い引数を与えることによって負の浮動小数点数をテストしたり、文字列に複数のドットを入れたりすることもできます。私はあなたの質問に答えたと思います、そうでなければ、私は質問をよく理解していないと思います。

于 2012-09-24T09:16:24.140 に答える
2

「テストケース」という用語の理解があなたとは異なります。

atof彼が求めているのは、さまざまなインプットとその期待される結果だと思います。例:
1.atof("1.5")を返す必要があり1.5ます。
2.atof("-7")ご返却ください-7.0
3.atof("Hello, world")失敗するはずです。しかし、Lundin のコメントに従って、 の失敗動作が定義されていないためatof、これを実際にテストすることはできません。

テスト ケースは、関数がテストする必要があるすべてのさまざまなことをカバーする必要があります。ただし、これらのことを書き留める必要はありません。例の入力と予想される出力だけです。

これを構造化された形式で書くのは簡単です。

于 2012-09-24T09:19:29.513 に答える
1

atofほとんどの場合、コード内でuse を使用してInternationalization/Localization、多くの言語で処理する必要があり、 10.0get に変換され10,0ます。

呼び出す前にatofロケールを設定する必要があり、機能が完了したらロケールをリセットする必要があります。

于 2012-09-24T10:56:00.753 に答える