測(cè)試員版本
  并不是說,測(cè)試工具是完美的,NUint的"綠色化、干凈化"的理念使它有一種精煉的純度,使之非常易于集成進(jìn)你的開發(fā)過程中。另一方面,VSTS答應(yīng)以多種方法進(jìn)行測(cè)試,測(cè)試用例能在調(diào)試器下運(yùn)行或單獨(dú)運(yùn)行,也能選擇多個(gè)不同的測(cè)試等等。      
    
    
        
                                                    
        
    
    ![]()
  悲哀的是,就測(cè)試函數(shù)的可伸縮性及多樣性來說,F(xiàn)IT(測(cè)試用例輸入輸出的表格描述)還未獲得支持。
  開發(fā)人員版本
  對(duì)開發(fā)人員來說,VSTS在基于Visio建模的基礎(chǔ)上,整合了單元測(cè)試。它沒有了架構(gòu)師版本中的,以部署為中心的建模器,并加載了測(cè)試員版本中的測(cè)試用例治理工具。這種平衡真有點(diǎn)難以取舍:假如你能放棄建模器,測(cè)試員版本的VSTS將是更好的SKU。
  包裝盒中的秘密
  在Visual Studio 2005中,微軟支持以下四種語言:C#、Visual Basic、C++、J#,C#與Visual Basic可是 .NET中的重量級(jí)選手。在 .NET 2.0中,最主要變化的是演變?yōu)橥ㄓ谜Z言運(yùn)行時(shí)庫(CLR),而C# 2.0則在其中加入了對(duì)泛型的支持,最常見的是集合類庫、混合了特定類中類型安全的泛型。
  泛型存在的必要性已爭論了很久,支持"動(dòng)態(tài)語言"中隱式類型轉(zhuǎn)換的愛好者,對(duì)類型的安全聲明并不感愛好,其他的,如Java領(lǐng)域,也表示與它們引入的復(fù)雜性相比,所提供的價(jià)值并不明顯。但就個(gè)人來說,還是傾向于顯式類型轉(zhuǎn)換,實(shí)際上,在Visual Basic的世界中,盡管支持泛型,但它們似乎總不是討論的焦點(diǎn)。(所有的 .NET語言至少必須能使用泛型,所有微軟公司的語言都能使用及生成泛型。)
  CLR中泛型的實(shí)現(xiàn),還是有點(diǎn)意思的。在C++中,泛型的實(shí)例化是在編譯時(shí)完成的--編譯器為每個(gè)實(shí)例化的泛型,都生成了一個(gè)不相同的二進(jìn)制類型。在Java 5中,類型安全的語法,由一個(gè)單一的存儲(chǔ)了Object引用的運(yùn)行時(shí)泛型提供支持,遠(yuǎn)比C++所使用的模型簡潔得多,但卻需要對(duì)值類型進(jìn)行裝箱及解箱(轉(zhuǎn)換為及轉(zhuǎn)換自基于Object的引用類型)。在CLR中,假如泛型的類型參數(shù)為一個(gè)值類型,在加載時(shí),一個(gè)確切的泛型會(huì)被實(shí)例化,這讓CLR泛型有了Java泛型中的可伸縮性及簡潔性,且對(duì)值類型來說,也提高了執(zhí)行效率。
  例1是C#及Java的對(duì)比程序,程序用于顯示裝箱帶來的性能損失。編譯并運(yùn)行在一個(gè)2.66G,32位Intel處理器上,系統(tǒng)為VMWare中的Windows Server 2003,并為其分配了1G的內(nèi)存。對(duì)比開發(fā)工具為C# 2.0及Java JDK 5.0 Update 6,C#程序在3.01秒內(nèi)運(yùn)行完畢,而Java程序在10.109秒內(nèi)運(yùn)行完畢。雖然這可能代表了最壞情況下的Java表現(xiàn),但也表明裝箱的性能損失真的是非常大。
  例1:C#及Java的對(duì)比程序
