Column

コラム
2022.11.28 システム開発

システム開発における「テスト工程」とは?

テストと聞くと気が重いなと思ってしまう方は私だけではないと思います。
なぜ気が重いかというと何かを生産するわけでもないのにとても時間がかかり、出来ているはずの機能ができていなかった時に気が滅入るからです。
しかし、テストはとても重要です。要件定義などの上流工程の次に重要だと私は思います。
開発会社がテストしてるから大丈夫だろうと思って開発会社に任せておけば大丈夫という方もおられるかと思いますが、そんなことはありません。
プロジェクトを成功させるためには依頼者も積極的にテストに参加するべきだと私は考えます。
どんなテストがあるか、そこで何をしているか、完全に把握する必要はありませんが、自分の関わるテストがどんなもので、自分が実施するテストの前にどんなテストを経てきたのか、想像できるようになりたいですね。
この記事ではテスト工程をV字モデルの考え方に沿って解説します。

この記事の目次
  • 受け入れテスト
  • システムテスト
  • 結合テスト
  • 単体テスト
  • 最後に

受け入れテスト

実施者: 依頼者

実施タイミング: システムテストが終わり依頼者に納品される前

目的: 依頼者の要求をシステムが満たしているか確認する

 

受け入れテストは要求定義と対応していて、要求定義で定義されている依頼者の要求をシステムが満たしているか確認します。

 

実際の使用を想定して役割を決めてシステムを動かしてみるロールプレイングを実施するなど、実際の使用を想定したテストを実施します。

 

また、実際にシステムを使用するユーザーとしてシステムを利用して、ユーザーの目的を意図したとおりに達成できるかテスト(ユーザービリティテスト)します。受け入れテストが終わるとやっとリリースすることが出来ます。リリース前の最後のテストです。

システムテスト

実施者: プロダクトマネージャー、QA、依頼者

実施タイミング: 受け入れテスト前

目的: 要件定義で定義された要件をシステムが満たしているか確認する

 

総合テストは要件定義に対応していて、定義された要件を開発したシステムが満たしているかテストして確認します。

 

総合テストの中には要件定義書をもとにしたテストの他、操作性テスト、負荷テスト、セキュリティテストなども行われます。

 

操作性テストは前述の受け入れテストでも行われますが、受け入れテストのタイミングで変更があってもスケジュール的に対応が難しいことが多々あります。

 

システムテストの段階であれば対応できることも増えるので、依頼者がシステムテストに参加できるようであれば積極的に参加しましょう。

 

実際に運用されるデータに近いデータを使うことが多く、データ不整合などのバグを見つけたりします。開発側は最後のテスト工程になります。

結合テスト

実施者: QA

実施タイミング: システム開発が終わった後

目的: バラバラに作られたプログラムを結合して一緒に動かした際に基本設計どおりに動作するか確認する

 

 

システム開発というのはイメージしづらいと思いますが、複数のエンジニアがプログラムの部品をバラバラに作り、バラバラに作られた部品を組み合わせてシステムを構築していきます。

 

開発中だと部品として開発するので、他の部品とうまく組み合わせることが出来るか実際にはわかりません。

 

もちろん単体テストは実施しているので、うまく組み合う前提でプログラミングしていくのですが、実際には結合してみるとうまく動かず、プログラムの修正が必要になったりします。

 

また、部品を組み合わせてみると予期せぬ箇所でバグが発生したりもします。

単体テスト

実施者: QA、デベロッパー

実施タイミング: 分解された一つのプログラムが完成した後

目的: プログラムが詳細設計通りに動作するか確認する

 

プログラムを作成した後にデベロッパー自身もしくはQAが実施します。

 

小さな範囲を対象にして行う為、後に実施するテストより複雑性が低く、テストケースが単純にでき、バグを見つけやすいテスト工程です。

 

しかしデベロッパーだけに任せると軽視されやすいテスト工程でもあり、単体テストをすり抜けて後からバグが発覚すると、修正する工数が壮大する傾向があります。

 

工数をかけてしっかりテストするほうが質の高いシステムができ、工数も減るのではないかと思います。

 

単体テストを自動化することも行われており、テストを自動化する工数はかかるのですが、改修を加えながらずっと使っていくシステムであれば、改修の度にかかる単体テスト工数を減らすことが出来るので結果的に工数の削減ができ、システムの質も向上する可能性があります。

 

単体テストの自動化に向いているプロジェクト、向かないプロジェクトもあるので開発会社へ相談してみると良いかもしれません。

ざっくりとテスト工程について解説してきましたが、どのテスト工程も重要だと再認識しました。

 

特に依頼者側だと開発には参加できないのでテストに参加することがプロジェクトを成功させる一因になると思います。

 

他の記事でも書いていますがシステム開発を成功させるには依頼者側の積極的な関与が必要です。

 

システム開発の中で依頼者が実際に関与できる工程は大きく要件定義と受け入れテストになります。積極的に、当事者意識を持ってプロジェクトを成功させましょう。