ソフトウェアの硬い部分と柔らかい部分
−通信ソフトウェア自動作成の夢に向けて−




ATR通信システム研究所 通信ソフトウェア研究室 西園 敏弘



1.まえがき
 現在の高度情報社会では、様々な形の情報とその処理結果が、政治、経済、その他あらゆる分野に利用されています。私達の日常生活でも、自動預金引き出し、座席予約などは、もはや欠くことのできないものとなっています。これらの便利な情報通信サービスは、複雑な論理を自由に記述できるソフトウェアの技術により、初めて可能となったものです。ソフトウェアの柔軟性が、社会の情報化を支えてきたと言えるでしょう。
 しかし、その柔軟性が、情報化の進展を阻害する要因ともなっています。今後次々と要求される新しいサービスを実現するには、膨大なソフトウェアが必要となりますが、記述の任意性により、標準的な実現方法が確立されておらず、開発作業の機械化を困難にしています。未だに、開発の主要な部分は専門家の手作業に頼らざるを得ないのが実情です。コンピュータを活用する高度情報社会の影の部分といえるでしょう。コンピュータを利用して、専門家でなくても望みのソフトウェアを簡単に作れるようにし、究極的には、自動作成を可能とすることが、あらゆるソフトウェア技術者に共通の夢です。その実現に向けて、ATR通信システム研究所は、通信ソフトウェアの成り立ちを調べて、自動作成に必要な基礎技術を明らかにしようとしています。 熟練した技術者によるソフトウェアを調べると、似たようなパターンが繰り返し何度も現れることに気づきます。即ち、ソフトウェアの全てが柔らかいわけではなく、再利用できる硬い部分があることを意味します。この硬い部分をコンピュータが処理できる形で蓄積、利用することが先ず重要な課題です。本稿は、通信ソフトウェアの硬い部分と柔らかい部分を分けるための構造と仕様記述言語、およびその振る舞いを動画的に表現して理解性を向上させる支援システムを紹介します。

2.通信ソフトウェアの構造
 通信サービスの実現形態を分析すると、ネットワーク内に分散配置されたプロセス群の協調処理ととらえることができます(図1)。例えば2台の電話機を繋ぐサービスは、交換機に置かれた2つのプロセスが、電話機からの入力信号と自らの状態に応じて、それぞれの電話機を制御するサービス機能と、互いに信号を授受し、協調して電話機間の接続を制御する相互作用機能を実行することにより実現されます。
 従来こうしたプロセスの機能を実現する場合、サービス機能のみが着目され、相互作用はその中に埋め込まれた形となっていました。このため、新しいサービスを追加した場合、そこで必要となる新規プロセスとの相互作用に係わる既存仕様の影響範囲を限定できない構造になっていました。その結果、既存仕様の広い範囲にわたるデバグが必要であり、生産性劣化の大きな原因となっていました(図2)。
 この問題の解決には、新しいサービスの追加による影響範囲を限定できるソフトウェア構造が必要です。このため、各プロセスを入力信号と状態に基づきサービス機能を実行する機能部と、他プロセスとの信号授受を行い、出力を決める相互作用部に分割する構造[1],[2]を提案しました(図3)。相互作用部は、他プロセスとの通信を行うので、新規プロセスの追加による影響を受けることになりますが、機能部は、プロセス内に閉じてサービス機能を実行するので、新しいプロセスを追加しても影響が無い硬い部分といえます。
 この構造は、通信サービスを実現するプロセスの動作仕様の分析から得られたもので、機能部で実現すべきサービス機能の具体化による確認が必要であり、様々なサービスの仕様をこの構造に基づき記述し、実証を進めています。この構造の有効性が確認できれば、硬い部分である既存の機能部の再利用が可能となります。新しいサービスに必要な新規プロセスとの結合のための変更は、柔らかい部分である相互作用部のみに限定されるので、デバグ時には、既存の機能部の再試験が不要となり、生産性向上が図れます。また、たくさんの機能部を準備すれば、その新しい組み合わせ方を考えることで、サービスを作り出すこともでき、自動作成に一歩近づくことができます。