//Program.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Console
application1
{
 class Program
 {
  static void Main(string[] args)
  {
   RunIt();
   DateTime start = DateTime.Now;
   for (int i = 0; i < 5; i++)
   {
    RunIt();
   }
   TimeSpan elapsed = DateTime.Now - start;
   Console.WriteLine("Elapsed time: {0} ms", elapsed);
   Console.ReadLine();
  }
  static void RunIt()
  {
   List<int>[] n = new List<int>[5];
   for (int i = 0; i < n.Length; i++)
   {
    n[i] = new List<int>();
   }
   for (int i = 0; i < 1000000; i++)
   {
    n[0].Add(1);
   }
   for (int i = 1; i < n.Length; i++)
   {
    List<int> newArray = n[i];
    List<int> oldArray = n[i - 1];
    foreach (int j in oldArray)
    {
     newArray.Add(oldArray[j] * 2);
   }
  }
  for (int i = 0; i < n.Length; i++)
  {
   List<int> array = n[i];
   foreach (int j in array)
   {
    int number = j;
   }
  }
 }
 }
} 
//GenericValueArrayListTest.java
import java.util.*;
public class GenericValueArrayListTest {
 public static void main(String[] args) {
  RunIt();
  Date start = new Date();
  for(int i = 0; i < 5; i++){
   RunIt();
  }
  Date finish = new Date();
  System.out.printf("Elapsed time: %d ms", finish.getTime() -
   start.getTime());
 }
 static void RunIt()
 {
  ArrayList<Integer>[] n = new ArrayList[5];
  for(int i = 0; i < n.length; i++){
   n[i] = new ArrayList<Integer>();
  }
  for (int i = 0; i < 1000000; i++) {
   n[0].add(1);
  }
  for(int i = 1; i < n.length; i++){
   ArrayList<Integer> newArray = n[i];
   ArrayList<Integer> oldArray = n[i - 1];
   for(int j : oldArray){
    newArray.add(j * 2);
   }
  }
  for (int i = 0; i < n.length; i++) {
   ArrayList<Integer> array = n[i];
   for(int j : array){
    int number = j;
   }
  }
 }
}
  除了泛型,C# 2.0主要是通達(dá)LINQ(Language Integrated Query 語言集成查詢)的一塊踏腳石。這又是一種橫跨微軟公司語言產(chǎn)品的功能,但這次是由C#充當(dāng)開路先鋒。LINQ整合lambda函數(shù)、類型推論及智能庫,設(shè)計(jì)的目的是為了使查詢--不只是數(shù)據(jù)庫而是任意集合--能成為主流編程語言中的第一類要素。
  回過頭來看Visual Basic.NET,這個(gè)版本試圖在抗拒轉(zhuǎn)向完全面向?qū)ο笳Z言的社區(qū)中,重拾對(duì)VB的激情。誠然,比較以前的版本,這次的VB.NET無疑是一次巨大的進(jìn)步,但社區(qū)中的很多人也感到,即使不能帶來任何好處,也必須重寫以往工作正常的程序,所以我們看到,一些人繼續(xù)使用VB.NET,而更多的人轉(zhuǎn)向了C#,還有一些人則全然抗拒 .NET。另外,Visual Basic引入了"My"命名空間,其目的是為了降低基類庫(Base Class Library)的復(fù)雜性及提供對(duì)對(duì)象的即時(shí)訪問,還加強(qiáng)了"編輯并繼續(xù)"這個(gè)深受大家喜愛的功能。
  在2005年秋天的專業(yè)開發(fā)者大會(huì)上,微軟展示了代號(hào)為"Visual Basic Orcas"的部分功能,包括了LINQ及在語言字面上直接整合
