動作環境
C++ Builder XE4
背景
機能XX1を拡張して機能XX2を作ることになったとする。
実際には機能XX1の拡張では対応しきれず、新機能を追加するような状況だとする。
以下の作業が必要となる。
- 機能XX1の削除
- 機能XX2の追加
機能XX1の削除
どのように削除するか。
削除手順 > 成功編
- 関連する関数、変数、配列などの洗い出し (プロファイリング?)
- Gitで削除作業としてのfeatureブランチを切る (
feature/170801/removeXXX
) - 項目(関数、変数、配列)の削除順番の検討
- 作業が小さくまとまりやすいものを優先する
- 一つの項目を削除ごとにgit commit
- 4の作業を繰り返す
- 全項目の削除後にbranchをmasterへマージ
- no fast-forwardマージにしておくことで将来的にブランチ名と関連コミットが参照しやすくなる
こうすることで、機能XX2追加時に機能XX1の機能をGitログで確認もできる。
また、手順1にてプロファイリングしておくことで、機能XX2追加設計時の参考にもなる。
削除手順 > 失敗編
- 削除対象の主となるフォームコンポーネントを削除する
- IDEのエラーを誘発するという目的
- IDEのエラーを対応する
- 2の手順をエラーがなくなるまで繰り返す
機能を削除はできるが、関連機能の構造の情報が実装者に残らない。
(詳細設計資料の最新版がきちんと管理できていれば不要ではある)
また、関数の削除時に詳細を把握しておかないと、削除漏れが発生する可能性がある。
その他 > 「削除しないでなんとか拡張しようぜ!」編
機能XX1から強引に機能XX2にする方法。
glueコードでなんとか実装できるかもしれない。
数年後にそのプロジェクトの保守・機能変更時に「この分かりにくい構造はなんだ!(過去の自分への失望)」となる可能性が考えられる。
技術的負債が増加する方法であり、お薦めできない。