トップページ

LYEEとは

文責:ロゴヴィスタ株式会社

 

LYEE は一般的なプログラムとは異なった考え方をベースにしています。ここでは、2001年7月にソフトウェア生産技術研究所株式会社(根来文生社長)が発行した 「ソフトウェア開発技法の革命 Lyeeとは?」 の解説をもとに説明いたします。

 

 LYEEは、一言でいえばソフトウェアの開発を、その開発要件を定義するだけで実行可能とするものです。ソフトウェアの開発要件として、領域名とその領域名を規定(計算)する式とその処理条件、及び画面や帳票のレイアウトを定義し、その後の処理はそれらの定義に基づきコンピュータに行わせます。領域名の処理順序を人が指示する必要はなく、コンピュータが正しい順序を探して処理します。

 

 

 

LYEEの基本原理

 

コンピュータの処理機能とプログラム

 コンピュータの情報処理機能を究極まで分解してみれば、決められたデータ項目のデータを処理する機能にすぎません。その機能は以下の5つの機能しか持っていません。


 @ データのメモリ機能
 A 一つのメモリから他のメモリへのデータの異動機能(データのコピー機能)
 B データの計算(演算)機能
 C データの比較機能
 D 処理順序の制御機能


そのためコンピュータの処理の仕方を人が指示するプログラミングでは、全てのデータについて、それらの処理の仕方を一つ一つ5つの機能のどれを使うかを指示しなければなりません。大事なことはDを利用してデータの処理順序も指示しなければならないことです。データの処理順序の指示は、@〜Cの4つの機能を指示するときに論理的なデータの処理順順序の通りに動作するように順を追って指示することにより行います。順番の指示を間違えれば正しいプログラムはできません。
以上の説明はデータの処理順序を一つ一つ指示しデータ項目(領域名)のネットワークを作る従来法プログラミングについてですが、LYEEは人が行うこの厄介なプログラミング作業をコンピュータに任せてしまうことに成功しました。

 

LYEEの基本原理

繰り返しになりますが、従来法であれLYEEであれ、要件定義は結局、領域名とその定義式の処理条件を規定することによってなされます。但し、従来法はさらに領域名の処理順序を規定しなければなりません。これはLYEEでは不要です。LYEEは独立して定義された領域名がどんな順序で指示されても、結局正しい処理順序を探し出してデータ処理をして正しいアウトプットを生成します。以下その原理を説明します。
LYEEの考え方を実現する方法として、図1に示す各領域名毎に図のフローチャートに示す定まった手順に従って、その領域名のデータ処理を行う方法があります。領域名の処理の順番はどんな順番でも構いません。


個々の領域名を一つ一つ次々に「フローチャートに示す手順」で処理して、その領域名に値を生成していく。
全部の領域名に値が生成できるまで、この処理を繰り返し実行する。

 

図1 LYEEの基本原理を活用した処理手順例

▲画像をクリックで拡大

 

領域名ごとにメモリ上に値を入れる場所を確保し、当該領域名のデータエリアとします。
例えば 「販売金額」 という領域名について考えて見ます。

 

「販売金額」という領域名が「販売単価」×「販売数量」と定義されているものとします。
まず@で、その「販売金額」という名前の番地のメモリにあるデータについて「値があるかどうか」をチェックします。
始めは販売金額という領域名はアウトプットですから値はありません。従って、Aの当該領域名の計算式を実行します。
「販売金額」の定義通り「販売単価」×「販売数量に応じてそれぞれメモリから値をもってきて計算をし、「販売金額」の値を生成します。
しかし始めは「販売単価」や「販売数量」に値がありませんから計算ができません。
Bの「値を得ることが出来たか?」のチェックの結果「販売金額」の値を得ることができませんでしたので、Dの「再計算するか?」のチェックをします。当然「販売金額」に値が得られていないので再計算が必要になりますから、Fの再計算フラグをセットして「販売金額」の領域名の処理を終了します。

 

このようにして一つ一つの各領域名のデータ処理は、逐次フローチャートに従って処理しますが、計算に必要な他の領域名に値が入ってないと計算できないので、そのままにして次から次に全ての領域名を処理します。そうすると、どこかの領域名の定義計算式を実行するプロセスで必ずインプットデータを持ってくる領域名に行き当たります。
どのような要件を持った領域名群でも、このようなことを次々に何回か繰り返すとついに全ての領域名に値を得ることになります。すなわち計算の完了です。

 

 繰り返して申し上げますが、特徴的なことはどの領域名の処理から始めても、各領域名ごとに論理要素の処理を次々に繰り返すので領域名の処理順序は問わないという事が納得いただけると思います。

 

 この原理に基づいて作成されているプログラムは、従来法のプログラムとは全く違う様々な能力を発揮します。

 

