画面単体レベルで行いたい非機能観点のテスト

# はじめに

## 課題に感じていること
- 非機能観点のテストが、工程の後ろ寄せになることが経験的に多い
- が、実装/単体テスト時点で確認すべき事項はあるはず
- 実装/単体テスト時点で確認すべき事項をPJは明確にできていないのでは？

## 整理すること
この記事では、以下２点を書きます。
- フロントエンド機能の画面単体テストレベルで非機能観点のテストとして確認すべき事項はなにか
- 確認のために、どのような対策をとるか

# 本題

## 非機能とは

機能は「WHAT(何ができるのか)」に着目します。
非機能は「HOW(どのように動作するか)」に着目します。

つまり、非機能とは「WHAT(何ができるのか)」ではなく、「HOW(どのように動作するのか)」に着目したシステムの特性です。

## ISO/IEC 25010 品質特性

ISO/IEC 25010は、システムやソフトウェアの品質を評価するための国際標準であり、以下の品質特性を定義しています。

- 機能適合性：要求された機能が適切に提供されているか
- 性能効率：システムのリソース使用の効率性
- 互換性：他のシステムやデバイスとの互換性
- 使用性：使用の容易さや理解しやすさ
- 信頼性：システムの安定性と正確性
- セキュリティ：データ保護とアクセス制御
- 保守性：システムの変更や修正の容易さ
- 移植性：異なる環境への適応性

非機能テストでは、これらの特性を計測し、システムの総合的な品質を評価します。
例えば、性能テスト、セキュリティテスト、使いやすさの評価などが含まれます。
これらは、システムの効率性、安定性、信頼性など、ユーザーの満足度に直接影響する重要な要素です。
「非機能テスト」では、システム・ソフトウェアの様々な特性を計測し、総合的に判断します。

## 品質特性 - 品質副特性

さらにISO/IEC 25010 では品質特性のサブカテゴリとして「品質副特性」が定義されています。

| 品質特性     | 品質副特性       | 説明                                             |
|--------------|------------------|--------------------------------------------------|
| 機能適合性   | 機能完全性       | システムが全ての機能ニーズを満たすか             |
|              | 機能正確性       | 処理と出力のデータが正確か                       |
|              | 機能適切性       | システム機能が目的に合致しているか               |
| 性能効率性   | 時間効率性       | 応答速度と処理時間が適切か                       |
|              | 資源効率性       | CPU、メモリ、ディスク使用が効率的か             |
|              | 容量満足性       | システムの容量が最大限活用されているか           |
| 互換性       | 共存性           | 他のソフトウェアと共存できるか                   |
|              | 相互運用性       | 他のシステムや装置との連携が可能か               |
| 使用性       | 適切度認識性     | 利用者のニーズに適しているか                     |
|              | 習得性           | 使用方法が覚えやすいか                           |
|              | 運用操作性       | 効率的な操作が可能か                             |
|              | ユーザエラー防止性| 誤操作を防止できるか                             |
|              | ユーザインタフェース快美性 | 利用者が満足しているか                        |
|              | アクセシビリティ | すべてのユーザーが快適に使用できるか             |
| 信頼性       | 成熟性           | 障害発生時の機能停止を防げるか                   |
|              | 可用性           | システムの使用可能状態を維持できるか             |
|              | 障害許容性       | エラーが適切に表示され、対処できるか             |
|              | 回復性           | システムが障害から迅速に復旧できるか             |
| セキュリティ | 機密性           | 許可されたユーザーのみがアクセスできるか         |
|              | インテグリティ   | 不正アクセスを防止できるか                       |
|              | 否認防止性       | 利用事実の証明が可能か                           |
|              | 責任追跡性       | ログが追跡可能か                                 |
|              | 真正性           | システムやデータの本物であることが確認できるか   |
| 保守性       | モジュール性     | システムの構成要素が独立しているか               |
|              | 再利用性         | システムの要素が他のシステムで再利用可能か       |
|              | 解析性           | システムの障害を監視し、ログを取得できるか       |
|              | 修正性           | システムの修正が容易か                           |
|              | 試験性           | システムのテストが容易か                         |
| 移植性       | 適応性           | 異なる環境にシステムを適応させられるか           |
|              | 設置性           | システムのインストールが容易か                   |
|              | 置換性           | ソフトウェアのバージョンアップが容易か           |


# フロントエンドの画面単体テストレベルでの確認例

ISO/IEC 25010 品質特性に対し、
フロントエンド機能の画面単体テストレベルでの確認例を追加した表を以下に示します。
該当する確認がない場合はハイフンとしています。

