スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ソフトウエアテストについて

今日MCEAの技術者交流会で、テストについての討論があった。残念ながら私は用事があったため開始早々に退出することになったのだが、配布された膨大な資料を電車の中で読みながらふと思ったことがあった。

・開発とテスト
まず一般的に言われているこの区分、はっきり言って奇妙だと思う。
確かにソフトウエアを開発するとき、コードを書いてテストするという流れだ。しかし開発者はテストしないのだろうか。コード書いて終わりなのだろうか。単体テストに限らず、結合テストについても結合部分について必要なコードは記述するはずだし、その部分についてはテストするはずだ。にもかかわらず、別フェーズでテストが必要というのは、単に開発者がテストしていないだけなのではないか?

・仕様書(設計書)とテスト仕様書
この区分も辺だ。確かにテスト仕様書の方は、チェックリスト形式になっており、仕様書の方は読み物形式になっているという形式的な違いやテスト仕様書で手順の記述が重複しているというのはある。しかし内容は、(仕様書に書かれる付随説明は除き)、同一であるべきだ。なぜなら仕様書に書かれていることはすべて実現されているかチェックする必要があるからだ。もし逆にテスト仕様書の内容の方が詳細であるなら、それは仕様書が不正確であることを意味する。

・テスターの役割・目的
テストを取り扱った論述は、テストが軽視されていると言う。確かにそのとおりで、私もテスターという「マイナー」な仕事はしたくない。しかし、一括りに「テスター」と言っていいものか? テスターにはスキルが必要だと言っていいものか?

テストには目的がある。
1.バグの検出
2.動作の確認・リハーサル

2は、念のために故障していないかどうか確認する。そこで設定漏れ、ディプロイ漏れがないかどうかを確認する。またレグレッションテストにおいてもこれが目的。
この場合、テスターはテスト仕様書にのみ沿ってテストを行う。テスト仕様書には手順と結果が厳密に定義されている。機械的な作業なので、事務的能力さえあれば基本的に誰でもできる。このタイプのテスターにはスキルは大して必要ない。能力のない後輩プログラマーが、先輩プログラマーが作った自信満々の、本人が確認していないプログラムをテストさせられたりもする。これはこれで機能する。
もっともこの部分はさらに機械的に、マシンで自動化すべきだが。まあ、GUIとか複雑なやり方などまだまだ自動化できない部分は人手が必要だろう。

1については、開発者が仕様どおりに開発しているなら、仕様に沿ってテストする限り、バグは検知されないはずである。
ここで発見されるバグは、仕様あるいは開発者の考慮漏れに起因するものである。例えば、Webアプリケーションのテキストボックスで、HTMLタグを入れられた場合どう処理するかを考慮せずに開発した場合、熟練したテスターはこういうところにバグが潜んでいるだろうということで、それをテストする。
当然、仕様書にも書かれていないので、テスト仕様書に沿ったテストでは通常は発見できない。この1の目的で行われるテストでは、開発経験がある人間がやらないと難しい。もし開発経験が豊富な人間なら、検出したバグに対して何が原因かも指摘できる。ところが、2の目的でしかできないテスターであれば、こういう場合、適切なバグ報告もできない。
2なら、全部OKとなる確認をすることが目的なのでバグが見つかるなら、詳細をレポートしなくても、その箇所を報告するだけで十分開発者に伝わるはずである。

・結合テストとシステムテスト
多くのプロジェクトで、適切に分類されていないのを見た。中には単体テストと結合テスト、システムテストと、内容がほとんど同じなんてこともあった。結合テストの仕様書の中の「結合」という文字を「システム」に置換し、それに負荷試験と異常系試験を追加して、システム仕様書としているようなものもあった。
これはシステムテストの中に機能試験を含めていることが原因している。顧客試験を除き、単体テスト、結合テスト、システムテスト、運用テスト、それぞれ目的が違うので、仕様書の中身は別であるべきだ。

そうなっていないのは意味を理解していないからだ。最小の単位が単体テストだが、これまたプロジェクトによって粒度が違う。クラス単位、メソッド単位の試験が粒度としては小さいが、例えばGUIアプリケーションの場合、ロジックとプレゼンテーションが分離していない場合、ロジックだけを取り出すことができず、GUIからテストすることになる。こうなってしまうと、ページとページを遷移させて行う結合テストとかぶってしまうことになる。こうして単体テストと結合テストの境界が曖昧になる。
本来結合テストは、モジュール間の結合部分を確認するのが目的なので、単体テストで行ったチェック項目は必要ない。さらにモジュールをひとまとめにしたパッケージとパッケージ間、ユーザ間、他システム間、そういう連動部分には固有の問題が発生しがちなので、その点をテストするのが結合テストの目的である。

部分が集まって大きな部分となり、さらにそれが集まってシステムとなり、そのシステムが集まって全体のシステムができる。この階層それぞれに結合テストが発生する。一般に最後の結合がシステムテストとされているが、この考えでいくと、システムテストの出る幕はない。
システムテストには、性能試験、負荷試験、異常系試験などがあるが、機能試験は全体の再チェックという位置づけだが、場合によっては不要なことが多い。

とふとと思った。
まだまだ読む資料は残っている。明日頑張って読もう。

関連記事
スポンサーサイト

コメント

非公開コメント

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。