@未熟・不備あるいは仮の要件定義からでもスタート可能(要件の段階的設定が可能)
従来法の大規模システムのプログラミングでは要件をすべて完全に確定させてからプログラミング作業にとりかかるのが普通です。一方LYEEでは要件に応じたプログラムを簡単に自動的に作成しますし、変更も簡単ですから、要件が全部確定していなくても現在わかっているだけの範囲内でプログラムを作らせれば良いのです。要件やデータに不備があれば、値が得られない領域名がいくつか出てきますから、それらの領域名だけに注目して要件定義の未熟・不備を正してゆけば結局全ての要件を完全に確定することになりプログラムを完成することが出来ます。
LYEEでは、このような開発が可能な仕組みを始めから持っています。

 

Aプログラムの変更が容易
要件の変更に伴うプログラムの変更などはLYEEが得意とするところです。領域名の要件変更を独立に行うだけで、プログラムの変更などを簡単に行えることはよくご理解いただけると思います。

 

B選択分岐処理(IF処理)が容易
比喩的に言えば、従来法は分岐点において、条件を考慮してゆくべき道を選びます。LYEEは、分岐点において全ての条件にそれぞれ名前を付けて条件が処理する名前を探してゆくべき道として選びます。
一言でいえば、従来法では分岐の数が増えるにしたがって人が考慮しなければならない組み合わせ・順序の数が指数的に急速に拡大してゆくのに対して、LYEEでは組み合わせの処理順序はコンピュータに任せてしまうので人は考慮する必要がなく、人は個別の領域名の処理条件だけを考慮すればよいことになります。このためLYEEは選択分岐の処理については従来法よりも簡単に扱えます。


 

LYEEの効用

 

新規開発

LYEEでは、従来法によるプログラミングに必要な外部設計、内部設計、プログラミング及びテストの工程が、要件定義とそれに関するヒューマンエラーのテストだけに置き換わります。したがってソフトウェア開発の生産性は大幅に向上し、開発工数や開発期間が大幅に短縮できることになります。自動プログラミングされることから前述のように要件やデータに不備があれば、値が得られない領域名がいくつか出てきますから、それらの領域名だけに注目して要件定義の未熟・不備を正してゆけば、最後には全ての要件を完全に確定することになりプログラムを完成することが出来るので、バグのないプログラムができることになります。

 

図1.1 従来法の新規開発工程

▲画像をクリックで拡大

 

図1.2 LYEEの新規開発工程

▲画像をクリックで拡大

 

保守・変更

あらゆる業務は状況に合わせて常に変化しますので、それに応ずるようにプログラムを頻繁に保守・変更しなければなりません。レガシープログラムを改変するのは、従来法ではプログラムの一部を変えると他にどんな影響が出るのかわからないので大変な時間とコストがかかる作業です。
一方LYEEでは、もともと要件定義は領域名、領域名を規定(計算)する式と処理条件を個々に指定し、それらの全部の領域名を合わせて自動的に処理を行うので、たとえ要件が変更されてもそれに応じて領域名と領域名の定義を変更すれば、あとはプログラムの改変は自動的に行われるのでプログラムの保守は非常に簡単な作業となります 。

 

図1.3 従来法の保守工程

▲画像をクリックで拡大

 

図1.4 LYEEの保守工程

▲画像をクリックで拡大

 

代表的な疑問点についての質疑応答

 

Q1. 非常に大きなハードウェアリソースが必要ではないか。

