テストのできないプログラム2

前回のまとめとしてはこうです。

世のプログラムの多くは、テストのされていない、あるいはするためのツールの無いプログラムである。これには技術・経験・工数がかかる。ユーザに提出される「お見積り」なるものには、それらを行うかどうかなど一切現れない。これが現時点でのソフトウェア産業の常識である。それは請け負った者の技術と良心にまかせられている。しかし、ソフトウェアは100%機能拡張されるものである。そのときになって初めて、テストの有無問題が首をもたげる。

具体的に「テストのできないプログラム」とはどのようなものなのか。イメージとしてとらえてもらうために、以下のような例えを考えてみました。これでもまだわかりにくいかもしれませんが、これ以上簡単にするのも難しいですね。

前回の例ではCDラジカセを例にとりました。これを極めて小さなプログラムとします。この小さなプログラムが集まって大規模なプログラムを構成するとします。具体的には一つの都市としましょうか。CDラジカセそのものも内部に配線があるのですが、それを動かすためには何らかの電力に接続しないといけません。その都市にある発電所に接続するとしましょう。

ここで私達の通常の常識とは異なる、とんでもないことがソフトウェアの世界では起こるのです。プログラマはCDラジカセと発電所を「直結」してしまいます。直接むすんで不可分のものにしてしまいます。それどころか、他のテレビや冷蔵庫なども同様に、発電所に「直結」します。この結果、発電所が稼働しないとCDラジカセ、テレビ、冷蔵庫を動かしてみることもできなくなるのです。全体ができてはじめて動作することができるのであって、個別の電化製品をテストすることはできません。

つまり、プログラマは「インターフェース」を定義しようとしません。この場合の「インターフェース」とは100Vの交流電源50Hzもしくは60Hzで、脱着可能なオスメスのソケットということです。

このケースでは「何でそんなこともできないのか」と思うかもしれませんが、複雑なプログラムの場合、「インターフェース」を定義するのも難しいのです。身近にある難しいインターフェースの例としては例えば、外付けハードディスクとパソコンをUSBで接続した場合の「インターフェース」はどのようなものかわかりますか?あるいは、地デジアンテナとそのチューナーの「インターフェース」はどうなっているのか説明できるでしょうか?赤外線リモコンとテレビは?

これらをきちんと定義したり説明するのは難しいのです。そして、接続するためのインターフェースをきちんと定義することができれば、それとは逆に分離することが簡単になります。先の例で言えば、CDラジカセが発電所より先にできてしまった場合に、それを接続するインターフェースが定義されていれば、発電所の代わりに発電機でCDラジカセを動かしてみることができます。これがテストというものです。

「テストのできないプログラム」は、それができません。すべてを接続した後でないと、すべてがうまく動くことを確認できないのです。そして、あらゆるものがそのときの相互接続を前提としているため、一箇所でも配線を変更すると、その影響が多方面にわたってしまうのです。

さらにひどいことにプログラマの作る物は、CDラジカセ、テレビ、ステレオ、などという風に分離してはいません。音が出る機能と映像が出る機能という風に作ってしまうのです。この結果、理想的には、きちんと分離された製品であるのが正しいのに、それらの裏蓋を開けて床にごちゃごちゃと置かれたような代物を作成してしまうのです。そして、それが一体どのようにして発電所に接続しているのかわからないような有様になってしまいます。

たいていのプログラムは、外見は綺麗でも中身はこんなものです。それらは一切ユーザの目には触れないので、「そこに労力をかける価値は全く無い」というのが、かなり多くのシステム会社の考え方です。しかし、意識して考えている「考え方」というよりも、実際には「そんなことは考えたことも無い」というのが本当のところです。

もちろんマトモな会社もあるでしょうけど、私は見たことはありません。なぜなら、システム会社の経営層というのは、ほぼ全員がソフトウェアのことなど何一つ知らないからです。例えば、地方のソフト会社などは、大手ソフト会社に人員を派遣することで成立していますから、コネや営業の方が重要になります。技術など二の次なのです。もちろんこのような事情というのは、この業界に限らないでしょうけれども。

結局この件もかなり「社会的」な問題、つまり現代の社会で何が常識とされているのかによるかと思います。素人であるユーザの側としては、プログラムの中身のことなど知ったことではない無いというのは、その通りなのです。がしかし、「機能拡張が困難な」「バグがいつまでも直せない」という点はもっとクローズアップされてもよかろうと思います。

IT関連の雑誌やウェブの記事はとかく、「クラウドがどうした」だの「ipadでらくらくなんとか」だのと特集をし、メーカーのチョウチン記事ばかり書いていますが、その一方でこういった本質的な問題というのはほとんど放置されたままです。これも他の多くの産業と同様のものであすね。結局は「賢い消費者になりましょう」の一言で済ませられ、「自己責任」としてユーザに押し付けられているのです。

テストのできないプログラム3

コメントする

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s に接続中

フォロー

Get every new post delivered to your Inbox.