開発者へのアンケートによると、Node-REDを用いると高品質なソフトウェアが開発できることがわかりましたが、そこには注意点がありました(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。
Node-REDで開発する際にはNode-REDに合わせた設計やテストが必要です。以下に説明します。
#データ設計
Node-REDのノードは関数ではなく、msgオブジェクトを加工しながら処理をしていきますので、msgオブジェクトのデータ構造をきちんと決めておかないと混乱してしまいます。
msgオブジェクトと同じ様に処理館の共通データであるフロー変数やグローバル変数、データベースも同様にデータ構造をきちんと決めておきます。
#構造設計
フローをどのように構成するか、非同期並行処理(コールバック地獄よさようなら。Node-REDで非同期処理を使いこなせ!)か順次処理かを検討します。非同期処理は処理が速く効率的です。順次処理はメモリーをあまり消費しないので、大量データを扱う際に有利です。メモリー消費が多いとシステムやDBノードが停まることもありますので、注意深く検討してください。
#システム間連携
[Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 - http://sakaba.cocolog-nifty.com/sakaba/2017/07/node-red-----50.html
に書いた様に様々な連携方法があります。それぞれの長所短所を検討して方式を決めてください。
いずれの場合もなるべく早い時期から結合すれば、信頼性を高めることができます。
#モジュール設計
いわゆるモジュール強度(凝集度)や結合度を考慮してモジュール化します。なるべく単機能のノードやサブフローになる様に、インタフェースのデータ構造が単純になる様に設計します。
また、ノードの出力が参照なのか、データのコピーなのか、あるいは新しいオブジェクトにするのかを検討します。新しいオブジェクトにすると、渡していないデータは破壊されます。特にhttpレスポンスには多くのデータが必要なですので注意してください。
#逐次開発・テスト
いわゆるxunitはカスタムノードでないと利用できません。改造する際ははデグレが生じ易いので気をつけてください。良いモジュール構造にして、逐次開発とテストを並行して行います。
少しずつ開発ながら随時テストすることで、信頼性の高いソフトウェアを増やしていきます。常に追加した部分を動作確認すれば、まとめてテストした場合よりも抜けが少ない様です(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。
#機能テスト
機能テストを行う際は、機能の観点だけでなく、データの網羅性に注意すると良いでしょう。もちろん境界値を重視してテストデータを決めます。
Node-REDはスタブやモック、ドライバなどテストダブルの開発にも向いていますので、実記の利用が難しい場合に検討してください。特にDashboardは使い易いテスト環境を実現します。
#非機能テスト
デバッグノードなどを不用意に繋ぐと、フローの二股になったところでデータがコピーされ、メモリー負荷や、処理速度の低下に繋がるので注意してください。
Node-REDはNode.js上で非同期に動作しますので、スレッドによる実装よりも線形に性能が出ますが、それでも上限性能はあります。想定される負荷を実際に与えてテストしてください。