跳到正文

平成23年度 特別試験 ITパスポート試験 問94

这道题的解析和你的作答记录。

問94
頻出度★★★

Q社のRさんは,チケット販売システムの開発で使用する関数のプログラミングとテストを実施しようとしている。この関数は,大人と子供のチケットの購入希望枚数を基に,合計金額の計算を行う。大人のチケットは3,000円,子供のチケットは1,000円である。一度に購入できる大人と子供のチケットの最高枚数は,それぞれ20枚までであり,関数はこの購入条件を満たしているかどうかをチェックする。また,合計で20枚以上購入する場合,割引処理を行う。関数の仕様と処理内容は次のとおりである。 〔関数の仕様〕 関数に渡される引数  J:大人のチケットの購入希望枚数,K:子供のチケットの購入希望枚数  (J,Kは0以上の整数) 関数の戻り値  L:合計金額 (Lは整数) 〔処理内容〕 (1) 購入希望枚数を基に,購入条件を満たしているかどうかを判定する。購入条件を満たしていない場合,合計金額に−1を代入する。 (2) 購入条件を満たしている場合,引数を基に次のとおりに合計金額の計算を行う。   合計金額 = 大人のチケットの購入希望枚数×3,000+子供のチケットの購入希望枚数×1,000 (3) チケットを合計で20枚以上購入した場合は,合計金額から1割を割り引く。 関数のテストを行うために,条件のすべての組合せと処理を整理したものを表1に示す。表1のb,cに入れる適切な字句の組合せはどれか。 表1 条件のすべての組合せと処理

①②③④⑤⑥⑦⑧
条件Jが0以上20以下YYNNYYNN
条件Kが0以上20以下YYYYNNNN
条件J+Kが20より小さいYNYNYNYN
処理合計金額を求めるXX
処理合計金額を1割引とする-b
処理合計金額に−1を代入する--c

注記1 網掛けの部分は,表示していない。 注記2 Yは条件に該当し,Nは条件に該当しない。Xは処理を実行し,-は処理を実行しない。例えば①の場合,三つの条件に対する結果が,Y,Y,Yとなったとき,合計金額を求める処理が実行されることを示す。

出典 平成23年度 特別試験 ITパスポート試験 問94
解説

問 94

  • ア

    正解 正确答案是ア(b:X、c:X)。表1是决策表(decision table),上半部分的条件部分把三个条件的 Y/N 的全部组合(2的3次方=8种)作为列①~⑧排列出来,下半部分的处理部分用 X(执行)/ -(不执行)表示各列中要执行的处理。首先求 b。条件1「J在0以上20以下」和条件2「K在0以上20以下」同时为 Y,也就是两个参数都在正常范围内的列,只有①和②这两列,二者的区别仅在于条件3「J+K小于20」是 Y 还是 N。①是 求合计金额=X、打九折=-、赋值−1=-,②也是 求合计金额=X、赋值−1=-,与①相同。此时如果 b 为 -,①和②的处理就完全一样,条件3 便成了不会改变任何结果的无意义条件。而且「将合计金额打九折」这个处理在①和②中都不会被执行(③以后是 J 或 K 超出范围的异常情况),把它特意列为决策表中的一个处理行也就失去了意义。因此 b=X,可以由此读出这个函数的规格是「当 J 和 K 都在正常范围内、并且 J+K 在20以上(批量购买)时,把合计金额打九折」。接下来求 c。列④中 条件1=N,即 J 超出了0以上20以下的范围,属于参数不合法的情况。「给合计金额赋值−1」是为了用−1这个异常值告知调用方未能正常完成计算的错误处理,实际上在两个参数都正常的①②中它都是 -。如果在超出范围的④中不执行它,返回异常值这一动作就在任何地方都不起作用,不合法的参数会被就此放过。因此 c=X。b=X、c=X 的组合就是ア。

  • 错误イ

    b:X 是正确的,但 c:- 是错的。列④中「J在0以上20以下」=N,属于参数 J 超出有效范围的异常情况。如果在这里不执行「给合计金额赋值−1」(即填 -),那么④中就没有任何处理会被执行,即使传入了不合法的参数,处理也会在没有向调用方告知任何信息的情况下结束。赋值−1 是为了返回表示无法计算的异常值的错误处理,正应该在参数超出范围的列中执行,所以 c 必须是 X。

  • 错误ウ

    c:X 是正确的,但 b:- 是错的。条件1、条件2 同时为 Y(J 和 K 都在正常范围内)的列只有①和②,如果把 b 填成 -,①和②的处理就都成了 求合计金额=X、打九折=-、赋值−1=-,完全相同。这样一来,条件3「J+K小于20」就成了对结果毫无影响的冗余条件,与决策表整理全部组合以进行测试的前提相矛盾。此外,「将合计金额打九折」这个处理在①~⑧中的任何正常情况列里都不会被执行,设置这一处理行也就失去了意义。因此 b 是 X。

  • 错误エ

    b:-、c:- 两个都错,这是把イ和ウ的错误叠加在一起的组合。把 b 填成 - 会使①和②的处理相同,条件3 失去意义,打九折的处理一次也不会被执行。把 c 填成 - 则会使参数 J 超出范围的④中不设置异常值−1,从而无法检测出错误。在决策表中,所列出的条件都应在某一列中造成处理上的差异,所列出的处理都应在某一列中被执行,这是基本原则,而这个选项同时违反了这两点。

ここがポイント
  • 决策表(decision table)的读法 —— 上半部分的条件部分列举条件的 Y(符合)/ N(不符合)的全部组合,下半部分的处理部分用 X(执行)/ -(不执行)表示各列中要执行的处理。条件有 n 个时列就有2的n次方种,本题是3个条件,所以是①~⑧共8列。由于能够不遗漏、不重复地整理出条件组合与处理的对应关系,它被用于规格的确认以及黑盒测试的测试用例设计。
  • 填空的逻辑 —— 在决策表中,所列出的条件应在某一列中造成处理上的差异,所列出的处理应在某一列中被执行,这是基本原则。若某种填法使得仅条件取值不同的两列(①和②)的处理完全相同,就会让该条件变得冗余,因此是错误的。另外,对于超出参数范围检查(0以上20以下)的列,执行返回表示无法计算的异常值(这里是−1)的处理是常规做法。
用語
解答問94ア
练这一题

作答记录