[转载]基于TFS实践敏捷-修复Bug和执行代码评审
本主題闡釋了這些功能,以繼續這一關注虛擬敏捷團隊成員的一天的教程。
Peter 忙于編寫一些代碼以完成積壓工作 (backlog) 項任務。但是,他的同事發現了一個阻礙他們工作的 Bug,他想立即修復此 Bug。 他暫停了手中的工作并修復此 Bug。 他請求 Julia 審查修復情況,并在審查后檢查修復結果并恢復其初始任務。
| 說明 |
| Peter 使用的“我的工作”和“代碼評審”功能僅在 Visual Studio 高級專業版和 Visual Studio 旗艦版中可用。 |
主題內容
- 掛起當前工作并開始處理 Bug
- 調查 Bug
- 請求代碼評審
- 接受并執行(或拒絕)代碼評審
- 接收并響應代碼評審
- 修復測試和代碼
- 簽入修復
- 繼續處理任務
?
掛起當前工作
當 Peter 處理積壓工作 (backlog) 項時,Julia 過來討論困擾她的 Bug。 這是 Peter 所熟悉的區域,因此他創建了修復 Bug 的任務,并將其分配給自己。 他決定立即開始修復工作。
在 Peter 開始處理新的 Bug 前,他想確保其當前工作保留在團隊服務器上的安全位置。 在“我的工作”頁上,Peter 選擇“掛起”進行保存(在 Team Foundation Server 上):
- 他完成的所有工作包括對代碼、測試和其他文件的更改。
- 打開解決方案、窗口、斷點、監視窗口變量和其他 Visual Studio 狀態的位。
限制已清理工作區,Peter 將新的任務從“可用工作項”拖動到“正在進行的工作”。 他已準備好研究和編寫修復。
| 說明 |
| 你的工作上下文鏈接到在“我的工作”頁中顯示為“正在進行”的工作項。 通過使用“掛起”和“繼續”,可在不同的任務間快速切換。 打開的解決方案和文件、代碼更改以及 Visual Studio 布局都會一起切換。 |
掛起當前工作并開始執行另一項任務
- 通過選擇“可用工作項”下的“新建”,創建新任務或其他工作項;或
- 在“可用工作項”下選擇不同查詢。
或者,可以從“掛起的工作”項下拖出之前已掛起的工作項來切換到該工作項。
| 提示 |
| 當前正在進行的工作項將鏈接到當前代碼更改和 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 errorTestEqual(1, 1e-5, false); // More than allowed errorTestEqual(1000, 1e-7, true); // Less than allowed errorTestEqual(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.99999999999const double allowedError = 1/1000000;return System.Math.Abs(a - b) < allowedError;}測試現在通過:
?
請求代碼評審
Peter 對自己對 Bug 的修復感到滿意,但是尚未簽入其工作。 Peter 的團隊使用代碼評審來提高整體代碼質量并減小因創建更多 Bug 帶來的風險,因此,他使用團隊資源管理器從團隊同事 Julia 和 Adam 那里請求代碼評審。
請求代碼評審
審閱者將通過電子郵件接收請求通知。
你還可以請求對掛起的工作、擱置集或變更集進行代碼評審。 若要查看變更集的列表,請打開“源代碼管理資源管理器”,然后選擇“歷史記錄”按鈕。
接受或拒絕代碼評審
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 errorTestEqual(1, 1e-5, false); // More than allowed errorTestEqual(1000, 1000*1e-7, true); // Less than allowed errorTestEqual(1000, 1000*1e-5, false); // More than allowed error| 提示 |
| 請注意,團隊成員會將測試用作討論焦點。 如果測試正確且足夠,則代碼也會如此。 與代碼不同,每個測試表示單獨的大小寫。 因此,討論測試通常比討論代碼更容易。? |
執行代碼評審
- 選擇“接受”或“拒絕”以通知作者你是否將執行評審。
- 選擇“添加審閱者”以將其他審閱者添加到代碼審閱請求。
- 查看對每個已為此工作項更新的文件的更改。
- 展開“注釋”以與作者和其他審閱者討論更改。
- 選擇“添加總體評價”?
- 或 -
選擇一個代碼塊,然后從快捷菜單中選擇“添加注釋”。 - 選擇“發送評論”以使你的提交對作者和其他審閱者可見。
- 選擇“添加總體評價”?
- 選擇“發送和完成”以完成審閱,指出是否需要進一步修改代碼。
?
響應代碼評審
Peter 接收并響應了來自 Julia 的代碼評審。
代碼的審閱者和作者可以根據需要交換注釋。 作者一旦關閉評審,則評審就將結束。 每次有人參與討論時,其他參與者都會收到電子郵件通知。
你還可以打開請求的快捷菜單并選擇“打開”。
- “完成”可表明已完成審閱。
- - 或 -
- “放棄”可表明正在取消審閱。
?
修復測試和代碼
閱讀完 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 是否已修復并關閉工作項。
- 所有相關更改都在“包含的更改”中列出
- 所有相關工作項都在“相關工作項”中列出。
?
繼續處理任務
Peter 繼續處理自己的任務。 他很快就可以繼續工作,因為他的所有代碼更改連同重要的狀態圖位(如打開窗口、斷點及觀看窗口變量)都已還原至工作區。
繼續任務中的工作
- 在“團隊資源管理器”中的“我的工作”頁上,查找“掛起的和擱置的工作”列表。 打開項的快捷菜單。 你有兩個選擇:
- 若要繼續掛起的工作并自動掛起工作區中任何掛起的更改,請選擇“繼續”。
- 若要將掛起的工作與工作區中已掛起的更改合并,請選擇“與“正在進行”部分合并”。
當你繼續工作時
當你繼續工作時,Visual Studio 會還原:
- 打開的解決方案
- 代碼更改
- 打開的窗口的狀態和位置
- 斷點
- 監視窗口變量與表達式
- 書簽
?
驗證此 bug 已消失
如果測試團隊發現此 bug,他們會將一些測試用例鏈接到此 bug,并且將重新運行它們。?了解詳細信息。
博客轉自:《ALM?開發人員生活中的一天:暫停工作、修復?Bug?和執行代碼評審》
總結
以上是生活随笔為你收集整理的[转载]基于TFS实践敏捷-修复Bug和执行代码评审的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同步界面
- 下一篇: 如果按银行基准利率存100万,你和银行各