プログラマー・SEで技術力の差が出るのは意外な工程

こんなタグもあったなぁと。いろいろ書いてましたね。他人事みたい。


この業界に入って長いわけですが未だ毎日が新しい発見です。もっとうまくできるはずだと思っているし実際やり方を少し変えただけで仕事が早く正確にわかりやすくできるようになるってことはよくあることです。
この職業は若くなくては無理と言われていましたが、今ではそういうことをいう人はかなり減っていると思います。それは俺を含めて年を取っても現役でやってる人がそこそこ増えてきたからでしょう。
頭の回転やら体力やらは年齢とともに衰えてくるのはしっかり自覚できます。しかし、それを補う経験というのは逆に積み重なって行きます。最近職場で聞いたおもしろいたとえで、年を取るとフォルダとその中に格納されているファイルは増えるんです。どのフォルダに何のファイルが格納されているかがぱっと思い出せなくなるだけです(笑)。ファイルと違って記憶の場合は、内容さえ思い出せればどのフォルダに格納されているかは思い出せなくてもいいので楽ではあります。


そして、その経験が生かされる工程があります。
意外や意外、テスト工程です。


職業としてシステム開発をしている人にとっては当たり前ですが、テスト工程は非常に重要です。コーディング工程なんて飾りといってもいいくらいです。コーディングは1時間テストは3日みたいなスケジュールは普通です。コード書くのが大好きな俺みたいな人にとっては地獄のようですがそれが現実です。
その時間がかかるテスト工程、そこで経験というのがものすごく役に立っていると実感しています。たとえば、前の例でいうと、コーディング1時間、テスト3日が、コーディング1時間、テスト1日になることがあるんです。
たとえば、テストケースが100あるとします。てそれをこなすためには100回テストをしなければいけないとことはなくて、1ショットでいくつかのケースを同時にテストすることは可能です。経験を積んでいるとその組み合わせをぱっと思いつくようになります。どういうデータを用意すれば効率よく、かつ漏れなく、さらにわかりやすく検証ポイントを確認できるかっていうのがなんとなくわかるようになります。
ショット数を減らすともう一つよいことがあります。繰り返しテストをするときに所要時間が短縮できるってことです。テストは回数を増やせば増やすほど精度が高まります。検証を予定していたテストデータではないところで問題が発生することもあって、いわゆる想定していなかった問題ってやつです、そういうのがつぶせます。


話がずれてしまいますが、ショット数を増やすということを考えるともう一つ重要なポイントがあります。それは非機能要件の一つ、パフォーマンスです。
非機能要件というのはアプリケーションの機能ではないけれど仕様として満足させなければいけない仕様のことです。たとえば給与計算システムで一人分の給料を計算するのに3分かかるとしましょう。従業員10人の会社なら30分で処理が終わるので十分実用に耐えますが、従業員1000人の会社だと3000分、1万人の会社だと3万分かかる計算になり、機能としては十分であっても実用することができません。それがたとえば1分間に1000人分の計算ができるようにすれば従業員1万人の会社でも10分で処理が終わって実際に使うことができます。
本番運用ではとても重要ですが、テストでもとても大事なんです。今までやってきた仕事で、問題が多く発生したアプリケーションというのはパフォーマンスが悪いことが多いです。パフォーマンスが悪いと予定したテストをこなすだけでスケジュールを食いつぶしてしまい、想定したテストケースの確認だけで手一杯で想定外の問題発見に至ることができません。残念ながらいくら大勢でチェックをしたとしても想定外というのが無くなることはありえないです。想定内のケースをつぶすのは当たり前、想定外のケースがどのくらいつぶれているかでそのアプリケーションの品質は決まると考えています。


ほかにもいろいろいいたいことはありますが、今日の記事タイトルの話でいえば、経験を積むとテスト工程を効率的かつ網羅的にこなせるようになります。それはコーディング以上に工数や品質に大きく影響します。その経験というのはどこから生まれるのか?それは俺の場合は残念ながら「痛い目に遭った経験」です。なんどもなんども失敗しています。その経験を次に生かす、それでも失敗する、その失敗も次に生かす、それが「経験」となって積み重なっています。