今、ある他のベンダーが作成したシステムのテスターとして我が社が参加しております。「まぁ、テストだけやればいいからな。」と軽い気持ちでいました。テストの行程はユーザ受け入れテスト。
つまり、システムが完全に完成してエンドユーザ(業務部門)に引き渡すテストです。
「不具合はもうないはずだから、業務の流れとして動くのを確認だな。」という気持ちです。
しかし蓋を開ければ大量のバグや性能問題が出ました。僕たちはテストをしたいのにプログラムのバグが治らないとテストができない。次のテストをしたいのにバッチ処理(夜間に動かす一括処理)が終わらない。など問題多発。
一体、どうなっているんだ?とみんな最初は思っていましたが2か月ほど経った今は「またどうで動かないんでしょ。」と諦めモード。
僕はタバコを吸うので一緒に仕事をしている人と喫煙室に行くと、「うちの会社だと、この状態だとテスト中止で、単体テスト(プログラム1本1本単位でのテスト)からやり直しだよな。」という愚痴が出ます。
僕はシステムを作る事業部なのですが、僕の会社にはQFと言う言葉(信条)があります。QFとはQuality First(品質第一)の頭文字をとった言葉です。
僕の会社はとんでもなくテストします。これでもかとテストをします。システム会社に勤めた事がない人や海外のシステム担当者には「?」かもしれませんが、作ったプログラムの規模に対して「xx件のバグを出しなさい。」と言うテストをするのです。
基本的に作ったプログラムなのだから正常に動く事を証明すればいいではないか!バグなんてないよ!なんで一定量のバグを出さないといけないんだ!?と思われるでしょう。
でも、色々なテストをしていくとやはりバグが出たりするのです。熟練のプログラマも「あ、忘れてた。」みたいなポイントでバグが出ます。
なお、本当にバグが出なかった場合(普通に設計して普通に作れば当たり前と思うかもしれませんが)は「なぜバグがない。品質が安定しているか?」を論理的に明記する必要があります。
例えば金額を操作する場合、何桁までなのか?桁あふれしたらどうなるのか?ありえないマイナスの金額が入ってきたらどうするのか?(こういうのを限界・境界テストと言います。)をします。数値系は大抵このテスト。
これらのテストを「なんでここまで…」と思いながらテストすることで品質が安定し、結果的に後続のテストが楽になり、より別の観点でテストをすることで品質保証することができるのです。
QCDと言う言葉があります。
品質(Quality)、価格(Cost)、納期(Delivery)の略語です。
システムを開発している(バグを出している)ベンダーの若いエンジニアと話していて愚痴をこぼしていました。「QCDでDばかり優先されている。」つまり、納期第一で納品しているので、テストが不十分な状態が起こり得るのです。
自分の会社の自慢ではないですが、僕の会社は納期を伸ばしてでも品質を優先します。お客様がそれに納得いかなくても、僕の会社の偉い人が説得してくれます。かなり偉い役職の人が参加することも多々です。
もちろん、納期遅延によるコストは持ち出しとなりますが、それでも品質を重視します。
早いうちに品質を安定させないと後工程で被害はどんどん大きくなるとわかっているからです。
早いうちに品質を安定させ、そして次のフェーズへ進む。結果的に本番時期が遅延するかもしれませんが、最後で不具合が爆発するより絶対に、早くサービスインすることができます。
海外のシステムエンジニアと仕事をしていると、彼らのテストはかなりおざなりです。とにかく正常系のテストをしたらデリバリーする。
不具合が起きればそのタイミングで修正する。そんな感じです。
会社の中の一部で使われている業務システムならそれでも良いかもしれませんが、Webなどで全世界で使われるようなシステムや、銀行系などのシステムはそういうわけにはいきません。
プログラムの話だけしましたが、電車や飛行機だって一緒ですよね。こう言うものは事故が起きてからでは遅いのです。
色々な事を想定して、安全に稼動させることを優先する。
僕の会社のものは基本的に高いのですが、品質に対する対価を考えてみてもらえれば結果的には安いと思います。
世界で日本のもの所謂「made in japan」が優れていると言われているのは「壊れない。正確だ。」という部分が評価されていると思います。
安かろう悪かろうが是とされる今、世界で戦うには価格競争だけではなく、品質ももう一度考えるべきだと思う昨今です。
かしこ。