ソフトウェアの品質要因 その5「互換性」
互換性(compatibility)
■定義:互換性(compatibility)
「互換性」とは、ソフトウェアの要素の、ほかのソフトウェア要素との組み合わせやすさである。
「互換性」とは、ハードウェアやソフトウェアが、
仕様の異なるものに置き換えられた上でも、元通りの動作をするという状態のことである。
また、そのような動作ができるものを「互換性がある」などと形容する。
例えば、ディスプレイを他社製品に買い替えてパソコンに接続した場合、
ディスプレイを使用することができれば、そのディスプレイは以前使用していたディスプレイと
互換性があるという。また、あるソフトウェアで作成したデータファイルを
別のソフトウェアでも読み取ることができるとき、それらはデータ互換性があるという。
Microsoft Office Excelは、WindowsでもMacintoshでもほぼ同様に操作が可能であるので、互換性があると言える。
ソフトウェアは相互に作用し合う
ソフトウェア開発において、互換性が重要とされる理由は、ソフトウェアは何もない世界で開発するのではないからである。
ほとんどの場合、ハードウェアやオペレーションシステムに依存したり、
他のソフトウェアやデータベースなどに依存したりする。
また、ソフトウェアのバージョンアップ後の下位製品との互換性の問題は、
ソフトウェアの品質と直結することが多いので、品質を高めるためには必要とされる要素である。
ソフトウェアは、他のソフトウェア(あるいは下位製品)と、
相互に作用し合う(あるいは単方向に作用する)必要がある場合が多い。
しかし、周囲の前提条件と対立することが理由で、相互作用に問題が生じる場合がある。
例えば、多くのオペレーティングシステムでは、様々な互換性のないファイルシステムが採用されている。
異なるファイル形式では、互いのプログラムの結果を直接入力できないため、互換性が失われる。
当たり前のことであるが、プレイステーション3のソフトは、Xbox360では動作しない。
セガサターンのソフトは、ドリームキャストで動作しない。
プレイステーション2のソフトは必ずしもプレイステーション3で動作するとは限らない。
東芝などが推進する「HD DVD」と、ソニーなどが推進する「Blu-ray Disc」は互換性はない。
これらは、互いが周囲の前提条件と対立するからに他ならない。
互換性の鍵
互換性の鍵となるのは、設計が同質であることと、プログラム間のコミュニケーションの標準的規約が一致していることである。
例えばその要素として、「標準化されたファイル形式」、
「標準化されたデータ構造」、「標準化されたユーザインターフェイス」などがある。
また、そのソフトウェアが操作するすべての重要なエンティティ*1に対して
標準化されたアクセスプロトコルを定義することで互換性を高めることができる。
これは抽象データ型とオブジェクト指向の基本となる考え方であり、
CORBA*2やMicrosoftのActiveXなどのいわゆるミドルウェアプロトコルの基礎にもなっている。
互換性とオブジェクト指向
オブジェクト指向は、設計スタイルの共通化を支援する。設計スタイルの共通化を行うことで、モジュールインターフェイスおよび
システムインターフェイスの標準化を促すため、
互いに協調しながら動作するシステムの生産を助けることにつながる。
上位互換と下位互換
従来製品の環境で蓄積されたデータや実績を新しい環境でも利用できるのであれば、ユーザーの乗り換えが促進され易いので、あらゆる分野において新製品が従来製品との互換性を保っている場合が多い。
なお、特定のアプリケーションソフトの新旧型に関わらず同じファイルが扱えるということを、
上位互換や下位互換などと呼ぶ。アプリケーションソフトはバージョンアップの度合いが激しいので、
新旧の差があるだけの同じ製品とは言え、必ずしも優れた互換性があるとは限らない。
新バージョンのアプリケーションソフトが旧バージョンのアプリケーションソフトで作成したファイルを自由に扱える、
というのが上位互換の典型例である。ソフトウェアのバージョンアップが行われる際には、
上位互換性をもたせるのが一般的であるが、セキュリティや正確性、機能向上の問題のため互換性を見捨てるケースもある*3。
*1:一単位として扱われるデータのまとまり。XMLやJava、データベースなどで用いられる用語。プログラミングの分野では、オブジェクト指向の「オブジェクト」や「インスタンス」とほぼ同義の意味で使われる。
*2:Common Object Request Broker Architecture:OMGが定めた分散オブジェクト技術の仕様。異機種分散環境上のオブジェクト(プログラム部品)間でメッセージを交換するためのソフトウェア(ORBと呼ばれる)の仕様を定めている。具体的には、ORBの基本構造や、プログラミング言語からORBを利用する際の手順、異なるORB間で相互にメッセージを交換する際の規定などを定めている。
*3:たとえば、.NET Frameworkとか