Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
各位夥伴們,
常常在一些研討會中,有來賓問到,一個在 ALM 平台上運作的團隊,其開發成員每日工作大致長什麼樣子? 當然每個團隊所遇到的狀況不同,也不一定要依照以下流程進行,但此文章大致描述了一個開發人員的一天,當發現了一個bug,如何提交到 Team Foundation Server (TFS) 或 Visual Studio Online 中,讓開發人員可以進行修復,修復完成後如何要求同仁進行 Code Review,並進行測試。
微軟開發工具產品經理 Dann Wu 吳典璋
-----------------------------------------------------------------------------------------------------
Visual Studio Premium 和 Visual Studio Ultimate 中透過 Team Foundation Server 提供了只要按一下的強大切換方式,可讓您將工作內容從某個工作執行緒切換至另一個執行緒。 此外,小組成員也可以輕鬆交換有關程式碼變更建議的訊息。 本主題將說明這些功能,接著提供的教學課程將跟隨虛擬的敏捷式小組成員度過一天。
Peter 忙於撰寫一些程式碼來完成一項待處理項目工作。不過,他的同事發現了阻礙進度的 Bug,他想要立即修正它。 他暫止正在進行的工作並修正 Bug。 然後他請 Julia 檢閱修正結果,並且在檢閱之後簽入修正,再繼續處理原本正在進行的工作。
注意事項 |
|---|
Peter 使用的 [我的工作] 和 [程式碼檢閱] 功能只能在 Visual Studio Premium 和 Visual Studio Ultimate 中使用。 |
本主題內容
1. 暫止目前的工作
當 Peter 處理待處理項目時,Julia 前來討論阻礙進度的 Bug。 它位於 Peter 熟悉的區域,所以他建立了修正 Bug 的工作並將它指派給自己。 他決定立即開始進行修正。
在開始處理新的 Bug 之前,Peter 想要確定目前的工作處於小組伺服器上的安全位置。 在 [我的工作] 頁面上,Peter 選擇 [暫止] 進行儲存 (在 Team Foundation Server 上):
他完成的所有工作,包括對程式碼、測試及其他檔案的變更。
開啟方案、視窗、中斷點、監看式視窗變數,以及其他相關的 Visual Studio 狀態。
現在 Peter 的工作區是乾淨的,他從 [可用的工作項目] 將新工作拖曳至 [進行中的工作]。 他已準備好研究並撰寫修正。
注意事項 |
|---|
您使用中的內容會連結至 [我的工作] 頁面上顯示為 [進行中] 的工作項目。 您可以使用 [暫止] 和 [繼續],快速切換不同的工作。 開啟的方案和檔案、程式碼變更及 Visual Studio 配置全都會一起切換。 |
若要暫止目前的工作並開始處理不同的工作

