株式会社ジェーエフピー

SLP

SLP

電気ポットの「企画要求仕様」(リスト1)を題材にします。以下の5項目の要求が書かれています。

リスト1 企画要求仕様

PR01: 電気ポットの容量は2リットルとし、10度Cから沸騰するまでの時間は、15分以内とする。
PR02: 電源コンセントをつなぐと、直ちに作動し、ヒータで加熱を始め、沸騰に達したら、90度Cに保温する。
PR03: 再沸騰ボタンが押されたら、再沸騰を始める。
PR04: 水が加えられ、温度が低下したら、再沸騰を始める。
PR05: 保温中であれば、お湯を注ぐことができる。

A社の分析者は「5条項ポット」の企画要求仕様をもとにSLPで記述しました。(図1)

5pot-1.slp

図1 A社の分析者が企画要求仕様をSLPで記述したもの


一方、B社の分析者は、企画要求仕様の詳細を確認した後、SLPで記述しました。なお、B社では、メンバー名にドット「.」を用いた記述方法をルール化しています。A社と比較して、B社のSLP文書は、より設計・実装フェーズに近い記述になっています。(図2)

5pot-2.slp

図2 B社の分析者が企画要求仕様をSLPで記述したもの


※上記の図の操作画面はイメージです。実際の画面とは若干異なる場合があります。

