平成16年度 春期 ソフトウェア開発技術者試験 問41−60 解答編




このページは

ソフ開

(ソフトウェア開発技術者試験)

解答と解説のページです。

問題だけで勉強したい方は目次へ戻ってください



問41 再入可能(リエントラント)プログラムの説明として、最も適切なものはどれか。
一度実行した後、ロードし直さずに再び実行を繰り返しても、正しい結果が得られる。
実記憶上のどこのアドレスに配置しても実行することが可能である。
複数のセグメントに分割されており、セグメント単位にロードして実行することが可能である。
複数のタスクで並行して実行しても、正しい結果が得られる。
解答
解説 プログラムの性質について以下にまとめます。

リエントラント(再入可能):同時、非同期的に呼び出されても互いに干渉せずに動作できる性質
リカーシブル(再帰):自分自身を呼び出すことができる性質
リユーザブル(再使用可能):終わったプログラムを再ロードすることなく、また、使うことができる性質
リロケータブル(再配置可能):メモリ上のどの番地に呼び出されても使用することができる性質

再入可能は、個々のプロセスが独自に値を保有するため、データ部分をプロセスごとに持つ必要あります。

選択肢アは、リユーザブル。選択肢イは、リロケータブルの説明です。

問42 あるコンピュータを使って、そのコンピュータとは異なる命令形式をもつコンピュータで実行できる目的プログラムを生成するための言語処理プログラムはどれか。
エミュレータ
クロスコンパイラ
最適化コンパイラ
ジェネレータ
解答
解説 コンパイラは、プログラミング言語を機械語(実行可能ファイル)に変換(コンパイル)するプログラムですが、そのコンピュータ上ではなく別の実行環境で動作するように変換するものをクロスコンパイラといいます。最適化コンパイラは、プログラム言語で冗長なものを実行速度や、メモリ容量などが少なくなるようにコンパイルするものです。

エミュレータは、ほかのコンピュータの機能をソフトウェアで仮想的に再現するソフトウェアをいいます。
ジェネレータは、擬似乱数発生関数のようなパラメタから作成される、特殊なサブルーチンをいいます。

問43 次の関数addを考える。メインプログラムを実行した後、メインプログラムの変数X、Yの値はどうなるか。ここで、仮引数Xは値呼出し(call by value)、仮引数Yは参照呼出し(call by reference)であるとする。

画像(問43)を表示できません
画像(問43ans)を表示できません
解答
解説 まず、関数を呼び出す側が渡す引数を、実引数。呼び出された関数側が使う引数を、仮引数といいます。関数への値の引き渡し方には、値呼出し(call by value)と参照呼出し(call by reference)があります。値呼出しでは、仮引数が変化しても、実引数が変化しませんが。参照呼出しでは、仮引数が変化すると、実引数が変化します。

また、実引数と仮引数では、引数の種類(整数型や文字型など)と個数を一致させる必要があります。

今回はの場合は、関数add内では、
X=X+X → X=2+2=4
Y=X+Y → Y=4+2=6
となります。

Xは値呼出しですが、Yは参照呼出しなので、Xはメインプログラムのまま変化せず、Yはaddの値が反映されます。よって、X=2,Y=6となります。

問44 次のメインプログラムを実行した結果はどれか。ここで、staticは静的割当てを、autoは動的割当てを表す。

画像(問44)を表示できません
x=6、y=6
x=6、y=8
x=8、y=6
x=8、y=8
解答
解説 まず、変数の動的割当てとは、そのプログラム(関数)が終了すると同時に解放される(値が消える)もので、静的割当てとは、そのプログラムが終了しても値を保持し続けるものです。(初期化は最初の1回のみ行われるのが普通です。)

x=f1(2)+f1(2)は、まず左側のf1(2)が実行され、u=2,v=1なので、v=3が返されます。
右側のf1(2)についても同じなので、3+3で6となります。

y=f2(2)+f2(2)は、まず、左側のf2(2)が実行され、u=2,v=1なので、v=3が返されます。
右側のf2(2)はvが3を保持したままなので、u=2,v=3により5が返されます。よって、3+5で8となります。

