平成30年春期試験午後問題 問8

問8 情報システム開発

⇱問題PDF
プログラムの品質評価に関する次の記述を読んで,設問1~3に答えよ。
 Z社では,全国に店舗展開する家電量販店向けに,顧客管理システムを開発している。開発中の顧客管理システムは,運用開始後,家電量販店の業務内容の変化に合わせて,3か月おきを目安に継続的に改修していくことが想定されている。
 Z社では,プログラムの品質を定量的に評価するために,メトリクスを計測し,活用している。プログラムを関数の単位で評価する際には,関数の長さとサイクロマティック複雑度をメトリクスとして計測し,評価する。開発プロセスにおいては,プログラムのテストを開始する前にメトリクスを計測し,評価された値が,あらかじめ設定されたしきい値を上回らないことを確認することにしている。
 開発中の顧客管理システムについても,開発プロセスのルールに従い,この評価方法によって評価した。

〔サイクロマティック複雑度〕
 サイクロマティック複雑度とは,プログラムの複雑度を示す指標である。プログラムの制御構造を有向グラフで表したときの,グラフ中のノードの数Nとリンク(辺)の数Lを用いて次の式で算出する。
サイクロマティック複雑度 C = L - N + 2
 プログラムの制御構造を有向グラフで表した例を図1に示す。プログラムの開始位置と終了位置,反復や条件分岐が開始する位置と終了する位置をノードとし,ノード間をつなぐ順次処理の部分をリンクとしてグラフにする。ノードの間に合まれる順次処理のプログラムの行数は考慮せず,一つのリンクとして記述する。また,図1のリンク1やリンク4のように,処理がない場合も一つのリンクとして記述する。
pm08_2.png
 図1の場合,ノードの数Nは4,リンクの数Lは4となり,cはaと評価される。
 ソフトウェアの内部構造及び内部仕織に基づいたテストをbという。Z社では,bを実施するに当たって,全ての条件分岐の箇所で,個々の判定条件の真及び偽の組合せを満たすことを基準としたテストを実施する方針としている。このような方針をcという。一般に,サイクロマティック複雑度は小さい方が,実行網羅率100%を目指すために必要なテストケース数が少なくなり,テスト工程の作業が容易になる。Z社では,サイクロマティック複雑度のしきい値を10に設定している。

〔評価対象のプログラム〕
 開発中の顧客管理システムにおいて,顧客から問合せを受け付けた際に記録する情報には,タイトル,概要,発生店舗,詳細情報及び顧客の個人情報が含まれており,これらの情報をまとめたものを案件と呼ぶ。案件には,未完了と完了のステータスがある。画面に案件の情報を表示する際には,案件のステータスとシステムの利用者の立場によって,情報の公開範囲と編集可否の権限を制御する必要がある。
 図2は,画面上に案件の一覧を表示する際の権限判定を行うプログラムの一部である。システムの利用者の役職や所属する店舗と,それぞれの案件のステータスから,画面上に表示する情報の公開範囲と編集可否についての権限を判定する。
 図2のプログラムについて,メトリクスの計測を行った。計測結果を表1に示す。
 なお,サイクロマティック複雑度の計測のために作成した有向グラフの記載は省略する。
pm08_3.png
 表1の計測結果から,図2のプログラムはサイクロマティック複雑度がしきい値を上回っており,テスト実施のコストが大きくなることが予想される。そこで,プログラムの外部的振る舞いを保ったままプログラムの理解や修正が簡単になるように内部構造を改善するdを行うことにした。改善する一つの方法として,図2のプログラム中(A)の範囲を"未完了案件権限判定",(B)の範囲を"管理者権限判定"という名称で関数化することを検討した。改善後のプログラムを図3に,改善後のプログラムの有向グラフを図4に示す。
pm08_4.png
 図3のプログラムのサイクロマティック複雑度はfであった。また,関数"未完了案件権限判定"については6,"管理者権限判定"については2となった。その結果,全てのプログラムのサイクロマティック複雑度がしきい値を上回らないことが確認された。

〔改善の効果〕
 簡潔なプログラムにすることによって,プログラムの可読性が高まり,初期開発時の機能実装のミスを減少させることができる。また,プログラムのリリース後に発生する改修や修正の難易度を下げることができる。そうすることによって,ソフトウェアの品質モデルのうち,機能適合性及びgを高めることができる。
 Z社で開発している顧客管理システムのような場合,①リリース後の改修や修正の難易度を下げることが,初期開発が容易になることよりも重要であることが多い。

設問1

本文中のacに入れる適切な字句を答えよ。

解答例・解答の要点

a:2
b:ホワイトボックステスト
c:条件網羅

解説

aについて〕
リンク数L=4とノード数N=4を式に当てはめるだけです。

 C=4-4+2=2

a=2

bについて〕
内部構造に基づき仕様書どおりに動作するかを検証するために実施されるテストをホワイトボックステストといいます。主にプログラムやモジュールの単体テストとして実施されるテスト手法です。
なお、ホワイトボックステストに対して、内部構造を意識せずに入力と出力の関係だけに着目して行われるテストを、ブラックボックステストといいます。

b=ホワイトボックステスト

