リリースレポートを自動的に作成する方法

今日は、TFS、Redmine、JIRA追跡システムおよびMicrosoft Project Serverプロジェクト管理システムからのデータのインポートに基づいて、リリースドキュメントの作成を自動化する方法を説明します。







画像







この記事は、主にITプロジェクトマネージャーを対象としています。









問題は何ですか?



主な問題は、リリースノートの設計におけるエラーと不一致でした。 これは、次のリリースとともにお客様に送信するサポート文書です。 リリースノートは、宇宙船の打ち上げと同じくらい正確でなければなりません。 リリースに関連する各バグ修正、クローズドユーザーストーリー、およびすべてのユーザーフィードバック情報は、レポートに明確に反映される必要があります。 この大きくて重要なドキュメントは、追跡プログラムからコピーアンドペーストして手動でコンパイルされました。 ここで問題が発生しました。







問題1.エラー。



レポートを手動でコンパイルすると、エラーが発生することがありました。 私たちのプロジェクトのいくつかは非常に膨大であり、技術的な理由から、2つのトラッカーで同時に実行されます(たとえば、モバイルアプリケーションを作成するプロジェクトの一部はRedmineにあり、WebアプリケーションをTFSで作成するなど)。 それらに関する膨大なレポートの収集には長い時間がかかり、人的要因によりすべてのレポートを100%検証することができませんでした。







問題2.設計の不一致。



一部のプロジェクトマネージャーはリリースに関する詳細なコメントを書いており、誰かが作業のリストを送信しました。 リリースノートは通常のメールのように見えたため、デザインの美しさも損なわれましたが、これは顧客に届く最も重要な手紙の1つです。

徐々に、リリースに関するレポートの作成を自動化する必要があるという理解に至りました。







自動化後に何を得ましたか?



Webデザイナーが社内ポータルに登場し、数回クリックするだけで既製のリリースレポートを作成できます。 アプリケーションにログインし、プロジェクトを選択し、リリースし、必要なユーザーストーリーとタスクを押して、ボタンを押します。必要な場合にのみコメントを追加します。 プロジェクトのレビューによると、これらの簡単なアクションは、永続的な幸福感をもたらします。







デザイナーはタスクトラッカーと統合され、すべてのリリース情報を完成したリリースノートに自動的に取り込みます。 出力では、アプリケーションは顧客向けに美しく作成された電子メールレポートを生成します。 その中で、すべての情報はカテゴリに分割され、各アイテムにはトラッカーの対応するページへのリンクが提供されます。







既製のリリースノートは次のようになります。



画像







リリースでリリースされた最初のバトルレポートには、約50のユーザーストーリーが含まれていました。 Wordでは、このようなドキュメントは11ページかかります。 また、アプリケーションでの作成にはわずか2分しかかかりませんでした。 しかし、主なことは時間を節約することではなく、データの正確性に自信があることです。







管理ボーナス



  1. リリースレポートのバグを修正しました。

    これで、お客様はすぐに100%検証済みのリリースノートを受け取ります。
  2. リリースレポートのデザインを標準化しました。

    現在、リリースノートは、企業スタイルで美しくレイアウトされたhtmlファイルのように見えます。
  3. トラッカーのプロジェクト管理の品質を改善しました。

    魔法のボタンをクリックするだけでリリースノートを実現するには、プロジェクトマネージャーがトラッカーの完璧な順序に従う必要があります。 これに対する素晴らしいボーナスは、レポートの自動補完です。 もちろん、作業時間を1時間節約するために自動化を開始しませんでした。 主な目標は、プロジェクト管理の順序と透明性を確保し、美しく正確なリリースレポートを作成することでした。
  4. 顧客用のテンプレートを作成します。このテンプレートでは、リリースノートを編集し、自分用に送信できます。

    一部のお客様にとって、レポート付きのhtmlファイルは非常に便利なため、レポートを編集して、レポート全体または一部をコメント付きで新しい受信者に送信できる同様のテンプレートを要求しました。


段階的な自動化



自動化ソリューションを作成する前に、既製のオプションを探しました。 理論的には、リリースノートの編集を自動化するために、作業を行うトラッカー(TFS、Redmine、JIRA)のプラグインを使用することができました。 しかし、TFSとRedmineのプラグインは不快でした。 また、2つまたは3つのトラッカーから単一のレポートを一度に作成するために、既製のソリューションはまったくありませんでした。 したがって、私たちは自分でやらなければなりませんでした。







ステップ1.トラッカーで物事を整理します。プロジェクトマネージャーがプロジェクトをリードするのに応じて、プロジェクトマネージャーに統一基準を導入しました。



技術的な理由により、私たちのプロジェクトは3つのトラッカー(TFS、JIRA、Redmine)で実行され、それらでプロジェクトを実行するための基準はわずかに異なりました。 トラッカーを統合するには、すべてのトラッカーに共通の標準の導入に取り組む必要がありました。

さらに、リリースノートに直接エクスポートされるトラッカー内のこれらの情報ブロックをとかすことも必要でした。 プロジェクトはリリースに応じて分類され、リリースはタスクに分割され、ステータスがあり、すべてのユーザーストーリーが正しく記述されて閉じられ、フィードバックに関するすべてのタスクが分類され、すべてのスプリントが開始されます。 さらに、すべてのタスクとリリースには顧客のレポートに含まれるため、わかりやすい名前を付ける必要があります。







ステップ2.トラッカーおよびMS Project Serverからのデータに基づいて収集されたデータウェアハウス



追跡システム(TFS、Redmine、JIRA)のデータベースにビューを構築し、Microsoft Project Serverから一部のデータ(顧客データなど)を取得しました。 同時に、トラッカーからのデータの統合に関するいくつかの問題を解決する必要がありました。 たとえば、トラッカーごとに、データを受信するための承認に関する問題の個別の解決策を見つける必要がありました。 これについてはすでに詳細に書いています。