A. LYEEによるソフトウェア開発において人がするべきことは、要件を領域名、その定義式、そして処理条件によって規定することだけです。後はコンピュータがデータの処理方法と処理順序を探してデータを処理します。言い換えれば従来法では必要である人によるシステムの概要設計や詳細設計そしてプログラミングの作業をLYEEでは人ではなくLYEEが行っているのに等しいと言えます。さらにプログラムの変更の際、従来法ではプログラムの修正作業が必要ですが、LYEEでは変更箇所だけの領域名の変更、追加、削除作業だけで済みます。このようにLYEEでは、従来法の概要設計、詳細設計、プログラミング、そして保守という多様な機能をカバーしていることになりますので、データ処理機能しか持っていない従来法のソースプログラムと比較すればLYEEのソースプログラムは大きくなります。具体的には、全ての領域名ごとに一律に定まったプログラムを背負わせるのでソースプログラムが大きくなるのです。
しかしながらハードウェアの進歩によって、容量も大きく、スピードも速く、且つ価格もたいへん安くなったので、通常の業務処理ではLYEEを使用するうえで実際上まず問題は生じません。
もし問題になるようなら、各領域名ごとのプログラムを全領域名について機械的に作成するのではなく必要に応じて作成するようにしたり、見やすさのために冗長となっているステップを削減したりしてソースプログラムを圧縮して必要なメモリを減らすことが可能です。

 

Q2. 繰り返し処理をするので、応答時間が非常に長くなるのではないか。

A. 繰り返し処理と言っても、一つの領域名についてのプログラムで実際にデータの処理や計算を行うのは、処理・計算ができる条件が整ってデータを生成するときの一回だけです。後はこれらのプログラムの実態部分をすり抜けてゆきますので繰り返しがあっても余計な時間はかからないので、応答時間がそれほど長くなることはありません。
一般的にプログラムの処理時間がかかるのはI/Oの部分ですが、そこはLYEEも従来法も同じです。ですのでI/Oを伴う実務では従来法と比較して、大きな不利となることは少ないようです

 

Q3. 理論や使い方が非常に難しくて実際はなかなか使えないのではないか。

A. 従来LYEEの解説が、難解であったり、ことばが特殊であったり、基本原理や構造を筋道を立ててやさしく解説することが不足していましたので、一部の方々にLYEEは難しいものという誤解を生んでおりました。しかしLYEEは実は大変簡単な原理を基に実に簡単な構造から成り立っていることがご理解いただけるはずです。
ところでプログラムの自動作成は世界の長年の夢でした。オブジェクト指向やDOAやプログラムの部品化等々により、ある程度その夢に近づいたことは事実です。しかしながらプログラムの中で最も厄介な処理順序の決定を依然として人が指示しなければなりませんでした。この根本問題が解決されていなかったのです。この根本問題をLYEEは解決したのです。最も厄介な処理順序からの開放です。大変簡単で明快な原理と構造で夢が実現されたのです。個々の領域名を規定することだけで要件が与えられれば、データの正しい処理順序はコンピュータに探させるという訳です。プログラムの完全自動化のための最後にして最大の難関であった処理順序の自動化が、非常に単純なLYEEの原理により可能となったのです。おそらく、これほど単純な処理順序を自動化する方法はLYEE以外では考えられないのではないでしょうか。

 

Q4. 選択分岐処理(IF処理)がたくさんあるような複雑なシステムには向かないのではないか。

A. LYEEの基本原理のところで述べたようにLYEEの選択分岐処理(IF処理)は領域名の処理条件で捉えることを説明しました。
複雑なシステムとは要件が複雑であるという事ですが、LYEEでは要件を個々の領域名で規定することだけですからこの段階では要件が複雑でも簡単でも同じです。複雑な計算式でも各位領域名の定義計算式としてそのまま規定すればよいのです。次の段階のシステムデザインやプログラミングは、LYEEはコンピュータにやらせますので複雑でも簡単でも人にとっては同じです。従来法ではこの段階は人が行いますのでシステムが複雑だと大変です。LYEEの前では「複雑なシステム」という概念が無くなり、単に領域名の集合の大小の差だけという事になります。
そのうえLYEEは、要件そのものの不備や矛盾を早期に発見できます。要件に不整合があるとLYEEが整合性のあるデータ群を生成できませんので要件の不整合部分をあぶりだしてくれるのです。

 

Q5.テストが不要というが、人が関与する限り必ず間違いがある。テスト不要とどうしていえるのか。

