知識マップ: テストのないレガシー業務アプリに安全に手を入れる ── 特性化テストとリファクタリングの実践
記事「テストのないレガシー業務アプリに安全に手を入れる ── 特性化テストとリファクタリングの実践」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、自動テストのないレガシーコードに安全に手を入れるための手順を扱います。まず特性化テストで現在の挙動を固定し、出力の単位が大きい場合はゴールデンマスター法で期待値ファイルとの差分比較を行います。UIに直書きされたロジックには、メソッド抽出とインターフェース差し込みで継ぎ目(seam)を作り、必要ならInternalsVisibleTo属性でinternalメンバーをテストから見えるようにします。リファクタリングは差分ゼロ、機能追加は意図した差分だけが合格条件であるため同じコミットに混ぜてはならず、期待値の更新は差分レビューを経てから行うことで、退行を見逃すリスクを防ぎます。
flowchart LR
accTitle: 特性化テストとレガシーコード改修の知識マップ
accDescr: 特性化テストとゴールデンマスター法でレガシーコードの現在の挙動を固定し、継ぎ目(seam)を作ってリファクタリングと機能追加を安全に分離する関係を示す図
characterization_test["特性化テスト"]
legacy_code["レガシーコード"]
method_extraction_refactoring["メソッド抽出"]
refactoring["リファクタリング"]
golden_master_testing["ゴールデンマスター法"]
regression_risk["退行リスク"]
golden_master_diff_review["期待値の差分レビュー"]
mixed_commit_antipattern["リファクタリングと機能追加の混在コミット"]
seam["継ぎ目(seam)"]
dependency_injection_seam["インターフェース差し込み"]
internals_visible_to["InternalsVisibleTo属性"]
output_normalization["出力の正規化"]
dotnet_test_command["dotnet testコマンド"]
vstest_console["vstest.console.exe"]
characterization_test -->|"より先に行うべき"| method_extraction_refactoring
characterization_test -->|"より先に行うべき"| refactoring
golden_master_testing -->|"実装を担う"| characterization_test
golden_master_testing -->|"推奨される対応"| legacy_code
legacy_code -.->|"原因になり得る"| regression_risk
characterization_test -->|"軽減する"| regression_risk
golden_master_diff_review -->|"軽減する"| regression_risk
mixed_commit_antipattern -.->|"原因になり得る"| regression_risk
method_extraction_refactoring -->|"実装を担う"| seam
dependency_injection_seam -->|"実装を担う"| seam
seam -.->|"で構成できる"| internals_visible_to
refactoring -->|"両立しない"| mixed_commit_antipattern
golden_master_testing -.->|"前提とする"| output_normalization
regression_risk -.->|"で確認できる"| dotnet_test_command
regression_risk -.->|"で確認できる"| vstest_console
characterization_test -->|"推奨される対応"| legacy_code
seam -->|"推奨される対応"| legacy_code
dotnet_test_command -.->|"両立しない"| legacy_code
vstest_console -.->|"推奨される対応"| legacy_code
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 特性化テストはメソッド抽出より先に行うべきです。
- 特性化テストはリファクタリングより先に行うべきです。
- ゴールデンマスター法は特性化テストの実装を担います。
- ゴールデンマスター法はレガシーコードに対する本記事の推奨です。
- レガシーコードは退行リスクの原因になることがあります。
- 特性化テストは退行リスクを軽減します。
- 期待値の差分レビューは退行リスクを軽減します。
- リファクタリングと機能追加の混在コミットは退行リスクの原因になることがあります。
- メソッド抽出は継ぎ目(seam)の実装を担います。
- インターフェース差し込みは継ぎ目(seam)の実装を担います。
- 継ぎ目(seam)はInternalsVisibleTo属性で構成できます。
- リファクタリングはリファクタリングと機能追加の混在コミットと両立しません。
- ゴールデンマスター法は出力の正規化を前提とします。
- 退行リスクはdotnet testコマンドで確認できます。
- 退行リスクはvstest.console.exeで確認できます。
- 特性化テストはレガシーコードに対する本記事の推奨です。
- 継ぎ目(seam)はレガシーコードに対する本記事の推奨です。
- dotnet testコマンドはレガシーコードと両立しません。
- vstest.console.exeはレガシーコードに対する本記事の推奨です。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。