anybody's game

日々感じたこと、艦隊これくしょん、千年戦争アイギス、読書記録

開発者がテスト技術を学ぶべき理由

この記事は、Software Test & Quality Advent Calendar 2011のために書いたものです。前日の記事は、@takanorigさんの、「JaSST 10th Anniversary」という記事でした。また同日の記事に@softestさんの「技と術と芸で考えるソフトウェアテスト」があります。

テストを学ぼうと思ったわけ

 自分は、ソフトウェア開発の中で、テストに参加したりもするし、設計も多少するけれど、一応、開発者だと思っています。開発者です。そんな開発者の自分がテスト技術を学ぼうと思った理由は2つあります。一つは、たまに行うテストの質に不安があったこと。二つは、TDD(テスト駆動開発)をすこしづつ取り入れていった中で手ごたえがあったことです。

 テスト技術を学べば、たまに参加するテストも自信をもって行えるようになると思ったし、TDD(テスト駆動開発)の恩恵をもっと受けられると思ったのです。

 今まで、テスト手法については、必要なときに検索をしたりする程度だったのですが、この12月から少しづつ書籍で体系だった勉強をさせていただいています。

 自分は、まだまだ勉強はじめたばかりのひよっこですが、今日まで約数週間勉強した中で、開発者がテスト技術を学ぶメリットとして感じているところを書いてみようと思います。もしかしたら、テストを学んでいる先人の方々にとってはあたりまえの事かもしれませんし、突拍子もないことを言っているかもしれませんが、その点は、ご指摘いただけたり、ご容赦いただけたらと思います。

開発者がテスト技術を学ぶべき理由

 開発を行った人がテストも行う場合と、開発とテスト・品質管理それぞれ別々の人が行う場合があります。しようがなくテストと開発同じ人がやっている場合もあるでしょうし、それぞれの利点もありますので、選択的に、開発とテストを同じ人がやっていたり、別々の人が行っていたりするかもしれません。

 開発もテストも同じ人が行う体制の中の開発者にとって、テスト技術の体系のほぼすべてが参考になるでしょう。学んだテスト技術をそのままテストの作業の中で活かすことができるからです。しかし、開発者とテスト担当者が完全に分かれている体制の場合も、開発者がテスト技術の体系を学ぶことは非常に有用だと思っています。

 そもそも、ソフトウェアの開発技術の体系とテスト技術の体系、同じものをそれぞれの立場から定義し、体系の一部に位置づけている部分も多いのです。

 開発もテストも「必要な品質をそなえたソフトウェアを世に送り出す」というところでは共通しています。説明するまでもありませんが、開発の流れの中の「成果物をテスト担当者へ渡す作業」、テストの流れの中の「テスト対象を受け取る作業」というのは、「設計→実装→テスト」という一般的なソフトウェア開発モデルの中では、まったく同じ部分です。同じ作業をそれぞれの立場から見ているだけ、表裏一体です。設計やレビュー、インシデント管理など開発者と共同で行う場合もあるでしょう。

 さて、最終的な目的も同じ、作業の対象も同じ、同じ作業を行うこともある。こうなってくると、開発手法もテスト手法も共通している手法・技術が多いのも当然といえば当然です。

 開発者がテスト技術を学ぶということは、開発手法をテスト技術という別の観点から学ぶことです。だから、開発者が、開発技術としては知っている手法をテスト技術の体系の中でとらえなおし、また、テスト技術の定義をつかって学ぶことで、より一層深く開発技術を理解することができるのではないかと思います。テスト技術を通して開発技術をみつめなおすことができる。これが、開発者がテスト技術を学ぶべき理由です。

開発者がまず最初にまなぶべき部分

 開発者がテスト技術を学ぶとき、テストとはなにか、バグとは何か、故障とはなにかというところから学んだほうが体系的にテスト技術が身につくのはいうまでもありません。しかし、テスト技術が本当に開発にとって役に立つのかわからない時点では、本腰をいれて基礎の基礎から勉強を始めるのは、ハードルが高いかもしれません。

