共用方式為


變更工作項目類型的工作流程

您可以變更工作項目類型 (WIT) 的工作流程,以支援您的業務和小組流程。 WIT 支援追蹤所有工作類型 (需求、工作、程式碼缺失),以支援使用 Team Foundation Server (TFS) 進行軟體開發。

工作流程會決定小組成員將執行之工作的邏輯進展和回復。 它也會指定出現在 [狀態] 和 [原因] 欄位下拉式功能表中的值。

產品待處理項目的工作流程 (Scrum 流程範本

產品待處理項目工作流程,Scrum 流程

如需 TFS 提供之預設流程範本中支援的預設工作流程狀態概觀,請參閱使用 Team 專案成品,選擇流程範本。 如需建置定義工作流程的相關資訊,請參閱自訂您的建置流程範本

工作流程設計指導方針

您可以藉由先識別狀態及兩者間的有效轉換來定義工作流程。 WIT 定義的 WORKFLOW 區段會指定有效的狀態、轉換、轉換的原因,以及小組成員變更工作項目狀態時將執行的選用動作。

一般而言,您會將每個狀態關聯至小組成員角色,以及該角色中的人員在變更其狀態之前必須執行來處理該工作項目的工作。 轉換會定義狀態之間的有效進展和回復。 原因可識別出為何小組成員會將工作項目從某一個狀態變更到另一個狀態,以及動作會在工作流程中的某個時點支援自動轉換工作項目。

例如,當測試人員開啟以 Team Foundation Server (TFS) 提供之預設 Agile 流程範本為基礎的新 Bug 時,會將 [狀態] 設為 [新增]。 開發人員會在修正 Bug 時將 [狀態] 變更為 [作用中],一旦修正之後,開發人員便會將其狀態變更為 [已解決],並將 [原因] 欄位值設為 [已修正]。 確認修正之後,測試人員即會將 Bug 的狀態變更為 [已關閉],並將 [原因] 欄位變更為 [已驗證]。 如果測試人員判斷開發人員尚未修正 Bug,測試人員就會將 Bug 的狀態變更為 [作用中],並將 [原因] 指定為 [未修正] 或 [測試失敗]。

當您設計或修改工作流程時,請考慮下列指導方針:

  • 使用 STATE 項目,針對將在工作項目上採取特定動作的每個小組成員角色,定義唯一狀態。 您定義的狀態越多,必須定義的轉換就越多。 不論您定義狀態的順序為何,在 [狀態] 欄位的下拉式功能表中,都會依英數字元順序列出。

    如果您將狀態加入出現在 Team Web Access 中待處理項目或面板頁面上的工作項目類型,也必須將狀態對應至轉移狀態。 請參閱 處理序組態 XML 元素參考

  • 使用 TRANSITION 項目,針對每個有效的進展和回復,定義從某個狀態到另一個狀態的轉換。

    您至少必須針對每個狀態定義一個轉換,並從 Null 狀態轉換為初始狀態。

    您可以定義一個只能從未指派 (Null) 到初始狀態的轉換。 當您儲存新的工作項目時,系統會自動將它指派為初始狀態。

    當小組成員變更工作項目的狀態時,該變更會觸發轉換,以及您定義來要針對所選取狀態和轉換執行的動作。 使用者可以根據您針對目前狀態定義的轉換,指定只有這些有效狀態。 此外,ACTION 項目 (這是 TRANSITION 的子項目) 可以變更工作項目的狀態。

  • 針對每個轉換,使用 DEFAULTREASON 項目來定義預設原因。 您可以使用 REASON 項目,視需要定義任意數目的選擇性原因。 這些值會出現在 [原因] 欄位的下拉式功能表中。

  • 您可以指定當工作項目變更狀態時、當它轉換時,以及當使用者選取特定的原因時將套用的規則。 這其中許多規則可補充您在 WORKITEMTYPE 定義下方 FIELDS 區段中定義欄位時可套用的條件式規則。 如需詳細資訊,請參閱本主題後續內容的在工作流程變更期間更新欄位。

  • 您指派給狀態和原因的名稱是不區分大小寫的。

    在工作項目表單或查詢編輯器中 [狀態] 與 [原因] 欄位的下拉式功能表,會顯示已在工作項目類型的 WORKFLOW 區段中指派的值。

工作流程圖表與程式碼範例

下列程式碼範例示範適用於 Agile 流程範本之 Bug WIT 定義的 WORKFLOW。 這個範例會定義三個狀態和五個轉換。 STATE 項目會指定 [作用中]、[已解決] 及 [已關閉] 狀態。 進展和回復轉換的所有可能組合都是針對這三種狀態所定義,但有一個例外。 尚未定義從 [已關閉] 到 [已解決] 的轉換。 因此,如果工作項目已關閉,小組成員便無法解決這種類型的工作項目。

此範例並未列出 DEFAULTREASON、REASON、ACTION 及 FIELD 的所有項目。

<WORKFLOW>
<STATES>
   <STATE value="Active">
     <FIELDS> . . . </FIELDS>
   </STATE>
   <STATE value="Resolved">
    <FIELDS> . . . </FIELDS>
   </STATE>
   <STATE value="Closed">
    <FIELDS> . . . </FIELDS>
   </STATE>
</STATES>
<TRANSITIONS>
   <TRANSITION from="" to="Active">
      <REASONS>
         <REASON value="Build Failure" />
          <DEFAULTREASON value="New" />
      </REASONS>
      <FIELDS> . . . </FIELDS>
   </TRANSITION>
   <TRANSITION from="Active" to="Resolved">
    <ACTIONS> . . . </ACTIONS>
    <REASONS> . . . </REASONS>
   </TRANSITION>
   <TRANSITION from="Resolved" to="Active">
      <REASONS> . . . </REASONS>
   </TRANSITION>
   <TRANSITION from="Resolved" to="Closed">
      <REASONS>
         <DEFAULTREASON value="Verified" />
      </REASONS>
    <FIELDS> . . . </FIELDS>
   </TRANSITION>
   <TRANSITION from="Closed" to="Active">
      <REASONS>
         <REASON value="Reactivated" />
         <DEFAULTREASON value="Regression" />
      </REASONS>
    <FIELDS> . . . </FIELDS>
   </TRANSITION>
</TRANSITIONS>
</WORKFLOW>


範例工作流程狀態圖表 - Agile Bug WIT

Bug 工作流程狀態,Agile 流程範本

判斷狀態的數目和類型

您會根據想要讓該類型的工作項目存在其中的不同邏輯狀態數目,來決定有效狀態的數目和類型。 此外,如果不同的小組成員會執行不同的動作,則您可以考慮根據成員角色定義狀態。 每個狀態都會對應至小組成員必須在工作項目上執行以將它移到下一個狀態的動作。 針對每個狀態,您應該定義特定的動作,以及允許執行這些動作的小組成員。

下表提供四種狀態範例,這些狀態是定義來追蹤某個功能的進度,以及必須執行指定動作的有效使用者:

狀態

有效的使用者

要執行的動作

已提議

專案經理

任何人都可以建立功能工作項目。 不過,只有專案經理可以核准或能取消核准該工作項目。 如果專案經理核准某個功能,該專案經理便會將工作項目的狀態變更為 [作用中];否則,小組成員就會關閉它。

作用中

開發組長

開發組長會監視功能的開發。 當功能完成時,開發組長會將功能工作項目的狀態變更為 [檢閱]。

檢閱

專案經理

專案經理會檢閱小組實作的功能,而且如果實作是令人滿意的,即會將工作項目狀態變更為 [已關閉]。

已關閉

專案經理

任何其他動作不應該在已關閉的工作項目上發生。 這些項目會基於保存和報告目的而保留在資料庫中。

注意事項注意事項

特定類型之工作項目的所有狀態都會依字母順序顯示於表單上的清單中,而不論您指定它們的順序為何。

定義轉換

如果您定義了有效的狀態進展與回復,即能控制小組成員可用以變更工作項目狀態的方式。 如果您未定義從某一個狀態到另一個狀態的轉換,小組成員便無法將特定類型的工作項目從某一個特定的狀態變更為另一個特定狀態。

下表會分別針對本主題先前所述的四個狀態定義有效的轉換,以及每一個狀態的預設原因。

狀態

轉換為狀態

預設原因

已提議

作用中 (進展)

核准開發

已關閉 (進展)

未核准

作用中

檢閱 (進展)

符合驗收準則

檢閱

已關閉 (進展)

功能完成

作用中 (回復)

不符合需求

已關閉

已提議 (回復)

考慮核准

作用中 (回復)

錯誤的關閉

您可以使用 TRANSITION 項目的 for 和 not 屬性,來限制允許其從某一個狀態轉換為另一個狀態的人員。 如下列範例所示,測試人員可重新開啟 Bug,但開發人員不能。

<TRANSITION from="Closed" to="Active"
     for="[Project]\Testers"
      not="[Project]\Developers">
    . . .
</TRANSITION>

指定原因

當小組成員變更 [狀態] 欄位時,該使用者可保留該轉換的預設原因,或者指定不同的原因 (如果您定義了其他選項)。 您必須使用 DEFAULTREASON 項目來指定一個唯一的預設原因。 只有當額外的原因可協助小組追蹤或回報資料時,您才能指定額外的原因。

例如,開發人員可以在解決 Bug 時指定下列其中一個原因:已修正 (預設值)、已延期、重複、按設計角度、無法重現,或已過時。 每個原因都會根據 Bug 指定測試人員要執行的特定動作。

注意事項注意事項

特定類型之工作項目的所有原因都會依字母順序顯示於工作表單上的清單中,而不論您指定 REASON 項目的順序為何。

下列範例示範的項目會定義小組成員可能解決 Bug 的原因:

<TRANSITION from="Active" to="Resolved">
   . . .
   <REASONS>
      <DEFAULTREASON value="Fixed"/>
      <REASON value="Deferred"/>
      <REASON value="Duplicate"/>
      <REASON value="As Designed"/>
      <REASON value="Unable to Reproduce"/>
      <REASON value="Obsolete"/>
   </REASONS>
   . . .
</TRANSITION>

指定動作

一般而言,小組成員會藉由指定 [狀態] 欄位的不同值,然後儲存工作項目,來變更工作項目的狀態。 不過,您也可以定義 ACTION 項目,在該轉換發生時,自動變更工作項目的狀態。 如下列範例所示,您可以指定如果 Bug 工作項目與開發人員簽入版本控制項的檔案相關聯,即應自動解決它們。

<TRANSITION from="Active" to="Resolved">
   <ACTIONS>
   <ACTION value="Microsoft.VSTS.Actions.Checkin"/>
   </ACTIONS>
. . .
</TRANSITION>

若在 Microsoft Visual Studio Application Lifecycle Management 內部或 Visual Studio Application Lifecycle Management 外部 (例如,從工具追蹤呼叫) 的任一處發生事件,您可以使用 ACTION 項目,自動變更特定類型的工作項目狀態。 如需詳細資訊,請參閱根據狀態、轉換或原因自動化欄位指派

在工作流程變更期間更新欄位

您可以定義規則,每當發生下列事件時更新欄位:

  • 當您想要針對所有轉換套用規則時,可以在 STATE 下方指派欄位規則,以及進入該狀態的原因。

  • 當您想要針對該轉換套用規則時,可以在 TRANSITION 下方指派欄位規則,以及執行該轉換的所有原因。

  • 當您只想要基於該特定原因套用規則時,可以在 DEFAULTREASON 或 REASON 下方指派欄位規則。

如果欄位一律應包含相同的值,您可以在定義該欄位的 FIELD 項目下方定義規則。 若要深入了解規則使用方式,請參閱將規則套用至工作項目欄位

您應該試著將您為任一個工作項目類型定義的條件數目降至最低。 透過您加入的每個條件式規則,您會增加每當小組成員儲存工作項目時所發生之驗證處理程序的複雜度。 複雜的規則集可能會增加儲存工作項目所需的時間。

下列範例示範一些要套用至 MSF Agile Software Development 2013 流程範本中系統欄位的規則。

當狀態變更時變更欄位的值

在將工作項目的 [狀態] 欄位值設為 [作用中] 且儲存該工作項目時,[啟動者] 和 [指派至] 欄位的值會自動設為目前使用者的名稱。 該使用者必須是 Team Foundation Server Valid Users 群組的成員。 [啟動日期] 欄位的值也會自動設定。 下列範例示範強制執行此規則的項目:

<STATE value="Active">
<FIELDS>
   <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
      <COPY from="currentuser"/>
      <VALIDUSER/>
      <REQUIRED/>
   </FIELD>
   <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
      <SERVERDEFAULT from="clock"/></FIELD>
   <FIELD refname="System.AssignedTo">
      <DEFAULT from="currentuser"/>
   </FIELD>
. . .
</FIELDS>
</STATE>

當另一個欄位的值變更時清除欄位的值

在將工作項目的 [狀態] 欄位值設為 [作用中] 並儲存該工作項目時,[關閉日期] 和 [關閉者] 欄位會自動設為 Null,而且如果您使用 EMPTY 項目,即會設為唯讀,如下列範例所示。

<STATE value="Active">
   <FIELDS>
. . .
      <FIELD refname="Microsoft.VSTS.Common.ClosedDate"><EMPTY/></FIELD>
      <FIELD refname="Microsoft.VSTS.Common.ClosedBy"><EMPTY/></FIELD>
   </FIELDS>
</STATE>

根據其他欄位的內容定義欄位

在將工作項目的 [狀態] 欄位值設為 [已解決] 並儲存該工作項目時,[已解決的原因] 欄位的值會設為使用者在 [原因] 欄位中指定的值。 下列範例示範強制執行此規則的項目:

<STATE value="Resolved">
   <FIELDS>
. . .
      <FIELD refname="Microsoft.VSTS.Common.ResolvedReason">
         <COPY from="field" field="System.Reason"/>
      </FIELD>
   </FIELDS>
</STATE>

問與答

問:是否有工具可用來變更工作流程或檢視工作流程狀態圖表?

**答:**可以。 您可以變更工作流程,或檢視您使用 Process Editor (適用於 Visual Studio 且功能強大的工具) 定義的工作流程狀態圖表。 如需詳細資訊,請參閱 Microsoft 網站上的下列網頁:Team Foundation Server Power Tools

問:哪裡可以取得 WIT 定義 XML 項目的概觀?

**答:**請參閱 所有 WITD XML 項目參考