「インターフェース」を定義することによって、自由に脱着可能な物を作成することができ、発電所の完成をまたずともとりあえず発電機を使ってテストをすることができるし、本番稼働後でも自由にテストをすることができます。また、機能拡張をする際にもやりやすいのです。
しかし、インターフェースを定義すること自体が経験や技術が必要で、しかも時間のかかることです。しかし、それがなぜ必要なのか理解していない方が非常に多いのです。これは現場の技術者の中でも「プログラムの作り方」に疑問を持った方で無いとなかなか気がつきません。もちろんこの手の書籍は現代ではいくらでも出版されているのですが、システム会社の経営層はそんなものを勉強しようとはしませんし、読んだところでチンプンカンプンなのです。
そのうえ、インターフェースを定義しただけではダメなのです。今度はテスト用のツールを作成しなければなりません。例えば、本番環境では発電所から電力が供給されるのですが、何かのはずみで電圧が降下してしまったり、いきなり切れてしまったりするかもしれません。そのような事態にも対処できるように、テスト用の「発電機」はそのような事態がシミュレーションのできる機能を備えていなければなりません(あまりうまい例では無いのですが、とりあえず)。あるいは、CDラジカセであれば、本番の放送局ができる前にテスト用の電波発信機が必要かもしれません。
容易に想像できるかと思いますが、このようなテスト用のツールを作成するためには、CDラジカセという製品を作成する以上の労力が必要になる場合もあります。実際に、あるプログラムの機能をすべてテストするとしたら、そのテスト用のプログラムはそれ以上の大きさになる場合がありえます。
テストができるようにインターフェースを定義し、そのインターフェースに合わせたテスト用のプログラムを書くことは、大変に労力がかかることなのです。納期に間に合わないと言って、連日徹夜状態のプログラマがこんなことができるわけがありません。
つまり、これらの「芸当」ができるのは、特別待遇の技術者に限ります。最上級の優秀なプログラマがごく普通の仕事を与えられた場合か、あるいはボンクラの集団であっても、なぜか時間と金はたっぷり与えられており、少なくともそのうちの一人はこのことを理解している場合です。
つまり、テストのできるプログラムとは、この二つの条件、インターフェースによる分離がされており、テスト用ツールが備わっていることを満たすものです。一度でもこの二つの経験があれば、それまでとはプログラムの作り方が違ってきます。これらの経験者は、テストツールを作る時間がとれなくとも、少なくとも後でテストツールを作成することもあるだろうと、インターフェースによる分離を試みます。
このような経験の無いプログラマは、すべてが渾然一体となったプログラムを作成してしまいます。ここが経験者とそうでない方の違いなのです。全く同じ機能を果たすプログラムを両者とも作成できたとしても、その中身は雲泥の差があり得るのです。
テストのできないプログラム2 « 商品スタッフII開発記 発言,
2011/03/05 @ 7:10 pm
[...] テストのできないプログラム3 LikeBe the first to like this . [...]