基本情報技術者 2010年 春期 午前(科目A) 問52
問題文
ソフトウェアの品質特性の定義において、あるコンピュータ用に作成したプログラムを別のアーキテクチャのコンピュータで動作できるようにすることの容易さを表す特性はどれか。
選択肢
ア:移植性(Portability)(正解)
イ:使用性(Usability)
ウ:相互運用性(Interoperability)
エ:変更性(Changeability)
🔒 解説は解答すると表示されます
移植性(Portability)【午前解説】
正解の理由
選択肢の中で「別のアーキテクチャのコンピュータで動作できるようにすることの容易さ」を直接表すのは移植性(Portability)です。移植性はソフトウェアがある環境から別の環境へ移されても機能を維持できる度合いを示します。問題文の「別のアーキテクチャで動作できるようにすることの容易さ」という表現は、API・OS・命令セットといった環境依存性をどれだけ低減できるかを問うものであり、これは移植性の定義と一致します。なお、他の選択肢はそれぞれ「使用性=ユーザビリティ」「相互運用性=他システムとの連携」「変更性=保守や拡張のしやすさ」を指し、本問の趣旨とは異なります。
解法ステップ
- 問題文のキーワード抽出:「別のアーキテクチャ」「動作できるようにする」「容易さ」を確認する。
- 各選択肢の定義を頭の中で置換:移植性/使用性/相互運用性/変更性の意味を簡潔に照合する。
- 最も文意に合う定義を選ぶ:環境を変えて同じソフトが動く「容易さ」→移植性。
- 迷ったら例で確認:同じバイナリがx86とARMで動くかは移植性の話であることを想起する。
選択肢別の誤答解説
- ア: 正解。移植性(Portability)はソフトウェアを別のハード/OS環境で動作させる容易さを指します。
- イ: 使用性(Usability)はユーザがソフトを使いやすいかを扱う特性で、環境移行の容易さとは無関係です。
- ウ: 相互運用性(Interoperability)は異なるシステムや製品間でデータや機能をやり取りできるかどうかを示し、同一ソフトを別アーキで動かす話とは異なります。
- エ: 変更性(Changeability)は設計変更や修正のしやすさ(保守性・改良の容易さ)を表し、プラットフォーム移行の容易さとは別概念です。
よくある誤解
- 「相互運用性と移植性を同じと考える」:相互運用性は異なるシステム間で正しくやり取りできること、移植性は同一ソフトが別環境で動くことを指します。
- 「移植性はソースコードだけの問題と思い込む」:実行可能バイナリ、ABI、外部ライブラリ、データ表現(エンディアン)も移植性に影響します。
- 「高水準言語=自動的に高い移植性」と誤解する:言語仕様だけでなく依存ライブラリやプラットフォーム固有APIの使用が移植性を左右します。
補足コラム
ISO/IEC 25010(ソフトウェア品質モデル)では、移植性は品質特性の一つとして扱われ、しばしば「適合性(adaptability)」「導入性(installability)」「置換性(replaceability)」などの下位特性と関連します。移植性向上の代表的手法には以下があります。
- 抽象化層の導入(OS抽象化、ハード依存コードの分離)
- 標準API/ライブラリの使用(POSIX、標準C/C++)
- 条件付きコンパイルやビルドの自動化(クロスコンパイルツールチェーン)
- バイトオーダやデータ表現の明示的処理、外部依存の削減
- 仮想化・コンテナ化による実行環境の統一(例: Docker、VM)
例:条件付きコンパイルでOS差を吸収する(C言語)
#ifdef _WIN32
/* Windows固有処理 */
#else
/* POSIX系処理 */
#endif
また、バイトコード型のランタイム(Java、.NET)やインタプリタ型言語(Python)はソースやバイトコードの互換性を通じて移植性を高める一方で、ネイティブ拡張やプラットフォーム固有機能があると移植性は下がります。
FAQ
Q1: 仮想化やコンテナは移植性にどう寄与しますか?
A1: 実行環境を抽象化・固定化することで「環境差」を吸収し、実質的に移植の負担を減らします。ただしランタイムやハイパーバイザの依存は残ります。
A1: 実行環境を抽象化・固定化することで「環境差」を吸収し、実質的に移植の負担を減らします。ただしランタイムやハイパーバイザの依存は残ります。
Q2: 相互運用性が高ければ移植性も高いですか?
A2: いいえ。相互運用性は異システム間の連携能力であり、移植性は同一ソフトが別環境で動く能力で目的が異なります。
A2: いいえ。相互運用性は異システム間の連携能力であり、移植性は同一ソフトが別環境で動く能力で目的が異なります。
Q3: 高水準言語を使えば移植性は保証されますか?
A3: 言語自体は移植性を高めますが、ネイティブ拡張やOS依存APIを使うと移植性は低下します。テストと依存管理が重要です。
A3: 言語自体は移植性を高めますが、ネイティブ拡張やOS依存APIを使うと移植性は低下します。テストと依存管理が重要です。
関連キーワード: 移植性、ポータビリティ、ソフトウェア品質、ISO/IEC 25010、アーキテクチャ依存、バイナリ互換性、クロスコンパイル、仮想化、コンテナ化

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

