ソフトウェアの品質特性モデルのISO/IEC9126とISO/IEC25010を学んだまとめ

# はじめに

ソフトウェア品質のISO/IEC9126をより改定したISO/IEC25010が登場したことを知りました。
両者を比較して学んだ学習の軌跡をここにまとめます。

---

## ISO/IEC9126とは

ISO9126は、ソフトウェアの品質を表す特性を定めた国際規格です。 
品質を表す特性を品質特性と呼び、6つの品質特性に分類され、品質特性はさらに27の副特性に分類されています

---

![ISO-IEC9126.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150628/9b201527-27f2-28b8-ce3e-8a4aa6ca69ce.jpeg)

<details><summary>各品質特性</summary>

## ISO/IEC9126

- 機能性：指定された条件下で、ソフトウェアがユーザニーズを満たすために提供する能力
    - 合目的性
    - 正確性
    - 相互運用性
    - 機密性
    - 標準適合性
- 信頼性：指定される条件下でソフトウェアがパフォーマンスレベルを維持する能力。パフォーマンスレベルというのは、機能性で規定された機能に対する、効率性で規定されたレベルを指しています。
    - 成熟性
    - 障害許容性
    - 回復性
    - 標準適合性
- 使用性：ソフトウェアがユーザにとって使いやすいかを表します。
    - 理解性
    - 習得性
    - 運用性
    - 注目性
    - 標準適合性
- 効率性：定された条件下で、ソフトウェアがメモリやハードディスクなどのコンピュータ資源を適切に利用し、期待されるパフォーマンスを提供する能力
    - 時間効率性
    - 資源効率性
    - 標準適合性
- 保守性：障害の発生、実行環境の変更、機能変更などの必要が生じた時に、ソフトウェアの保守のやりやすさ
    - 解析性
    - 変更性
    - 安定性
    - 試験性
    - 標準適合性
- 移植性：ソフトウェアの異なる環境への移しやすさ
    - 環境適応性
    - 設置性
    - 共存性
    - 置換性
    - 標準適合性

</details>

---

## ISO/IEC25010（SQuaRE）とは

2011年には、インターネット利用の普及によるセキュリティ及び相互接続を重視して、
ISO/IEC9126よりかなり変更を加えて刊行されたシステム及びソフトウェアを主に対象とした品質モデルです。
8つの品質特性に分類され、品質特性はさらに31の副特性に分類されています

---

![ISO-IEC25010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150628/dce4b9b8-0152-cb08-d0b8-5806ab165e28.jpeg)

<details><summary>ISO/IEC25010（SQuaRE）とは</summary>

- 機能適合性：ある状況で使用するとき、明示・暗黙にかわらずニーズを満足させる機能を、製品またはシステムが提供する度合いであり、機能仕様ではなくニーズであることが重要である
    - 機能完全性：ソフトウェアが必要なすべての機能を提供し、それらがすべて正しく動作すること
    - 機能性格性：ソフトウェアが提供する機能が、正確な結果を生成すること。正確性は、機能の動作が正しいかどうかにも関係している。
    - 機能適切性：ソフトウェアが提供する機能が、ユーザーのニーズや要件に合致すること
- 性能効率性：ある条件で使用する資源の量に関係する性能の度合いであり、理解しやすい品質測定量である
    - 時間効率性：ソフトウェアが要求された処理を可能な限り早く実行できるかどうかを評価したもの
    - 資源効率性：ソフトウェアが必要な処理を実行するために必要なリソース（CPU、メモリ、ネットワーク帯域幅など）を適切に利用する能力を評価したもの
    - 容量満足性効率性：ソフトウェアが必要な処理を実行するために必要な容量（データストレージなど）を適切に利用する能力を評価したもの
- 互換性：同じ環境を共有する間、製品、システムなどが他の製品、システムなどとの情報交換できる度合い、またはその機能を実行できる度合いである
    - 共存性：ソフトウェア製品が他のソフトウェアやハードウェアと一緒に存在できるかどうかを評価したもの
    - 相互運用性：異なるソフトウェア製品やハードウェアとの間でデータやサービスを共有できるかどうかを評価したもの
