Exam 70-536: TS: Microsoft .NET Framework, Application Development Foundation 介紹

本科考試為 Visual Studio 2005 與 Visual Studio 2008 系列認證的必考科目,一定要考過,並同時可計算在 Visual Studio 2008 的考試要求中。本文同時刊登於 MSDN:http://www.microsoft.com/taiwan/msdn/columns/jhu_ming_jhong/exam_70-536.htm

技術背景

在新一代的微軟開發人員認證體系中,最明顯的不同就是多了這一個應用程式發展的基礎技能考試(70-536),以往的 MCSD 與 MCAD 都是將工具的使用(Visual Studio)以及發展特定類型的應用程式為考試內容,這樣很容易有一個問題-開發人員是否對真正底層的東西有一定程度的了解?這也是為什麼要有這個科目的原因。

若開發人員對於基本的類別庫功能沒有足夠的了解,那未來在發展應用程式時會有更多的問題,例如 Do Less With More(撰寫程式碼來做類別庫已經有的功能),或是沒有善用類別庫的功能等等,就像是 MCSE 卻不懂網路一樣,等於只是半吊子的認證人員而已,對於微軟來說,MCSD/MCAD 應該是要培養並認可出真正具實力的專業人員,但是可能因為對於基礎類別庫的應用不夠了解,而讓開發品質下降,或者讓開發人員寫了更多的程式,但只是做了一個類別庫中早己有的功能,也間接的造成開發效率下降。

所以微軟在 MCTS 與 MCPD 中加入了這一項考試,主要原因就是希望能夠踏入 MCTS 與 MCPD 的專業人員都能夠在操作與應用基礎類別庫的部份,具有一定以上的水準,這樣的好處是,在之後的考試中,就只要專注在特定的範圍內,不必再去考驗基礎部份的能力,這對 .NET Framework 2.0 這種相當大範圍的類別庫與平台來說,是很重要也是最經濟的方法。

不過由於這一科只是測驗基礎能力,所以通過了這科考試,並不會取得 MCP 或是 MCTS 認證,這個情形和 Windows NT 4.0 時代的 MCSE 考科中的 Exam 70-058:Networking Essentials 一模一樣,但這個作法也引起了許多人的意見,很多人都拿 SCJP 來比較,SCJP 的考試只考一科就可以拿到認證,不過筆者認為這二個是不能相比較的,因為SCJP考的是 Java 語言和 Java 類別庫的使用,範圍比較大;而 70-536 考的只是基本類別庫的使用,不考語言(那是考生的事),而且相對於 MCTS,SCJP 也只是證明了考生具有撰寫 Java 程式與應用類別庫的能力,但沒有考驗對於特定平台的發展能力(不然怎麼會有 SCJD, SCWCD, SCBCD, SCMAD,…),若要測驗特定平台的發展能力,得再考一科考試,等於要考二科。以這種方式來計算,其實考 Java 部份是比較貴的(150*2 = 300美金),而微軟的部份相對而言比較便宜(80*2=160美金)。

考試背景

Microsoft .NET Framework 2.0 應用程式開發基礎是以 .NET Framework 2.0 類別庫為主要出題方向,因為整個類別庫有數百個命名空間(namespace),以數百計的類別,就有如 .NET Framework 上的 Windows API 一樣(API 已經是數以千計),未來 .NET Framework 3.0/3.5 會更多,所以微軟在這科考試中所測驗的類別庫,都已經排除了特定平台以及特殊的類別(例如 Microsoft.Win32 與 Microsoft.VisualBasic 等),只留下了各種平台都會用到的命名空間與類別。

微軟要求考生必須要了解 .NET Framework 類別庫,而且需要使用 C#, Visual Basic或Visual C++ 來操作類別庫,由於考試開始時可以選擇考試題目中所使用的程式語言,所以考生可以選擇自己熟悉的語言來考試。微軟建議考生最好能有 Visual Studio 的使用經驗,若有 Visual Studio.NET 2003 與 .NET Framework 1.x 的使用經驗就更好。

若考生是學生身份,則建議最好是大學以上,對於 C#, VB 或 C++ 熟悉,並且有修過下列課程(或具有同等級的知識):

  • 程式設計(型別、集合、泛型處理、陣列、堆疊與佇列)
  • 物件導向程式設計(類別的使用與概念)
  • 作業系統(資料流 I/O,行程與執行緒的概念)
  • 程式語言(RTTI 與執行期型別處理)
  • 網路程式設計(XML 與字串編碼)
  • 資訊安全(密碼學與資訊安全的概念)

考試測驗的技能

