ソフトウェア開発パラダイムの進化に伴い、ソフトウェアプロセスも進化した。そして、今日のコモディティ化されたソフトウェアには、アジャイルプロセスが非常に適している――メリーランド大学カレッジパーク校 コンピューターサイエンスの教授を務めるAtif Memon氏はこう話す。日本では、ビッグツリーテクノロジー&コンサルティング(BTC)と共同研究しているMemon氏に、ソフトウェア開発とテストについて寄稿してもらう。今回は1回目に続く2回目。
今日の継続的インテグレーション(CI)システムでは、ソフトウェアテストが中心的な役割を果たしているので、「どこからテストケースを作成するか」という疑問に回答することは重要です。つまり、各テストケースの作成者を割り当てることです。
この疑問への回答は、各テストケースがソフトウェア開発プロセス全体にうまく当てはまり、ソフトウェアの特定の機能をテストするように正確に作成され、ソフトウェア開発のさまざまなフェーズで役立つ必要があるために重要です。
10年、20年前には、「開発者」と「テスター」の間には明白な違いがありました。開発者はソフトウェアのコードを書き、そのテストを手動で行ない、場合によってはテストケースを作成、コード化、文書化する責任を持つ専門のテスターに送付したものです。能力があるソフトウェア開発者は不足していたので、この役割区分は、労働力不足の一時的な間に合わせ措置としてうまく機能していました。
有能で費用がかかる開発者は、貴重な時間をテストに取られることなく、顧客を満足させるために安定したペースでコードへ新機能を追加することに注力していました。「テスター」は、通常はそれほど能力あるプログラマではなく、費用も割安で、マネージメントからは、当時の認識では「あまり技術でない仕事」をするのに向いていると思われていました。
テスターは(コンピューターサイエンス以外の)さまざまな分野出身で、手動でテストするためにテスターとしてトレーニングを受けていました。十分なスキルを身につけると、テストケースを文書化し、その実行を自動化する場合もありました。
開発者とテスターの違い
開発者とテスターの違いは、次に述べる3つの要因により、ゆっくりとなくなってきています。第1に、ソフトウェア品質の重要性が広く理解され、もはやこの仕事を能力のないテスターにアウトソースできなくなりました。
第二に、より能力のあるコンピュータサイエンティストがソフトウェアテストに加わるようになり、コード開発者のメンタルモデル、そしてコード開発と上手なテスト開発の間で起こる微妙な関係をより理解できるようになりました。
例えば、Javaで単独のメソッドをコーディングしている開発者は、そのメソッドの実行、さまざまなエラーコードを返すメソッドの原因となる可能性がある例外条件、そしてコードの他の部分との相互作用を一番理解する能力があります。従って、この開発者は、メソッドのコーディング時に、テストし、そのテストケースをコード化し、文書化するために適任です。
開発者とテスターとの役割間の差異についての議論は、それぞれの役割に帰属するテストケースの異なる種類を考慮しなければ不完全です。