一実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
なお、以下の説明では、「インターフェース部」は、一つ以上のインターフェースでよい。当該一つ以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、一つ以上のI/Oデバイス(例えば入力デバイス(例えばキーボードおよびポインティングデバイス)と出力デバイス(例えば表示デバイス))と表示用計算機とのうちの少なくとも一個のI/Oデバイスでもよいし、それに代えてまたは加えて、当該少なくとも一つのI/Oデバイスに対するインターフェースデバイス(I/Oインターフェース)でもよい。通信インターフェース部は、一つ以上の通信インターフェースデバイスでよい。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明では、「メモリ部」は、一つ以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも一個のメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
また、以下の説明では、「PDEV部」は、一つ以上のPDEVであり、典型的には補助記憶デバイスでよい。「PDEV」は、物理的な記憶デバイス(Physical storage DEVice)を意味し、典型的には、不揮発性の記憶デバイス、例えばHDD(Hard Disk Drive)またはSSD(Solid State Drive)である。
また、以下の説明では、「記憶部」は、メモリ部およびPDEV部のうちの少なくとも一個(典型的には少なくともメモリ部)である。
また、以下の説明では、「プロセッサ部」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。少なくとも一つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも一個のプロセッサは、処理の一部または全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び/又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部(或いは、そのプロセッサ部を有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
(1)本実施形態の概要
図1は、本実施形態の概要を示す。
ビジュアルプログラミングツール300と、レポジトリ管理サーバ200と、接続関係管理サーバ100とがある。レポジトリ管理サーバ200は、ビジュアルプログラミングツール300によって開発者が開発したフローを表現したフローデータが格納されたバージョン管理レポジトリを保持し、ビジュアルプログラミングツールへのloadやビジュアルプログラミングツールからのsaveを可能とする。接続関係管理サーバ100は、フローにおけるノード間の接続関係の変化の履歴を分析し、ビジュアルプログラミングツール300上での開発を支援する。
レポジトリ管理サーバ200は、一般的なアプリケーション開発で用いられるソースコード(今回の場合はビジュアルプログラミングツールで開発されたアプリケーションのフローデータ)を管理するためのサーバであり、一例としてはGitHub(https://github.com/)やGitLab(https://about.gitlab.com/)などがある。
ビジュアルプログラミングツール300は、例えば、利用可能なノードの一覧表示部F310と、ノードを配置しフローを編集するフロー編集部F320とを含むフロー編集画面(例えばGUI(Graphical User Interface))を表示する。一覧表示部F310には、ノードのカテゴリF311ごとにノードF312が分類されている。開発者は、フロー編集部F320に、一覧表示部F310のノードをdrag&dropなどによりノードF321として配置し、ノード間をワイヤー(接続線)F322で接続することにより関係(処理の流れ)を定義する。例えば、ノードの左側がデータの入力、当該ノードの右側が出力を表現している場合には、あるノードAの右側と別のノードBの左側をつなぐことでノードAの出力をノードBに入力することを表現する。ワイヤーF322の接続元が出力に対応し接続先(ワイヤーの両端のうち矢印を持つ方の端)が入力に対応する。
そしてビジュアルプログラミングツール300は、こうして表現されるフローに含まれるノードの処理をビジュアルプログラミングツール300内で実行、または外部の処理サーバにデプロイしフローによって表現される処理を実行するアプリケーションを実行可能とする。またはフローをもとに計算機上で実行可能なバイナリオブジェクトを生成してもよい。こうした機能を提供するためビジュアルプログラミングツール300は、これら処理を実行する実行ボタンやデプロイボタン、またはバイナリ作成ボタンを有していてもよい。フローの実行、デプロイ、及び、バイナリオブジェクト作成といった処理は、「フローの確定」と総称することができる。
このような構成において、アプリケーション開発者(ユーザの一例)はビジュアルプログラミングツール300を用いて、ノード間の接続を付け替えつつアプリケーションを開発する。例えば、図1の例は、データを分析し、何らかの判断をするアプリケーションを開発している様子を示す。一覧表示部F310には、例えば、データの前処理(Cleansing)、分析処理(Analysis)のカテゴリのノードがあることを示している。例えばこれ以外にも、データのインプットや、アウトプットのカテゴリがあってもよい。
また、フロー編集部F320に示されるフローは、例えばStartがデータのインプットのノード、Node1とNode2が前処理のカテゴリのノード、Node3とNode4が何らかの共通処理のノード、Node5とNode6が分析処理のカテゴリのノード、Endが表示等のデータのアウトプットである。そして、Node1の前処理とNode5の分析処理が対応付き、Node2の前処理とNode6の分析処理が対応付く。そのため、アプリケーション開発者はNode5とNode6の分析処理を試行する度に、実際にデータが流れるNode4からの接続をNode5とNode6の間で付け替えるが、同時にNode1、Node2とNode3との接続も付け替える必要がある。
例えば、上記の場合においてNode1とNode3を接続し、Node4とNode6を接続したフローを考える。Node1とNode3、Node4とNode6、各々の接続は入出力の仕様は適合しており、静的には異常ではない。また、データ次第では分析処理も正しく終了する可能性がある。しかしながら、正しいデータが分析処理に入力されなくなるため、適切な分析結果を得ることができないこととなる。図1に例示するフローでは、ある1箇所のノード間の接続変更に伴って、変更する必要のある別のノード間の接続は1箇所のみであるが、実際の大量ノードからなるフローでは複数箇所の変更が必要となる場合がある。その場合では、アプリケーション開発者が誤ったノードに接続したフローとしてしまうことに気付けない場合がある。
本実施形態では、開発者の負荷を緩和すること、別の言い方をすれば、ノード間の接続変更を正しく行うことの確実性を向上することができる。具体的には、接続関係管理サーバ100が、確定したフローの履歴をもとに適切なノードの組み合わせを分析し、その分析結果をもとに、ノード間の接続変更の操作時に、当該操作に従う接続変更が誤っている可能性が高い場合には当該接続変更が正しいことを開発者に確認させるためにアラートを提示すること(F323)や、当該接続変更の操作が確定された際に、併せて変更する可能性の高いノード間接続を提示すること(F324)、といったようなnotificationを行う。
以下、本実施形態を詳細に説明する。なお、以下の説明では、或るフローに関して試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、変更操作(例えばワイヤーの付替えのための操作)及び確定操作(例えば変更後のフローの実行のための操作)の都度に、当該或るフローについて新たなバージョンのフロー(変更後の確定したフロー)が生じることとなる。そこで、説明の混同を避けるために、各バージョンのフローを「フロー」と言う。バージョンが異なる複数のフローが属する共通の対象を「ベースフロー」(或いは「フロー群」)と言うことができる。
(2)システムの構成
図2は、本実施形態にかかる計算機システムの構成図である。
計算機システムでは、接続関係管理サーバ100と、レポジトリ管理サーバ200と、1または複数のビジュアルプログラミングツール300がネットワーク500を介して通信する。これらサーバおよびツールは、それぞれがCPUやメモリ、ハードディスクなどからなる計算機で動作する。その動作形態は、それぞれ物理的に異なる計算機上で動作していてもよいし、仮想サーバと呼ばれる物理的な計算機を論理的に分割された計算機の単位で動作していてもよい。もしくは1台の計算機または複数の計算機クラスタ上で実行されるタスク(プロセスやコンテナとも呼ばれる)単位であってもよい。
ビジュアルプログラミングツール300を用いたフロー作成が接続関係管理サーバ100により支援される。ビジュアルプログラミングツール300は、入出力コンソールとしての計算機(例えばクライアント端末)で実行されてもよいし、入出力コンソール(本実施例では入力装置104及び表示装置105)と通信可能な接続関係管理サーバ100で実行されてもよい。ビジュアルプログラミングツール300は、描画プログラム310、フロー実行プログラム320及びフロー管理プログラム330を有し、フローの構成情報であるフローデータ400を管理する。
フロー編集画面というGUI(F310、F320などを含んだ画面)を表示するための描画プログラム310、フローの構成情報であるフローデータ400、そのほかフロー実行プログラム320やフロー管理プログラム330、などを有する。描画プログラム310の表示(出力)方法としては、同ツール300が動作する計算機上もしくはこの計算機に接続した別クライアント上で動作するウェブブラウザをUIクライアントとしたWebアプリとして動作してもよい。またはビジュアルプログラミングツール300が動作する計算機がディスプレイなどの出力装置を備える場合には同ディスプレイにUIを表示するデスクトップアプリとして用いられてもよい。
フロー実行プログラム320は、フローデータに記述された処理を実行するものである。実行方法は、例えば、同プログラム320自身が同ツール内で個々のノードに対応する処理を行いノード間の情報を中継するようなものであってもよいし、各ノードの処理をツール外部に構築しそれを呼び出すことで実現するようなものであってもよい。もしくは同プログラム320の代わりに、計算機上で実行可能なバイナリを生成するようなものであってもよい。フローデータ400の例は図3を用いて説明する。
フロー管理プログラム330は、ビジュアルプログラミングツール300のフロー管理を行うプログラムであり、レポジトリ管理サーバ200とフローデータの送受信を行うためのインターフェース等を提供するプログラムである。
加えてビジュアルプログラミングツール300またはこれを構成する各プログラムのうちいずれかが、レポジトリ管理サーバ200からのフローデータ取得や、同サーバ200へのフローデータ格納を実行するボタンを備えていてもよい。
またビジュアルプログラミングツール300は、複数の開発者が並行して利用されてもよい。その利用形態は開発者ごとに個々のツールが提供される形であってもよいし、1つのツールの中に、個々の開発者用の描画プログラム、フローデータ、フロー実行プログラムほかが実行されるような形であってもよい。
レポジトリ管理サーバ200は、各開発者のフローデータなどの各種ソースコードをバージョン管理するためのレポジトリと、これを管理するためのレポジトリ管理プログラム210からなる。レポジトリ管理プログラム210は、一般的なレポジトリ管理ソフトウェアが提供する機能を有するものでよく、例えば開発したアプリケーションのソースコード(フローデータ)管理(登録・変更・削除等)や、同レポジトリを利用する開発者の管理、またはプロジェクト管理情報変更時の外部への通知を行うための機能が含まれる。
接続関係管理サーバ100は、CPU(Central Processing Unit)111、メモリ112、ネットワークインターフェース113、及びI/Oインターフェース114を有する。これらのハードウェアは、内部バス(図示しない)を介して互いに接続される。CPU111は、プロセッサ部の一例であり、メモリ112は、記憶部の一例であり、ネットワークインターフェース113及びI/Oインターフェース114は、インターフェース部の一例である。
CPU111は、メモリ112に格納される一つ以上のプログラムを実行する。
メモリ112は、CPU111が実行する一つ以上のプログラム、及び、当該一つ以上のプログラムの実行において参照又は更新される複数のテーブルを格納する。プログラムとして、例えば、レポジトリ管理サーバ200に記録されたフロー(フローデータ)の各バージョンの情報をもとにノード間接続関係を分析するフロー分析プログラム110と、その結果をもとにノード間の接続が変更された場合に影響を分析する変更影響判断プログラム120とがある。テーブルとして、例えば、フロー実行履歴テーブルT100と、変更箇所テーブルT200と、クラスタ化ルールテーブルT300と、同時発生履歴テーブルT400と、変更影響テーブルT500とがある。各プログラムの処理およびテーブルの詳細については後述する。なお各プログラムやテーブルの配置は図2が示す例に限定されない。例えば、接続関係管理サーバ100に含まれる各プログラムとテーブルは、ビジュアルプログラミングツール300に含まれていてもよい。
ネットワークインターフェース113は、IPネットワークのようなネットワーク500を介して外部の装置と通信するためのインターフェースである。I/Oインターフェース114は、入力装置104及び表示装置105と接続するインターフェースである。なお、I/Oインターフェース114は、USBメモリ及び外部ストレージ装置等、外部の記憶媒体に接続してもよい。
入力装置104は、接続関係管理サーバ100にデータを入力するための装置(例えば、キーボード、マウス、及びタッチパネル等)である。表示装置105は、接続関係管理サーバ100の処理結果等を表示するための装置(例えば、ディスプレイ及びタッチパネル等)である。
(3)各種データ及びテーブルの内容
図3は、フローデータ400の一例を示す。
フローデータ400の表現の一例としては、JSONと呼ばれるデータ形式のファイルである。このほかXMLやYAMLなど他のデータ構造であってもよい。また、フローデータ400は、ファイル以外のデータでもよい。
フローデータ400には、ノードごとに、ノードをフロー上で一意に識別するための識別子を示すNodeID 410、ノードの種別(オブジェクト指向でのクラスに相当)を示すNodeType 420、ノードの分類を示すCategory 430、フロー編集部F320でのノードの表示名であるNodeName 440、フロー編集部F320での表示位置を示す座標450、ノード間の接続関係を示すwires 460、処理の内容を示すfunction460などが含まれる。wires 460には、ワイヤーが接続している先の出力端子を持つノードのNodeIdのリストが含まれる。なお座標450の基になる座標空間は3次元以上であってもよい。すなわち高さや、UI(ユーザインターフェース)がタブ分けされている場合はタブのindex情報を含んでいてもよい。
また、上記以外にも、例えば、外部のサービスに処理を依頼するために必要な情報であるURLやパラメータ、外部コマンドを実行するためのコマンド名や引数、及び、当該フローデータ400が示すフローのバージョンID(リビジョンID)といった他種の情報をフローデータ400が含んでもよい。
図4は、フロー実行履歴テーブルT100の例を示す。
フロー実行履歴テーブルT100は、フローがある程度開発の区切りをつけたバージョンの情報を記録するテーブルである。本実施形態では、そのタイミングとしてフローが確定したときの例を示している。
フロー実行履歴テーブルT100は、確定したフロー毎にエントリを有する。各エントリは、URL T110と、フローデータT120と、確定時刻T130と、リビジョンID T140といった情報を保持する。以下、一つのフローを例に取る(図4の説明において「注目フロー」)。
URL T110は、注目フローを表現したフローデータ400が管理されているレポジトリを特定するためのIDを示す。フローデータT120は、注目フローが属するベースフローのファイル名を示す(ファイル名に代えて又は加えて、ベースフローを特定可能な他種の情報が採用されてもよい)。また、リビジョンID T140は、レポジトリ管理サーバ200上のレポジトリに記録されているバージョン(当該フローデータ400のバージョン)を指すIDであるバージョンID(リビジョンID)を示す。具体的には、例えば、リビジョンIDは、GitやSubversion等、Version control systemのコミットIDであってよい。これを保持する理由は、開発者は自分の区切りでコミットを行う可能性があり、レポジトリに記録されているすべてのバージョンのフローが必ずしも適切なノード間の接続となっていない可能性があるためである。本実施形態では、ファイル名とバージョンID(リビジョンID)との組合せから、フローを特定することができる。
図5は、変更箇所テーブルT200の例を示す。
変更箇所テーブルT200は、フロー実行履歴テーブルT100に記録された各リビジョンID T140について、当該リビジョンID T140から特定されるフロー(変更後のフロー)と、当該フローの一つ前のバージョンが示すフロー(変更前のフロー)との差分を示す情報を保持するテーブルである。
変更箇所テーブルT200は、確定したフロー毎にエントリを有する。各エントリは、フローデータT210と、リビジョンID T220と、FromBefore T230と、ToBefore T240と、FromAfter T250と、ToAfter T260といった情報を保持する。以下、一つのフローを例に取る(図5の説明において「注目フロー」)。
FromBefore T230とToBefore T240は、注目フローにおいて、ノード間接続の変更箇所毎に、変更操作実施前のノード間接続における接続元ノード(Start側ノード)のIDと、接続先ノード(End側ノード)のIDとを示す。同様に、FromeAfter T250とToAfter T260は、注目フローにおいて、ノード間接続の変更箇所毎に、変更操作実施後のノード間接続における接続元ノードのIDと接続先ノードのIDとを示す。FromBefore T230とToBefore T240と、FromeAfter T250とToAfter T260との組は、変更前と変更後の関係を意味する。
図6は、クラスタ化ルールテーブルT300の例を示す。
クラスタ化管理テーブルT300は、フローに含まれる複数のノードが分類された二つ以上のクラスタの各々に関する情報を記録するテーブルである。ここで、「クラスタ」とは、一つのノード、または、ワイヤーで接続された一つ以上のノード群である。
クラスタ化ルールテーブルT300は、確定したフロー毎にエントリを有する。各エントリは、フローデータT310と、リビジョンID T320と、クラスタID T330と、始端ノードT340と、終端ノードT350と、前方クラスタID T360と、後方クラスタID T370といった情報を保持する。以下、一つのクラスタを例に取る(図6の説明において「注目クラスタ」)。
フローデータT310は、注目クラスタを含んだフローが属するベースフローのファイル名を示す。リビジョンID T320は、注目クラスタを含んだフローに対応したバージョンIDを示す。クラスタID T330は、注目クラスタを識別するIDを示す。
始端ノードT340は、注目クラスタにおける始端ノード(当該ノードの入力側にワイヤーが接続されていないか、或いは、注目クラスタ外のノードの出力側とワイヤー経由で接続されているノード)のノードIDを示す。終端ノードT350は、注目クラスタにおける終端ノード(当該ノードの出力側にワイヤーが接続されていないか、或いは、注目クラスタ外のノードの入力側とワイヤー経由で接続されているノード)のノードIDを示す。
前方クラスタID T360は、注目クラスタにおける始端のノードと接続しているノードを含むクラスタのIDを示す。後方クラスタID T370は、注目クラスタにおける終端ノードと接続しているノードを含むクラスタのIDを示す。すなわち、クラスタ化ルールテーブルT300は、各フローについて、複数のノード間接続に加えて、一つ以上のクラスタ間接続を示す。
図7は、同時発生履歴テーブルT400の例を示す。
同時発生履歴テーブルT400は、複数のクラスタの共起関係に関する情報を記録するためのテーブルである。
同時発生履歴テーブルT400は、クラスタ群ペア毎にエントリを有する。各エントリは、フローデータT410と、クラスタ間接続1 T420と、クラスタ間接続2 T430と、リビジョンID T440と、獲得点数T450といった情報を保持する。以下、一つのクラスタ群ペアを例に取る(図7の説明において「注目クラスタ群ペア」)。なお、「クラスタ群」とは、一方のクラスタにおける終端ノードに他方のクラスタにおける始端ノードが一つのワイヤー経由で接続された二つのクラスタの集合である。このため、クラスタ群は、クラスタペアと呼ばれてもよい。「クラスタ群ペア」とは、クラスタ群の組である。本実施形態では、同時発生履歴テーブルT400は、クラスタ群に関する2−組み合わせに含まれるクラスタ群ペアを保持する。
クラスタ間接続1 T420とクラスタ間接続2 T430は、注目クラスタ群ペアを構成する一方のクラスタ群と他方のクラスタ群とを示す。クラスタ群のデータ形式の一例が“(1,3)”である。これは、当該クラスタ群が、ID=1のクラスタからID=3のクラスタへの接続である(ID=1のクラスタにおける終端ノード)とID=3のクラスタにおける始端ノードとがワイヤー経由で接続されている)ことを示している。
また、獲得点数T450は、注目クラスタ群ペアに関し、各変更後フローについて、当該変更後フローにおける変更箇所(ノード間接続の変更箇所)と注目クラスタ群ペアとの関係性に応じて決定されたスコア、具体的には、注目クラスタ群ペアが同一フロー(同一リビジョンのフロー)に含まれる度合いを示す。例えば、注目クラスタ群ペアに含まれるすべてのクラスタ群の接続箇所がフローの変更箇所でない場合は、フロー分析プログラム110は、注目クラスタ群ペアは、ノード間接続変更によってクラスタ群が互いに与える影響が不明であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数T450として“0”を付与する。同一フロー(同一リビジョン)に注目クラスタ群ペアが含まれる場合は、フロー分析プログラム110は、同時に利用される接続関係であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数T450として“+10”を付与する。逆に、同一フローに注目クラスタ群ペアが含まれない場合は、フロー分析プログラム110は、同一フローで同時に利用されることの少ない接続関係であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数T450として“−10”を付与する。
図8は、変更影響テーブルT500の例を示す。
変更影響テーブルT500は、開発者によって行われたノード間接続変更操作後のフローに含まれる同時に利用される度合いの低いノード間の接続を示す情報を保持するテーブルである。
変更影響テーブルT500は、変更操作毎にエントリを有する。一つの変更操作を例に取ると次の通りである(図8の説明において「注目変更操作」)。すなわち、各エントリは、注目変更操作のIDを示す変更操作ID T510と、注目変更操作が行われた時刻を示す時刻T520と、注目変更操作がされるフローのベースフローのファイル名を示すフローデータT530と、注目変更操作前のノード間接続を示す変更前ノード間接続T540と、注目変更操作後のノード間接続を示す変更後ノード間接続T550と、注目変更操作後のクラスタ間接続(変更後クラスタペア)を示す変更後クラスタペアT560と、変更後クラスタペアと同時に利用される可能性の低いクラスタ間接続(不適切クラスタペア)を示す不適切クラスタペアT570と、不適切クラスタペアの接続界面であるノード間接続を示す不適切ノード間接続T580と、変更後クラスタペアと不適切クラスタペアが同時に発生する度合い(同時発生度)を示す同時発生度T570といった情報を保持する。
変更前ノート間接続T540は、例えば、“(Node4、Node5)”といったデータ形式で記録され、これはNode4からNode5への接続(Node4が始端ノードでありNode5が終端ノードであること)を示す。変更後ノード間接続T550としての値の表現形式も変更前ノート間接続T540のデータ形式と同様である。
また、変更後クラスタペアT560は、変更後ノード間接続T550の箇所に対応するクラスタ間接続(変更後ノード間接続T550が示す二つのノードを含んだクラスタ間接続)を示す。変更後クラスタペアT560は、例えば、“(4,6)”といったデータ形式で記録され、これはID=4とID=6のクラスタが接続していること(ID=4のクラスタが始端側でありID=6のクラスタが終端側であること)を示す。
また、同時発生度T590は、変更後クラスタペアがクラスタ間接続1 T420に一致し、不適切クラスタペアがクラスタ間接続2 T430に一致する場合と、変更後クラスタペアがクラスタ間接続2 T430に一致し、不適切クラスタペアがクラスタ間接続1 T420に一致する場合の獲得点数T450の合計値を示す。
実線枠820は、点線枠810の詳細を示す。吹き出し820によれば、ID=3のクラスタとID=4のクラスタ同士の接続が、注目変更操作の前後で影響の無いクラスタ間接続(変更操作が正しいか否かにおいて影響の無いクラスタ間接続)に相当する。また、ID=2のノードは、不適切クラスタペアにおける始端側のクラスタ(ID=2のクラスタ)における終端ノードであり、ID=3のノードは、不適切クラスタペアにおける終端側のクラスタ(ID=3のクラスタ)における始端ノードであり、このノード間接続(ID=2のノードからID=3のノードへの接続)が、不適切ノード間接続(不適切クラスタペアの接続界面)に該当する。
(4)処理流れ
図9は、フロー分析処理の流れを示す。
フロー分析プログラム110は、ビジュアルプログラミングツール300でのフローの確定を検知(S1000)し、確定されたフローを取得する(S1010)。
フローの確定を検知する方法としては、フロー分析プログラム110が定期的にビジュアルプログラミングツール300を監視することにより確定を検知する方法でもよい。または、事前にビジュアルプログラミングツール300に、フローの確定が行われた際に接続関係管理サーバ100に通知する設定を行っておき、ビジュアルプログラミングツール300がフローの確定を接続関係管理サーバ100に通知する方法であってもよい。
また、S1010で取得するフローは、図3に例示する形式(JSON形式)のフローデータが示すフローであってもよいし、レポジトリ管理サーバ200上のレポジトリのアクセス先情報(URL等)とリビジョン番号から特定されるフローであってもよい。例えば、ビジュアルプログラミングツール300が、フロー確定時にフローの状態を保存するためにレポジトリ管理サーバ200上のレポジトリにコミットする機能を有している場合には、その際のリビジョン番号を取得すればよい。そうでない場合は、例えば接続関係管理サーバ100がレポジトリ管理サーバ上に自身の処理用のレポジトリを生成し、フローデータを取得した際にそのレポジトリにコミットする等の処理を行ってもよい。
フロー分析プログラム110は、S1010の後、取得したフローに関する情報(例えば時刻T130及びリビジョンID T140)をフロー実行履歴テーブルT100に保存する。
次に、フロー分析プログラム110は、フロー実行履歴テーブルT100からS1010で取得したフローに対して、一つ前のリビジョンのフローを取得する(S1020)。以降、便宜的にS1010で取得したフローを「今回フロー」と呼称し、S1020で取得したフローを「前回フロー」と呼称する。
そして、フロー分析プログラム110は、両フローを入力として変更抽出処理を実行する(S1030)。変更抽出処理は、今回フローと前回フローの差分を分析し、前回実行時から今回実行時までの間にノード間の接続が付け替えられた箇所を特定し、その上で、変更箇所テーブルT200に当該特定された箇所を記録する処理である。変更抽出処理の詳細は図10を用いて後述する。
次に、フロー分析プログラム110は、クラスタ抽出処理を実行する(S1040)。クラスタ抽出処理は、S1030で特定したノード間接続変更箇所の情報を加味し、今回フロー及び前回フローをクラスタに分割し、その上で、クラスタ化ルールテーブルT300を更新する処理である。クラスタ抽出処理の詳細は図11を用いて後述する。
そして、フロー分析プログラム110は、S1040で更新後のクラスタ化ルールテーブルT300を用いて、前回フローと今回フロー内のノード間接続に該当するクラスタを特定し(S1050)、クラスタのペア(2−組み合わせ)を生成する(S1060)。図6で例示したクラスタ化ルールテーブルT300に従うと、フローは全体がID=1のクラスタに置き換えられる場合と、ID=2からID=6までのクラスタに置き換えられる場合のパタンがある。
次に、フロー分析プログラム110は、S1060で取得したクラスタペア(クラスタ群)の集合に対して、さらに2−組み合わせを生成し(つまり、クラスタ群ペアを生成し)、各クラスタ群ペアに対してS1080からS1120までの処理を行う(S1070)。ここでのクラスタペアはフローに含まれるノード間接続の内、過去に複数ノード間で付け替えがなされたことのある接続を意味しており、クラスタ群ペアは、クラスタ(ノード間接続)の組が二つあることを意味する。フロー分析プログラム110は、以降に述べるS1080からS1120までの処理により、選択した二つのノード間接続が同時に利用されやすいか否かを判断する。以下、一つのクラスタ群ペアを例に取る(図9の説明において「注目クラスタ群ペア」)。
まず、フロー分析プログラム110は、注目クラスタ群ペアが前回実行から今回実行までの間に行われたノード間接続の変更箇所であるか否かを判断する(S1080)。具体的には、フロー分析プログラム110は、変更箇所テーブルT200を参照し、今回フローに対応したいずれかのFromAfter T250とToAfter T260との組が示すノード間接続を構成する二つのノードが、注目クラスタ群ペアに含まれるか、否かを判断する。
S1080の判断結果がNoであった場合、注目クラスタ群ペアは今回フローの開発で行われたノード間接続の変更箇所ではなかったため、フロー分析プログラム110は、注目クラスタ群ペア及び今回フローに対応した獲得点数T450として“0”を記録する(S1130)。
S1080の判断結果がYesであった場合、フロー分析プログラム110は、注目クラスタ群ペアが前回フローに含まれるか、否かを判断する(S1090)。S1090の判断結果がYesの場合、フロー分析プログラム110は、注目クラスタ群ペアが同時に利用される可能性が高いと判断する、具体的には、注目クラスタ群ペア及び今回フローに対応した獲得点数T450として“+10”(加点の一例)を同時発生履歴テーブルT400に記録する(S1110)。一方、S1090の判断結果がNoの場合、フロー分析プログラム110は、注目クラスタ群ペアが今回フローに含まれるか、否かを判断する(S1100)。S1100判断結果がYesの場合、フロー分析プログラム110は、注目クラスタ群ペアが同時に利用される可能性が高いと判断する、つまり、S1110を実施する。
一方、S1100の判断結果がNoの場合、フロー分析プログラム110は、注目クラスタ群ペアが同時に利用される可能性が低いと判断する、具体的には、注目クラスタ群ペア及び今回フローに対応した獲得点数T450として“−10”(減点の一例)を同時発生履歴テーブルT400に記録する(S1120)。
図10は、変更抽出処理(図9のS1030)の流れを示す。
フロー分析プログラム110は、今回フローに含まれる各ノードに対してS2020からS2080までの処理を実施する(S2010)。S2020からS2080までの処理では、今回フローと前回フローに共通するノードについて、前回と今回で接続関係が変化しているか、否かを判断することが実施される。以下、一つのノードを例に取る(図10の説明において「注目ノード」)。
フロー分析プログラム110は、注目ノードが前回フローに含まれているか、否かを判断する(S2020)。S2020の判断結果がNoの場合、注目ノードは、新規に追加されたノードであるため、フロー分析プログラム110は、S2030以降を行わない。
S2020の判断結果がYesの場合、フロー分析プログラム110は、注目ノードの前方のノード間接続が付け替えられているか、否かを判断する。具体的には、まず、フロー分析プログラム110は、注目ノードの前方にワイヤーが接続されているか、否かを判断する(S2030)。S2030の判断結果がNoの場合、今回フローではワイヤーが別のノードに付け替えられた可能性があるため、フロー分析プログラム110は、注目ノードが前回フローで前方(始端側)に接続していたノードを特定し、当該特定されたノードに対して今回フローでは注目ノード以外のノードが後方(終端側)に接続しているか、否かを判断する。仮に、以下のいずれかの場合、S2040の判断結果はNoである。
・前回フローでも注目ノードの前方にノードが接続されていなかった場合。
・前回フローで注目ノードの前方に接続されていたノードが、今回フローに含まれていない場合。
・前回フローで注目ノードの前方に接続されていたノードに対して、今回フローでは後方にノードが接続されていない場合。
S2040の判断結果がYesの場合、フロー分析プログラム110は、前方の付け替えを変更箇所テーブルT200に記録する(S2050)。例えば、注目ノードが“Node-A”、前回フローで注目ノードの前方に接続されていたノードが“Node-B”、今回フローで“Node-B”の後方に接続されているノードが“Node-C”である場合に、フロー分析プログラム110は、変更箇所テーブルT200に対して、FromBefore T230“Node-B”、ToBefore T240“Node-A”、FromAfter T250“Node-B”、及び、ToAfter T260“Node-C”を含んだエントリを追加する。
S2030の判断結果がYes、又は、S2040の判断結果がNoの場合は、注目ノードの前方に接続されているノードに対して付け替えは行われていないため、S2060以降が行われる。
S2060からS2080では、フロー分析プログラム110は、注目ノードの後方の接続に関して、ノード間接続の付け替えが行われているか、否かを判断する。具体的には、まず、フロー分析プログラム110は、今回フローでは、注目ノードの後方にワイヤーが接続されているか、否かを判断する(S2060)。S2060の判断結果がNoの場合、今回フローではワイヤーが別のノードに付け替えられた可能性があるため、フロー分析プログラム110は、注目ノードが前回フローで後方に接続していたノードを特定し、当該特定されたノードに対して、今回フローでは注目ノード以外のノードが前方に接続されているか、否かを判断する(S2070)。仮に、以下のいずれかの場合、S2070の判断結果はNoである。
・前回フローでも注目ノードの後方にノードが接続されていなかった場合。
・前回フローで注目ノードの後方に接続されていたノードが、今回フローに含まれていない場合。
・前回フローで注目ノードの後方に接続されていたノードに対して、今回フローでは前方にノードが接続されていない場合。
S2070の判断結果がYesの場合、フロー分析プログラム110は、後方の付け替えを変更箇所テーブルT200に記録する(S2080)。例えば、注目したノードが“Node-A”、前回フローで後方に接続していたノードが“Node-B”、今回フローで“Node-B”の前方に接続しているノードが“Node-C”である場合に、フロー分析プログラム110は、変更箇所テーブルT200に対して、FromBefore T230“Node-A”、ToBefore T240“Node-B”、FromAfter T250“Node-C”、及び、ToAfter T260“Node-B”を含んだエントリを追加する。
S2060の判断結果がYes、又は、S2070の判断結果がNoの場合は、注目ノードの後方に接続されているノードに対して付け替えは行われていないため、注目ノードについて処理が終了する。
図11は、クラスタ抽出処理(図9のS1040)の流れを示す。
フロー分析プログラム110は、変更箇所テーブルT200を参照し、今回フローに対応した全ての変更前セット(FromBefore T230とToBefore T240との組)と全ての変更後セット(FromAfter T250とToAfter T260との組)を取得する(S3010)。
次に、フロー分析プログラム110は、S3010で取得したノード間接続の変更箇所(FromAfter T250とToAfter T260)を断面として、今回フローを分割した部分フローを取得する。また、同様にノード間接続の変更箇所の情報(FromBefore T230とToBefore T240)を断面として、前回フローを分割した部分フローを取得する(S3020)。
そして、フロー分析プログラム110は、S3020で取得した各部分フローについて、S3040、S3050の処理を実行し、各クラスタをクラスタ化ルールテーブルT300に登録する(S3030)。各部分フローについて、当該部分フローから特定された各クラスタを登録する理由は、S3020で取得された各部分フローは、ノード間接続が変更されておらず、前回実行時から構造が変化していない部分であり、試行錯誤を行う際にある程度のまとまった機能を保持する単位であると考えられるためである。以下、一つの部分フローを例に取る(図11の説明において「注目部分フロー」)。
フロー分析プログラム110は、注目部分フローに存在するクラスタをクラスタ化ルールテーブルT300や、レポジトリ管理サーバ200が保持する情報をもとに特定する(S3040)。特定の方法は、例えば以下の方法がある。まず、フロー分析プログラム110は、今回フローのベースフローとフローデータT310が同値である各エントリについて、フローデータT310とリビジョンID T310、及びフロー実行履歴テーブルT100のURL T110の情報より、当該フローデータの過去のバージョンのデータを取得する。次に、フロー分析プログラム110は、始端ノードT340と終端ノードT350より、取得したフローデータより、部分フローを取得する。フロー分析プログラム110は、取得した部分フローと、注目部分フローとを比較し、部分フローの組成の差分が、任意の閾値以下であるかを判断し、閾値を下回っている場合には同一のクラスタと判断する。例えば、組成の差分とは、二つの部分フローが含む同一ノードの割合である。または、例えば、組成の差分とは、ノード間の接続関係までを加味した尺度(例えば当該の部分フローを構築するために必要な最低限の操作(ノードの追加、ワイヤーの追加)のうち、同一操作の割合)であってもよい。
次に、フロー分析プログラム110は、クラスタ化ルールテーブルT300を更新する(S3050)。具体的には、フロー分析プログラム110は、クラスタ化ルールテーブルT300の内、注目部分フローが属するフローデータとリビジョン(今回フローか、前回フローか)に対応するエントリを特定する。S3040で注目部分フローに対応する一つ以上のクラスタを特定した場合には、フロー分析プログラム110は、特定した各クラスタのIDをクラスタID T330に指定して、クラスタ化ルールテーブルT300に、注目部分フローの情報(始端ノードT340及び終端ノードT350)を追加する。一方で、S3040で特定されたクラスタが無かった場合には、フロー分析プログラム110は、新規のクラスタIDを採番し、同様にクラスタ化ルールテーブルT300に、注目部分フローの情報を追加する。
フロー分析プログラム110は、すべての部分フローについてS3030からS3050までの処理を終えると、S3040で特定した各クラスタについて、フローデータのノード間の接続関係をもとに、クラスタ間の接続関係を特定し、S3050でクラスタ化ルールテーブルT300に追加したエントリに対して、前方クラスタID T360と後方クラスタID T370を追記する(S3060)。
図12は、変更影響判断プログラム120が動作する際の、ビジュアルプログラミングツール300の画面を通して開発者(ユーザの一例)600と、ビジュアルプログラミングツール300と、接続関係管理サーバ100の間のやり取りを示す。なお、このとき接続関係管理サーバ100で動作し、ビジュアルプログラミングツール300とやり取りするプログラムは変更影響判断プログラム120であり、以降の図12に対する説明で接続関係管理サーバ100を主語や目的語とする場合は、主語や目的語を変更影響判断プログラム120に置き換えてもよい。
まず、開発者600がビジュアルプログラミングツール300上のフロー編集部F320で、すでに両端が接続されているワイヤーを異なるノードに付け替える操作を実施する(S4000)と、ビジュアルプログラミングツール300はノード間接続関係の変更通知を接続関係管理サーバ100に送信する(S4010)。ここで、変更通知は、例えば、フローデータを特定するID(例えば、ベースフローのファイル名と、現在の編集対象のフローのリビジョンIDとの組)と、変更されたワイヤーが変更前に接続していたノードのIDと、変更後に接続しているノードのIDとを含むことを想定する。それ以外にも、ノード間接続関係の変更を検知する方法としては、変更影響判断プログラム120が定期的にビジュアルプログラミングツール300を監視し、変化を検知する方法でもよい。また、変更影響判断プログラム120が定期的にレポジトリ管理サーバ200上のレポジトリを監視し、変更を含むコミットがなされたことを検知する方法でもよい。
S4010で通知を受けると、変更影響判断プログラム120は、接続関係管理サーバ100内で一意の変更操作ID510を採番し、不適切変更判断処理を実施する(S4020)。不適切変更判断処理は、入力されたフローデータと、ノード間接続の変更の情報をもとに、クラスタ化ルールテーブルT300や同時発生履歴テーブルT400を参照し、開発者600によって行われているノード間接続変更に対して、変更後のフローにおいて同時に利用される可能性が低い部分フローが存在するかを検査し、存在する場合にはその部分フロー(クラスタ)と、修正すべきノード間接続箇所を変更影響テーブルT500に記録する処理である。不適切変更判断処理の詳細は図13を用いて後述する。
S4020の処理が終了すると、変更影響判断プログラム120は、変更影響テーブルT500を参照し、不適切ノード間接続T580の値がある場合には、その値を含んだ判断結果通知をビジュアルプログラミングツール300に送信する(S4030)。判断結果通知は、例えば、同時発生度T590が閾値以下である変更後ノード接続T550としての情報(ノード間接続の情報)を含む。ビジュアルプログラミングツール300は、受領した通知にノード間接続の情報が含まれている場合には、ワイヤーの接続が変更された、もしくはされようとしている部分の箇所の情報と共に、当該変更箇所と同時に利用する可能性が低いノード間接続として、受領したノード間接続の情報(例えば、変更後ノード間接続T550に基づく情報)をアラート表示する(S4040)。結果として、開発者にS4020の判断結果が通知される(S4050)。アラート表示の方法としては、一例としては図1の参照符号F323が示すように開発者が変更しようとしているフロー中の箇所に表示させる方法がある。また、それ以外にもアラート一覧画面のような表示専用部にメッセージを表示する方法でもよい。
開発者がノード間接続変更操作を確定させる操作を実施した場合(S4060)、ビジュアルプログラミングツール300は、変更影響判断プログラム120に対してノード間接続の変更操作を実施した箇所(例えば変更後ノード間接続)を指定した確定通知を送信する(S4070)。開発者の確定操作としては、例えばS4050で表示されたアラートを確認した上でのノード間接続変更操作の完了であってもよい。または、S4050でノード間接続の変更操作が行われた箇所にアラートを表示した場合には、アラート部分に確認を意味するボタンを表示し、そのボタンを押下することによることを契機としてもよい。それ以外にも、ノード間接続変更操作の完了から一定時間が経過したことであってもよい。
変更影響判断プログラム120は、ビジュアルプログラミングツール300からノード間接続の変更操作の確定通知を受領すると、変更影響テーブルT500を参照し、確定通知に含まれるノード間接続変更操作の箇所(変更後ノード間接続)の情報から、当該箇所に対応した不適切ノード間接続T580を特定し(S4080)、特定した不適切ノード間接続T580が示す情報を含んだ通知をビジュアルプログラミングツール300に送信する(S4090)。
ビジュアルプログラミングツール300は、当該通知を受領すると、確定したノード間接続変更操作に対応して修正する可能性のあるノード間接続の情報(S4080で特定された不適切ノード間接続T580が示す情報)を表示する(S4100)。表示の方法としては、例えば図1の参照F324が示すように、S4090で受領した通知に含まれるノード間接続に対応する箇所に、S4060で確定したノード間接続変更の情報と共に修正するか、否かの警告を表示する方法である。また、S4060で確定したノード間接続変更操作が一定期間よりも前の操作である場合や、当該操作を実施以後に多数の別の操作が行われている場合には、S4070やS4080で通知を無視する処理を含んでいてもよい。これは、一定の時間が経過しても開発者がフローを修正していない場合には、ノード内のロジックや、データが変化し、問題とならなくなった可能性があり、そのために開発者は敢えてフローを修正していない場合があるためである。同様の理由により、S4040やS4100で表示したアラートや、修正候補の警告に関して、一定期間後に自動的に表示を消す処理を含んでいてもよい。
図13は、不適切変更判断処理の流れを示す。
変更影響判断プログラム120は、クラスタ化ルールテーブルT300を参照し、取得したフローデータ(確定後の最新の今回フロー)に対応する各エントリの始端ノードT340と終端ノードT350をもとに各クラスタの対応する部分フローを特定する(S5010)。
このとき、部分フローを特定する方法は、例えば単純に始端ノードT340と終端ノードT350に対応するノードIDのノードを始端、終端とする部分フローであってもよいし、S3040で述べた様にクラスタ化ルールテーブルT300のリビジョンID T320の指す過去のフローデータ内の部分フローと組成を比較する方法であってもよい。
部分フローに対応するクラスタを特定すると、変更影響判断プログラム120は、ノード間の接続関係をもとに、各クラスタの組み合わせについて接続関係があるかを特定する。例えばクラスタ1(ID=1のクラスタ)の終端ノード(Node1)と、クラスタ2の始端ノード(Node2)が接続している場合には、クラスタ1とクラスタ2は接続しており、具体的にはNode1とNode2の接続が界面であると判断する。
また、上記のクラスタの組み合わせにおいて接続がないと判断された場合としては、クラスタ化ルールテーブルT300の更新時からノードの追加、削除等の操作が行われた場合があり得る。その場合であっても対応するため、例えばS3040で述べた部分フローの組成を比較する方法によって、クラスタに属していないがクラスタに接続しているノードについて、仮にクラスタに属するとした場合に、同一のクラスタと判別できるか計算し、判別できるならばクラスタを拡張する処理を繰り返し行う処理が含われてもよい。その結果、クラスタが接続した場合には、当該のクラスタの組み合わせについて接続していると判断する。
また、上記のクラスタの拡張処理について、適切なクラスタ間接続の界面となるノード間接続を取得するために、例えば以下に記述する方法を含んでもよい。ノードが属すると仮定するクラスタを変更したパタンを複数用意し、それぞれについてS3040で述べた方法で、過去のフローデータに含まれる部分フローと組成を比較する。その中で、部分フローと比較した結果を示す尺度が最も高い(最も過去の部分フローからの差が少ない)パタンをクラスタ間の界面とする。
また、フローをクラスタ群の接続に置き換えられるパタンが複数ある場合には、クラスタの取りえるすべての組み合わせを生成する。
次に、変更影響判断プログラム120は、S5010で生成したフローをクラスタ単位に置き換えたクラスタの組み合わせパタンより、ビジュアルプログラミングツール300より通知された、ノード間接続変更箇所を界面とするクラスタ間接続を含むクラスタの組み合わせパタンを取得する(S5020)。仮に、一つも取得されない場合(S5030:Noの場合)は、今回のノード間接続変更は過去に例のないノード間接続変更であるため、不適切接続変更処理が終了する。
一方で、S5020で一つ以上のクラスタの組み合わせパタンが取得された場合(S5030:Yes)、変更影響判断プログラム120は、パタン毎に、パタンに含まれる各クラスタ間の接続についてS5050からS5070までの処理を実施する(S5040)。以下、S5040について一つのパタンを例に取る(図13の説明において「注目クラスタ間接続」)。S5050からS5070までの処理は、S5020で特定したクラスタ間接続(ビジュアルプログラミングツール300より通知された、ノード間接続変更箇所を界面とするクラスタ間接続と、注目クラスタ間接続が、同時に利用される可能性が低いか、否かを判断する処理である。図13の説明において、S5020で特定したクラスタ間接続を、「クラスタ間接続A」と言い、注目クラスタ間接続を「クラスタ間接続B」と言う。
変更影響判断プログラム120は、クラスタ間接続Aとクラスタ間接続Bが同時利用される度合いである同時発生度を、同時発生履歴テーブルT400の獲得点数T450をもとに計算する。具体的には、変更影響判断プログラム120は、同時発生履歴テーブルT400より、クラスタ間接続A、Bをそれぞれ示す値をクラスタ間接続1 T420、クラスタ間接続2 T430としてそれぞれ格納されている一つ以上のエントリを特定し、当該一つ以上のエントリにそれぞれ含まれる一つ以上の獲得点数T450の総和を同時発生度として計算する。
次に、変更影響判断プログラム120は、S5050で計算した同時発生度が任意の閾値以下か、否かを判断する(S5060)。S5060の判断結果がYesの場合、変更影響判断プログラム120は、クラスタ間接続AとBの各々を、同時発生が不適切なクラスタ間接続であるとしてクラスタ変更影響テーブルT500に記録する(S5070)。S5070では、上述の採番された変更操作ID510、変更操作の時刻を示す時刻T520、クラスタ間接続Aを示す変更後クラスタペアT560、クラスタ間接続Bを示す不適切クラスタペアT570、クラスタ間接続Bの接続界面を示す不適切ノード接続580、及び、算出された同時発生度を示す同時発生度T590を含んだエントリが、クラスタ変更影響テーブルT500に追加される。
なお、S5050で示した同時発生度の計算方法や、S5060での閾値判断は一例であって他の方法が採用されてもよい。例えば、変更影響判断プログラム120は、すべての獲得点数T450の総和を計算するのではなく、一定期間内の範囲で(例えば現在時刻から過去一定期間内に実行時刻T130が属するフローについて)獲得点数T450の和を計算してもよい。
また、和といった絶対値ではなく、S5020で抽出したクラスタ間接続のパタン毎に合計をとり、その合計値で割った値などの相対的な値が、同時発生度として用いられてもよい。例えば、このような相対値の場合には、ある程度汎用的に用いることができる閾値を設定することができると考えられる。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
例えば、フローは、複数のノードがシーケンシャルに接続された構造に限らず、他の構造、例えば、木構造が採用されてもよい。具体的には、例えば、一つ以上のノードの各々について、当該ノードの入力側と出力側の少なくとも一方に、二つ以上のワイヤーが接続されてもよい。
また、例えば、ビジュアルプログラミングツールは、「モデル開発環境」と呼ばれてもよい。プログラム(ソフトウェア)の構成要素や処理単位であるノードは「モジュール」と呼ばれてもよく、ノード同士の結線であるワイヤーは「エッジ」と呼ばれてもよい。ノードとエッジは有向グラフにおける用語であり、Node-REDにおけるフローダイアグラムも有向グラフとして捉えることができる。フローダイアグラムとブロックダイアグラムと有向グラフは同義とし、フローダイアグラムは単に「フロー」と呼ぶことができ、「フロー」と「グラフ」は同義とできる。
なお、以上の説明を、例えば下記のように総括することができる。
フロー作成支援装置(例えば接続関係管理サーバ100)が、フロー分析部と、変更影響判断部とを備える。フロー分析部及び変更影響判断部は、例えば、フロー分析プログラム110及び変更影響判断プログラム120がそれぞれCPU111(プロセッサ部の一例)により実行されることで実現される機能である。フロー分析部は、ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出する。複数のフローの各々は、処理を表すノードとノード間のワイヤーとで構成されており、各ノード群は、二つ以上のノードである。変更影響判断部は、いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作がビジュアルプログラミングツールに対してされた場合、ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する。このように、ノード群間の共起関係が計算され、変更後フローにおける一のノード群と当該一のノード群との共起関係の低いノード群とのうちの少なくとも一つを示す情報が通知される(例えばビジュアルプログラミングツールの画面上に表示される)ので、ビジュアルプログラミングツールを用いて、試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、正しくノード間の接続変更を行えることの確実性が向上する。
上記一のノード群が、変更操作に従う変更後のノード群である。このため、変更後のノード群と、当該変更後のノード群との共起関係の低いノード群とのうちの少なくとも一つを示す情報が通知される。
具体的には、例えば、変更影響判断部は、変更操作に従う変更が確定する前では、上記一のノード群(つまり変更後のノード群)を示す情報を通知する。これにより、当該変更が誤っている可能性が高いことを開発者(ユーザの一例)に知らしめることができる。
また、例えば、変更影響判断部は、変更操作に従う変更が確定した後では、上記特定したノード群を示す情報を通知する。これにより、上記変更操作に従う変更に伴い変更する必要性の高いノード間接続を開発者に知らしめることができる。
フロー分析部は、複数のフローのうちの一つ以上のフローの各々について、当該フローである対象フローと、当該対象フローよりも過去に確定された一のフローとを比較することにより、過去に確定された一のフローにおける接続元又は接続先が変更された第一のワイヤーと、当該対象フローにおける接続元又は接続先が変更された第二のワイヤーとを特定する。フロー分析部は、第一のワイヤーを界面とする、当該界面を挟む二つのノードである第一のノード群を、上記一のフローから特定し、第二のワイヤーを界面とする、当該界面を挟む二つのノードである第二のノード群を、対象フローから特定する。複数のフローについての複数のノード群の少なくとも一つは、第一のノード群又は第二のノード群である。変更箇所を接続界面とするノード群を、変更箇所を接続界面としないノード群よりも、共起関係の算出で考慮すればよい。このため、正しくノード間の接続変更を行えることの確実性が向上することの処理負荷を低減することが期待できる。なお、一つ以上のフローの各々について、当該フローにとっての上記一のフローは、当該フローの直前回に確定したフローでよい。
ノード群間の共起関係を算出することは、一つ以上のフローの各々に関し、一つ以上のクラスタ群ペアの各々について、当該クラスタ群ペアを構成する二つのクラスタ群のうちの一方のクラスタ群である第一のクラスタ群と他方のクラスタ群である第二のクラスタ群との共起関係の高さを示すスコアを決定することを含む。各クラスタ群は、二つ以上のクラスタである。各クラスタは、ノード群である。一つ以上のフローの各々に関し、当該フローである対象フローについて、第一のクラスタ群と第二のクラスタ群とについてのスコアは、下記(x)の条件、
(x)第一のクラスタ群と第二のクラスタ群のいずれもが、接続元又は接続先が変更される前又は変更された後のワイヤー経由で互いに接続された二つのノードが接続界面である二つのクラスタを含む、
が満たされるか否かに依存する。変更後フローにおける一のノード群との共起関係の低いノード群は、対象クラスタ群ペアに対応した一つ以上のスコアに基づく値が閾値以下である場合の当該対象クラスタ群ペアのうちの一のクラスタ群の接続界面である二つのノードとしてのノード群である。対象クラスタ群ペアは、上記一のクラスタ群と、変更操作に従い接続元又は接続先が変更されたワイヤー経由で互いに接続された二つのノードを接続界面とするクラスタ群とのペアである。これにより、第一及び第二のクラスタ群の各々が変更箇所を含むか否かに応じて共起関係の高さを示すスコアの値を決定でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについての前記スコアは、(x)の条件が満たされる場合、下記(y)の条件、
(y)第一のクラスタ群と第二のクラスタ群との両方が、対象フローと、当該対象フローよりも過去に確定された一のフローとのいずれかに存在する、
が満たされるか否かに依存する。これにより、スコアの値をより適切にすることが期待でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについてのスコアの値は、下記である。これにより、スコアの値をより適切にすることが期待でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
・(x)が満たされない場合、第一の値である。
・(x)が満たされ(y)も満たされる場合、第一の値よりも高い第二の値である。
・(x)が満たされるが(y)が満たされない場合、第一の値よりも低い第三の値である。