問45 Javaの特徴に関する説明として、適切なものはどれか。
オブジェクト指向言語であり、スーパクラスを複数指定できる多重継承が使える。
整数や文字などの基本データ型をクラスとして扱うことができる。
ポインタ型があるので、メモリ上のアドレスを直接参照できる。
メモリ管理は自動的に行われ、メモリのガーベジコレクションの機能が働く。
解答
解説 Javaとはオブジェクト指向言語の一種で、ブラウザ上で動作するJAVAアプレットや、サーバ上で動作するものをサーブレットなど様々な形態のプログラムを記述することができます。また、Javaのコンパイラはバイトコードと呼ばれる中間言語に出力し、それを解釈する仮想マシンというものがあれば、どのようなOSでも動作するという特徴があります。

選択肢ア:Javaは親クラスを一つしか継承できません。インタフェースとよばれる特殊なスーパクラスは複数指定できます。
選択肢イ:基本データ構造はクラスとしては扱えません。
選択肢ウ:オブジェクト指向には基本的にポインタ型というものはなく、アドレスの直接指定やインクリメントはできません。

問46 DTD(Document Type Definition)の用途の説明として、適切なものはどれか。
構文解析を行う。
構文規則を満たしているかどうかを調べる。
妥当なXML文章であるかどうかを判定する。
データの内容のデータ型に対する制約を記述する。
解答
解説 XMLとは、ユーザ自身が独自にタグを作ることができるマークアップ言語の一種で以下のような分類があります。

整形式のXML文書:文法に従ったXMLのことで、タグが対になっているなどを満たした文書のこと。
妥当なXML文書:整形式のXMLであり、DTDにも適合したXML文書のこと。

なおDTDとは、文書構造(文書型)を定義するための言語の一つです。

問47 J2EE(Java 2 Platform, Enterprise Edition)の構成要素の一つはどれか。
CGI
HTML
JavaScript
Servlet
解答
解説 Javaに関する重要な用語をいくつか下にまとめておきます。

Javaアプリケーション:単独で動作する一般的なJavaで書かれたプログラム
Javaアプレット:サーバからクライアントにダウンロードして動作するJavaのプログラム
Javaサーブレット:サーバ上で動作するものをJavaのプログラム
JavaBeans:アプリケーションを部品化し、再利用することで開発効率を向上させる規約

CGI(Common Gateway Interface)はサーバ上でプログラムを動かす仕組みです。
HTML(HyperText Markup Language)は、インターネットで最も多く用いらているマークアップ言語です。
JavaScriptは、web上で用いられるスクリプト言語です。(プログラム言語のJavaとは互換性がなく、基本的に別物)

問48 Webサービスなどの情報についてのレジストリの仕様であり、利用者が必要とするサービスの一覧を提供しているものはどれか。
SOAP
UDDI
WSCI
WSDL
解答
解説 選択肢の用語を以下にまとめます。

SOAP(Simple Object Access Protocol):、ソフトウェア同士がメッセージ(オブジェクト)を交換するためのプロトコル
UDDI(Universal Description, Discovery and Integration):公開者はUDDIレジストリに情報(サービスや所有者、分野など)を登録し、利用者が目的に合わせて検索するという仕組み。
WSCI(Web Service Choreography Interface):XMLベースの複数のWebサービスで交換されるメッセージを記述するためのもの。
WSDL(Web Services Description Language):XMLをベースとしたWebサービスを記述するための言語仕様。

問49 上流CASEツールが提供する機能はどれか。
DFDの作成支援
テストデータの作成支援
プログラムのコードの自動作成
ライブラリの管理支援
解答
解説 CASE(Computer Aided Software Engineering:コンピュータ支援ソフトウェア工学)とは、ソフトウェア開発を支援するツールで、解析ツール、設計ツール・コンパイラ・テストツールなどから構成されます。

要求定義から内部設計程度までを上流。プログラミング設計、プログラミングあたりを下流。テスト、保守の4つから構成されます。(場合によっては、2つや3つにまとめる場合もあります)

選択肢の中で最も上流にあるのは、要求定義を支援するDFDの作成支援なので、上流CASEツールに属するといえます。

