2. The Fitness Function Testing Pyramid: An Analogy for Architectural Tests and Metrics
適応度関数(Fitness Function)は、ソフトウェアシステムのメトリクスを定義するために使えるシンプルな手法。
進化的アーキテクチャでは、「見込みのある設計ソリューションが、設定した目的の達成にどれだけ近いかを要約するために使用する目的関数」と定義している。
適応度関数とメトリクスをテストピラミッドの概念と合わせることによって、メトリクスを定義し、優先順位をつけ、バランスを取って、目的に対する進捗を計測できるようになる。
2.1 Fitness Functions and Metrics
適応度関数コンテキストは、テストに影響を与える環境や定義、制限などについての追加情報。
アーキテクチャテストは、対象メトリクスを生成した上で、それがしきい値以上(or 以下)であるかを検証する。一般にCIのワークフローの一部として実行される。
ユニットテストのカバレッジ 90%を目標とする適応度関数の例:
- 対象メトリクス
- ユニットテストのテストカバレッジ > 0.9
- コンテキスト
- 各CIビルドで実行。
- 目標カバレッジを下回った場合は失敗する。
2.2 Introduction to Fitness Function Categories
適応度関数の区分は、適応度関数や対象メトリクスの定義、アーキテクチャテストを実装するためのガイドとして役立つ。
6つの必須カテゴリと4つの任意カテゴリに分けられる。
| 必須カテゴリ | 取り得る値 | 説明 | | — | — | — | | フィードバックの幅 | アトミック or ホリスティック(全体的な) | システムのどの範囲からフィードバックを得るか。システムの限られた部分か、システム全体か。 例 アトミック: 静的コード解析、ユニットテストカバレッジなど ホリスティック: エンドユーザの結果など | | テスト実行のトリガー | トリガー or 継続的 | CIや夜間実行などでトリガーされるか、開発アクティビティに関係なく定期的に実行されるか。 | | テストの実行箇所 | CI/CD, テスト環境, プロダクションシステムなど | アーキテクチャテストはどこで実行されるか。 | | メトリクスのタイプ | True/false, 離散値, 時系列/ヒストリカルデータ | アーキテクチャテストの対象メトリクスのタイプ | | 自動化 | 自動 or 手動 | 自動か手動か | | 品質特性 | IS特性: 機能適合性、パフォーマンス効率性、互換性、使いやすさ、信頼性、セキュリティ、保守性、ポータビリティ | プロダクトの機能要件、システムが備えるべき追加の質的要件。 |
| 任意カテゴリ | 取り得る値 | 説明 |
|---|---|---|
| 一時的か永続的か | Temporary or Permanent | 用途が限定的なら一時的、そうでなければ永続的 |
| 静的か動的か | Static or Dynamic | 対象メトリクスが静的か動的か |
| 対象ユーザ | 例: 開発者、運用者、プロダクトオーナー | 誰が対象か |
| 適用性 | 例: 特定の技術、システムの特定領域(特定のサービス) | 適応度関数の適応範囲 |
2.3 The Testing Pyramid
テストピラミッドは、自動テストを3つの層に分類するために用いられる概念。
テストと自動化の労力をどこに割くべきかを決定するのに使われる。
実行時間と保守コストに合わせて最下層、中間層、最上層に分けられる。
| レイヤー | テストピラミッド |
|---|---|
| 最上層 | ユニットテスト |
| 中間層 | 統合テスト |
| 最下層 | E2Eテスト、UIテスト |
2.4 The Fitness Function Testing Pyramid
適応度関数テストピラミッドは、上記テストピラミッドを適応度関数とアーキテクチャメトリクスに適応させたもの。
実行速度に関連する「フィードバックの幅」と「テスト実行のトリガー」が関連するカテゴリ。
つまり、実行コストが高く、システム全体のフィードバックが広いほど困難なので上位の層になる。
| レイヤー | テストピラミッド |
|---|---|
| 最上層 | ホリスティックかつ継続的 |
| 中間層 | ホリスティックかつトリガー、または、アトミックかつ継続的 |
| 最下層 | アトミックかつトリガー |
2.5 Examples and Their Full Categorization / 2.6 Fully Categorizing Top-Layer Examples
ユニットテストのカバレッジをテストする適応度関数の例:
| カテゴリ | 結果 |
|---|---|
| フィードバックの幅 | アトミック |
| テスト実行のトリガー | トリガー式 |
| テストの実行箇所 | CI/CD |
| メトリクスのタイプ | 特定の値(>90%) |
| 自動化 | 自動 |
| 品質特性 | 保守性 |
| 静的か動的か | 静的 |
アトミックかつトリガーなので、適応度関数のピラミッドの最下層に位置することになる。
2.7 Developing Your Fitness Functions and Metrics
適応度関数の開発の流れ
- 主要なステークホルダーと最も重要な品質特性を決め、アーキテクチャ上の目標を設定し、それを文章化する。
- 適応度関数とその対象メトリクスのドラフトを作成する。
- 現時点で重要でテスト可能な適応度関数に優先順位をつける。
- 選択した適応度関数の中で定義が未完成なものを定義する。
- メトリクスを生成する自動テストを開発する。
- 可視化する。
- 必要に応じてイテレーションを回す。