yoshitake_1201’s diary

テストのこととか、ペンギンのこととか書きます。

デシジョンテーブルを使って仕様共有するための工夫

今年の1月からソフトウェアテスト技法練習帳にチームで取り組んでいます。
2月 ~ 3月にかけて第2章デシジョンテーブル編をやっていたのですが、ちょうどその期間に実業務でデシジョンテーブルを活かす機会がありました(↑のツイートはその時のもの) 。 自分が理解するためだけでなく、お客さんとの仕様確認でも使えるようにパッと見てわかりやすくなることを考えて作ったら意外と好評でした。
なのでこの記事ではその時期にしたポイントをまとめました。
下記の問題に対して、実際にデシジョンテーブルを書いて説明します。

・ 問題

あるショッピングサイトでは1回の購入金額や会員の種類に応じて割引を行っています。
以下に条件を書きます。
この条件と割引率を表すデシジョンテーブルを作成してください。

■ 条件
・ 会員について
 ・ 「会員種別」として「一般会員」と「有料会員」の2つがある
 ・ 会員には「会員区分」があり「なし」「個人」「小口」「大口」がある
 ・ 会員は「一般会員」「有料会員」どちらであっても、会員区分のいずれか1つを運営会社から指定される
・ 1回の購入金額に対する割引率
 ・ 「会員種別」に関係なく、1回の購入金額の合計が20,000円以上の場合は25%OFFになる
 ・ 「有料会員」は1回の購入金額の合計に関係なく15%OFFになる
 ・ 「有料会員」で「大口」の場合は30%OFFになる
・ 複数の割引率が同時に適応されることはない
・ 割引率が1番大きいものが適応される

・ 自分の解答

f:id:yoshitake_1201:20200516221417p:plain
表1

※ JIS X 0125「制限指定」との対応は以下のようになっています。
・Y: ○と表記している
・N: -と表記している
・X: ○と表記している

・ わかりやすくするためのポイント

以下の3つがわかりやすくするために自分が気をつけたポイントです。
① 「条件」と「結果」の並びのルールを合わせる
② 「結果」に条件を書く
③ 「条件」を全て書き出す

① 「条件」と「結果」の並びのルールを合わせる

f:id:yoshitake_1201:20200516221500p:plain

表1左側、条件と結果部分の順番についてです。
金額や年齢など、数字が出てきた場合は並び順を統一したほうが良さそうというものです。
「大→小」「小→大」が1つの表の中に混在すると、表を見るときに一手間増えると考えました。
例えば、条件: 「大→小」結果: 「小→大」という並びが混ざっていると、項目を探すときそれぞれどっちの順番か気にしちゃいますよね。
どちらかに揃っていれば気にしなくてよくなるので、条件と結果同じルールで書いたほうが見やすいかなぁと思いました。
ちなみに自分は「大→小」となるように書くことが多いです。

②「結果」に条件を書く

f:id:yoshitake_1201:20200516221525p:plain

結果にある(カッコ)の部分です。
ここに条件を書いておけば、テーブルを書くときは間違いに気づきやすくなる、テーブルを見るときは条件がパッとわかるかなと思って書きました。
表を作って時間が経った後、表を見返したときに役立つとも思います。

③ 「条件」を全て書き出す

自分の表は、「1列全てがハイフンにはならない」というのが特徴です。
JIS X 0125「制限指定」的にいうと「1列全てがNになる書き方をしない」になるのかな?
それぞれの条件内で最低でもどれか1つが○になるように条件を書き出してます(排他的論理は(EXOR)的なイメージ)。

f:id:yoshitake_1201:20200516221549p:plain
表2

比較対象として、この問題をJIS X 0125の「制限指定」で表してみました(表2)。
比較すると表1の方が行数が多くなっています(「会員の種類: 一般会員」「会員区分: なし」「購入金額: 20,000円未満」があるかないか)。
見た目の違いはそれぐらいですが、この2つの表の「N」の意味合いが微妙に違うと自分は感じています。

例えば「会員区分のN(表1では-)」について考えてみます(ややこしいのでここからはNとだけ表記します)。
表1、表2どちらも「N」には「その項目ではない」という意味があると思います。
ですが表2のNo.7, 8, 15, 16では「大口、小口、個人がすべてNだから、このパターンは会員区分: なしとなる」というように、全部が「N」であることにより新しい意味が生まれています(と自分は感じてます)。
表1の書き方では、1つの条件の中でどれか1つが必ず「Y」となるので、「N」の意味は「その項目ではない」の1つだけです。
このちょっとした違いが、パッと見のわかりやすさにつながっていると思います。

加えて表2単体では「一般会員」「会員区分なし」といったワードが出てきていません。
なので、この表だけを見たとき仕様がわからないかもなぁと思いました。
もちろん表2を書くときは、どこかにそのことを書くと思いますけどね。
条件の行に埋め込まれていたほうが見落としもないかなぁという所感です。

おわりに

今回業務で役に立ったシチュエーションは、お客さんと仕様の確認をするときでした。
複雑なことを共有するときは、文書より図や表のほうがわかりやすいことが多いと思います。
その表を読む全員が勘違いしないように、そしてできるだけ直感的にわかりやすくを目指したら表1のようになりました。
今回デシジョンテーブルを勉強しているときに、たまたま実務でも活かすことができてラッキーでした。

あと、テスト対象によってはこのルールを崩して書くときもあります。
テスト対象によっては並び方を変えたほうが読みやすいときもありますし。
自分の書き方だと行数増えちゃいますしね。
コンパクトにしたいときは向かないと思います。
状況に応じて、目的にあった1番良いものを書けるようになりたいですね。

他の人はどんなこと気にしながらデシジョンテーブルを書いてるんだろう?と気になりました。

参考にした資料

gihyo.jp

www.slideshare.net