0 電気ポットに関する企画要求 Fn [PR01] (1)
Fn [PR02] (2)
Fn [PR03] (3)
Fn [PR04] (4)
Fn [PR05] (5)
1 PR01 Do <電気ポットの容量>{2リットル}とせよ
if <電気ポットの水温>{10度C}であるとき
(:温度を測定するのはどう行うのであろうか
if <電気ポット>{加熱}された
  if <水が沸騰するまでの時間>{15分以内}であった
   (:時間を測る仕掛けが必要である。
   (:10度cから15分で2リットルの水を沸騰100度cするヒータ力が必要である。
   Do <電気ポットのシステム>{正常}とみなせ
  else
   Do <電気ポットのシステム> {¬正常}
  endif
else
  (:加熱されない→何の変化もないはず
  Do nothing
endif
else
Do nothing
(:水温が10度cでない場合はどうなるのだろうか→Q
endif

2 PR02 if <電源コンセント>{つながれた}
if <電気ポット>{直ちに作動}した
  if <ヒータによる加熱>{開始}された
   if <電気ポット内の水>{沸騰}した
    Do <電気ポットの水温>{90度C}にせよ
    Fn [沸騰後電気ポットの水温を90度Cで保温せよ] (2.1)
    (:これをFNにして保温の仕組みを細かく書くこともできる。
    (:沸騰しても90度C未満の場合もある。高地などは?→平地での利用を想定する。
   else
    (:加熱されても沸騰しないケースである
    (:電気ポットが使用される環境も明示する必要がある。
    Do nothing
   endif
  else
   (:電気ポットが作動してもヒータが加熱しないケースだが、このようなケースはあるのだろうか。
   (:作動=ヒータの加熱という意味ではなかろうか?
   Do nothing
  endif
else
  (:コンセント接続=作動のようである。作動用のスイッチはないようである。
  Do <電気ポットのシステム> {¬正常}
endif
else
Do nothing
endif
2.1 沸騰後電気ポットの水温を90度Cで保温せよ (:沸騰したので水温は100度cである。
(:保温の仕方について確認の必要がある。暫定的に以下の方式とする。
Do <ヒータによる加熱>{止めよ}
(:ヒータによる加熱を止めることにより水温は降下する。
loop
if <電気ポットの水温>{90度c未満}となった
  Do <ヒータによる加熱>{開始}せよ
  Fn [水温90度c未満による再加熱時の保温を行え] (2.1.1)
else
  Do nothing
endif
(:再沸騰ボタンの押下など何らかの動作があるとこのループから抜ける。→何だろう。要確認。
(:とりあえずが以下としておく。
if <再沸騰ボタン>{押下}された
  Exitlp
else
  Do nothing
endif
endlp
2.1.1 水温90度c未満による再加熱時の保温を行え loop
if <電気ポットの水温>{90度cを超えた}
  Do <ヒータによる加熱> {止めよ}
  Exitlp
else
  Do nothing
endif
endlp
3 PR03 if <再沸騰ボタン>{押下}された
if <再沸騰>{開始}された
  Do <電気ポットのシステム> {正常}
else
  Do <電気ポットのシステム> {¬正常}
endif
else
Do nothing
endif
4 PR04 if <>{電気ポットに加えられた}
if <電気ポットの水温>{低下}
  Do <ヒータによる加熱>{開始}せよ
  if <電気ポットの水温>{上昇}
   if <再沸騰>{始まった}
    Do <電気ポットのシステム> {正常}
   else
    Do <電気ポットのシステム> {¬正常}
   endif
  else
   (:上昇しなかった
   Do <電気ポットのシステム> {¬正常}
  endif
else
  (:温度の高い水が加えられた場合は温度の低下はない。
  (:この場合は加熱の必要はない。
  if <ヒータによる加熱> {開始}された
   Do <電気ポットのシステム> {¬正常}
  else
   Do <電気ポットのシステム> {正常}
  endif
endif
else
Do nothing
endif
5 PR05 if <電気ポットの状態>{保温中}である
if <お湯を注ぐこと>{できる}
  Do <電気ポットのシステム> {正常}
else
  Do <電気ポットのシステム> {¬正常}
endif
else
if <お湯を注ぐこと> {できる}
  Do <電気ポットのシステム> {¬正常}
else
  Do <電気ポットのシステム> {正常}
endif
endif
0 電気ポットに関する企画要求 Fn [PR01] (1)
Fn [PR02] (2)
Fn [PR03] (3)
Fn [PR04] (4)
Fn [PR05] (5)
1 PR01 Do <電気ポット.容量> {2000cc}
Do <電気ポット.水位センサー.低位.水量> {10cc}
Do <電気ポット.水位センサー.高位.水量> {2100cc}
Do <電気ポット.温度センサー.低温.温度> {80℃}
Do <電気ポット.温度センサー.中温.温度> {90℃}
Do <電気ポット.温度センサー.高温.温度> {100℃}

(:ヒーターの必要熱量計算
(:2000(cc)×90(℃)=180KCal
(:180KCal×4.2J/Cal=756KJ
(:756KJ÷(15(min)×60(sec))=840W
Do <電気ポット.ヒーター.熱量> {900W以上}
2 PR02 (:水位センサー確認 低位センサーがOFFに縮退故障した場合は使用不能
if <電気ポット.水位センサー.低位.値> {OFF}
Do <エラー.水量.低位.値> {ON}
Do <電気ポット.ヒーター.値> {OFF}
Do <電気ポット.作動.値> {OFF}
else
Do <エラー.水量.低位.値> {OFF}
Do <電気ポット.作動.値> {ON}
endif

(:水位センサー確認 高位センサーがONに縮退故障した場合は使用不能
if <電気ポット.水位センサー.高位.値> {ON}
Do <エラー.水量.高位.値> {ON}
Do <電気ポット.ヒーター.値> {OFF}
Do <電気ポット.作動.値> {OFF}
else
Do <エラー.水量.高位.値> {OFF}
Do <電気ポット.作動.値> {ON}
endif


if <電気ポット.作動.値> {ON}
(:低温センサーのみがONに縮退故障した場合は沸騰不能で90℃まで加熱後保温、OFFに縮退故障した場合は保温不能で加熱後に90℃→100℃→90℃を循環
Do <電気ポット.ヒーター.制御> {保温}
if <電気ポット.温度センサー.低温.値> {OFF}
  Do <電気ポット.ヒーター.制御> {沸騰}
  Do <電気ポット.ヒーター.値> {ON}
else
  Do nothing
endif

(:中温センサーのみがONに縮退故障した場合は保温不能で80℃→100℃→80℃を循環、OFFに縮退故障した場合は100℃まで加熱後に沸騰しっぱなし
if <電気ポット.温度センサー.中温.値> {OFF}
  Do <電気ポット.ヒーター.値> {ON}
else
  if <電気ポット.ヒーター.制御> {保温}
   Do <電気ポット.ヒーター.値> {OFF}
  else
   Do nothing
  endif
endif

(:高温センサーのみがONに縮退故障した場合は使用不能、OFFに縮退故障した場合は100℃まで加熱後に沸騰しっぱなし
if <電気ポット.温度センサー.高温.値> {ON}
  Do <電気ポット.ヒーター.値> {OFF}
  Do <電気ポット.ヒーター.制御> {保温}
else
  Do nothing
endif
else
Do nothing
endif


3 PR03 if <電気ポット.作動.値> {ON}
if <電気ポット.ボタン.再沸騰.値> {ON}
  Do <電気ポット.ヒーター.制御> {沸騰}
  Do <電気ポット.ヒーター.値> {ON}
else
  Do nothing
endif
else
Do nothing
endif
4 PR04 (:PR02の温度センサーでサポート、「水が加えられ」は水位センサー増設でコスト高になるため無視
(:蓋を開けてもヒーターを切ったりしない(切ってもすぐにお湯が冷めるわけではないし、自己責任で加湿器等の用途で利用)
(:温度センサーで沸騰要求でるようにPR02で記述(80℃以下で沸騰)
5 PR05 if <電気ポット.作動.値> {ON}
if <電気ポット.ヒーター.制御> {保温}
  Do <電気ポット.給湯.値> {ON}
  Do <エラー.給湯.値> {OFF}
else
  Do <電気ポット.給湯.値> {OFF}
  Do <エラー.給湯.値> {ON}
endif
else
Do nothing
endif