*

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

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

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

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

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

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

 

 

関連記事

作業が遅くてイライラしている方必見!作業スピードを改善するネタ・ツールなど

エンジニアとして仕事をしていますと、「ある機能を実装する最適な方法(設計やプログラムの組み方全般)を

記事を読む

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

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

記事を読む

なぜPHPなのか

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

記事を読む

オブジェクト指向 その2 「設計図」と「部品」

それではオブジェクト指向を具体的に解説していこうと思います。といっても、天才でない限り、初学者でいき

記事を読む

エラーメッセージで挫折

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

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

記事を読む

JavaScriptとPHPの違い

お問い合わせフォームと指導者ネタを更新中なのですが、先日セミナーにお越しいただいた受講生の方にPHP

記事を読む

オブジェクト指向

オブジェクト指向 その1 コードを1行も書かずに理解してみる

今回はオブジェクト指向について書きます。 プログラミングを少しでもやった(orやろうと思った)

記事を読む

プログラミング開発環境構築で挫折・・ wandboxを使ってみよう

本日はプログラミングの環境構築で挫折した方のために、前回の記事で紹介したwandboxというツールを

記事を読む

XAMPPとは何か

PHPを勉強する場合、まずXAMPPというソフトウェアを自分のパソコンにインストールします。

記事を読む

挫折必至!初心者がやってはいけないプログラミングの学習法 ワースト4

多くの方はプログラミングをどのように身につけたらいいのか・・・ということに関心があると思います。

記事を読む

Message

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

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

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

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

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

2020年のご挨拶

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

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

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

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

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

→もっと見る

  • follow us in feedly
PAGE TOP ↑