70-536 考的是考生對於 .NET Framework 2.0 基本類別庫的操作與使用,不過在操作類別庫的背後,卻隱藏了許多的基本知識,如果考生對一些基本概念不夠熟悉的話,看到程式碼可能會不知所云,而這也是此科考試最常出現的出題方式。考試分為七個主題,分布在各個類別庫中,一個主題會考到許多的類別,但重點還是在使用,所以考生就算不是全部了解,也要了解至少八成以上.才會有機會通過考試。

  • 使用系統型別與集合物件開發應用程式(15%)

    筆者認為這真的是基本中的基本了,寫程式不可能用不到任何的資料,就算是程式自己產生的,也還是一些資料,而能夠承載資料的記憶體空間,就是變數(variable),而變數都會有一個資料型態(data type),在 .NET Framework 中,每個語言的內建型態都可以對應到 .NET Framework 的資料物件(繼承自 System.ValueType 類別),考生要能夠會操作這些型別。

    泛型(Generic)是 .NET Framework 2.0 的新功能,讓類別可以在不受資料型別的限制下做到最大的共用性,而 .NET Framework 2.0 多數的集合物件都可支援泛型,未來 .NET Framework 3.5 的 LINQ(Language in Query)會大量使用到泛型能力,所以考生要多下點工夫在泛型應用上。

    集合物件(Collection)是資料處理上相當好用的工具,根據不同的需求,會有不同的集合物件來處理,例如陣列有 List或ArrayList,鍵值對應部份則有 Dictionary 與 Hashtable 可用,瀏覽集合物件則有 IEnumerate 介面物件可用,堆疊和佇列則各有 Stack 與 Queue 類別可以用,這些集合物件在開發應用程式的資料處理上非常實用,考生必需要會至少五種以上的集合物件用法,最好是全部都會。

    標準協約(Standard Contracts)介面對於處理物件間的聯繫有相當的重要性,例如物件間的比較、轉換、複製(Clone)、判斷與格式化等等,考生至少要學會如何實作這類型的協約,以套用到應用程式之中。

    事件處理(Event handling)與函式委派(Delegation)是 .NET Framework 所有事件的基礎能力,考生至少要知道如何處理由物件所發出的事件,以及幫自已的類別加上事件能力。

     
  • 在 .NET Framework 應用程式中實作服務、執行緒與應用程式定義域(11%)

    Windows Service 是 Windows 平台上特有的能力,它最主要的特性就是存在於作業系統中,能夠持續性的處理特定的事情(例如定時工作),.NET Framework 提供了 System.ServiceProcess.ServiceBase 基礎物件,讓開發人員得以很簡單的方式來撰寫 Windows Service,並且提供了 installutl.exe 來簡化服務的安裝,建議考生可以實際寫一個簡單的 Windows Service 來了解開發流程。

    執行緒(Threading)是發展進階應用程式時,經常會用到的工具,例如處理長時間工作的程式,要保持使用者介面可使用時,就需要用到執行緒處理,執行緒的概念本身就可以寫一本書了,考生在利用這個工具前,最好是對概念有一些了解,才知道要如何使用,作業系統的書籍都會有執行緒的章節,考生可自行參考相關書籍。執行緒的另一個重點在於非同步處理(Asynchronous Process),這在開發企業級應用程式時會非常重要,考生必須要熟悉,而非同步的概念在作業系統的書籍也有,筆者就不在此說明(因為說明也可以寫很多)。

    應用程式定義域(Application Domain)是CLR執行程序時所產生的隔離單元,開發人員可以利用這個定義域做動態的組件載入工作,這是實作可插拔式應用程式(Pluggable Application)的基礎,考生至少要了解如何產生定義域與動態載入組件的方法。

     
  • 在 .NET Framework 應用程式中加入組態、診斷、管理與安裝功能(14%) 組態管理(Configuration Management)是在每一個具規模的應用程式都會具備的能力,它可以讓使用者在不改變程式的情況下,可以改變應用程式的行為或設定資料,最典型的就是 ASP.NET 的 Web.config,Windows 應用程式則是 .exe.config,考試必需要知道如何透過程式來讀寫組態檔,例如 ConfigurationManager 類別的操作。

    診斷能力(Diagnostics)可以幫助開發人員在除錯或是偵錯追踪時的處理工作,像是 Trace 可以輸出變數資訊、Debugger 可以直接控制除錯器、Debug 可以輸出除錯訊息、StackTrace 可以找出錯誤發生點等;同時類別庫也提供了可以存取行程(Process)、效能計數器與事件記錄等等,考生必須要注意與知曉這些方法。

    管理能力(Management ability)以 System.Management 命名空間為主,它是包裝 Windows Management Instrumentation(WMI)的能力,並提供介面來查詢 WMI 資料,考生至少要會使用 ManagementObjectSearcher、EventQuery 與 ObjectQuery 等類別。

    安裝功能(Installation feature)則是以 System.Configuration.Install 命名空間為主,為 Windows Installer 提供了可延伸的能力,在 Visual Studio 的安裝專案中可增加自訂動作(Custom Action)來加強安裝功能,建議考生最好是實際做幾次安裝程式,以了解開發安裝程式的流程。

     
  • 在 .NET Framework 應用程式中實作序列化與輸入輸出功能(18%)

    I/O 功能是應用程式中最基本的能力,不論是對檔案、對網路或是對記憶體皆然,.NET Framework 中特別針對具有 I/O 能力的部份實作成資料流物件(Stream),檔案就是 FileStream、網路是 NetworkStream、記憶體是 MemoryStream,緩衝區資料流則是 BufferedStream,另有一種特殊的資料流,稱為隔離儲存區(Isolated Storage),這些資料流都具有特定的 I/O 能力,但開發人員只要了解基本的資料流讀寫方法,以及資料流的特性即可。

    除了資料流本身以外,.NET Framework 也提供了資料流讀寫工具,分別為 StreamReader/StreamWriter 以及 BinaryReader/BinaryWriter 等類別,這些類別提供了便利的讀寫方法供開發人員使用,考生必須要了解如何使用,但在實務中則不一定要使用。

    壓縮能力(Compress ability)則是 .NET Framework 2.0 新增的功能,目前支援了 GZip 及 Deflate 兩種演算法,分別為 GZipStream 與 DeflateStream 類別,開發人員可以善用這兩種類別的壓縮與解壓縮功能來減少資料量,對網路傳輸會有相當的幫助。

    除了 I/O 以外,檔案系統的管理也是系統服務的基本功能之一,.NET Framework 提供了 DriveInfo、Directory、DirectoryInfo、File、FileInfo 與 FileSystemWatcher 等類別來處理檔案系統部份的工作,考生必須要熟悉基本的用法,例如如何用 DriveInfo 來列舉磁碟機、如何用 DirectoryInfo.GetFiles() 來搜尋檔案等。

    序列化(Serialization)能力是 .NET Framework 的核心功能之一,舉凡 .NET Remoting、Web Service、物件讀寫與傳輸等都需要利用序列化的能力,目前序列化能力分為二種:二進位序列化(Binary Serialization)與 XML 序列化(XML Serialization),二進位序列化多用於物件讀寫以及 .NET Remoting 的物件傳輸;而 XML 序列化則多用於 Web Service 物件傳輸以及將物件格式化成 XML 時使用(這個部份對 XML 與物件交換資料的能力有相當大的幫助,例如把 XML 轉換成 Business Component 的資料物件),也因為序列化能力如此重要,所以考生必須要多下工夫在序列化能力上,尤其是 XML Serialization 的規則要很熟。

     
  • 使用 .NET Framework 2.0 安全功能來強化 .NET Framework 應用程式的安全性(20%)

    資訊安全在現在的應用程式中佔有很重要的地位,不論是 Windows 應用程式或Web應用程式皆然,在大型企業應用程式就更形重要,因為安全性設計可以保障資料的正確性、完整性以及機密性,在應用程式設計時皆需要將安全性部份一併考量,以保障應用程式的安全。應用程式的安全性不外乎三個部份:驗證(Authentication)、授權(Authorization)與存取控制(Access Control)與加密(Encryption)四個部份,在 .NET Framework 中都有提供功能。

    程式碼存取安全性(Code Access Security; CAS)是 .NET Framework 的核心功能之一,它可以允許開發人員可以在程式碼的層級中設定權限,讓特定的使用者無法執行特定的程式碼,或者可以限制程式碼只能存取某些系統功能,例如 GacIdentityPermission 可限制組件只有在安裝於 GAC(Global Assembly Cache)的情況下才可執行,而 FileIOPermission 則控制了存取檔案的權限;再結合 .NET Framework 的程式碼原則(Policy),可在撰寫少量程式碼的狀態下,達到控管程式碼安全的目標。

    作業系統的安全性也是 .NET Framework 所重視的部份,在 .NET Framework 2.0 新增了可以存取與修改檔案系統安全性(即存取控制表)的類別,如 FileSecurity 與 DirectorySecurity 等類別,可以修改檔案或資料夾的 ACL 權限表,以控制存取的規則。

    除了程式碼部份的安全性以外,資料的安全性也很重要,在公開網路或是公開的範圍內傳輸機密資料時,必須要進行加密與解密工作,此時加密演算法(Cryptographic Algorithm)就非常重要,.NET Framework 支援了許多的對稱性演算法與雜湊計算的演算法,可利用的演算法都在 System.Security.Cryptographics 命名空間中,同時也支援非對稱性演算法與密碼金鑰產生能力等等。

    同時,應用程式也需要記錄使用者狀態,或者直接取用 Windows 使用者帳戶資訊,.NET Framework 提供了 WindowsPrincipal/WindowsIdentity、GenericPrincipal/GenericIdentity 等類別物件可用,若應用程式需要實作自己的邏輯時,就可用 GenericPrincipal 與 GenericIdentity,直接取用 Windows 使用者帳戶資訊時則用 WindowsPrincipal 與 WindowsIdentity。

    資訊安全是 .NET Framework 應用程式的重點項目,所以考試在這個部份佔了 1/5 的篇幅,考生要對 CAS、權限、密碼雜湊與加解密、層級管理與使用者狀態等的程式設計方法要很熟悉,這個部份可算是本科考試中最雜也最不好準備的部份,考生需要多加注意。

     
  • 在 .NET Framework 應用程式中實作互通性、型別反映與郵件功能(11%)

    互通性(Interoperability)係應用程式透過 .NET Framework 提供的交換能力,讓應用程式可以存取 COM 元件或是 DLL 所開放出來的函式,亦可以將應用程式開放給 COM 元件取用,互通性包含了 DLL 的函式宣告、產生 COM 參考組件及產生組件的型別函式庫(Type Library)等。在實務上,這個功能經常會使用到,例如呼叫廠商提供的 DLL 來控制 RFID Reader。

    型別反映(Type Reflection)則是透過存取物件的 Metadata,以取得物件的資訊、組件資訊、甚至可以呼叫物件的方法或是存取屬性等等,具有相當強大的物件控制能力,開發人員可以善用它實作出動態載入與動態存取的能力。

    開發人員可以透過 System.Net.Mail 命名空間中的 SmtpClient 與 Message 類別來實作發送 SMTP 郵件的能力,這個類別比較簡單,卻有許多可研究之處,例如透過 SSL 發信,或是 SMTP Server 驗證都是。

    考生要特別針對DLL函式宣告、COM 元件的取用、開放組件給 COM、Reflection 與 SmtpClient 要多所了解。

     
  • 在 .NET Framework 應用程式中實作全球化、文字操作與繪圖功能(11%)

    全球化(Globalization)在大型或是跨國型的資訊系統來說很重要,例如文字的區域化(Localization)、貨幣單位與時間的同步等等,在 .NET Framework 中也提供了基礎上的支援(System.Globalization),而最常見的,還是文字的編碼問題(例如 UTF-8 轉成 Big5),System.Text.Encoding 類別提供了預設 ASCII、UTF-7、UTF-8 與預設編碼(Default)的支援,可以讓開發人員簡單的將文字轉碼。

    文字的操作除了編碼外,還有搜尋(Search)與組合(Append),搜尋部份 .NET Framework 支援了 Regular Expression 的搜尋方式(System.Text.RegularExpression),而組合則有 StringBuilder 可以利用,最基本的文字操作則都包含在 System.String(也就是 string 資料型態)的成員函式中。

    繪圖能力(Drawing ability)則是以 System.Drawing 為主,提供了筆刷(Brush)、筆(Pen)、畫布(Graphics)、影像(Bitmap/Image)、形狀(Rectangle/Region)、字型(Font)與顏色(Color)等功能,開發人員可以利用這些類別來在應用程式上進行影像處理與繪圖工作,然後存成資料流或是檔案。

    考生應對基本文字處理、Regular Expression 使用、編碼、繪圖功能、區域設定等有所基本了解,最好是實作幾次程式。

     