- 使用性：有効性、効率性及び満足性をもって目標を達成するために、利用者が製品またはシステムを利用することができる度合いである
    - 適切度認識性：ユーザがシステムの目的や機能、使用方法を理解できるかどうかを表したもの。具体的には、操作方法や機能の説明、アイコンやラベルの適切さ、コンテキストメニューの提供、ユーザマニュアルの存在などが含まれる。
    - 習得性：ユーザがシステムの操作方法を習得するために必要な時間や労力を表したもの。具体的には、ナビゲーションの直感的さ、コマンドの覚えやすさ、エラーメッセージの明瞭さなどが含まれる。
    - 運用操作性：ユーザがシステムを正しく効果的に使用するために必要な操作の容易さや正確性を表したもの。具体的には、エラー回避の仕組み、コマンドの一貫性、データ入力の正確性、作業フローの効率性などが含まれる。
    - ユーザエラー防止性：ユーザがシステムを誤った操作をした場合に、エラーが発生することを防止するための機能を表したもの。具体的には、操作の取り消し機能、エラーメッセージの表示、データ入力の正確性の検査、データ保護の機能などが含まれる。
    - ユーザインターフェース快美性：ユーザがシステムを使用する際に、視覚的に魅力的であること、直感的でわかりやすいこと。ユーザインターフェースが美しくデザインされ、直感的で使いやすい場合、ユーザはシステムを好む傾向がある。これにより、ユーザはシステムの使用を継続する可能性が高くなる。
    - アクセシビリティ：障害を持つ人や高齢者などの、利用者の多様性を考慮したシステムの利用性。アクセシビリティが高いシステムは、異なるユーザにとって、簡単に使用可能であることが求められる。
- 信頼性：明示された条件で、システム、製品などが明示された機能を実行できる度合いで、耐故障性や可用性などはなじみのある品質副特性であり、MTBF や平均回復時間などもよく目にする品質測定量である
    - 成熟性：ソフトウェアが長期間にわたって安定して動作することを示す品質副特性。成熟性が高いソフトウェアは、バグやエラーが少なく、予測可能な動作をするため、信頼性の高いシステムを構築することができる。
    - 可用性：ソフトウェアが必要な時に必要な機能を提供できることを示す品質副特性。稼働時間が長いソフトウェアは、ユーザーが望む時にアクセスできるため、高い生産性や効率性を実現することができる。
    - 障害許容性（耐故障性）：ソフトウェアが予期しない状況下で正常に動作を維持できることを示す品質副特性。障害許容性が高いソフトウェアは、システムがクラッシュしたり停止することがないため、ユーザーにとってストレスの少ない操作が可能となる。
    - 回復性：ソフトウェアが障害やエラー発生後に正常な状態に復旧することができることを示す品質副特性。回復性が高いソフトウェアは、障害やエラーが発生した場合でも、短時間で正常な状態に戻すことができるため、ビジネスプロセスの中断を最小限に抑えることができる。
- セキュリティ：人間、製品若しくはシステムが、認められた権限に応じたデータアクセスができ、情報及びデータを保護する度合いであり、近年非常にその重要性を増している。SQuaREシリーズでも新たに大幅な改訂が加えられた品質特性である
    - 機密性：ソフトウェアやそのデータが、不正なアクセスや使用から保護されることを示す品質副特性。機密性が高いソフトウェアは、機密情報が漏洩することなく安全に保管されるため、セキュリティリスクを軽減することができる。
    - インテグリティ：ソフトウェアやそのデータが、正確性、完全性、信頼性を維持することを示す品質副特性。インテグリティが高いソフトウェアは、データの改ざんや偽装がないため、信頼性が高く安心して利用することができる。
    - 否認防止性：ソフトウェアが実行されたことや情報の送信が行われたことを否認できないことを示す品質副特性。否認防止性が高いソフトウェアは、情報の改ざんや偽装がないため、トラブルの際に問題の原因を特定しやすくなる。
    - 責任追跡性：ソフトウェアが実行された時点での情報を追跡し、適切な人物や組織が責任を負うことができるようにする品質副特性。責任追跡性が高いソフトウェアは、不正行為やセキュリティインシデントが発生した場合に、適切な対応や責任の所在を特定することができる。
    - 真正性：ソフトウェアやそのデータが、信頼できる情報源から提供されたものであることを示す品質副特性。真正性が高いソフトウェアは、信頼性が高く、偽造や改ざんされた情報を受け取るリスクを軽減することができる。
