その昔、洋楽に目覚めた少年達が自分たちでバンドやろうとなけなしのお金で楽器を買おうとすると、大概誰が何の楽器をするかで揉めた。
目立つパートであるギターをみんながやりたがるからだ。
そこで、年齢、力関係、腕っ節などでパートの割り振りを試み、それでもダメならジャンケンやくじ引きで解決を図る場合もあった。
ともかくそうしてギター希望だったはずの少年が不本意ながらやらされるのがベースでありドラムだった。
ドラムはまったく種類の異なる打楽器だからともかく、弦がギターより1,2本少ないベースは「弦が少ないからギターより簡単」という先入観のもと、劣等感との闘いになる。
だが、実際にはそうではない。
すぐれたベースプレイヤーはバンドの音を支え、音楽として成立するための鍵を握るほどの立場を主張する。
そんな優秀なベースプレイヤーの名を挙げていたらキリがないほどだ。
ソフトウェア開発のチームにあって、テストという工程とその担当者であるテスターとはバンドにおけるベースプレイヤーの立場に似ている。
テスト工程は製造工程よりも「スキルが要らないからプログラミングより簡単」 という先入観のもと、劣等感を強いられる。
言うまでもないが、これは間違いである。
本来、品質に対する信頼を支え、プロダクトとしてのソフトウェアを世に出すための鍵を握るのはテスターである。
- テストはプログラミングより簡単
この先入観が夜に蔓延るのは、テスト工程そのものへの認識が欠落していることの証拠だ。
出来上がった、動くはずのプログラムを動かすことなら誰でもできる。これは確かにそうだ。
しかしテストをする意義は「動くはず」という根拠を得ることである。
動くはずのプログラムが期待に反して動かないとき、テスターはおそるおそるプログラマーにそのことを告げる。
鬱陶しげに振り向くプログラマー氏の返事はいとも残酷である。
「俺のPCでは動いてる。やり方が間違ってるんだよ。」
結局原因は同プログラマー氏が環境を作成するために即席で作った設定スクリプトに問題があったということがわかるとする。
プログラマー氏の自尊心はまたもテスター氏にひどい言葉を投げつける。
「スクリプトはともかく、プログラム本体は悪くない。だからこれはバグじゃない。」
テスターは出来上がったものを受け取って動かすだけだから、確かにプログラムの中身は知らない。少なくとも最初は。
コードの中身を詮索されたくないという開発者の意地の部分も理解は可能だが、引き渡したものが期待した通りに動かなければどこの問題であろうとそ れはバ グなのだ。
しかし、そういう認識を持っているプロジェクトは思ったよりは世間にそう多くないようだ。
コードの中身を知らなくても工程の推進には役立つので、入ったばかりの新人などをテストにアサインするケースが多い。
そうしてテスターから這い上がってプログラマーとなった彼はやはり新人のテスターを見下すような対応をする。
限られた時間で観点をぶらさず効果的なテストを行うためには、実施計画、内容、評価の基準など多くのことを取り決める必要があり、それは新人のエ ンジ ニアに簡単にできることではない。
仕様に関してもプログラムに関しても精通とはいかなくても、その意味するところが理解できていないといけないし、しかも誰でもが実行できるような 手順と して記述するところまでやろうとすると、相当なスキルが必要とされるはずである。
このような意識をもってテストを計画すると、テストはプログラミングより簡単だなどという意見はなくなるはずだ。
- 品質の鍵を握る
かつてはプログラムが動けばそれで良しという意識はあった。
しかし、現代のようにプログラムを動かすことで多くの重要な情報が世界中を駆け巡っているような状態になったら、そのプログラムがセキュリティ ホールに なって後ろに控えるシステム全体を機能不全にしないか、あるいはデータを外部 にとられたりしないか、パフォーマンスが極度に劣化しないか、など外側をも 含めた検証が第三者的な観点で行われることが信頼を得るための必須手順となってくる。
こうした観点でのテストは作成者であるプログラマー氏の開発用のPC上では限界があるので、開発時にそもそも行うことはできない。
プログラマー氏のPCで”動いたらしい”プログラムを世の中のあちこちで”動く”プログラムにするための価値の転換を行うのがテスト工程であり、 ここでテス ター氏があらかじめ決められた水準のOKを出さなければそのプログラムは世にも 出ず、開発費用は回収できず、プロジェクトは忽ち金欠となり活動を維持でき ない。
この時の評価を一般に「品質」というわけだ。
とはいえ、過剰にテストばかりを計画し実施することが良いのではない。
それでは世の中の開発プロジェクトは軒並み赤字だ。
できるだけ効率よく実施し製品を早く世の中に送り出せるように改善することが必要で、そのためのスキルアップは常に図らなければならないだろう。
テストの技術ノウハウは残念ながら自然とは身につかない。
実践と学習あるのみのようだ。
テスト工程、そしてその実施者であるテスターはもっとプロジェクトで重要視されるべきだ。
でも、テストとベースを並べてどっちがしたいかといわれたら迷わず付き合いの長いベースを選ぶだろうな。