【コード・ソフトウェアの品質管理】概要説明リンク集

# はじめに
コードの試験性について興味を持ったことがきっかけで、ソフトウェア品質にかかわる国際標準規格 や ソースコードの品質にかかわる指標があることを知りました。
個人的に難解な内容だったため、わかりやすく説明しているサイトをまとめ、各サイトの難易度を主観で評価しました。

# ソフトウェア品質にかかわる国際標準規格
**ISO/IEC 25010:2011**
ソフトウェア全体の品質菅理の国際標準規格として定められています。
ISO/IEC 25010 を技術的内容及び構成を変更することなく作成した（日本語訳した）ものが JIS X 25010 です。

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

難易度：★★★★★

ISO/IEC 25010 には、主に2つのモデルが定義されています。
<br>
**製品品質モデル**
ソフトウェアやシステムの静的な特性（コード品質など）や動的な特性（動作中の性能や信頼性など）を評価するための基準です。
<br>

**利用時の品質モデル**
実際に製品をユーザーが利用する際の安全性や使い勝手の良さなどを評価するための基準です。

:::note warn
今回は**製品品質モデル**をメインに記載いたします。
:::

## 製品品質モデル

### 製品品質モデル全体
こちらでは**ISO/IEC 25010:2011**で規定されている製品品質モデルについて全体的に説明しているサイトのリンクを貼ります。
<br>

https://www.skygroup.jp/software/quality/article/01/

難易度：★★☆☆☆

<br>

https://colors.ambl.co.jp/product-model-quality-model-by-industory-tech/

難易度：★☆☆☆☆
<br>

https://www.qbook.jp/column/1790.html

難易度：★☆☆☆☆

### 製品品質モデルの8特性
製品品質モデルには8つの特性が定義されています。それぞれの特性についての説明を紹介します。
#### 機能適合性
製品が必要な機能を正確かつ完全に提供できているかを評価します。

https://wa3.i-3-i.info/word111295.html

難易度：★☆☆☆☆

<br>

https://emgr.jp/functional-suitability/

難易度：★★☆☆☆
<br>

#### 性能効率性
ソフトウェアが必要な処理を実行するために必要な時間、資源、容量などのリソースを効率的に利用できているかを評価します。

https://wa3.i-3-i.info/word111300.html

難易度：★☆☆☆☆

<br>

https://emgr.jp/performace-efficiency/

難易度：★★☆☆☆
<br>

#### 互換性
ソフトウェアやシステムが他のシステムや環境（ブラウザやOS、電子機器）と円滑に連携し、共存できるかを評価します。

https://emgr.jp/compatibility/

難易度：★★☆☆☆

#### 使用性
ユーザーの立場に焦点を当てており、製品が対象ユーザーや想定される状況下でどれだけ使いやすいかを評価します。

https://emgr.jp/usability/

難易度：★★☆☆☆

#### 信頼性
ソフトウェアやシステムが想定される状況下で、期待される機能を継続して提供し、安定して動作するかを評価します。

https://emgr.jp/reliability/

難易度：★★☆☆☆

#### セキュリティ
ソフトウェア・システムが情報を保護し、不正アクセスやデータ漏洩などのリスクからどれだけ守れるかを評価します。

https://emgr.jp/seven-elements-of-information-security/#toc2

難易度：★★☆☆☆
<br>

https://emgr.jp/three-elements-of-information-security/

難易度：★★☆☆☆

#### 保守性
ソフトウェア・システムが変更や修正にどれだけ対応しやすいかを評価します。

https://emgr.jp/maintainability/

難易度：★☆☆☆☆
<br>

https://www.veriserve.co.jp/asset/approach/column/software-quality/software-quality07.html

難易度：★★☆☆☆

#### 移植性
ソフトウェアが異なるコンピュータ環境やOSで動作するかを評価します。

https://emgr.jp/portability/#google_vignette

難易度：★★☆☆☆
<br>

https://trends.codecamp.jp/blogs/media/terminology216

難易度：★★★☆☆

# ソースコードの品質
高品質なコードはソフトウェアの保守性・信頼性・効率性を高め、セキュリティリスクを低減します。また、チームでの作業効率や拡張性を向上させ、長期的な運用コスト削減にも繋がります。

## ソースコードの品質 全体
こちらではソースコードの品質について全体的に説明しているサイトのリンクを貼ります。

https://aws.amazon.com/jp/what-is/code-quality/

難易度：★☆☆☆☆
<br>

https://www.in-com.com/ja/blog/the-role-of-code-quality-critical-metrics-and-their-impact/

難易度：★★★☆☆
<br>

https://codezine.jp/article/detail/17984

難易度：★★☆☆☆
<br>

https://codezine.jp/article/detail/18854

難易度：★★☆☆☆
<br>

https://hireroo.io/journal/tech/r4UVdT6P

難易度：★★★★☆
## ソースコードの品質を表す指標
### 複雑度
ソースコードの可読性や保守性を測る指標です。

https://note.milldea.com/posts/measure-code-complexity-to-maintainability

難易度：★★☆☆☆
<br>

主に以下2つの複雑度があります。
<br>
**循環的複雑度**
コードへのバグ混入率やテストコードの作成ケース数を測る指標となります。

https://qiita.com/yu-tarrrr/items/16749e02313109071338

難易度：★☆☆☆☆
<br>


**認知的複雑度**
開発者の視点から「コードの読みやすさ」や「理解のしやすさ」を測る指標となります。

[Cognitive Complexity でコードの複雑さを定量的に計測しよう | PPT](https://www.slideshare.net/slideshow/cognitive-complexity-149117241/149117241)

難易度：★☆☆☆☆
<br>

### コードチャーン
ソースコードがどれだけ頻繁に変更されたかを測定し、コードの保守性や信頼性を測る指標となります。

https://flatirons.com/blog/what-is-code-churn/

難易度：★★★☆☆
<br>

### NPath
コード内の条件分岐やネストされたロジックがどれだけ多くの異なる実行経路を作り出しているかを表し、コードの保守性を測る指標となります。

https://teratail.com/questions/57536

難易度：★☆☆☆☆
<br>

[NPath complexity and cyclomatic complexity explained | modess.io](https://modess.io/npath-complexity-cyclomatic-complexity-explained/)

難易度：★★★☆☆
<br>

## ソースコードの品質 その他
### コードスメル
ソースコードのあるべきではない状態のことです。
複数の要素からなるため調べるのが大変でしたが、下記サイトでまとめて記載されていました。

https://qiita.com/kayamin/items/7814a2344d90e613757d

難易度：★★☆☆☆

# 最後に
本記事では、ソースコードの品質やソフトウェアの品質管理に関するサイトをまとめてご紹介しました。新卒エンジニアという立場では、これらの知識が過剰に感じることもありますが、実際に日常業務に取り組んでいるだけでは得られない新しい視点や考え方に触れることができ、非常に有益でした。
今後はコード・ソフトウェアの品質を意識し、日々の業務に活かしていきたいと思います。
本記事に関する抜け漏れや、他の有益な情報があれば、ぜひコメントで教えていただけると嬉しいです。