連接:如果您尚未連接至要處理的 Team 專案,請連接到 Team 專案:
- 在 [Team Explorer] 中,選擇 [首頁],然後選擇 [我的工作]。
暫止目前的工作:
在 [進行中的工作] 區段中,選擇 [暫止]。
在出現的方塊中,指定要提供給這組暫止工作的名稱,然後選擇 [暫止] 按鈕。 預設名稱是您目前正在進行中的工作項目。
開始處理新工作、Bug 或其他工作項目:
在選取工作項目之前,您可能要:
選擇 [可用的工作項目] 底下的 [新增],建立新工作或其他工作項目,或者
在 [可用的工作項目] 底下選取不同的查詢。
將工作項目從 [可用的工作項目] 拖曳至 [進行中的工作]。
或者,您也可以從 [暫停的工作] 底下將先前暫停的工作項目拖曳出來,以便切換至該工作項目。
提示 |
|---|
目前 [進行中] 的工作項目會與您目前的程式碼變更和 Visual Studio 狀態連結。 若要讓 Visual Studio 協助您組織工作,當您在工作之間切換時,請確定適當的項目處於 [進行中] 狀態。 |
2. 調查 Bug
Peter 開啟並讀取 Bug 工作項目。 根據測試小組成員撰寫的描述,已支付發票有時會誤標為未支付。 Bug 工作項目有附加的實驗室環境快照。 Peter 可以開啟測試執行所在的虛擬機器、查看不正確的發票,以及回頭檢查 IntelliTrace 記錄檔。 他追蹤錯誤來到下列方法:
public class LocalMath
{
public static bool EqualTo(double a, double b)
{
return a == b;
}
從 IntelliTrace 記錄檔中,Peter 看見方法有時會因為參數有極小的差異而傳回 false。 Peter 清楚這類進位錯誤在浮點算術中無法避免,而且測試浮點數是否相等並非理想的做法。
擴大測試以顯示錯誤
當發現 Bug 時,它會顯示在單元測試中有落差,或者測試不符合使用者的實際需求。 因此,在修正 Bug 之前,Peter 增加了一項測試,該測試將會示範這個錯誤。
// Added 2012-02-02 for bug 654321:
/// <summary>
/// Make sure that number equality test allows for
/// small rounding errors.
/// </summary>
[TestMethod]
public void TestDoublesEqual()
{
// We allow a rounding error of 1 in 1000000:
TestEqual(1, 1e-7, true); // Less than allowed error
TestEqual(1, 1e-5, false); // More than allowed error
TestEqual(1000, 1e-7, true); // Less than allowed error
TestEqual(1000, 1e-5, false); // More than allowed error
}
private void TestEqual(double value, double error, bool result)
{
// Try different combinations of error and value:
Assert.IsTrue(result == LocalMath.EqualTo(value + error, value));
Assert.IsTrue(result == LocalMath.EqualTo(value, value + error));
Assert.IsTrue(result == LocalMath.EqualTo(value - error, value));
Assert.IsTrue(result == LocalMath.EqualTo(value, value - error));
}
他執行測試,並且測試一如預期地失敗。
![顯示失敗之測試的 [單元測試總管],這些測試是比較是否相同的測試。 顯示失敗之測試的 [單元測試總管],這些測試是比較是否相同的測試。](https://i.msdn.microsoft.com/dynimg/IC703090.png)
讓測試成功
Peter 修正程式碼:
public static bool EqualTo(double a, double b)
{
// Allow for rounding errors.
// For example, a == 2.0 and b = 1.99999999999
const double allowedError = 1/1000000;
return System.Math.Abs(a - b) < allowedError;
}
現在測試會成功:
![顯示成功之測試的 [單元測試總管],這些測試是比較是否相同的測試。 顯示成功之測試的 [單元測試總管],這些測試是比較是否相同的測試。](https://i.msdn.microsoft.com/dynimg/IC703091.png)
3. 要求程式碼檢閱
Peter 對於 Bug 修正的結果感到滿意,但尚未簽入他的工作。 他的小組使用程式碼檢閱將整體程式碼品質提高並減少建立更多 Bug 的風險,因此 Peter 使用 Team Explorer 要求組員 Julia 和 Adam 進行程式碼檢閱。
若要要求程式碼檢閱

在 [Team Explorer] 的 [我的工作] 頁面上,選擇 [要求檢閱]。
[新增程式碼檢閱] 頁面隨即出現。
指定一位或多位檢閱者。
指定檢閱的名稱。
指定區域路徑。
指定給檢閱者的註解。選擇 [送出要求]。
檢閱者將會收到要求的電子郵件通知。
您也可以要求對暫止的工作、擱置集或變更集進行程式碼檢閱。 若要查看變更集的清單,請開啟 [原始檔控制總管] 並選擇 [記錄] 按鈕。
4. 接受或拒絕程式碼檢閱
Julia 會收到程式碼檢閱要求並接受要求。 她會檢閱程式碼,在文件和程式碼區塊層級撰寫一些註解,然後將程式碼檢閱送回給 Peter。 Adam 太忙碌而無法檢視程式碼,因此會拒絕要求。
Julia 在註解中指出測試錯誤。 允許的錯誤應該是指定的輸入值分數,而不是常數數量。 因此測試應該將錯誤乘以值。
// We allow a rounding error of 1 in 1000000
// as a fraction of the value:
TestEqual(1, 1e-7, true); // Less than allowed error
TestEqual(1, 1e-5, false); // More than allowed error
TestEqual(1000, 1000*1e-7, true); // Less than allowed error
TestEqual(1000, 1000*1e-5, false); // More than allowed error
提示 |
|---|
請注意,小組成員會使用測試做為討論的焦點。 如果測試正確且已足夠,程式碼也將如此。 與程式碼不同的是,每項測試都代表一個獨立的案例。 因此,測試通常比程式碼容易進行討論。 |
若要執行程式碼檢閱


在 [Team Explorer] 的 [我的工作] 頁面上,移至 [我的程式碼檢閱與要求] 區段並開啟要求。
在 [程式碼檢閱] 頁面上,您可以:
選擇 [接受] 或 [拒絕] 以通知作者您是否要執行檢閱。
選擇 [加入檢閱者] 將其他檢閱者加入至程式碼檢閱要求。
檢視針對此工作項目更新之每個檔案的變更。
展開 [註解],與作者及其他檢閱者討論變更。
選擇 [加入整體註解]
-或-
選取程式碼區塊,然後從捷徑功能表選擇 [加入註解]。
- 選擇 [傳送註解],讓作者和其他檢閱者看得見您的貢獻。
選擇 [傳送並完成] 完成您的檢閱,並指出程式碼是否需要進行更多處理。
5. 回應程式碼檢閱
Peter 收到來自 Julia 的程式碼檢閱並予以回應。
若要回應程式碼檢閱
程式碼的檢閱者和作者可以隨心所欲地多次交換註解。 當作者關閉檢閱時,檢閱就會結束。 有其他討論內容時,會透過電子郵件通知其他參與者。

在 [Team Explorer] 的 [我的工作] 頁面上,移至 [程式碼檢閱與要求] 區段並按兩下要求。
您也可以開啟要求的捷徑功能表,並選擇 [開啟]。
讀取註解並依需要回覆。 若要回覆註解,請選擇 [回覆],在出現的方塊中輸入您的註解,然後選擇 [確定]。 若要傳送您的註解,請選擇 [傳送註解]。
若要檢視檔案並查看具有註解的程式碼區塊,或是編輯檔案,請移至 [註解] 區段。 在 [檔案] 子區段中,開啟檔案的捷徑功能表,並選擇 [比較 (唯讀)] 或 [編輯檔案。]。
當您和其他檢閱者完成回應彼此的註解,並且準備好要結束檢閱時,請按一下 [關閉檢閱],然後選擇:
[完成],表示檢閱已完成。
-或-
[放棄],表示您取消檢閱。
6. 修正測試和程式碼
讀取 Julia 的註解後,Peter 依據她的建議修正單元測試。 現在測試失敗。 這表示程式碼還是不正確。
Peter 修正程式碼:
/// <summary>
/// Returns true if two numbers are equal.
/// </summary>
public static bool EqualTo(double a, double b)
{
// Allow for rounding errors.
const double allowedErrorMultiple = 1/1000000;
double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/2;
return System.Math.Abs(a - b) < allowedError;
}
測試再次成功:
![顯示成功之測試的 [單元測試總管],這些測試是比較是否相同的測試。 顯示成功之測試的 [單元測試總管],這些測試是比較是否相同的測試。](https://i.msdn.microsoft.com/dynimg/IC703091.png)
提示 |
|---|
若要修正 Bug,請依照程式碼開發中的做法進行。 撰寫一項會失敗的測試,然後讓測試成功。 只有在測試成功時,才簽入程式碼和測試。 |
Peter 現在注意到發現 Bug 的測試案例。 重現 Bug 的步驟在測試案例工作項目中有清楚的描述。 他依照這些步驟進行,並發現發票內容正確列出。
7. 簽入修正
Peter 簽入了修正的程式碼和單元測試。 Bug 的狀態會自動設定為 [已解決],而且 [指派給] 值會自動重新指派給發現 Bug 的測試小組成員。 該小組成員將確認 Bug 已修正並關閉工作項目。
若要簽入修正

在 [Team Explorer] 的 [我的工作] 頁面上,選擇 [簽入]。
檢閱 [暫止的變更] 頁面的內容,以確定:
所有相關的變更都在 [包含的變更] 中列出
所有相關的工作項目都在 [相關工作項目] 中列出。
指定 [註解],在您的小組查看已變更檔案和資料夾的版本控制記錄時,幫助其了解這些變更的目的。
選擇 [簽入]。
8. 繼續處理工作
Peter 繼續處理他的工作。 他能夠快速回到工作,是因為他所有的程式碼變更連同重要的狀態部分 (例如開啟的視窗、中斷點、監看式視窗變數) 都已一併還原到他的工作區。
若要繼續處理工作

在 [Team Explorer] 的 [我的工作] 頁面上,尋找 [已暫停且擱置的工作] 清單。 開啟項目的捷徑功能表。 您有兩種選擇:
如果要繼續執行暫停的工作並自動暫停工作區中任何暫止的變更,請選擇 [繼續]。
如果您想要將暫停的工作與工作區中已存在的暫止變更合併,請選擇 [與進行中項目合併]。
當您繼續工作

當您繼續工作時,Visual Studio 會還原:
開啟的方案
程式碼變更
開啟視窗的狀態和位置
中斷點
監看式視窗變數和運算式
書籤
[延伸閱讀]
注意事項