Transformation Priority Premise ( TPP ) は、テスト駆動開発(TDD) のプロセスをコンピューター プログラマーにとってより簡単かつ効率的に するための改良として、Robert C. Martin (Uncle Bob)によって開発されたプログラミング手法です。
変換の優先順位の前提では、より単純な変換が優先されるべきであると述べられています。
[...]リファクタリングには、変換と呼ばれる対応するものがあります。リファクタリングは、コードの動作を変更せずにコードの構造を変更する単純な操作です。変換は、コードの動作を変更する単純な操作です。変換は、サイクル内で現在失敗しているテストをパスするための唯一の手段として使用できます
red/green/refactor。変換には優先順位、つまり優先順序があり、テストの順序によってそれが維持されていれば、サイクルの行き詰まりや長時間の停止を防ぐことができますred/green/refactor。— 「アンクル・ボブ」マーティン、「変革優先の前提」[1] アンクル・ボブのブログ
このアプローチにより、プログラマーは変換リストを明示的に参照し、最初はリストの上位にあるより単純な変換をリストの下位にある変換よりも優先できるため、テスト駆動開発の目的で可能な限り単純な処理を実行できるようになります。
変換の優先順位の前提は、TDD の実践者が時間をかけて構築する、コードが汎用的になりすぎないようにバランスをとるための精神構造に付けられた名前です。その考え方は、テストに例を追加するたびに変換の優先順位リストが上がり、コードがより汎用的になり、より多くのケースを処理できるようになるというものです。対照的に、例が増えると、テストはより具体的になり、問題に焦点が絞られます。したがって、最初のテストでは定数から始め、次のテストではその定数を「if」に変更し、次のステップではループを導入することになります。優先順位の前提が上がるたびに、優先順位が上がります。この構造に従う目的は、偶発的な複雑化を避け、本質的な複雑化のみを増やすことです。各ステップは、テストで指定された例を実装するために必要なコードのみを実装するために実行できる、可能な限り小さな変更です。
— ビリー・トンプソン、Transform Priority Premise - 本日のソフトウェアエンジニアリングトピック#21 [2]
変容[3]
- ({} → nil) コードなし → nilを使用するコード
- (ゼロ→定数)
- (定数 → 定数+) 単純な定数からより複雑な定数へ
- (定数 → スカラー)定数を変数または引数に置き換える
- (ステートメント → ステートメント) 無条件ステートメントをさらに追加します。
- (無条件 → if) 実行パスを分割する
- (スカラー → 配列)
- (配列 → コンテナ)
- (文 → 末尾再帰)
- (もし→ながら)
- (文 → 非末尾再帰)
- (式 → 関数)式を関数またはアルゴリズムに置き換える
- (変数 → 代入) 変数の値を置き換えます。
- (case) 既存のスイッチに case (or else) を追加するか、if
アンクル・ボブも「他にもいるかもしれない」と明言した[1]。
[私は]優先順位リストは言語に固有のものだと考えています...たとえば、Java では、(if→while)と(変数→代入)を (文→末尾再帰)の上に 移動して、反復が常に再帰よりも優先され、代入がパラメータ渡しよりも優先されるようにします...Java は関数型言語ではないためです。
— ロバート・マーティン、ブログ記事「嘘。TPの前提」[3]
変換を実際に使用する方法
Ridlehoover 氏は、変換によって、どのテストをどのような順序で記述するかを選択するのに役立つことを明確にしています。
[変換] は、実際にどのテストをどの順序で書くべきかを選択するのに役立ちます。たとえば、コードに if ステートメントを追加するテストを書くことに決めた場合、そのテストには「無条件 –> if」変換が必要です。これを知っていれば、リストの上位にある変換のみに依存する他のテストを考えることができます。変換の優先順位を使用してテストを書くことで、1 つのテストでメソッド全体を書き直す必要がなくなるという究極のメリットがあります。
— アラン・リドルフーバー『変革の優先前提』[4]
Corey Haines は、ライブ コーディング デモ (Roman Numerals Kata) を提供し、変換を利用してコーディングの課題を解決します。
参考文献
- ^ ab Martin, Robert (2010). 「変革の優先前提」
- ^ トンプソン、ビリー(2021)。「変革の優先前提」
- ^ ab Martin, Robert (2010). 「嘘。TPの前提」
- ^ リドルフーバー、アラン (2011)。「変革の優先前提」
- ローマ数字のカタと解説
- 変革の優先前提を適用
- アンクル・ボブによる変革優先の前提の説明
外部リンク
- ボブ・マーティンのTPPに関するオリジナルブログ投稿
- ボブ・マーティンが変換のリストを拡張したその後のブログ投稿
- 2011 年の NDC (ノルウェー開発者会議) での TPP に関する彼のオリジナル プレゼンテーションのビデオ録画がYouTubeに掲載されています。