| 品質特性     | 品質副特性       | フロントエンド単体レベルでの確認例 |
|--------------|------------------|-----------------------------------------------------|
| 機能適合性   | 機能完全性       | 各UIコンポーネントが要求された機能を満たしているか確認 |
|              | 機能正確性       | 入力値に基づいた出力結果が正しいか確認              |
|              | 機能適切性       | 画面要素がユーザーのタスクと目的に適しているか確認  |
| 性能効率性   | 時間効率性       | 画面要素のロード時間や応答速度を計測                |
|              | 資源効率性       | -                                                     |
|              | 容量満足性       | -                                                     |
| 互換性       | 共存性           | -                                                     |
|              | 相互運用性       | -                                                     |
| 使用性       | 適切度認識性     | ユーザーインターフェースの明瞭さを確認              |
|              | 習得性           | 画面操作の直感性を確認                               |
|              | 運用操作性       | ナビゲーションや操作の一貫性を確認                   |
|              | ユーザエラー防止性| 入力エラーのバリデーションメッセージを確認           |
|              | ユーザインタフェース快美性 | デザインの一貫性と視覚的な魅力を確認            |
|              | アクセシビリティ | キーボードナビゲーションやコントラストを確認         |
| 信頼性       | 成熟性           | -                                                     |
|              | 可用性           | -                                                     |
|              | 障害許容性       | -                                                     |
|              | 回復性           | -                                                     |
| セキュリティ | 機密性           | -                                                     |
|              | インテグリティ   | -                                                     |
|              | 否認防止性       | -                                                     |
|              | 責任追跡性       | -                                                     |
|              | 真正性           | -                                                     |
| 保守性       | モジュール性     | コンポーネントの独立性を確認                         |
|              | 再利用性         | -                                                     |
|              | 解析性           | -                                                     |
|              | 修正性           | コード変更の影響範囲を確認                           |
|              | 試験性           | テストの容易さを確認                                 |
| 移植性       | 適応性           | 異なるブラウザやデバイスでの表示を確認                |
|              | 設置性           | -                                                     |
|              | 置換性           | -                                                     |

# フロントエンドの画面単体レベルでの確認例

該当する確認がないものを除き、さらに確認方法の例を示します。

| 品質特性     | 品質副特性       | フロントエンド単体レベルでの確認例 | 確認方法 | テスト種別 | 参照ドキュメント | 判定基準 |
|--------------|------------------|-------------------------------------|----------|------------|-----------------|----------|
| 機能適合性   | 機能完全性       | 各UIコンポーネントが要求された機能を満たしているか確認 | ユーザーストーリーや要件仕様に基づいて、UIコンポーネントの機能をテスト | 単体テスト | 要件仕様書 | 全ての機能が100%要件を満たす |
| 機能適合性   | 機能正確性       | 入力値に基づいた出力結果が正しいか確認 | 単体テストを実施して、各コンポーネントの出力が仕様通りであるか検証 | 単体テスト | テストケース | 出力誤差率が0.01%未満 |
| 機能適合性   | 機能適切性       | 画面要素がユーザーのタスクと目的に適しているか確認 | ユーザーインターフェースのデザインと流れを評価 | ユーザビリティテスト | UI/UXデザインガイドライン | ユーザーテストでの満足度90%以上 |
| 性能効率性   | 時間効率性       | 画面要素のロード時間や応答速度を計測 | パフォーマンステストツールを使用して、応答時間やロード時間を測定 | パフォーマンステスト | パフォーマンステスト計画 | ロード時間が2秒未満 |
| 使用性       | 適切度認識性     | ユーザーインターフェースの明瞭さを確認 | UIの使いやすさを評価し、明瞭さを検証 | ユーザビリティテスト | UI/UXデザインガイドライン | ユーザビリティ評価でのスコア80%以上 |
| 使用性       | 習得性           | 画面操作の直感性を確認 | 新規ユーザーによるテストを実施し、操作の直感性を評価 | ユーザビリティテスト | ユーザビリティテスト計画 | 新規ユーザーの操作成功率95%以上 |
| 使用性       | 運用操作性       | ナビゲーションや操作の一貫性を確認 | UIの一貫性をチェックし、ユーザーフローを評価 | ユーザビリティテスト | UI/UXデザインガイドライン | 一貫性評価でのスコア85%以上 |
| 使用性       | ユーザエラー防止性| 入力エラーのバリデーションメッセージを確認 | フォームのバリデーションとエラーメッセージをテスト | ユーザビリティテスト | フォームデザインガイドライン | エラーメッセージの正確性100% |
| 使用性       | ユーザインタフェース快美性 | デザインの一貫性と視覚的な魅力を確認 | デザインガイドラインに基づいてUIの一貫性と魅力を評価 | デザインレビュー | デザインガイドライン | デザイン一貫性評価でのスコア90%以上 |
| 使用性       | アクセシビリティ | キーボードナビゲーションやコントラストを確認 | アクセシビリティガイドラインに従い、UIのアクセシビリティをテスト | アクセシビリティテスト | WCAG (Web Content Accessibility Guidelines) | WCAG 2.1準拠 |
| 保守性       | モジュール性     | コンポーネントの独立性を確認 | コードのモジュール性を検証し、依存関係を評価 | コードレビュー | アーキテクチャ設計文書 | 独立性評価でのスコア95%以上 |
| 保守性       | 修正性           | コード変更の影響範囲を確認 | コード変更後の回帰テストを実施 | 回帰テスト | テスト計画 | 回帰テスト成功率100% |
| 保守性       | 試験性           | テストの容易さを確認 | コードとテストの可読性および維持管理の容易さを評価 | テスト計画レビュー | テスト計画 | テスト実施時間の短縮率30%以上 |
| 移植性       | 適応性           | 異なるブラウザやデバイスでの表示を確認 | クロスブラウザテストとデバイス間テストを実施 | クロスブラウザテスト | テストケース | クロスブラウザ互換性95%以上 |


