レガシーコード改善ガイド読書会 第10章

7
1 楽楽楽楽楽楽 楽楽楽 楽楽楽楽楽楽 G 楽楽楽楽楽楽楽楽 2022楽8楽29楽 楽楽楽楽楽楽楽楽 楽楽楽楽楽楽楽楽楽楽楽楽 楽楽楽 10 楽

Upload: hiro-yoshioka

Post on 28-May-2015

793 views

Category:

Technology


3 download

DESCRIPTION

レガシーコード改善ガイド読書会第10章

TRANSCRIPT

Page 1: レガシーコード改善ガイド読書会 第10章

1

楽天株式会社 開発部 アーキテクトGよしおかひろたか |2023年4月12日

よしおかひろたかレガシーコード改善ガイド

読書会、第 10章

Page 2: レガシーコード改善ガイド読書会 第10章

2

No TEST, No LIFE

Page 3: レガシーコード改善ガイド読書会 第10章

3

No TEST, No LIFE 第 10章

• このメソッドをテストハーネスで動かすことができません– そのメソッドにテストからアクセスできな

い。メソッドが private など– メソッド呼び出しに必要なパラメータの生

成が困難。– メソッドに悪い副作用がある( DB の更

新)– メソッドが使うオブジェクトについて事前

に検出を行う必要がある

Page 4: レガシーコード改善ガイド読書会 第10章

4

No TEST, No LIFE 隠れたメソッド

• private メソッドのテスト方法– public メソッドを通じたテストが可能か?

• 利点:実際のコードと同じ方法でテストできる• 作業量を少し抑えることができる

– private メソッドを public メソッドに変えてしまう。• 副作用がある:そのクラスの他のメソッドの結果に悪影響を

及ぼす可能性がある• 対処法:新しいクラスに移動させ public メソッドにする• 議論:よい設計はテスト可能であり、テストができないのは

悪い設計である。• 変更のステップ

– private から protected へ– 当該クラスのサブクラスを作る– public なインターフェースを公開する

Page 5: レガシーコード改善ガイド読書会 第10章

5

No TEST, No LIFE 言語の「便利な」機能

• C# においてインスタンスもサブクラスも作れない機能 (sealed) がある。 Java には同様な機能 (final) がある。

• 間違い:制御不可能なライブラリに直接依存したこと

• いつの日かテストを支援するような機能をプログラミング言語が用意してくれるかもしれないが…

• お勧め: sealed や final は控えめに使う

Page 6: レガシーコード改善ガイド読書会 第10章

6

No TEST, No LIFE 検出できない副作用

• 他のオブジェクトを使わないオブジェクトはめったにない

• GUI に依存する処理から、 GUI に直接関係しない処理を分離する

• コマンドメソッド、クエリーメソッドを作っていく。– コマンド ( オブジェクトの状態を変更できる)

とクエリー(オブジェクトの状態を変更できない、値を返す)を分離する

Page 7: レガシーコード改善ガイド読書会 第10章

7

No TEST, No LIFE 依存関係を排除する手法

• 静的メソッドの公開• メソッドオブジェクトの取り出し• インタフェースの抽出• 実装の抽出• パラメータの適合• コンパイラまかせ• API をラップする• メソッドの抽出• サブクラス化とメソッドのオーバーライド