軟件開發(fā)通常被認(rèn)為是一個(gè)困難的過程。關(guān)于如何改進(jìn)應(yīng)用程序開發(fā)過程以產(chǎn)生更好、更一致的結(jié)果,人們已經(jīng)進(jìn)行了大量的研究,并編寫了大量書籍。困難并不在于人們想不出新的、更好的主意來開發(fā)軟件,而是無法以有意義的方式實(shí)際實(shí)現(xiàn)這些想法。使用 Visual Studio?2005 Team System,Microsoft 正在步入一個(gè)重要的階段來幫助開發(fā)小組生成健壯的軟件系統(tǒng)。
![]() |
Team System 利用一個(gè)新的源代碼管理系統(tǒng)擴(kuò)展了 Visual Studio 2005 的功能。Team System 也包含適用于開發(fā)人員的單元測(cè)試和代碼分析工具。然而,Microsoft 已經(jīng)拓寬了它關(guān)注的焦點(diǎn),即不僅僅提供用于開發(fā)人員的工具,現(xiàn)在還包括了支持整個(gè)開發(fā)團(tuán)隊(duì)的工具。Team System 包括用于幫助項(xiàng)目管理人員、架構(gòu)師、開發(fā)人員、測(cè)試人員,甚至是開發(fā)管理人員的工具。Team System 包括一個(gè)新的工作項(xiàng)跟蹤系統(tǒng)(用于管理開發(fā)任務(wù)和過程實(shí)現(xiàn)),以及一個(gè) Web 門戶網(wǎng)站(允許開發(fā)過程的一個(gè)透明級(jí)別)。
本文,我會(huì)通過 Visual Studio 2005 December Community Technology Preview (CTP) 對(duì) Team System 進(jìn)行概述。我會(huì)說明如何建立開發(fā)項(xiàng)目,并探討從項(xiàng)目初期到測(cè)試階段的所有開發(fā)過程步驟。較之于在提供產(chǎn)品最終版本時(shí)需要進(jìn)行 Team System 的安裝而言,安裝 December CTP 附帶的 Team System 版本要略困難一些。CTP 支持一個(gè)非常特殊的環(huán)境,該環(huán)境需要有多臺(tái)計(jì)算機(jī)或虛擬機(jī)才能進(jìn)行安裝。盡管 DVD 或下載中提供的安裝指導(dǎo)是正確的,但是為了使一切都正常運(yùn)行,您可能需要其他一些幫助。您也可以參考我的注釋,以及在以下網(wǎng)絡(luò)日記中發(fā)布的其他一些相關(guān)內(nèi)容:weblogs.asp.net/cmenegay、blogs.msdn.com/robcaron 和 blogs.msdn.com/askburton。項(xiàng)目方法
過去,Visual Studio 只是一個(gè)針對(duì)開發(fā)人員的工具。因此,它為開發(fā)項(xiàng)目的其他階段(例如,需求收集、設(shè)計(jì)和測(cè)試)提供了很少的幫助。然而,Team System 旨在支持更多的項(xiàng)目相關(guān)人員,而不僅僅是開發(fā)人員。它意在支持整個(gè)開發(fā)生命周期,以及該生命周期中涉及到的人。
Team System 最大的優(yōu)勢(shì)在于它是根據(jù)對(duì)過程的理解生成的。除了認(rèn)為具有某種形式的過程可能是有益的之外,Microsoft 很少對(duì)有關(guān)過程究竟如何作出假設(shè),因此內(nèi)置了很大的靈活性。Team System 使用 Microsoft 稱為“方法模板”的工具來定義過程。您可以開發(fā)自己的方法,也可以使用 Team System 附帶的某個(gè)方法,甚至可以獲取第三方的方法模板。過去,很多開發(fā)團(tuán)隊(duì)并沒有實(shí)現(xiàn)正規(guī)過程,這是因?yàn)椴杉{并實(shí)現(xiàn)正規(guī)過程需要投入大量的時(shí)間和金錢。使用 Team System,該過程將成為團(tuán)隊(duì)日常使用的工具的一部分,從而可為更多的開發(fā)團(tuán)隊(duì)所使用。
Microsoft 目前建立了一個(gè)稱為 Microsoft?Solutions Framework (MSF) 的開發(fā)過程,它目前的版本是 3.0。MSF 還沒有廣為開發(fā)人員所采用,甚至在 Microsoft 也是如此,也許它被認(rèn)為是難于學(xué)習(xí)和使用的。Microsoft 正在將 MSF 更新為 4.0 版本,并確認(rèn)會(huì)隨 Team System 一起提供 MSF 4.0 的兩個(gè)不同版本:MSF Formal(在 Beta 1 Refresh 中也稱為 MSF Complete)和 MSF Agile。[編者更新 — 3/24/2005:MSF Formal 已重命名為 MSF for CMMI Process Improvement,而 MSF Agile 已重命名為 MSF for Agile Software Development。]這兩種方法都是作為模板實(shí)現(xiàn)的,并集成到 Visual Studio。December 2004 CTP 只包含對(duì) MSF Agile 的支持。具有正規(guī)過程的公司很可能會(huì)將其現(xiàn)有過程移到 Team System 中,而那些以前沒實(shí)現(xiàn)正規(guī)方法的公司將使用 MSF Formal 或 MSF Agile。
然而,并不是開發(fā)過程的所有成員都有(或者甚至希望擁有)Visual Studio。為了滿足非開發(fā)人員的需要,還提供了 Project Portal 和 Team Foundation Client,從而可以使更多的用戶可訪問 Team System 的許多新功能。從本質(zhì)上講,Team Foundation Client 是移除了所有開發(fā)功能并保留了所有 Team System 功能的 Visual Studio 2005 版本。這意味著本文涉及到的大部分過程也應(yīng)該應(yīng)用于 Team Foundation Client。
MSF Agile
MSF Formal 是一個(gè)旨在獲得 CMMI Level 3 Compliance 的過程,而 MSF Agile 意在更加靈活,在設(shè)計(jì)上是重復(fù)的。沒有單獨(dú)的過程能夠很好地適合所有項(xiàng)目,因此公司可能根據(jù)具體開發(fā)工作的需要來采用過程。對(duì) MSF Agile 早期概況的了解,可以從 MSF for Agile Software Development 下載。
MSF Agile 支持以下五種角色:架構(gòu)師、業(yè)務(wù)分析師、開發(fā)人員、項(xiàng)目管理人員和測(cè)試人員。當(dāng)您閱讀以下幾個(gè)關(guān)于過程和團(tuán)隊(duì)開發(fā)的段落時(shí),請(qǐng)緊記這五個(gè)不同的角色,以及業(yè)務(wù)用戶/發(fā)起人和 IT 管理。Team System 具有適用于所有這些不同個(gè)體類型的功能。
創(chuàng)建團(tuán)隊(duì)項(xiàng)目
既然我已經(jīng)簡(jiǎn)要介紹了 Team System 的全部用途,現(xiàn)在我要說明項(xiàng)目的建立過程,該項(xiàng)目在 Beta 1 Refresh 中稱為公文包項(xiàng)目(在后續(xù)版本中將稱為團(tuán)隊(duì)項(xiàng)目)。加載 Visual Studio 2005 December CTP 之后,您首先需要連接到一臺(tái) Team Foundation Server (TFS),該服務(wù)器應(yīng)該運(yùn)行在某個(gè)其他系統(tǒng)或虛擬機(jī)上。TFS 是一個(gè)提供許多 Team System 團(tuán)隊(duì)功能的服務(wù)器平臺(tái)。TFS 提供的一些功能是新的源代碼控制系統(tǒng)、工作項(xiàng)跟蹤和團(tuán)隊(duì)門戶網(wǎng)站。
要將 Visual Studio 連接到 TFS 計(jì)算機(jī),請(qǐng)使用“Tools”菜單下的選項(xiàng)“Connect to Team Foundation Server”。該安裝說明會(huì)幫助您連接到 TFS 計(jì)算機(jī)。連接后,您會(huì)看到 Team Explorer 窗口。Team Explorer 是 TFS 的視圖,它與提供有關(guān) SQL Server 數(shù)據(jù)庫信息的 Server Explorer 非常類似。Team Explorer 是一個(gè)很棒的工具。您可能想盡快熟悉它,因?yàn)槟鷷?huì)定期使用它。
連接到 TFS 之后,您可以創(chuàng)建團(tuán)隊(duì)項(xiàng)目。團(tuán)隊(duì)項(xiàng)目是 TFS 的主要優(yōu)勢(shì)之一。團(tuán)隊(duì)項(xiàng)目是一個(gè)可在其中訪問并使用與項(xiàng)目相關(guān)的所有構(gòu)件(包括設(shè)計(jì)文檔、工作項(xiàng)和項(xiàng)目計(jì)劃)的地方。您將為進(jìn)行的每個(gè)開發(fā)項(xiàng)目創(chuàng)建一個(gè)團(tuán)隊(duì)項(xiàng)目。要在 Team Explorer 中進(jìn)行此操作,請(qǐng)使用“New Team Project”工具欄按鈕。也可以從 Team Explorer 右鍵單擊 TFS Server,并在那里創(chuàng)建團(tuán)隊(duì)項(xiàng)目。您還具有將現(xiàn)有團(tuán)隊(duì)項(xiàng)目添加到 Team Explorer 窗體的選項(xiàng)。在建立團(tuán)隊(duì)項(xiàng)目時(shí),您必須選擇您要使用哪種方法模板,如圖 1 所示。另外,您具有建立新源代碼控制文件夾或從現(xiàn)有代碼基分支的選項(xiàng)。我會(huì)以 MSF Agile 為例進(jìn)行闡述。
創(chuàng)建一個(gè)新團(tuán)隊(duì)項(xiàng)目
當(dāng)您建立一個(gè)團(tuán)隊(duì)項(xiàng)目時(shí),會(huì)發(fā)生一些情況。關(guān)鍵的一點(diǎn)是 Windows SharePoint? 服務(wù) (WSS) 團(tuán)隊(duì)站點(diǎn)的創(chuàng)建。TFS 與 WSS 集成以提供其大量的文檔管理功能。WSS 也有可供 TFS 使用的協(xié)作功能。如果您打開瀏覽器并轉(zhuǎn)到 http://tfsserver/sites/project,您會(huì)看到由 TFS 創(chuàng)建的團(tuán)隊(duì)站點(diǎn)主頁。這是一個(gè) WSS 站點(diǎn),可供任何具有適當(dāng)權(quán)限的人訪問。這是一種可以使業(yè)務(wù)用戶和管理訪問并了解項(xiàng)目狀態(tài)的好方式。
有了團(tuán)隊(duì)項(xiàng)目后,您可能想在進(jìn)一步開展項(xiàng)目之前配置項(xiàng)目。為此,可以在 Team Explorer 中右鍵單擊您的項(xiàng)目,并選擇“Team Project Settings | Classifications”。“Settings”菜單選項(xiàng)允許您設(shè)置安全權(quán)限和源代碼控制策略,以及建立您的項(xiàng)目結(jié)構(gòu)。如果選擇 MSF Agile,默認(rèn)情況下,目前您的項(xiàng)目中添加了三個(gè)迭代。您可以對(duì)這些迭代進(jìn)行重命名、移除或添加。例如,如果您想有六個(gè)階段的增強(qiáng)演示,則可以將它們?cè)O(shè)置為迭代。稍后,當(dāng)您創(chuàng)建工作項(xiàng)時(shí),它們可以與您的整個(gè)項(xiàng)目中的特定迭代相關(guān)聯(lián)。請(qǐng)記住,您可以對(duì)方法模板進(jìn)行控制,因此不會(huì)覺得為該過程所限。
項(xiàng)目計(jì)劃和工作項(xiàng)
從項(xiàng)目管理的角度看,Team System 提供的一個(gè)主要好處是一個(gè)名為工作項(xiàng)跟蹤的功能。諸如單元測(cè)試、更好的源代碼控制和代碼分析等功能可以使開發(fā)人員非常興奮。另一方面,項(xiàng)目管理人員、企業(yè)股東和 IT 管理人員也會(huì)對(duì)名副其實(shí)的工作項(xiàng)跟蹤功能興奮異常。軟件開發(fā)過程中需要完成的每個(gè)任務(wù)都可以被認(rèn)為是一個(gè)工作項(xiàng)。它們包括文檔任務(wù)、設(shè)計(jì)任務(wù)、開發(fā)任務(wù)、錯(cuò)誤或需求。此時(shí)您可能想,您已經(jīng)在 Microsoft Project 甚至是 Excel 中將工作項(xiàng)作為任務(wù)進(jìn)行管理了。但實(shí)際情況是,多數(shù)人僅僅是在這些工具中創(chuàng)建任務(wù),而沒有實(shí)際跟蹤或管理它們。
考慮到您當(dāng)前的跟蹤過程,請(qǐng)思考以下問題的答案:設(shè)計(jì)文檔是完整的嗎?為特定的開發(fā)人員分配了多少任務(wù)?已經(jīng)完成了多少任務(wù)?哪些任務(wù)遠(yuǎn)沒有完成?任務(wù)沒有及時(shí)完時(shí)會(huì)對(duì)日程安排產(chǎn)生怎樣的影響?誠(chéng)然,許多公司已經(jīng)有能力回答這些問題了。然而,項(xiàng)目管理人員需要為此和團(tuán)隊(duì)其他人員(包括開發(fā)人員、業(yè)務(wù)分析人員和測(cè)試人員)進(jìn)行良好的交流。項(xiàng)目管理人員必須和所有這些人員進(jìn)行談話,以便準(zhǔn)確評(píng)估項(xiàng)目狀態(tài)。跟蹤任務(wù)狀態(tài)通常是通過項(xiàng)目狀態(tài)會(huì)議、個(gè)人談話或電子郵件實(shí)現(xiàn)的。 Team System 的目標(biāo)之一是簡(jiǎn)化數(shù)據(jù)收集、跟蹤和報(bào)告這一過程。
當(dāng)您選擇了要使用的方法模板后(您可能記得,我選擇了 MSF Agile),會(huì)自動(dòng)為您創(chuàng)建幾個(gè)任務(wù)(工作項(xiàng))。之所以這樣,是因?yàn)樵?MSF Agile 過程中,需要完成某些任務(wù)。圖 2 顯示了當(dāng)我使用 MSF Agile 建立團(tuán)隊(duì)項(xiàng)目時(shí)所創(chuàng)建的工作項(xiàng)示例。
MSF Agile 中的工作項(xiàng)
工作項(xiàng)非常類似于 Microsoft 項(xiàng)目中的任務(wù),因?yàn)樗鼈兛梢苑峙浣o人員。它們有一個(gè)狀態(tài)和持續(xù)時(shí)間。當(dāng)人們完成他們的工作項(xiàng)時(shí),他們可以更改這些工作項(xiàng)的狀態(tài),并使該狀態(tài)反映在 WSS 團(tuán)隊(duì)站點(diǎn)上。該 WSS 站點(diǎn)基于由 TFS 存儲(chǔ)在 SQL Server 中的數(shù)據(jù)、利用SQL Server?報(bào)告服務(wù)顯示不同的報(bào)告。您能夠創(chuàng)建自己的報(bào)告,然后使用自定義 Web 部件將其集成到 SharePoint 中。但是,請(qǐng)注意,這些報(bào)告并不是 December 2004 CTP 中的可用組件。
項(xiàng)目文檔
基于 MSF Agile 方法,該過程的早期步驟之一是開始創(chuàng)建某個(gè)文檔。該文檔可以是業(yè)務(wù)情況、方案,甚者是項(xiàng)目計(jì)劃,這主要取決于您在過程中所處的位置。創(chuàng)建的文檔將取決于您使用的方法。要在 Team System 的上下文中創(chuàng)建這些文檔,您可以使用 Team Explorer(也可以通過團(tuán)隊(duì)門戶網(wǎng)站進(jìn)行此操作)。如果向下追溯到 Documents 節(jié)點(diǎn),您將能夠右鍵單擊并選擇“Add a Document”。當(dāng)您指定哪個(gè)方法用于項(xiàng)目時(shí),Team System 會(huì)配置將用于多種項(xiàng)目文檔的適當(dāng)模板。然后,當(dāng)選擇“Add a Document”時(shí),會(huì)提示您通過選擇適當(dāng)?shù)哪0鍋磉x擇您想添加的文檔類型。模板包括 Design、Lifecycle、Plans、Project Management、Requirements Scenarios and Features 的選項(xiàng)。選擇模板后,您將用適當(dāng)?shù)墓ぞ撸ɡ纾琈icrosoft Word 或 Excel)編輯文檔。
創(chuàng)建的文檔存儲(chǔ)在宿主項(xiàng)目的 WSS 站點(diǎn)中。這使您公司的人員只需將瀏覽器導(dǎo)航到適當(dāng)?shù)恼军c(diǎn),就能訪問該文檔。直接添加到門戶網(wǎng)站的文檔將在 Team Explorer 中顯示。要查看 Team Explorer 中新添加的文檔,請(qǐng)右鍵單擊 ocument 節(jié)點(diǎn)并選擇“Refresh”。此時(shí),項(xiàng)目管理人員可能希望創(chuàng)建一個(gè)實(shí)際的項(xiàng)目計(jì)劃。使用 Team System,這樣做非常有趣,當(dāng)然,前提是假定您發(fā)現(xiàn)創(chuàng)建項(xiàng)目計(jì)劃和跟蹤任務(wù)是十分有趣的。至少 Team System 可以使您的項(xiàng)目管理更加簡(jiǎn)單,為此我非常興奮!
在 Team System 中創(chuàng)建項(xiàng)目計(jì)劃的過程相當(dāng)簡(jiǎn)單。為此,您可以在 Team Explorer 中導(dǎo)航到“Documents | Project Management”并右鍵單擊。這里,上下文菜單包含一個(gè)選項(xiàng) —“Create Microsoft Project Plan”。Team System 也支持在 Excel 電子表格中跟蹤項(xiàng)目任務(wù),而且您將以與此類似的方式創(chuàng)建一個(gè)電子表格。
Team System 的一個(gè)實(shí)際好處是它與 Project 或 Excel 的關(guān)系。當(dāng)您將 Visual Studio 2005 December CTP 安裝在一臺(tái)已安裝有Microsoft Project 或 Excel 的計(jì)算機(jī)上時(shí),就會(huì)有其他一些功能添加到這些應(yīng)用程序中。特別地,您會(huì)有一個(gè) Work Items 菜單,以及一個(gè)允許您與 Team Foundation Server 進(jìn)行交互的新工具欄。重要的功能是您可以使項(xiàng)目計(jì)劃任務(wù)與 Team System 中的工作項(xiàng)同步。
該過程首先創(chuàng)建一個(gè)項(xiàng)目計(jì)劃,并導(dǎo)入作為團(tuán)隊(duì)項(xiàng)目創(chuàng)建的一部分而創(chuàng)建的原始工作項(xiàng)。然后,您需要添加并分配其他任務(wù),并使項(xiàng)目計(jì)劃任務(wù)與 Team System 的工作項(xiàng)數(shù)據(jù)庫同步。當(dāng)開發(fā)人員處理完任務(wù)并將代碼簽入到源代碼控制中時(shí),他們會(huì)從 Visual Studio 更新工作項(xiàng)狀態(tài)。工作項(xiàng)狀態(tài)數(shù)據(jù)可以通過工作項(xiàng)報(bào)告在團(tuán)隊(duì)門戶網(wǎng)站上使用。然后,項(xiàng)目管理人員可以使項(xiàng)目計(jì)劃與工作項(xiàng)數(shù)據(jù)庫同步,以便使信息保持最新,并獲取最新的狀態(tài)。
圖3顯示了帶有從 Team System 導(dǎo)入并用作 Project 任務(wù)的 Microsoft Project。您會(huì)注意到一個(gè)用來與 Team Foundation Server 交互的新工具欄。該集成在 Excel 和 Project 中可用。這是基于客戶反饋添加的,以便適應(yīng)那些選擇用 Excel(而不是 Project)管理其項(xiàng)目任務(wù)的用戶。
當(dāng)項(xiàng)目計(jì)劃準(zhǔn)備好之后,應(yīng)該使其與 Team System 同步,以便項(xiàng)目團(tuán)隊(duì)成員會(huì)知道自己分到的工作項(xiàng)。如果您是一位開發(fā)人員,這樣做的好處是,您可以在無需退出 Visual Studio 的情況下接收工作項(xiàng)列表。您只需導(dǎo)航到 Team Explorer 中的 Work Items 并打開 My Work Items 或 My Active Work Items 即可。這種簡(jiǎn)便的方法減輕了開發(fā)人員的負(fù)擔(dān),而且可以減少項(xiàng)目管理人員和開發(fā)人員之間的會(huì)議次數(shù)。
設(shè)計(jì)您的應(yīng)用程序
從開發(fā)人員的角度講,當(dāng)分配了針對(duì)開發(fā)人員任務(wù)的工作項(xiàng)后,您就可以開始設(shè)計(jì)您的應(yīng)用程序并編寫代碼。但愿項(xiàng)目計(jì)劃上的一個(gè)或多個(gè)任務(wù)能夠?qū)嶋H代表應(yīng)用程序的設(shè)計(jì)階段。請(qǐng)注意,我說的設(shè)計(jì)是在編寫代碼之前。Team System 附帶了很棒的設(shè)計(jì)工具,您可以考慮使用它們。這里我不會(huì)研究關(guān)于設(shè)計(jì)人員的內(nèi)容;有關(guān)更多信息,我向您推薦 Brian A. Randell 和 Rockford Lhotka 撰寫的文章“Bridge the Gap Between Development and Operations with Whitehorse”,該文章出自 MSDN ?Magazine 2004 年 7 月刊。
Team Foundation Version Control
在創(chuàng)建任何設(shè)計(jì)或代碼前,您可能想使用 Team Foundation Version Control 設(shè)置源代碼控制。Team Foundation Version Control(之前代號(hào)為“Hatteras”)是一個(gè)比 Microsoft Visual SourceSafe? 更加健壯的平臺(tái)。您存儲(chǔ)在這個(gè)新源代碼控制系統(tǒng)中的所有內(nèi)容都會(huì)自動(dòng)備份到 SQL Server 2005 數(shù)據(jù)庫中,以方便管理。這個(gè)新的源代碼控制系統(tǒng)的設(shè)計(jì)目標(biāo)包含高可伸縮性和性能,這兩個(gè)功能在 Visual SourceSafe 中是沒有的。該新源代碼控制系統(tǒng)將包含更健壯的分支和合并功能。因此,默認(rèn)情況下將打開多簽出功能。
一個(gè)稱為“shelving”的新功能也可用。該功能允許您獲取要使用的簽出代碼并將其簽入到源代碼控制(而不是主要分支),從而允許開發(fā)人員正確備份他們的工作,因而避免了為團(tuán)隊(duì)的其他開發(fā)人員提供不完整的更改。
Visual SourceSafe 仍然可用,并且可以通過更新來使用 Visual Studio 2005。Visual SourceSafe 可能適用于小規(guī)模團(tuán)隊(duì)的小項(xiàng)目,這些團(tuán)隊(duì)可能不需要 Team Foundation Server 的功能,或者不想花額外的精力和資金安裝它。要選擇使用哪個(gè)源代碼控制引擎,只需打開 Visual Studio,轉(zhuǎn)到“Tools | Options”并選擇“Source Control”選項(xiàng)即可。
當(dāng)配置為使用 Team Foundation Version Control 時(shí),那么每次在 Visual Studio 中創(chuàng)建一個(gè)新項(xiàng)目時(shí),您都會(huì)有一個(gè)用于將該項(xiàng)目添加到源代碼控制的選項(xiàng)。此時(shí),您可以選擇您要使用的 Team Foundation Server。作為一名開發(fā)人員,在處理任務(wù)時(shí),您可以標(biāo)記工作項(xiàng),以便使工作項(xiàng)與您要簽入源代碼控制的代碼相關(guān)聯(lián)。然后,該關(guān)聯(lián)會(huì)存儲(chǔ)到數(shù)據(jù)庫中,隨后可用于創(chuàng)建生成報(bào)告。另外,這個(gè)新的源代碼控制系統(tǒng)也允許創(chuàng)建簽入策略。簽入策略的目的是,限制允許什么樣的代碼簽入源代碼控制儲(chǔ)存庫。
編寫更好的代碼
Visual Studio 2005 Team System 在 IDE 中集成了幾個(gè)有助于編寫更好代碼的工具。它們包括用于分析應(yīng)用程序中潛在性能問題的分析器,針對(duì)托管和非托管代碼的代碼分析工具,以及帶有代碼覆蓋分析功能的單元測(cè)試工具。這些代碼分析工具基于已在 Microsoft 使用了一段時(shí)間的技術(shù),但它們從未很好地與 Visual Studio 集成。本機(jī)代碼使用 PREfast 進(jìn)行分析,而托管代碼使用 FxCop 分析。單元測(cè)試工具非常類似于諸如 Nunit 的工具,但是它更易于使用,而且創(chuàng)建測(cè)試所需的時(shí)間也減少了。這使得單元測(cè)試更易于人們接受。單元測(cè)試也很好地與代碼覆蓋相集成,代碼覆蓋本質(zhì)上是一個(gè)報(bào)告機(jī)制,允許您知道您的單元測(cè)試實(shí)際執(zhí)行了多少代碼。
托管代碼分析
如果您熟悉 FxCop,您會(huì)感到 Team System 的托管代碼分析功能是很令人舒服的。與 IDE 的集成是很棒的。要啟用 Code Analysis,只需轉(zhuǎn)到項(xiàng)目的屬性,然后轉(zhuǎn)到“Code Analysis”選項(xiàng)卡。在那里,您可以啟用 Code Analysis,并選擇您希望運(yùn)行的規(guī)則。多數(shù)公司可能會(huì)禁用提供的大量規(guī)則,因?yàn)?Code Analysis 附帶的規(guī)則非常嚴(yán)格。實(shí)際上,針對(duì)您的一個(gè)現(xiàn)有應(yīng)用程序運(yùn)行 FxCop 來查看您與它的規(guī)則有多么不符合十分令人沮喪。
與 IDE 集成的 Code Analysis,其優(yōu)勢(shì)在于打開后,它會(huì)在您的應(yīng)用程序編譯時(shí)自動(dòng)運(yùn)行,并為您提供作為生成過程一部分的警告或錯(cuò)誤。您具有針對(duì) Release 版本打開 Code Analysis 以及針對(duì) Debug 版本關(guān)閉它的功能,這真是一個(gè)好功能。需要知道的是,在較大型項(xiàng)目中運(yùn)行 Code Analysis 可能要花費(fèi)一些時(shí)間。另一個(gè)很好的可用功能是,將運(yùn)行 Code Analysis 作為源代碼控制的簽入策略運(yùn)行。這能夠避免開發(fā)人員將未通過 FxCop 驗(yàn)證規(guī)則的代碼簽入到源代碼控制儲(chǔ)存庫中。簽入策略附帶了一個(gè)允許簽入代碼的重寫機(jī)制,但是該重寫可以被記錄。
單元測(cè)試
單元測(cè)試的一般概念是在您的應(yīng)用程序和測(cè)試中運(yùn)行獨(dú)立的代碼片段,以便看看它們是否產(chǎn)生了所需的結(jié)果。這通常等同于使用大量受控制的輸入調(diào)用一個(gè)方法并測(cè)試返回的數(shù)據(jù)。這可以在無需任何工具支持的情況現(xiàn)完成,但要使其更為高效,還是需要一些幫助。單元測(cè)試的其他一些普遍問題是測(cè)試的創(chuàng)建,測(cè)試的組織,以及是否具有一個(gè)可以輕松報(bào)告這些測(cè)試成功與否的機(jī)制。Team System 解決了所有這些問題。
Team System 提供了自動(dòng)為您的方法創(chuàng)建單元測(cè)試的功能。[編者更新 — 3/24/2005:該功能僅用于托管代碼。] 屬性用于區(qū)別單元測(cè)試和正規(guī)代碼。IDE 中的工具將您的測(cè)試組織為測(cè)試列表并根據(jù)這些測(cè)試列表執(zhí)行測(cè)試。當(dāng)您執(zhí)行測(cè)試時(shí),結(jié)果在 Visual Studio 的 Test Results 窗口中顯示。
要在項(xiàng)目中實(shí)現(xiàn)單元測(cè)試,只需右鍵單擊您的代碼并選擇“Create Tests”即可,如圖 4 所示。這會(huì)提示您選擇用哪些方法在哪些對(duì)象上創(chuàng)建測(cè)試。您可以通過從多個(gè)不同類選擇方法來一次創(chuàng)建多個(gè)測(cè)試。自動(dòng)生成的測(cè)試將包含某些代碼,該代碼用于初始化包含所測(cè)試方法的對(duì)象、聲明用于方法參數(shù)的變量,并最終調(diào)用要測(cè)試的方法。默認(rèn)情況下,這些測(cè)試將返回 Inconclusive 結(jié)果。創(chuàng)建這些測(cè)試時(shí),您可以在“Configuration”選項(xiàng)卡中對(duì)其進(jìn)行更改。Inconclusive 意味著不知道測(cè)試成功與否。這樣做可以提醒您需要實(shí)際上將某個(gè)邏輯放入測(cè)試。請(qǐng)考慮以下要測(cè)試的方法示例:
Public Class Math
Public Function Add(ByVal Value1 As Integer, _
ByVal Value2 As Integer) As Integer
Return Value1 + Value2
End Function
End Class
在本例中,Add 方法只返回添加兩個(gè)整數(shù)的結(jié)果。當(dāng)您首次創(chuàng)鍵單元測(cè)試時(shí),生成的測(cè)試代碼將如下所示。
''' 〈summary〉
''' AddTest is a test case for Public Function Add(As
''' Integer, As Integer)
''' 〈/summary〉
〈TestMethod()〉 Public Sub AddTest()
Dim target As NewOrderEntry.Math = New NewOrderEntry.Math
' TODO: Initialize to an appropriate value
Dim Value1 As Integer
' TODO: Initialize to an appropriate value
Dim Value2 As Integer
Dim expected As Integer
Dim actual As Integer
actual = target.Add(Value1, Value2)
Assert.AreEqual(expected, actual)
Assert.Inconclusive("Verify the correctness of this test method.")
End Sub
要運(yùn)行您的測(cè)試,必須首先編譯項(xiàng)目,然后打開“Test Manager”窗口。您可以在“Test | Windows”菜單下找到 Test Manager,它允許您查看不同的測(cè)試,并選擇您希望運(yùn)行哪些測(cè)試。Test Manager 也允許您將測(cè)試添加到創(chuàng)建的多個(gè)測(cè)試列表中。例如,您可能想將用于演練業(yè)務(wù)邏輯的所有測(cè)試或數(shù)據(jù)訪問代碼進(jìn)行分組。您也可以根據(jù)應(yīng)用程序中的功能區(qū)域?qū)y(cè)試進(jìn)行分組。
當(dāng)您運(yùn)行測(cè)試時(shí),您有幾個(gè)選項(xiàng)。您應(yīng)該考慮的一個(gè)選項(xiàng)是打開代碼覆蓋,它允許您捕獲并分析顯示單元測(cè)試所執(zhí)行代碼的數(shù)據(jù)。代碼覆蓋是測(cè)試運(yùn)行配置的一部分。在 Test Manager 中,工具欄按鈕“Edit Test Run Configuration”允許您選擇并編輯一組用于運(yùn)行測(cè)試的可配置選項(xiàng)。在運(yùn)行測(cè)試之后,您應(yīng)該查看兩項(xiàng)內(nèi)容:測(cè)試結(jié)果(請(qǐng)參見 圖 6),以及代碼覆蓋結(jié)果(請(qǐng)參見圖 7)。
您會(huì)看到,Test Results 窗口指出我的一個(gè)測(cè)試是非決定性的。這是因?yàn)槲覜]有更改生成的測(cè)試來進(jìn)行任何有用的操作。該測(cè)試應(yīng)該更改為如下所示的內(nèi)容。
''' 〈summary〉
''' AddTest is a test case for Public Function Add(As Integer,
''' As Integer)
''' 〈/summary〉
〈TestMethod()〉 Public Sub AddTest()
Dim target As NewOrderEntry.Math = New NewOrderEntry.Math
Dim Value1 As Integer = 32
Dim Value2 As Integer = 10
Dim expected As Integer = 42
Dim actual As Integer
actual = target.Add(Value1, Value2)
Assert.AreEqual(expected, actual)
End Sub
該代碼為兩個(gè)整數(shù)分配了兩個(gè)參數(shù)值,并檢查 Add 方法的返回值,以確保該值與預(yù)期的相同。如果從 Add 方法返回的值是 42(正確答案),則測(cè)試通過;否則,測(cè)試失敗。您也可以創(chuàng)建數(shù)據(jù)驅(qū)動(dòng)的單元測(cè)試。這允許您使用來自數(shù)據(jù)庫的實(shí)際數(shù)據(jù),而不是硬編碼值。
單元測(cè)試只有在編寫為能夠正確演練代碼時(shí)才有用。如果您有 1000 行代碼,而通過單元測(cè)試只執(zhí)行了 10 行,則您的單元測(cè)試沒有給出您代碼良好程度的準(zhǔn)確表示形式。Team System 的代碼覆蓋功能是一個(gè)很好的資源,可以用于確定您的單元測(cè)試是否已經(jīng)覆蓋了您現(xiàn)有的大部分代碼,相反,也可以確定是否有任何您從未用過的代碼,并可以因此將其移除。
除了 Code Coverage Results 視圖,您也可以啟用源代碼的顏色編碼。圖 9 顯示了兩段代碼。紅色代碼不是由單元測(cè)試執(zhí)行的;執(zhí)行的是綠色代碼。
測(cè)試結(jié)果和代碼覆蓋結(jié)果可以發(fā)布到您的 Team Foundation Server,該服務(wù)器會(huì)將該數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中。這允許門戶網(wǎng)站上顯示的報(bào)告使用該數(shù)據(jù)來顯示項(xiàng)目所處的位置(從測(cè)試和代碼質(zhì)量的角度來看)。
加載測(cè)試
除了單元測(cè)試,Team System 也提供用于創(chuàng)建、管理和運(yùn)行 Web 加載測(cè)試的功能。該功能非常類似于 Application Center Test 以前提供的功能,只是較其更為健壯,更具可伸縮性,而且完全與 Visual Studio 集成。您可以從頭開始創(chuàng)建自己的測(cè)試,并在一臺(tái)或多臺(tái) PC 上記錄用于以后重放的 Web 瀏覽器會(huì)話。加載測(cè)試工具中包括了一些很好的功能。特別地,除了正確處理 ASP.NET ViewState,該工具還可以處理 ASP.NET 窗體身份驗(yàn)證。
要使用加載測(cè)試功能,最簡(jiǎn)單的方式是創(chuàng)建一個(gè)新的 Test Project。這是一個(gè)您可以添加到解決方案中的新項(xiàng)目類型。完成后,您可以通過右健單擊 Solution Explorer 中的該項(xiàng)目并選擇“Add New Item”來添加多個(gè)新測(cè)試。記錄一個(gè) Web 加載測(cè)試就像將適當(dāng)?shù)臏y(cè)試類型添加到您的項(xiàng)目并選擇 Record 來初始化記錄過程一樣簡(jiǎn)單。當(dāng)創(chuàng)建新測(cè)試時(shí),它們會(huì)和您的單元測(cè)試一起在 Test Manager 窗口中顯示,從而為您提供項(xiàng)目的各種測(cè)試的完整視圖。Web 測(cè)試與 Visual Studio 2005 中的加載測(cè)試是不同的。Web 測(cè)試是演練 Web 應(yīng)用程序特定部分的腳本。加載測(cè)試是一個(gè)包含用于模擬加載的適當(dāng)數(shù)據(jù)(例如,要模擬的用戶數(shù)量)的單獨(dú)測(cè)試。由此您可以創(chuàng)建 Web 測(cè)試,然后在加載測(cè)試中使用它們來對(duì)您的應(yīng)用程序進(jìn)行壓力測(cè)試。
測(cè)試器、手動(dòng)測(cè)試器和錯(cuò)誤跟蹤
雖然 Team System 提供 Web 應(yīng)用程序的單元測(cè)試和加載測(cè)試,但它不提供用于測(cè)試非 Web 用戶界面的自動(dòng)機(jī)制(雖然 Compuware 已經(jīng)宣布集成它的 TestPartner 產(chǎn)品來提供對(duì)胖客戶端用戶界面的測(cè)試)。您的 QA 團(tuán)隊(duì)是通過內(nèi)置的測(cè)試管理工具(以及錯(cuò)誤跟蹤系統(tǒng))獲得支持的。錯(cuò)誤只是工作項(xiàng)的一個(gè)特定類型,它嵌入在 Team System 之中,并作為任務(wù)分配給某人使用。錯(cuò)誤狀態(tài)以及錯(cuò)誤計(jì)數(shù)可以從項(xiàng)目門戶站點(diǎn)查看。
另一個(gè)好功能是存儲(chǔ)并管理項(xiàng)目現(xiàn)有的各種手動(dòng)測(cè)試。您可能熟悉各種 Word 文檔和手動(dòng)腳本,通常這些腳本在經(jīng)過創(chuàng)建后可以顯示手動(dòng)測(cè)試一個(gè)系統(tǒng)所需的詳細(xì)步驟信息。Team System 允許這些腳本作為手動(dòng)測(cè)試存儲(chǔ)在 TFS 中,并托管在 Web 測(cè)試和單元測(cè)試中。這些腳本可以是實(shí)際的 Word 文檔或純文本。也有從 Visual Studio 中執(zhí)行這些測(cè)試的能力。
當(dāng)選擇這些測(cè)試以準(zhǔn)備運(yùn)行時(shí),這些測(cè)試的狀態(tài)為掛起,直到一個(gè)測(cè)試器逐句通過該手動(dòng)過程并將該測(cè)試標(biāo)記為已通過或已失敗為止。顯然,如果測(cè)試失敗,則很可能是輸入了一個(gè)錯(cuò)誤。手動(dòng)測(cè)試也可以使用測(cè)試列表來進(jìn)行分組,以便提供一些很好的組織功能。在 TFS 中具有測(cè)試允許開發(fā)人員在需要重復(fù)隨后用來復(fù)制錯(cuò)誤的步驟時(shí),輕松訪問這些測(cè)試。這些新工具真正將測(cè)試人員和開發(fā)人員放在同一環(huán)境中,以便允許他們更好地協(xié)作。
Team Build
Visual Studio 2005 工具包中的另一個(gè)工具是 Team Build。Team Build 利用 MSBuild,后者是 .NET Framework 2.0 附帶的一個(gè)新的可擴(kuò)展生成引擎。Team Build 支持生成服務(wù)器的概念。生成服務(wù)器將偵聽網(wǎng)絡(luò)請(qǐng)求,這些請(qǐng)求會(huì)指導(dǎo)生成服務(wù)器使用存儲(chǔ)在 Team Foundation Version Control 中的構(gòu)建腳本生成應(yīng)用程序。可以通過一個(gè)向?qū)нx擇各種生成選項(xiàng)來從 Visual Studio 生成這些生成腳本。這些選項(xiàng)包括使 FxCop 或單元測(cè)試作為生成過程的一部分運(yùn)行。您也可以使工作項(xiàng)更新,使通知作為生成過程的一部分發(fā)送。例如,您可以使一個(gè)日常生成過程自動(dòng)編譯您的應(yīng)用程序,運(yùn)行單元測(cè)試和靜態(tài)分析,然后最終將新的生成放在測(cè)試服務(wù)器上,并通知可以使用新生成的測(cè)試人員。
團(tuán)隊(duì)站點(diǎn)和報(bào)告
除了 Team System 的面向開發(fā)人員的功能之外,也應(yīng)該注意到它為直接開發(fā)過程之外的人員帶來的可見性。這包括管理人員、項(xiàng)目管理人員、測(cè)試人員、業(yè)務(wù)用戶、分析人員,以及對(duì)開發(fā)項(xiàng)目狀態(tài)有興趣的任何人。雖然測(cè)試人員和項(xiàng)目管理人員可以使用 Team Foundation Client 來訪問 Team Foundation Server,但是假設(shè)業(yè)務(wù)用戶和 IT 管理運(yùn)行 Team Foundation Client 是不現(xiàn)實(shí)的。
項(xiàng)目的 SharePoint 主頁是用于這些個(gè)體的完美工具。他們可以從該站點(diǎn)訪問項(xiàng)目的當(dāng)前狀態(tài),查看錯(cuò)誤數(shù)量和嚴(yán)重性,并訪問項(xiàng)目文檔。另外,可以使用多種報(bào)告。這包括針對(duì)突出的工作項(xiàng)、突出的錯(cuò)誤報(bào)告、測(cè)試結(jié)果以及許多其他內(nèi)容的報(bào)告。這個(gè)新增的可見性應(yīng)該提供對(duì)開發(fā)過程(而不是以前可用的內(nèi)容)的更好理解。
在我結(jié)束本文之前,我應(yīng)該提一下可擴(kuò)展性。對(duì)于已經(jīng)使用現(xiàn)有開發(fā)過程的企業(yè)而言,Team System 的設(shè)計(jì)目標(biāo)是支持自定義。Team System 也具有使第三方企業(yè)集成并擴(kuò)展它的設(shè)計(jì)理念。Borland 已經(jīng)宣布他們會(huì)發(fā)布一個(gè)與 Team System 集成的 CaliberRM y 需求管理工具版本。這填補(bǔ)了 Microsoft 產(chǎn)品套件的空白。但是,如果 Team System 不能滿足您的需要,請(qǐng)確保找到與它集成并擴(kuò)展它的適當(dāng)工具。
小結(jié)
Visual Studio 2005 Team System 的購買方式將與目前 Visual Studio 的購買方式不同。我之所以指出這一區(qū)別,是因?yàn)闇y(cè)試版并不能準(zhǔn)確反映該產(chǎn)品正式發(fā)布時(shí)可用的多種產(chǎn)品。最特別的是,Team Foundation 將是一個(gè)單獨(dú)購買的服務(wù)器產(chǎn)品。已經(jīng)有幾個(gè)功能演練是可用的,而且在測(cè)試循環(huán)中將發(fā)布更多的演練。如果您打算將更多“過程”放入您的開發(fā)工作中,則應(yīng)該考慮研究一下 Team System,看看它能否滿足您的需要。有關(guān)更多信息,請(qǐng)?jiān)L問產(chǎn)品站點(diǎn),網(wǎng)址是 Visual Studio 2005 Team System