3.プロセス動作の仕様記述言語
 前章で提案した機能部と相互作用部を分離するソフトウェア構造を反映するとともに、記述の容易性を配慮した仕様記述言語を提案しました[3]
 この言語では、先ず、前述のソフトウェア構造を忠実に反映し、機能部と相互作用部に分けた記述を行います。機能部では、サービス機能の実行方法として、相互作用部からの入力信号と自らの状態に基づき、相互作用部への応答信号の出力と次状態への遷移を記述します。また、相互作用部では、入力信号を分解して、自らの機能部や他のプロセスを起動するための出力信号として分配する入力分配、および、その応答として入力された信号の同期をとり、その組み合わせにより出力を決定する応答同期を記述します。
 また、記述を容易にするため、宣言型の言語形式に制約指向的な考え方を加え、機能部を機能制約により、相互作用部の入力分配と応答同期を分配制約と同期制約により記述します。機能制約は、入力信号とその時の状態を条件として、出力と次の状態を定めるものです。分配制約と同期制約は、入力された信号を条件として、出力信号を決めるものです。このような、入力信号を条件として出力を定める制約の集合により、仕様が簡潔に記述されます。
 この仕様記述言語を用いて、発電話機を制御するプロセスの動作仕様の一部を記述した例を図4に示します。先ず分配制約により、発電話機からの発呼信号が、発呼要求と発呼指示信号に分解され、自らの機能部と相手電話機のプロセスに分配されます。空き状態に発呼要求信号を入力されると、機能制約に基づき、発呼受付信号が出力され、状態が接続中になります。また、相手プロセスは、その状態(空きまたは話中)に応じて、発呼指示信号に対し、呼出信号あるいは話中信号を返送してきます。その結果が、同期制約により統合され、発電話機を制御するプロセスの機能部からの発呼受付信号と相手プロセスからの呼出信号に対しては、呼出音が、また発呼受付信号と話中信号に対しては、話中音が発電話機に出力されます。

4.設計支援システム
 以上に基づくソフトウェアの設計を簡易化するために、動作仕様の実行状況の可視化と相互作用部に着目した設計支援システムを検討しています。前者は、前章の仕様記述言語で記述されたプロセス群の動作仕様を直接的に実行し、その結果を動画的に表示する図的プロトタイピング機能です。また、後者は、プロセス間の信号授受に基づく動作仕様の図示と、設計候補の提示を行う支援機能です。これらの機能を実現するシステム構造を図5に示します。
 実行系と表示系は、その連動により、図的プロトタイピング機能を実現します。実行系は、前章で示した3種類の制約で記述されたプロセス群の動作仕様を実行します。即ち、入力された信号を基に、条件が成立する制約を探し、信号の分配、状態の遷移、出力の決定などを行います。また、表示系は、通信端末やサービス機能を処理するプロセス群の接続関係を示す図形データを用いて、実行系に対する信号入力操作を画面上から行い、その出力としての通信端末の動作とプロセス間で授受される信号を表示します。これらの機能により、動作仕様を直接的に実行させ、その経過を視覚的に表示することができ、プログラム化する前の段階での誤り除去が簡易化されます。また、この視覚化は、専門家でなくても望みのソフトウェアを簡単に作れることへの重要な技術であると考えています。
 支援系は、相互作用部に着目した動作仕様の設計支援機能を実現します。相互作用部の設計に必要なプロセス間の信号定義を見易くするために、プロセス間で授受される信号の系列を木構造的に図示します。図5の支援画面は、その一例を示したものです。ノード内には、入力信号名とその信号型を、ノードの右上には入力元を表示します。また、右下には、入力信号を処理した結果である出力の送信先、出力信号名およびその信号型を表示します。
 この時、プロセス間で授受される信号の型に着目すると、その出現順序には、一定の規則性あります[5]。あるプロセスの機能を起動する信号を送信すると、その応答信号が返送されるなどの規則性です。この規則性をまとめた相互作用規則を用いて、ある信号を定義したことにより、次に必要となる信号の型を提示する設計支援法を提案しました。例えば、図5の支援画面では、相手プロセスに、その機能を起動する(起動型)発呼指示信号を送信したことにより、その応答として(受付型)あるいは(拒否型)の信号が返送されてくることを提示しています。即ち、相互作用部は、仕様としては柔らかいのですが、その仕様を組み立てる際の骨組みには硬い部分があり、それを設計支援に役立てようという試みです。また、支援系では、設計した動作仕様を前章の仕様記述言語に変換するとともに、新規設計したプロセスの機能部を機能部DBに蓄積し、再利用する形の統合的な支援を狙っています。
 実行系と表示系については、基本的機能の試作が完了しました。現在、その機能拡充を行うとともに、支援系の検討・試作を進めています。

5.むすび
 通信ソフトウェア開発の簡易化のためのソフトウェア構造、仕様記述言語および設計支援システムの研究を紹介しました。ソフトウェアの自動作成という夢の実現には、より多くのソフトウェアの性質を調べ、その硬い部分を取り出してコンピュータに覚えさせることが必要です。ここで紹介した研究成果をベースに、既存の通信サービス仕様[5]の整理と分析を進めています。その結果をもとに、ここで紹介したソフトウェア構造の有効性を確認するとともに、抽出した機能部を部品として蓄積し、その組合せ規則を明らかにすることにより、自動作成に近付けることがこれからの課題です。



参考文献