Accessもそうだが、VB、Javaなどの言語でも一般的にはフォームを使うが、Excelではスプレッドシートをインターフェースにすることが多い。


フォームであれば挙動を管理可能だが、Excelのスプレッドシート上での操作はかなり膨大なので、テストはかなり困難である。というのは顧客がどんな操作をするのか、高機能であるがゆえに操作を網羅することは困難であるからである。




それをどうやって解決すればいいか。


最も発注側も受注側も納得いくのは「あらかじめそういうリスクを公開し、ユーザーサイドでのテスト期間を長めに取ってもらう」ことである。本来は自分で積み重ねてきた経験から「このバージョンのこのサービスパックでこれは保証できる」と一覧を作るのが望ましいが、なかなかないだろう。だから「実際に担当者が行うユーザーサイドのテストの操作の範囲内であれば動作保証(動かない、というケースも含め)する」とし、その範囲内を明示しておけば、それ以外の操作が出てきた際におおごとにはなりにくい。


逆に「ユーザーテストでは多少の無理は聞いておく」方が「そのときに出てきてないから」と新たに作業費の発生をさせやすい。どういうSLA(サービスレベルアグリーメント)にしておくか、によるだろう。




とにもかくにも、「テストはお客さんの協力がないと成り立たない」と考えておいた方がよい。


あるAccessVBAのコードを見ていて「こりゃ、無駄な処理が多いなー。ぜい肉落とすか!」と思った際にひらめいた。




こういうプログラムをスパゲッティコードという命名に倣って「メタボリックコードと呼ぶのはどうだろう。ここではメタボリックを余計で要らないもの、くらいの意味として捉えている。







メタボリックなコード、などと間に「な」を入れたりするのも自由。





用例として




・システムを修正する際に「えらくメタボリックですねえ。治療しましょう。」




・「この業務プロセスはメタボリックでは?」




・「このシステムは既にメタボリックだから、捨てるという治療方針を取れば運用コストが削減できますね。」







メタボリックなソースコードは多い。業務の合間に少しづつ治療していく所存である。




これは先日作っていたシステム。






ExcelからADOを使ってSQL Serverにアクセスしているシステムを作った。






テスト時はさくさく動いたが、顧客にテストして貰った際にレスポンスが悪かった。なんのことはない。テーブルにロックがかかっていたために相違ない。










ところが、確認してみると、トランザクションを開始した後、コミットやロールバックを遅延させているところはない。










第三者に意見を求めると「何が影響するか分からないので、ADOオブジェクトをこまめにNothingしてみてはどう?」という意見が出てきた。へ?馬鹿げてるぜ、とは思いつつもそれなら説明がつくよな、と試してみた。










あれあれ、なんでこれですんなり行ってしまう?と脱力してしまった。










これはデータベースにもよるかもしれない。もし情報をお持ちの方がいればコメントかトラックバックを。













※記事の書き直し予定 / DBアクセス