*

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

公開日: : 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つコードのなかに書いていくと労力が半端ないですし、項目と値がずれる可能性もあります。

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

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

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

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

 

 

関連記事

フレームワークのメリット・デメリット

こんばんは。松本です。 昨日25日にはオフィスで第一回目の授業を開講させていただきました。広島

記事を読む

エラーメッセージで挫折

もうエラーメッセージで挫折しない! 4つのエラーメッセージ対処法

このブログで何回か書いたのですが、PHPに限らずプログラミングの独学はかなり難しいです。 その

記事を読む

PHPで掲示板を作ろう!(データベース編) その6 まとめ編

今回はMySQLの第6回目の講義です。今回で終わりですので、ソースの説明と今までの解説の概略を書いて

記事を読む

「初級」〜「中級」のPHPエンジニアのスキルについてまとめてみる

いままで主にPHP(を中心としたWeb技術)を勉強し始めの傾けに記事を書いていましたが、今回は初級か

記事を読む

WEBエンジニアだったら知っておきたいWEB開発ツール一覧

今回は仕事で使っているソフト、ツールやWEBサービスなんかを紹介していこうと思います。 それほ

記事を読む

お問い合わせフォームを作ろう! その2(PHP)

おはようございます。松本です。 繰り返しますが、このブログは技術ブログなので(笑)PHPのネタ

記事を読む

お問い合わせフォームを作ろう! その3(PHP)

それでは前回のコードを例に少しずつ内容について説明をしていきます。 値を取得するには まず一番最

記事を読む

未経験者がWEB系企業の就活で注意すべき5つのポイント

昨日、あまり寝てないせいか、今日も寝れない松本です(爆) 生活リズムはやはり大切ですね。睡眠時

記事を読む

お問い合わせフォームを作ろう! その4(PHP)

お疲れ様です。松本です。 今年は振り返ってみればもう半年が過ぎちゃいましたね。今年はいろいろあ

記事を読む

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

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

記事を読む

Message

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

転職エージェントについて

さて、エンジニアとして転職を考えている人であれば転職エージェントを使っ

エンジニアが転職して年収を上げる方法を考えてみました。

えー前回の記事でも書きましたが、2020年2月現在転職活動中です。

2020年のご挨拶

今更ですが、明けましておめでとうございます。 2019年も2本し

自社開発>客先常駐である本当の理由

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

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

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

→もっと見る

  • follow us in feedly
PAGE TOP ↑