2007-03-02

Working Effectively with Legacy Code が良書な予感

Working Effectively with Legacy Code が届きました。かなりな良書ではないか疑惑。例はほとんど Java 用に書かれていますが、実践的な例が数多く載っています。LabVIEW に合うように本質を抽出できれば役に立ちそうな予感です。



たとえば、波形データをチャンネルごとにファイルに保存する SaveWaveforms.vi を考えます。ありそうですよね?



0_2








で、仕様変更、仕様の発見、パフォーマンスの問題などを理由に変更が生じます。各波形のピーク数を数えて、同一ピーク数の波形は1つだけ保存することになりました。たとえば、4チャンネル集録していて、それぞれのピーク数が 4, 5, 4, 2 だった場合、ch 0, 1, 3 だけ保存する、と。



愚直にいくと↓みたいな感じでしょう。
1_2








何が問題かというと、さっきまで動作していた SaveWaveforms.vi が書き換えられたという事実です。動いてたコードを破壊して、新しいコードで上書きしてしまったのです。さっきと動作が異なるので、単体テストの内容も変更しないといけません。



そこで、以下のように機能追加しましょう、という提案。ほんとは2つのサブVIなんですが、ひとつの図であらわしています。ポイントは、右側の SaveWaveform.vi には変更がないってことです。(もしテストしていれば)バグが混入しているのは、左の WaveformsWithUniquePeaks.vi だけであることが分かります。しかもファイル保存とは独立しているので、これだけ独立してテストや変更できます。



2_1