ソフトウェアエンジニアリング・シリーズの第4回。
ソフトウェア保守は、ソフトウェアライフサイクルの最後のフェーズで、システムが本番稼働に入った後の時期のこと。だから、システム開発プロセスそのものには含まれないんだ。ソフトウェア保守っていうのは、ソフトウェアをリリースした後に、エラーを直したり新しいニーズに応えたりするためにソフトウェアを修正するプロセスのこと。つまり、リリース後に行われるすべての変更のことだよ。
システム保守性の概念
システムの保守性は、メンテナンスする人がそのソフトウェアをどれだけ理解し、修正や変更、改善がしやすいかっていう「難易度」で定義される。保守性を高めることは、ソフトウェア開発の全ステップにおいてめちゃくちゃ重要な目的。システムがちゃんとメンテナンスできるかどうかは、「システム保守性」っていう指標で測れるんだ。
システム保守性の指標
- 可理解性(Understandability): 他人がシステムの構造やインターフェース、機能、内部プロセスをどれだけ簡単に理解できるかってこと。モジュール化や詳細設計ドキュメント、構造化設計、優れたプログラミング言語なんかを使うと、理解しやすくなるよ。
- 可テスト性(Testability): 診断やテストのしやすさは、理解のしやすさに直結する。良いドキュメントがあれば診断やテストに役立つし、プログラムの構造や高性能なテストツール、しっかり計画されたテスト手順もすごく大事。だから、開発者は設計やプログラミングの段階から、診断やテストがしやすいように作っておく必要があるんだ。あと、システム保守のときは、テスト段階で保存しておいたテストケースをフル活用すべきだね。
- 可修正性(Modifiability): 診断やテストのしやすさは、設計原則と深く関わっている。モジュールの結合、内聚(凝集度)、スコープとコントロールの関係などが、修正のしやすさに影響するんだ。
保守とソフトウェアドキュメント
ドキュメントは、ソフトウェアの保守性を決める決定打。長く使われる大規模システムは、使っているうちに何度も修正されるから、ドキュメントが本当に重要になるんだ。
ソフトウェアシステムのドキュメントは、「ユーザードキュメント」と「システムドキュメント」の2種類に分けられる。ユーザードキュメントは主にシステムの機能や使い方の説明で、中身がどう実装されているかは気にしない。システムドキュメントは、設計や実装、テストといったあらゆる側面を記述するものだよ。
保守性はすべてのソフトウェアが持つべき基本特性。開発段階から保守性を確保しておかなきゃいけない。ソフトウェアエンジニアリングのあらゆる段階で保守性を考慮して高めていくべきだし、各フェーズ終了前の技術レビューや管理レビューでは、保守性を重点的にチェックする必要があるよ。
ソフトウェアドキュメント
質の高いドキュメントを書くことは、ソフトウェア開発の質そのものを向上させる。
ドキュメントもソフトウェアの一部。ドキュメントのないソフトウェアは、ソフトウェアとは呼べないんだ。
ドキュメント作成は、ソフトウェア開発の中でかなり大きな比重を占めている。高品質なドキュメントは、ソフトウェア製品の価値にとってすごく大きな意味を持つよ。
システム保守の内容とタイプ
システム保守は主に、ハードウェア保守、ソフトウェア保守、データ保守の3つ。
ハードウェア保守
ハードウェア保守は、専任のハードウェア保守担当者が責任を持つ。
ソフトウェア保守
ソフトウェア保守は、ニーズの変化やハードウェア環境の変化に合わせて、アプリケーションを部分的または全面的に修正すること。修正するときはソースコードをフル活用して、修正後はプログラム修正登録表を記入し、プログラム変更通知書に新旧プログラムの違いを明記するんだ。
ソフトウェア保守の内容には、主に以下の4つの側面があるよ。
- 正確性保守: 開発中に見つかったけど、テスト段階ではまだ見つかっていなかったエラーを直すこと。
- 適応性保守: IT技術の変化や管理上のニーズの変化に合わせて、ソフトウェアを修正すること。
- 完全性保守: 機能を拡張したり性能を良くしたりするための修正。主に、分析・設計段階では決まっていなかった機能や性能を追加することを指すよ。
- 予防的保守: 信頼性や保守性を向上させるため、あるいは将来のハード・ソフト環境の変化に備えて、先回りして新しい機能を追加すること。システムが時代遅れにならないようにするためだね。
データ保守
データ保守は主にデータベース管理者(DBA)が担当する。データベースの安全性や整合性、そして排他制御(コンカレンシー制御)の管理を行うよ。
ソフトウェアの品質特性
信頼性、可用性、保守性はソフトウェアの品質特性。ソフトウェアエンジニアリングでは、0から1の間の数値で測定するよ。
信頼性は、特定の時間内に、特定の条件下でシステムが故障せずに動作する確率。MTTF / (1 + MTTF) で測定できる。MTTFは平均故障時間(Mean Time To Failure)のこと。
可用性は、特定の時点で、システムが仕様通りに正しく動作している確率。MTBF / (1 + MTBF) で測定できる。MTBFは平均故障間隔(Mean Time Between Failures)のこと。
保守性は、決められた使用条件で、特定の時間内に決められたプロセスとリソースを使って保守活動が完了する確率。1 / (1 + MTTR) で測定できる。MTTRは平均修復時間(Mean Time To Repair)のこと。