內容簡介
測試有道:微軟測試技術心得本書由微軟公司專家撰寫,書中包含很多新穎的測試工具介紹,重點內容中英文對照是本書的另外一大亮點。書中包括超過20個微軟公司的開發團隊常用的測試工具及其使用方法的介紹。有很多工具是第一次正式通過出版物向公眾介紹,包括一些剛剛開源不久的、之前僅在微軟內部使用的測試自動化工具。同時本書還提供了一些實用測試文檔的模板、內部最佳做法,以及常用度量標準,為讀者的實際測試工作提供幫助。
本書適合學習和研究測試技術的測試工程師、對測試感興趣的人員,以及高校學生閱讀和參考。
引子
今天,軟體測試工程師會告訴我們,他們的主要工作就是發現缺陷。但是,我們都知道,測試將永遠不會找到所有的缺陷,而且更不可能去“測試質量”。產品質量的顯著提高需要改變我們的軟體工程實踐。為了達成長遠的影響,我們的測試工程師必須要有更高的技能,並參與到軟體開發生命周期中的每一個階段中來。測試必須要不斷地發展,以確保軟體質量從產品剛開始構想階段就得到貫徹。測試需要了解如何建立一個高質量的基礎架構,以及如何最大化測試的影響,同時保持靈活性,並不斷提高測試效率。
——S•索馬塞加爾(DevDiv副總裁)
是的,包括微軟公司在內的業界各個軟體開發企業在不長的幾十年的軟體產品開發和服務提供的實踐中,都深深認識到軟體測試和軟體測試工程師在軟體開發工程過程中是必不可少的。在早期的“軟體作坊”時代中,個人英雄主義盛行,大家崇尚程式設計師單打獨鬥的行為。但很明顯,現如今已經到了一個新的時代,一個軟體作為服務來提供的時代,一個軟體系統的複雜性急劇增加的時代,一個
目錄
第1章軟體測試概述1
2005年筆者接觸到了北京的一些培訓公司,他們介紹說現在軟體測試類的課程非常受歡迎,現在市面上有大量軟體測試工程師的職位在公開招聘。實際上當時北京的幾個大的外包公司如文思創新、博彥科技、天海宏業(後被大連海輝併購)、中軟、神州數碼等早就已經開始在大張旗鼓地挖搶人才,在北京市場上,對軟體測試工程師的需求早就驟然如井噴式爆發。
什麼是軟體測試1
測試工程師的任務3
小知識5
什麼是PSS數據5
什麼是Watson數據5
測試工程師的職業路徑6
成功職業生涯規劃的提示7
測試與管理15
案例:微軟軟體開發團隊16
練習:測試自動可樂販賣機18
第2章測試與軟體開發模型19
軟體開發生命周期模型(SoftwareDevelopmentLifeCycle)指的是軟體開發全過程、活動和任務的結構性框架。軟體項目的開發會包括需求、設計、編碼、測試、穩定、部署等階段,有時也會包括維護階段。本章介紹現今被業界廣為使用的幾種主要的開發模型,以及測試在這些模型中的地位。
瀑布模型(WaterfallModel)20
RUP20
敏捷軟體開發方法(Agilesoftwaredevelopment)22
軟體開發過程中的測試23
提高軟體的可測性(Testability)23
測試模式24
微軟的軟體產品開發過程25
案例:MSF(MicrosoftSolutionFramework)28
第3章軟體質量與測試35
軟體跟其他的工業產品並沒有本質區別,現代社會的工農業化進展已經經過了幾十年,有很多種方法可以用來控制產品的質量,從而可以保證人民民眾購買到的水果、食物、家電、設備儘可能少得出現瑕疵。這些被現代生產製造企業廣泛採用的產品質量控制和質量保證方法,一樣可以用於軟體產品的質量保證和控制。例如,“全面質量管理”是一個基於統計學原理的質量控制方法,這個方法的發展過程就非常具有代表性,也會有助於我們理解軟體的質量控制。
軟體質量(Quality)35
質量控制(QualityControl)36
質量保證(QualityAssurance)37
軟體工程師摧毀地球38
全面質量管理(TotalQualityManagement,TQM)38
能力成熟度模型(CapabilityMaturityModel®Integration,CMMI)39
ISO9000&ISO1720540
事後析誤(postmortem)41
根本原因分析(RootCauseAnalysis,RCA)41
故障模式與後果分析(Failuremodeandeffectsanalysis)42
威脅模型分析(ThreatModelAnalysis,TMA)43
第4章軟體測試方法45
軟體程式設計有基本的算法,軟體系統測試也有一般性的測試方法。使用這些測試方法,我們往往能夠找到那些最一般、最普遍的軟體問題,這些方法也可以幫我們事半功倍地發現軟體中存在的錯誤和瑕疵。更重要的是,這些一般性的軟體測試方法可以被自動化,我們可以藉助這些方法生成一些輔助性的自動化測試工具,從而可以讓測試更加高效。
黑盒測試(Black-boxtesting)45
白盒測試(White-boxtesting)46
灰盒測試(Grey-boxTesting)48
基於場景的測試方法(Scenariotesting)49
等價類法(Equivalencevalueclass)50
練習:等價類測試設計51
邊界值法(Boundaryvalueanalysis)52
示例:邊界值分析53
判定表法(TableBasedMethodology)54
組合分析法(Combinatorialanalysis)55
工具:PICT工具使用56
狀態轉換表(Statetransition)58
第5章軟體測試類型59
根據產品的特點,要在不同的階段進行不同的測試操作。有一些測試是隨時隨地進行的,不少測試是有計畫進行的,例如在每個功能完成之後,在每一個版本編譯完成之後,就一定要進行回歸測試、冒煙測試和版本驗證測試。在產品的測試版本階段,一般都會執行探索性測試。對於軟體的用戶界面、安全性、性能和可靠性、穩定性、用戶安裝等跟用戶的軟體使用體驗直接有關的方面,我們也都必須要進行測試。
功能測試(FunctionalTesting)59
小知識:APITesting61
工具:Nunit61
工具:VisualStudio單元測試框架62
回歸測試(Regressiontesting)63
冒煙測試與bvt測試65
探索性測試(Exploratorytesting)67
安裝/版本升級測試(Setup/upgradetesting)69
工具:VeriTest-RationalInstallationAnalyzer71
軟體兼容性測試(Compatibilitytesting)72
案例:WindowsVista兼容性測試72
小知識:UAC73
工具:ApplicationVerifier75
性能測試(Performancetesting)77
工具:WindowsPerformanceAnalysisTools(WPT)79
工具:VisualStudio性能分析工具80
工具:WPFPerf81
負載測試(Loadtesting)83
監視和分析負載測試結果84
壓力測試(Stresstesting)85
國際化/全球化/本地化測試87
小知識:I18N,G11N,L10N88
編碼89
工具:CharacterMap程式91
工具:螢幕鍵盤工具92
輔助選項測試(Accessibilitytesting)92
工具:accVerify94
工具:UISpy94
安全性測試(Securitytesting)95
保證套用的安全性和威脅建模96
小知識:微軟安全性測試10個小提示98
小知識:MicrosoftSDL98
工具介紹:SDLthreatmodelingToolv399
安全託管代碼100
託管代碼的常見設計缺陷101
工具:FxCop103
C/C++代碼的常見設計缺陷104
工具:Prefast105
代碼度量(CodeMetrics)107
工具:VisualStudio2008代碼度量108
第6章測試計畫和測試策略110
軟體開發過程中的戰略部署保證軟體開發過程朝著正確的方向前進,軟體開發過程中的計畫保證戰略按部就班地實施。在制訂軟體開發計畫的時候,同時要制訂軟體測試計畫。在現代的軟體開發過程中,測試早就已經是項目過程中必不可少的一個任務,作為一個貫穿始終的行為,軟體測試必須要有計畫和策略。軟體測試的計畫依附於軟體開發的計畫,所以在進行軟體測試計畫時,要參考軟體開發計畫,當然,也要參考用戶需求說明書和軟體規格說明書等材料。
什麼是測試計畫110
模板:測試計畫文檔111
什麼是測試策略139
模板:測試策略模板140
測試範圍143
風險優先權模型145
基於風險的測試146
有計畫的複審活動147
第7章測試自動化150
本章向大家介紹一些軟體測試自動化小工具,包括一些錄製工具、用戶界面測試的自動化工具、基於模型的軟體測試自動化工具,同時也介紹了一些自動化測試框架和類庫,使用這些框架和類庫,大家都可以開發自己的軟體測試自動化工具。本章介紹到的工具,都是微軟公司一直在內部使用的小工具,現在已經全部開放下載和使用。
測試自動化的發展150
手動測試151
硬編碼測試自動化152
工具:RPF(RecordandPlaybackFramework)Programmer152
練習:輕量.NETUI自動化設計153
小知識:反射技術159
MicrosoftUI自動化庫160
測試自動化程式設計160
測試庫和測試框架161
工具:White162
數據驅動測試164
基於模型的測試165
小知識:殺蟲劑悖論166
例子:微軟過橋問題166
小知識:Dijkstra算法168
工具:WinSTDtoDOTVisualizationTool168
工具:NModel工具170
第8章代碼覆蓋率171
代碼覆蓋率技術是對測試的檢驗,同時也是一種間接檢驗軟體代碼質量的方法。毫無疑問,代碼覆蓋率很重要。代碼覆蓋率的考量,是對軟體測試用例水平的考量,這時,我們對軟體測試開始進行管理。軟體測試從全憑經驗的、隨機的、不可控的階段進入到了可管理、可控制、可度量的新的階段。
代碼覆蓋率171
覆蓋種類173
代碼覆蓋率度量結果分析和決策178
其他類型的覆蓋178
工具:VisualStudio代碼覆蓋率工具179
第9章調試180
調試技能是軟體支持工程師賴以生存的最基本技能,軟體測試工程師最好能了解一些調試技術的知識。不少時候我們測試的程式是已經編譯完成的版本,如果出現了崩潰、藍屏、或者其他嚴重的系統性錯誤,如果我們掌握一定的調試技能,就能在運行時抓取錯誤,跟蹤錯誤,找到導致程式出錯的代碼片段的位置。請記住,軟體測試工程師的角色永遠不是找錯,而應該是找出錯誤的根源。
調試180
工具:VisualStudio在設計時進行調試182
異常182
小知識:異常捕獲185
斷言(ASSERT)186
工具:WinDBG187
託管代碼中的斷言188
轉儲檔案188
轉儲檔案類型189
用戶模式數據轉儲檔案生成191
核心轉儲檔案生成191
遠程調試192
調試準則192
調試建議193
第10章測試文檔編寫195
本書提供了一些實用測試文檔的模板、內部最佳做法及常用度量標準。相信這些內容會為讀者的實際測試工作提供幫助。
測試文檔概述196
測試用例197
模板:測試用例模板198
軟體缺陷報告(BugReport)199
模板:軟體缺陷報告201
項目狀態報告203
第11章軟體缺陷管理204
軟體缺陷的管理包括:缺陷類選和缺陷消除管理。所有的軟體缺陷,所有被發現的軟體缺陷,都應該被存儲在缺陷管理庫中,以備查和再次驗證。這個缺陷被操作的過程,這個缺陷被最終解決的方法,都要被記錄下來,作為知識保留。軟體缺陷和測試用例等都是關聯在一起的,對於軟體缺陷的管理,跟對原始碼的管理,對測試用例的管理一樣,都是現代軟體項目管理的一部分。
缺陷處理工作流204
缺陷類選(BugTriage)205
缺陷類選圖例206
優先權和嚴重性定義207
小知識:錯誤收斂(BugConvergence)212
小知識:零錯誤反彈(ZeroBugBounce)212
缺陷消除的有效性(DefectRemovalEfficiency)214
第12章完整的測試體系構成215
企業中要真正實施軟體測試,就必須建立一個完整的軟體測試體系,建設軟體測試隊伍,搭建軟體測試的軟體硬體環境,購買必須的工具,並對人員進行訓練。
人員215
一個完善的測試體系的構成217
環境搭建218
測試執行管理220
工具:WTT測試框架221
工具:VSTS測試管理221
第13章微軟公司企業文化226
我們希望在這裡與大家一起分享微軟公司的企業文化中代表性的一些要點,這些要點可能會幫助到大家,用更加“微軟”的方式去思考,也可以更容易地去跟微軟公司的項目經理和工程師進行溝通。
員工才是最重要的資產226
認同和鼓勵多元化227
用技術武裝人228
技術可以改變員工的工作方式229
利用信息要真正幫助員工和企業229
微軟公司價值觀230
微軟的企業商業環境231
實現承諾232
從錯誤中學習233
按期完成工作233
了解決議的形成過程235
解決衝突236
尊重多元化237
第14章更加國際化238
承接歐美外包項目,就需要參與者更加國際化。世界上的民族和國家之間的文化差異其實非常明顯。本章中討論的文化主要是美國文化,因為本書面向的期望讀者群將有很多正在從事著來自美國企業的外包項目。在仔細審視美國的核心價值與商業後會發現,作為一個軟體測試工程師或軟體開發工程師,不能僅停留在代碼編寫層面,在商業社會裡大家都分工協作,要想保持順暢的溝通,就必須理解對方的民族性格。
打死我也不說(Yestodeath)238
美國的核心價值與商業239
第15章測試經理的領導力培養246
在美國,有一種領導者往往具有非常強的個人魅力和遠見,能夠通過自身的人格去影響他人。因為他們的特殊天賦和激勵他人的能力,這種人通常會成為領袖。但往往這種類型的領導是不可替代的,當他們離開時,所在的組織可能會陷入一個混亂的狀態。
領導風格246
激勵團隊248
構建團隊251
做出決定254
附錄A對歐美外包的有效溝通之道257
美國人的溝通方式257
建立信譽260
獲取信息263
善於表達265
手機、電話、郵件、書信、報告269
交涉與談判272
與美國人討論的話題276
附錄B對歐美外包活動之有效的會議組織281
組織有歐美人士參加的會議281
附錄C學會寫郵件286