本記事はUiPath Advent Calendar 2021の21日目の記事です。
人の作ったワークフローを解読するのは大変
そう思ったことはありませんか?私はあります(めちゃくちゃ)🤣
立場上、自分で作るよりも他の方(自社のプロジェクトメンバーやお客様も含む)が作ったワークフローをレビューすることが多いのですが、だいたい以下を見て評価します。
- コーディング規約に違反していないか
- 仕様書通り、設計通りに作られているか
- 可読性や保守性、再利用性が高い作りになっているか
コーディング規約に違反していないか
このうち、コーディング規約に違反していないかは、ワークフローアナライザーを使うことで機械的なチェックをすることができます。(自社コーディング規約に沿うように設定のチューニングは必要です)
仕様書通り、設計通りに作られているか
仕様書通り、設計書通りに作られているかどうかについては、機械的なチェックは難しく、一つずつ細かく見ていく必要があると思います。また、テストを行うことによってあぶりだすべきものだとも思っています。
可読性や保守性、再利用性が高い作りになっているか
私が一番難しいと思っており、一番重視して見ているのは、可読性や保守性、再利用性が高い作りになっているか、つまり 品質の高いワークフローになっているかどうか です。
コーディング規約を遵守し、仕様書通りに作っていても、可読性や保守性、再利用性が高くないワークフローだった場合、不具合が発生しやすい傾向があると思います。(個人的な感想です)
ここでいう可読性や保守性、再利用性等の定義については、UiPath Advent Calendar 2021で、UiPath Japan MVP2021の@miya_gisさんが書かれた記事で、品質の高いコードとはどういうものなのか、わかりやすく説明されているので、是非読んでみてください。
ただUiPathのワークフローで、品質が高いか低いか、定量化して確認する手段は2021年12月現在、私が知る限りは用意されておらず、レビュアーの経験と勘に頼るところと思われました。
ということで!!前振りが長くなりましたが、
定量化が難しいUiPathのワークフロー品質について勝手に評価するツールを作ってみたので、紹介させていただきます🚀🔥
去年趣味開発で作って、ろくに改修せず放置してたので、せっかくなので機能追加して送り出すことにしました😀
無料で公開していますので、お好きにお使いいただけますが、本ツールは勝手に作って公開しているだけなので、本ツールで高い品質評価だったのに不具合が発生した。等あったとしても責任はとれません。利用は自己責任でお願いしますm(_ _)m
ローカライズ(多言語対応)したら、UiPah Marketplaceにも提出してみようかなと思います。
どんなツール?
UiPathのプロジェクトファイル、Xamlファイルを解析し、使用しているアクティビティや変数、分岐の数や階層の深さを解析します。解析した結果、オレオレ評価基準に基づいて、プロジェクトスコアを100点満点で表示します。インストール不要なWindowsデスクトップアプリケーションです。ネットワーク通信等は一切使用せず、オフライン環境でも利用可能です。
使うと何がうれしい?
- UiPath開発・実装スキルのレベル感の確認ができるかもです。
- ワークフローの規模感や開発難易度の根拠に使えるかもです。
- ロボットの動作が安定しないときに、構造的な問題、ワークフローの品質的な問題がないのかの確認に使えるかもです。
- 可視化するとちょっと楽しいです。
使い方
簡単な使い方を説明します。
ツールのダウンロード
以下からexeファイルをダウンロードできます。
起動 & プロジェクト読み込み
exeファイルを起動すると、解析対象フォルダを指定する画面が表示されます。
① 「…」ボタンをクリックし、解析対象のプロジェクトフォルダを指定します。
② 「読込」ボタンをクリックし、プロジェクトを解析します。
複数プロジェクトをまとめて解析することができます。複数まとめて解析するには①で親フォルダを指定してください。
解析が完了すると、同画面に解析済みプロジェクト一覧が表示されます。
後述しますが、プロジェクトスコア(Score列)の値が小さいほど、品質が良くないと評価されたプロジェクトとなります。
詳細を確認したいプロジェクトの行を選択することで、解析結果表示画面に遷移します。
解析(評価)結果の確認
project.jsonというプロジェクト定義ファイルと、同フォルダ以下に含まれるXamlファイル(ワークフローの定義本体)を解析し、プロジェクト情報を可視化します。
プロジェクト単位でのサマリー情報
- プロジェクト名
- プロジェクト説明
- (プロジェクトが作成された時点の)Studioバージョン
- プロジェクトのリリースバージョン
- 依存関係ライブラリ
- ワークフローファイルの合計数
- アクティビティの合計数
- アクティビティの種類
- 変数の合計数
- ワークフローの呼び出し階層
- 複雑度(分岐の数)合計
- 最大のネストの深さ(FlowChartやSequenceの入れ子の数)
- プロジェクトスコア
ワークフローファイル単位の詳細情報
- 変数の数
- アクティビティの数
- アクティビティの種類
- 複雑度(分岐の数)
- 階層の深さ(FlowChartやSequenceの入れ子の数)
- TryCatchの数
- RetryScopeの数
- Delayの数
- Logの数
- 注釈の数
特徴的な機能としては、複雑度、階層の深さの計測機能があります。
コードの品質を評価する指標として、サイクロマティック複雑度という考え方があります。
これは、簡単に表すと分岐の数です。
IF文やSwitch文などの分岐構文、ForEach、Whileなどの繰り返し構文を使用すると、分岐の数が増え、増えれば増えるほど複雑な制御フローとなります。より多くのテストを必要とし、保守容易性が低下します。
もう一つが階層の深さです。FlowChartの中にSequenceがあり、その中にFlowChartがあり、と入れ子になったフローを見たことがあると思いますが、これによって可読性や保守容易性が下がり、不具合の温床となります。これらを可視化し、プロジェクトスコアの計算に使用しています。
Excel出力
プロジェクト一覧画面より、③「Excel出力」ボタンをクリックすることで、Excelファイルに出力することができます。
プロジェクトスコアの計算式とカスタマイズ方法
ワークフロー単位でのスコアの計算式は以下としております。
Activity数(25点)+変数の数(25点)+サイクロマティック複雑度(25点)+階層の深さ(25点) = Max100点
プロジェクトスコアは、全ワークフローのスコアの平均値をとったものとなります。 各種既定値は以下の通りです。設定画面よりカスタマイズすることができます。
スコアが50点より低いワークフロー(WF)はBadワークフローとして集計されます。
解析(評価)結果画面下側のワークフローファイル一覧は、スコアの低い順に並んでいますので、品質の良くないワークフローから優先してレビューすることを支援します。
どうやってこのツール作ったか
Visual Studio/C#でWPFアプリケーションとして開発しました。
UiPathのXamlの構文を解析し、ごにょごにょやってます。
アプリ開発者としてのブランクを感じながら、品質の低いコードになっていることを自覚しながら作ってましたw
興味ある人はソースコード公開してるのでご自由にご覧ください。
以上、本ツールがワークフローの品質を見直すきっかけになれば嬉しい限りです。
それではまた!