平成18年春期 午前問15

LNRACさん  
(No.1)
よろしくお願いします。この問題が分からずに困っています。
https://www.ap-siken.com/kakomon/18_haru/q15.html

よく解らなかった方が私以外にもいたようで、こういうやりとりも見つかりました。
https://www.ap-siken.com/bbs/1164.html

そもそも論として、
個人的には決定表の条件指定部の全行に対応して動作部が決まると思っていたのですが、
決定表の条件指定部には順序があり、それによって動作部が変わるということがあるのでしょうか。

どなたか助けていただけるとありがたいです。
2022.09.30 06:10
LNRACさん  
(No.2)
すみません、「そもそも」のところは解決しました。
if で実装する時に気を付けようね、みたいな問題だと理解しました。
2022.09.30 06:36
LNRACさん  
(No.3)
アで条件1234がYNYYの場合、
条件1→2→3の順に検査すると動作2に決まる。
条件4→3→2の順に検査するとどの動作もしない。

ってことは無いですか?
分からない……
2022.09.30 07:39
LNRACさん  
(No.4)
自己レスです。どなたかツッコんで下さるとありがたいです。

結論としては、「この問題にこだわるべきではない」あたりでしょうか。

・”-“ =「YでもNでもどちらでもよい」とした場合
選択肢イにおいて、列3, 4が重複してしまう。ウでもエでも重複ができてしまう一方、アではそうはならないので、この異質なアを回答することはできる。ただし、「検査する順序を変えても、動作が変化しない決定表」という趣旨には沿わない。

・”-“ =「条件が発生しない」とした場合
if文を(ネストして)書く/書かないによって実装するとして、選択肢イでは「条件1~3が"NYN"の場合では、条件2の判定を先にすると動作3のみ、条件3の判定を先にすると動作1,3が実行される」。がしかし、アでは「条件1~4が”YNYY”の場合」で、条件4から降順に判定して動作2を実行させることを観念できない(if文を書けない?)。結果、アが正解ではなくなってしまう。
2022.09.30 17:52
LNRACさん  
(No.5)
ひとりレス最終版です(たぶん)。

これは「条件1~4の検査する順序」という日本語の問題だと思い直しました。
つまり、条件部の行の順序の問題(条件1~4の順序を入れ替える)ではなく
条件部の列の順序の問題(条件1~4はそのままで、列の順序を入れ替える)。
そしてイウエでは重複している列があるので、つられて動作も変わるのでしょう。

このとおりだとすれば、管理人さんには解説を直していただかなければいけませんが、
私にもよく分かりません。
どなたか意見をいただけるとありがたいです。
2022.09.30 18:45
LNRACさん  
(No.6)
ありがとうございます!  そんな探し方もあるのですね。

>回答イの三列目
>条件3と条件4は、指定されていないので"Y"であっても"N"であっても
>条件1が"N"であり条件2が"Y"であれば、動作3となるはず。

ここがまず分からないです。
四列目 条件2と4も指定されていないので、
条件1が"N"であり条件2が"Y"であれば動作3と動作1・3の両方になりそうに思えます。

>仮に、条件3と条件4が"N"の場合を考えてみる。
>
>①条件1"N" → 条件2"Y" とすると動作3となるので問題なし。

四列目条件2はY/Nですが、どう排除されたのでしょうか。

>②条件3"N" → 条件1"N" とすると動作1と動作3となってしまう。

三列目条件3はY/Nですが、どう排除されたのでしょうか。

>上①②のように条件の順序変えたら動作が変わってしまってるでしょ。 


jjon-com様を含め分かる方から助言いただけると幸いです。
2022.10.01 04:24
LNRACさん  
(No.7)
お~Howitzer様ありがとうございます!
非常に恥ずかしながら、私はそこを見てもあまりよく分からなかったのですが、
こういう理解でいいでしょうか?
問題文が「判定しない」と言っているので、Y/Nにあまりこだわらず

・ものすごくベタに、各列をifとelseのプログラム(「検査する順序」)に書き換える
・イにおいて、"NYN-" に対して3列目(条件2)を先に書くか4列目(条件3)を先に書くかで違った動作を得る。ウでもエでもしかり
・がしかし、アではこういう違いが一切起こらない
2022.10.01 06:18
jjon-comさん 
AP プラチナマイスター
(No.8)
・LNRACさんの問題意識は正しい
・元々の問題文が正しくない
・この応用情報ドットコムの解説も不正確
  https://www.ap-siken.com/kakomon/18_haru/q15.html

だと考えます。

以下、「JIS X 0125:1986 決定表」から引用しつつ、私の考えを述べます。