そこで、開発者がテスト技術を学ぶとき、まず最初に目を通したら、その有用性が確認できるのではないか、という分野をあげてみました。以下の通りです。分野は、テスト技術体系がよくまとまっているJSTQB(テスト技術の資格試験)のシラバス*1と対応しています。

  1. コンポーネントテスト(JSTQB FL 2.2.1)
  2. レビュープロセス (JSTQB FL 3.2)
  3. ホワイトボックスのテスト技法(JSTQB FL 4.4)
  4. インシデント管理 (JSTQB FL 5.6)
  5. テスト支援ツール (JSTQB FL 6.1.4)

 たとえば、テスト駆動開発を意識している開発者にとって、テスト技術体系の中のコンポーネントテストやホワイトボックステストの技法は、非常に示唆にとんだものと感じられるでしょう。テスト技術体系の中のインシデント管理を学ぶことで、チケット駆動開発を行う開発者は、チケット駆動開発のプロセスをブラッシュアップさせることができるかもしれません。

 静的解析ツールや、モデリングツール、Tracなどのレビューツール、xUnitなどのテスト実行ツール、カバレッジ測定ツールなどは、すでに開発に際して利用している人も多いでしょう。これらはのツールは、テスト技術体系の中で「テスト支援ツール」に分類されるものです。もし知らなかったこれらのツールをテスト技術を勉強する中で知ることができ、開発ツールの選定を行う際の選択肢が増えたならば、それだけでテスト技術を勉強した意味があったというものです。これらの開発者向けのツールをもう十分に知っていて、開発ツールの選定時に選択肢としてもっているような人であっても、開発者向け以外のテスト支援ツールを学ぶことで、開発・設計の質が上がるかもれませんし、なにより、テスト担当者とのコミュニケーションがとりやすくなるでしょう。

 コードレビューやペアプログラミングは、テスト技術の体系の中では「レビュープロセス」ということになります。コードレビューがうまく回らないので改善したい、ペアプログラミングを試してみたいという場合にも、テスト技術からの視点でそれらをとらえておくことは非常に有用でしょう。

これらの分野を、本屋さんで立ち読みでもいいでしょう、JSTQBシラバスなら無料です、つまみ食いで勉強してみて、開発のときにテスト技術が役にたつかどうか、各自判断してみるといいと思います。

開発者がテスト技術を学ぶ方法

さて、開発者がテスト技術を学ぶべき理由、とっかかりとして勉強すべき部分を紹介したところで、さて、どうやって本格的に勉強していきましょうというところですが、自分も勉強し始めたばかりで、確固たるおすすめの書籍や勉強法がないのです。。自分がこれまで読んだ中で初心者にもわかりやすいと思うものを上げておきますのでよかったらご参考にしてください。

体系の全体像を知る

まずどんな分野を勉強するにも、頭の中にその分野の体系の目次を作る作業というのは非常に重要です。目次が頭の中に入っていれば、知識が段違いに身につきやすくなるものですし、目次さえ頭の中に入っていれば知識がなくても必要なときに、書籍やWebで検索することができます。頭の中にテスト技術の体系の目次をつくることができるという意味で、JSTQBシラバスはとてもよくできているのではないかと思います。

入門する

目次ができたら、さてその目次に肉づけをしていきましょうということになるかと思います。その第一歩として、上記の本が自分が読んだ限りとてもわかりやすくまとめてありよかったです。まだまだ読んだ本少ないので、あくまでも参考程度に。

最後に

テスト技術初心者の戯言におつきあいいただきありがとうございました。

ではでは引き続き、「Software Test & Quality Advent Calendar 2011」をお楽しみください。

知識ゼロから学ぶ ソフトウェアテスト

知識ゼロから学ぶ ソフトウェアテスト

ソフトウェアテスト教科書 JSTQB Foundation 第3版

ソフトウェアテスト教科書 JSTQB Foundation 第3版

  • 作者: 大西建児,勝亦匡秀,佐々木方規,鈴木三紀夫,中野直樹,町田欣史,湯本剛,吉澤智美
  • 出版社/メーカー: 翔泳社
  • 発売日: 2011/11/12
  • メディア: 単行本(ソフトカバー)
  • 購入: 5人 クリック: 85回
  • この商品を含むブログ (12件) を見る