各テストの特徴

photo 1484480974693 6ca0a78fb36b

システム開発では何らかのテストを行う必要がありますが、どのテストをどの優先順位で着手したらいいのかを社内で判断するのは難しい事も多いはずです。

この記事では、Desnaが提供するQAアウトソースサービスを紹介します。

マニュアルテスト

マニュアルテストは文字通り、人力でマニュアルでテストを行います。ここでは実際にアプリを触っているユーザー視点でテストを行い、各テスト項目を洗い出しバグを発見していきます。

マニュアルテストでは以下の項目の一部や全てを行いテストを進めます。

スモークテスト
マニュアルテスト開始時に行うアプリの基本的な機能や安定性そのもののテストを行います。

仕様書に沿ったテスト
マニュアルや実装されているユーザーストーリーの詳細などがある場合は、それを参考にテスト項目をリストアップします。

探索テスト (Exploratory testing)
テスト対象に関するドキュメントが少ない場合、この手法でテストを行います。プロダクトの内容把握、テストの計画(テストケースのリストアップ)を同時に行います。

回帰テスト (Regression testing)
ソフトウェアに追加機能などの変更があった後、問題なく動作するかの確認を行います。

統合テスト
システム全体で動作させた時に、それぞれの機能同士が問題なく連動しているかのテストを行います。

システムテスト(総合テスト)
上記まではテスト環境で行いましたが、システムテストでは、本番環境を用意し、仕様で定義されたタスクをシステム全体で完了できるかをテストします。

受け入れテスト
本番環境で、実際のユーザーフローを作成し、業務を問題なく行えるかどうかの確認を行います。

パフォーマンステスト

ユーザーは動作しなかったり、ページロードに時間のかかるアプリを敬遠します。パフォーマンスの悪いシステムはユーザー減を意味し売上にも直接影響を及ぼします。

アクセスが急増したりユーザーが急に増えた場合に不安定にならないスケーラブルなシステムが達成されているかどうかをテストします。

パフォーマンステストでは以下の手法を用います。

ロードテスト
アクセス増の状況を作り出し、想定ユーザー数内でシステムが安定して動作するかを確認します。

ストレステスト
ユーザー数を極限まで増やしどこまでシステムが耐えられるかを検証します。

スケーラビリティーテスト
CPUの増強やアーキテクチャの変更がどれだけパフォーマンス増加に寄与するかを確認します。

ボリュームテスト
データベースやそれ以外の場所にこれまで保存されたデータがシステム全体のパフォーマンスに影響するかを確認します。

安定性テスト
72時間程度かけてシステムをテストし、継続的にシステムが動作するかを検証します。

コンフィギュレーションテスト
システムをソフトウェアとハードウェア両方の面から様々な設定でテストし、安定性を確認します。

セキュリティテスト

システム内のデータが悪意のある攻撃から守るためにセキュリティを保つことは言うまでもなくシステム運用の際の必須条件です。

以下の手法でセキュリティテストを行います。

脆弱性判断
ツールにより自動テストを行い、システムへの脆弱性を発見、重要度をつけたものをリストアップします。

コード分析
リリース後、コードレベルでの詳細な分析を行い、コード内にエラーやセキュリティに関する問題がないかどうかを確認します。

セキュリティ監査
顧客の業務フローやインフラ全体を対象にしたセキュリティ監査を行い、セキュリティーの要件に達しているかどうかの監査を行います。

ペネトレーションテスト
実際に想定されるシステムへの攻撃をホワイトハッカーがシミュレーションし、システム内へのアクセスが可能かどうかの検証を行いシステムへの脆弱性を発見します。

ソーシャルエンジニアリング
ペネトレーションテストのエンジニアが企業内の従業員になりすましてデータ漏洩やネットワークの悪用が可能かどうかを確認します。実際に問題が発生した際の企業の対応についてなどの検証も行います。

コンプライアンステスト
PCI DSS(日本カード情報セキュリティ協議会)のような、各業界で設定されているコンプライアンス標準に沿ってテスト作業を行います。

APIテスト

モダンなアプリはRESTやGraphQLなどを使いデータ取得や変更を行います。APIテストを行い、アプリからのリクエストに対してAPIが安定して動作することを確認します。

APIテストは以下の手法を用いて行います。

ユニットテスト
APIに関するコードの検証を行い、実際にAPIに対してリクエストを投げ、正常なレスポンスがあるかどうかテストします。

コンポーネントテスト
APIのあるmicroserviceをコンポーネント毎に分け、スタブやテストデータを用意しAPIの実装を変更前後での動作の確認を行います。

統合テスト
実際のシステム稼働時をシミュレーションしながらAPIをテストし、問題なく各APIが連携されるかのテストを行います。

パフォーマンステスト
APIエンドポイントに対して負荷をかけた状態でも安定して動作するかの検証を行い、ボトルネックやCPUへの負荷を明確にします。

テスト自動化

ここまで紹介した各テスト全てがソフトウェアで自動化可能です。自動化されたテストコードをDevOpsエンジニアが継続インテグレーションに統合することで、githubへのコードのpush時など特定のポイントや定期的にテストが実行されるようになります。

テスト自動化を行うことで以下のメリットがあります。

テスト実行の時間の短縮
自動化を行うことで、テストの実行時間がマニュアルテストに比べ大幅に短縮されます。

テストの継続実施
自動化されたテストは1日に何十回も走らせることができ、いち早くバグや不具合を感知します。

テスト対象領域の拡大
自動化したテストはマニュアルQAエンジニアが工数をかけてテストする必要はなく、マニュアルQAエンジニアは更にテスト対象範囲を増やすために工数を割くことができるようになります。

人的エラーの防止
コード化された自動化テストではテスト作業の際の人的ミスによる漏れや間違った操作が無くなります。

コスト削減
一度自動テストを作ってしまえば特に追加費用はかからず、マニュアルテストの様にテストの度に工数がかかる方法に比べ、コストを劇的に下げることが可能です。

最後に

この記事ではDesnaが提供している各QAサービスの種類の詳細のメリットや手法を紹介しました。この記事を読んだ後、どこからテストを開始したらいいかのもう少し具体的にイメージができるようになるかもしれません。

QAアウトソースサービスについては以下の問い合わせフォームからお気軽にご連絡ください。

アプリ開発・QAの相談など、フォームから気軽にお問い合わせください。