A. テスト不要という言い方は誤解を生むかもしれません。テスト不要という意味を少し説明します。
プログラム開発において人が関与するためエラーが発生するプロセスは従来法においては3つあります。要件定義、プログラミング、そしてインプットです。ここでいうエラーはユーザ要件通りにプログラムを作成していない場合をいいます。
まず要件定義についてはユーザが行うものですし、ユーザしか決められません。従来法では要件がユーザから与えられると人がそれに基づいてデータの処理順序や組み合わせや処理の仕方を考え指示してプログラムにします。そこに要件とは違うロジックとなってしまうエラーの可能性があります。LYEEでは画面・帳票上の領域名ごとの要件情報を登録するだけでデータの処理順序や組み合わせは人が指示するのではなくLYEEが作り出しますので要件通りのプログラムが出来てエラーは発生しません。逆に要件にエラーがあれば要件が不備であることを教えてくれます。
さらに、そもそもユーザは初めから正しく要件を規定しうるかという根本的な問題があり、また要件は常に流動的であって固定するのは難しいと考えるのが本当ではないでしょうか。LYEEはこの立場に立ち最初に未熟なレベルでも良いから要件をユーザから仮提示してもらい、システムを動かしてテストしながらユーザが要件を固めてゆくことも可能としています。この場合の要件確認テストは本来テストというものではなく、むしろユーザご自身が要件を再確認しつつ固めてゆくプロセスと位置付けることが出来ます。つまりLYEEではプログラムが出来上がったときは、提示された要件通りに動くものが完成してしまうので改めてテストは不要なのです。
プログラムのロジックのエラーについては上述の通り処理の順序や組み合わせといった機能ロジックをLYEEではコンピュータが自動的に作り出しますのでエラーは発生いたしません。
最後にインプットエラーについてはLYEEでは要件定義の登録に該当しますが、もちろんエラーは起こり得ます。

以上の通りですから従来法に比較して必要なテストは圧倒的に少なくなります。LYEEではユーザ要件の曖昧さ未熟さを受け入れ、それを前提にしていますので前述したように、テストというよりは要件のスパイラル的構築を確認できると言えます。いわば究極のアジャイル開発法といえるのではないでしょうか。

 

Q6. どの会社もたくさんのレガシーシステムを持っていて、それらを互いに連携して使っている。LYEEを部分的に入れてもほかのたくさんのレガシーシステムと連携して使えないのではないか。

A .全く心配ご無用です。個別のたくさんのシステムが連携している場合、それらは多くの場合データベースを介して連携していますから、LYEEでは既存のデータベースをそのまま使えますので既存のレガシーシステムと連携して作動することは何の問題もありません。

 

Q7. 科学技術計算(たとえば偏微分方程式の数値解法など)、プロセス制御等にも使えるか。

A. プログラムで計算しているものならすべてLYEEで計算することはできます。問題は計算のスピードです。たとえば偏微分方程式を差分方程式にして数値解法する場合、数百万個のセグメントに分割して全ての境界条件を満たすまで繰り返しサイクル計算する必要があり、スーパーコンピュータでも長時間の演算時間が必要となる場合があります。この時は従来法では最も演算時間が少なくなるような処理方法や処理順序をSEやプログラマーが必死に考えます。
一方LYEEでは処理方法や順序はコンピュータに自動的に探させますが1サイクルごとにその中で繰り返しによって探しますから何億サイクルとなるとちょっと工夫が必要です。演算速度が処理時間を支配しているため超高速演算が求められるような科学技術計算の場合にはLYEEのように実行時に最適な処理順序をその都度探し出すやり方は時間がかかりすぎる場合があります。その場合は実行する前に最適プログラムを検討する必要があります。

 

次にプロセス制御にLYEEを適用することについて申し上げます。
プロセス制御では、センサや設定盤(操作盤)からの信号が入力領域名、アクチュエータへの出力信号が出力領域名となります。全てのプロセス値が領域名となります、プロセスに何かが起こったときにどうするのかを領域名ごとの小さな単位のプログラムで表現するというLYEEの方法はプロセス制御と相性の良いものです。LYEEではイベント(コマンド)が起こると、全ての領域名(プロセス値)のデータ間の整合性が取れるまで繰り返し全ての領域名の処理を行います。この状態で、出力し次のイベントを待ちます。このように、基本的にビジネスアプリケーションと全く同じ考え方でプロセス制御をとらえることが出来ます。

 

Q8. LYEEは業務知識がなくてもプログラムできるというがそんな馬鹿なことができるはずがない。

A. 業務知識が誰にもなくてプログラムができるという事はもちろんありません。「ユーザ部門はもともと業務知識があるのだからシステム技術がなくてもLYEEならば自ら要件定義が出来てソフトウェアが作れる。一方システム部門はユーザ部門が要件定義をしてくれるなら業務知識がなくてもプログラムができる。」と言っているのです。
更に言えば、ユーザ部門がツールの使用法をマスターしていれば、ユーザ部門のみでプログラムの作成・追加・修正を行うことも可能になります。