問50 ソフトウェア開発のプロセスモデルの一つであるスパイラルモデルに関する記述として、適切なものはどれか。
基本的に後戻りが許されないので、要求仕様の変更に対応するのに大きな工数を要する。
システムの部分単位に要求定義・設計・プログラミング・テストを繰り返しながら開発するので、未経験分野のシステム開発に有効である。
全体の作業を幾つかのフェーズに分けて管理するので、最初から要求仕様が明白な場合に、最も効率的な方法である。
要求仕様の変更のたびに機能分割と段階的な機能追加を繰り返すので、大規模システム開発に有効である。
解答
解説 ソフトウェアを作るための開発手段にはいくつかの種類があり、ウォータフォールモデル、スパイラルモデル、プロトタイピングモデルはその中でも最も代表的な3つです。3つの特徴を下にまとめます。

ウォータフォールモデル:前工程の成果物が確実であるとみなして、工程の後退をせずにその名の通り水が上から下へ流れる滝のように、順序に開発を進めます。しかし実際には、前の工程で不備が見つかることが多く、古典的であるといわれます。(選択肢ア)

スパイラルモデル:要求定義から実際に実装までを繰り返しながら開発を進めます。ウォータフォールモデルとプロトタイピングモデルの中間のような感じで、大規模システム開発や未経験の分野の開発に向いています。

プロトタイピングモデル:プロトタイプ(試作品)を作って、実際にどんなものかをクライアントに確認を取りながら開発を進めるため、クライアントと開発部の認識の誤差を少なくできます。

選択肢ウは、インクリメンタルモデルの説明です。
選択肢エは、成長型モデルの説明です。

問51 システム開発を基本設計、外部設計、内部設計、プログラミング設計の順で進めようとしている。外部設計で決定すべき項目はどれか。
運用テスト計画
画面推移
機能分割・構造化
結合テスト計画
解答
解説 プロジェクトは一般的に以下のようなV字工程でおこなわれます。

V字工程を表示できません

外部設計と内部設計の違いをまとめると以下のようになります。

外部設計:システムから見た設計で、データ項目の洗い出しと論理データの設計、画面のレイアウトなどを決定します。
内部設計:コンピュータから見た設計で、物理データ構造、アルゴリズム、チャックディジットの方式などを決定します。

問52 W.ハンフリーによって提唱されたプロセス成熟度モデル(CMM)の説明として、適切なものはどれか。
ソフトウェア開発組織及びオブジェクトのプロセスを評価するためのモデルである。
ソフトウェア開発のプロセスモデルの一種である。
ソフトウェアを中心としたシステム開発及び取引のための共通フレームのことである。
プロジェクトの成熟度に応じてソフトウェア開発の手順を定義したモデルである。
解答
解説 CMM(能力成熟度モデル)は、現在では改良されたCMMI(Capability Maturity Model Integration:能力成熟度モデル統合)に変わりました。これは、プロジェクトやプロセスの成熟度をレベルごとに表わしたもので、ソフトウウェアを開発する組織のプロセス成熟度モデルを使って、プロセスの改善を図ることを目的としています。以下にその5段階をまとめます。

LV1:初期段階:何もルールがない
LV2:管理段階:システム開発の計画・コスト見積りの経験則ができている。
LV3:定義段階:システム開発の経験が組織として共有され、標準プロセスが確立している。
LV4:管理段階:プロセスからの定量的なフィードバックによって、継続的に改善されている。
LV5:最適化段階:プロセスの測定基準が定められ、組織的に分析が進められている。

問53 ソフトウェアの要求定義の設計仕様として記述する可能性があるものを、次の三つに分類して考える。それぞれの分類をDFDに記述するかどうかについて、適切に示しているものはどれか。

[分類]
a ソフトウェアが正常に機能しているときの処理(正常処理)
b 例外処理や異常処理
c ある処理の後、どこの箇所へ飛び越すなどといった制御手順
画像(問53ans)を表示できません
解答
解説 DFD(Data Flow Diagram)とは、データの源泉・吸収・処理・蓄積などの関係を、以下のような図を用いて、データフロー、プロセス、ファイル、外部の4つの記号によって表現します。