----
4.1 条件
列記された条件の間の関係は,論理積 (AND) とする。最初の条件の前に,IFがあるものと想定する。
    例 :  IF(最初の条件)AND(2番目の条件)AND···AND(最後の条件)
条件を列記する順番が,効果をもつことがある。順番が意味をもたない場合には,読みやすくするために,重要な条件,すなわち,“キー”条件を最初に記述してもよく,その場合の順番は,プログラム作成に当たって選定する順番とは異なってもよい。
----

上記より、

> 決定表では、上から順に、つまり、この問題では条件1、2、3、4の順に判定します。
https://www.ap-siken.com/bbs/1164.html

という理解は間違っている、と私は判断しました。

さらに、
問題文に登場する決定表では「条件」と「動作」という「行に対する名称」しか与えられていないのですが、JISでは決定表の「列に対する名称」も規定されています。

----
2. 用語の意味
(4) 規則 (rule)
表の条件指定部及び動作指定部を通る一つの列であって,満たされるべき条件のただ一つの組合せと,それに対応する動作との組を定義するもの。ある規則が満足されるとは,すべての条件がその規則の条件指定に合致することをいう。

4.3 規則
列記された規則の間の関係は,排他的論理和とする。
決定表における規則の順番は,意味をもたない。ただし,補完規則を用いる場合には,読みやすくするために,表の最後の規則として書くほうがよい。
----

決定表が表現するのは、この条件に合致する入力データを与えたらこの動作(出力)をする、というブラックボックスの仕様なので、

> 決定表における規則の順番は,意味をもたない。

のですが、これをプログラムとして実装する際には、ホワイトボックスの構造、すなわち、どの順番で規則を判定していくかを決めてプログラムコードで書くことになります。

以上より。

元々の問題文は、
条件1~4の検査する順序を変えても、ではなく、
規則1~4を検査する順序を変えても、と書くべきもののように私は思いました。

つまり、LNRACさんの次の指摘は正しい、と私は考えるということです。

> これは「条件1~4の検査する順序」という日本語の問題だと思い直しました。
> つまり、条件部の行の順序の問題(条件1~4の順序を入れ替える)ではなく
> 条件部の列の順序の問題(条件1~4はそのままで、列の順序を入れ替える)。
2022.10.01 13:55
LNRACさん  
(No.9)
jjon-com様、本当にありがとうございます!
頼もしく知的な方から手数のかかったレスをもらえて本当にありがたいです。
私が今年受け取った親切の中で、間違いなくNo.1です。

jjon-com様のレスを受けて、仮説をまとめ直しです。

・決定表はテクノロジでも経営でも使えるが、
  問題番号が15ということでテクノロジの出題であって、
  実装が意識されている。
  
・作問者はテクノロジに明るく、受験生に
  「決定表を変な風に作ると取り扱いが面倒くさくなるのを知っているかな?」
  程度のことを、かんたんに確かめたかった。

・出題された決定表の実装プログラムは、国家資格らしく
  JISに則って最初の条件の前に if を置き、
  JISに則って排他的論理和として else を連ねた程度のイメージ。
  (私が上のほうで「条件4のif文を書けない」と言っていますが、
    たかだが午前の問題でそんなややこしいのは考えにくい)。
  ここにおいて、「規則」の書き込み順を変える。

です。

余談ですが、私がこんな古い問題に関わって苦しんでしまったのは
テーマ別学習をしていて決定表の出題例を検索してしまったからなのですが、
何とちょうど1か月前にもやりとりがあったのが見つかりました。
奈々氏さん、いらっしゃるでしょうか?

https://www.ap-siken.com/bbs/3590.html



jjon-com様と私の説が、未来の受験生の皆様にまで役立てば幸いです。
2022.10.01 16:07
boyonboyonさん 
AP シルバーマイスター
(No.10)
[3590]に登場する。boyonboyonです。
こちらのスレも拝見させていただきました。
深く考えるとなかなか難しいものですね。

自分も新たに説明を考えてみました。
一応私見として述べさせていただきます。

まず、条件をクリアしたら、1ずつ加算するカウンターを列ごとに作ります。
左の列から、C1,C2,C3,C4 とします。

動作を決めるルールを下記のようにします。

C1,C2,C3,C4の初期値を列にある"-"の数にする。
与えられた決定条件と一致した列は、カウンターの値を1増やす。
1行目の条件から、4行目の条件まで行ごとに全列照合する。
"-"のときは、カウンターはそのまま。
最初にカウンターの値が4になった列の動作をする。

