うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

テストをするモチベーション

注意

本稿は@の頭がおかしいのか、テストエンジニアの頭がおかしいのかは不明です。経験談です。

モチベーション

テストをしているときのモチベーションはいくつかある。それによってやっていることもずいぶんと違う。 基本的に僕がテストをしているときは「対象をぶっこわす」か「対象を楽しもうとする」か「対象を知ろうとする」くらいの3つです。どれかに偏っているテスト戦略は偏った製品を出したいということに他ならないので、POに確認する必要があるか、自分のテスト戦略がダメな場合がおおいかな。

ぶっこわす

基本的にその対象をクラッシュさせることに集中します。どうやったらこのソフトウェアは例外をはいて終了するのか。どうやったら正常起動しなくなるのか。どうやったら正常に終了しないのか。どうやったらレスポンスがかえってこなくなるのか。

で、こういうのは意外に時間がかかったりします。ということで普段からツールをつくっておくとよいです。 フレームワークをつくっているなら、特定のスニペットBNFから様々なコードを生成するようなツールをつくっておきましょう。ものの数分で動かないケースが出たりします。楽しいです。HTTP通信ならファジング的に対象のパラメータ部分をいろいろ変化できるようなツールをつくっておきましょう。バイナリいじるの楽しいよね。そうだね。サーバー系のコマンドやOS系のコマンド類を組み合わせるようなスクリプト生成ツールもつくっておきましょう。だいたい何かを予期していなくてソフトウェアがエラーをはきます。 楽しいですね。ひゃはっ。

楽しもうとする

対象のソフトウェアを使う事でどうやったら楽しい事が出来そうか、やりたかったことがやれそうかっていうことを試します。もしかしたら実現できないかもしれないし、意外な使い方を発見するかもしれないですし、その場合にどんな動作をするかはまだわからないかもしれません。

大切なのは、このソフトウェアを使って何か楽しいとか生産性があがるとか、自分のなにかをよくするような可能性を探ろうとすることです。だまされたと思ってやってみな?って言われて読んだりやったりする小説とかゲームとかありますよね。あんな感じです。あと、待望のソフトウェアが出たときとかですかね。はてなブックマークとかTwitterとかで「やべええええw これはすごいw」とか言われちゃっている感じのやつですね。そんな感じでそのソフトウェアを楽しもうとしましょう。そうすると使えるところ、そして意外に使えない部分がわかったりします。ガッカリさせないためにはこういうの大切ですね。

対象を知ろうとする

これはどんなものなんだろうか?と対象のソフトウェアのユーザーガイドや仕様書を書くつもりでテストします。場合によってはコードを見ることも、JVMなどの実行環境の監視もします。このソフトウェアはどうやって動いているのか?何を提供しているのか?設計思想はなにか?どこでなら動いて、どこでなら動かないのか?などです。

楽しもうとするときと違うのは、楽しむことがメインなのではなくて対象をより整理立てて知ろうとするところです。ようはリバースエンジニアリングするくらいの気持ちです。対象のソフトウェアが可能なことがわかれば、それが妥当であるかどうかをまた判断することが可能です。楽しいとか壊れるかだけだと、サポート外ですって言われたらそこまでです。なので、このソフトウェア自体が何であるかを知るということ。これも大切なモチベーションです。

蛇足

ソフトウェアをぶっ壊すときは基本的にへヴィーメタルかオルタナティブロックを聞いています。テンション上がる。

参考書籍

下の書籍たちの影響が大きいことは言うまでもない

Exploiting Software: How to Break Code (Addison-Wesley Software Security Series)

Exploiting Software: How to Break Code (Addison-Wesley Software Security Series)

How to Break Software: A Practical Guide to Testing

How to Break Software: A Practical Guide to Testing

How to Break Software: AND Software Engineering: A Practical Guide to Testing

How to Break Software: AND Software Engineering: A Practical Guide to Testing

Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design

Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design