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

のっけからストレートなタイトルですいません。
ちょっとあおり気味なタイトルですが、今日紹介する「スキル」が「身につけておいて損はない」ことはほぼ間違いないです。
それぐらいの気持ちで書きます。
そのスキルとはDockerなどのインフラスキルでもないですし、Node.jsといった流行のJavaScriptの技術でもありませんし、スマホに関係あることでもありません。これから出てくる流行のプログラミング言語でもありません。
というか、流行度からいえばほぼゼロでしょう。(汗)
ちょっと勿体つけてすいません。
私がどんなプログラマになるにせよ身につけておいて損はないと断言できるスキルは「テスト」です。
テストといっても「テスト駆動開発(TDD)」とかそういった流行のスキルではないです。
単純に「システムがちゃんと動くか」の検証作業です。
この時点でがっかりしてページを閉じる人がいるかもしれませんが(汗)、本当に大事なスキルなので今一度見つめなおしてほしいと思います。
Contents
テストについて
システム開発においてテストが大事である、ということに異論を唱える人はいないでしょう。
テストという作業はシステム開発にはほぼ必須になります。(絶対に、と書きたいところですが例外が0.01%あるかもしれないので、”ほぼ”で止めときます。)
私がいた現場でも程度の差こそあれ、テストが必要ないところはありませんでした。昔はテストを軽視していたせいで心身ともに疲労しました。
今流行の技術が20年後も標準で使われているかというのは疑わしいでしょうが、テストのスキルというのはこの世にシステム開発がある限り必要になってきます。
このようにテストという作業は非常に大事な作業ですがその必要性は皆さん理解していても、現場では扱いが軽いことが多いと思います。
例えば、「テスター」という職業がありますが、これは新人などどちらかというと経験がない人間がやることが多いようです。
プログラミングができなくてもなんとかなることがあるからでしょうか・・・
また納期がタイトな場合、削られる工数といえばテストのようですね。
プログラミングと違って工夫がなければとてつもなくつまらないですし、苦痛です。
テストに関するメリット、デメリットをまとめると下記のような感じでしょうか。
メリット
- IT業界であれば業務系だろうがWEB系だろうがほぼどこでも必要になる
- プログラミングができなくてもできる部分もある
- 数十年後もすたれない(細かいツールの流行廃りはあり)
デメリット
- つまらない
- 単純作業の繰り返しのこともあり、精神的に披露する
- 厳密にやろうとすると工数が無限大になる
- できているものの、不具合を見つけるという意味でも精神的に披露する
でしょうか。
大切なのはわかっちゃいるけど、つまらないからいい加減になりやすい・・・そんなことが一般的には多いのではないかと思います。
そこで今回は少しでもテストを効率的にするための工夫やツールを紹介したいと思います。
テストの種類
テストといっても種類は様々ですが、ここでは簡単にユニットテストと画面からのテストを取り扱いたいと思います。
ユニットテスト
これは関数など比較的小さい単位が正常に動いているかのテストです。
画面から確認することは難しいので、後述するテストツールを使う場合が一般的です。
テストツールを使わなくても、ある関数の戻り値が期待通りの引数になっているかを確認することはできます。
画面では簡単な処理に見えても、内部では何重もの複数の処理がおこなわれていることが珍しくありません。
そういった場合、一つ一つの関数が正常に動いているかはこのユニットテストで検証します。
後述する画面のテストに比べると範囲が小さいこともあり、比較的行いやすいテストといえます。
画面からのテスト
これは画面単位での処理を確認する作業です。
例えばお問い合わせフォームの入力画面である値を入力したときに、期待通りの動きをするかなどです。
プログラミングをしなくても行えることから「誰でも」行うことは可能ですが、もれなくテストすることは簡単ではありませんし、テストパターンもかなり多くなります。
また後述するようなSeleniumなどのテストツールを使うとこれらの処理を自動化することができます。
テストはこのほかにもいろいろありますが、超基本的なものに限るとこのユニットテストと画面テストに分かれます。
普通にアプリを開発するのであれば画面からのテストは誰でも経験すると思いますが、ユニットテストという考え方をしっておくと開発が楽になります。
テストツール
上記のテストはツールを使わなくても行うことができますが、ツールを使うことでより作業時間を軽減でき、精神的疲労度を抑えられます。
xUnit
主にユニットテストを行うツールです。Xには各言語の文字が入ることが一般的で、JavaだとJunit、PHPだとPHPUnitなどがあります。
先ほども言ったように単体テスト自体はツールを使わなくても可能ですが、値の検証やチェックなどにこれらのツールを使うと負担が軽くなります。
またEclipseなどを使うとテスト用のコードを自動生成してくれることから使える場面は積極的に使いましょう。
Selenium
画面からの操作を自動化させるツールです。プログラムをかいて動かすものもありますし、プログラムを一切使わず、自分の動きをブラウザに記録させられるようなものもあります。
Seleniumに関してもちろん限界もありますが、入力項目が何十項目もあったりするような画面の場合、大変な負担になりますので、こういったツールで自動化できればテストの負担を軽減できます。
エクセル
テストのパターンを考えたり、保存したりする場合に便利です。
特に組み合わせを考える場合、エクセルがあると便利になります。
一般の開発現場ではこれにテストのパターンを保存し、画面のキャプチャ画面を張り付けて保存しておくケースが多いでしょう。
昔からある方法ですが、単純なだけに使える機会は多いです。
テストのコツ
ここでは少しでもテストの負担をさげ、効率的にするためのコツを書いておきます。
テストしやすいコードにしておく
ユニットテストの場合になりますが、テストがやりやすいかどうかはツールの使い方だけではなく、プログラムの書き方にもよります。
テストのしやすいコードとは?というテーマだけで多分本が何冊もかけると思いますが、最小限のポイントを書くと
- コードはできるだけ短くする
- 他のプログラムとのかかわりを小さくする(特にデータベース)
- メソッドでは引数と戻り値を明確にする
- 変数の影響範囲を小さくする
になると思います。
まだ実務未経験者の方はむずかしいと思いますが、最初のうちはメソッドをできるだけ短くすることを心がけるとよいでしょう。
ツールごとの特性を考える
xUnitやSeleniumともにいい、悪いがあります。最新のツールが全ていいわけではありません。
このサイトのモットーでもありますが、すべての技術にはメリットとデメリットがあります。
特定のツールに万能性をもとめたり、逆に一面的な面をみて否定するのは損な考え方です。
あくまでツールはあくまで「手段」なのでそれぞれのメリット、デメリットを考慮して使い分けを行いましょう。
テストのパターンは必ず書き出す
テストのパターンを頭の中だけで考えていては漏れが起こったり、逆にやる前から過剰に考えてしまい怖気づいてしまうでしょう。
実際に書き出してみると意外といろいろなパターンがあることにきづいたり、逆にやる前はとんでもない量があると思っていたけど実際に書き出してみたらそんな量でもなかったということは十分あり得ます。
組み合わせが複雑な場合でもエクセルを使えば、労力を大きく削減できます。
システムの動作を確認するときも書き出してあれば当然チェックが楽になります。
未来の自分を楽にするためにもテストのパターン(テストケース)は書き出しておきましょう。
反復性の強い作業はできる限り自動化を考える
テストの最大のデメリットは単純な入力作業を繰り返し行うことによる時間と精神的消耗度だと思います。
単純な入力作業であればできるだけ人間がやるのではなく、自動化するようにしましょう。
入力欄が何十項目もあるような場合、1度1度のテストが大変な負担になります。
その場合、Seleniumを使えばボタン一発で数十か所に値をいれることも可能です。
そうすることでもっと生産的なことに時間を使えるようになります。
ただし後述するようによほど単純なケースでなければすべてを自動化するのは不可能だと思います。
全部を自動化しようとしない
自動化のメリットをいろいろとあげましたが、すべてを自動化しようとするのは逆に無謀ですし、費用対効果が合いません。
時間と精神的疲労度を少なくするのが自動化の目的です。自動化するために逆に時間がかかったり、労力をかけては本末転倒です。
自動化が難しくどうしても手に頼らざるをえない場所は必ずあります。
そういっときは割り切って手でやりましょう。
できれば複数人体制で行う
どんな天才であっても人間である以上、必ず思い込みや見落としがあります。
理想論をいうとテスト自体は開発者がやるべきではないと思います。
開発者は自分が作っているため、どうしても正常な動きを期待していますので、心がけていたとしてもテストが甘くなります。
そのため完全にテストを正確に行いたい場合は、開発者以外の人間がテストをしたほうがよいでしょう。
まとめ
以上、テストに関して思うところを書きました。
一口にプログラマといっても人によりやることはさまざまですが、テストはおそらくすべての人にとって重要であることから身につけておいて損はないと書きました。
基本的なことばかりなのですが、これからプログラマになろうと思う人はぜひテストの重要性についてしっておき、早い段階から自分なりのテスト手法を確立させておくとよいと思います。
関連記事
-
-
読者さんからの相談を受け付けました! 異業種からSESに入りはしたけれど・・・
ブログを運営していまして、嬉しいのはやはり読者さんからの相談だったりします。 以前も下記のよう
-
-
無料プログラミングスクールのメリット・デメリット
一般的にプログラミングのスクールというのは高額です。 30万以上するような講座が普通なので、ぽ
-
-
お問い合わせフォームを作ろう! その1(HTML)
このサイト、PHPの学習サイトなのに内容から遠ざかっていました(爆) 個人的にはプログラミング
-
-
理論と実践のバランス
ネタ不足&開発のほうが忙しく、一か月以上書いておりませんでした。 今回は漠然とスキルアップする
-
-
あなたのPHPレベルを判定してみよう!未経験者限定スキル判定表
プログラムを勉強していると自分のレベルみたいなものが気になる方は多いでしょう。 私の場合も独学
-
-
初心者が読みやすいコードを書くときに気をつけたい4つのポイント
本日のお題は、「読みやすいコードの書き方」についてです。 プログラミングをやりたての頃は機能を
-
-
セミナー告知のお知らせ
突然ですが2018/06/16にIT業界への就職希望者を対象とした無料プログラミングセミナーを開催さ
-
-
よく使う処理をまとめよう その1 (関数)
おはようございます。松本です。 私の会社では10時半から掃除の時間でして、ここ数ヶ月ずっとやっ
-
-
PHPで掲示板を作ろう!(データベース編) その2 MySQLログイン編
あ、最近はこのブログの画像に凝るようにしています。サイドバーなんかみていただくとブログのアイキャッチ
-
-
未経験者がWEBエンジニアとして就職する前に身につけておいたほうがよいスキル一覧
夕方、用事から帰ってきてから寝てしまったので寝れなくなっている松本です。 寝れないので今日はも