平成21年春期試験午後問題 問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問2 ソフトウェア

ソフトウェア製品の品質特性に関する次の記述を読んで,設問に答えよ。

 JIS X 0129-1では,ソフトウェア製品の品質について,表1に示す六つの品質特性を定めている。
pm02_1.png
 これらの品質特性のうち,コーディングの段階では,信頼性,効率性,保守性,移植性を考慮することが大切である。

 あるソフトウェア開発会社では,開発するソフトウェア製品の品質向上を図るため,品質特性を考慮したプログラム開発の社内標準を制定し,作成したプログラムのコードレビュー体制を確立した。
 表2は,最近のコードレビューで新人のプログラム開発担当者が受けた指摘の例である。
pm02_2.png

設問

表2中の に入れる正しい答えを, 解答群の中から選べ。
a,e に関する解答群
  • 移植性(環境適応性)
  • 効率性(資源効率性)
  • 信頼性(成熱性)
  • 保守性(解析性)
  • 保守性(変更性)
b に関する解答群
  • pm02_3a.png
  • pm02_3i.png
  • pm02_3u.png
  • pm02_3e.png
c に関する解答群
  • 更新した時点で障害と分かるが,ログを記録する機能のあるOSは少ない
  • 更新した時点で障害と分かるが,ログを記録する機能のあるハードウェアは少ない
  • 更新内容を後で参照したときに障害となることが多く,原因箇所の特定が困難である
  • 取得可能な主記憶域が残っている間は,障害を検知できない
d に関する解答群
  • 指定できる変数や関数の個数
  • 変数や関数の型宣言で省略した場合のビット数
  • リンカで扱える関数のビット数
  • ローダで扱える関数の個数
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • e:
  • a=
  • b=
  • c=
  • d=
  • e=

解説

ソフトウェア品質特性は、ソフトウェアの品質を評価する基準となるものです。ISO/IEC 9126(JIS X 0129-1)では、この評価基準として6つの特性とそれぞれの品質特性を細分化した21の副特性を定めています。
pm02_4.png
aeについて〕
選択肢の品質副特性はJIS X 0129-1で以下のように定義されてます。
環境適応性
ソフトウェアにあらかじめ用意された以外の付加的な作業又は手段なしに,指定された異なる環境にソフトウェアを適応させるためのソフトウェア製品の能力
資源効率性
明示的な条件の下で,ソフトウェアの機能を実行する際の,資源の量及び資源の種類を適切に使用するソフトウェア製品の能力
成熟性
ソフトウェアに潜在する障害の結果として生じる故障を回避するソフトウェア製品の能力
解析性
ソフトウェアにある欠陥の診断又は故障原因の追及,及びソフトウェアの修正箇所の識別を行うためのソフトウェア製品の能力
変更性
指定された修正を行うことができるソフトウェア製品の能力
指摘後のプログラムでは、変数Countで処理を分岐させCountが0以下の場合にはAveに0を代入しています。この変更はCountが0だった場合に発生する「0による除算エラー(返却値が無限になる)」を防止するためです。またCountはその変数名が表すように何かしらの回数を格納する変数と推測できます。回数が負の値が代入されていることは異常であるため、Count=0の場合と同じくAveに0を代入しています。
つまりこの指摘は、エラー値が与えられた時も障害を回避できる能力に関するものと判断できます。このため選択肢中では「成熟性」が最も適切です。

a=ウ:信頼性(成熟性)

また、eに対応する指摘の内容は「複数の機種により汎用的に使われる可能性」を見越した変更であるため移植性が適切と判断できます。

e=ア:移植性(環境適応性)

bについて〕
指摘前のプログラムでは計算時間の長い関数 sub が同じ引数で比較条件と代入時の2回使用されていることが問題となります。sub(r)は2重ループの内側にあり1回の処理につき2回実行されるためr=100,c=100の場合、sub(r)は100×100×2=20,000回実行されることになります。このループ処理の処理時間を短くするためには、sub(r)が実行される回数を少なく必要がありますが、処理の結果は最適化前と同じにならなくてはなりません。この2点に注目して選択肢のソースコードを検証します。
  • S1←sub(r)というように返却値を変数に格納し、比較・代入処理ではその変数を使用しています。これによって1回の処理につき実行されるsub(r)の回数は1回に減少します。sub(r)は2重ループの内側にあるためr=100,c=100の場合、100×100=10,000回実行されます。
  • 「ア」と同じように返却値を変数S1に格納しています。「イ」ではさらにsub(r)が内側のループ中では値が変わらないことに注目し、S1への代入処理をループの外側に出しています。これによってsub(r)の実行回数は100回で済みます。
  • 「ア」と同じようですが、X[r,c]の値を変数Xrcにキャッシュし、変数Xrcに代入処理をしている部分が異なります。X[r,c]の値を格納した変数Xrcの値を更新しても、元のX[r,c]の値は変更されないため最適化前と異なる処理結果になってしまいます。
  • 「ウ」と同じく変数の値を変更しているだけなので誤りです。
b=イ

cについて〕
C言語のmalloc()のように、プログラム言語によってはサイズを指定してメモリを動的に確保できる関数があります。この際、プログラムのバグが原因で動的に確保したメモリ領域の外側に誤ってデータを書き込んでしまうことがあります。たとえ誤った位置だとしても更新時はエラーなく書き込めるのですが、その後に誤り部分を読み込まれるときにエラーとなってしまいます。
  • 更新した時点では障害が発生しません。
  • 更新した時点では障害が発生しません。
  • 正しい。
  • 誤って書き込まれた部分が参照されると障害となります。
指摘があった関数はデバッグ機能のある同等の関数に置き換えられています。標準関数では原因個所の特定が困難であるため、障害発生時のバグの発見・修正を迅速に行うことのできるデバッグ機能付きの関数に置き換えたと考えることができます。

c=ウ

dについて〕
指摘により変更された変数宣言を見るとに32ビット整数型、32ビット整数型関数というように変数と関数の戻り値の長さが明示されています。この変更内容に合致する指摘内容は「イ」です。

d=イ

Pagetop