# Appendix

品質特性に対して行うテスト種別に対し、参照されるドキュメントのまとめ


| 品質特性     | 品質副特性         | 機能単位のテストレベルでの確認例 | テスト種別               | 参照ドキュメント             |
|--------------|--------------------|------------------------------------|-------------------------|-----------------------------|
| 機能適合性   | 機能完全性         | 機能単位での全てのユーザーストーリーの実装を確認 | ユーザーストーリーテスト   | [ユーザーストーリー仕様書]   |
|              | 機能正確性         | 各機能が正しいデータ処理と出力を行うか確認       | 単体テスト               | [機能仕様書]               |
|              | 機能適切性         | 各機能がユーザーの要求に応じて適切に動作するか確認 | 機能テスト               | [要件定義書]               |
| 性能効率性   | 時間効率性         | 機能の実行時間と応答時間を計測                   | パフォーマンステスト     | [性能要件定義書]           |
|              | 資源効率性         | 機能実行時のリソース使用量を評価                 | リソース使用テスト       | [リソース使用量基準書]     |
|              | 容量満足性         | 機能のデータ処理容量を評価                       | ストレステスト           | [容量基準書]               |
| 互換性       | 共存性             | 機能が他の機能やプロセスと共存できるか確認       | 互換性テスト             | [互換性基準書]             |
|              | 相互運用性         | 機能が他のシステムやAPIと適切に連携できるか確認  | インテグレーションテスト | [インターフェース仕様書]   |
| 使用性       | 適切度認識性       | 機能がユーザーの意図と一致しているか確認         | ユーザビリティテスト     | [ユーザビリティ基準書]     |
|              | 習得性             | 機能の使い方が直感的かどうか確認                 | ユーザビリティテスト     | [操作マニュアル]           |
|              | 運用操作性         | 機能の操作が一貫していて使いやすいか確認         | ユーザビリティテスト     | [ユーザインタフェース設計書] |
|              | ユーザエラー防止性 | 機能の使用中にユーザーが犯しやすいエラーを防止するか確認 | ユーザビリティテスト   | [エラー防止ガイドライン]   |
|              | ユーザインタフェース快美性 | 機能のUIが魅力的で使いやすいか確認              | ユーザビリティテスト   | [UIデザインガイドライン]   |
|              | アクセシビリティ   | 機能が様々なユーザーにとってアクセス可能か確認   | アクセシビリティテスト   | [アクセシビリティガイドライン] |
| 信頼性       | 成熟性             | 機能が頻繁に失敗せずに安定して動作するか確認     | 信頼性テスト             | [運用実績報告書]           |
|              | 可用性             | 機能が常時利用可能であるか確認                   | 可用性テスト             | [運用管理マニュアル]       |
|              | 障害許容性         | 機能に障害が発生した場合の処理を確認             | エラーハンドリングテスト | [障害管理マニュアル]       |
|              | 回復性             | 機能が障害から迅速に復旧するか確認               | 回復テスト               | [災害復旧計画書]           |
| セキュリティ | 機密性             | 機能がデータの機密性を保持するか確認             | セキュリティテスト       | [セキュリティポリシー]     |
|              | インテグリティ     | 機能がデータの完全性を維持するか確認             | セキュリティテスト       | [データインテグリティガイドライン] |
|              | 否認防止性         | 機能使用の追跡と証跡が残るか確認                 | セキュリティテスト       | [監査ログ管理マニュアル]   |
|              | 責任追跡性         | 機能の使用に関連するアクティビティが追跡可能か確認 | ログ分析テスト           | [ログ分析ガイドライン]     |
|              | 真正性             | 機能が正当なユーザーによってのみ使用されるか確認   | セキュリティテスト       | [アクセスコントロールポリシー] |
| 保守性       | モジュール性       | 機能が独立しており、他の機能と分離されているか確認 | 単体テスト               | [ソフトウェアアーキテクチャドキュメント] |
|              | 再利用性           | 機能のコンポーネントが他の場所で再利用可能か確認   | 単体テスト               | [コンポーネント仕様書]     |
|              | 解析性             | 機能の問題が分析しやすいか確認                     | 単体テスト               | [コードレビューガイドライン] |
|              | 修正性             | 機能の修正や拡張が容易か確認                       | 単体テスト               | [変更管理マニュアル]       |
|              | 試験性             | 機能が単体テストで容易に評価できるか確認           | 単体テスト               | [テストケース設計書]       |
| 移植性       | 適応性             | 機能が異なるプラットフォームやデバイスで動作するか確認 | 移植性テスト             | [プラットフォーム適合性レポート] |
|              | 設置性             | 機能の設置や設定が容易か
|              | 置換性             | ソフトウェアのバージョンアップが容易か