xml。如同C#一樣,這個(gè)版本的VB看起來會(huì)有重大的改變了。
  最后來看一下C++,此次Visual Studio中最重要的變化無疑是C++/CLI了,這是一個(gè)對(duì)C++語言的擴(kuò)展,并為托管對(duì)象添加了"句柄"作為第一類語言實(shí)體,在某種意義上來說,其與指針的語法非常相似。并且,使用gcnew要害字來實(shí)例化可垃圾回收的托管對(duì)象,另外,確定性最終清理也是一大亮點(diǎn)。相比Visual Studio 2003通過雙下劃線來訪問托管對(duì)象,句柄的語法似乎更輕易使用一些。
  另一方面,Visual C++ 2005在編寫橋接或混合托管與非托管代碼的程序上,顯示出了無與倫比的可伸縮性:你可編寫完全控制進(jìn)入點(diǎn)的DLL、在各種字符串表示法之間進(jìn)行轉(zhuǎn)換、還可充分挖掘Win32的性能,并且,在托管領(lǐng)域,微軟可能會(huì)說:"對(duì)CLR而言,沒有比C++更低級(jí)的語言了,包括CLR自身。"(雖然有點(diǎn)夸大,但也可看出微軟在重心在何處。)
  對(duì)本地程序(native program)開發(fā)者來說,Visual C++ 2005也有幾項(xiàng)讓人感愛好的特性,比如:標(biāo)準(zhǔn)庫中增強(qiáng)了安全的函數(shù)實(shí)現(xiàn)--strcpy_s()以及其他;OpenMP的實(shí)現(xiàn)--其答應(yīng)對(duì)特定類型的操作,以共享內(nèi)存的方式并行處理(一般運(yùn)用于數(shù)組算法上);可支持更多的設(shè)備等等;最后,要提一下,對(duì)基于Windows的SmartPhone本地程序開發(fā),現(xiàn)在可在Visual Studio中完成了。
  既然說到設(shè)備,就講得再開一點(diǎn),Visual Studio 2005擴(kuò)大了語言可支持設(shè)備的范圍,.NET Compact Framework也有了P/Invoke功能,假如缺少它,那將是開發(fā)中的一個(gè)重大障礙。現(xiàn)在,.NET Framework已有了32位及64位版本,在64位Windows上將會(huì)并行運(yùn)行,以避免"DLL Hell"。當(dāng)然了,Visual C++ 2005也能進(jìn)行本地64位程序開發(fā)。進(jìn)入討論組討論。                                 
  IDE
  唯一能與Visual Studio 2005中窗體構(gòu)建器相抗衡的,也就是同一陣營中Visual Studio 2003的了。      
    
    
        
                                                    
        
    
    ![]()
  Windows Form是生成基于窗體的本地應(yīng)用程序的最好的"高產(chǎn)出"庫,而
asp.net 2.0也是一名不容小覷的選手,假如功力不深,恐怕如今也不會(huì)在動(dòng)態(tài)網(wǎng)站方面得到廣泛的應(yīng)用。雖然有點(diǎn)主觀,但微軟的設(shè)計(jì)時(shí)體驗(yàn),似乎反應(yīng)越來越快,也越貼近用戶,基類庫(Base Class Library)的廣泛應(yīng)用,價(jià)值無法估量,其龐大的體積,在很大程度上,也因?yàn)橛辛舜a智能感知(Intellisense),已不再是什么問題了。
  另一個(gè)不得不提的地方就是重構(gòu),不幸的是,微軟在這個(gè)領(lǐng)域的第一次努力,并不怎么讓人滿足,C#只有一小撮的重構(gòu)功能,與IDEA或Eclipse相比,無疑顯得有點(diǎn)蒼白,而此時(shí)選擇JetBrain的ReSharper或Refactor! Pro作為Visual Studio的外接程序(add-ins)時(shí),仍是物超所值。 
  微軟把更多的心思,放在了"代碼段"(snippets)上面,其實(shí)質(zhì)上是
