トップページ

シナリオ関数の紹介

 

 

はじめに

「シナリオ関数」と呼んでいるプログラムは、通常のプログラム構造とは大きく異なっています。その結果動作原理も異なっています。
「シナリオ関数」を解析する上で、知っておいて貰った方が理解が早くなるのでは、と思われる点を中心に記述してあります。
ぜひ一読いただき、プログラムの動作を知った上で、解析いただく一助になれば幸いです。

 

シナリオ関数における命令記述

▲画像をクリックで拡大

このような構造にすると,繰り返し実行によって 「ベクトル」をランダムに並べても処理が可能です。
(もちろん、動作の速い遅いや幾つかの条件はありますが、それらについては後述します。)

どのように処理されていくか、ごく簡単な事例で示します。

 

基本的な考え方

シナリオ関数は、実行命令文ごとに
  ・実行する命令 と
  ・上記の命令が実行可能となる条件

を組み込んだ「ベクトル」を作成しこのプログラム群がたとえランダムに配置されていても実行条件を満たすまで「何回でも繰り返し」実行させて全ての命令処理を完結させる仕組みです。

※命令の処理順序を人が指定することは不要。したがってコーディングの自動化が実現できる。

 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 

動作原理から分かること

任意の順に並べても問題なく処理します!(コーディングの際に実行順序を意識する必要がない。)

処理順序(実際の実行順序)は、実行を管理するプログラムにより、処理の流れの中で自動的に決定されます。

「ベクトル」の構造は唯一の形(決まったパターン)になります。

 

▲画像をクリックで拡大

 

実際の仕組み(1)

命令ごとに作成するベクトルは C=A+B という命令文と、もし Aが設定済み かつ Bが設定済み であれば 実行 といった実行条件、さらに実行済みか否かといったフラグ等が組み合わさって処理の最小単位の「ベクトル」を構成します。

ベクトルは下記の単位で作成されます。(プログラム言語によって多少対応が異なります。)

@領域文、A定置文、B翻訳文、C代入文、D定値文、E条件文、F入力文、G出力文、H呼出文、I制御文

 

実際の仕組み(2)

ベクトル処理順序(実際の実行順序)は実行手順を管理するプログラムが制御し決定します。
このプログラムは、最上位から順に
  (1) 同期関数
  (2) 座標関数 
と名付けた2種類の関数で実現されています。

 

ベクトルは命令文の性質によって3つに分けられています。
すなわち、
   定置文、定値文、入力文⇒「入力系」
   代入文、 出力文 、呼出文⇒「処理・出力系」
   条件文⇒「条件判定系」
 の3種類です。
領域文(エリア定義)は、基本的に同期関数の先頭に置きます。
制御文(goto文)は個別命令プログラムが不要です。    
close文を除いて、翻訳文(end if等)を管理する個別命令プログラムはありません。

 

実際の仕組み(3)

ベクトルの情報は、3種類(入力系、処理・出力系、条件判定系)ある座標関数ごとに準備されている「パレット」と呼ばれる一覧表に呼び出し名(ベクトル名)を記述します。

 

個々のパレットに属する個別命令プログラムの並べ方の順序は自由です。

 

これは、パレット上の個別命令プログラムの全てが繰り返し実行される事により、ベクトルの中で演算可能な命令から順次実行され、次第にベクトルの実行順序が決まる仕組になっているからです。

 

これらの全体の仕組みを「シナリオ関数」と呼んでいます。

 

[注] 3種類に分ける一つの目的は処理の効率化です。

 

シナリオ関数の動作の前提として

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 

ウィルスによる影響の無力化

次にシナリオ関数がウィルスによる領域の破壊からどのように無力化するかについて示します。

 

現在のウィルス対策はファイアウォールを用いて侵入を防ぐことを前提としています。すなわちウィルスパターンによる侵入防止策です。

逆に言えばウィルスが発見され、パターンが判明してから、はじめて対策が可能で、それまでは無防備です。

シナリオ関数の特徴である繰り返し実行を活用すると、
ウィルスが動き出すと、その影響(データ改ざんなど)をキャッチし、直ちに影響を封じる
全く新しい考え方の対策が可能です。

 

ウィルス対策への展開

ウィルスに侵入されたプログラムが、自らのプログラムに存在する情報がウィルスから影響を受けたか否かを判断できれば問題は解決できるはずです。

例えば、領域Aの値に500がセットされていた場合、それがプログラムによって正しく生成された500なのか、ウィルスが入れ替えた500なのかは、現在利用されているプログラム言語では分かりません。

 

シナリオ関数の繰り返し構造の仕組みを利用すると、正しい流れの中でセットされた500なのか否か、が判別できます!

 

↓発想の原点↓

領域の改ざん(書き換え)を捕らえることにより、ウィルスによる影響が分かるのではないか!

 

ウィルス無力化の仕組み

  • データをセットする際に、正しい流れの中でデータセット済みを示すフラグを持ちます
  • データは、命令文処理の結果とそのコピーを持ちます(保存領域の二重化)
  • データを参照する際に、フラグにより正しい流れでセットされたかを確認します
  • (実行済みフラグがonでなければ未実行状態です)

  • 同時に二つの保存領域が一致しているかを確認します。

条件が満たされないときはウィルスによって何らかの影響を受けていると判断します。
直ちにフラグとデータ領域を初期値化し、繰り返し実行の原理を利用してデータを復旧しながら動作を続けます。

 

▲画像をクリックで拡大

 

シナリオ関数におけるウィルスによるデータ領域破壊の無力化とは

  • プログラムに対して、ウィルスは(どこかのタイミングで)領域を改ざんします。
    ←領域を利用する際に、想定されている流れの中でその領域が実行されて生成されたか否かを確認します。(実行順序は実行順序を管理するプログラムにより決定するので、実行順序が自動的に定まります。)
    ←領域はデータがセットされるたびにコピーを持ち、利用する際に比較を行い確認します。
  • ゆえに、実行途中でウィルスが関与したか否かを検知できます。
    領域が改ざんされていたら、直ちにデータを初期値化して再実行します。

    (実行順序を問わないので再起可能です。)

 

シナリオ関数の利点

このような構造にすると、幾つかのメリットが現れてきます。

 

現在通常使われている開発言語(例:C、Javaなど)ではプログラムをコーディングする際に個々の命令の実行順序を人手(プログラマー)で記述します。しかしながら「シナリオ関数」は、プログラムの実行時に命令文の実行順序が動的に決まります。このためシステム開発において人手で行うことは要件、例えば計算式とその計算式が実行できる条件を指定するだけでプログラム作成が完了します。この結果、人的なエラーが大幅に減少すると同時に、メンテナンス性に優れたプログラムが実現出来ます。

 

シナリオ関数の特性

システムを構成するプログラムの規模が大きくなるにつれて、テストが難しくなり、その結果バグが内在化することは、システム開発を一度でも行ったことがあれば直感的に分かるであろう。 

シナリオ関数では・・・・・
プログラムを作成するにあたりフローチャートを作成するか否かは別として現在のプログラム開発で必要としているコーディング部分の情報が不要です。
シナリオ関数では、プログラムの流れが実行時に自動的に定まります
∴この部分でのバグ(ミス)が存在しません。

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

 


 

▲画像をクリックで拡大

参考にした資料

  • コンピュータウィルスを無力化するプログラム革命(LYEE) 根来文生著、 
     (株)日本地域社会研究所、2014年11月3日発行 ISBN978-4-89022-153-0
  • LYEE(株)ホームページ(https://www.lyee.co.jp/
  • エムティインターナショナル(株)(https://mtiinc.jimdo.com/