ソフトウェア保守

ソフトウェア保守（ソフトウェアほしゅ）またはソフトウェアメンテナンス (software maintenance) とは、ソフトウェア工学において既存のソフトウェアを改良・最適化していくと共にバグを修正していくプロセスを意味する。ソフトウェア保守はソフトウェア製品ライフサイクルにおける主要なプロセスの一部であり、ソフトウェアの実際の現場への投入後に行われる。ソフトウェア保守工程では、実際の使用で発見された問題点やバグを修正すると共に、そのソフトウェアのユーザビリティや可用性を改善するための機能追加も行う。

概要 
ソフトウェア保守プロセスは、JIS規格　JIS X 0160（ソフトウェア・ライフサイクル・プロセス）で規定されたプロセスで、JIS X 0161:2008（ソフトウェアライフサイクルプロセス－保守）で詳細が規定されている。

ソフトウェア保守工程は、構造化プログラミング運動が盛んになったころに開発されたウォーターフォール・モデルで明確な工程として考慮されている。オブジェクト指向が盛り上がったころに開発されたスパイラルモデルでは、ソフトウェア保守に関して明確化されていない。いずれにしてもソフトウェア保守は重要であり、ソフトウェアのライフサイクル全体でかかるコストのうち3分の2が保守に費やされるという事実がある。

ソフトウェア開発を行っている組織やチームは、バグや欠陥を管理する何らかの機構を持っている（バグ管理システム）。ソフトウェアは他の製品と同様、問題や欠陥を持った状態でリリースされるのが一般的である。問題を抱えたままのソフトウェアをリリースするのは、バグや欠陥の影響を考慮しても、そのソフトウェアがある程度の価値を生み出すレベルの品質であると、その開発組織が判断した結果である。

既知の問題点はリリースノートなどの形で文書化されるのが普通で、それによってユーザーは回避策を講じたり、そのソフトウェアに適した使用法を知ることができる。

ソフトウェアには未知の問題や欠陥もあり、ユーザーがそれらを発見することになる。そのような問題は開発組織に報告され、その組織のバグ管理システムに情報が入力される。

ソフトウェア保守の担当者らはそれらの問題を解決すべく働き、対処を施したソフトウェアを新たにリリースする。それは、パッチ（修正プログラム）やソフトウェアのマイナーチェンジとなることが多い。

ソフトウェア保守の区分　
ソフトウェア保守はその動機により細分できる。JIS X 0161:2008には、次の区分が定義されている。

 適応保守 (adaptive maintenance)
 変化した又は変化している環境において、ソフトウェア製品を使用できるように保ち続けるために実施するソフトウェア製品の引渡し後の修正。
 是正保守 (corrective maintenance)
 発見された問題を訂正するために行うソフトウェア製品の引渡し後の受身の修正。いわゆるバグ修正。
 緊急保守 (emergency maintenance)
 是正保守実施までシステム運用を確保するための、計画外で行われる一時的な修正。
 完全化保守 (perfective maintenance)
 潜在的な欠陥が故障として現れる前に検出し訂正するために行う、引渡し後のソフトウェア製品の修正。
 予防保守 (preventive maintenance)
 引渡し後のソフトウェア製品の潜在的な障害が運用障害になる前に発見し、是正を行うための修正。

ソフトウェア保守の技法 
ソフトウェア保守に特化したいくつかの技法がある。
1つは静的スライシングと呼ばれる技法で、ある特定の変数を更新しているプログラムコードを全て見つけ出す方法である。プログラムコードのリファクタリングでよく使われ、2000年問題対応でも特に多用された。

関連項目 
ソフトウェア
ソフトウェア開発工程
ソフトウェア製品ライフサイクル
ソフトウェア保守者
能力成熟度モデル統合
ソフトウェアプロジェクト管理
バグ管理システム

参考文献

外部リンク
 ソフトウェア保守契約書
 ソフトウェア保守成熟度モデル
 Paper on Software Maintenance as Part of the Software Life Cycle （タフツ大学）
 Journal of Software Maintenance
 Software entropy
 Software Evolution Research Consortium

ソフトウェア開発工程