論文

ソフトウェア開発におけるインタラクションの支援方式
誠y

松下

元yy

飯田

井上 克郎yAn Interaction Support Mechanism in Software Developmentyyy

Makoto MATSUSHITA , Hajimu IIDAy, and Katsuro INOUE

あらまし 本論文では，ソフトウェア開発プロセスにおける各要素間のインタラクションに着目したモデル化
手法と，本モデル化に基づいたソフトウェア開発環境の提案を行なう．
本手法では，ソフトウェア開発時におけるインタラクションはエージェントと通信チャネルの集合としてモデル化される．エージェントは通信チャネルを用いて他のエージェントとの情報交換を行なう．通信チャネルは通信
する内容はその形態に応じてクラス分けされる．
我々はまた，本手法を用いたソフトウェア開発支援環境の試作を行なった．試作した環境はエージェントのための代理プログラムと統合された通信サーバから成り，インタラクションをはじめ，プロセスの実行やユーザの作業誘導を行なう．
キーワード

1.

ソフトウェアプロセス，インタラクション，ソフトウェア開発支援環境，

れる．

はじめに

ソフトウェア開発作業を，作業者間の対話や中間生

近年のソフトウェア開発はより分散化してきており，成物の受け渡しといったインタラクションに着目してネットワークを用いた開発形態はごく一般的になって捉えた場合，ソフトウェア開発作業自体はさまざまなきている [1]．このような開発形態においては，従来のインタラクションから構成されると言える．各開発者

一箇所に集中して行なっていた開発とは異なり，進捗は，さまざまな対象とインタラクションを行ないなが状況を開発者が相互に理解し，かつ開発者間の相互連ら開発作業を進行させている．しかし，従来提案され絡を確立することが非常に重要となる．

ていたソフトウェアプロセスモデルやそれに基づいた

これらの問題を解決するために，ソフトウェア開発

プロセス中心型開発環境では，これらのさまざまな種

におけるそれぞれの開発作業を明らかにし，それら類のインタラクションは明示的に扱われていないか，相互の関連を考えるソフトウェアプロセスの研究が行

もしくは単純な作業の型の 1 つとしてしか扱われてい

なわれている [2], [10], [13]．これらの研究では，ソフないため，インタラクションの記述や支援が充分ではトウェア開発作業とそれに関連する開発環境を再構成

ない．

することによって問題の解決をはかっている．ソフト

本研究では，ソフトウェア開発プロセスを構成する

ウェアプロセスに関する研究分野として，ソフトウェ

要素間のインタラクションに着目したプロセスモデル

アプロセスをモデル化して記述するプロセスプログラを提案する．また，インタラクションを支援する開発

ミング [11] や，記述されたソフトウェアプロセスの定環境の設計を行なう [8], [9]．本モデルではソフトウェ

義に基づいてソフトウェア開発の作業者を支援するプ

ア開発環境におけるインタラクションを実際にインタ

ロセス中心型開発環境の構築 [3], [4], [12] などがあげらラクションを行なう主体としてのエージェントと，インタラクションの内容を表現する通信チャネルの集合

y

大阪大学基礎工学研究科，大阪府

として表わす．

Graduate School of Engineering Science, Osaka University,
1-3 Machikaneyama-cho, Toyonaka, Osaka 560 JAPANyy

Information Technology Center, Nara Institute of ScienceandTechnology,

8916-5

Takayama,

Ikoma,

Nara

以下 2. 節では，ソフトウェアプロセスにおけるイ
ンタラクションについて考察する．3. 節では，インタ

奈良先端科学技術大学院大学情報科学センター，奈良県630-01

ラクションのモデル化方法について説明する．4. 節でJAPAN

電子情報通信学会論文誌

