列挙型の値を比較する​際、「<」や「>=」​を使用するのは、モデ​リングガイドラインに​ひっかかることはある​のか?

2 次查看(过去 30 天)
佳樹
佳樹 2023-10-9
评论: 佳樹 2023-10-11
現在自動車メーカーにて、制御モデルの作成をSimulink, Stateflowにて行っております。
現在使用しているモデルにおいては、列挙型の値を「<」や「>=」を用いて比較を行っている部分があり、違和感を感じております。
列挙型の値の例としては、High, Middle, Lowのような大きさを表す尺度だけではなく、Start, Stop, Stayなどの状態を表すものもあります。
Stop = 0, Stay = 1, Start = 2とすると、「StatusがStopでなければ」という条件を表すブロックとして、
「Status != Stop」ではなく「Status >= Stay」というように表現されており、非常にわかりにくくなっております。
これを改善するように指摘したところ、
「現状の『Status >= Stay』というモデルで動作に問題がないので、これを変更して不具合が混入するというリスクを犯したくない」という理由で却下されてしまいました。
そのため、「Status >= Stay」という表現に問題があるということを客観的な根拠をもとに主張しようと考えております。
そこで質問なのですが、「Status >= Stay」という表現がMISRA CやCERT C, ISO 26262やJMAABといったモデリングガイドライン、あるいはコーディングガイドラインに引っかかるといったことはあるのでしょうか?
(先ほど自分でもモデルアドバイザーを使用してみましたが、特に上記のような表現がもとで引っかかっているようなところはありませんでした、、、)
  2 个评论
Atsushi Ueno
Atsushi Ueno 2023-10-10
>引っかかるといったことはあるのでしょうか?
質問の様なルールは見た記憶がありません
【余談】
これは確かに改善したい内容ですが「現状で動作に問題がない。変更して不具合が混入するリスクを犯したくない」を覆す強い理由が見当たらないです。
CのSwitch文においてフォールスルーを使うのに似てますね。余談ですがMATLABのSwitch文ではフォールスルーを使う事が出来ません。
佳樹
佳樹 2023-10-11
Atsushi Ueno さん
コメントありがとうございます。
私の方でもいろいろと調べてみましたが、どうにもそのようなルールやガイドラインはないようです。
実際のところ、列挙型の定数を「>」などを用いて比較したい場合はあるという方はいらっしゃいました。
例:ログレベルについて(参考:<https://qiita.com/nanasess/items/350e59b29cceb2f122b3>)
FATAL = 0, ERROR = 1, ... , TRACE = 5のようになっているときに、「エラー以上の緊急度の時 Log_Level <= Error」と記述したいという方がいらっしゃいました。
そういったことを考えると、今回質問に上げたようなルールやガイドラインは存在しないとみてよさそうです。
一方で、Cにおける列挙型の扱いについては、C++において改善案として上がっているようです。
参考:<https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1513.pdf>
2, 3ページ中の「bool goToAlertAndArmWeapons = ( a1 >= ClrYellow ) ;」の扱いに違いがあります。
余談
フォールスルー表現について拝見しましたが、これは確かにイヤですね。

请先登录,再进行评论。

回答(0 个)

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!