• 締切済み

テストの上手な書き方

暗号化、複合化するプログラムを作っています。 クラスには暗号化メソッドと復号化メソッドを作る予定です。 あるデータを暗号化して復号化したら元のデータに戻っていることをテストしたいです。 単体テストはどのように書くのがいいのでしょうか? 復号化メソッドのテストの中で暗号化メソッドを使ってしまうと、どちらのメソッドのテストだかわからなくなってしまうし、復号化メソッドの中でテストデータとして暗号文を使うには、暗号化メソッドを先に実装して暗号文を計算させなくてはいけなくなってしまいます。。

みんなの回答

回答No.1

・暗号化を先に実装して、理論上の暗号化結果と一致するかを検証 ・複合化メソッドは暗号化入力前の値に戻るかを検証 または、 ・暗号&複合をひとつの機能としてみて、入出力が一致するかを検証 どちらにしても暗号化入力部分のケース毎の総当りは必須なので、暗号化を主軸に考えるのが良いのではと思います。

okonekat
質問者

お礼

回答ありがとうございます。遅くなってしまってすみません。

okonekat
質問者

補足

補足です、今回TDDです。テストファーストでブラックボックステストでユニットテストです。 暗号化関数は共通鍵暗号や乱数生成器、ハッシュ関数などの既存のライブラリを組み合わせて実装する予定です。 > 暗号化を先に実装して、理論上の暗号化結果と一致するかを検証 理論上の暗号化結果を手計算で求めるのはとても大変なので、手計算の結果のほうがテスト対象より信頼できません。 かといってコンピュータで計算すると、計算式がプログラムそのものになってしまいます。 > 複合化メソッドは暗号化入力前の値に戻るかを検証 テスト時に復号化メソッドに与える暗号文を、信頼出来るライブラリを使って作ることができるなら良いと思いますが、暗号化メソッドの値を使ってしまうのはテストが予想外に失敗する可能性があると思います。 >暗号&複合をひとつの機能としてみて、入出力が一致するかを検証 そのテストケースはどのような位置に書くのがベストですか? 例えば、暗号化のメソッドだけに関するテストケースで、「入力に対してこのような長さのデータが帰ってくる」というテストケースも書きたいとき、それのテストと暗号&複合のテストは同列に扱うべきですか?それとも暗号&複合のテストに含まれる暗号の長さのテストと考えたほうがいいですか?