少し前からテスターをしています。
今の環境しか経験がなく一般的なことがよくわからないので聞きたいのですが
・テスターはチームまたは会社に1人はいるものなのでしょうか?(検索しても古い記事が多いので)
・テスターがいない場合は、プログラマがテストをしてそれがリリースになるということでしょうか?それかテスト駆動型開発はブラックボックステストは必要ないのでしょうか?
正直テスターの仕事はあまり好きではなく、なくせるものならなくしたいです。
>テスターは一般的にはあまりいないのでしょうか?
たくさんいますよ。
ソフトウェアの開発規模が小さかったり昔はプログラマがテストも行っていましたが
だんだんソフト開発の規模が大きくなり、開発と評価を分業で行うようになっています。
その場合、評価はソフトウェア開発の中から評価チームが分かれる場合や、品質保証で評価チームを持つ場合や
評価を社外に外注したり、第三者検証を委託したりとさまざまです。
某S社の携帯開発に参加した時は1フロア全体がテストチームでテスターの人だけで50人以上いました。
ソフトウェアテストを専門に行う会社もありますし、テストを専門で行うテスト技術者の方もおられます。
少し前からテスターをしています。
今の環境しか経験がなく一般的なことがよくわからないので聞きたいのですが
>・テスターはチームまたは会社に1人はいるものなのでしょうか?(検索しても古い記事が多いので)
すごく小規模な開発案件(プログラマが1人~数名)であればプログラマがテストも手分けして行うということもありますが、
ある程度の規模になると専任でテストチームが作られます。
>・テスターがいない場合は、プログラマがテストをしてそれがリリースになるということでしょうか?
テストと言っても大きくわけてデバッグと評価があると思います。
開発者自身が動作を確認してバグをつぶしていくのがデバッグで、仕様を満たすよう動作を確認した後
バージョンをつけ社内リリースします。
そのバージョンに対しテストケースを用いてテストチームがテストを行うのが評価になります。評価を行い仕様通りに動くことを確認してエビデンス(評価結果)を記録して社外へのリリースとなります。
評価結果は最終的には検査成績書として成果物になり客先に納品されます。
仕様書を元に開発者は単体検査仕様書、結合試験仕様書、総合試験仕様書、・・・を作成し動作の確認を行った後
ソフトをリリースし、
評価チームは評価チームで仕様書を元にテスト観点からテストケースを作成し仕様通り動いているか評価を行います。
開発者と評価チームでやっていることは同じに見えますが、役割は違います。
(評価チームによってはあまりに不具合が多い場合は「評価に値せず」ということで評価をやめることもあります。
バグ出しと評価は違うのです)
>正直テスターの仕事はあまり好きではなく、なくせるものならなくしたいです。
無くならないと思いますし、開発とはまた違う色々なスキルが必要になるので
勉強してみてはどうでしょうか。
例えば、以下で知らない言葉があればネットで検索してみて下さい。
同値分割法
境界値テスト
異常値・特異値分析
ドメイン分析テスト
機能リストに基づく単機能確認テスト
制御パステスト
制御フローテスト
データフローテスト
カバレッジ
モデルチェッキング
デシジョンテーブル
原因結果グラフ
CFD技法(Cause Flow Diagram)
直交表
HAYST法
AllPair法
k-way
状態遷移テスト
タイミングテスト
ユースケーステスト
例外ユースケース
シナリオ
業務フロー
リスクベース
サンプリングテスト
ランダムテスト
探針テスト
ユーザストーリーテスト
欠陥仮説法
ファズテスト
探索的テスト
エラー推測
信頼度成長曲線
スモークテスト
スラムダンクテスト
Wモデル
アドホックテスト
モンキーテスト
全数テスト
>それかテスト駆動型開発はブラックボックステストは必要ないのでしょうか?
テスト駆動型開発は開発手法であって、デバッグの中では有効ですが、評価は必要です。そのためテスト駆動開発であってもブラックボックステストは(評価として)必要になります。
テスト駆動型開発の場合、ソースを組んだ後、テストケースを組むより、テストケースを組んだ後、それがパスするようにコードを組んだほうがプログラマのモチベーションが上がるというのが主な利点です。
他に、最初に仕様に基づきテストケースを組むときに仕様レベルのバグに気が付くとか、設計段階前での構造上の問題に早く気が付くとか、常にテストケースが存在するためリファクタリングが行いやすいとか、ソース変更に対するデグレが見つかりやすいとか、CIでテスト自動化できるとか色々利点はありますが、あくまでもソフト開発上の利点です。
製品レベルでの評価は仕様を満たしてTDDなどのデバッグが終わってバージョンがついて社内リリースされてから始まります。
テスト駆動型開発だから評価は不要ということはないですね。TDDは内部仕様に基づいて行うのでホワイトボックステストにあたりますが、仕様から導かれるブラックボックステストも当然必要です。
仕様の勘違い・解釈違いというのは良くある話で、開発者以外の人が製品仕様を元に検査を行うブラックボックステストはとても有効です。
開発者が仕様を勘違いしている場合、開発者が作ったテストケースも勘違いした仕様で作るためバグが見つからないわけです。
カバレッジや信頼度成長曲線や不具合の対応状況も最終的な客先リリースの判断には必要となります。
一般的には
・テスターは開発プロセスにもよるが,必要な時期と必要でない時期に大きく分かれる.このため,会社によっていたりいなかったり,常勤だったり非常勤だったりは分かれる
(・開発者自身によるテストは欠陥を見逃しである
・「テスト駆動開発」はプログラミングをスムーズに進めるためにうまくいく基準を用意するもので,バグを見つけ出すものではない)私の理解が甘いままで回答してしまいました.下の議論には関係ないため撤回します.
ということがいえます.
あくまで私の経験ですが,臨時でテスターをやったことがあります.
その時は途中からバグも見つからなくなってきて,他の仕事も兼業し始めたのでリリース前に抜け,「大したことできなかったな…」と思いましたが,そこそこのヒット商品になりました.
ところが,次の製品のリリースの際に臨時のテスターが見つからず,私も正社員になっていたので手伝えずという感じで開発者のテストのみでリリースしたところ,重大な不具合が見つかってリコールになってしまいました.
この経験で,テスターがそこまで貢献していないように見えて必要だということを思い知りました.
また,最終的にテスターによってテストされるということを考慮すると,製品を作る際や企画するさいにも役立つと思います.
もちろん,ずっとテスターをやるというのはなかなか難しいのですが,少なくともその経験は有意義だと私は思います.
>・今の環境は、業務プロセス?が古い?変?なようなのでどうしたら改善できるのか
本来のテスターの仕事でなく、デバッグの手伝い(いわゆるデバッガー)もされているようですね。
BTS(バグトラッキングシステム)やバグ管理票を使ってバグを開発者に報告していると思いますが、可能であれば職場で提案して、「本来ならこのバグはどのテストで見つからないといけないか」という欄を設けると良いと思います。
http://www.itmedia.co.jp/im/articles/1111/07/news202.html
リンク先はW型開発ですが、単純なウォーターフォール型V字型開発の例でいうと
[①要件定義]→[②外部設計]→[③内部設計]----+
↓ ↓ ↓ |
[⑥受入テスト]←[⑤結合テスト]←[④単体テスト]←+
上記のような形で開発とテストが対応します。
通常、①~⑤までが開発(①:SE ②~⑤:プログラマ (④~⑤プログラマ or ソフトチームテスター))
⑥が評価チームになると思います。
本来⑥で出てはいけない④の単体テストで見つかるレベルのバグがあったとしたら、開発チームが単体テストをさぼってるとしか言いようがないですよね。
⑥の受入れテストレベルで、④の単体テストや⑤の結合テストで見つかるべきバグがでていることを
バグ管理票を集計してデータとして見える化して社内に問題提議してみてはどうでしょうか。
そうすれば開発者のデバッグも進むでしょう。
社内的にそこらへんの役割分担(責任分担)が明確化されていないように見えます。
[①要件定義]→[②外部設計]→[③内部設計]----+
↓ ↓ ↓ |
[⑥受入テスト]←----------------+
となっていたり
[①要件定義]→(コーディング)-----ー----+
↓ |
[⑥受入テスト]←----------------+
となっているのかも知れませんね。テストを行うためには仕様が必要(単体テストを行うためには内部設計、結合テストを行うためには外部設計が必要)ですから。
上記のようなパターンは受入れテストまでいかないとバグが見つからず、しかもその修正がデグレを産みさらに受入れテストで別なバグが見つかり・・・とリグレッションテスト(回帰テスト)を延々と繰り返すデスマーチへ至る道です。
「じゃあ、先にテストケース書いて、それに合うようにコード書いたら、テストケース書くのもコーディング見たいで楽だ」「テストケースが最初全部赤なのが段々青に変わるのでテストやっててもモチベーションがあがる」
というので生まれたのが「テスト駆動開発(TDD)」なんですけどね。
元々開発者はテストが嫌いなんです。面倒くさいから。
>また、自分が開発してテスターを通さずリリースした案件は細かいバグしか出なかったのでやろうと思えば(+テスト駆動型開発にすれば)テスターはいなくていいのかと思っていましたが、
TDDで行えば最低限単体テストは済んでいますからソフトの品質は(単体テストも行わない場合に比べて)各段に良くなります。
また、全てのコードがテストされるので、一部の修正が他のバグを引き起こすデグレ(デグレード)を防ぐことができます。一か所づつ単体テストを行った場合は最初はうまく動いていても後の方の修正で実は最初の頃の単体テストが影響を受けて動かなくなっているということもあります。
社内的に開発者へTDDの導入を進めるのも良いかも知れませんね。
コメントありがとうございます。とてもわかりやすく参考になります。
>「本来ならこのバグはどのテストで見つからないといけないか」という欄を設ける
>バグ管理票を集計してデータとして見える化して社内に問題提議してみてはどうでしょうか。
これすぐにでもやり始めます!
過去のドキュメントが少なく仕様は開発者に聞かないと分からない状況なので、開発者の立場が強くて、あんまり強く言えないんですが数字出せばその上の人も説得できそうです。
デグレには本当に悩まされてるので、TDD導入検討するために勉強し始めました。
気持よく仕事出来るようにいろいろ勉強して改善していきたいと思います。
本当に為になるアドバイスありがとうございました。うちの会社に来て相談のっていただきたいくらいです…。