TDD


TDD


テストドライバ開発
極めて短いサイクルの重複性に依存するソフトウェア開発プロセス
テストが開発全体を主導
開発者は、必要な自動化テストケースを作成します.
テストケースを通過するコードを作成し、再パッケージし、改善します.

ぎゃくてん


  • 一般的なソフトウェア開発
    論理コードの作成を完了し、コードを検証するためのテストケースを作成します.

  • TDD
    要求に応じて、まずプログラムが実行すべき機能をテストします.
    ◇そして論理コードを書くことで順序を逆転し、このようなテストケースを通過する
  • e.g.2つの整数を入力すると、2つの整数の和を出力するプログラム

  • 単純なターゲットの設定
    →3と5の順に入力し、8を出力します.

  • テストケース設計
    →未作成のコードで3と5を入力すると、8のテストプログラムが出力されます

  • テストケースを通過したコードの作成
    →2つの入力整数を確認して加算コードを返す
    // python3
    // 입력은 두 정수가 한 칸의 공백과 함께 한 줄로 동시에 주어진다고 가정
    // Ex) >> a b
    x, y = map(int, input().split())
    return x + y

  • 上記のコードを使用してテストプログラムを実行する
    →3と5を入力すると、上のコードで8を出力しなければなりません

  • 5-1. 合格した場合、新しいテストを追加し、コードを再包装し、テストに適応するために再結合します.
    5-2. 실패 시, 통과할 때까지 코드를 수정
  • 長所


  • 開発者は、実装する機能のニーズに集中できます.
    TDDの順序で最初にテストを作成
    →開発者は事前に機能要件と詳細を完全に理解して、テストを作成しなければならない
    ◇ユーザー事例、ストーリーなどを参考にニーズを分析し、実施目標を明確にする

  • 新しい機能を追加するたびに、新しい機能と既存の機能が同時に実行されることを確認します.
    新しい機能を追加すると、既存の機能が正常に動作しない可能性があります.
    →機能ごとにテストケースを作成し、機能追加時にテストケースを追加する
    ◇機能を追加するたびに、全面的なテストと各機能の点検が可能

  • 再構築に役立つ
    可読性、符号化慣行、拡張性、ビジネスロジックを向上させるために、コードを再パッケージします.
    →TDDとして開発する場合、テストコードは再構築がうまくいっているかどうかの尺度とすることができる
    (間欠的なテストは再構築に使用され、機能が正常かどうかを確認します)
    ◇梱包作業速度が速い
    →それに応じて品質が向上(品質:オブジェクト向け、拡張しやすい、デバッグ時間の短縮など)

  • 機能チェックとテストドキュメントの作成に役立ちます
    テストは,コード作成後のチェック機能に必要であり,テスト内容を記録するドキュメントも作成する必要がある.
    →TDDはこの2つの条件を自然に満たすことができる
    ◇それだけでなく、コードの開発(需要集中、新機能チェック、再構築)にも役立ちます
  • 短所


  • 全体的な開発時間がより長い
    各機能はテストケースとロジックを作成する必要があるため、ワークロードが増加します.
    特に、短期的な成果に集中している会社にとっては、非常に敏感かもしれません.

  • へそはお腹より大きいかもしれません
    いくつかの機能では、多くのテストケースと例外テストケースがある可能性があります.
    さらに,テストコードと論理コードの主体が逆転する可能性がある.
    →テストのために論理コードの構造を変更する必要がある場合があります

  • 難所
    通常の符号化の習慣と方法を変える必要があるからです.
    特に、通常、内功が高い人ほど変えにくい
    (逆に、開発経験の少ない人はTDDに適応しやすい)

  • 進入障壁がある
    機能のテスト方法の設定から始めます.
    開発したサービスに適したテストフレームワークを選択するには、ある程度の事前学習が必要です.
    特に開発はチーム単位で行われており、TDDを適用するためにはチームメンバーがTDDを全面的に理解しなければならない.

  • 偏見と普遍化を生む
    指定したツール(ユニットテストフレーム)を使用する必要がある圧力や柔軟性が低下する可能性があります.
    TDDの実装は、ルールや方法によって制限され、柔軟性がなくなるため、困難になる可能性があります.