基本情報技術者 2009年 春期 午後 問02
ソフトウェア製品の品質特性に関する次の記述を読んで、設問に答えよ。
JIS X 0129-1では、ソフトウェア製品の品質について、表1に示す六つの品質特性を定めている。

これらの品質特性のうち、コーディングの段階では、信頼性、効率性、保守性、移植性を考慮することが大切である。
あるソフトウェア開発会社では、開発するソフトウェア製品の品質向上を図るため、品質特性を考慮したプログラム開発の社内標準を制定し、作成したプログラムのコードレビュー体制を確立した。
表2は、最近のコードレビューで新人のプログラム開発担当者が受けた指摘の例である。
設問1:
問題文を見る 表2中のに入れる正しい答えを、解答群の中から選べ。
a, eに関する解答群
ア:移植性(環境適応性)
イ:効率性(資源効率性)
ウ:信頼性(成熟性)
エ:保守性(解析性)
オ:保守性(変更性)
bに関する解答群


cに関する解答群
ア:更新した時点で障害と分かるが、ログを記録する機能のあるOSは少ない
イ:更新した時点で障害と分かるが、ログを記録する機能のあるハードウェアは少ない
ウ:更新内容を後で参照したときに障害となることが多く、原因箇所の特定が困難である
エ:取得可能な主記憶域が残っている間は、障害を検知できない
dに関する解答群
ア:指定できる変数や関数の個数
イ:変数や関数の型宣言で省略した場合のビット数
ウ:リンカで扱える関数のビット数
エ:ローダで扱える関数の個数
模範解答
a:ウ、b:イ、c:ウ、d:イ、e:ア
解説
解答の導き方
表2では、プログラムのどこに問題があり、直すとどの品質が向上するかを考えます。品質特性とは、ソフトウェアの品質をいくつかの観点に分けたものです。
a:0による割り算を防ぐ処理
最初の例では、合計を件数で割って平均を求めています。件数が0のまま割り算をすると、計算できずにプログラムが正常に動かなくなることがあります。
そこで、Countが0より大きい場合だけ割り算を行い、そうでなければAveに0を設定しています。このように、プログラムの不具合による障害を起こしにくくすることは、信頼性の向上につながります。
信頼性の副特性である成熟性は、ソフトウェアが障害を起こしにくい性質です。したがって、aは**信頼性(成熟性)**です。
b:同じ計算を何度も行わない処理
このプログラムでは、rごとに、内側のループでcを変えながら配列Xの値を確認しています。配列は、複数の値を順番に並べて扱う仕組みです。
Sub(r)は計算時間が長い一方、返却値は引数だけに依存するとあります。rが同じ間は、内側のループでcが変わってもSub(r)の結果は変わりません。そのため、内側のループのたびにSub(r)を計算する必要はありません。
選択肢イでは、外側のループでSub(r) + 1をS1に入れてから、内側のループでその値を繰り返し使います。これなら、同じrについてSub(r)を一度だけ計算すれば済みます。計算時間を短くするための変更なので、効率性のうち時間効率性に当たります。
ほかの選択肢では、アは内側のループでSub(r)を毎回計算するため、時間のかかる処理を減らせません。また、ウとエはX[r, c]の値をXrcに移してから書き換えていますが、示された処理だけでは、書き換えた値が配列Xに戻りません。元の処理と同じ更新にならないため、適切ではありません。
c:動的に取得した記憶域を誤って扱う問題
主記憶は、プログラムの実行中にデータを置いておく記憶域です。動的取得は、プログラムの実行中に必要な記憶域を確保すること、動的開放は、不要になった記憶域を返すことです。
取得した範囲外や、すでに開放した記憶域を書き換えても、その場ではすぐに障害が起きるとは限りません。別のデータを壊し、そのデータを後から使ったときに問題が表面化することがあります。その場合、原因となった書き込みを見つけるのが難しくなります。
選択肢ウの「更新内容を後で参照したときに障害となることが多く、原因箇所の特定が困難である」が、この状況に当たります。デバッグ機能付きの関数を使えば、こうした誤りを見つけやすくでき、試験性の向上につながります。
d:型宣言でビット数を省略した場合の違い
型宣言は、変数や関数がどの種類の値を扱うかを示すものです。整数型のビット数が機種によって異なると、同じプログラムでも、扱える値の範囲や計算結果に違いが出ることがあります。
そこで、機種の違いに左右されないように、型宣言を32ビット整数型と明示するよう求めています。問題文の「型宣言で省略した場合のビット数」が機種によって異なる、という説明に合うのは選択肢イです。
e:機種の違いに合わせて使える性質
dのように整数型のビット数を機種に任せると、機種を変えたときにプログラムの動作が変わるおそれがあります。機種が変わっても同じように使えるように、型を明示することは、ある環境から別の環境へ移せる性質に関係します。
移植性の副特性のうち、異なる環境に適応できる性質は環境適応性です。したがって、eは**移植性(環境適応性)**です。
誤りやすいポイント
- aの処理は、計算結果を正しくするだけでなく、0による割り算でプログラムが止まるのを防いでいます。障害を起こしにくくする点に注目します。
- bでは、Sub(r)の結果がrだけで決まることが手掛かりです。内側のループで変わるcに依存しないため、計算を外側のループに移せます。
- cでは、誤った書き込みがあった時点ですぐ障害になるとは限りません。後でデータを使ったときに問題が起き、原因を見つけにくくなる点が重要です。
- dは、整数型を明示する理由と、改善される品質特性を分けて考えます。型のビット数の違いが原因で、別の機種に移したときに問題が起きるため、eは移植性に関係します。
FAQ
Q: aの「成熟性」と、cの「試験性」はどう違いますか?
A: 成熟性は、プログラムが障害を起こしにくい性質です。試験性は、テストやデバッグで問題を見つけやすい性質です。aは障害を防ぐ処理で、cは誤りを見つけやすくする処理です。
A: 成熟性は、プログラムが障害を起こしにくい性質です。試験性は、テストやデバッグで問題を見つけやすい性質です。aは障害を防ぐ処理で、cは誤りを見つけやすくする処理です。
Q: bでは、Sub(r)の計算をどこへ移せばよいですか?
A: 外側のループの中で、内側のループが始まる前に計算します。すると、同じrについては計算結果を使い回せます。
A: 外側のループの中で、内側のループが始まる前に計算します。すると、同じrについては計算結果を使い回せます。
Q: dで32ビット整数型を明示すると、なぜ移植性が高まるのですか?
A: 機種による型のビット数の違いを避けやすくなるためです。異なる機種でも、同じ大きさの整数として扱えるようになります。
A: 機種による型のビット数の違いを避けやすくなるためです。異なる機種でも、同じ大きさの整数として扱えるようになります。
関連キーワード: 品質特性、信頼性、時間効率性、動的メモリ管理、試験性、移植性




