地方エンジニアが感じる地方・中小企業での悩み

ユニットテストすら進まない

»

 開発を行う上で非常にテストが重要なのは、特に異論がないところだと思います。ただその手法に関しては皆さんそれぞれ思うところがあるのではないでしょうか。Web の世界ではよく目にするテスト関係の手法を取り入れたいと思いながらも、現実はなかなか賛同が得られなく、今までの方法に則ったままという会社も多いかと思います。

 かくいう私の今いる環境でも、今後に向けて取り入れていきたいと多くの人が感じてはいますが、なかなかかかる手間を考えると二の足を踏んでいるような状況であったりします。そのためユニットテストですらもなかなかままならず、テストと言えば基本目視で行うもの、という方法論が根強く居ついています。

 個人としてはユニットテストも実施したことがあり、それだけでも非常にメリットが大きい事は体感していますので是非とも実施したいのですが、まずこの「ユニットテストを書く」という最初の一歩が非常に高い障壁となっているのではないか、と思います。

 メリットとデメリットを比較すれば、実施した方が良いのは一目瞭然です。精神的にも安心できますし、非常にミスの少ないテストを行うことができます。しかも機械的に何度でも自動で行うことができますので、同じことを人間が行うよりもはるかに低コストで高信頼度です。それが分かっていても、なかなか導入が進まないのは何故でしょうか。

 最もシンプルな理由としては「面倒だから」というのがあげられるのではないか、と思います。今まででも結構な仕事量だというのに、さらに負荷を増やすなんてとんでもない、ユニットテストしていなくても品質は確保できていたじゃないか、やってもやらなくても結果それほど大差ないんじゃないの、というように様々な理由を思われたとしても、その根底には「面倒」という二文字が潜んでいるように思えます。

 こうなるともうどのような言葉を並べようと、そうそう簡単には状況を覆すことはできません。理屈がどうであろうと、真実がどうであろうと、また実際にそれが有用かどうかも決定打にはなりえません。

 自分が薦められる反対の立場になって考えると理解できるのですが、自分が乗り気でないものをいくら薦められても、それに対してほとんど興味は起きてきません。興味を持たない以上、決してチャレンジしてみようと状況が好転することはあり得ないのです。 しかし私たちは進歩著しいIT業界に身をおく人間です。メリットが大きい手法はできるだけ取り入れ、よりよい品質を、よりよい成果を求めていく必要があります。それではどのようにすれば、このように面倒と思う人たちへアピールができるのでしょうか。これは非常に難しい問題ですが、自分たちがより良い仕事を行えるようにするためにもやっていかなければなりません。では実際に何を行っていけばよいのでしょう。

 いろいろ考えてみると、「長くアピールし続ける」ことや「圧倒的なメリットを見せる」事が思いつけました。他にも「著名な人の話を聞く」ということも考えたのですが、人の話を聞いただけでは「すごいねー」「ふーん」で終わってしまい、あまり次に続くことが無いように思えます。これは他のテーマで書いたコラムでも同じような考えに至ることが多い事からも、それほど外れてはいないでしょう。素直に物事を受け取れない時は、何かしらの反論が口から出てくるものです。「すごいけどウチではできない」とか、レアケースを用いて反論してくるような場面は、多く目にされることがあるかと思います。興味を持たれていない人に、このような方法はあまり有用ではない、とさえ感じます。

 「長くアピールし続ける」ことは非常に重要です。地道な啓蒙活動は何事においても重要で、これなくしては世の中の多くの物事のように人目に触れることなく消えていきます。少しの間アピールするだけであれば多くの人ができますが、難しいのはやはり「長く続ける」事です。他愛のないことでさえ長く続けるのは難しいですし、ましてやそれが他人を巻き込もうとしている事であれば非常に高いモチベーションを維持し続ける必要があります。
 それを考えるともう一つの「圧倒的なメリットを見せる」ことの方が易しいのかも知れませんが、こちらも当然「圧倒的」と言えるほどのメリットを生み出すことが、物凄く大変な事です。多少では問題外で、結構なレベルであっても先のユニットテストの様に簡単には受け入れられません。今までは10かかっていた作業が1でできる、というように今までと比較せずともわかるくらいのものが必要なのではないでしょうか。そのような状況を作り出せた時、はじめて普及することができるではないか、と考えます。便利なのだけどもあまり普及していない、と感じる多くのものがそこまでのメリットを打ち出せていないのだと思います。もちろん言うは易しなのは重々承知してまして、自分がそのようなメリットを打ち出せるかと言われると、まだまだできていません。

 だからと言って、そこで諦めるのはもってのほかです。一つの方法がダメだからと言って全てを諦める必要はありません。異なる別の方法を考えたり、複数のものを組み合わせてみたり、全然違うベクトルから攻めてみたりとやれることは他にもあると思います。仕事につながる話題であっても、全然仕事に絡まない話題から入ることで記憶に残ることも多々あります。そのように聞いた話というのは、ある日不意に思い出すこともあり、話を聞いた当時よりも興味を持てたというのも経験された方が多いのではないでしょうか。そうなれば新しい方法を導入することも夢ではなくなります。

 何かしらのアピールを根気よく続け、かつ手を変え品を変えていかなければいけないのは大変難易度の高い事です。ですがそうすることでしか、周りを巻き込む最初の一歩は生み出せないのかもしれません。

Comment(2)

コメント

Jitta

ここの所、非常に焦りを感じさせる文章ですね。ちょっと心配です。


> 最もシンプルな理由としては「面倒だから」というのがあげられるのではないか、と思います。

 開発や管理の方法論を扱う方が異動してこられまして、席が近いのでしょっちゅう話を聞いています。
その中で出てきたのが、「グローバル変数の定義が多いから、ユニットテストさえできない」という言葉でした。
ユニットテストは、「外部からの影響を受けないからこそ、意味のある実施ができるのだ」というのです。
同じように考えると、他所に影響を与えるための変更を行うユニット(ユニットからの入出力以外に影響を与える)は、意味のあるテストが実施できないかもしれません。

 単にテストを書くのが面倒だからということだけでなく、意味のあるユニットテストを実施できる設計がなされていないのかもしれません。

Ahf

Jitta さんコメントありがとうございます。

うーん、焦り、が出てますか・・・。まだそれほど自覚はしてないのですが、
文章に現れているということは気をつけなければいけないですね。
ありがとうございます。

>単にテストを書くのが面倒だからということだけでなく、
>意味のあるユニットテストを実施できる設計がなされていないのかもしれません。

意味のあるユニットテスト、その通りですね。
設計の段階で考えられていない場合は、例えその後テストを行ったとしても
それが意味の薄れているようでは効果も発揮できないでしょう。

自分の関わる部分で、他人からこのように言われないためにも
努力していきたいと思います。

コメントを投稿する