《Cracking the Coding Interview》——第12章:テスト——テーマ3

3675 ワード

2014-04-24 23:28
タイトル:将棋ゲームをして、bool型の方法を設計して、駒が指定された位置に移動できるかどうかを検出します.
解法:異なる駒には異なる移動規則があり、それでは駒ベースクラス実現インタフェース、各駒サブクラスで実現する方式をとるべきである.駒はタイプに加えて,判断の根拠として現在位置を記録しなければならない.移動する位置はパラメータとしてメソッドに渡されます.しかし、この問題はソフトウェアテストの章に現れ、どのようにテストするかを説明するのではないでしょうか.システムのテスト方法を習ったことがないので、このような問題に遭遇したら仕方がありません.
コード:
 1 // 12.3 You're testing a method canMoveTo(int x, int y), which is a member method of a class Piece. Piece represents a piece in the chess game. How would you perform the testing?

 2 // Answer:

 3 //    1. Apparently every kind of pieces in chess has its own rule of moving. So the class Piece must be an abstract class, which will inherited by various kinds of specific pieces.

 4 //    2. You always have to check if (x, y) is out of border. So this will be included in base class Piece.

 5 //    3. Every piece has its own rule of moving, so the derived class will have to implement its own rule(), which will be executed by canMoveTo().

 6 //    4. The class Piece should look like this:

 7 //    5. The base class will have an interface named rule(), which will be implemented by derived class.

 8 class Piece {

 9 public:

10     virtual bool canMoveTo(int x, int y);

11 private:

12     // ...

13     virtual bool rule(int x, int y) = 0;

14 };

15 //    6. Thus, the test should cover two parts:

16 //        6.a. The coordinates (x, y) will cover in-bound and out-of-bound cases.

17 //        6.b. Every rule() function will be executed inside canMoveTo(), thus the test will also be included here.