D{IVol. J81{D{I

No. 8

pp. 1{101998 年 8 月

1

電子情報通信学会論文誌 '98/8 Vol. J81{D{I No. 8

は，提案するモデルに基づいた開発支援環境について

開発者 C

開発者 B

開発者 A

述べる．最後に 5. で本研究について纏める．
2.

ソフトウェアプロセスとインタラクシ
ョン開発

本節では，ソフトウェアプロセスにおける開発作業とインタラクションについて述べる．
2. 1

ソフトウェア開発のためのプロセスによる支援

libR

ソフトウェア開発作業の各要素をソフトウェアプロ

libS

libT

利用

セスとして記述する方法はさまざまな方法がある．現在の開発作業をソフトウェアプロセスとして記述する
ことによって，開発組織全体で適用する標準プロセス
やプロセスの開発環境への適応などが非常に簡単に行なえる．

利用者 X 利用者 Y 利用者 Z 利用者 W

また，記述されたソフトウェアプロセスは量的ある
いは視覚的方法による進捗状況の把握にも用いることができる．形式的に記述されたソフトウェアプロセス

図 1 アプリケーション開発の例題
Fig. 1 An example of application development

を用いることによって，記述自体を計算機によって自動的に実行させることができる．また，ソフトウェア

発を行なっている．これらの開発者は，自分開発のシミュレーションを行なうための基礎とするこが利用する共通ライブラリに関する告知（例とができる．

えば仕様変更やバグフィックス報告など）をソフトウェア開発中のインタラクション

知りたいと思っており，あるいはライブラリ

ソフトウェア開発環境には，さまざまな種類のインの開発者に対して質問を行なったり，他のラ

タラクションが存在する．例えば「生成物の受け渡し」

イブラリの利用者とライブラリに関する情報「作業の開始/終了通知」「共同作業者間での会話」な

交換を行ないたいとも思っている．

2. 2

どはインタラクションである．また，インタラクショ
ンの内容は多岐に渡る．例えば，インタラクションの例として，次のような状況を想定する（図 1）．

 共通ライブラリ利用者が新たなライブラリを利あるアプリケーションの開発が行なわれてい用し始める

るとする．このアプリケーションは共通ライもしコンポーネントの開発者がこれまで利用してな

ブラリ （libR, libS, libT の 3 つ） と，それかった共通ライブラリを利用したいと思った際には，を使ういくつかのコンポーネントから構成さ各種の告知を送ってもらうよう，該当する共通ライブ

れているとする．

ラリの開発者へ知らせておく．但し，自分の使ってい共通ライブラリの開発を行なう作業者が 3 名ない共通ライブラリの告知を読む必要はないため，自（A, B, C） おり，各ライブラリはそれぞれ分が使っている共通ライブラリに関する告知だけを受

複数人で開発を行なっており，開発責任者がけとる．

あらかじめ決定されているとする．ライブラ

 バグを発見した場合にそれを報告する

リの開発責任者はライブラリの開発状況を把

共通ライブラリの中にバグを発見した場合，それを該握する仕事を受け持つ．

当するライブラリの開発者へ報告する．また，報告さまた，コンポーネントの開発者，つまり，共れたバグがどう修正されたか（されなかったか）の結通ライブラリを利用する作業者が 4 名 （X,果が通知される．あるいは，誰かが既に発見したバグ

Y, Z, W） おり，各開発者は（1 つ以上の）共についても同様に通知される．

通ライブラリを利用してコンポーネントの開2

このような状況において，例えば以下のようなイン
タラクションが存在する．

 不明な点について問いあわせを行なう.

論文／ソフトウェア開発におけるインタラクションの支援方式

共通ライブラリの機能や利用方法についての質問を開た，対象が人間同士のコミュニケーションを想定して発者に投げる．

いるものが多い．

この例はごく小さな開発チームが仮定されているにも関わらず，多くの種類のインタラクションを挙げる
ことができる．

3.

プロセス中心型インタラクションモデル

本節では，我々の提案するプロセス中心型インタラ

本研究では，開発環境においてメッセージのやりとクションモデルについて説明する．まず最初に，モデ

りやファイルの送受信等，計算機を用いて行なわれるルに対する要求事項を纏めた上でモデルの概要についインタラクションを支援するための，プロセス中心型て説明する．次に，モデルで用いられる作業エージェ

インタラクションモデルを提案する．本モデルは，イ

ントとチャネルの詳細について解説する．最後に，前ンタラクションのひな型のためにソフトウェアプロセ

述の例を用いて具体的なインタラクションの記述例やス記述を用いている．モデルを表現するために，我々記述されたインタラクションの表現を示す．

は作業エージェント（WorkAgent）と呼ぶインタラク

3. 1

ションの主体となる物を導入する．作業エージェント

提案するモデルは，ソフトウェアプロセスにおけるはチャネル（Channel）を用いてインタラクションを

インタラクションを記述し支援するために次のような行なう．

機能が必要となる．

2. 3

関連研究

必要とされる事項

 プロセス中心型であること

多くの既存のプロセス中心型開発環境は，上記で述

我々のモデルは，効率の良いインタラクションの方法

べたようなインタラクションをパラメータの受け渡しを表現する必要がある．つまり，プロセスの構造は直や単純なメッセージ送受信として捉えている．このよ

接インタラクションの構造を直接表現できる必要がうな環境では，一般的に実際にインタラクションを行ある．

なう対象（例えば，誰がインタラクションの相手なの

 インタラクションの主体を考慮することか）を具体的に把握する必要があるか，プロセス記述

開発環境中で行なわれるあらゆるインタラクションをの抽象度が高いためのインタラクション自身を表現す

把握するために，提案するモデルはインタラクションることが難しくなっている．

の主体，つまり，インタラクションを実際に行なって一方，既に提案，運用されているコミュニケーショ
ン支援ツールを導入してインタラクションの支援を行なうとする場合，次のような問題が無視できない．

いる作業者等について考慮する必要がある．

 インタラクションの中身を考慮すること
モデルはインタラクションの中で扱われれている情報 インターネットで用いられている電子メールをの内容もまた考慮しなければいけない．なぜならば，用いるツールの場合，届けられるべき相手先に確実にこの種の情報は開発プロセスの管理等を効果的に行な届けられることを保証することが難しい．さらに，利う上で非常に重要な対象となるからである．

用者間の会話等に電子メールを用いるのはあまり適切ではない．

 簡潔な枠組であること
我々はこのモデルが一般に用いられている，開発作業

 talk や phone 等の対話ツールを用いることに全体の全ての作業を支援することが目的である汎用のより，利用者間の会話等には効果的な支援が行なえる．

プロセスモデルにおいて 1 つのコンポーネントとなる

しかし，例えば 1 つのファイルのような比較的大きなことを想定している．従って，インタラクションモデ

情報を転送する場合にはあまり適さない．また，個々

ルは適度な粒度と簡潔さを持って，汎用のプロセスモの対話が独立して行なわれるために，インタラクショ

デルにおける他のコンポーネントと統合できるものでンの全体的な制御や記録を行なうことは難しい．

なければならない．

[5] 〜 [7], [14] 等のグループウェアを分散データベースとして用いることによっても効果的な支援が行

3. 2

モデル定義

3. 2. 1

概要

なえる．しかし，これらの研究では比較的固定した対本モデルではまず，ソフトウェアプロセスをタスク

話経路に対する支援を行なうものが多く，ソフトウェの集合として定義する．各タスクはアクティビティのア開発作業のように作業の結果や進捗状況によって動系列とする．アクティビティはソフトウェアプロセス

的に構成が変化する物には不適切であると考える．まにおける不可分の動作であり，各タスクは他のタスク
3電子情報通信学会論文誌 '98/8 Vol. J81{D{I No. 8と相互にメッセージを交している．

るたびごとに定義される．作業内容はアクティビティ

3. 1 節で述べた要求を満たすため，我々はオブジェの系列であり，その実行前には前条件を満たすことがクト指向風のモデルを採用した．モデルには作業エー要求される．プロセス中に存在するアクティビティにジェントとチャネルと呼ばれる 2 つのクラスがあり，ついては各プロセスおよび作業エージェントごとに決これらを用いてモデルを構成する．

定される．

作業エージェントはインタラクションとなるイベン

3. 2. 3

チャネル

トを発生される実体であり，そのインスタンスは，人ソフトウェアプロセス中のインタラクションは，作間，プログラムあるいは外部のシステムによって実行

業エージェントによって生成された一連のメッセージされるタスクとなる．

として定義する．これらのインタラクションは，そのチャネルはインタラクションの内容および種類に基

内容，インタラクションを行なう形態，関連する作業

づいてクラス分けされた仮想的な通信路である．そのエージェント等に基づいて分類することができる．

インスタンスはソフトウェアプロセスにおけるある話

従って作業エージェント間には，分類された作業エー

題，例えば「単体テストとその実行結果」などを表現

ジェントによって交される一連のメッセージによってするために生成される．

ある関係が定義できる．本モデルではこの関係をチャ

作業エージェントは他の作業エージェントとチャネ
ルを媒体としてインタラクションを行なう．この際，ネルとして定義する．
チャネルは次のように定義される．

作業エージェントは媒体として用いるチャネルに接続

チャネル ::= [名前, 属性の集合, 閉包, 情報形式の集合]
名前 ::= 文字列
属性 ::= [属性名, 属性値]
属性名 ::= 文字列
属性値 ::= スカラー値 (範囲はプロセス記述毎に決定)
閉包 ::= [内閉包, 外閉包]
内閉包 ::= 作業エージェントで定義される属性値の組(外閉包は内閉包と同様に定義される)
情報形式 ::= [型名, フィールド宣言の集合]
型名 ::= 文字列
フィールド宣言 ::= [フィールド名, フィールド型]
フィールド名 ::= 文字列
フィールド型 ::= 文字列, 論理値などすることによって情報の送受信を行なう．
形式的には，我々のプロセス中心型モデルは以下のように定義できる．
インタラクション ::=[作業エージェントの集合, チャネルの集合, 接続]
作業エージェント ::= イベントを発生する有限状態機械
チャネル ::= 作業エージェントが用いる仮想通信路
接続 ::= チャネルから作業エージェントへの対応関数

チャネルは名前，属性，閉包，情報形式から構成される．名前と属性については作業エージェントと同様

以下では，作業エージェントとチャネルの詳細について述べる．
3. 2. 2

作業エージェント

に定義され利用される．
閉包はインタラクションを行なう範囲を作業エー
ジェントの型を用いて制御するために定義される．閉

インタラクションをモデル化するという観点で言え

包には内閉包と外閉包の 2 種類がある．内閉包はチャば，全てのタスクはインタラクションを生成する実体

ネルに必ず接続していなければならない作業エージェであると考えられる．よって，タスクを作業エージェ

ントを指定し，外閉包はチャネルに接続できない作業ントとしてモデル化する．言いかえれば，作業エー

エージェントを指定する．閉包の指定は作業エージェ

ジェントは一連の実行の間メッセージのやりとりを行

ントの持つ属性の組で行なう．これにより，例えば内なってインタラクションを行なっているものである．

閉包を用いることによって必要なインタラクションを作業エージェントは次のように定義される．
作業エージェント ::= [名前, 属性の集合, 作業内容の集合]
名前 ::= 文字列
属性 ::= [属性名, 属性値]
属性名 ::− 文字列
属性値 ::= スカラー値 (範囲はプロセス記述毎に決定)
作業内容 ::= [前条件, タスク]
前条件 ::= 入力に対して真偽値を返す関数
タスク ::= アクティビティの系列
アクティビティ ::= 開発中における不可分の動作定義でき，外閉包を用いることによって情報を隠蔽したい範囲を定義することができる．情報形式はチャネルで交されるメッセージの型定義であり，型の名前とメッセージの構成を宣言するフィールド宣言から構成される．
作業エージェントはチャネルへの接続/切断動作を作業エージェントは名前，属性，作業内容から構成

チャネルを用いてインタラクションを行なう前/インされる．名前は作業エージェントを特定するために用タラクションが終了した後に必ず行なう．これによっいられる．属性は列挙型の変数であり，作業エージェて，チャネルへの接続状態が現在の作業エージェント

ントの行なう作業の特性を表現するために用いられる．

が関連するインタラクションの数および種類を表現でこのため，各変数の値域についてはプロセスを記述す

きる．

4

論文／ソフトウェア開発におけるインタラクションの支援方式
開発者 C
開発者 B
libR

利用者 X

libT

利用者 Y

開発者 A

libS
利用者 W

利用者 Z

図 2 モデルを用いた例題の表現
Fig. 2 An expression of example with the model

3. 3

記述の具体例

ここでは，具体的にモデルによるインタラクション

define workagent Developer_A
begin
attribute begin
role: develop;
primary: S;
endvars begin
bugbuffer: array of bug−report;
qbuffer: array of question; res: bool;endinitaction begin join(libS); join(libT); end
primitive add consult, debugging, makeans;action begin
channel libS begin
bug−report:push(bugbuffer, info); res=consult(info);
if (res == True) { send(libS, debugging(info); }question:push(qbuffer, info); send(libS, makeans(info));endchannel libT begin
bug−report:
res = consult(info);
if (res == True) { send(libT, debugging(info); }question:send(libT, makeans(info));
end
end
end

の表現方法について紹介し，どのように作業エージェ

図 3 作業エージェントの記述
Fig. 3 A description of WorkAgent

ントやチャネルが動作するかを説明する．このために，

2. 2節で用いたアプリケーション開発の例題を再度用いることとする．
まず図 2 は，この例題をモデルを用いて表現したものである．

ぞれのライブラリに関するインタラクションを単一のチャネルで表現することとする．

この図では，角の取れた四角形が作業エージェント

この例題では，共通ライブラリの開発者と利用者とを示し，二重円がチャネルを示す．この図では，7 つの間でインタラクションが発生すると考えられる．よっの作業エージェントと 3 つのチャネルが書かれていて，ここでは開発者および利用者をそれぞれ作業エー

る．作業エージェントとチャネル間に引かれた点線は，ジェントに対応付けることとする．インタラクション

作業エージェントとチャネルとの接続を示す．以下での内容としては互いに開発/利用している共通ライブ

は，これらの記述を行なう手順の詳細を順を追って説ラリに関する事項となるであろうことから，ここでは明する．

ライブラリの名前をチャネルに対応付けた（図 2）．

3. 3. 1

作業エージェント及びチャネルの特定

各作業エージェントからチャネルへの接続は，それ例題のような複数のライブラリを用いた開発の際にぞれの開発者/利用者が関連している共通ライブラリ

発生するインタラクションには，さまざまなものが考への関係を示すように引かれている．つまり，開発者

えられる．例えば，特定のライブラリに関して「開発を示す作業エージェントはその開発者が担当している者間の連絡」「開発者と利用者間における情報交換」

共通ライブラリのチャネルへ，また，利用者を示す作「開発中ライブラリの流通」といったインタラクション

業エージェントはその作業者がコンポーネントの開発が考えられる．これらを表現するためには，これらのの際に利用している共通ライブラリのチャネルへ引か

分類したい項目それぞれにチャネルを定義することにれている．

なる．また，「ライブラリ中で定義される関数の利用方

3. 3. 2法」のようなインタラクションは，各ライブラリの相互作用等が話題になることも考えられるため，ライブ
ラリの数に依存せず全体で 1 つチャネルを定義すれば作業エージェントの記述

図 3 は開発者 A に対応する作業エージェントの記述例である．
作業者 A の属性として，ここでは役割と主担当と十分であろう．このように，本モデルでは，ある状況

いう 2 つの属性を定義した．まず役割は「開発プロセに対して複数のモデルによる記述を行なうことが可能

スにおけるこの作業エージェントの役割分担」を示し，である．ここでは，記述をわかりするために，単一の「開発者」「利用者」の 2 つの値を取るものとした．主プロダクトに対して 1 つのチャネルを割り当て，それ担当は「作業エージェントが主に関わるライブラリ」
5電子情報通信学会論文誌 '98/8 Vol. J81{D{I No. 8
define channel libS
begin
attribute begin
libname: S;
end
restrictionin: (develop, S)
end
infotype begin
announce:(topic: string, contents: file);
bug−report:(topic: string, contents: file);question:(topic: string, body: file, keyword: string);
answer:(topic: string, body: string);endend

図 4 チャネルの記述
Fig. 4 A description of Channelて記述されている．
この例では，チャネルに対して内閉包の定義があり「共通ライブラリ libS の開発者は必ずこのチャネルに接続していなければならない」ことを記述している（注 1）．
また，4 つの型名が定義されており，それぞれ「告知」「バグ報告」「質問」「回答」を示している．各型名には複数のフィールド宣言があり，話題を示す文字列やキーワード，メッセージの書かれたファイルなどの存在が定義されている．
3. 3. 4

作業エージェントとチャネルの振舞い

図 2 で示されている作業エージェントとチャネル定義や接続状況は定義できているため，これを用いて作業エージェントやチャネルの記述が実際にどのように動作するか，いくつかのシナリオを用いて説明する．

を意味し，開発者を表わす作業エージェントであればa ) シナリオ 1: 新しいライブラリの利用

自らが開発責任者となっているライブラリの名前，利

利用者 Y が新たに共通ライブラリ libR を利用し始用者を表わす作業エージェントでは自らが利用するラ

める状況を考える．この場合，利用者 Y に対応する

イブラリのうち一番利用頻度の高いライブラリの名前

作業エージェントで \join（libR）" という動作を行なを表現するものとした．

う．これによって，この作業エージェントが libR を利作業エージェントが実際に動作するための記述を用することを示す．また，これによって libT の利用を行なうため に，3. 2. 2節 で述べた内容（attribute,

中止する場合には，\leave（libT）" という動作を行

action 節）の他に，変数定義（vars 節），初期化動作（initaction 節），基本動作宣言（primitive 節）

なってチャネル libT からの切断を行なうことになる．

等の記述を行なう．

b ) シナリオ 2: バグの発見
開発者 B が共通ライブラリ libS にバグを発見した

変数定義は作業エージェント内部で情報やインタラ状況を考える．まず，開発者 B はバグ報告をチャネ

クションを保持するために用いられる変数を定義する

ル libS に送信する．このバグ報告はチャネル libS にものである．初期化動作では作業エージェントが動作接続している全ての作業エージェント，つまり，利用を開始する際に行なっておく動作を定義する．この例

者 W, Z と開発者 A に送信される．開発者 A は共通

では，2 種類のチャネルへの接続動作が定義されていライブラリ libS の開発責任者であるため，A は送らる．基本動作の宣言ではどのような動作が記述する作れたバグ報告をバッファに蓄え，これが本当にバグで業エージェントにおけるアクティビティであるかを宣あるかの検証を行なう．その結果バグであることが判言するが，その動作の具体的内容はモデルの考慮外で明したため，開発者 A はデバッグを行なってその結あるために記述されない．これにより，同じ基本動作

果をチャネル libS に送信する．

宣言を記述しながら，作業エージェントが動作する環

なお，ライブラリの開発者 B だけでなく，チャネル

境によって実際の挙動を変更することが可能となるた

libS に接続している全ての作業エージェントがチャネ

め，作業エージェント記述の可搬性を高くすることがルを用いてバグ報告を送信することができ，その報告できる．

もまた同様にチャネル libS に接続している全ての作

3. 3. 3

チャネルの記述

図 4 は，共通ライブラリ libS に対するチャネルの記述例である．
作業エージェントと同様，チャネルの属性も定義さ

業エージェントが受信することができる．これにより，共通ライブラリの利用者は情報を迅速に把握することができる上，送信する側は送信相手を意識することなく適切なインタラクションを行なうことができる．

れる．ここでは，ライブラリ名が属性として定義されている．3. 2. 3 節で述べた属性，閉包，情報形式はそれぞれ attribute, restriction, infotype 節とし6（注 1）：外閉包を定義する場合，例えば「開発者は接続してはいけない」
チャネルを定義する際には，対象となる開発者を示す作業エージェント
が持つ属性の組を指定する．

論文／ソフトウェア開発におけるインタラクションの支援方式
チャネルサーバ

される．

TCP/IP
Network

チャネルサーバへ接続

開発作業者

 作業エージェント代理プログラム
 チャネルサーバ
 作業エージェントマネジャ
各作業エージェントはその代理プログラムによって構築される．代理プログラムは作業エージェントの定
義を読み記述された動作を代行する．全てのチャネル

代理プログラム

図5

作業エージェントマネジャ

支援環境の構成

Fig. 5 An structure of supporting enviornment

はチャネルサーバによって制御される．代理プログラムとチャネルサーバはネットワーク越しに TCP/IP
接続されている．
作業エージェントマネジャは複数の代理プログラムc ) シナリオ 3: 問いあわせの送信
シナリオ 2 と同様，ある共通ライブラリに対する質問は全ての開発者に対して送信され，その回答はそのを統轄し，ソフトウェア開発者に対するユーザイン
ターフェースとなる．作業エージェントマネジャは現在の代理プログラムの状況を示し，ツール起動などの作業誘導を行なう．

共通ライブラリの利用者だけに確実に届けられる．こ作業エージェントマネジャに管理されない代理プロ

れらの質問/回答はチャネルに接続された作業エージェ

グラムは単体で動作を行なう．生成物管理ツールやプント間で共有されており，従って重複した質問などのロジェクト管理ツール等のような外部プログラムの実

無駄なインタラクションを排除できる．

行，事前に定義された作業の実行などだけを行なう作

4.

モデルに基づいた開発環境

業エージェントはこのような形で実現される．
チャネルサーバは代理プログラムとの接続を管理し，本節では，3. 節で提案したモデルに基づいたソフト受けとった情報を適切な代理プログラムへ送出する．

ウェア開発支援環境について述べる．まず支援環境のチャネルサーバを通過するインタラクションの内容は概要について述べ，次にその実装方法を示す．

履歴として保存する．保存された履歴を用いて，開発

4. 1

概

要

モデルに基づいた支援環境は以下のような機能を提供する．

作業の進捗状況の分析等を行なうことができる．
4. 3

システムの試作

我々は本システムの試作を行なった．試作したシス 作業エージェント間のインタラクション実行

テムは BSD UNIX 上で C 言語を用いて実装された．

ネットワーク環境下で，記述された作業エージェント

代理プログラムは作業エージェントの定義を読みこみ，

やチャネルが実際に機能することができる．

 作業エージェントの実行支援

チャネルサーバと TCP/IP で接続し，メッセージの送受信を行うことができる．

作業エージェントで行なわれる作業が計算機によって試作した代理プログラムは単一のファイルや文字実行可能であった場合に，それを自動的に実行する．

列といった単純なメッセージの送受信を行なう．作業

 ソフトウェア開発者に対する作業誘導

エージェントマネジャの実装を行なっていないため，

作業エージェントで行なわれる作業が人手によるもの

代理プログラムが自分自身で端末型ユーザインターであった場合，作業に必要なツールの実行などを行な

フェースを持ち，ソフトウェア開発作業者からの操作

う．また，作業エージェントの持つ情報を統合して現を受けつける．代理プログラムがチャネルからファイ

在の作業スケジュールを示し，次に行なえる作業の誘ルを受信した場合にはそれをあらかじめ定められた場

導を行なう．

所に保存し，ファイルの到着を開発作業者へ知らせる．

4. 2

構

成

図 5 は今回設計した支援環境の構成を表わしたものである．

文字列を受信した場合にはそれをそのまま画面へ出力する．
試作したチャネルサーバは，ソケット処理エンジン，

本支援環境は比較的小規模のネットワーク上で用いチャネル管理テーブル，ソケット管理テーブルなどからえることを想定しており，次のような部分から構成

ら構成されており，代理サーバからの接続を受けつけ，
7電子情報通信学会論文誌 '98/8 Vol. J81{D{I No. 8

メッセージの送受信を管理，記録する．
試作した代理プログラムとチャネルサーバを 3. 節で記述したアプリケーション開発の例題に適用しその動作を確認した．
5.

ま と

め

[7]
[8]

本研究では，ソフトウェア開発環境におけるインタ
ラクションを表現するプロセス中心型インタラクショ[9]ンモデルの提案を行なった．本モデルは作業エージェ
ントとチャネルと呼ばれる 2 つの要素から構成される．
これにより，インタラクションはチャネルを媒体して[10]

作業エージェントによって生成された一連のイベントとして定義される．本モデルを用いることにより，開発環境中のインタラクションが明確に特定され記述で[11]きることがわかった．
また，本研究ではモデルに基づいた開発支援環境の[12]

設計を行ない，その試作を行なった．本支援環境はモデルにて定義されたインタラクションを実際に動作させることができ，自動実行支援，ツール起動や作業誘導を行なうことができる．試作したシステムを用いて，文字列やファイルの送受信を行なって実際に開発作業

[13]
[14]

者間でのインタラクションが行なえることを確認した．

Surprisingly Useful for Computer-Supported Coordination", ACM Transactions on OÆce Information
Systems, Vol.5, No.2, pp.115{131, 1987.
T.W. Malone, K. Lai, and C. Fry, \Experiments with
Oval: A Radically Tailorable Tool for Cooperative
Work", Proceedings of CSCW'92, pp.289{297, 1992.
松下誠，飯田元，井上克郎，鳥居宏次，\開発プロセスを構成する要素間のインタラクションに関する考察"，情処
研報，95{SE{102，pp.165{170，1995．
M. Matsushita, H. Iida, and K. Inoue, \An Interaction Support Mechanism in Software Development",
In Proceedings of 1996 Asia-Paci c Software Engineering Conference, pp.66-73, 1996.
落水浩一郎，\ソフトウェアプロセスに関する研究の現状"，ソフトウェア科学会ソフトウェアプロセス研究会，
SP93{1{1，pp.1-11，1993．
L. Osterweil, \Software processes are Software too",
In Proceedings of 9th Int. Conf. Software Eng., pp.2{
13, 1987.
S. Sutton, D. Heimbigner, and L. Osterweil, \Language Constructs for Managing Change in ProcesCentered Environments", In Proceedings of 9th Int.
Conf. Software Eng., pp.328-338, 1987.
ソフトウェアプロセスシンポジウム論文集，情報処理学会，
1994．
特集 \グループウェアの実現に向けて"，情報処理，Vol.34，

No.8，1993．

今後の課題として，さらに実験や実装を重ねること

付録によってモデルおよび支援環境の評価や，さらに高度なインタラクションモデルによるより進んだ作業者間のコミュニケーション支援を行なう枠組について考察を行なうことが挙げられる．また，支援環境の実装にあたっては，記述された内容の依存関係を追跡することによって，記述の一貫性を確認しそれをわかりやす
く表示することが必要であると考えられる．
文

[1]
[2]

献

青山幹雄，\分散開発環境: 新しい開発環境像をもとめて"，情報処理，Vol.33，No.1，pp.2-13，1992．

井上克郎，\ソフトウェアプロセスの研究動向", ソフトウェ
ア科学会ソフトウェアプロセス研究会報告，95{SP{2{1，pp.1-10，1995．

[3] G. Kaiser, P. Feiler, and S. Popovich, \Intelligent
Assistance for Software Development Maintenance",
IEEE Software, Vol.5, No.3, pp.40-49, 1988.
[4] T. Katayama, \A Hierarchical and Functional Software Process Description and Its Enaction", In Proceedings of 11th Int. Conf. on Software Eng., pp.343352, 1989.
[5] K. Lai, and T.W. Malone, \Object Lens: A \Spreadsheet" for Cooperative Work", Proceedings of CSCW'88, pp.115{124, 1988.
[6] T.W. Malone, et al., \Semistructured Messages Are
8

作業エージェント及びチャネルの記述言語

1.

本付録では，今回試作したシステムにおいて，作業エージェント及びチャネルを記述する際に用いられる言 語の言語仕様を EBNF に て示す．ま た，各
言語要素の意味について簡単に説明する．なお，記述全体は以下に述べる言語仕様における非終端記号

InteractionDescrs にて表わされる．
1. 1

言語仕様

InteractionDescrs ::- {InteractionDescr}.
InteractionDescr ::- "define" WorkAgentOrChannel.
WorkAgentOrChannel ::- WorkAgentDescr j ChannelDescr.
WorkAgentDescr ::"workagent" WorkAgentName WorkAgentDescrBody.
ChannelDescr ::- "channel" ChannelName ChannelDescrBody.
WorkAgentName ::- NAME.
ChannelName ::- NAME.
WorkAgentBody ::- "begin" WorkAgentElements "end".
ChannelBody ::- "begin" ChannelElements "end".
WorkAgentElements ::AttributeElement [VarsElement][InitActionElement] [PrimitiveElement]
ActionElement.
ChannelElements ::- AttributeElement RestrictionElement
InfoTypeElement.

論文／ソフトウェア開発におけるインタラクションの支援方式
AttributeElement ::- "attribute" AttributeContents.
AttributeContents ::"begin" AttributeContent{AttributeContent} "end" j AttributeContent.
AttributeContent ::- AttributeName ":" AttributeValue ";".
AttributeName ::- NAME.
AttributeValue ::- NAME.
VarsElement ::- "vars" VarsContents.
VarsContents ::- "begin" VarsContent {VarsContent} "end" j
VarsContent.
VarsContent ::- VarsName ":" VarsType ";".
VarsName ::- NAME.
VarsType ::- BuiltinType j InfoTypeType j ArrayType.
BuiltinType ::- "integer" j "number" j "string" j"file" j "boolean".
ArrayType ::- "array of" ArrayComposeType.
ArrayComposeType ::- BuiltinType j InfoTypeType.
InitActionElement ::- "initaction" InitActionContents.
InitActionContents ::- "begin" InitActionContent{InitActionContent} "end" j
InitActionContent.
InitActionContent ::- ActionBody {ActionBody}.
PrimitiveElement ::- "primitive" PrimitiveContents.
PrimitiveContents ::- "begin" PrimitiveContent{PrimitiveContent} "end" jPrimitiveContent.
PrimitiveContent ::- "add" PrimitiveAddSymbol{"," PrimitiveAddSymbol}.
PrimitiveAddSymbol ::- NAME.
ActionElement ::- "action" ActionContent {ActionContent}.
ActionContent ::- "channel" ActionChannelName "begin"Term ::- Factor {MultOpr Factor}.
Factor ::- VarsName j Constant j"(" Expression ")" j ActionFuncall.
RelationOpr ::- "==" j "!=" j ">" j ">=" j "<=" j "<".
AddOpr ::- "+" j "-" j "jj".
MultOpr ::- "*" j "/" j "&&".
Flag ::- "+" j "-".
Constant ::- SimpleNumber j String j "True" j "False".
SimpleNumber ::- NUM {NUM}.
String ::- """ StringContent """.
StringContent ::arbitally character except double-quotation.
RestrictionElement ::- "restriction" RestrictionContents.
RestrictionContents ::[InclosureContents] [ExclosureContents].
InclosureContents ::- "in:" InclosureElement{"," InclosureElement}.
InclosureElement ::- "(" AttributeSymbols ")".
ExclosureContents ::- "out:" ExclosureElement{"," ExclosureElement}.
ExclosureElement ::- "(" AttributeSymbols ")".
AttributeSymbols ::AttributeSymbol {"," AttributeSymbol}.
AttributeSymbol ::- NAME.
InfoTypeElement ::- "infotype" InfoTypeContents.
InfoTypeContents ::- "begin" InfoTypeContent{InfoTypeContent} "end" j
InfoTypeContent.
InfoTypeContent ::InfoTypeType ":" "(" FieldSymbols ")" ";".
InfoTypeType ::- NAME.
FieldSymbols ::- FieldSymbol {"," FieldSymbol}.
FieldSymbol ::- FieldName ":" FieldType.

ActionWithTag "end".
ActionChannelName ::- NAME.
ActionWithTag ::- ActionTag ":" ActionBody.

FieldName ::- NAME.
FieldType ::- VarsType.

ActionTag ::- InfoTypeType.
ActionBody ::- ActionStatement {";" ActionStatement} ";".
ActionStatements ::- "begin" ActionBody "end"

NAME ::- ALPH { ALPH j NUM }.
ALPH ::- "a" j ... j "z" j "A" j ... j "Z" j " ".
NUM ::- "0" j ... "9".

ActionStatement ::- ActionBasic j ActionConditional
ActionConditional ::"if" "(" Expression ")" "{" ActionTBody "}""else" "{" ActionBody "}" j"if" "(" Expression ")" "{" ActionBody "}""while" "(" Expression ")" "{" ActionBody "}"ActionTBody ::- ActionTStatement {";" ActionTStatement} ";".

1. 2

言語要素の意味

作業エージェント （WorkAgentDescr）
 属性（AttributeElement）

1. 2. 1

実行時には，記述される全ての作業エージェントにおActionTStatement ::- ActionBasic j ActionTConditional
ActionTConditional ::"if" "(" Expression ")" "{" ActionTBody "}"いて，同じ属性名が定義されているか，定義された順"else" "{" ActionTBody "}" j"while" "(" Expression ")" "{" ActionTBody "}"ActionBasic ::- ActionEquation j ActionFuncall j
ActionStatements j ActionNull.
ActionNull ::-.
ActionEquation ::- ActionEquLeft "=" Expression.
ActionEquLeft ::- VarsName.
ActionFuncall ::- FuncName "(" [Expressions] ")".
FuncName ::- NAME.
Expressions ::- Expression {"," Expression}.
Expression ::- SimpleExpr [RelationOpr SimpleExpr].
SimpleExpr ::- [Flag] Term {AddOpr Term}.

た順番は，チャネルの記述における閉包の定義を記述

番が同一であるかどうかが確認される．この定義されする際に，属性値の組に書かれる順番と対応付けられる．

 変数定義（VarsElement）
作業内容の記述の際に，一時的な情報を蓄えておくた
めの変数は宣言されなければならない．変数は定義された作業エージェント内でのみ有効となる．変数には型があり，組み込みの型（整数，実数，文字列，ファイル，論理値）か，もしくはチャネルにおける情報形
9電子情報通信学会論文誌 '98/8 Vol. J81{D{I No. 8式の型を用いることができる．変数はその初期値とし述の際，A, B という属性をこの順に定義した場合にて数字ならば 0，文字列やファイルならば空文字列，

は，閉包の定義は 2 つの属性値の組 （x, y） として論理値ならば偽を取る．

記述され，それぞれ属性 A として x, 属性 B としてy を指定したとみなす．作業エージェントがチャネル

 初期化動作（InitActionElement）
初期化動作は作業エージェントの動作開始時に一度へ明示的に接続する際，あるいは接続を切断する際にだけ評価される．この時点では，作業エージェントはは，該当チャネルの外閉包，内閉包として指定された

どのチャネルにも所属していないため，他の作業エー値を調べる．これにより，作業エージェントがチャネ

ジェントからの情報を受けとることはできないが，明ルへの接続が許されるか，あるいはチャネルからの切示的にチャネルに所属することによって，チャネルへ断が許されるかの判断が実行時に行なわれる．

情報を送ることは可能である．初期化動作として記述

 情報形式（InfoTypeElement）

された動作を終了する際には，各チャネルに記述されフィールドの型は，作業エージェントの変数定義におた内閉包の条件が調べられる．もし，条件に該当する

ける組み込みの型と同一の物が用いられる．チャネル

チャネルに接続していなかった場合には，初期化動作が動作する際には，作業エージェントから送られてくとして該当するチャネルへの接続動作が自動的に行なる情報が事前に定義されている情報形式と一致していわれる．

るか確認される．もし一致しない場合には，その情報

 基本動作宣言（PrimitiveElement）

は破棄される．
（平成 9 年 10 月 8 日受付，10 年 2 月 9 日再受付）宣言される動作は，実行系においてあらかじめその動作内容が定義されていなければならない．基本動作宣言に記述されているが，その内容が定義されていない動作を実行した場合には，実行時にエラーとなり処理は行なわれない．

松下

 作業内容（ActionElement）

誠

平 5 阪大・基礎工・情報卒．平 7 同大学
大学院博士前期課程修了．平 10 年阪大・基前条件として，現時点ではチャネル名と情報形式の組で指定することによって特定のチャネルに特定の情報

礎工・情報数理・助手．ソフトウェア開発
プロセスの研究に従事．

が流れた場合を指定することができる．作業内容の記
述中では，変数名 info にチャネルより流れてきた情報の内容が納められている．作業内容自体の記述は一般に見られる簡単な手続き型言語と同様に，数値演算や飯田制御構造を記述することができる．アクティビティは昭 63 阪大・基礎工・情報卒．平 2 同大学
大学院博士前期課程修了．同年同後期課程

関数呼び出しの形で記述される．アクティビティとし（正員）

入学．平 3 年阪大・基礎工・情報・助手．平7 奈良先端大・情報科学センター・助教授．
工博．ソフトウェア開発プロセスおよび開発支援環境，協調作業支援技術などの研究ては，組み込みのアクティビティである「チャネルへの接続（join）」「チャネル接続の切断（leave）」「チャネルへの情報送出（send）」の他，基本動作宣言にて宣言された動作がある．send を用いる際には，引数で

元

に従事．

明示しない限り，その記述の前条件で指定されるチャ
ネルあるいは情報形式の情報を送出すると解釈される．
1. 2. 2チャネル （ChannelDescr）

井上 属性（AttributeElement）
れているかが動作時に確認される．

校・情報工学科・助教授．平 1 阪大・基礎
工・情報・講師．平 3 同学科・助教授．平 7
同学科・教授．工博．ソフトウェア工学の 閉包（RestrictionElement）
属性値の組として並べた順番と，作業エージェントにの指定は解釈される．つまり，作業エージェントの記
10

（正員）

昭 54 阪大・基礎工・情報卒．昭 59 同大
大学院博士課程修了．同年同大・基礎工・情報・助手．昭 59 〜昭 61 ハワイ大マノア

作業エージェントの時と同様に，同じ属性名が定義さおける属性の定義の順番は一致しているとして，閉包克郎研究に従事．