内部品質について考えてみた
概要
@t_wada さんの「質とスピード」の講演をきっかけに講演内容の復習と JIS X 25010:2013のソフトウェア品質項目から、下記 5 つの項目が内部品質の主要構成になっているという整理を行いました。「内部品質を上げる」施策を考えるときにはどの要素にアプローチしているかまで開発チームで議論できるとより良くなると考えています。
ソフトウェアの主な内部品質を構成する5つの要素
- モジュール性 (modularity)
- 再利用容易性 (resability)
- 解析容易性 (analysability)
- 変更容易性 (modifiability)
- テスト容易性 (tesability)
きっかけ
きっかけは質とスピード(2020 秋 100 分拡大版)講演を聞いたことです。
講演中にタイトルの「質」が「内部品質」にドン!と変わるところが印象的で、
講演後しばらくは「内部品質」という言葉がマイブームになりました。
講演を通じて今までの自分にはなかった概念に感動するまでは良かったのですが、1 度しか講演を聞いていない自分は内部品質という言葉の意味をよく理解できていないまま雰囲気で使ってしまっていることに気付いてしまいました。自分の中で「内部品質」が 1 人歩きしていたのです。もう少し理解度を上げる必要があると感じ、改めて講演資料を見直しました。
講演の復習
講義スライドを改めて確認すると、24 ページ目でスピードとトレードオフに考えられてしまいがちな内部品質の中の特に保守性に注目し、
それらはテスト容易性、理解容易性、変更容易性で構成されていると説明されていました。
スライドでも保守性とスピードという対比もされていました。
結論は両者はトレードオフでなく、むしろ保守性を上げるとスピードは上がる関係になっています。
内部品質は主にテスト容易性、理解容易性、変更容易性で構成されているということが分かったので、これにて一件落着…としても良かったのですが、次は改めて自分の手で内部品質という言葉を検索しました。
JIS のソフトウェア品質
引き続き調査をすると、JIS(Japanese Industrial Standarts: 日本産業規格)でソフトウェアの品質が定められていることがわかりました。具体的にはJIS X 25010:2013とJISX0129-1:2003が該当しました。
前者は後者の後継規格になっているので、本記事はJIS X 25010:2013に注目して品質の項目を確認します。
ここでも外部品質と内部品質に言及されており、さらに保守性とそれを構成する要素が定義されていました。先ほど復習した講演内容に倣って、内部品質の主な要素である保守性に注目します。
JIS X 25010:2013の4.2.7保守性
の記述を引用します。
4.2.7 保守性(maintainability)
意図した保守者によって,製品又はシステムが修正することができる有効性及び効率性の度合い。
かなり大まかな説明でこれだけだと具体的なイメージがつかないので、保守性を構成する4.2.7.1 モジュール性
から4.2.7.5 試験性
までの記述を引用しながらこれらを改善する施策は何か考えてみます。
4.2.7.1 モジュール性(modularity)
一つの構成要素に対する変更が他の構成要素に与える影響が最小になるように,システム又はコンピュータプログラムが別々の構成要素から構成されている度合い。
これに対する開発視点の施策は、影響範囲の小さくなるような設計などが相当すると思います。共通メソッドを極力使用しないなど一言で言うと疎結合化することかなと思いました。
4.2.7.2 再利用性 (resability)
一つ以上のシステム、又は他の資産作り、資産を使用することができる度合い。
これに対する開発視点の施策はコンポーネント化などが相当すると思いました。モジュール性と若干重なる感もあります。
4.2.7.3 解析性(analysability)
製品若しくはシステムの一つ以上の部分への意図した変更が製品若しくはシステムに与える影響を総合評価すること,欠陥若しくは故障の原因を診断すること,又は修正しなければならない部分を識別することが可能であることについての有効性及び効率性の度合い。
注記 故障又はその他の事象の発生以前に,製品又はシステムが自分自身の障害を分析し,報告書を提供するための仕組みを提供することを,実装に含めてもよい。
これに対する開発視点の施策は、エラーハンドリングやログ設計をきちんと行うことなどが相当すると思いました。コーディング規約やソースコードレビュー観点に入れて担保する認識です。
4.2.7.4 修正性(modifiability)
欠陥の取込みも既存の製品品質の低下もなく,有効的に,かつ,効率的に製品又はシステムを修正することができる度合い。
注記 1 実装には,変更についてのコーディング,設計,文書作成及び検証を含む。
注記 2 モジュール性及び解析性は,修正性に影響することがある。
注記 3 修正性は,変更性と安定性との組合せである。
これに対する開発視点の施策は、テストコードの作成やドキュメント作成による仕様の透明性などが相当すると思いました。
4.2.7.5 試験性(testability)
システム,製品又は構成要素について試験基準を確立することができ,その基準が満たされているかどうかを決定するために試験を実行することができる有効性及び効率性の度合い。
これに対する開発視点の施策は、テストカバレッジ率や担保を必須とする機能を決めることなどが相当すると思いました。担保の手段として自動テストの作成やカバレッジ確認ツールの導入も該当する認識です。
JIS X 25010:2013 の(~ability)に「容易性」という訳を採用する
JIS X 25010:2013によると、保守性を構成する要素は下記の5つであることが分かりました。
- モジュール性(modularity)
- 再利用性 (resability)
- 解析性(analysability)
- 修正性(modifiability)
- 試験性(testability)
さらに t_wada さん講演スライドの日本語訳を参考にし、「~ability」に対して「容易性」という日本語を対応させます。
- モジュール性(modularity)
- 再利用容易性 (resability)
- 解析容易性 (analysability)
- 変更容易性(modifiability)
- テスト容易性(testability)
t_wada さんのスライドと比較すると、テスト容易性(testability)と変更容易性(modifiability)は一致しており、理解容易性(Understandability)を 3 要素に分割した形になりました。
まとめ
JIS X 25010:2013と質とスピード(2020 秋 100 分拡大版)の保守性の定義を組み合わせて、
下記 5 項目を内部品質 ≒ 保守性として考え、開発チームで改善活動の目的を考える際は内部品質のどの項目に対する施策かまで議論できればより良くなるのかなと思いました。
- モジュール性(modularity)
- 再利用容易性 (resability)
- 解析容易性 (analysability)
- 変更容易性(modifiability)
- テスト容易性(testability)
Discussion