挙動の移植(ブラックボックス移植)
ソフトウェア開発の話。
移植案件(そっくりそのまま同じ動作をする別のシステムをつくる)に対する一つのアプローチ。
こんな時に
- excel vba など秘伝のタレ的な実装になってて理解が困難
- 扱っているドメインそのものが難しい&オープンでなく一人で情報を集められない
私の例:
- excel vba の煩雑な計算ツールを webapp に移植する案件
- 計算式えぐすぎて、理解するの一瞬で諦めるレベル
- ドメインも職人的すぎてその計算ツールつくってる人しか知らない&その人忙しくて丁寧にレクチャしてもらう暇無い
どうするか
- 中身を理解することなく、テストコードベースで移植する作戦
- A を与えると B が出てくる ← このパターンを集める
- 主要なパターンすべてについて、移植後でも移植前と同じ結果になれば(答え合わせが合えば)、ほぼ同じとみなせる
実装のポイント
- 意味は考えず、シンタックスを愚直に実装する
hoge = fuga/(piyo*piyo)
←a = b/c*c
とみなす- 「fugaとはどういう意味だろう」「なぜpiyoの二乗で割るのだろう」といった意味は考えない
- 厄介そうな関数は、その単位だけで挙動の移植をする
- 答え合わせの初期は割とデバッガゲーになるので、デバッガの使い方には習熟するべき
- 私の場合、excel vba のデバッガと js のデバッガ(VSCode と Firefox の開発者ツール)を使った
おわりに
僕が上記の excel vba 移植を切り抜けた時のアイデアを言語化してみた。