(57)【要約】【課題】ビジュアルプログラミングツールを用いて、試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、正しくノード間の接続変更を行えることの確実性を向上する。【解決手段】フロー作成支援装装置は、ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出する。当該装置は、いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作がビジュアルプログラミングツールに対してされた場合、ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を当該変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する。【選択図】  図１
2020042679.tif 000002
【特許請求の範囲】
【請求項１】
ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出するフロー分析部と、
前記複数のフローの各々は、処理を表すノードとノード間のワイヤーとで構成されており、
各ノード群は、二つ以上のノードであり、
いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作が前記ビジュアルプログラミングツールに対してされた場合、前記ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を当該変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する変更影響判断部と
を備えるフロー作成支援装置。
【請求項２】
前記一のノード群が、前記変更操作に従う変更後のノード群である、
請求項１に記載のフロー作成支援装置。
【請求項３】
前記変更影響判断部は、前記変更操作に従う変更が確定する前では、前記一のノード群を示す情報を通知する、
請求項２に記載のフロー作成支援装置。
【請求項４】
前記変更影響判断部は、前記変更操作に従う変更が確定した後では、前記特定したノード群を示す情報を通知する、
請求項２に記載のフロー作成支援装置。
【請求項５】
前記フロー分析部は、前記複数のフローのうちの一つ以上のフローの各々について、
当該フローである対象フローと、当該対象フローよりも過去に確定された一のフローとを比較することにより、前記過去に確定された一のフローにおける接続元又は接続先が変更された第一のワイヤーと、当該対象フローにおける接続元又は接続先が変更された第二のワイヤーとを特定し、
前記第一のワイヤーを界面とする、当該界面を挟む二つのノードである第一のノード群を、前記一のフローから特定し、
前記第二のワイヤーを界面とする、当該界面を挟む二つのノードである第二のノード群を、前記対象フローから特定し、
前記複数のフローについての複数のノード群の少なくとも一つは、前記第一のノード群又は前記第二のノード群である、
請求項１に記載のフロー作成支援装置。
【請求項６】
前記一つ以上のフローの各々について、当該フローにとっての前記一のフローは、当該フローの直前回に確定したフローである、
請求項５に記載のフロー作成支援装置。
【請求項７】
ノード群間の共起関係を算出することは、前記一つ以上のフローの各々に関し、一つ以上のクラスタ群ペアの各々について、当該クラスタ群ペアを構成する二つのクラスタ群のうちの一方のクラスタ群である第一のクラスタ群と他方のクラスタ群である第二のクラスタ群との共起関係の高さを示すスコアを決定することを含み、
各クラスタ群は、二つ以上のクラスタであり、
各クラスタは、ノード群であり、
前記一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについての前記スコアは、下記（ｘ）の条件が満たされるか否かに依存し、
（ｘ）前記第一のクラスタ群と前記第二のクラスタ群のいずれもが、接続元又は接続先が変更される前又は変更された後のワイヤー経由で互いに接続された二つのノードが接続界面である二つのクラスタを含む、
前記変更後フローにおける一のノード群との共起関係の低いノード群は、対象クラスタ群ペアに対応した一つ以上のスコアに基づく値が閾値以下である場合の当該対象クラスタ群ペアのうちの一のクラスタ群の接続界面である二つのノードとしてのノード群であり、
前記対象クラスタ群ペアは、前記一のクラスタ群と、前記変更操作に従い接続元又は接続先が変更されたワイヤー経由で互いに接続された二つのノードを接続界面とするクラスタ群とのペアである、
請求項５に記載のフロー作成支援装置。
【請求項８】
前記一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについての前記スコアは、（ｘ）の条件が満たされる場合、下記（ｙ）の条件が満たされるか否かに依存する、
（ｙ）前記第一のクラスタ群と前記第二のクラスタ群との両方が、前記対象フローと、当該対象フローよりも過去に確定された一のフローとのいずれかに存在する、
請求項７に記載のフロー作成支援装置。
【請求項９】
前記一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについての前記スコアの値は、
（ｘ）が満たされない場合、第一の値であり、
（ｘ）が満たされ（ｙ）も満たされる場合、前記第一の値よりも高い第二の値であり、
（ｘ）が満たされるが（ｙ）が満たされない場合、前記第一の値よりも低い第三の値である、
請求項８に記載のフロー作成支援装置。
【請求項１０】
ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出し、
前記複数のフローの各々は、処理を表すノードとノード間のワイヤーとで構成されており、
各ノード群は、二つ以上のノードであり、
いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作が前記ビジュアルプログラミングツールに対してされた場合、前記ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を当該変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する、
フロー作成支援方法。
【請求項１１】
ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出し、
前記複数のフローの各々は、処理を表すノードとノード間のワイヤーとで構成されており、
各ノード群は、二つ以上のノードであり、
いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作が前記ビジュアルプログラミングツールに対してされた場合、前記ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を当該変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する、
ことをコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ビジュアルプログラミングツールを用いてアプリケーションソフトウェアのようなプログラムの開発を効率的に行うための技術に関する。
【背景技術】
【０００２】
プログラミングツールには、ソースコードを記述することなく、モデル図を記述することにより動作するアプリケーションソフトウェア（以下、アプリケーション）のようなプログラムを開発できるビジュアルプログラミングツールが存在する。その一例としては、オープンソースソフトウェア（ＯＳＳ）としては、Node-RED（https://nodered.org/）である。ビジュアルプログラミングツールを用いたソフトウェア開発では、機能等の各種処理のまとまりを一つの図形のようなオブジェクト（ノード）として表現し、処理間の関係（例えば処理の接続や、データの流れ）を、ノード間を線（ワイヤー）でつなぐことで表現する。また、一つ以上のワイヤーでつながれた複数のノードは、「フロー」と呼ばれる。開発者は、こうしたビジュアルプログラミングツールを用いることで、ソフトウェア開発の知識が十分になくとも直感的に意図した処理を行うアプリケーションを開発することができる。
【０００３】
このとき、ビジュアルプログラミングツールを用いた場合であっても、ノード間の接続関係（処理の入出力）を記述する際に、各ノードの仕様に適合した入力／出力となるようにしなければ正常に動作するアプリケーションとならない。一方で、ビジュアルプログラミングツールでは、処理の詳細等はノードに隠ぺいされるため、ノード間の接続関係が論理的に正しいか、一見して判別することが難しい。
【０００４】
そこで、例えば特許文献１にあるようにノード間接続を支援する技術が提案されている。特許文献１は、「過去のソフトウェア設計におけるサービスの入出力データの接続履歴を蓄積しておき、処理順序のみが記述されたサービスプロセスフローおよび処理対象となるサービスの選択情報から、選択したサービスの全ての入力に対し矛盾なく接続可能な他サービスの出力を任意に選択し前記入力と出力の接続組み合わせの生成確率を前記接続履歴から導出する処理を全ての接続組み合わせに対して行い、その中から前記生成確率が高い接続組み合わせを出力する。」を開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−３３４６２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一つ以上のノードを隔てて接続的に離れたノードが別のノードに接続が変更されることによって、あるノード間接続の発生確率が大きく変化する場合がある。
【０００７】
例えば、ビジュアルプログラミングツールは、本格的に開発に取り掛かる前に価値を検証するためのプロトタイピングに利用されることが考えられるが、その際には様々に処理の組み合わせ等を素早く試し、試行錯誤することが行われうる。例えば、大量のデータを機械学習等の手法を用いて分析するアプリケーションでは、様々な分析アルゴリズムを用いて、パラメータを変えつつ試行、比較することが行われる。また、分析アルゴリズムにデータを入力する際には、各アルゴリズムに対応する適切な前処理が必要となる。
【０００８】
これを、ビジュアルプログラミングツールを用いて行う場合には、各種の分析アルゴリズム処理を表現する一つ以上のノード、各前処理を表現する一つ以上のノード、その他データの受け渡し、保存、表示等の各種処理を行う一つ以上のノードをビジュアルプログラミングツールのフロー編集部（フロー編集用のビューとしての画面エリア）に用意し、ノード間をワイヤーで接続しフローを作成する。ここで、前処理ノードと分析アルゴリズムノードのフロー上の位置はアプリケーションの設計に依存するため、接続的に近い距離にあるとは限らない。なお、「接続的に」近い又は遠いとは、介在するワイヤーやノードの数が少ない又は多いことを意味し、フロー編集エリア上で「距離的に」近い又は遠いとは異なる。
【０００９】
また、開発者は開発を行っている途中ではすぐに他の処理等を試行するため、開発の手間を省くために一度置いたノードはフロー編集部から削除せずに、試行錯誤の度にワイヤーを付け替える。このとき、対応する分析アルゴリズムと前処理は、同時にワイヤーを付け替えられることとなるが、仮に誤って対応しない前処理と分析アルゴリズムを同一フロー内に存在させた場合には、正常に分析を行えないこととなる。すなわち、例えば複数の前処理ノードに接続するノードから見ると、フロー後段に含まれる分析アルゴリズムノードの種類によって、前段の前処理との接続が正常（発生確率が高い）か、異常（発生確率が低い）かが大きく変化してしまう。
【００１０】
本発明の目的は、上記を鑑み、ビジュアルプログラミングツールを用いて、試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、正しくノード間の接続変更を行えることの確実性を向上することにある。
【課題を解決するための手段】
【００１１】
フロー作成支援装置は、ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出する。当該装置は、いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作がビジュアルプログラミングツールに対してされた場合、ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を当該変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する。
【発明の効果】
【００１２】
本発明により、ビジュアルプログラミングツールを用いて、試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、正しくノード間の接続変更を行えることの確実性を向上することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一実施形態の概要を説明する図である。
【図２】図２は、実施形態を実現するシステムのシステム構成図である。
【図３】図３は、フローデータの例を示す図である。
【図４】図４は、フロー実行履歴テーブルの例を示す図である。
【図５】図５は、変更箇所テーブルの例を示す図である。
【図６】図６は、クラスタ化ルールテーブルの例を示す図である。
【図７】図７は、同時発生履歴テーブルの例を示す図である。
【図８】図８は、変更影響テーブルの例を示す図である。
【図９】図９は、フロー分析処理の流れを示すフローチャートである。
【図１０】図１０は、変更抽出処理（図９のＳ１０３０）の流れを示すフローチャートである。
【図１１】図１１は、クラスタ抽出処理（図９のＳ１０４０）の流れを示すフローチャートである。
【図１２】図１２は、変更影響判断プログラムが動作する際のユーザインタラクションを含む処理シーケンスを示す図である。
【図１３】図１３は、図１２から参照される、変更操作実施後のフローに、同時に利用される確率が低いクラスタが含まれているか、を判断する処理のフローチャートである。
【発明を実施するための形態】
【００１４】
一実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１５】
なお、以下の説明では、「インターフェース部」は、一つ以上のインターフェースでよい。当該一つ以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、一つ以上のＩ／Ｏデバイス（例えば入力デバイス（例えばキーボードおよびポインティングデバイス）と出力デバイス（例えば表示デバイス））と表示用計算機とのうちの少なくとも一個のＩ／Ｏデバイスでもよいし、それに代えてまたは加えて、当該少なくとも一つのＩ／Ｏデバイスに対するインターフェースデバイス（Ｉ／Ｏインターフェース）でもよい。通信インターフェース部は、一つ以上の通信インターフェースデバイスでよい。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１６】
また、以下の説明では、「メモリ部」は、一つ以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも一個のメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１７】
また、以下の説明では、「ＰＤＥＶ部」は、一つ以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）またはＳＳＤ（Solid State Drive）である。
【００１８】
また、以下の説明では、「記憶部」は、メモリ部およびＰＤＥＶ部のうちの少なくとも一個（典型的には少なくともメモリ部）である。
【００１９】
また、以下の説明では、「プロセッサ部」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも一つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも一個のプロセッサは、処理の一部または全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）またはＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００２０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び／又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部（或いは、そのプロセッサ部を有するコントローラのようなデバイス）とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【００２１】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
【００２２】
（１）本実施形態の概要
【００２３】
図１は、本実施形態の概要を示す。
【００２４】
ビジュアルプログラミングツール３００と、レポジトリ管理サーバ２００と、接続関係管理サーバ１００とがある。レポジトリ管理サーバ２００は、ビジュアルプログラミングツール３００によって開発者が開発したフローを表現したフローデータが格納されたバージョン管理レポジトリを保持し、ビジュアルプログラミングツールへのloadやビジュアルプログラミングツールからのsaveを可能とする。接続関係管理サーバ１００は、フローにおけるノード間の接続関係の変化の履歴を分析し、ビジュアルプログラミングツール３００上での開発を支援する。
【００２５】
レポジトリ管理サーバ２００は、一般的なアプリケーション開発で用いられるソースコード（今回の場合はビジュアルプログラミングツールで開発されたアプリケーションのフローデータ）を管理するためのサーバであり、一例としてはGitHub（https://github.com/）やGitLab（https://about.gitlab.com/）などがある。
【００２６】
ビジュアルプログラミングツール３００は、例えば、利用可能なノードの一覧表示部Ｆ３１０と、ノードを配置しフローを編集するフロー編集部Ｆ３２０とを含むフロー編集画面（例えばＧＵＩ（Graphical User Interface））を表示する。一覧表示部Ｆ３１０には、ノードのカテゴリＦ３１１ごとにノードＦ３１２が分類されている。開発者は、フロー編集部Ｆ３２０に、一覧表示部Ｆ３１０のノードをdrag&dropなどによりノードＦ３２１として配置し、ノード間をワイヤー（接続線）Ｆ３２２で接続することにより関係（処理の流れ）を定義する。例えば、ノードの左側がデータの入力、当該ノードの右側が出力を表現している場合には、あるノードAの右側と別のノードBの左側をつなぐことでノードAの出力をノードBに入力することを表現する。ワイヤーＦ３２２の接続元が出力に対応し接続先（ワイヤーの両端のうち矢印を持つ方の端）が入力に対応する。
【００２７】
そしてビジュアルプログラミングツール３００は、こうして表現されるフローに含まれるノードの処理をビジュアルプログラミングツール３００内で実行、または外部の処理サーバにデプロイしフローによって表現される処理を実行するアプリケーションを実行可能とする。またはフローをもとに計算機上で実行可能なバイナリオブジェクトを生成してもよい。こうした機能を提供するためビジュアルプログラミングツール３００は、これら処理を実行する実行ボタンやデプロイボタン、またはバイナリ作成ボタンを有していてもよい。フローの実行、デプロイ、及び、バイナリオブジェクト作成といった処理は、「フローの確定」と総称することができる。
【００２８】
このような構成において、アプリケーション開発者（ユーザの一例）はビジュアルプログラミングツール３００を用いて、ノード間の接続を付け替えつつアプリケーションを開発する。例えば、図１の例は、データを分析し、何らかの判断をするアプリケーションを開発している様子を示す。一覧表示部Ｆ３１０には、例えば、データの前処理（Cleansing）、分析処理（Analysis）のカテゴリのノードがあることを示している。例えばこれ以外にも、データのインプットや、アウトプットのカテゴリがあってもよい。
【００２９】
また、フロー編集部Ｆ３２０に示されるフローは、例えば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、各々の接続は入出力の仕様は適合しており、静的には異常ではない。また、データ次第では分析処理も正しく終了する可能性がある。しかしながら、正しいデータが分析処理に入力されなくなるため、適切な分析結果を得ることができないこととなる。図１に例示するフローでは、ある１箇所のノード間の接続変更に伴って、変更する必要のある別のノード間の接続は１箇所のみであるが、実際の大量ノードからなるフローでは複数箇所の変更が必要となる場合がある。その場合では、アプリケーション開発者が誤ったノードに接続したフローとしてしまうことに気付けない場合がある。
【００３１】
本実施形態では、開発者の負荷を緩和すること、別の言い方をすれば、ノード間の接続変更を正しく行うことの確実性を向上することができる。具体的には、接続関係管理サーバ１００が、確定したフローの履歴をもとに適切なノードの組み合わせを分析し、その分析結果をもとに、ノード間の接続変更の操作時に、当該操作に従う接続変更が誤っている可能性が高い場合には当該接続変更が正しいことを開発者に確認させるためにアラートを提示すること（Ｆ３２３）や、当該接続変更の操作が確定された際に、併せて変更する可能性の高いノード間接続を提示すること（Ｆ３２４）、といったようなnotificationを行う。
【００３２】
以下、本実施形態を詳細に説明する。なお、以下の説明では、或るフローに関して試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、変更操作（例えばワイヤーの付替えのための操作）及び確定操作（例えば変更後のフローの実行のための操作）の都度に、当該或るフローについて新たなバージョンのフロー（変更後の確定したフロー）が生じることとなる。そこで、説明の混同を避けるために、各バージョンのフローを「フロー」と言う。バージョンが異なる複数のフローが属する共通の対象を「ベースフロー」（或いは「フロー群」）と言うことができる。
【００３３】
（２）システムの構成
【００３４】
図２は、本実施形態にかかる計算機システムの構成図である。
【００３５】
計算機システムでは、接続関係管理サーバ１００と、レポジトリ管理サーバ２００と、１または複数のビジュアルプログラミングツール３００がネットワーク５００を介して通信する。これらサーバおよびツールは、それぞれがＣＰＵやメモリ、ハードディスクなどからなる計算機で動作する。その動作形態は、それぞれ物理的に異なる計算機上で動作していてもよいし、仮想サーバと呼ばれる物理的な計算機を論理的に分割された計算機の単位で動作していてもよい。もしくは１台の計算機または複数の計算機クラスタ上で実行されるタスク（プロセスやコンテナとも呼ばれる）単位であってもよい。
【００３６】
ビジュアルプログラミングツール３００を用いたフロー作成が接続関係管理サーバ１００により支援される。ビジュアルプログラミングツール３００は、入出力コンソールとしての計算機（例えばクライアント端末）で実行されてもよいし、入出力コンソール（本実施例では入力装置１０４及び表示装置１０５）と通信可能な接続関係管理サーバ１００で実行されてもよい。ビジュアルプログラミングツール３００は、描画プログラム３１０、フロー実行プログラム３２０及びフロー管理プログラム３３０を有し、フローの構成情報であるフローデータ４００を管理する。
【００３７】
フロー編集画面というＧＵＩ（Ｆ３１０、Ｆ３２０などを含んだ画面）を表示するための描画プログラム３１０、フローの構成情報であるフローデータ４００、そのほかフロー実行プログラム３２０やフロー管理プログラム３３０、などを有する。描画プログラム３１０の表示（出力）方法としては、同ツール３００が動作する計算機上もしくはこの計算機に接続した別クライアント上で動作するウェブブラウザをＵＩクライアントとしたＷｅｂアプリとして動作してもよい。またはビジュアルプログラミングツール３００が動作する計算機がディスプレイなどの出力装置を備える場合には同ディスプレイにＵＩを表示するデスクトップアプリとして用いられてもよい。
【００３８】
フロー実行プログラム３２０は、フローデータに記述された処理を実行するものである。実行方法は、例えば、同プログラム３２０自身が同ツール内で個々のノードに対応する処理を行いノード間の情報を中継するようなものであってもよいし、各ノードの処理をツール外部に構築しそれを呼び出すことで実現するようなものであってもよい。もしくは同プログラム３２０の代わりに、計算機上で実行可能なバイナリを生成するようなものであってもよい。フローデータ４００の例は図３を用いて説明する。
【００３９】
フロー管理プログラム３３０は、ビジュアルプログラミングツール３００のフロー管理を行うプログラムであり、レポジトリ管理サーバ２００とフローデータの送受信を行うためのインターフェース等を提供するプログラムである。
【００４０】
加えてビジュアルプログラミングツール３００またはこれを構成する各プログラムのうちいずれかが、レポジトリ管理サーバ２００からのフローデータ取得や、同サーバ２００へのフローデータ格納を実行するボタンを備えていてもよい。
【００４１】
またビジュアルプログラミングツール３００は、複数の開発者が並行して利用されてもよい。その利用形態は開発者ごとに個々のツールが提供される形であってもよいし、１つのツールの中に、個々の開発者用の描画プログラム、フローデータ、フロー実行プログラムほかが実行されるような形であってもよい。
【００４２】
レポジトリ管理サーバ２００は、各開発者のフローデータなどの各種ソースコードをバージョン管理するためのレポジトリと、これを管理するためのレポジトリ管理プログラム２１０からなる。レポジトリ管理プログラム２１０は、一般的なレポジトリ管理ソフトウェアが提供する機能を有するものでよく、例えば開発したアプリケーションのソースコード（フローデータ）管理（登録・変更・削除等）や、同レポジトリを利用する開発者の管理、またはプロジェクト管理情報変更時の外部への通知を行うための機能が含まれる。
【００４３】
接続関係管理サーバ１００は、ＣＰＵ（Central Processing Unit）１１１、メモリ１１２、ネットワークインターフェース１１３、及びI/Oインターフェース１１４を有する。これらのハードウェアは、内部バス（図示しない）を介して互いに接続される。ＣＰＵ１１１は、プロセッサ部の一例であり、メモリ１１２は、記憶部の一例であり、ネットワークインターフェース１１３及びI/Oインターフェース１１４は、インターフェース部の一例である。
【００４４】
ＣＰＵ１１１は、メモリ１１２に格納される一つ以上のプログラムを実行する。
【００４５】
メモリ１１２は、ＣＰＵ１１１が実行する一つ以上のプログラム、及び、当該一つ以上のプログラムの実行において参照又は更新される複数のテーブルを格納する。プログラムとして、例えば、レポジトリ管理サーバ２００に記録されたフロー（フローデータ）の各バージョンの情報をもとにノード間接続関係を分析するフロー分析プログラム１１０と、その結果をもとにノード間の接続が変更された場合に影響を分析する変更影響判断プログラム１２０とがある。テーブルとして、例えば、フロー実行履歴テーブルＴ１００と、変更箇所テーブルＴ２００と、クラスタ化ルールテーブルＴ３００と、同時発生履歴テーブルＴ４００と、変更影響テーブルＴ５００とがある。各プログラムの処理およびテーブルの詳細については後述する。なお各プログラムやテーブルの配置は図２が示す例に限定されない。例えば、接続関係管理サーバ１００に含まれる各プログラムとテーブルは、ビジュアルプログラミングツール３００に含まれていてもよい。
【００４６】
ネットワークインターフェース１１３は、IPネットワークのようなネットワーク５００を介して外部の装置と通信するためのインターフェースである。I/Oインターフェース１１４は、入力装置１０４及び表示装置１０５と接続するインターフェースである。なお、I/Oインターフェース１１４は、USBメモリ及び外部ストレージ装置等、外部の記憶媒体に接続してもよい。
【００４７】
入力装置１０４は、接続関係管理サーバ１００にデータを入力するための装置（例えば、キーボード、マウス、及びタッチパネル等）である。表示装置１０５は、接続関係管理サーバ１００の処理結果等を表示するための装置（例えば、ディスプレイ及びタッチパネル等）である。
【００４８】
（３）各種データ及びテーブルの内容
【００４９】
図３は、フローデータ４００の一例を示す。
【００５０】
フローデータ４００の表現の一例としては、ＪＳＯＮと呼ばれるデータ形式のファイルである。このほかＸＭＬやＹＡＭＬなど他のデータ構造であってもよい。また、フローデータ４００は、ファイル以外のデータでもよい。
【００５１】
フローデータ４００には、ノードごとに、ノードをフロー上で一意に識別するための識別子を示すＮｏｄｅＩＤ  ４１０、ノードの種別（オブジェクト指向でのクラスに相当）を示すＮｏｄｅＴｙｐｅ  ４２０、ノードの分類を示すＣａｔｅｇｏｒｙ  ４３０、フロー編集部Ｆ３２０でのノードの表示名であるＮｏｄｅＮａｍｅ  ４４０、フロー編集部Ｆ３２０での表示位置を示す座標４５０、ノード間の接続関係を示すｗｉｒｅｓ  ４６０、処理の内容を示すｆｕｎｃｔｉｏｎ４６０などが含まれる。ｗｉｒｅｓ  ４６０には、ワイヤーが接続している先の出力端子を持つノードのＮｏｄｅＩｄのリストが含まれる。なお座標４５０の基になる座標空間は３次元以上であってもよい。すなわち高さや、ＵＩ（ユーザインターフェース）がタブ分けされている場合はタブのｉｎｄｅｘ情報を含んでいてもよい。
【００５２】
また、上記以外にも、例えば、外部のサービスに処理を依頼するために必要な情報であるＵＲＬやパラメータ、外部コマンドを実行するためのコマンド名や引数、及び、当該フローデータ４００が示すフローのバージョンＩＤ（リビジョンＩＤ）といった他種の情報をフローデータ４００が含んでもよい。
【００５３】
図４は、フロー実行履歴テーブルＴ１００の例を示す。
【００５４】
フロー実行履歴テーブルＴ１００は、フローがある程度開発の区切りをつけたバージョンの情報を記録するテーブルである。本実施形態では、そのタイミングとしてフローが確定したときの例を示している。
【００５５】
フロー実行履歴テーブルＴ１００は、確定したフロー毎にエントリを有する。各エントリは、ＵＲＬ  Ｔ１１０と、フローデータＴ１２０と、確定時刻Ｔ１３０と、リビジョンＩＤ  Ｔ１４０といった情報を保持する。以下、一つのフローを例に取る（図４の説明において「注目フロー」）。
【００５６】
ＵＲＬ  Ｔ１１０は、注目フローを表現したフローデータ４００が管理されているレポジトリを特定するためのＩＤを示す。フローデータＴ１２０は、注目フローが属するベースフローのファイル名を示す（ファイル名に代えて又は加えて、ベースフローを特定可能な他種の情報が採用されてもよい）。また、リビジョンＩＤ  Ｔ１４０は、レポジトリ管理サーバ２００上のレポジトリに記録されているバージョン（当該フローデータ４００のバージョン）を指すＩＤであるバージョンＩＤ（リビジョンＩＤ）を示す。具体的には、例えば、リビジョンＩＤは、GitやSubversion等、Version control systemのコミットＩＤであってよい。これを保持する理由は、開発者は自分の区切りでコミットを行う可能性があり、レポジトリに記録されているすべてのバージョンのフローが必ずしも適切なノード間の接続となっていない可能性があるためである。本実施形態では、ファイル名とバージョンＩＤ（リビジョンＩＤ）との組合せから、フローを特定することができる。
【００５７】
図５は、変更箇所テーブルＴ２００の例を示す。
【００５８】
変更箇所テーブルＴ２００は、フロー実行履歴テーブルＴ１００に記録された各リビジョンＩＤ  Ｔ１４０について、当該リビジョンＩＤ  Ｔ１４０から特定されるフロー（変更後のフロー）と、当該フローの一つ前のバージョンが示すフロー（変更前のフロー）との差分を示す情報を保持するテーブルである。
【００５９】
変更箇所テーブルＴ２００は、確定したフロー毎にエントリを有する。各エントリは、フローデータＴ２１０と、リビジョンＩＤ  Ｔ２２０と、ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０と、ＴｏＢｅｆｏｒｅ  Ｔ２４０と、ＦｒｏｍＡｆｔｅｒ  Ｔ２５０と、ＴｏＡｆｔｅｒ  Ｔ２６０といった情報を保持する。以下、一つのフローを例に取る（図５の説明において「注目フロー」）。
【００６０】
ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０とＴｏＢｅｆｏｒｅ  Ｔ２４０は、注目フローにおいて、ノード間接続の変更箇所毎に、変更操作実施前のノード間接続における接続元ノード（Start側ノード）のＩＤと、接続先ノード（End側ノード）のＩＤとを示す。同様に、ＦｒｏｍｅＡｆｔｅｒ  Ｔ２５０とＴｏＡｆｔｅｒ  Ｔ２６０は、注目フローにおいて、ノード間接続の変更箇所毎に、変更操作実施後のノード間接続における接続元ノードのＩＤと接続先ノードのＩＤとを示す。ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０とＴｏＢｅｆｏｒｅ  Ｔ２４０と、ＦｒｏｍｅＡｆｔｅｒ  Ｔ２５０とＴｏＡｆｔｅｒ  Ｔ２６０との組は、変更前と変更後の関係を意味する。
【００６１】
図６は、クラスタ化ルールテーブルＴ３００の例を示す。
【００６２】
クラスタ化管理テーブルＴ３００は、フローに含まれる複数のノードが分類された二つ以上のクラスタの各々に関する情報を記録するテーブルである。ここで、「クラスタ」とは、一つのノード、または、ワイヤーで接続された一つ以上のノード群である。
【００６３】
クラスタ化ルールテーブルＴ３００は、確定したフロー毎にエントリを有する。各エントリは、フローデータＴ３１０と、リビジョンＩＤ  Ｔ３２０と、クラスタＩＤ  Ｔ３３０と、始端ノードＴ３４０と、終端ノードＴ３５０と、前方クラスタＩＤ  Ｔ３６０と、後方クラスタＩＤ  Ｔ３７０といった情報を保持する。以下、一つのクラスタを例に取る（図６の説明において「注目クラスタ」）。
【００６４】
フローデータＴ３１０は、注目クラスタを含んだフローが属するベースフローのファイル名を示す。リビジョンＩＤ  Ｔ３２０は、注目クラスタを含んだフローに対応したバージョンＩＤを示す。クラスタＩＤ  Ｔ３３０は、注目クラスタを識別するＩＤを示す。
【００６５】
始端ノードＴ３４０は、注目クラスタにおける始端ノード（当該ノードの入力側にワイヤーが接続されていないか、或いは、注目クラスタ外のノードの出力側とワイヤー経由で接続されているノード）のノードＩＤを示す。終端ノードＴ３５０は、注目クラスタにおける終端ノード（当該ノードの出力側にワイヤーが接続されていないか、或いは、注目クラスタ外のノードの入力側とワイヤー経由で接続されているノード）のノードＩＤを示す。
【００６６】
前方クラスタＩＤ  Ｔ３６０は、注目クラスタにおける始端のノードと接続しているノードを含むクラスタのＩＤを示す。後方クラスタＩＤ  Ｔ３７０は、注目クラスタにおける終端ノードと接続しているノードを含むクラスタのＩＤを示す。すなわち、クラスタ化ルールテーブルＴ３００は、各フローについて、複数のノード間接続に加えて、一つ以上のクラスタ間接続を示す。
【００６７】
図７は、同時発生履歴テーブルＴ４００の例を示す。
【００６８】
同時発生履歴テーブルＴ４００は、複数のクラスタの共起関係に関する情報を記録するためのテーブルである。
【００６９】
同時発生履歴テーブルＴ４００は、クラスタ群ペア毎にエントリを有する。各エントリは、フローデータＴ４１０と、クラスタ間接続１  Ｔ４２０と、クラスタ間接続２  Ｔ４３０と、リビジョンＩＤ  Ｔ４４０と、獲得点数Ｔ４５０といった情報を保持する。以下、一つのクラスタ群ペアを例に取る（図７の説明において「注目クラスタ群ペア」）。なお、「クラスタ群」とは、一方のクラスタにおける終端ノードに他方のクラスタにおける始端ノードが一つのワイヤー経由で接続された二つのクラスタの集合である。このため、クラスタ群は、クラスタペアと呼ばれてもよい。「クラスタ群ペア」とは、クラスタ群の組である。本実施形態では、同時発生履歴テーブルＴ４００は、クラスタ群に関する２−組み合わせに含まれるクラスタ群ペアを保持する。
【００７０】
クラスタ間接続１  Ｔ４２０とクラスタ間接続２  Ｔ４３０は、注目クラスタ群ペアを構成する一方のクラスタ群と他方のクラスタ群とを示す。クラスタ群のデータ形式の一例が“（１，３）”である。これは、当該クラスタ群が、ＩＤ＝１のクラスタからＩＤ＝３のクラスタへの接続である（ＩＤ＝１のクラスタにおける終端ノード）とＩＤ＝３のクラスタにおける始端ノードとがワイヤー経由で接続されている）ことを示している。
【００７１】
また、獲得点数Ｔ４５０は、注目クラスタ群ペアに関し、各変更後フローについて、当該変更後フローにおける変更箇所（ノード間接続の変更箇所）と注目クラスタ群ペアとの関係性に応じて決定されたスコア、具体的には、注目クラスタ群ペアが同一フロー（同一リビジョンのフロー）に含まれる度合いを示す。例えば、注目クラスタ群ペアに含まれるすべてのクラスタ群の接続箇所がフローの変更箇所でない場合は、フロー分析プログラム１１０は、注目クラスタ群ペアは、ノード間接続変更によってクラスタ群が互いに与える影響が不明であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数Ｔ４５０として“０”を付与する。同一フロー（同一リビジョン）に注目クラスタ群ペアが含まれる場合は、フロー分析プログラム１１０は、同時に利用される接続関係であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数Ｔ４５０として“＋１０”を付与する。逆に、同一フローに注目クラスタ群ペアが含まれない場合は、フロー分析プログラム１１０は、同一フローで同時に利用されることの少ない接続関係であると判断し、注目クラスタ群ペアについて、当該フローに関し、獲得点数Ｔ４５０として“−１０”を付与する。
【００７２】
図８は、変更影響テーブルＴ５００の例を示す。
【００７３】
変更影響テーブルＴ５００は、開発者によって行われたノード間接続変更操作後のフローに含まれる同時に利用される度合いの低いノード間の接続を示す情報を保持するテーブルである。
【００７４】
変更影響テーブルＴ５００は、変更操作毎にエントリを有する。一つの変更操作を例に取ると次の通りである（図８の説明において「注目変更操作」）。すなわち、各エントリは、注目変更操作のＩＤを示す変更操作ＩＤ  Ｔ５１０と、注目変更操作が行われた時刻を示す時刻Ｔ５２０と、注目変更操作がされるフローのベースフローのファイル名を示すフローデータＴ５３０と、注目変更操作前のノード間接続を示す変更前ノード間接続Ｔ５４０と、注目変更操作後のノード間接続を示す変更後ノード間接続Ｔ５５０と、注目変更操作後のクラスタ間接続（変更後クラスタペア）を示す変更後クラスタペアＴ５６０と、変更後クラスタペアと同時に利用される可能性の低いクラスタ間接続（不適切クラスタペア）を示す不適切クラスタペアＴ５７０と、不適切クラスタペアの接続界面であるノード間接続を示す不適切ノード間接続Ｔ５８０と、変更後クラスタペアと不適切クラスタペアが同時に発生する度合い（同時発生度）を示す同時発生度Ｔ５７０といった情報を保持する。
【００７５】
変更前ノート間接続Ｔ５４０は、例えば、“（Node4、Node5）”といったデータ形式で記録され、これはNode4からNode5への接続（Node4が始端ノードでありNode5が終端ノードであること）を示す。変更後ノード間接続Ｔ５５０としての値の表現形式も変更前ノート間接続Ｔ５４０のデータ形式と同様である。
【００７６】
また、変更後クラスタペアＴ５６０は、変更後ノード間接続Ｔ５５０の箇所に対応するクラスタ間接続（変更後ノード間接続Ｔ５５０が示す二つのノードを含んだクラスタ間接続）を示す。変更後クラスタペアＴ５６０は、例えば、“（４，６）”といったデータ形式で記録され、これはＩＤ＝４とＩＤ＝６のクラスタが接続していること（ＩＤ＝４のクラスタが始端側でありＩＤ＝６のクラスタが終端側であること）を示す。
【００７７】
また、同時発生度Ｔ５９０は、変更後クラスタペアがクラスタ間接続１  Ｔ４２０に一致し、不適切クラスタペアがクラスタ間接続２  Ｔ４３０に一致する場合と、変更後クラスタペアがクラスタ間接続２  Ｔ４３０に一致し、不適切クラスタペアがクラスタ間接続１  Ｔ４２０に一致する場合の獲得点数Ｔ４５０の合計値を示す。
【００７８】
実線枠８２０は、点線枠８１０の詳細を示す。吹き出し８２０によれば、ＩＤ＝３のクラスタとＩＤ＝４のクラスタ同士の接続が、注目変更操作の前後で影響の無いクラスタ間接続（変更操作が正しいか否かにおいて影響の無いクラスタ間接続）に相当する。また、ＩＤ＝２のノードは、不適切クラスタペアにおける始端側のクラスタ（ＩＤ＝２のクラスタ）における終端ノードであり、ＩＤ＝３のノードは、不適切クラスタペアにおける終端側のクラスタ（ＩＤ＝３のクラスタ）における始端ノードであり、このノード間接続（ＩＤ＝２のノードからＩＤ＝３のノードへの接続）が、不適切ノード間接続（不適切クラスタペアの接続界面）に該当する。
【００７９】
（４）処理流れ
【００８０】
図９は、フロー分析処理の流れを示す。
【００８１】
フロー分析プログラム１１０は、ビジュアルプログラミングツール３００でのフローの確定を検知（Ｓ１０００）し、確定されたフローを取得する（Ｓ１０１０）。
【００８２】
フローの確定を検知する方法としては、フロー分析プログラム１１０が定期的にビジュアルプログラミングツール３００を監視することにより確定を検知する方法でもよい。または、事前にビジュアルプログラミングツール３００に、フローの確定が行われた際に接続関係管理サーバ１００に通知する設定を行っておき、ビジュアルプログラミングツール３００がフローの確定を接続関係管理サーバ１００に通知する方法であってもよい。
【００８３】
また、Ｓ１０１０で取得するフローは、図３に例示する形式（ＪＳＯＮ形式）のフローデータが示すフローであってもよいし、レポジトリ管理サーバ２００上のレポジトリのアクセス先情報（ＵＲＬ等）とリビジョン番号から特定されるフローであってもよい。例えば、ビジュアルプログラミングツール３００が、フロー確定時にフローの状態を保存するためにレポジトリ管理サーバ２００上のレポジトリにコミットする機能を有している場合には、その際のリビジョン番号を取得すればよい。そうでない場合は、例えば接続関係管理サーバ１００がレポジトリ管理サーバ上に自身の処理用のレポジトリを生成し、フローデータを取得した際にそのレポジトリにコミットする等の処理を行ってもよい。
【００８４】
フロー分析プログラム１１０は、Ｓ１０１０の後、取得したフローに関する情報（例えば時刻Ｔ１３０及びリビジョンＩＤ  Ｔ１４０）をフロー実行履歴テーブルＴ１００に保存する。
【００８５】
次に、フロー分析プログラム１１０は、フロー実行履歴テーブルＴ１００からＳ１０１０で取得したフローに対して、一つ前のリビジョンのフローを取得する（Ｓ１０２０）。以降、便宜的にＳ１０１０で取得したフローを「今回フロー」と呼称し、Ｓ１０２０で取得したフローを「前回フロー」と呼称する。
【００８６】
そして、フロー分析プログラム１１０は、両フローを入力として変更抽出処理を実行する（Ｓ１０３０）。変更抽出処理は、今回フローと前回フローの差分を分析し、前回実行時から今回実行時までの間にノード間の接続が付け替えられた箇所を特定し、その上で、変更箇所テーブルＴ２００に当該特定された箇所を記録する処理である。変更抽出処理の詳細は図１０を用いて後述する。
【００８７】
次に、フロー分析プログラム１１０は、クラスタ抽出処理を実行する（Ｓ１０４０）。クラスタ抽出処理は、Ｓ１０３０で特定したノード間接続変更箇所の情報を加味し、今回フロー及び前回フローをクラスタに分割し、その上で、クラスタ化ルールテーブルＴ３００を更新する処理である。クラスタ抽出処理の詳細は図１１を用いて後述する。
【００８８】
そして、フロー分析プログラム１１０は、Ｓ１０４０で更新後のクラスタ化ルールテーブルＴ３００を用いて、前回フローと今回フロー内のノード間接続に該当するクラスタを特定し（Ｓ１０５０）、クラスタのペア（２−組み合わせ）を生成する（Ｓ１０６０）。図６で例示したクラスタ化ルールテーブルＴ３００に従うと、フローは全体がＩＤ＝１のクラスタに置き換えられる場合と、ＩＤ＝２からＩＤ＝６までのクラスタに置き換えられる場合のパタンがある。
【００８９】
次に、フロー分析プログラム１１０は、Ｓ１０６０で取得したクラスタペア（クラスタ群）の集合に対して、さらに２−組み合わせを生成し（つまり、クラスタ群ペアを生成し）、各クラスタ群ペアに対してＳ１０８０からＳ１１２０までの処理を行う（Ｓ１０７０）。ここでのクラスタペアはフローに含まれるノード間接続の内、過去に複数ノード間で付け替えがなされたことのある接続を意味しており、クラスタ群ペアは、クラスタ（ノード間接続）の組が二つあることを意味する。フロー分析プログラム１１０は、以降に述べるＳ１０８０からＳ１１２０までの処理により、選択した二つのノード間接続が同時に利用されやすいか否かを判断する。以下、一つのクラスタ群ペアを例に取る（図９の説明において「注目クラスタ群ペア」）。
【００９０】
まず、フロー分析プログラム１１０は、注目クラスタ群ペアが前回実行から今回実行までの間に行われたノード間接続の変更箇所であるか否かを判断する（Ｓ１０８０）。具体的には、フロー分析プログラム１１０は、変更箇所テーブルＴ２００を参照し、今回フローに対応したいずれかのＦｒｏｍＡｆｔｅｒ  Ｔ２５０とＴｏＡｆｔｅｒ  Ｔ２６０との組が示すノード間接続を構成する二つのノードが、注目クラスタ群ペアに含まれるか、否かを判断する。
【００９１】
Ｓ１０８０の判断結果がＮｏであった場合、注目クラスタ群ペアは今回フローの開発で行われたノード間接続の変更箇所ではなかったため、フロー分析プログラム１１０は、注目クラスタ群ペア及び今回フローに対応した獲得点数Ｔ４５０として“０”を記録する（Ｓ１１３０）。
【００９２】
Ｓ１０８０の判断結果がＹｅｓであった場合、フロー分析プログラム１１０は、注目クラスタ群ペアが前回フローに含まれるか、否かを判断する（Ｓ１０９０）。Ｓ１０９０の判断結果がＹｅｓの場合、フロー分析プログラム１１０は、注目クラスタ群ペアが同時に利用される可能性が高いと判断する、具体的には、注目クラスタ群ペア及び今回フローに対応した獲得点数Ｔ４５０として“＋１０”（加点の一例）を同時発生履歴テーブルＴ４００に記録する（Ｓ１１１０）。一方、Ｓ１０９０の判断結果がＮｏの場合、フロー分析プログラム１１０は、注目クラスタ群ペアが今回フローに含まれるか、否かを判断する（Ｓ１１００）。Ｓ１１００判断結果がＹｅｓの場合、フロー分析プログラム１１０は、注目クラスタ群ペアが同時に利用される可能性が高いと判断する、つまり、Ｓ１１１０を実施する。
【００９３】
一方、Ｓ１１００の判断結果がＮｏの場合、フロー分析プログラム１１０は、注目クラスタ群ペアが同時に利用される可能性が低いと判断する、具体的には、注目クラスタ群ペア及び今回フローに対応した獲得点数Ｔ４５０として“−１０”（減点の一例）を同時発生履歴テーブルＴ４００に記録する（Ｓ１１２０）。
【００９４】
図１０は、変更抽出処理（図９のＳ１０３０）の流れを示す。
【００９５】
フロー分析プログラム１１０は、今回フローに含まれる各ノードに対してＳ２０２０からＳ２０８０までの処理を実施する（Ｓ２０１０）。Ｓ２０２０からＳ２０８０までの処理では、今回フローと前回フローに共通するノードについて、前回と今回で接続関係が変化しているか、否かを判断することが実施される。以下、一つのノードを例に取る（図１０の説明において「注目ノード」）。
【００９６】
フロー分析プログラム１１０は、注目ノードが前回フローに含まれているか、否かを判断する（Ｓ２０２０）。Ｓ２０２０の判断結果がＮｏの場合、注目ノードは、新規に追加されたノードであるため、フロー分析プログラム１１０は、Ｓ２０３０以降を行わない。
【００９７】
Ｓ２０２０の判断結果がＹｅｓの場合、フロー分析プログラム１１０は、注目ノードの前方のノード間接続が付け替えられているか、否かを判断する。具体的には、まず、フロー分析プログラム１１０は、注目ノードの前方にワイヤーが接続されているか、否かを判断する（Ｓ２０３０）。Ｓ２０３０の判断結果がＮｏの場合、今回フローではワイヤーが別のノードに付け替えられた可能性があるため、フロー分析プログラム１１０は、注目ノードが前回フローで前方（始端側）に接続していたノードを特定し、当該特定されたノードに対して今回フローでは注目ノード以外のノードが後方（終端側）に接続しているか、否かを判断する。仮に、以下のいずれかの場合、Ｓ２０４０の判断結果はＮｏである。
・前回フローでも注目ノードの前方にノードが接続されていなかった場合。
・前回フローで注目ノードの前方に接続されていたノードが、今回フローに含まれていない場合。
・前回フローで注目ノードの前方に接続されていたノードに対して、今回フローでは後方にノードが接続されていない場合。
【００９８】
Ｓ２０４０の判断結果がＹｅｓの場合、フロー分析プログラム１１０は、前方の付け替えを変更箇所テーブルＴ２００に記録する（Ｓ２０５０）。例えば、注目ノードが“Node-A”、前回フローで注目ノードの前方に接続されていたノードが“Node-B”、今回フローで“Node-B”の後方に接続されているノードが“Node-C”である場合に、フロー分析プログラム１１０は、変更箇所テーブルＴ２００に対して、ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０“Node-B”、ＴｏＢｅｆｏｒｅ  Ｔ２４０“Node-A”、ＦｒｏｍＡｆｔｅｒ  Ｔ２５０“Node-B”、及び、ＴｏＡｆｔｅｒ  Ｔ２６０“Node-C”を含んだエントリを追加する。
【００９９】
Ｓ２０３０の判断結果がＹｅｓ、又は、Ｓ２０４０の判断結果がＮｏの場合は、注目ノードの前方に接続されているノードに対して付け替えは行われていないため、Ｓ２０６０以降が行われる。
【０１００】
Ｓ２０６０からＳ２０８０では、フロー分析プログラム１１０は、注目ノードの後方の接続に関して、ノード間接続の付け替えが行われているか、否かを判断する。具体的には、まず、フロー分析プログラム１１０は、今回フローでは、注目ノードの後方にワイヤーが接続されているか、否かを判断する（Ｓ２０６０）。Ｓ２０６０の判断結果がＮｏの場合、今回フローではワイヤーが別のノードに付け替えられた可能性があるため、フロー分析プログラム１１０は、注目ノードが前回フローで後方に接続していたノードを特定し、当該特定されたノードに対して、今回フローでは注目ノード以外のノードが前方に接続されているか、否かを判断する（Ｓ２０７０）。仮に、以下のいずれかの場合、Ｓ２０７０の判断結果はＮｏである。
・前回フローでも注目ノードの後方にノードが接続されていなかった場合。
・前回フローで注目ノードの後方に接続されていたノードが、今回フローに含まれていない場合。
・前回フローで注目ノードの後方に接続されていたノードに対して、今回フローでは前方にノードが接続されていない場合。
【０１０１】
Ｓ２０７０の判断結果がＹｅｓの場合、フロー分析プログラム１１０は、後方の付け替えを変更箇所テーブルＴ２００に記録する（Ｓ２０８０）。例えば、注目したノードが“Node-A”、前回フローで後方に接続していたノードが“Node-B”、今回フローで“Node-B”の前方に接続しているノードが“Node-C”である場合に、フロー分析プログラム１１０は、変更箇所テーブルＴ２００に対して、ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０“Node-A”、ＴｏＢｅｆｏｒｅ  Ｔ２４０“Node-B”、ＦｒｏｍＡｆｔｅｒ  Ｔ２５０“Node-C”、及び、ＴｏＡｆｔｅｒ  Ｔ２６０“Node-B”を含んだエントリを追加する。
【０１０２】
Ｓ２０６０の判断結果がＹｅｓ、又は、Ｓ２０７０の判断結果がＮｏの場合は、注目ノードの後方に接続されているノードに対して付け替えは行われていないため、注目ノードについて処理が終了する。
【０１０３】
図１１は、クラスタ抽出処理（図９のＳ１０４０）の流れを示す。
【０１０４】
フロー分析プログラム１１０は、変更箇所テーブルＴ２００を参照し、今回フローに対応した全ての変更前セット（ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０とＴｏＢｅｆｏｒｅ  Ｔ２４０との組）と全ての変更後セット（ＦｒｏｍＡｆｔｅｒ  Ｔ２５０とＴｏＡｆｔｅｒ  Ｔ２６０との組）を取得する（Ｓ３０１０）。
【０１０５】
次に、フロー分析プログラム１１０は、Ｓ３０１０で取得したノード間接続の変更箇所（ＦｒｏｍＡｆｔｅｒ  Ｔ２５０とＴｏＡｆｔｅｒ  Ｔ２６０）を断面として、今回フローを分割した部分フローを取得する。また、同様にノード間接続の変更箇所の情報（ＦｒｏｍＢｅｆｏｒｅ  Ｔ２３０とＴｏＢｅｆｏｒｅ  Ｔ２４０）を断面として、前回フローを分割した部分フローを取得する（Ｓ３０２０）。
【０１０６】
そして、フロー分析プログラム１１０は、Ｓ３０２０で取得した各部分フローについて、Ｓ３０４０、Ｓ３０５０の処理を実行し、各クラスタをクラスタ化ルールテーブルＴ３００に登録する（Ｓ３０３０）。各部分フローについて、当該部分フローから特定された各クラスタを登録する理由は、Ｓ３０２０で取得された各部分フローは、ノード間接続が変更されておらず、前回実行時から構造が変化していない部分であり、試行錯誤を行う際にある程度のまとまった機能を保持する単位であると考えられるためである。以下、一つの部分フローを例に取る（図１１の説明において「注目部分フロー」）。
【０１０７】
フロー分析プログラム１１０は、注目部分フローに存在するクラスタをクラスタ化ルールテーブルＴ３００や、レポジトリ管理サーバ２００が保持する情報をもとに特定する（Ｓ３０４０）。特定の方法は、例えば以下の方法がある。まず、フロー分析プログラム１１０は、今回フローのベースフローとフローデータＴ３１０が同値である各エントリについて、フローデータＴ３１０とリビジョンＩＤ  Ｔ３１０、及びフロー実行履歴テーブルＴ１００のＵＲＬ  Ｔ１１０の情報より、当該フローデータの過去のバージョンのデータを取得する。次に、フロー分析プログラム１１０は、始端ノードＴ３４０と終端ノードＴ３５０より、取得したフローデータより、部分フローを取得する。フロー分析プログラム１１０は、取得した部分フローと、注目部分フローとを比較し、部分フローの組成の差分が、任意の閾値以下であるかを判断し、閾値を下回っている場合には同一のクラスタと判断する。例えば、組成の差分とは、二つの部分フローが含む同一ノードの割合である。または、例えば、組成の差分とは、ノード間の接続関係までを加味した尺度（例えば当該の部分フローを構築するために必要な最低限の操作（ノードの追加、ワイヤーの追加）のうち、同一操作の割合）であってもよい。
【０１０８】
次に、フロー分析プログラム１１０は、クラスタ化ルールテーブルＴ３００を更新する（Ｓ３０５０）。具体的には、フロー分析プログラム１１０は、クラスタ化ルールテーブルＴ３００の内、注目部分フローが属するフローデータとリビジョン（今回フローか、前回フローか）に対応するエントリを特定する。Ｓ３０４０で注目部分フローに対応する一つ以上のクラスタを特定した場合には、フロー分析プログラム１１０は、特定した各クラスタのＩＤをクラスタＩＤ  Ｔ３３０に指定して、クラスタ化ルールテーブルＴ３００に、注目部分フローの情報（始端ノードＴ３４０及び終端ノードＴ３５０）を追加する。一方で、Ｓ３０４０で特定されたクラスタが無かった場合には、フロー分析プログラム１１０は、新規のクラスタＩＤを採番し、同様にクラスタ化ルールテーブルＴ３００に、注目部分フローの情報を追加する。
【０１０９】
フロー分析プログラム１１０は、すべての部分フローについてＳ３０３０からＳ３０５０までの処理を終えると、Ｓ３０４０で特定した各クラスタについて、フローデータのノード間の接続関係をもとに、クラスタ間の接続関係を特定し、Ｓ３０５０でクラスタ化ルールテーブルＴ３００に追加したエントリに対して、前方クラスタＩＤ  Ｔ３６０と後方クラスタＩＤ  Ｔ３７０を追記する（Ｓ３０６０）。
【０１１０】
図１２は、変更影響判断プログラム１２０が動作する際の、ビジュアルプログラミングツール３００の画面を通して開発者（ユーザの一例）６００と、ビジュアルプログラミングツール３００と、接続関係管理サーバ１００の間のやり取りを示す。なお、このとき接続関係管理サーバ１００で動作し、ビジュアルプログラミングツール３００とやり取りするプログラムは変更影響判断プログラム１２０であり、以降の図１２に対する説明で接続関係管理サーバ１００を主語や目的語とする場合は、主語や目的語を変更影響判断プログラム１２０に置き換えてもよい。
【０１１１】
まず、開発者６００がビジュアルプログラミングツール３００上のフロー編集部Ｆ３２０で、すでに両端が接続されているワイヤーを異なるノードに付け替える操作を実施する（Ｓ４０００）と、ビジュアルプログラミングツール３００はノード間接続関係の変更通知を接続関係管理サーバ１００に送信する（Ｓ４０１０）。ここで、変更通知は、例えば、フローデータを特定するＩＤ（例えば、ベースフローのファイル名と、現在の編集対象のフローのリビジョンＩＤとの組）と、変更されたワイヤーが変更前に接続していたノードのＩＤと、変更後に接続しているノードのＩＤとを含むことを想定する。それ以外にも、ノード間接続関係の変更を検知する方法としては、変更影響判断プログラム１２０が定期的にビジュアルプログラミングツール３００を監視し、変化を検知する方法でもよい。また、変更影響判断プログラム１２０が定期的にレポジトリ管理サーバ２００上のレポジトリを監視し、変更を含むコミットがなされたことを検知する方法でもよい。
【０１１２】
Ｓ４０１０で通知を受けると、変更影響判断プログラム１２０は、接続関係管理サーバ１００内で一意の変更操作ＩＤ５１０を採番し、不適切変更判断処理を実施する（Ｓ４０２０）。不適切変更判断処理は、入力されたフローデータと、ノード間接続の変更の情報をもとに、クラスタ化ルールテーブルＴ３００や同時発生履歴テーブルＴ４００を参照し、開発者６００によって行われているノード間接続変更に対して、変更後のフローにおいて同時に利用される可能性が低い部分フローが存在するかを検査し、存在する場合にはその部分フロー（クラスタ）と、修正すべきノード間接続箇所を変更影響テーブルＴ５００に記録する処理である。不適切変更判断処理の詳細は図１３を用いて後述する。
【０１１３】
Ｓ４０２０の処理が終了すると、変更影響判断プログラム１２０は、変更影響テーブルＴ５００を参照し、不適切ノード間接続Ｔ５８０の値がある場合には、その値を含んだ判断結果通知をビジュアルプログラミングツール３００に送信する（Ｓ４０３０）。判断結果通知は、例えば、同時発生度Ｔ５９０が閾値以下である変更後ノード接続Ｔ５５０としての情報（ノード間接続の情報）を含む。ビジュアルプログラミングツール３００は、受領した通知にノード間接続の情報が含まれている場合には、ワイヤーの接続が変更された、もしくはされようとしている部分の箇所の情報と共に、当該変更箇所と同時に利用する可能性が低いノード間接続として、受領したノード間接続の情報（例えば、変更後ノード間接続Ｔ５５０に基づく情報）をアラート表示する（Ｓ４０４０）。結果として、開発者にＳ４０２０の判断結果が通知される（Ｓ４０５０）。アラート表示の方法としては、一例としては図１の参照符号Ｆ３２３が示すように開発者が変更しようとしているフロー中の箇所に表示させる方法がある。また、それ以外にもアラート一覧画面のような表示専用部にメッセージを表示する方法でもよい。
【０１１４】
開発者がノード間接続変更操作を確定させる操作を実施した場合（Ｓ４０６０）、ビジュアルプログラミングツール３００は、変更影響判断プログラム１２０に対してノード間接続の変更操作を実施した箇所（例えば変更後ノード間接続）を指定した確定通知を送信する（Ｓ４０７０）。開発者の確定操作としては、例えばＳ４０５０で表示されたアラートを確認した上でのノード間接続変更操作の完了であってもよい。または、Ｓ４０５０でノード間接続の変更操作が行われた箇所にアラートを表示した場合には、アラート部分に確認を意味するボタンを表示し、そのボタンを押下することによることを契機としてもよい。それ以外にも、ノード間接続変更操作の完了から一定時間が経過したことであってもよい。
【０１１５】
変更影響判断プログラム１２０は、ビジュアルプログラミングツール３００からノード間接続の変更操作の確定通知を受領すると、変更影響テーブルＴ５００を参照し、確定通知に含まれるノード間接続変更操作の箇所（変更後ノード間接続）の情報から、当該箇所に対応した不適切ノード間接続Ｔ５８０を特定し（Ｓ４０８０）、特定した不適切ノード間接続Ｔ５８０が示す情報を含んだ通知をビジュアルプログラミングツール３００に送信する（Ｓ４０９０）。
【０１１６】
ビジュアルプログラミングツール３００は、当該通知を受領すると、確定したノード間接続変更操作に対応して修正する可能性のあるノード間接続の情報（Ｓ４０８０で特定された不適切ノード間接続Ｔ５８０が示す情報）を表示する（Ｓ４１００）。表示の方法としては、例えば図１の参照Ｆ３２４が示すように、Ｓ４０９０で受領した通知に含まれるノード間接続に対応する箇所に、Ｓ４０６０で確定したノード間接続変更の情報と共に修正するか、否かの警告を表示する方法である。また、Ｓ４０６０で確定したノード間接続変更操作が一定期間よりも前の操作である場合や、当該操作を実施以後に多数の別の操作が行われている場合には、Ｓ４０７０やＳ４０８０で通知を無視する処理を含んでいてもよい。これは、一定の時間が経過しても開発者がフローを修正していない場合には、ノード内のロジックや、データが変化し、問題とならなくなった可能性があり、そのために開発者は敢えてフローを修正していない場合があるためである。同様の理由により、Ｓ４０４０やＳ４１００で表示したアラートや、修正候補の警告に関して、一定期間後に自動的に表示を消す処理を含んでいてもよい。
【０１１７】
図１３は、不適切変更判断処理の流れを示す。
【０１１８】
変更影響判断プログラム１２０は、クラスタ化ルールテーブルＴ３００を参照し、取得したフローデータ（確定後の最新の今回フロー）に対応する各エントリの始端ノードＴ３４０と終端ノードＴ３５０をもとに各クラスタの対応する部分フローを特定する（Ｓ５０１０）。
【０１１９】
このとき、部分フローを特定する方法は、例えば単純に始端ノードＴ３４０と終端ノードＴ３５０に対応するノードＩＤのノードを始端、終端とする部分フローであってもよいし、Ｓ３０４０で述べた様にクラスタ化ルールテーブルＴ３００のリビジョンＩＤ  Ｔ３２０の指す過去のフローデータ内の部分フローと組成を比較する方法であってもよい。
【０１２０】
部分フローに対応するクラスタを特定すると、変更影響判断プログラム１２０は、ノード間の接続関係をもとに、各クラスタの組み合わせについて接続関係があるかを特定する。例えばクラスタ１（ＩＤ＝１のクラスタ）の終端ノード（Node1）と、クラスタ２の始端ノード（Node2）が接続している場合には、クラスタ１とクラスタ２は接続しており、具体的にはNode1とNode2の接続が界面であると判断する。
【０１２１】
また、上記のクラスタの組み合わせにおいて接続がないと判断された場合としては、クラスタ化ルールテーブルＴ３００の更新時からノードの追加、削除等の操作が行われた場合があり得る。その場合であっても対応するため、例えばＳ３０４０で述べた部分フローの組成を比較する方法によって、クラスタに属していないがクラスタに接続しているノードについて、仮にクラスタに属するとした場合に、同一のクラスタと判別できるか計算し、判別できるならばクラスタを拡張する処理を繰り返し行う処理が含われてもよい。その結果、クラスタが接続した場合には、当該のクラスタの組み合わせについて接続していると判断する。
【０１２２】
また、上記のクラスタの拡張処理について、適切なクラスタ間接続の界面となるノード間接続を取得するために、例えば以下に記述する方法を含んでもよい。ノードが属すると仮定するクラスタを変更したパタンを複数用意し、それぞれについてＳ３０４０で述べた方法で、過去のフローデータに含まれる部分フローと組成を比較する。その中で、部分フローと比較した結果を示す尺度が最も高い（最も過去の部分フローからの差が少ない）パタンをクラスタ間の界面とする。
【０１２３】
また、フローをクラスタ群の接続に置き換えられるパタンが複数ある場合には、クラスタの取りえるすべての組み合わせを生成する。
【０１２４】
次に、変更影響判断プログラム１２０は、Ｓ５０１０で生成したフローをクラスタ単位に置き換えたクラスタの組み合わせパタンより、ビジュアルプログラミングツール３００より通知された、ノード間接続変更箇所を界面とするクラスタ間接続を含むクラスタの組み合わせパタンを取得する（Ｓ５０２０）。仮に、一つも取得されない場合（Ｓ５０３０：Ｎｏの場合）は、今回のノード間接続変更は過去に例のないノード間接続変更であるため、不適切接続変更処理が終了する。
【０１２５】
一方で、Ｓ５０２０で一つ以上のクラスタの組み合わせパタンが取得された場合（Ｓ５０３０：Ｙｅｓ）、変更影響判断プログラム１２０は、パタン毎に、パタンに含まれる各クラスタ間の接続についてＳ５０５０からＳ５０７０までの処理を実施する（Ｓ５０４０）。以下、Ｓ５０４０について一つのパタンを例に取る（図１３の説明において「注目クラスタ間接続」）。Ｓ５０５０からＳ５０７０までの処理は、Ｓ５０２０で特定したクラスタ間接続（ビジュアルプログラミングツール３００より通知された、ノード間接続変更箇所を界面とするクラスタ間接続と、注目クラスタ間接続が、同時に利用される可能性が低いか、否かを判断する処理である。図１３の説明において、Ｓ５０２０で特定したクラスタ間接続を、「クラスタ間接続Ａ」と言い、注目クラスタ間接続を「クラスタ間接続Ｂ」と言う。
【０１２６】
変更影響判断プログラム１２０は、クラスタ間接続Ａとクラスタ間接続Ｂが同時利用される度合いである同時発生度を、同時発生履歴テーブルＴ４００の獲得点数Ｔ４５０をもとに計算する。具体的には、変更影響判断プログラム１２０は、同時発生履歴テーブルＴ４００より、クラスタ間接続Ａ、Ｂをそれぞれ示す値をクラスタ間接続１  Ｔ４２０、クラスタ間接続２  Ｔ４３０としてそれぞれ格納されている一つ以上のエントリを特定し、当該一つ以上のエントリにそれぞれ含まれる一つ以上の獲得点数Ｔ４５０の総和を同時発生度として計算する。
【０１２７】
次に、変更影響判断プログラム１２０は、Ｓ５０５０で計算した同時発生度が任意の閾値以下か、否かを判断する（Ｓ５０６０）。Ｓ５０６０の判断結果がＹｅｓの場合、変更影響判断プログラム１２０は、クラスタ間接続ＡとＢの各々を、同時発生が不適切なクラスタ間接続であるとしてクラスタ変更影響テーブルＴ５００に記録する（Ｓ５０７０）。Ｓ５０７０では、上述の採番された変更操作ＩＤ５１０、変更操作の時刻を示す時刻Ｔ５２０、クラスタ間接続Ａを示す変更後クラスタペアＴ５６０、クラスタ間接続Ｂを示す不適切クラスタペアＴ５７０、クラスタ間接続Ｂの接続界面を示す不適切ノード接続５８０、及び、算出された同時発生度を示す同時発生度Ｔ５９０を含んだエントリが、クラスタ変更影響テーブルＴ５００に追加される。
【０１２８】
なお、Ｓ５０５０で示した同時発生度の計算方法や、Ｓ５０６０での閾値判断は一例であって他の方法が採用されてもよい。例えば、変更影響判断プログラム１２０は、すべての獲得点数Ｔ４５０の総和を計算するのではなく、一定期間内の範囲で（例えば現在時刻から過去一定期間内に実行時刻Ｔ１３０が属するフローについて）獲得点数Ｔ４５０の和を計算してもよい。
【０１２９】
また、和といった絶対値ではなく、Ｓ５０２０で抽出したクラスタ間接続のパタン毎に合計をとり、その合計値で割った値などの相対的な値が、同時発生度として用いられてもよい。例えば、このような相対値の場合には、ある程度汎用的に用いることができる閾値を設定することができると考えられる。
【０１３０】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【０１３１】
例えば、フローは、複数のノードがシーケンシャルに接続された構造に限らず、他の構造、例えば、木構造が採用されてもよい。具体的には、例えば、一つ以上のノードの各々について、当該ノードの入力側と出力側の少なくとも一方に、二つ以上のワイヤーが接続されてもよい。
【０１３２】
また、例えば、ビジュアルプログラミングツールは、「モデル開発環境」と呼ばれてもよい。プログラム（ソフトウェア）の構成要素や処理単位であるノードは「モジュール」と呼ばれてもよく、ノード同士の結線であるワイヤーは「エッジ」と呼ばれてもよい。ノードとエッジは有向グラフにおける用語であり、Node-REDにおけるフローダイアグラムも有向グラフとして捉えることができる。フローダイアグラムとブロックダイアグラムと有向グラフは同義とし、フローダイアグラムは単に「フロー」と呼ぶことができ、「フロー」と「グラフ」は同義とできる。
【０１３３】
なお、以上の説明を、例えば下記のように総括することができる。
【０１３４】
フロー作成支援装置（例えば接続関係管理サーバ１００）が、フロー分析部と、変更影響判断部とを備える。フロー分析部及び変更影響判断部は、例えば、フロー分析プログラム１１０及び変更影響判断プログラム１２０がそれぞれＣＰＵ１１１（プロセッサ部の一例）により実行されることで実現される機能である。フロー分析部は、ビジュアルプログラミングツールを用いて確定された複数のフローにおけるノード群間の共起関係を算出する。複数のフローの各々は、処理を表すノードとノード間のワイヤーとで構成されており、各ノード群は、二つ以上のノードである。変更影響判断部は、いずれかのフローである変更前フローにおけるいずれかのワイヤーの接続元又は接続先を変更する変更操作がビジュアルプログラミングツールに対してされた場合、ノード群間の共起関係から、変更後フローにおける一のノード群との共起関係の低いノード群を変更後フローから特定し、当該一のノード群と当該特定したノード群とのうちの少なくとも一つを示す情報を通知する。このように、ノード群間の共起関係が計算され、変更後フローにおける一のノード群と当該一のノード群との共起関係の低いノード群とのうちの少なくとも一つを示す情報が通知される（例えばビジュアルプログラミングツールの画面上に表示される）ので、ビジュアルプログラミングツールを用いて、試行錯誤のためにノード間の接続を繰り返し変更して行う開発において、正しくノード間の接続変更を行えることの確実性が向上する。
【０１３５】
上記一のノード群が、変更操作に従う変更後のノード群である。このため、変更後のノード群と、当該変更後のノード群との共起関係の低いノード群とのうちの少なくとも一つを示す情報が通知される。
【０１３６】
具体的には、例えば、変更影響判断部は、変更操作に従う変更が確定する前では、上記一のノード群（つまり変更後のノード群）を示す情報を通知する。これにより、当該変更が誤っている可能性が高いことを開発者（ユーザの一例）に知らしめることができる。
【０１３７】
また、例えば、変更影響判断部は、変更操作に従う変更が確定した後では、上記特定したノード群を示す情報を通知する。これにより、上記変更操作に従う変更に伴い変更する必要性の高いノード間接続を開発者に知らしめることができる。
【０１３８】
フロー分析部は、複数のフローのうちの一つ以上のフローの各々について、当該フローである対象フローと、当該対象フローよりも過去に確定された一のフローとを比較することにより、過去に確定された一のフローにおける接続元又は接続先が変更された第一のワイヤーと、当該対象フローにおける接続元又は接続先が変更された第二のワイヤーとを特定する。フロー分析部は、第一のワイヤーを界面とする、当該界面を挟む二つのノードである第一のノード群を、上記一のフローから特定し、第二のワイヤーを界面とする、当該界面を挟む二つのノードである第二のノード群を、対象フローから特定する。複数のフローについての複数のノード群の少なくとも一つは、第一のノード群又は第二のノード群である。変更箇所を接続界面とするノード群を、変更箇所を接続界面としないノード群よりも、共起関係の算出で考慮すればよい。このため、正しくノード間の接続変更を行えることの確実性が向上することの処理負荷を低減することが期待できる。なお、一つ以上のフローの各々について、当該フローにとっての上記一のフローは、当該フローの直前回に確定したフローでよい。
【０１３９】
ノード群間の共起関係を算出することは、一つ以上のフローの各々に関し、一つ以上のクラスタ群ペアの各々について、当該クラスタ群ペアを構成する二つのクラスタ群のうちの一方のクラスタ群である第一のクラスタ群と他方のクラスタ群である第二のクラスタ群との共起関係の高さを示すスコアを決定することを含む。各クラスタ群は、二つ以上のクラスタである。各クラスタは、ノード群である。一つ以上のフローの各々に関し、当該フローである対象フローについて、第一のクラスタ群と第二のクラスタ群とについてのスコアは、下記（ｘ）の条件、
（ｘ）第一のクラスタ群と第二のクラスタ群のいずれもが、接続元又は接続先が変更される前又は変更された後のワイヤー経由で互いに接続された二つのノードが接続界面である二つのクラスタを含む、
が満たされるか否かに依存する。変更後フローにおける一のノード群との共起関係の低いノード群は、対象クラスタ群ペアに対応した一つ以上のスコアに基づく値が閾値以下である場合の当該対象クラスタ群ペアのうちの一のクラスタ群の接続界面である二つのノードとしてのノード群である。対象クラスタ群ペアは、上記一のクラスタ群と、変更操作に従い接続元又は接続先が変更されたワイヤー経由で互いに接続された二つのノードを接続界面とするクラスタ群とのペアである。これにより、第一及び第二のクラスタ群の各々が変更箇所を含むか否かに応じて共起関係の高さを示すスコアの値を決定でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
【０１４０】
一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについての前記スコアは、（ｘ）の条件が満たされる場合、下記（ｙ）の条件、
（ｙ）第一のクラスタ群と第二のクラスタ群との両方が、対象フローと、当該対象フローよりも過去に確定された一のフローとのいずれかに存在する、
が満たされるか否かに依存する。これにより、スコアの値をより適切にすることが期待でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
【０１４１】
一つ以上のフローの各々に関し、当該フローである対象フローについて、前記第一のクラスタ群と前記第二のクラスタ群とについてのスコアの値は、下記である。これにより、スコアの値をより適切にすることが期待でき、以って、正しくノード間の接続変更を行えることの確実性を向上することに貢献することが期待できる。
・（ｘ）が満たされない場合、第一の値である。
・（ｘ）が満たされ（ｙ）も満たされる場合、第一の値よりも高い第二の値である。
・（ｘ）が満たされるが（ｙ）が満たされない場合、第一の値よりも低い第三の値である。
【符号の説明】
【０１４２】
１００：接続関係管理サーバ、２００：レポジトリ管理サーバ、３００：ビジュアルプログラミングツール
【図１】
2020042679.tif 000003
【図２】
2020042679.tif 000004
【図３】
2020042679.tif 000005
【図４】
2020042679.tif 000006
【図５】
2020042679.tif 000007
【図６】
2020042679.tif 000008
【図７】
2020042679.tif 000009
【図８】
2020042679.tif 000010
【図９】
2020042679.tif 000011
【図１０】
2020042679.tif 000012
【図１１】
2020042679.tif 000013
【図１２】
2020042679.tif 000014
【図１３】
2020042679.tif 000015