*

バグをゼロに近づけるテスト手法とは?

公開日: : WEB全般, 講義

私は去年のはじめまではPHP、去年の春~年末はJavaScript、今年からはJavaを触っています。

扱うアプリについてもPHPはEC、JavaScriptは業務管理ツール、Javaでは在庫管理ツールと扱っているものも違います。

ただ、扱う言語や製品が変わっても実は悩みはここ2年ぐらい一貫しています。

それは「バグをいかに少なくするか」といったことですね。

結論からいうとバグをゼロにはできないと思います。

これはITの宿命やシステム開発に限ったことではなくて、以前もいいましたが、100%完璧なものは人間につくることはできません。

お客さんは100%を望むんですけどね(汗)

ただ、100%に近づける努力は必要だと思うんですよね。

まあそこでテストをする必要がでてきます。

テストでありがちなミス

テストでよくあるケースとしては、なんとなく自分が正常系だと思っているパターンを入れて動けばOKってパターンですね。

しかもテストケースを保存していなかったりすると、時間がたつとどのケースで正常に動いていたかどうかがわからなくなってしまいます。

プロジェクトによってはキャプチャーを貼り付けてエビデンスといった形で納品するなんてことを聞いたこともありますが、私がいたところでそういう現場はありませんでした。

テストをいい加減に行うとトラブルの元になりますので、テスト手法について真面目に考えてみたいかと思います。

テストの分類

プログラムのテストといってもいろいろなタイプのものがありますね。

厳密には下記のリンク先のようないろいろな種類があるようです。

http://qiita.com/ktaro/items/8c3d94d6c21a0c86b799

ただ実務では納期との戦いもあり、100%完全に上記のテストが行えるかはまれでしょう。

ここでは実用性を考え、大きく2つに分けました。(厳密な定義自体は違うかもしれません。)

ユニットテスト

これはメソッド単位で行うテストのことを指します。

要するにプログラマが自分の作ったメソッドが正常に稼動しているかどうかを検証します。引数を入れて、戻り値が期待通りかを検証するわけですね。

行う目的としてはプログラマの精神安定です。(←私の認識はこうです。)

プログラムを作る際にこれをやっておくと安心感が違います。

複雑なプログラムだと画面からの入力からページの更新までに10以上のメソッドを通過することも珍しくありません。

その処理を全部作ってから動かそうと思ってもチェックが大変ですし、動かなかったときの原因調査が大変なんですよね。

そこで画面のテストを正常に行う前にまず小さい単位で完成しているかどうかをみます。

結合テスト

これは主にユーザーから見た状態の遷移などのテストです。

例えばお問い合わせフォームだったら入力値があってエラーメッセージ画面の表示(あるいは別の画面への遷移)など、一連の動きや画面からの入力に対しての動きが正常かいなかを判定するテストです。

これは一画面を作った後などのチェックなどに使うといいのではないかなあと思っています。

テストを成功させるために

テストはなるべく自動化すべき

プログラムを作るのがすきな方でもテストをするのが好き、という方は少ないでしょう。私も仕事をしていて一番いやなのが単純なテストを延々と手作業でやることです。

テストをするときに正常系をなんとなく少し入れて目視で終了みたいなやり方は論外かと思いますけれどもテストケースがあったとしてもそれを目視で1つ1つやっていくっていうのは現実的ではないと思います。

修正をするたびに同じテストをやったりすると労力が天文学的になり、真面目にやったら確実に赤字になります。なによりプログラマの精神衛生上よくありません。延々と同じことをやるので賽の河原積みの石積みのような気持ちになってきてしまうんですね。

かといってテストを避けて通ることはできません。となるとこれを解決するにはもう自動化しかありません。プログラム自体でテストをする、それしかないと思います。

ただし完璧な自動化は目指さないこと

自動化のメリットをあげておいてなんですが、100%自動化はやめておいたほうがいいと思います。

もちろん100%が容易にできればいいですが、人の動きを完璧にコンピューターにトレースさせることはできません。

100%に近づけるためにはテストツールの学習コストが甚大になります。

