
Positive Technologiesでは、開発プロセスについて引き続き話し合います。 前に、 製品の配布の作成 、ソフトウェアのストレージとライセンスのプロセスの組織 、および独自の継続的インテグレーションシステムの実装に触れました。
今日は、Team Foundation Server(TFS)ツールを使用して開発ワークフローを整理する方法について説明します。
TFSについて少し
Team Foundation Serverは、いくつかのコンポーネントで構成されています。
バージョン管理システム:

タスクトラッカー:

継続的インテグレーションシステム:

当社にとって、TFSは主にほとんどのチームが使用するタスクトラッカーです。 2番目に人気のある使用例は、バージョン管理システムです。このシステムには、多くのプロジェクトが保存されていませんが、それらはすべて積極的に開発されています。 残差の原則により、バージョンが格納されている同じプロジェクトのアセンブリシステムとしてTFSを使用します。
タスク追跡とワークフロー編成のためのTFS
このシステムは、カンバン、スクラム、CMMIなどの開発方法論をサポートしています。 さらに、さまざまなタイプのタスク(カスタムを含む)がサポートされています:バグ、タスク、機能、ユーザーストーリーなど。 また、ワークフロータスクを変更するための柔軟なシステムに注目する価値があります。
TFSのバグタスクの基本的なワークフローは次のとおりです。

初期状態、最終状態、状態間の遷移というn個のステータスがあります。 原則として、基本的なワークフローで作業する人はほとんどいません。常にワークフローを拡張する必要があります。
この場合、変更されたプロセスは次のようになります。

ワークフローの拡張は、新しいステータスを追加し、既存のステータスの名前を変更することで達成されました。 たとえば、何らかの理由で拒否されたタスクには拒否ステータスが、別のプロジェクトに転送されたタスクには移動済み、一時的に中断されたタスクには保留中が追加されました。
名前が変更されたステータス:承認済みは進行中として知られるようになり、タスクが機能するようになり、コミット済みが解決済みに名前が変更されたことを意味します。
バグカードの外観も同様に変更されます。 プロジェクト作成後の最初の段階では、次のようになります。

基本的な形式では、システムは少しの情報を提供します。少なくとも、再生ステップのテンプレート、時間メトリック、および必要な他のフィールドはありません。 このような赤字は私たちには合わなかったため、ニーズに合わせてカードの外観を再設計しました。

時間追跡用のフィールド(元の見積もり、残りの作業、完了した作業、毎日の作業)を含む列を追加し、HTMLを埋めるためのテンプレートを再生手順に追加し、さまざまな特性によるバグの分類を示しました。
問題と解決策
システムの利便性にもかかわらず、TFSトラッカーでワークフローを操作する際には多くの困難があります。
- 計算フィールドはありません -子要素から親要素への時間メトリックの転送も提供されていないため、追加ロジックのフィールドを「ハング」させることは実装が困難です。
- 複数選択フィールドはありません 。Bugまたはその他のワークアイテムにクライアントフィールドがあり、複数のクライアントでエラーが発生した場合、すべてを選択することはできません。1つの値のみが可能です。
- フィールドとそのタイプを変更する不便なプロセス -フィールド名でエラーが発生した場合、修正できないため、すべての値を新しいフィールドに転送してフィールドを再作成する必要があります。
- 変更を追跡してロールバックすることはできません。すべてのバグテンプレートとTFS設定はXMLとして保存され、データベースにロードされます。 間違えてデータベースに入力すると、以前のバージョンにロールバックできなくなります。 したがって、どこで何を変更したかを自分で覚えておく必要があります。
- ワークフローとリストを変更するための不便なシステム -ユーザーにフィールドのリストを変更する権限を与えると、ワークフロー全体のリストを変更する権限を自動的に受け取るように配置されます。
これらの欠点に我慢したくなかったので、生じた問題を解決しなければなりませんでした。 これが私たちがやったことです:
- フィールドロジックの計算にオープンなTfsAggregatorプロジェクトを使用し始めました。これは、時間追跡フィールドの計算、あるワークアイテムから別のワークアイテムへのテキスト値の転送などに便利なツールです。
- コンボボックスフィールドを実装するためのWitCustomControlsは、別のオープンソースプロジェクトであり、複数選択フィールドを作成できるJava-Scriptプラグインです。
- 作業項目テンプレートを保存および追跡するためのGitlab-構成の変更を追跡し、エラーが発生した場合に以前のバージョンにロールバックできるようにします。
- 作業項目、リストなどのテンプレートの変更は、TFSサービス管理者のみに許可されます -これは、構成、リストなどへの不正な変更のリスクを減らすために行われます。
PSディストリビューションを作成するために開発したツールに関するストーリーは、モスクワの秋に行われたDevOpsミーティングの一部として紹介されました。
リンクには、イベント中に提示された16のレポートのプレゼンテーションが表示されます。 このトピック発表の最後に、すべてのプレゼンテーションとビデオプレゼンテーションがテーブルに追加されます。
著者 : アレクセイ・ソロヴィエフ
PPS私たちは、Positive Technologiesの支援により、Pythonコア開発者のAndrei Svetlov によるasyncio + aiohttpのコースがモスクワですぐに開催されることをお知らせします。
Andreyにとって最高の質問の著者にセミナーの無料チケットを1つ提供したいと考えています。彼はレッスン中に質問を選択して回答します。 質問はasyncio2016@ptsecurity.comに送信してください。