*

どんなプログラマが身につけておいても損はない重要なスキルとは?

のっけからストレートなタイトルですいません。

ちょっとあおり気味なタイトルですが、今日紹介する「スキル」が「身につけておいて損はない」ことはほぼ間違いないです。

それぐらいの気持ちで書きます。

そのスキルとはDockerなどのインフラスキルでもないですし、Node.jsといった流行のJavaScriptの技術でもありませんし、スマホに関係あることでもありません。これから出てくる流行のプログラミング言語でもありません。

というか、流行度からいえばほぼゼロでしょう。(汗)

ちょっと勿体つけてすいません。

私がどんなプログラマになるにせよ身につけておいて損はないと断言できるスキルは「テスト」です。

テストといっても「テスト駆動開発(TDD)」とかそういった流行のスキルではないです。

単純に「システムがちゃんと動くか」の検証作業です。

この時点でがっかりしてページを閉じる人がいるかもしれませんが(汗)、本当に大事なスキルなので今一度見つめなおしてほしいと思います。

テストについて

システム開発においてテストが大事である、ということに異論を唱える人はいないでしょう。

テストという作業はシステム開発にはほぼ必須になります。(絶対に、と書きたいところですが例外が0.01%あるかもしれないので、”ほぼ”で止めときます。)

私がいた現場でも程度の差こそあれ、テストが必要ないところはありませんでした。昔はテストを軽視していたせいで心身ともに疲労しました。

今流行の技術が20年後も標準で使われているかというのは疑わしいでしょうが、テストのスキルというのはこの世にシステム開発がある限り必要になってきます。

このようにテストという作業は非常に大事な作業ですがその必要性は皆さん理解していても、現場では扱いが軽いことが多いと思います。

例えば、「テスター」という職業がありますが、これは新人などどちらかというと経験がない人間がやることが多いようです。

プログラミングができなくてもなんとかなることがあるからでしょうか・・・

また納期がタイトな場合、削られる工数といえばテストのようですね。

プログラミングと違って工夫がなければとてつもなくつまらないですし、苦痛です。

テストに関するメリット、デメリットをまとめると下記のような感じでしょうか。

メリット

  • IT業界であれば業務系だろうがWEB系だろうがほぼどこでも必要になる
  • プログラミングができなくてもできる部分もある
  • 数十年後もすたれない(細かいツールの流行廃りはあり)

デメリット

  • つまらない
  • 単純作業の繰り返しのこともあり、精神的に披露する
  • 厳密にやろうとすると工数が無限大になる
  • できているものの、不具合を見つけるという意味でも精神的に披露する

でしょうか。

大切なのはわかっちゃいるけど、つまらないからいい加減になりやすい・・・そんなことが一般的には多いのではないかと思います。

そこで今回は少しでもテストを効率的にするための工夫やツールを紹介したいと思います。

テストの種類

テストといっても種類は様々ですが、ここでは簡単にユニットテストと画面からのテストを取り扱いたいと思います。

ユニットテスト

これは関数など比較的小さい単位が正常に動いているかのテストです。

画面から確認することは難しいので、後述するテストツールを使う場合が一般的です。

テストツールを使わなくても、ある関数の戻り値が期待通りの引数になっているかを確認することはできます。

画面では簡単な処理に見えても、内部では何重もの複数の処理がおこなわれていることが珍しくありません。

そういった場合、一つ一つの関数が正常に動いているかはこのユニットテストで検証します。

後述する画面のテストに比べると範囲が小さいこともあり、比較的行いやすいテストといえます。

画面からのテスト

これは画面単位での処理を確認する作業です。

例えばお問い合わせフォームの入力画面である値を入力したときに、期待通りの動きをするかなどです。

プログラミングをしなくても行えることから「誰でも」行うことは可能ですが、もれなくテストすることは簡単ではありませんし、テストパターンもかなり多くなります。

