また多くの計算機を有機的に結合して、種々のシステムを実現する事が当たり前になりつつある。 そこで研究室でもできるだけ新しいマシーンを導入し、それらの運用を理解し、その上での システム開発ができるように準備している。学生はどれかのマシーンの管理者になり、そのマシーンの運用について責任を持つ。
研究テーマについて以下で述べる様な範疇のテーマを基本とするが、特に行ないたいテーマがあればそのかぎりではない。
指導型ソフトウェア開発環境 ソフトウェア開発プロセスを計算機によって援用しようとするものにいわゆるCASEがあるが、そのCASEを指導という観点から考えようとするものである。ソフトウェア開発プロセスには 種々のステップがあるので、そのステップ毎に次のようなテーマがある。
- プログラムの実現ステップ(詳細設計)の指導
初心者がC等を使ってアルゴリズムの実現を行なう過程をサポートするシステム。詳細設計の中で行なわれる種々の意思決定の履歴を記録し、その間の相互関係を明確にし、さらに各ステップで必要な意思決定およびそこで行なう詳細化を具体的に指導する。
- 仕様からのプログラム自動生成のサポート
形式的仕様記述から対話的にプログラムを導出する過程をサポートする。またその過程を指導する。正しいプログラムの自動生成を目指すものではなく、仕様をベースとした詳細化によるプログラム生成をサポートすることにより、形式的なプログラミングの概念を学ばせることを目的とする。
- 要求解析ステップの指導
上流CASEツールの指導機能。要求仕様書の生成過程を指導する。上流CASEツールに指導機能を組み込むことにより、サンプル上の実習を通して要求解析手法およびCASEシステムの仕様法を習得する。現在は構造化設計法を対象としている。
- オブジェクト指向開発方法論
オブジェクト指向開発方法論は現在すでに実用化の域に達しており、徐々に実用レベルで利用されつつある。また最近のPC上のプログラム開発環境はRADと呼ばれるものが多く、GUI+OOがキーワードに成っている。しかしながらOO開発方法論との関連付けは未だ十分なものではない。OO開発方法論とRADの結びつき、またユーザモデルの観点からのOOモデルの考察、等を行っている。
- 事例に基づくプログラム開発の指導
プログラミングの学習は事例の学習によって通常行なわれる。ここで修得すべき基本的な 技法を事例を通して理解する。しかしテキスト上では各技法相互の関係やら、事例上での位置付けが理解し難い。そこでハイパーテキスト的に事例に基づくプログラム開発のプロセスを構成し、そのプロセスの理解を助ける事を目的とする。
知的プログラミング教育/演習システム
いわゆるプログラミング演習において修得すべき諸要素の種々の側面からのサポートを行なうことを目的とする。
- プログラミング言語の知的チュータ
プランに基づく構造エディタとプログラム認識を融合し、プログラムの入力、デバッグ、実行をサポート/指導する。プラン知識を豊富に組み込むことにより、種々の局面で利用されるプログラミングノウハウの使い方を学習させる。プランとしてプログラミングのノウハウ知識をメニュー的に利用できるため、実習を通じてノウハウを習得できる。
- プログラム理解システム
ソフトウェア作成は高度に知的な作業であるから、その過程においていろいろな診断をし、相談に載ってくれるチュータの存在は有効である。そこで計算機にそのようなチュータの代わりをさせようという試みがある。プログラム理解システムでは課題に基づいて作成したプログラムの論理的な誤りを認識し、ユーザのレベルに即した診断を行なうことを目的とする。 Lispによるプラン指向の診断システムと、CをベースにWWW上での利用を前提としたしたシステムの両方を開発している。
- デバッグエキスパート/チュータリングシステム
コンパイラの誤りメッセージは理解しにくく、またそれから真の誤りを見つける作業も初心者にとっては難しく、エキスパートの知識を必要とする。これを助けようというのがデバッグエキスパートシステムである。現在はC言語に焦点をあて、誤り知識ベースを構築している。
- プラン指向エディタによるプログラミング演習システム プログラム開発をプランの階層的な構築と捉え、与えられたプランをどの様に組み合わせればプログラムになるかの演習をサポートするシステム。
リバースエンジニアリング
出来上がったソフトウェアからその上位の設計、要求等の意図、意思決定を抽出し、ソフトウェアの再利用、保守等に役立たせようとするものである。
- ソフトウェアの形式的要求仕様を抽出しようとするもの
仕様記述をサポートするために仕様記述のドメイン固有なライブラリを考えている。
- ソフトウェアの概要設計仕様を抽出しようとするもの
通常ソフトウェアアーキテクチュアと呼ばれるもので、種々のレベルでのソフトウェアの構成の認識を目的とする。例えばアーキテクチュア独自のパターンの知識からそのアーキテクチュアにおけるコンポーネントを認識する。
- ソフトウェアの詳細設計仕様を抽出しようとするもの
プランに基づくプログラム認識をベースとしてプログラムを抽象プログラムに変換し、更にプログラムプラン−仕様プラン相互の変換により、形式的な詳細仕様を対話的に生成する。
- ソフトウェアの静的意味情報の解析
プログラムの機能分割のために新しいスライシング技術としてパラメータスライシングを考えている。
- プログラム認識のベースとなるプランライブラリの構築を支援する環境の構築。
- プランブラウザ
- プランエディタ
- プランによるプログラム探索
- プランの類似性の判定
- ソフトウェアアーキテクチュアの認識
- ソフトウェアシステムの悪形パターンの認識システム
悪形とは文法的に違法でもないし、意味的に間違ってはいないが、プラグマティックスの観点から好ましくない使い方をいう。実際にはこの様な使い方が障害を起こす事が多い。
- 仕様の解釈システム
形式仕様(ここではZ言語)は理解しやすいものではない。そこで形式仕様を解釈して自然言語による注釈(ドキュメント)を生成するシステムを考えている。
ソフトウェアの実験・実習のサポート
上記の研究をベースにして、ソフトウェアの実験・実習のサポートを行なうための種々のツールの開発を行なっている。 またこれらのツールはインターネット(特にWWW)をベースとした利用を想定している。
- プログラムの類似性判定
UNIXのコマンドdiffのレベルではなく、意味的、構造的にプログラムの比較を行ない、その類似点を指摘する。当面の目標としてはコピーをして実現したプログラミング演習の課題としてのプログラムの認識を目指す。- プログラムのwell-formednessの判定
コンパイラやテスト実行ではわからないプログラムの良形度(悪形度)を認識し、良形なプログラムを書くように初心者を指導する。プラン認識を基本とする。- メールをベースとしたプログラミングレポートの受理/前処理システム
プログラミングに関するレポートをメールで提出させ、レポートの良形度、プログラムの完成度等を、出題者による問題記述に基づき判定し、必要ならコメント(診断結果)をつけて学生に自動的に送り返すシステム。現在一部は運用している。- プログラミングノウハウとしてのプランの抽出
プランという形でプログラミングノウハウを利用するために教科書からプラン候補を抽出し、プランとして記述する。
インターネットを利用した遠隔地教育
インターネット、特にWWWを利用した遠隔地教育(distance learning)は今後幅広く行なわれるようになる。このテーマについて種々の観点から研究を行なう。
- コースウェアの設計法
- 仮想教室の実現法
- 知的CAIの実現法
今後のテーマ
上記以外に今後以下の様なテーマも考えている。
- インターネットアプリケーション
インターネットを教育またはソフトウェア開発にどの様に利用できるか- CSCW
分散型環境に基づく協調支援環境(特にソフトウェア開発支援環境として)- オブジェクト指向
オブジェクト指向方法論の解析、またオブジェクト指向プログラムの解析技法等