こうすると、例えば、(イ)の決定表で条件1~3が"NYN"の場合、
条件2→条件3 の順では、C3 が先に4になります。
条件3→条件2 の順では、C4 が先に4になります。
条件1を後に回すとC3,C4が同じタイミングで4になり動作は不定になります。

C1,C2,C3,C4の動きは、
初期値      0    2    2    2

条件1      0    2    3    3
条件2      1    2    4    3
条件3      1    2    4    4
条件4      1    2    4    4

条件1      0    2    3    3
条件3      1    2    3    4
条件2      1    2    4    4
条件4      1    2    4    4

条件2      1    2    3    2
条件3      1    2    3    3
条件4      1    2    3    3
条件1      0    2    4    4

となります。
問題とは関係ありませんが、最終的に4になる列が複数ある場合は、決定表として不適だと思います。

(ウ)と(エ)も同じような結果になります。
(ア)は、4になる列が複数になることはありません。

(ア)の例として、条件1から4が"YNYY" としてカウンターの動きを見ます。
(スレ主さんのNo.3の設定)
初期値      0    2    2    2

条件1      1    3    2    2
条件2      1    4    2    3
条件3      2    4    2    3
条件4      3    4    2    3

条件4      1    2    2    2
条件3      2    2    2    2
条件2      2    3    2    3
条件1      3    4    2    3

順序を変えても2列目が選択されます。

と、こんな風に考えると問題の解答を導けます。
こんな考え方はどうなんですかね。
2022.10.01 23:44
LNRACさん  
(No.11)
お~ boyonboyon 様、ありがとうございます。
[3590] は決して無視したのではなく、
この掲示板の検索機能で検索した時にすぐに見つけられず、
昨日初めて読ませていただいたところでした。

お忙しいところ新たに丁寧な説明を考えて下さって、本当に恐れ入ります。
条件の判定順を変える解説の中では、最も解りやすいです。
最初にこちらに出会えば、それで終わった 1 問だったかもしれません。

ただ、純粋に分からない
(boyonboyon 様は私より理系センスが高いように見受けます)のですが、

・"-" について。そもそもの順序と無関係に最優先にし、
  1 を加算して Y と同じ判定をする理由がよく分かりません。

・JIS が「決定表の条件は AND で結合」と書いているところ、
  C4 で 0 が出現したので C4 を捨ててしまうなら分かります
  (最後まで判定してもどうせ 0 になるので)が、
  0 が出現していない C4 がまだ判定を残しているのに打ち切って
  C3 だけに確定されてしまうのは疑問が残ります。

もうひとつ書いて、作問者がそこまで難しいものを
たかが AP 午前の 1 問に入れてくるとは思いにくいのですが、
いかがでしょうか。
作問者のコミュニケーションミスだと考えたいです(苦笑)。
2022.10.02 06:20
jjon-comさん 
AP プラチナマイスター
(No.12)
このスレッドを目にするまで、決定表がJIS規格にあることすら気づいていなかった私です。

「JIS X 0125:1986 決定表」に目を通してみて、それを基準にした発言ができそうなので、ご紹介しておきます。

> 最終的に4になる列が複数ある場合は、決定表として不適だと思います。

JISではそれを指す用語が規定されていました。

「条件1~4の検査する順序を変えても,動作が変化しない決定表はどれか」
という問題文は、JIS用語で書き換えるなら、
「多重適合決定表ではない、単適合決定表はどれか」
ということになります。

----
2. 用語の意味
(2) 単適合決定表 (single-hit decision table)
条件の組合せのどの一つも,ただ一つの規則においてだけ満たされる決定表。混同のおそれのない場合は,これを単に決定表と呼んでもよい。

(3) 多重適合決定表 (multiple-hit decision table)
条件の組合せのうちの少なくとも一つが,二つ以上の規則によって満たされる決定表(1.の備考2.参照)。

1. 適用範囲
備考
1. この規格は,計算機による情報システムの文書化における決定表の利用法を対象とし,プログラム文の表記などの他の利用法は規定しない。
2. 多重適合決定表の作成と利用のための形式及び用法は,対象としない。
----
2022.10.02 12:45
jjon-comさん 
AP プラチナマイスター
(No.13)
この投稿は投稿者により削除されました。(2022.10.02 12:53)
2022.10.02 12:53
jjon-comさん 
AP プラチナマイスター
(No.14)
さらに「JIS X 0125:1986 決定表」では、決定表の解釈についても規定しています。

----
6. 決定表の解釈
6.1 解釈の方式
 決定表の解釈の方式は,次の(1)又は(2)とする。いずれの方式を用いるかは,規定しな
い(4.1参照)。
----

まず先に、(2)の行順序方式の文を引用します。