また後述するようなSeleniumなどのテストツールを使うとこれらの処理を自動化することができます。

テストはこのほかにもいろいろありますが、超基本的なものに限るとこのユニットテストと画面テストに分かれます。

普通にアプリを開発するのであれば画面からのテストは誰でも経験すると思いますが、ユニットテストという考え方をしっておくと開発が楽になります。

テストツール

上記のテストはツールを使わなくても行うことができますが、ツールを使うことでより作業時間を軽減でき、精神的疲労度を抑えられます。

xUnit

主にユニットテストを行うツールです。Xには各言語の文字が入ることが一般的で、JavaだとJunit、PHPだとPHPUnitなどがあります。

先ほども言ったように単体テスト自体はツールを使わなくても可能ですが、値の検証やチェックなどにこれらのツールを使うと負担が軽くなります。

またEclipseなどを使うとテスト用のコードを自動生成してくれることから使える場面は積極的に使いましょう。

Selenium

画面からの操作を自動化させるツールです。プログラムをかいて動かすものもありますし、プログラムを一切使わず、自分の動きをブラウザに記録させられるようなものもあります。

Seleniumに関してもちろん限界もありますが、入力項目が何十項目もあったりするような画面の場合、大変な負担になりますので、こういったツールで自動化できればテストの負担を軽減できます。

エクセル

テストのパターンを考えたり、保存したりする場合に便利です。

特に組み合わせを考える場合、エクセルがあると便利になります。

一般の開発現場ではこれにテストのパターンを保存し、画面のキャプチャ画面を張り付けて保存しておくケースが多いでしょう。

昔からある方法ですが、単純なだけに使える機会は多いです。

テストのコツ

ここでは少しでもテストの負担をさげ、効率的にするためのコツを書いておきます。

テストしやすいコードにしておく

ユニットテストの場合になりますが、テストがやりやすいかどうかはツールの使い方だけではなく、プログラムの書き方にもよります。

テストのしやすいコードとは?というテーマだけで多分本が何冊もかけると思いますが、最小限のポイントを書くと

  • コードはできるだけ短くする
  • 他のプログラムとのかかわりを小さくする(特にデータベース)
  • メソッドでは引数と戻り値を明確にする
  • 変数の影響範囲を小さくする

になると思います。

まだ実務未経験者の方はむずかしいと思いますが、最初のうちはメソッドをできるだけ短くすることを心がけるとよいでしょう。

ツールごとの特性を考える

xUnitやSeleniumともにいい、悪いがあります。最新のツールが全ていいわけではありません。

このサイトのモットーでもありますが、すべての技術にはメリットとデメリットがあります。

特定のツールに万能性をもとめたり、逆に一面的な面をみて否定するのは損な考え方です。

あくまでツールはあくまで「手段」なのでそれぞれのメリット、デメリットを考慮して使い分けを行いましょう。

テストのパターンは必ず書き出す

テストのパターンを頭の中だけで考えていては漏れが起こったり、逆にやる前から過剰に考えてしまい怖気づいてしまうでしょう。

実際に書き出してみると意外といろいろなパターンがあることにきづいたり、逆にやる前はとんでもない量があると思っていたけど実際に書き出してみたらそんな量でもなかったということは十分あり得ます。

組み合わせが複雑な場合でもエクセルを使えば、労力を大きく削減できます。

システムの動作を確認するときも書き出してあれば当然チェックが楽になります。

未来の自分を楽にするためにもテストのパターン(テストケース)は書き出しておきましょう。

反復性の強い作業はできる限り自動化を考える

テストの最大のデメリットは単純な入力作業を繰り返し行うことによる時間と精神的消耗度だと思います。

単純な入力作業であればできるだけ人間がやるのではなく、自動化するようにしましょう。

入力欄が何十項目もあるような場合、1度1度のテストが大変な負担になります。

その場合、Seleniumを使えばボタン一発で数十か所に値をいれることも可能です。