SQL Server Integration Services(SSIS)を使用してデータを収集しました。







画像







3つの追跡システム(TFS、Redmine、JIRA)およびMicrosoft Projectからのデータは、単一のデータウェアハウスデータウェアハウスに収集されます。







まず、Microsoft Projectからデータをダウンロードします。







画像







これは、顧客とプロジェクトマネージャーに関する情報を含むプロジェクトロードスクリプトの外観です。
SELECT proj.PROJ_NAME AS ProjectName ,proj.PROJ_UID as ProjectUID ,CT.Customer ,PCC.CostCenter ,PP.ProjectAccount ,pr_owner.RES_NAME AS ProjectOwner ,pr_owner.RES_UID as OwnerResourceNameUID ,CASE WHEN PPS.ProjectStatus IS NULL THEN 'Undefined' ELSE PPS.ProjectStatus END AS ProjectStatus FROM (SELECT PROJ_UID ,PROJ_NAME ,WRES_UID FROM pub.MSP_PROJECTS UNION SELECT 'E38038FA-F8CA-47D1-BFD4-6B45B8462972' AS Expr1 ,'Administrative' AS Expr2, NULL AS Expr3) AS proj LEFT OUTER JOIN pub.MSP_RESOURCES AS pr_owner ON pr_owner.RES_UID = proj.WRES_UID LEFT OUTER JOIN (SELECT pspPrjCFV.PROJ_UID ,psLV.LT_VALUE_TEXT AS Customer FROM ProjectWebApp_PSWA.pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV INNER JOIN ProjectWebApp_PSWA.pub.MSP_CUSTOM_FIELDS AS pspCF ON pspCF.MD_PROP_UID = pspPrjCFV.MD_PROP_UID LEFT JOIN ProjectWebApp_PSWA.pub.MSP_LOOKUP_TABLE_VALUES AS psLV ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE WHERE (pspCF.MD_PROP_NAME = 'Customer') ) AS CT ON CT.PROJ_UID = proj.PROJ_UID LEFT OUTER JOIN (SELECT pspPrjCFV.PROJ_UID, psLV.LT_VALUE_TEXT AS CostCenter FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID LEFT OUTER JOIN pub.MSP_LOOKUP_TABLE_VALUES AS psLV ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE WHERE (pspCF.MD_PROP_NAME = 'Cost_Center') ) AS PCC ON PCC.PROJ_UID = proj.PROJ_UID LEFT OUTER JOIN (SELECT pspPrjCFV.PROJ_UID, pspPrjCFV.TEXT_VALUE AS ProjectAccount FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID WHERE (pspCF.MD_PROP_NAME = 'Project Account') ) AS PP ON PP.PROJ_UID = proj.PROJ_UID LEFT OUTER JOIN (SELECT pspPrjCFV.PROJ_UID, psLV.LT_VALUE_TEXT AS ProjectStatus FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID LEFT OUTER JOIN pub.MSP_LOOKUP_TABLE_VALUES AS psLV ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE WHERE (pspCF.MD_PROP_NAME = 'Project Status') ) AS PPS ON PPS.PROJ_UID = proj.PROJ_UID
      
      





さらに、古いデータの削除に煩わされないように、タスクに関連付けられたテーブルをクリアします。 そして、追跡システムからデータの収集を開始します。 システムごとに、データは独自の方法で収集されます。 この記事で既に述べたように、RedmineとTFSについて、必要なすべてのデータを返すビューを作成しました。







JIRAデータベースにアクセスできないため、JIRA REST APIiを使用しました。 あなた自身が理解しているように、これはスクリプトの最も遅い部分であり、最適化の機会がたくさんあります。 しかし、これは別の話です。

トラッカーからデータをダウンロードしたら、プロジェクトと従業員のテーブルの「ギャップ」を埋める必要があります。 これらのギャップは、一部の状況(開始する時間がなかった、または歴史的に発生したため)によって、すべてのプロジェクトと従業員がMicrosoft Projectで設立されたわけではないという事実により発生します。 欠落データはOLAPキューブからのレポートにすぐに表示され、別の列で「不一致」としてマークされ、すぐに順序を処理して復元できます。







その後、すべてをまとめる必要があります。 タスクのリストをまとめる。







画像







そして、ファクトテーブル(誰が、どこで、どのくらいの時間を費やしたか)に記入します。







画像







その後、3分ごとにSSISパッケージを実行するジョブを撮影しました。 そして、最終的に、データウェアハウスの準備が整いました。 さらに、あなたはそれを使ってたくさんの便利なことをすることができます。 たとえば、OLAPキューブを収集してレポートを作成したり、リリースノートのデータを取得したり、休暇スケジュールを作成したりします(はい、はい、これについてもすぐに説明します)。







画像







ステップ3.夢の美しいリリースノートを作成しました。



ここではすべてが簡単です。デザイナーとレイアウトデザイナーは、すべての情報がカテゴリに分割され、必要なすべてのリンクが追加されたhtmlファイルを作成しました。







ステップ4.データウェアハウスからのデータに基づいて、顧客向けのレポートを含む単一のHTMLドキュメントを作成するWebアプリケーションを作成しました。



画像







ステップ5.プロジェクトは停止しません。



最初の手紙は顧客からの熱烈な反応を引き起こし、彼らは私たちにブランドブックにテンプレートを適合させ、リリースノートを個別に編集し、情報をソートし、新しい受信者に送信するためのコメントを追加する機会を与えてくれと頼みました。







画像







そして、人件費とビジネスプロセスがまだ最適化されると思います...








All Articles