- 保守性：製品やシステムを修正することができる有効性や効率性の度合いである
    - モジュール性：ソフトウェアが機能単位に分割され、各モジュールが独立していることを示す品質副特性
    - 再利用性：ソフトウェアが他のシステムやプロジェクトで再利用されることができることを示す品質副特性
    - 解析性：ソフトウェアが解析や修正が容易であることを示す品質副特性
    - 修正性：ソフトウェアに問題があった場合に、適切に修正できることを示す品質副特性
    - 試験性：ソフトウェアがテストしやすく、テストの範囲が明確であることを示す品質副特性
- 移植性：ある運用環境または利用環境からその他の環境に、システム、製品などを移すことができる有効性や効率性の度合いである
    - 適応性：ソフトウェアが異なる環境やプラットフォームで動作する能力を示す品質副特性
    - 設置性：ソフトウェアが環境やプラットフォームに簡単にインストールできることを示す品質副特性
    - 置換性：ソフトウェアが他のソフトウェアと置き換え可能であることを示す品質副特性。置換性が高いソフトウェアは、同等の機能を提供する他のソフトウェアと簡単に置き換えることができるため、ユーザーにとって選択肢が広がる。また、新しい技術やプラットフォームに対応できる柔軟性を持つソフトウェアも置換性が高いと言える。

</details>

---

# ISO/IEC9126とISO/IEC25010の比較

|<br/>変更|ISO/IEC25010<br/>品質特性|<br/>副特性|<br/>⇔|ISO/IEC9126<br/>品質特性|<br/>副特性|
|:---:|---|---|---|---|---|
|追加|機能適合性|機能完全性||||
||機能適合性|機能正確性||機能性|正確性|
||機能適合性|機能適切性||機能性|合目的性|
||性能効率性|時間効率性||効率性|時間効率性|
||性能効率性|資源効率性||効率性|資源効率性|
|追加|性能効率性|容量満足性||||
|変更|互換性|共存性||移植性|共存性|
|変更|互換性|相互運用性||機能性|相互運用性|
||使用性|適切度認識性||使用性|理解性|
||使用性|習得性||使用性|習得性|
||使用性|運用操作性||使用性|運用性|
|追加|使用性|ユーザエラー防止性||使用性||
||使用性|ユーザインタフェース快美性||使用性|魅力性|
|追加|使用性|アクセシビリティ||使用性||
||信頼性|成熟性||信頼性|成熟性|
|追加|信頼性|可用性||信頼性||
||信頼性|障害許容性||信頼性|障害許容性|
||信頼性|回復性||信頼性|回復性|
|変更|セキュリティ|機密性||機能性|セキュリティ|
|追加|セキュリティ|インテグリティ||||
|追加|セキュリティ|否認防止性||||
|追加|セキュリティ|責任追跡性||||
|追加|セキュリティ|真正性||||
|変更|保守性|モジュール性||保守性|安定性|
|追加|保守性|再利用性||||
||保守性|解析性||保守性|解析性|
|変更|保守性|修正性||保守性|変更性|
||保守性|試験性||保守性|試験性|
||移植性|適応性||移植性|環境適応性|
||移植性|設置性||移植性|設置性|
||移植性|置換性||移植性|置換性|

---

## 差分

### 機能適合性：機能完全性
> ソフトウェアが必要なすべての機能を提供し、それらがすべて正しく動作することを指します。