そうすることでもっと生産的なことに時間を使えるようになります。

ただし後述するようによほど単純なケースでなければすべてを自動化するのは不可能だと思います。

全部を自動化しようとしない

自動化のメリットをいろいろとあげましたが、すべてを自動化しようとするのは逆に無謀ですし、費用対効果が合いません。

時間と精神的疲労度を少なくするのが自動化の目的です。自動化するために逆に時間がかかったり、労力をかけては本末転倒です。

自動化が難しくどうしても手に頼らざるをえない場所は必ずあります。

そういっときは割り切って手でやりましょう。

できれば複数人体制で行う

どんな天才であっても人間である以上、必ず思い込みや見落としがあります。

理想論をいうとテスト自体は開発者がやるべきではないと思います。

開発者は自分が作っているため、どうしても正常な動きを期待していますので、心がけていたとしてもテストが甘くなります。

そのため完全にテストを正確に行いたい場合は、開発者以外の人間がテストをしたほうがよいでしょう。

まとめ

以上、テストに関して思うところを書きました。

一口にプログラマといっても人によりやることはさまざまですが、テストはおそらくすべての人にとって重要であることから身につけておいて損はないと書きました。

基本的なことばかりなのですが、これからプログラマになろうと思う人はぜひテストの重要性についてしっておき、早い段階から自分なりのテスト手法を確立させておくとよいと思います。

 

関連記事

初心者でもできる!作れる!WEBサービスの開発 その4 総まとめ編

前3回の記事でWEBサービスを作ったお話をさせていただきました。 (前回までのお話し)

記事を読む

ゼロからWEBプログラミング(PHP)をマスターするのに何時間かかる?

おはようございます。松本です。 さて、本日のテーマはタイトルのとおりです。以前受講生の方に「ゼ

記事を読む

ガチンコ塾、人気記事ベスト5

このブログも開設して約半年たちましたね。 思った以上にたくさんの方に読んでもらえてうれしいです

記事を読む

優れたエンジニアの定義

PHPはとうとう7がリリースされましたね。 自社でHeroku上でアプリを1つ運用しているんで

記事を読む

なぜPHPなのか

はじめまして、プログラミングの講師を担当させていただきます、松本と申します。 このたび、株式会

記事を読む

15時間でプログラミング言語の基本をマスターする方法

今回は主に経験者向けの記事となります。 タイトルの通りなのですが、私が新しい言語をマスターする

記事を読む

プログラミングや就職以前に大切な情報リテラシーについて

プログラミングの学習や就職活動をしていると本当に様々な情報が出てきます。 例えば以下のようなこ

記事を読む

データを扱ってみよう その1(変数)

こんにちわ、松本です。 前回の記事は読んでいただけたでしょうか。私よりPHPに関して知識のある

記事を読む

プログラミングスクールを選ぶときの口コミの考え方

先週は更新できませんでした・・。 更新を楽しみにしていた方がいたら申し訳ありません(汗)

記事を読む

お金をあまりかけずにプログラミングを学習する方法

私がプログラミングを覚えたのは5、6年前ですが、学習環境は非常に向上しており、情報は格段に得やすくな

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

無料PHPスクール
自社開発>客先常駐である本当の理由

このブログでも何回か取り上げていますが、ITエンジニアの働き方としては

エンジニアにとって必要なコミュニケーション能力とは

気がついたらもう3月下旬になっていますね・・ 年末年始忙しかった

エンジニアを採用する上で大事なこと

本日はエンジニアの採用について書きたいと思います。最近少し採用に絡んだ

エンジニアが給料を上げる方法を真面目に考えて見ました。

本日はエンジニアと給料の話題について触れて行こうと思います。 エ

エンジニアの「スキル」とはなんぞや

給与が低いことに悩んでるエンジニアへのアドバイスをツイートで見たところ

→もっと見る

  • follow us in feedly
PAGE TOP ↑