テスト
ポエム

どうして僕はテストが書けなかったか。

ちょっと前に会社を辞めてフリーランス化したおじさんです。
テストについて、思うことをつらつらと書き連ねます。

はじめに

ここに書くことは、あくまで僕の見たこと、感じたことです。嘘は書かないようにしているつもりだけれど、人によっては不快に感じるかもしれないです。まあいろんな考えがあるんだなってことで、許してもらえると嬉しいです^^

テストを書いたことがありません。

正確に言えば「まともなテストコードは」ということですが。

自動テストの重要性ははっきりと認識していますし、その効果性についても、どちらかといえば肯定的なイメージを持っています。にもかかわらず、今日に至るまでテストを、自分のコーディングスタイルのメインストリームに置くことに躊躇してきました。

以下にその理由を書きます。

テストに積極的な技術者がいない

僕の周りにはテストコードを書いたことのあるプログラマが誰ひとりとしていませんでした。また自動テストを学びたいという気概のある者も皆無でした。
彼等の主張は「書くコードの量が増えるのだから、コストは増えて当然だろ?」というものです。

テストコードを書くことで得られるメリットは、開発中よりも、むしろリリースされてから数年後に顕著になるように思います。僕が働いていた環境では、基本的にコードは「書き捨て」のものであり、納品後に、自分の書いたコードに対して責任を持つような文化は殆どありませんでした。

後のことは知らん。勝手にしてくれ

というわけです。

そんなわけで、もしもテストコードを書こうと思ったら、他のプログラマが書いたコードまで、僕がテストを書かなければいけない羽目になってしまいます。書き方を教えようにも、いかんせん、教えられる側にモチベーションがありません。皆、一刻も早く与えられた責任を消化して身軽になりたいのです。さっさと帰りたいのです。ワークライフバランスです。

僕の属していた環境が、特別ひどい場所だったとは思いません。Qiitaにガンガン記事を投稿するような、意識の高い人たちはともかく、凡庸なプログラマは、多かれ少なかれ、このような思いを抱いているのではないでしょうか。そして絶対数では、意識が低い人の方が圧倒的に多いです。彼らは生活のために仕方なくコードを描いているのです。

ニヒルなおじさんとしては、そのような人種と一緒に仕事をすることを避けて通るのは、ものすごーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーく難しいように思うのですが、いかがでしょうか?

契約とビジネス

請負でソフトウェアを開発する場合、仮にバグがあったとしても、その発覚が瑕疵担保期間が過ぎた後であれば、修正費用を請求することができます。したがって、ビジネスとしてソフトウェア開発を捉えた場合、品質は必ずしも高い必要がありません。一発目で完全なものを完成させると、それ以上お金にならない。むしろ品質の低いソフトウェアのほうが儲かるという、皮肉なケースを何度も目撃してきました。

このような背景もあり、経営サイドは、テストを開発に導入することに、慎重な姿勢をとることが多いです。彼らの目的は、品質の高いソフトウェアを作ることにはなく、「いかに数多く契約を成立させるか」という、その一点にあります。ぶっちゃけ、自分のところが作ったソフトウェアがまともに動くかどうかなんて、どうだっていいのです。お金さえもらえればそれでいい。

後のことは知らん。勝手にしてくれ

というわけです。
残念ながら、このような姿勢の経営者が淘汰されていくほど、日本のIT業界は成熟していません。

レガシーコードへのテスト追加

近頃では、テストへの重要性が理解されてきたこともあり、お客様のほうからテストコードを書いてほしいと依頼されるケースも増えてきました。ただし、それらの依頼は「テストのないプロジェクトに、テストを追加してくれ」というものばかりです。大抵は、もれなく以下のような制限がついてきます。

  • 既存コードのへの変更は原則として許されない。どうしても変更が必要な場合でも、そのための費用は出せない(つまり変更する場合は、プログラマ個人が一切の責任を負う)
  • カバレッジは100%とする

大抵こんな感じ。
そもそもお客さんは、ソフトの品質があまりにも悪すぎて、悲鳴を上げているのです。なんとかしてデグレから逃げたいのです。そんな藁にもすがるような思いでテストコードに期待するのです。残念ながら、テストコードは、そのような切実なニーズに応えるものではないようです。

「テストを書ける、意識が高くて腕の良い開発者がいて、これから新規開発をはじめる」という、夢のような好条件が整わなければ、真価を発揮できない。どうやらそういうもののようです。

実に残念です。

テストコードなんて、エンジニアじゃなくても書けるっしょ?

今はまだテストに対する知識が浅く、プロジェクト本体のコードを書くより、テストコードを書く方が容易いと考えられている傾向があります。そんなわけで実務経験もないのに、テストコードを書けと命じられた哀れなテスターが、大量の地雷が埋め込まれたレガシーコードに、無理やりテストを埋め込み、どうにかこうにかカバレッジを100%に持っていくという、悪夢のような事態が起きることがあります。

こんなんで品質が上がるわけがありません。

じゃあ、どうすりゃいんだ?

わかりませんw
自動テストのより良い未来を見据えようと思って書き始めましたが、絶望的な記事に仕上がりました。今はまだ、過渡期なのかもしれません。ある程度は時間が解決してくれることでしょう。

ただ少なくとも、自動テストを現実的なものとして普及させていくには、技術よりもむしろ、プログラマの意識改革が必要であり、加えて法制度やビジネス、契約のレベルでの議論が不可欠だと感じています。

色々と考えてみたいです。
とりあえず、問題提起してみた次第です。

さいごに

なんだかんだで、AIがなんとかしてくれちゃったりしてね。