Node-REDで品質の高いソフトウェアを開発する
開発者へのアンケートによると、Node-REDを用いると高品質なソフトウェアが開発できることがわかりましたが、そこには注意点がありました(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。
Node-REDで開発する際にはNode-REDに合わせた設計やテストが必要です。順に説明しましょう。
データ設計
Node-REDのノードは関数ではなく、msgオブジェクトを加工しながら処理を進めますので、msgオブジェクトのデータ構造をきちんと決めておかないと、混乱してバグの原因になります。
msgオブジェクトと同じ様に処理館の共通データであるフロー変数やグローバル変数、データベースも同様にデータ構造をきちんと決めておきます。
構造設計
フローをどのように構成するか、非同期並行処理(コールバック地獄よさようなら。Node-REDで非同期処理を使いこなせ! )か順次処理かを検討します。非同期処理は処理が速く効率的です。一方の順次処理はメモリーをあまり消費しないので、大量データを扱う際に有利です。メモリー消費が多いとシステムやDBノードが止まることもありますので、注意深く検討してください。
システム間連携
前回(Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 - )に書いた様に様々な連携方法があります。それぞれの長所短所を検討して方式を決めてください。
いずれの場合もなるべく早い時期から結合すれば、信頼性を高めることができます。
モジュール設計
いわゆるモジュール強度(凝集度)や結合度を考慮してモジュール化します。なるべく単機能のノードやサブフローになる様に、インタフェースのデータ構造が単純になる様に設計します。
また、ノードの出力するオブジェクトがが参照なのか、データのコピーなのか、あるいは新しいオブジェクトにするのかを検討します。新しいオブジェクトにすると、渡していないデータは破壊されます。特にhttpレスポンスには多くのデータが必要ですので注意してください。
逐次開発・テスト
いわゆるxunitはカスタムノードでないと利用できません。改造する際はデグレが生じ易いので気をつけてください。良いモジュール構造にして、逐次開発とテストを並行して行います。
少しずつ開発しながら随時テストすることで、信頼性の高いソフトウェアを増やしていきます。常に追加した部分を動作確認すれば、まとめてテストした場合よりも抜けが少ない様です(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。
機能テスト
機能テストを行う際は、機能の観点だけでなく、データの網羅性に注意すると良いでしょう。いわゆる界値に注目してテストデータを決めます。
Node-REDはスタブやモック、ドライバなど、いわゆるテストダブルの開発にも向いています。実機の利用が難しい場合に検討すると良いでしょう。特にDashboardを利用すると、使い易いテスト環境が実現できるでしょう。
非機能テスト
デバッグノードなどを不用意に繋ぐと、フローの二股に分かれたところでデータがコピーされ、メモリー負荷や、処理速度の低下に繋がるので注意してください。
Node-REDはNode.js上で非同期に動作しますので、スレッドによる実装よりも線形に性能が出ますが、残念ながら上限性能は存在します。小規模なテストで安心しないで、想定される負荷を実際に与えてテストしてください。
おわりに
Node-REDを使うと簡単に動くプログラムができます。しかし、ある程度規模が大きくなると、設計やテストの戦略が必要になります。
ここに挙げた方法は一例に過ぎません。開発対象や環境に合わせて実施してください。
« Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 - | トップページ | [#Node-RED] 7〜8分でわかるファンクションノード »
「Node-RED」カテゴリの記事
- アイデアをシームレスに実装する - 考える道具としてのNode-RED -(2020.12.13)
- [#Node-RED] ファンクションノードのデバッグどうしてる?(2019.12.16)
- Node-RED: joinノードでタイムアウト処理(2018.12.25)
- Node-REDで世界が変わる!(2018.12.01)
- デブサミ関西でNode-REDとペンギンと勇気の話をしました #devsumiB(2018.10.28)
« Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 - | トップページ | [#Node-RED] 7〜8分でわかるファンクションノード »
コメント