このブログを検索

品質のよいソフトウェアの作り方

品質のよいソフトウェアを作成するためには、まず、
  1. ソフトウェア品質特性
  2. テストファースト(テスト駆動開発)
  3. リファクタリング
  4. ソフトウェアメトリックス
  5. ソースコードの依存関係の可視化
  6. 静的解析ツール
  7. 循環的複雑度
  8. 凝縮度
  9. 結合度
  10. OSS
といった言葉を知っておく必要があります。
(1) ソフトウェア品質特性について
ここでのポイントは、ソフトウェア品質特性には、「機能性」「信頼性」「使用性」「効率性」「保守性」「移植性」の6つの特性があるということである。
以下のサイトに詳しく説明されている。
外部品質、内部品質とは?ソフトウェア品質特性について
→ 国際規格や国内規格としては 「ISO/IEC 9126」 に登録されている。
[参考]
ISO(国際標準化機構)
IEC(国際電気標準会議)
なお、ソフトウェア品質特性については、以下のようにITパスポート試験でも取り扱っている。 → 「ITパスポート試験 用語辞典 ソフトウェア品質特性

(2) テストファーストについて
テストファーストは、テスト駆動開発と同じ意味である。
テスト駆動開発の説明は「テスト駆動開発 Wiki」 を参照のこと。
ソフトウェアのテストについては、以下の本をお勧めします。

  1. ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応
  2. 【この1冊でよくわかる】ソフトウェアテストの教科書―品質を決定づけるテスト工程の基本と実践
  3. はじめて学ぶソフトウェアのテスト技法
  4. 知識ゼロから学ぶソフトウェアテスト 【改訂版】
  5. [改訂版] 演習で学ぶソフトウェアテスト特訓150問 ~JSTQB認定テスト技術者資格FoundationLevel対応
なお、参考情報として「JSTQB認定テスト技術者資格 Foundation Level試験」というのもあります。
・「[改訂版] 演習で学ぶソフトウェアテスト特訓150問 ~JSTQB認定テスト技術者資格FoundationLevel対応
で問題を解いてみて、間違いが多いようであれば、一度JSTQBの本を読むことをお勧めします。

(3) リファクタリングについて
リファクタリングの説明は 「リファクタリング (プログラミング) Wiki」 を参照のこと。
かみ砕いていうと、機能を変えずに、保守しやすいようにソースコードを書き換えることである。
リファクタリングに関する本で有名な本は
・「リファクタリング(第2版): 既存のコードを安全に改善する (OBJECT TECHNOLOGY SERIES)
である。2019/12/1に第2版として出版された。(初版は2014/7/26に発売)

(4) ソフトウェアメトリクスについて
大阪大学大学院情報科学研究科 コンピュータサイエンス専攻の「井上研究室」では「ソフトウェア工学」の研究を行なっています。
その中の研究の一つに、「ソフトウェアメトリクスを用いた品質の測定」というものがあります。
どのようなメトリクスがあるかについては、
約100種類のメトリクス分析
を参照のこと。
代表的なメトリクスとしては、

  1. 規模を表すLOC(コード行数)
  2. サイクロマチック複雑度
  3. Essential複雑度
  4. LCOM(結合性の欠如)
  5. CBO(結合されたクラスの数
などがある。
プロジェクトのソースコードのメトリクスの可視化の例としては、以下が参考になる。
  1. メトリクス
  2. メトリクスの一覧

(5) ソースコードの依存関係の可視化
ここでは、ソースコードの依存関係の可視化に役立つOSS「Sourcetrail」について紹介する。
このソフトは、オーストリアのCoati Softwareが開発し販売していたソフトであるが、2019年11月18日に無料のオープンソースソフトウェアとしてGitHubで公開した。
(参考)C++やPython向けのコード可視化ツール「Sourcetrail」がオープンソースに
SOURCETEAILは以下からダウンロードできる。
SOURCETEAIL
以下にpythonのソースコードに対してSOURCETEAILでコード解析した例が紹介されている。
・「コード可視化ツール「SOURCETRAIL」でPythonで書いた自作簡易検索エンジンのソースコード解析をする

(6) 静的解析ツールについて
静的解析ツールは世の中に数多くあります。ここではそのうちのいくつかについて紹介します。

No ソフト名 説明 コメント
1 TechMatrixのunderstand メトリクスの取得。依存関係の可視化など。 高価なため、法人向け。
2 SOURCETEAIL 依存関係の可視化など。 OSSであるため、気軽に試せる。

(7) 循環的複雑度について
「循環的複雑度」は、「Cyclomatic複雑度」「サイクロマティック複雑度」と同じ意味である。
「循環的複雑度」の説明は、
・「循環的複雑度 Wiki

・「プロダクトデータの解析II――複雑さメトリクス」――
を参照のこと。
サイクロマティック数の単体テストにおける目安は以下の通り。

  1. 10以下:望ましい値である。
  2. 10~30:テスト可能範囲であり、バグをつぶせる範囲である。
  3. 30~50:バグが増える値の範囲である。
  4. 50~100(以上の値):テストすること自体が難しくなる。
複雑度には「循環的複雑度」以外にも「本質的複雑度」(「Essential複雑度」ともいう)がある。
「循環的複雑度」と「本質的複雑度」との違いについては以下が参考になる。
・「本質的複雑度の評価
ポイントとしては、「本質的複雑度」では、単純な条件分岐構造を畳み込んだ構造を作成し、「循環的複雑度」を計測します。
こうすることで、「本質的複雑度」では「循環的複雑度」だけでは測定できない、本質的な複雑度を定量的に測定することができます。

(8) 凝縮度について 凝縮度の説明は、 「凝集度」 にある。 簡単に説明すると、凝縮度は「高い」「低い」で表現される。
凝集度の高いモジュールは、堅牢性(ロバスト性)、信頼性、再利用性、可読性の観点で好ましいとされる。
一方、凝集度の低いモジュールは保守性や再利用性、可読性が悪くなるため好ましくないとされる。
凝集度は、IPAの基本情報技術者試験では「モジュール強度」としてシラバスに含まれている。
→ 「キタミ式イラストIT塾 基本情報技術者 令和02年 (情報処理技術者試験)

(9) 結合度について 結合度の説明は、 「結合度」 にある。 簡単に説明すると、結合度は「どんなデータをやり取りすることで、他のモジュールと結合するか」を表すもの。
結合度の低いほど、モジュールの独立性が高くなって好ましいとされる。
結合度は、IPAの基本情報技術者試験では「モジュール結合度」としてシラバスに含まれている。
→ 「情報処理教科書 出るとこだけ! 基本情報技術者 テキスト&問題集 2019年版

(10) OSSについて

No ソフト名 説明 コメント
1 WinMerge WinMerge(Wikipedia) master.zip からダウンロードし、解凍する。
「Src」フォルダ内にソースコードがある。
2 Apache httpd Apache Licenses httpd-2.4.46.tar.gz からダウンロードし、解凍する。
「Src」フォルダ内にソースコードがある。
3 notepad++ Source code (zip)
からダウンロードし、解凍する。
「Src」フォルダ内にソースコードがある。
4 nginx からダウンロードし、解凍する。
「Src」フォルダ内にソースコードがある。

0 件のコメント:

コメントを投稿