準備方法

由於 70-536 考試的範圍比較廣且比較雜,在準備方面,筆者建議先建立好基礎概念,例如執行緒、資料流、RTTI、加密與權限管理、文字處理與繪圖等等,有許多主題概念都分布在不同的書中,若想要對於部份類別有較多且較佳的應用,概念還是需要了解,並且搭配實作來驗證。

準備用書籍部份,微軟官方有出一本教育訓練的教材,目前已有出版社翻譯為中文版,另外,微軟出版社也有幾本好書:

  • Programming Visual C# 2005: The Language
  • Programming Visual Basic 2005: The Language
  • Programming Visual C# 2005: The Base Class Library

都適合作為準備用書。

官方的教育訓練課程則有:

Collection 5160: Core Development with the Microsoft® .NET Framework 2.0 Foundation

Collection 5161: Advanced Development with the Microsoft® .NET Framework 2.0 Foundation

其實準備本科最好的方法,就是寫,而且要多做實驗,這樣才會知道哪些正確,哪些不正確,有些程式是不能用看的就好了,要實際下去寫,才能夠感受到差異的地方,也比較能夠了解真正的 .NET Framework 的類別庫操作,在未來做 Windows、Web 或分散式開發時,才會有正面幫助。

考試資訊

考試代碼:Exam 70-536
考試名稱:TS:Microsoft .NET Framework 2.0 Application Development Foundation
題目數量:45
通過分數:700