機能正確性では正確かどうかを、機能適切性では要求に沿っているかを表す指標に対して
機能完全性ではシステム全体の機能の完成度を表す指標となる。
完成度の高いシステムはユーザーへ高い価値を適用することができる。

### 性能効率性：容量満足性
> ソフトウェアが必要な処理を実行するために必要な容量（データストレージなど）を適切に利用する能力を評価します。

時間効率性では動作の所要時間を、資源効率性ではリソース（CPU、メモリ、ネットワーク帯域幅など）効率を表す指標に対して
容量満足性ではソフトウェアが処理を実行する際に必要な容量（データストレージなど）を最小限に抑えることができるかどうかを表す指標となる。
データベースが最適化されたシステムは容量満足性が高い。

### 使用性：ユーザエラー防止性
> ユーザがシステムを誤った操作をした場合に、エラーが発生することを防止するための機能を表します。

ユーザエラー防止性を表すものとして、具体的には、操作の取り消し機能、エラーメッセージの表示、データ入力の正確性の検査、データ保護の機能などが含まれる。

### 使用性：アクセシビリティ
> 障害を持つ人や高齢者などの、利用者の多様性を考慮したシステムの利用性を指します。

様々なユーザーでも利用できるかを表す指標。
たとえば、視力に問題があるユーザは、大きなフォントを使用したテキストを好みます。また、聴覚に問題があるユーザには、音声による代替手段が必要です。

### 信頼性：可用性
> ソフトウェアが必要な時に必要な機能を提供できることを示す品質副特性です。

具体的には連続稼働時間の長さ、バッチ処理の実行頻度の多さなどが含まれる。
可用性が高いソフトウェアは、ユーザーが望む時にアクセスできるため、高い生産性や効率性を実現することができる。

### 保守性：再利用性
> ソフトウェアが他のシステムやプロジェクトで再利用されることができることを示す品質副特性です。

プログラムが適切な単位で分割されており、必要な時に必要な分だけを共有して再利用できる状態を表す。
再利用性が高いソフトウェアは、新しいシステムやプロジェクトの開発コストや期間を削減することができる。

### セキュリティ：インテグリティ
> ソフトウェアやそのデータが、正確性、完全性、信頼性を維持することを示す品質副特性です。

機密度との反対の意味を表すもの。具体的には許可されていない人がプログラムから特定のデータを参照すること変更することができないことで、機密性の高いシステムとなる

### セキュリティ：否認防止性
> ソフトウェアが実行されたことや情報の送信が行われたことを否認できないことを示す品質副特性です。

否認防止性が高いソフトウェアは、情報の改ざんや偽装がないため、トラブルの際に問題の原因を特定しやすくなります。
認証、署名、監査などのセキュリティ対策が影響します。

### セキュリティ：責任追跡性
> 責任追跡性とは、ソフトウェアが実行された時点での情報を追跡し、適切な人物や組織が責任を負うことができるようにする品質副特性です。

責任追跡性が高いソフトウェアは、不正行為やセキュリティインシデントが発生した場合に、適切な対応や責任の所在を特定することができます。ログ管理、トレース、監査などのセキュリティ対策が影響します。

### セキュリティ：真正性
> ソフトウェアやそのデータが、信頼できる情報源から提供されたものであることを示す品質副特性です。

正性が高いソフトウェアは、信頼性が高く、偽造や改ざんされた情報を受け取るリスクを軽減することができます。
データの署名、認証、暗号化などのセキュリティ対策が影響します。

---

# 参考文献・引用資料

- [システム・ソフトウェア品質標準SQuaRE シリーズの歴史と概要](https://www.ipa.go.jp/archive/files/000065855.pdf)
- [システム及びソフトウェアの品質測定量とその測定方法](https://www.ipa.go.jp/archive/files/000065866.pdf)

https://ja.wikipedia.org/wiki/ISO/IEC_9126

https://www.ogis-ri.co.jp/otc/hiroba/technical/JavaPress_ISO9126/

https://emgr.jp/iso-iec-25010/

https://kikakurui.com/x2/X25010-2013-01.html