同じ計算をもう一度実行したら?
前回は、入力条件を変えて計算した場合に、別のCalculationとして記録するという話を書きました。では、入力条件を変えずに、同じ計算を2回、3回と実行したらどうなるでしょうか。
例えば、ある橋のHLRを計算して、30人年という結果が出たとします。翌日、まったく同じ条件で再計算しても、やはり30人年でした。このとき、この二つの結果は、異なる二つの計算なのでしょうか。
CalculationとExecutionを分けて考える
ここで、次の二つを区別して考えることにしました。
Calculation(計算)とは、どのような条件とルールで、何を計算するのかという計算の内容です。Execution(実行)とは、その計算を、実際にいつ動かしたのかという記録です。
同じCalculationを3回実行した場合、Calculationは1つのままですが、Executionの記録は3件になります。
| 内容 | 結果 | |
|---|---|---|
| Calculation A | 橋長50m・評価期間100年・計算ルールVer.1 | |
| Execution 1(1回目) | Calculation Aを実行 | 30人年 |
| Execution 2(2回目) | Calculation Aを実行 | 30人年 |
| Execution 3(3回目) | Calculation Aを実行 | 30人年 |
※説明用の架空例です。同じ条件・同じルールで実行した場合を示しています。
「計算の内容」と「実際に動かした記録」は別のものだ、という点を押さえていただければ十分です。
なぜ実行記録を残す必要があるのか
同じ答えが出るのなら、実行記録は一つだけでもよいように思えます。
しかし、計算プログラムを改修した後などに、同じ計算を再実行して、以前と結果が一致するかを確認したい場面があります。もし結果が違っていたら、どの実行で差が生じたのかを調べなければなりません。
そこで、実行した日時、プログラムのバージョン、実行結果などを記録しておくことが役に立ちます。同じ答えが出たことだけでなく、いつ、どのような環境で確認したのかまで残す。それが実行記録の役割です。
再現性と、後から検証できること
HLR Calculation Engineでは、二つの考え方を大切にしています。
一つは再現性です。同じ条件と計算方法なら、同じ結果が得られることを指します。もう一つは監査性です。計算結果について、どの条件やルールを使い、いつ実行したのかを、後から追跡して確認できることを指します。
CalculationとExecutionを分けて管理すると、この二つを実現しやすくなります。ただし、記録を残すだけで計算の正確性が保証されるわけではありません。結果が妥当かどうかを検証することは、別に必要です。
なお、今回の前提は、入力条件・係数・計算ルールがすべて同じであることです。同じ入力条件でも、計算ルールや係数のバージョンが変われば、同じCalculationとして扱えるとは限りません。
計算エンジンは、答えを出すだけではない
HLR Calculation Engineを作り始めた頃は、計算条件を入力して答えを出すことが中心でした。しかし開発を進めるうちに、計算結果だけでなく、計算条件や実行の履歴まで管理する必要があると見えてきました。
同じ計算を何度実行しても、計算条件そのものは変わりません。しかし、実行したという事実は、その都度新しく生まれます。計算と実行を分けて管理することも、信頼できるHLR Calculation Engineを作るために必要な仕組みだと分かってきました。

コメント