DFDを表示できません

これにより、業務を構築する処理と、その間で受け渡されるデータの流れを表します。

よって、例外や異常処理、制御手順などは記述しません。

問54 新システムのモデル化を行う場合の、DFD作成の手順として適切なものはどれか。
現物理モデル → 現論理モデル → 新物理モデル → 新論理モデル
現物理モデル → 現論理モデル → 新論理モデル → 新物理モデル
現論理モデル → 現物理モデル → 新物理モデル → 新論理モデル
現論理モデル → 現物理モデル → 新論理モデル → 新物理モデル
解答
解説 一般的なDFDを使ったシステムの設計は下のように行われます。

@現物理モデル:現状を把握し、具体的なデータの流れを記入し、作成する。
A現論理モデル:現モデルを抽象化し、データと処理を中心に作成する。
B新論理モデル:現論理モデルと、要求定義をもとに作成する。
C新物理モデル:新論理モデルを元に、実際の資料や物理的要件を補足し作成する。

問55 システム分析・設計に用いられる状態遷移図の特徴として、適切なものはどれか。
システムで扱う状態遷移の発生順序と、それに対応する機能の処理に要する時間を対比して分析する場合に有効である。
システムの取り得る状態が有限個で、“次の状態は、現在の状態と発生する事象だけで決定される”場合の動作を表すのに有効である。
発生した事象の時間的関係から状態を導く場合に有効である。
モジュールの制御構造と、受渡しパラメタ、受渡しデータを記述する場合に有効である。
解答
解説 状態遷移図とは、以下のような図(下図はタスクの例)で状態と遷移する条件などを記述することで、システムの状態を示す図です。

状態遷移図を表示できません


問56 事象駆動(イベントドリブン)プログラムの開発に際して行う分析(事象応答分析)の説明として、適切なものはどれか。
外界の事象に応じて、時間の流れとともにシステムが応答するという一連の動作を分析するための方法である。
システムの改善案を検討する場合などに、ある事象について思いつく様々な着想を視覚的なイメージ図にまとめ、参加者がこの図を基に別の視点に立った新しい発想を生み出すことを支援するための方法である。
システムの機能を入力データ及び出力データの画面から分析するための技術であり、四つの要素(データ、情報、機能及び条件)の相互関係を定義する。
システムの対象をモデル化する際に、実体と関連によって、その構造を分析するための方法である。
解答
解説 イベントドリブンとは、逐次的な処理とは違って何かイベントが起こるのを待ち、イベントが発生したらあらかじめ決められた処理を行うというものです。キーボードやマウスなどの操作がその代表的な例といえます。そのため、イベントドリブンには『ある状態であるイベントが起きたら、別の状態に遷移する』ということが記述できる、状態遷移図やUML等を使って記述されます。


問57 オブジェクト指向において、クラスをカプセル化する利点はどれか。
インスタンス変数名を変えても、クラスの利用者に影響しない。
クラスのインタフェースを変えても、クラスの利用者に影響しない。
クラス名を変えてもフィールド名とメソッド名を変えなければ、クラスの利用者に影響しない。
メソッド名を変えても、クラスの利用者に影響しない。
解答
解説 オブジェクト指向の概念について下にまとめます。

クラス:データとメソッドを1つにまとめたもの
インスタンス変数:クラスの中で値を保持するための変数
メソッド:オブジェクトがもっている手続のこと
メッセージ:オブジェクト間でやり取りされる情報のこと
カプセル化:データにメソッドを通じてのみアクセスできること
インスタンス:型であるクラスに実際の値を入れて、具現化すること
抽象化:共通の性質をまとめて定義したもの、一般的にスーパークラスとして定義される。
継承:スーパークラスを取り込むこと。(例:人間クラスを継承して学生クラスを作る)
多相性(多態性):同じメッセージに対して別の振る舞いをすること(例『鳴く』というメッセージに対して、『ワンワン・ニャーニャー』など別の振る舞いをする)

オブジェクト指向の代表的な言語にJavaやRubyC#などが挙げられます。

