暫止工作、 修正 Bug,並進行程式碼檢閱
Visual Studio Premium 和 Visual Studio Ultimate 中透過 Team Foundation Server 提供了只要按一下的強大切換方式,可讓您將工作內容從某個工作執行緒切換至另一個執行緒。 此外,小組成員也可以輕鬆交換有關程式碼變更建議的訊息。 本主題將說明這些功能,接著提供的教學課程將跟隨虛擬的敏捷式小組成員度過一天。
Peter 忙於撰寫一些程式碼來完成一項待處理項目工作。不過,他的同事發現了阻礙進度的 Bug,他想要立即修正它。 他暫止正在進行的工作並修正 Bug。 然後他請 Julia 檢閱修正結果,並且在檢閱之後簽入修正,再繼續處理原本正在進行的工作。
注意事項 |
---|
Peter 使用的 [我的工作] 和 [程式碼檢閱] 功能只能在 Visual Studio Premium 和 Visual Studio Ultimate 中使用。 |
本主題內容
暫止目前的工作並開始處理 Bug
調查 Bug
要求程式碼檢閱
接受並執行 (或拒絕) 程式碼檢閱
接收並回應程式碼檢閱
修正測試和程式碼
簽入修正
繼續處理工作
暫止目前的工作
當 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 協助您組織工作,當您在工作之間切換時,請確定適當的項目處於 [進行中] 狀態。
調查 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));
}
他執行測試,並且測試一如預期地失敗。
讓測試成功
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;
}
現在測試會成功:
要求程式碼檢閱
Peter 對於 Bug 修正的結果感到滿意,但尚未簽入他的工作。 他的小組使用程式碼檢閱將整體程式碼品質提高並減少建立更多 Bug 的風險,因此 Peter 使用 Team Explorer 要求組員 Julia 和 Adam 進行程式碼檢閱。
若要要求程式碼檢閱
在 [Team Explorer] 的 [我的工作] 頁面上,選擇 [要求檢閱]。
[新增程式碼檢閱] 頁面隨即出現。
指定一位或多位檢閱者。
指定檢閱的名稱。
指定區域路徑。
指定給檢閱者的註解。
選擇 [送出要求]。
檢閱者將會收到要求的電子郵件通知。
您也可以要求對暫止的工作、擱置集或變更集進行程式碼檢閱。 若要查看變更集的清單,請開啟 [原始檔控制總管] 並選擇 [記錄] 按鈕。
接受或拒絕程式碼檢閱
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] 的 [我的工作] 頁面上,移至 [我的程式碼檢閱與要求] 區段並開啟要求。
在 [程式碼檢閱] 頁面上,您可以:
選擇 [接受] 或 [拒絕] 以通知作者您是否要執行檢閱。
選擇 [加入檢閱者] 將其他檢閱者加入至程式碼檢閱要求。
檢視針對此工作項目更新之每個檔案的變更。
展開 [註解],與作者及其他檢閱者討論變更。
選擇 [加入整體註解]
-或-
選取程式碼區塊,然後從捷徑功能表選擇 [加入註解]。
- 選擇 [傳送註解],讓作者和其他檢閱者看得見您的貢獻。
選擇 [傳送並完成] 完成您的檢閱,並指出程式碼是否需要進行更多處理。
回應程式碼檢閱
Peter 收到來自 Julia 的程式碼檢閱並予以回應。
若要回應程式碼檢閱
程式碼的檢閱者和作者可以隨心所欲地多次交換註解。 當作者關閉檢閱時,檢閱就會結束。 有其他討論內容時,會透過電子郵件通知其他參與者。
在 [Team Explorer] 的 [我的工作]] 頁面上,移至 [程式碼檢閱與要求] 區段並按兩下要求。
您也可以開啟要求的捷徑功能表,並選擇 [開啟]。
讀取註解並依需要回覆。 若要回覆註解,請選擇 [回覆],在出現的方塊中輸入您的註解,然後選擇 [確定]。 若要傳送您的註解,請選擇 [傳送註解]。
若要檢視檔案並查看具有註解的程式碼區塊,或是編輯檔案,請移至 [註解] 區段。 在 [檔案] 子區段中,開啟檔案的捷徑功能表,並選擇 [比較 (唯讀)] 或 [編輯檔案。]。
當您和其他檢閱者完成回應彼此的註解,並且準備好要結束檢閱時,請按一下 [關閉檢閱],然後選擇:
[完成],表示檢閱已完成。
-或-
[放棄],表示您取消檢閱。
修正測試和程式碼
讀取 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;
}
測試再次成功:
提示
若要修正 Bug,請依照程式碼開發中的做法進行。撰寫一項會失敗的測試,然後讓測試成功。只有在測試成功時,才簽入程式碼和測試。
Peter 現在注意到發現 Bug 的測試案例。 重現 Bug 的步驟在測試案例工作項目中有清楚的描述。 他依照這些步驟進行,並發現發票內容正確列出。
簽入修正
Peter 簽入了修正的程式碼和單元測試。 Bug 的狀態會自動設定為 [已解決],而且 [指派給] 值會自動重新指派給發現 Bug 的測試小組成員。 該小組成員將確認 Bug 已修正並關閉工作項目。
若要簽入修正
在 [Team Explorer] 的 [我的工作] 頁面上,選擇 [簽入]。
檢閱 [暫止的變更] 頁面的內容,以確定:
所有相關的變更都在 [包含的變更] 中列出
所有相關的工作項目都在 [相關工作項目] 中列出。
指定 [註解],在您的小組查看已變更檔案和資料夾的版本控制記錄時,幫助其了解這些變更的目的。
選擇 [簽入]。
繼續處理工作
Peter 繼續處理他的工作。 他能夠快速回到工作,是因為他所有的程式碼變更連同重要的狀態部分 (例如開啟的視窗、中斷點、監看式視窗變數) 都已一併還原到他的工作區。
若要繼續處理工作
在 [Team Explorer] 的 [我的工作] 頁面上,尋找 [已暫停且擱置的工作] 清單。 開啟項目的捷徑功能表。 您有兩種選擇:
如果要繼續執行暫停的工作並自動暫停工作區中任何暫止的變更,請選擇 [繼續]。
如果您想要將暫停的工作與工作區中已存在的暫止變更合併,請選擇 [與進行中項目合併]。
當您繼續工作
當您繼續工作時,Visual Studio 會還原:
開啟的方案
程式碼變更
開啟視窗的狀態和位置
中斷點
監看式視窗變數和運算式
書籤
確認 Bug 已消失
如果 Bug 由測試小組發現,他們會連結部分測試案例到該 Bug,並且重新執行測試案例。 進一步了解。