bについて〕
テストケースを作成する際の網羅性のレベルには次のようなものあります。
命令網羅(網羅性:低い↑)
すべての命令を少なくとも1回は実行するテストケースを設計する。
分岐網羅(判定条件網羅)
判定条件の真偽を少なくとも1回は実行するテストケースを設計する。
条件網羅
判定条件が複数ある場合に、それぞれの条件の真・偽を少なくとも1回は実行するテストケースを設計する。
判定条件・条件網羅
判定条件網羅と条件網羅を組み合わせたテストケースを設計する。
複数条件網羅(網羅性:高↓)
判定条件のすべての可能な結果の組合せを網羅し、かつ、すべての命令を少なくとも1回は実行するようにテストケースを作成する。
本文中には「個々の判定条件の真及び偽の組合せを満たす」と説明されており、この記述の「個々の」の部分から条件網羅であると判断できます。

※もし方針が複数条件網羅ならば「判定条件の全体として考え得る全ての組合せを満たす」というような説明になるはずです。例えば2つの判定条件があるとして、条件網羅であれば「真,真」「偽、偽」という2つで個々の条件の真偽の組合せを網羅できますが、複数条件網羅では「真,真」「真,偽」「偽,真」「偽,偽」という4つを用意しなければなりません。個々の判定条件の真偽の組合せを満たしただけでは複数条件網羅とはならないことがわかります。

c=条件網羅

設問2

〔評価対象のプログラム〕について,(1),(2)に答えよ。
  • 本文中のdに入れる適切な字句を答えよ。
  • 図4中のeを埋めて有向グラフを完成させよ。また,本文中のfに入れるサイクロマティック複雑度を求めよ。

解答例・解答の要点

  • d:リファクタリング
  • e:pm08_5.png
    f:5

解説

dについて〕
dの前の「プログラムの外部的振る舞いを保ったまま…内部構造を改善する」という記述よりリファクタリングが入るとわかります。

リファクタリング(Refactoring)は、アルゴリズムを見直して処理効率を向上させたり、プログラム内で複数行われる共通処理を関数化して保守性を向上させたり、変数名の改善やコメントの追加などで可読性を向上させたりするなどのように、ソースコードを見直してプログラムの品質改善を図ることを目的として実施されます。

d=リファクタリング

eについて〕
図4「改善後の有向グラフ」に図3「改善後のプログラム」を対応させると次のようになります。
pm08_6.png
プログラム中の反復・分岐のうち有向グラフとして表現されていないプログラムは、7行目から9行目の以下の部分です。
if (公開フラグが立っている)
 権限 ← 詳細情報だけを参照可能
endif
したがってeにはこのプログラムを表した有向グラフが入ります。7行目から9行目と同じプログラム構造である11行目から13行目の以下の部分がpm08_5.pngで表されていることを踏まえれば、eにも同じpm08_5.pngが入ると判断できます。
pm08_7.png
epm08_5.png

fについて〕
改善後の有向グラフのリンク数及びノード数を数えて式に当てはめて計算します。リンク数L=13、ノード数N=10 ですので、サイクロマティック複雑度Cは、

 C=13-10+2=5

f=5

設問3

〔改善の効果〕について,(1),(2)に答えよ。
  • 本文中のgに入れる適切な字句を解答群の中から選び,記号で答えよ。
  • 本文中の下線①について,その理由を35字以内で述べよ。
g に関する解答群
  • 移植性
  • 互換性
  • 使用性
  • 信頼性
  • 性能効率性
  • 保守性

解答例・解答の要点

  • g:
  • プログラムの改修や修正が継続的に発生することが想定されるから (30文字)

解説

  • gについて〕
    選択肢のソフトウェア品質特性についてはJIS X 25010:2013にて以下のように定義されています。
    機能適合性 (functional suitability)
    明示された状況下で使用するとき,明示的ニーズ及び暗黙のニーズを満足させる機能を,製品又はシス テムが提供する度合い
    性能効率性 (performance efficiency)
    明記された状態(条件)で使用する資源の量に関係する性能の度合い
    互換性 (compatibility)
    同じハードウェア環境又はソフトウェア環境を共有する間,製品,システム又は構成要素が他の製品,システム又は構成要素の情報を交換することができる度合い,及び/又はその要求された機能を実行することができる度合い
    使用性 (usability)
    明示された利用状況において,有効性,効率性及び満足性をもって明示された目標を達成するために,明示された利用者が製品又はシステムを利用することができる度合い
    信頼性 (reliability)
    明示された時間帯で,明示された条件下に,システム,製品又は構成要素が明示された機能を実行する度合い
    保守性 (maintainability)
    意図した保守者によって,製品又はシステムが修正することができる有効性及び効率性の度合い
    移植性 (portability)
    一つのハードウェア,ソフトウェア又は他の運用環境若しくは利用環境からその他の環境に,システム,製品又は構成要素を移すことができる有効性及び効率性の度合い
    これを踏まえると、本文で説明されている「初期開発時の機能実装のミスを減少…」は機能適合性の向上に当たるとわかります。つまりfには「プログラムのリリース後に,発生する改修や修正の難易度を下げること」により向上する品質特性が入ることになります。それぞれの品質特性の定義から考えれば、この品質特性に該当するのは保守性であると判断できます。

    g=カ:保守性

  • 本文の冒頭に、Z社で開発している顧客管理システムについて以下の説明があります。

    「運用開始後,…,3カ月おきを目安に定期的に改修していくことが想定されている」

    Z社の顧客管理システムでは、改修や保守が定期的に生じることが想定されているので、保守性の高いシステムであることが重要な要件となります。

    ∴プログラムの改修や修正が継続的に発生することが想定されるから
模範解答

Pagetop