ソフトウェア保守

ソフトウェア保守またはソフトウェアメンテナンス (software maintenance) とは、ソフトウェア工学において既存のソフトウェアを改良・最適化していくと共にバグを修正していくプロセスを意味する。ソフトウェア保守はソフトウェア製品ライフサイクルにおける主要なプロセスの一部であり、ソフトウェアの実際の現場への投入後に行われる。ソフトウェア保守工程では、実際の使用で発見された問題点やバグを修正すると共に、そのソフトウェアのユーザビリティや可用性を改善するための機能追加も行う。
概要.
ソフトウェア保守プロセスは、JIS規格　JIS X 0160（ソフトウェア・ライフサイクル・プロセス）で規定されたプロセスで、JIS X 0161:2008（ソフトウェアライフサイクルプロセス－保守）で詳細が規定されている。
ソフトウェア保守工程は、構造化プログラミング運動が盛んになったころに開発されたウォーターフォール・モデルで明確な工程として考慮されている。オブジェクト指向が盛り上がったころに開発されたスパイラルモデルでは、ソフトウェア保守に関して明確化されていない。いずれにしてもソフトウェア保守は重要であり、ソフトウェアのライフサイクル全体でかかるコストのうち3分の2が保守に費やされるという事実がある。
ソフトウェア開発を行っている組織やチームは、バグや欠陥を管理する何らかの機構を持っている（バグ管理システム）。ソフトウェアは他の製品と同様、問題や欠陥を持った状態でリリースされるのが一般的である。問題を抱えたままのソフトウェアをリリースするのは、バグや欠陥の影響を考慮しても、そのソフトウェアがある程度の価値を生み出すレベルの品質であると、その開発組織が判断した結果である。
既知の問題点はリリースノートなどの形で文書化されるのが普通で、それによってユーザーは回避策を講じたり、そのソフトウェアに適した使用法を知ることができる。
ソフトウェアには未知の問題や欠陥もあり、ユーザーがそれらを発見することになる。そのような問題は開発組織に報告され、その組織のバグ管理システムに情報が入力される。
ソフトウェア保守の担当者らはそれらの問題を解決すべく働き、対処を施したソフトウェアを新たにリリースする。それは、パッチ（修正プログラム）やソフトウェアのマイナーチェンジとなることが多い。
ソフトウェア保守の区分.
ソフトウェア保守はその動機により細分できる。JIS X 0161:2008には、次の区分が定義されている。
ソフトウェア保守の技法.
ソフトウェア保守に特化したいくつかの技法がある。
1つは静的スライシングと呼ばれる技法で、ある特定の変数を更新しているプログラムコードを全て見つけ出す方法である。プログラムコードのリファクタリングでよく使われ、2000年問題対応でも特に多用された。