次に、カプセル化のイメージを図示したものが以下になります。

状態遷移図を表示できません

カプセル化の利点はいくつかありますが、ここでは代表的な2つを挙げておきます。
@データへは必ずメソッドを介してアクセスすることになるので、データやデータ構造を隠せる(データ隠ぺい)。
Aインスタンス変数名が変わっても、クラス内の変数名が変わっただけなので、影響はありません。

問58 オブジェクト指向において、図のような階層クラスを構築する場合、クラス間の関係の説明として、適切なものはどれか。

画像(問58)を表示できません
“バス”、“トラック”などのクラスが“自動車”のデータを引き継ぐことを、インスタンスという。
“バス”、“トラック”などのクラスの共通部分を抽出して、“自動車”のクラスとして定義することを、汎化という。
“バス”、“トラック”などのクラスは、“自動車”のクラスに対して、スーパクラスという。
“バス”、“トラック”などのそれぞれのクラスの違いを“自動車”のクラスとして定義することを、特化という。
解答
解説 まず、別のクラスのデータを引き継ぐことを継承といいます。これを踏まえて、スーパクラス(親クラス)とサブクラス(子クラス)についてまとめます。

画像(問58)を表示できません

いま上図のように、、著作物を継承した雑誌とCDがあるとします。このとき、著作物をスーパクラス、雑誌とCDをサブクラスといいます。
重要なのは、子クラスでは、親クラスで定義されたデータやメソッドが利用できるということです。これいにより、プログラムの再利用性が高まります。

次に、サブクラスの共通部分を取り出してスーパクラスを定義することを汎化、スーパクラスにデータやメソッドを追加してサブクラスを定義することを特化といいます。

なお、インスタンスとは、taro = Dog.newのように、Dogクラスから実際にtaroという変数を作り出すことをいいます。

問59 エンドユーザへの障害対策窓口としてヘルプデスクを設置した。報告を受けた障害の根本的な原因は不明であるが、応急処置を必要としているとき、ヘルプデスクが受付・記録の後に行う手順として、最も適切なものはどれか。
応急措置 → 原因究明への優先度設定 → 原因究明と問題解決 → 問題の判別
原因究明への優先度設定 → 原因究明と問題解決 → 問題の判別 → 応急措置
原因究明への優先度設定 → 問題の判別 → 応急措置 → 原因究明と問題解決
問題の判別 → 応急措置 → 原因究明への優先度設定 → 原因究明と問題解決
解答
解説 障害時にはまず、どのような事態に陥っているかを把握します(問題の判別)。その後、暫定的な回復措置を指示します(応急措置)。さらに、その影響や重要度を考慮した優先度を設定し(原因究明への優先度設定)、最終的な解決策を講じます(原因究明と問題解決)

問60 データベースのバックアップ処理には、フルバックアップと方式と差分バックアップ方式がある。差分バックアップ方式に関する記述のうち、適切なものはどれか。
差分バックアップ方式での復旧は、フルバックアップで修復した後に、差分を加えて行う。
差分バックアップ方式では、障害時の回復にも差分だけ処理すればよいので、フルバックアップ方式に比べて復旧時間が短い。
差分バックアップ方式は、フルバックアップ方式と交互に運用することはできない。
差分バックアップ方式は、フルバックアップ方式に比べ、バックアップの処理時間が長い。
解答
解説 フルバックアップと差分バックアップを下にまとめます。

フルバックアップとは、現在記録されているデータを完全にバックアップする手法で、比較的時間がかかります。
差分バックアップとは、定期的にフルバックアップされていることを仮定して、特定の瞬間からの差分だけをバックアップします

例を挙げると、毎週日曜日にフルバックアップを行い月〜土曜日は前日からの差分バックアップを毎朝行うとする。このとき、水曜日の午後に障害が発生した場合は、日曜日のフルバックアップ+月曜日の差分バックアップ+火曜日の差分バックアップ+水曜日の差分バックアップから、水曜日の朝の状態を復元することができます。

フルバックアップと差分バックアップをうまく組み合わせて適切な期間を復元できるようにするのが基本です。