最初はいつもやっているテストの8割を自動化しようとか汎用的で別のプロジェクトでも活用できそうなパターンだけ自動化しようとするのがよいと思います。

テスト自動化の目的はあくまで労力の軽減ですのでテスト自動化で労力がかかってしまっては本末転倒です。

要は何事もバランスが大事!ということですね。

できれば開発者以外の人間がすべき

テストっていうのはバグを探すためにやるものなので、当たり前ですけどバグが発覚した場合、プログラムを修正する必要があります。

開発者本人からするとある意味、自分の仕事のあら探しをするようなものなのでどうしてもテストは甘くなります。

そこで、バグを発見するためにもテストケースの作成は開発者以外の人間がやったほうがいいでしょう。

ある人に聞きましたがプロのテスターはできればプログラムすら知らない人間のほうが良いようです。(プログラマの先入観が入らないから?ということでしょうか。)

テストに必要な道具

ここではテストをするのに必要なツール・フレームワークについて述べます。

PHPUnit

ユニットテストをするためのテストフレームワークです。まあ超有名なのでご存知の方も多いかと思います。

これをメソッドの区切りごとに作っていくと安心感や精神的疲労度が大分軽減されるのでは・・・と思います。

Selenium

結合テスト、つまりは画面の遷移に関して動かすテストツールです。プログラムから動かすものもあればFiirefoxのプラグインなどでプログラムを一切書かずに動かせるものもあります。

自動でキャプチャを作ってくれたりもできます。

画面からのテストって本当にエネルギーを使うので最初は面倒でもこれでテストケースを作っておくことをお勧めします。

ってかそうしないと欝まっしぐらです(汗)

エクセル

今のJavaの開発がそうなんですけどテストケースを量産するときにやっぱりエクセルが必要になります。1つ1つコードのなかに書いていくと労力が半端ないですし、項目と値がずれる可能性もあります。

エクセルでテストケースをばーっとかいてそれを読み込んで実行させる、っていうのが一番いいんではないかなと思います。

以上、テストについて目的や意義、気をつけるべき点やツールについて簡単に書きました。

このブログは初心者向けなんで具体的な方法については一切書きませんでした。

機会があれば基本的な使い方について紹介したいと思います。

 

 

関連記事

プログラミングの基本ルール

ガチンコ松本です。 さて、準備が整ったところでさっそくPHPのコードを書いていきましょう!

記事を読む

ドキドキ本番リリース時に大切な心構え

今回はエンジニアにとって大切な本番リリースについて。 本番リリースというのはいままで開発環境(

記事を読む

無料プログラミングスクールのメリット・デメリット

一般的にプログラミングのスクールというのは高額です。 30万以上するような講座が普通なので、ぽ

記事を読む

PHPはなぜ簡単といわれるのか?

最近ではブラック企業と同じような意味合いでブラックバイトなんて言葉があるらしいですね。 ただ定

記事を読む

PHPで掲示板を作ろう! 掲示板の作成方法 その1

以前、お問い合わせフォームを作成しましたが、今回からは数回に分けて掲示板を作成していこうと思います。

記事を読む

繰り返しを学ぼう その2 (while)

おはようございます。松本です。 最近、仕事をしていると細かいノウハウよりも「行動力」が何よりも

記事を読む

就職するときに見落としがちな考え方

今は自社で就職の斡旋などはしていないのですが、人材紹介会社で働いていたときは生徒の就職に立ち会ってき

記事を読む

Java/PHP/Perl/Ruby/Python 主要Web系言語徹底比較

本日はWeb系で使われているプログラミング言語の比較をしてみようと思います。 Web系で使われ

記事を読む

初心者でもできる!作れる!WEBサービスの開発 その2 制作体験記編

前回からの続きですが、主にプログラムの勉強目的として、簡単なWEBサービス(アフィリエイトサイト)を

記事を読む

条件によって処理を分けよう (if)

おはようございます。松本です。 昨日はひさびさにサイクリングを長時間楽しみました。往復で50キ

記事を読む

Message

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

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

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

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

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

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

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

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

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

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

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

→もっと見る

  • follow us in feedly
PAGE TOP ↑