----
(2) 行順序方式 (linear method) 条件を一つずつ順番に判定していき,満足される規則を定める。その手順は,次のとおりとする。

(a) 最初の条件を判定する。
(b) この判定によって満足されない規則をすべて無視する。
(c) 残った規則について次の条件を調べる。その条件が,残った規則の全部について“-”指定をもっているならば,その条件を無視する。その条件が,残った規則の一部について“-”以外の指定をもっているならば,その規則だけについて条件を判定する。
(d) すべての条件が判定されるか又は無視されるまで,手順(b)及び(c)を繰り返す。
(e) 条件判定のすべての結果によって満足される一つの規則が適用される。又は,いかなる規則も満足されないときには,補完規則が適用される。その規則で指定されたすべての動作を順番に実行する。
----

ここから読み取れるのは、
最終的に一つの規則(列)が適用されるのだけれど、すべての条件判定を満足する規則(列)が複数存在する多重適合決定表において、どの規則(列)が選ばれるかの規定はない、ということです。

続いて、(1)の列順序方式の文を引用します。

----
(1) 列順序方式 (columnar method) 事例を特定しておき,この事例について規則を一つずつ順番に調べていき,満足する規則を定める。その手順は,次のとおりとする。

(a) 特定された事例についてすべての条件を判定し,それらすべての値を定める。
(b) それらの値によって規則を一つずつ順番に調べていく。一致する値の組が見つかったら,その規則に指定されているすべての動作を順番に実行する。
(c) 特定された事例についての値によってどの規則も満足されないなら,補完規則に指定されているすべての動作を順番に実行する。
----

両者の違いに気づきましたか。

(2)の行順序方式では、満足する規則(列)を選ぶタイミングは、すべての条件判定を終えた後です。そして候補が複数存在した場合、どの規則(列)を「満足される一つの規則」として選ぶかは規定されていない。

> 最初にカウンターの値が4になった列(規則)の動作をする。

のように、優先される列(規則)を決める別の決まりが必要になるということです。

それに対して、
(1)の列順序方式では、満足する規則(列)を選ぶタイミングは、規則(列)を一つずつ順番に調べていって満足する規則(列)が見つかった時点です。それ以降、未調査の規則(列)を調べていくことはしません。

以上から、やはり、元々の問題文は、
条件1~4の検査する順序を変えても、ではなく、
規則1~4を判定する順序を変えても、と書くべきだったと私は考えます。
2022.10.02 12:57
LNRACさん  
(No.15)
jjon-com様、たびたび情報をありがとうございます。

"決定表" "行順序方式" で google 検索しても JIS 以外のヒットが全く無く、
私も非常に珍しい情報に触れた思いがします。
おかげさまで、「規則1~4を判定する順序を変えても」説の根拠が強化されたようで
ありがたいことです。

もっとも、試験の解説が参考書やサイトによって分かれるのはよくあることで、
私も上の解釈だけが正しいと強硬に言いたいわけでもありません。
ただ、この問題については、応用情報技術者試験ドットコム様よりは、
「情報処理技術者試験の勉強(過去問題)をやり直し」様のほうが分があるかもしれない
と、飽くまでも個人的に思います。

私が想像するところ、ある種の(ベテランの?)専業エンジニアの方には
「決定表から検査をすると言えば列(「規則」)単位に決まってる」という常識のようなものがあり、
それが作問者様の出題の仕方になり、それを当然として受け止めた
「情報処理技術者試験の勉強(過去問題)をやり直し」様の解説の仕方になったように見受けます。
あちらでは、行や列という言葉が一切登場しません。
しかもインターネット上では少数説なので、
もやっとしたまま離脱した人がある程度いそうです。

ともあれ、個人的にはこれで安心して本番のために集中できそうです。
皆様、本当にありがとうございました。
2022.10.02 19:21
LNRACさん  
(No.16)
上の書き込み後気づいたこと少々を、後学の皆様の参考に加筆しておきます。

まず、この問題は検査(の順序)=テスト(の順序)をテーマとしています。

"決定表 テストケース 規則" で検索すると、
この試験の主催団体であるIPA様、
JaSSTソフトウェアテストシンポジウム(ソフトウェアテスト技術振興協会)様、
テスト・品質保証を得意とする企業様等等より
テスト技法の説明が見つかります。そこには、
「規則(列)1つ1つからテストケースを作成」「全ての規則(列)によって検査」
というような話が多くあります。

"デシジョンテーブルテスト" での検索も、ヒット数が多いです。


私がすぐ上で書いた「ある種の(ベテランの?)専業エンジニアの方」の答えも、
「テスト分野の」で確定していいと考えます。


以上、お騒がせ致しました。
2022.10.04 18:50

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop