優雅なテクノロジーコース1級レビュー


1級期間中にミッションを行った時に初めて新しいことをたくさん知りました
その中のすべての任務には大きな収穫がある.

テスト難易度-レーシングカーゲーム


レーシングゲームの条件の中で、前進条件は以下の通りです.
0から9までの間のランダム値を求めた後、ランダム値が4より大きい場合は前進し、値が3より小さい場合は停止する.
その実施は非常に簡単です.
public class Car {
    private int position = 0;

    public void moveCar() {
        if (movable()) {
        	position++;
        }
        
    private boolean movable() {
    	int randomValue = random.nextInt(10);
        return randomValue >= 4;
    } 
}
random.nextInt()の値が4より大きい場合、論理はpositionを移動する.
上記のコードのpositionの変化をテストするとどうなりますか?
テストコードは成功するか、失敗するかのいずれかです.数値が変化するからです.
では、positionの変化をどのようにテストしますか?
インターフェース.

インタフェースの使用


インタフェースは、関連しないクラス間で関係を確立できます.
これにより、前進条件をテストできます.
次の例を示します.
public class Car {
    private int position = 0;

    public void moveCar(final MoveStrategy moveStrategy) {
        if (moveStrategy.movable()) {
        	position++;
        }
}
public interface Movable {

    boolean movable();
}
上記の例は、moveCar()インターフェースをパラメータとしてmoveStrategyに渡す.moveCar()の内部論理からmoveStrategyメソッドが呼び出される.
パラメトリックインタフェース.これは、moveCar()の方法の柔軟性を提供する.
なぜなら、moveStrategy.movable()に2つのクラスを実装し、ビジネスロジックおよびテストコードで他のクラスを渡すことができます.
すなわち,レーシングカーのビジネスロジックでは実際の前進条件を実施し,テストコードではtrueを返さなければならない.
上記のインタフェースを十分に活用すれば、複雑な部分をテストしながら、オブジェクトに柔軟性を提供することができます.

インスタンス変数の宣言条件


オブジェクト間のコラボレーション関係を作成する場合、インスタンス変数は通常、次のようにオブジェクトに宣言されます.
public class LottoMachine {

    private TotalLottoCount totalLottoCount;
    private Lottos lottos;
	
    ...
    
}
インスタンス変数宣言には、次の2つの利点があります.

  • 便利なコード実装
    インスタンス変数をオブジェクトに宣言することで、コラボレーションが必要なオブジェクトにリクエストを容易に送信できます.これは、宣言メソッドでコラボレーションを要求するオブジェクトインスタンスのプロセスを低減できるためです.

  • 読みやすさを向上させる.
    インスタンス変数宣言は、メソッド内でインスタンスを作成したり、パラメータを介して必要なインスタンスのコードを受信したりすることを低減し、オブジェクト全体の可読性を向上させることができます.
  • したがって、インスタンス変数を宣言すると、実装の使いやすさと読み取りがメリットになります.
    では、すべてのコラボレーションを要求するオブジェクトをインスタンス変数として宣言することをお勧めしますか?
    オブジェクトがステータスでない場合は、インスタンス変数として宣言できます.
    プログラムの実行時に、私たちが設定した順序で実行することは保証されていないからです.
    したがって、プログラムの実行中にインスタンス変数の状態が所望の値と異なる場合があり、プログラムエラーの原因になる可能性があります.
    したがって、インスタンス変数の宣言は慎重に考慮する必要があります.また、必要でない場合は、インスタンス変数の宣言は避けてください.
    次に、必要なインスタンス変数を示します.

    自分の状態を保たなければなりません。


    オブジェクト内で独立してリクエストを処理する必要があります.
    ビジネスロジックの処理に必要なステータスを維持する必要がある場合は、プログラムの正しい操作を保証するために、インスタンス変数として宣言する必要があります.

    TDD


    レベル1のミッションを行った時に初めて知ったTDDまた,TDDでタスクを行う過程で,TDDを用いる理由を考えた.

  • プログラムの機能をテストするのに役立ちます.
    テストコードがない場合は、機能を実装するたびにプログラムを実行し、エラーがないことを確認します.
    ただし、テストコードを作成すると、プログラムを実行することなく機能をテストできます.

  • エラーを発見しやすくなります.
    完全なプログラムを実装した後、状況に応じて論理を変更または変更する必要がある場合があります.テストコードがない場合、ロジックを変更するときに、以前に発生したことのないエラーや問題が発生しても、簡単に認識して解決することは困難です.ただし、TDDで実装されたテストコードとロジックを使用して漸進的に再設計し、テストコードを変更し、ロジックを変更すると、エラーや問題を簡単に発見し、解決できます.これは、既存のテストコードが破壊されないように、漸進的な再設計の過程で修正されたためです.

  • 不安要因を取り除く.
    コード量が増加したときにテストコードがない場合、すべてのコードが正常に動作しているかどうかを判断するのは難しい.しかしながら、TDDに基づいて開発を行うと、実施した機能に問題がないことを確保することができる.
    これは、コードを実行しながら、オブジェクトごとのメソッドが正常に動作しているかどうかをテストするためです.