2001年6月

[前月][次月][一覧]:[表紙][映画][King][BBS]


6/27 (Wed) Web日記の効用

仕事を選べる、というのは恵まれた環境なんだろうけど、 だからこそ妥協しちゃいかんよな、と思うこの頃。 これが出来るからやる、じゃなくて、これが作りたいからやる。 そうしないことが、どれほど自分を傷つけることか。


ビザの関係で来月半ばに急拠日本に行くことになり、 必要書類を揃えるのにばたばたしている。いくつかの伝染性疾患について 免疫があることを示さなくちゃならない(もしくは予防接種を打っとかないとならない) のだが、私も妻も、子供の時にかかってしまってて、証明なんか無い。 だもんで血液検査をしたりとか。 今日はツベルクリン反応を見て、陽性だったんで胸部レントゲンも撮って来た。 来週はおたふくかぜの抗体検査の結果が出るのでまた病院に行かなくちゃ。ふぅ。

要求される項目の中に破傷風の接種があって、 これは10年以内にやってなかったら打たないとならない。確か子供の頃にやったっきり、 と思って打つつもりでいたのだが、今朝になって、そういえば以前ホッケーで怪我をして emergencyにかかったときに打ったような気がする、と思い出した。 自分のWeb日記を遡って探してみたら、あったあった。3年前だ。 確かにtetanusを打ったという記述がある。意外なところで役に立つな、Web日記。 というわけでERにかかった病院にmedical recordの請求を出しとく。

6/17 (Sun) 不完全なシステム

最近相次いで発覚した大学の入試得点の集計ミスは、 私もプログラミングを生業としているだけに、他人事とは思えない事件である。 起こったことそのものは単純な情報伝達のミスだが、このようなパターンのミスは 非常にありふれた話だからだ。「これはバグじゃないか」と指摘を受けて 調べてみたらいつのまにかルールの方が変わってたという経験は私にもある。 ただ、多くの場合、それが人の一生を左右するような結果に結び付いていないだけだ。

入試得点の集計というのは、仕様(入試制度)が頻繁に変わるためバグの入る余地が 大きいのに、年に1回しか使われないからバグが発覚しにくく、しかも結果が人の人生にかかわるという、 自分も間違う可能性を認識しているプログラマにとってはイヤなアプリケーションであると思う。

人間が作るものである以上、ミスが入り込むのは避けようがない。 どうやったらミスを早期に発見し修正するかを考えた方が良い。

ここ何ヵ月か、私は Extreme Programmingの影響で、 何か作るたびに可能な限り自動化されたテストを書くようにしている。 境界条件をなるべく広くカバーするようなテストデータセットを作り、make testでテストが 走るようにしておいて、何か変更を加えたら必ずテストを実行するのだ。 新機能を追加したり仕様を変更した場合、それをテストするコードを同時に付け加える。 こういうことはずーと昔から話に聞いてはいたんだが、恥ずかしながら、 実際に自分でやってみて初めて、その効果の大きさ(というより、 それをしないことによる危険の大きさ)を思い知ったのだ。

従来もテストは行っていたが、それは組織化されていない、行きあたりばったりの 方法であった。製品として出すプログラムならQAセクションを通してみっちりテストするが、 インハウスで使うツール類だと、何かを変更した場合、 変更した部分だけをテストしてリリースするということは、わりと普通にやっていたと思う。 今から考えれば信じられない。 今や、テストコード無しでプログラムをリリースすることは考えられなくなってしまった。 だって、自分が書いたコードが、少なくとも想定した範囲で動作しているということを、 それ以外にどうやって自分に納得させられるのだ。

これは、プログラマとしての心の習慣の問題だと思う。テストをプログラム作成とは 別の段階として考えるのか、それとも、自動化テストの作成まで含めてプログラム作成と 考えるのか。自動化テストがあるからってそれを過信したらいけないが (テストデータの計算の方でプログラムのバグと同じ間違いをしている場合だってある)、 テストデータの伴わないプログラムは未完成である、というくらいの認識が行き渡るべきだ、 と今は思う。まあ、GUIの自動化テストは作りにくいとか、巨大なデータを扱うプログラムでは テストデータが巨大になってしまうとか問題はあるけど。

で、現場では仕様の伝達ミスによる問題というのが多発するのだが、仕様発注側が テストデータを提供するようにする、あるいは仕様打ち合せの段階でテストデータを作ってしまう というのは、そういうミスを防ぐ一つの方法だと思う。テストデータの伴わない仕様は 未完成である、という認識もまた、行き渡ったほうがいいかもしれない。 もちろんそのテストが全てではないが、自動化されたテストフレームワークがあれば、 テストセットにそのテストデータを加えてテストを流してみるだけで良い。 入試得点のような線形加算なら、一つの科目だけ100点であとは0点であるようなデータを各科目毎に作り、 出力を手計算と比較してみるだけも多くのミスは検出できるはずである。

6/8 (Fri) 魂のかけら

Jとは4年近く、同じスタジオで仕事をしていたことになる。 担当分野が違っていたのであまり仕事上の接点は無かった。 ただ、昨年のSIGGRAPHでのプロジェクトだけは別だった。

別のソフトで計算した結果を我々のソフトに組み込むのに、 自動で行なうツールの開発が間に合わず、Jが幾晩も徹夜して手作業で仕上げてくれたのだ。 私も開発で泊り込んでいて。声を交わすわけでもないのに、 夜、キーボードの音が洩れ聞こえてくるのが心強かった。 そして、Jの仕事は文句無しに素晴らしかった。 デモを観る人の称賛の言葉を、共に聞けるのが誇らしかった。 登頂困難な山を、パーティを組んで登ると、こんな感じがするんだろうか。

今年のはじめに、ミーティングで顔を合わせた時に、随分顔色が悪いのが気になっていた。 程無く、病気療養ということで長期休暇を取っていた。 でも、そのまま行ってしまうなんて。 オフィスのデスクも以前のままなのに。

他のJと過ごした日は普通に思い出せるのに、 あのプロジェクトのことを思い出すと、胸の中の何かが暴れ出しそうになる。 人の手でこの世に作り出されるものには、人の魂が入るんだ。 その魂のかけらが、一緒に作った者の心に、そっとしのびこんで、根を下ろす。 帰る処を失った、Jの魂のかけらが、暴れている。


[前月][次月][一覧]:[表紙][映画][King][BBS]

Shiro Kawai
shiro@lava.net