見出し画像

要求や要件が満たされていることを確認するためには何をしたらよいでしょうか


トレーサビリティとは


 機能安全(Functional Safety)では、要求(Requirement)―Design Specification(設計仕様)―実装仕様(Implementation Specification)―Test Specification(テスト仕様)の相互関係を確認するため、トレーサビリティ(Traceablity)が重要視されています。特に、安全に関する要求についてはトレーサビリティの確保が必須です。
 トレーサビリティを確保するまでもなく、要求が満たされれば製品が要求通り動くのは、トップダウン設計では当然のことですが、その過程が見えないため、さらに下位の仕様の抜け漏れを防止するためトレーサビリティのような考えがあります。

 機能安全成果物について、このトレーサビリティをチェックすれば、トップダウンに安全要求が仕様化され実装されテストされているかどうかわかります。顧客が要求を書き、それをもとにサプライヤーが設計する。そして実装後にテストハウスがテストする。サプライヤーもテストハウスも顧客の要求をちゃんと理解していなければ要求に関する実装とテスト漏れが生じる可能性があります。そのため、機能安全ではトレーサビリティの重要性が叫ばれています。

 トレサビリティツールを使って、要件、設計、テストのドキュメントのタグ(ID)をつけてそれらを紐づけして、可視化(関係図など)するのですが、タグどうしが紐づけされているかどうかは人間が判断します。通常この紐づけは2つのドキュメントに対して、表の一文とか段落単位に行います。下位の仕様が上位要求を満たした設計になっているかは、紐づけだけでなく、要求が満たされているか検証(テスト)してみないとわかりません。そういう意味で、紐づけと検証(テスト)は両輪の関係にあります。
 それから、隠し機能をソフトウェアで実装したりしますが、もしこれが要求に基づいた機能でない場合、機能安全としてはNot OKです。機能安全のトレーサビリティからすると、隠し機能が勝手に動作して、通常機能を不安全状態にする恐れがあるためです。もちろん、ユーザに開示しない機能(例えばデバッグ機能)を要求に入れそれを仕様化して実装するのはかまいませんが注意が必要です。トレースの取れない仕様の実装は絶対さけなければなりません。

実験

 トレーサビリティがとれているかどうかを簡単な例で説明します。ここでは、文書を用いて示します。難しい話ではなく、カレーの話です。家人は私の作ったカレーを美味しいといってくれるので、その経験も踏まえて書いていますが、残念ながらこの記事のカレーについてはテストしていません(文章の通り作成して家人に食べてもらい意見を聞いていません)。

要求(Requrement)

 中辛(R1)で、豚肉(R2)、じゃがいも(R3)、ニンジン(R4)が入った美味しい(R5)、カレーを4人前(R6)作る。
としましょう。R1からR6は要求です。

要件(Requrement Specification)

 上の要求はあまりにおおざっぱです。味については美味しいということだけしか書いてありません。辛さ、材料、4人分としてしか述べていないため、要求を詳細化した要件(Rx-x)を書いてみます。
・美味しいとは何か?カレーライスを食べる人が感じる主観ですね。人によって美味しさの定義が変わるため難しいのですが、要件(具体的なおいしさ)を定義しました。
R5-1:豚肉に火が通っている。肉に臭みがない。
R5-2:じゃがいも、ニンジンがよく煮られており固くない。ただし、じゃがいもはつぶれるようなやわらかさではない。
R5-3:カレーにだま(ルーの塊)がない。
R5-4:カレーはやわらかくもなくかたくもない。

さらに4人分の材料を要件(ここではMx)としてあげました。

材料(Material)

M1:中辛のカレールーを4人分
M2:豚肉を200g、バラ肉を一口大に切る
M3:じゃがいも(中)を 4個、一口大に切る
M4:ニンジン(小)を2本、一口大に切る
M5:玉ねぎ1個、みじん切り
M6:サラダ油大さじ2
M7:水: 800cc

調理方法(Procedure)

P1:サラダ油で、切った玉ねぎをカレー鍋でしんなりするまで炒める。
P2:鍋に豚肉を入れ赤身がなくなるまで炒める。
P3:じゃがいもとニンジンを鍋に入れ炒める。
P4:じゃがいも、ニンジンがしんなりしはじめたら、じがいもが柔らかくなる前に水を入れる。
P5:鍋の水が沸騰したらあくを取り10分間弱火で煮る。
P6:火を止めカレーのルーを入れ、よくかき混ぜる。
P7:弱火で10分煮る。カレーのルールの塊がないことを確認する。ルーの固さを確認する。
P8:完成。ごはんの上にカレーを盛る。

トレーサビリティの確認

 上述の材料(Mx)と手順(Px)をもとに、カレーを要求(Rx)と要件(Rx-x)と紐づけをしてみましょう。

R1:カレーは中辛か?
M1:中辛のカレールーを使用することで、中辛のカレーを作っています。R1を満たしています。

R2:カレーには豚肉、R3:じゃがいも、R4:ニンジンが入っているか?
M2:豚肉、M3:じゃがいも、M4:ニンジンを使用しているため、これらの具材が入ったカレーを作ることができています。

R5:美味しいカレーであるか?
R5-1:P2で豚肉には火が通り、臭みがないようにP5であくを取り調理しています。このあく取りでじゃがいもの苦みもとれます。
R5-2:P4でじゃがいもとニンジンがやわらかい状態になるように注意しています。さらにP4でじゃがいもがやわらすぎないことも確認しています。
R5-3:P7でカレーのルーの塊がないことを確認しています。
R5-4:M7で水を800ccを使い、またP7でルーの固さを確認しています。以上からおいしいカレーが調理できています。

R6:4人分か?
M1:カレーのルーは4人分で満たしています。材料は4人分にしては多いかもしれませんが、少なくとも4人分はあります。さらにおかわりも可能です。

表形式にしてIDをもとに要求、要件、材料、手順、成果物(カレー)間のトレースを取ってみます。

IDを用いた紐づけ

以上から、カレーは要求(Rx)を満たしていると考えます。また、要件(Rx-x)も満たしています。

まとめ

 この実験ように、要求と要件を作成物が満たされているかをID(本記事の実験ではRx,Mx,Px)を用いてトレーサビリティがとれていることを示めしました。自分はこのカレーは要求、要件を満たしていておいしいと思いますが、読者の皆様は、このカレーは要求、要件を満たしていると思われますか。


この記事が気に入ったらサポートをしてみませんか?