模板化的代碼塊以用于自動(dòng)化普通(或復(fù)雜)任務(wù)。這看上去是一個(gè)好想法,但在日常的開發(fā)中,仍需要親自把它們合并進(jìn)源代碼,也許再過一段時(shí)間,它所帶來的方便才會(huì)日益浮現(xiàn)出來,因?yàn)榘褜?shí)質(zhì)上一樣的屬性(property)代碼編寫上一百萬遍,并不是一個(gè)什么值得鼓勵(lì)的好方法。
  盡管Visual Studio 2005最大的問題似乎存在于重構(gòu)及代碼智能感知(Intellisense)方面,但有關(guān)于穩(wěn)定性,仍存在著不少抱怨--雖然我們對(duì)它的穩(wěn)定性也缺乏比較。就個(gè)人所知已有三個(gè)嚴(yán)重的缺陷,它們幾乎都與重構(gòu)或智能感知有關(guān):在C#中,傳遞一個(gè)繼續(xù)類型作為類型參數(shù)給一個(gè)泛型超類(super-class)--這是一個(gè)合法但很少會(huì)碰到的情況,能導(dǎo)致CPU自旋鎖(spinlock);在VB中,在ToString方法中結(jié)合使用移位操作,會(huì)讓IDE崩潰;在ASP.Net中,隨著網(wǎng)站內(nèi)頁面的增多,會(huì)導(dǎo)致C#的重構(gòu)成指數(shù)級(jí)惡化。另外還有報(bào)道指,設(shè)計(jì)時(shí)異常,如由數(shù)據(jù)綁定控件產(chǎn)生的,也會(huì)導(dǎo)致IDE崩潰。
  微軟宣稱計(jì)劃為Visual Studio 2005發(fā)布兩個(gè)service pack,第一個(gè)于2006年的12月份已經(jīng)發(fā)布,致力于解決穩(wěn)定性問題;而第二個(gè)有傳言指為一個(gè)主要的service pack,將帶來新的功能,可能會(huì)包括現(xiàn)在CTP版本中的WPF設(shè)計(jì)器、為特定語言改良過的工具、甚至很可能把IronPython提升至主流開發(fā)語言的位置。
  結(jié)論
  Visual Studio Team Suite實(shí)質(zhì)上包括了一大堆的新技術(shù),2.0版本的通用語言運(yùn)行時(shí)庫及它所用的語言也都在穩(wěn)定性及執(zhí)行效率方面,經(jīng)過了改良提高,但只有C++/CLI,才是本質(zhì)上新增的改進(jìn)。而IDE也在建模及測(cè)試基礎(chǔ)架構(gòu)方面,有了兩個(gè)主要的
組件:建模架構(gòu),其發(fā)展?jié)摿o可限量,但目前仍不及測(cè)試架構(gòu)那般充分開發(fā)利用;而測(cè)試架構(gòu)幾乎馬上就吸引了人們的注重力。Visual Studio Team Server是微軟一個(gè)重要的新服務(wù)器產(chǎn)品,其發(fā)展?jié)摿薮螅坪跻膊粫?huì)只把重心放在單一的開發(fā)論上。無論如何,微軟所作出帶來嶄新技術(shù)的承諾及建立對(duì)此版本產(chǎn)品的信心,都需要充分利用Team Server。
  當(dāng)然了,對(duì)大多數(shù)微軟產(chǎn)品零售商及開發(fā)者來說,升級(jí)至這一新的Visual Studio版本,大概只是時(shí)間的問題。以下是正反方觀點(diǎn):
  正方:
  ·CLR及基類庫(Base Class Library)執(zhí)行效率及穩(wěn)定性的提高。
  ·高產(chǎn)出庫,如ASP.NET及Windows Forms。
  ·可支持目標(biāo)設(shè)備的范圍擴(kuò)大:如64位及移動(dòng)設(shè)備。
  ·工作項(xiàng)目跟蹤的可伸縮性及實(shí)用性。
  反方:
  ·建模工具仍不完整全面。
  ·可疑的穩(wěn)定性。 
  ·未證實(shí)的服務(wù)器組件。
  ·價(jià)格。進(jìn)入討論組討論。