金鑫,微軟專家級(jí)工程師,目前和微軟平臺(tái)即服務(wù)產(chǎn)品(PaaS)Azure App Service的產(chǎn)品組合作,為微軟Azure App Service的支持工程師提供技術(shù)咨詢、解決方案和自動(dòng)化診斷工具。自2000年加入微軟亞太區(qū)全球技術(shù)支持中心以來(lái)一直專注于企業(yè)級(jí)Web應(yīng)用和分布式系統(tǒng),精通IIS,ASP.NET,Windows Workflow Foundation, COM+ 等技術(shù)。最近幾年致力于現(xiàn)代Web開(kāi)發(fā)技術(shù)和云計(jì)算,包括開(kāi)源的AngularJS, TypeScript以及Azure App Service。 武帥,微軟專家級(jí)支持工程師。于2011年加入微軟后一直專注于企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)與技術(shù)咨詢工作,精通ASP.NET MVC, Entity Framework和AngularJS等Web前端技術(shù)。目前主要致力于微軟公有云Azure、Visual Studio Team Service、Xamarin和.NET Core等新興技術(shù)的開(kāi)發(fā)咨詢與推廣。
第1章前端開(kāi)發(fā)測(cè)試總覽...2
1.1Web技術(shù)的發(fā)展和挑戰(zhàn)...2
1.2傳統(tǒng)開(kāi)發(fā)流程的局限性...4
1.3傳統(tǒng)手工測(cè)試的局限性...6
1.4開(kāi)發(fā)模式的轉(zhuǎn)型...7
1.4.1敏捷軟件開(kāi)發(fā)...7
1.4.2全流程測(cè)試...9
1.4.3讓測(cè)試自動(dòng)化...11
1.4.4持續(xù)集成...11
1.4.5DevOps...12
1.5本書(shū)目標(biāo)...13
第2章搭建測(cè)試基礎(chǔ)環(huán)境...15
2.1JavaScript的運(yùn)行環(huán)境Node.js...15
2.1.1什么是Node.js...15
2.1.2Node.js的版本發(fā)展...17
2.1.3安裝Node.js...18
2.2軟件包管理系統(tǒng)NodePackageManager(npm)...21
2.2.1安裝和更新npm...21
2.2.2package.json...22
2.2.3安裝軟件包...23
2.2.4列出已安裝的軟件包...27
2.3代碼編輯器(VisualStudioCode)...28
目錄
2.3.1安裝VisualStudioCode...28
2.3.2初識(shí)VisualStudioCode...29
單元測(cè)試篇
第3章單元測(cè)試概論...34
3.1單元測(cè)試的特性...34
3.2單元測(cè)試的重要性...35
3.3測(cè)試金字塔...37
3.4測(cè)試先行(Test-First)...8
3.4.1測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test-DrivenDevelopment)...39
3.4.2行為驅(qū)動(dòng)開(kāi)發(fā)(Behavior-DrivenDevelopment)...40
3.5Web前端測(cè)試框架...42
第4章深入Jasmine單元測(cè)試...44
4.1初識(shí)Jasmine...44
4.1.1獲取Jasmine...44
4.1.2前端單元測(cè)試架構(gòu)...46
4.1.3Jasmine測(cè)試框架類庫(kù)...46
4.2組織測(cè)試用例...48
4.2.1describe...48
4.2.2it...49
4.2.3安裝和拆卸...50
4.2.4禁用測(cè)試套件和掛起測(cè)試用例...54
4.3創(chuàng)建單元測(cè)試...55
4.3.1準(zhǔn)備測(cè)試場(chǎng)景...55
4.3.2編寫(xiě)測(cè)試用例...56
4.3.3執(zhí)行測(cè)試......58
4.4Jasmine的斷言...59
4.4.1內(nèi)置匹配器...59
4.4.2自定義匹配器(CustomMatcher)........................67
4.4.3自定義相等檢驗(yàn)器(CustomEqualityTester)
..................68
4.4.4非對(duì)稱相等檢驗(yàn)器(AsymmetricEqualityTester)...............70
4.4.5輔助匹配函數(shù)...71
4.5測(cè)試替身(TestDouble)...74
4.5.1測(cè)試替身的類型...74
4.5.2使用JasmineSpies......77
4.6測(cè)試異步代碼...84
4.6.1Jasmine的異步支持...87
4.6.2模擬JavaScriptTimeout相關(guān)函數(shù)...........................89
4.7Jasmine插件...90
4.7.1jasmine-ajax...90
4.7.2jasmine-jquery...94
4.8基于瀏覽器調(diào)試......100
第5章單元測(cè)試執(zhí)行工具Karma..............................102
5.1初識(shí)Karma...102
5.2安裝Karma和相關(guān)插件...104
5.2.1安裝Karma...104
5.2.2安裝插件...105
5.3Karma的配置...106
5.3.1生成配置文件...106
5.3.2配置文件的說(shuō)明......107
5.4基于Karma的調(diào)試...115
5.5前端自動(dòng)化任務(wù)構(gòu)建工具..............................116
5.5.1gulp和Grunt...116
5.5.2gulp的API...118
5.5.3運(yùn)行g(shù)ulp任務(wù)...122
5.6Karma和gulp集成...123
第6章AngularJS應(yīng)用的單元測(cè)試...........................125
6.1測(cè)試AngularJS應(yīng)用的挑戰(zhàn)..............................125
6.2初識(shí)ngMock...127
6.2.1準(zhǔn)備測(cè)試環(huán)境...127
6.2.2理解模塊(Module)...128
6.2.3理解注入機(jī)制(Inject)
...131
6.3AngularJS單元測(cè)試最佳實(shí)踐...........................138
6.3.1測(cè)試Controller...138
6.3.2單元測(cè)試中的Scope...142
6.3.3測(cè)試HTTP交互...144
6.3.4測(cè)試Directive...154
6.3.5測(cè)試$timeout和$interval...166
6.3.6測(cè)試Promise...171
6.3.7測(cè)試$log......174
6.3.8測(cè)試$exceptionHandler...175
第7章代碼覆蓋率...177
7.1代碼覆蓋率的衡量標(biāo)準(zhǔn)...177
7.1.1函數(shù)覆蓋率(FunctionCoverage)........................177
7.1.2語(yǔ)句覆蓋率(StatementCoverage)
........................178
7.1.3分支覆蓋率(BranchCoverage)........................179
7.1.4條件覆蓋率(ConditionCoverage)........................179
7.2代碼覆蓋率的意義...179
7.3JavaScript代碼覆蓋率工具Istanbul........................180
7.3.1安裝Istanbul...181
7.3.2覆蓋率測(cè)試...181
7.3.3覆蓋率閾值...183
7.3.4忽略代碼...183
7.3.5Istanbul工作原理......184
7.4使用Karma生成覆蓋率報(bào)告...........................185
自動(dòng)化測(cè)試篇
第8章走進(jìn)自動(dòng)化測(cè)試...188
8.1自動(dòng)化測(cè)試的優(yōu)勢(shì)...188
8.2自動(dòng)化測(cè)試實(shí)施流程...189
8.3自動(dòng)化測(cè)試轉(zhuǎn)型的適應(yīng)性..............................190
8.4測(cè)試工具的選擇......192
第9章初識(shí)Selenium...194
9.1Selenium發(fā)展歷史...194
9.2Selenium工具套裝...196
9.2.1SeleniumRC...196
9.2.2SeleniumWebDriver...197
9.2.3SeleniumGrid...198
9.2.4SeleniumIDE...198
第10章SeleniumWebDriver與元素定位........................205
10.1搭建集成開(kāi)發(fā)環(huán)境...205
10.2NUnit測(cè)試框架......207
10.3編寫(xiě)測(cè)試用例...209
10.4使用工廠模式創(chuàng)建驅(qū)動(dòng)對(duì)象...........................212
10.5定位頁(yè)面元素...214
10.5.1基于id定位...214
10.5.2基于Name定位...215
10.5.3基于ClassName定位...216
10.5.4基于TagName定位...217
10.5.5基于LinkText定位...217
10.5.6基于PartialLinkText定位...218
10.5.7基于CssSelector定位...219
10.5.8基于XPath定位......220
第11章基于WebDriver的Protractor測(cè)試框架..................227
11.1WebDriver的JavaScript綁定...........................227
11.1.1WebDriverJs與Protractor...228
11.1.2Protractor特點(diǎn)概述...229
11.1.3Protractor的兼容性...230
11.2搭建Protractor測(cè)試環(huán)境...230
11.2.1安裝Protractor編輯器擴(kuò)展..............................230
11.2.2準(zhǔn)備AngularJS被測(cè)網(wǎng)站...231
11.2.3全局安裝Protractor與瀏覽器驅(qū)動(dòng)........................234
11.2.4本地安裝Protractor與瀏覽器驅(qū)動(dòng)........................235
11.2.5編寫(xiě)測(cè)試代碼...235
11.2.6編寫(xiě)配置文件...236
11.2.7運(yùn)行測(cè)試用例...236
11.2.8調(diào)試......237
11.3選擇JavaScript測(cè)試框架..............................240
11.3.1配置JavaScript測(cè)試框架...240
11.3.2JavaScript測(cè)試框架的適配器...241
11.4定位頁(yè)面元素...244
11.4.1基于binding定位......245
11.4.2基于model定位......246
11.4.3基于options定位......246
11.4.4基于buttonText定位...247
11.4.5基于repeater定位...247
11.4.6基于js定位...248
11.4.7鏈?zhǔn)秸{(diào)用定位操作...249
11.4.8使用$和$$...250
11.4.9自定義定位策略......251
11.5異步流程控制...252
11.5.1使用Promise...253
11.5.2定制的ControlFlow...256
11.5.3JavaScript測(cè)試框架的異步適配器........................259
11.6頁(yè)面交互...260
11.6.1操作瀏覽器...260
11.6.2操作元素...263
11.7Protractor的等待機(jī)制...265
11.7.1waitForAngular...265
11.7.2使用sleep...266
11.7.3隱式等待...266
11.7.4顯式等待...267
11.8測(cè)試非AngularJS程序...269
第12章使用SeleniumServer...273
12.1SeleniumServer環(huán)境配置..............................273
12.1.1安裝JavaJDK...274
12.1.2下載SeleniumServerStandalone........................275
12.1.3下載瀏覽器驅(qū)動(dòng)......276
12.1.4配置Protractor...276
12.1.5啟動(dòng)SeleniumServer...277
12.2JSONWireProtocol與W3CWebDriver標(biāo)準(zhǔn)..................279
12.3Selenium3.0...282
12.4配置瀏覽器...282
12.4.1Chrome......285
12.4.2Firefox......285
12.4.3Edge......288
12.4.4IE.........289
12.4.5多瀏覽器測(cè)試...291
第13章自動(dòng)化測(cè)試最佳實(shí)踐...294
13.1頁(yè)面對(duì)象模型...294
13.1.1關(guān)注點(diǎn)分離...295
13.1.2實(shí)現(xiàn)Protractor頁(yè)面對(duì)象...296
13.1.3頁(yè)面對(duì)象最佳實(shí)踐...306
13.2數(shù)據(jù)驅(qū)動(dòng)測(cè)試...307
13.3測(cè)試報(bào)告...311
13.3.1控制臺(tái)報(bào)告...312
13.3.2JUnit報(bào)告...313
13.3.3HTML報(bào)告...315
13.4性能測(cè)試...316
13.5圖像匹配...319
13.6任務(wù)自動(dòng)化...322
13.6.1與gulp集成...322
13.6.2npm腳本...325
第14章分布式自動(dòng)化測(cè)試...327
14.1分布式測(cè)試概述...327
14.2基于SeleniumGrid的分布式測(cè)試........................328
14.2.1啟動(dòng)中央節(jié)點(diǎn)...329
14.2.2注冊(cè)工作節(jié)點(diǎn)...329
14.2.3執(zhí)行測(cè)試...331
14.3基于云計(jì)算的分布式測(cè)試...........................333
14.4配置共享...336
集成篇
第15章持續(xù)集成概論...340
15.1開(kāi)發(fā)流程自動(dòng)化...340
15.1.1什么是持續(xù)集成......341
15.1.2持續(xù)集成的價(jià)值......341
15.2持續(xù)集成的功能特征...343
15.2.1編譯......343
15.2.2測(cè)試......344
15.2.3審計(jì)......344
15.2.4部署......345
15.2.5反饋......345
15.3如何實(shí)施持續(xù)集成...345
15.3.1消除誤解...345
15.3.2前提條件...346
15.3.3CI工具......347
15.3.4實(shí)踐準(zhǔn)則...348
15.4選擇持續(xù)集成工具...350
第16章持續(xù)測(cè)試......352
16.1測(cè)試策略...352
16.2基于Jenkins的持續(xù)集成...353
16.3集成TeamFoundationServer...........................356
16.3.1創(chuàng)建項(xiàng)目...356
16.3.2從VisualStudioCode提交變更...........................358
16.3.3配置TFS插件...359
16.3.4創(chuàng)建并配置Jenkins構(gòu)建項(xiàng)..............................360
16.3.5集成單元測(cè)試...364
16.3.6集成自動(dòng)化測(cè)試......368
16.3.7郵件反饋...370
16.4集成VisualStudioTeamServices........................371
16.5集成GitHub...376
16.5.1配置GitHub...377
16.5.2配置Jenkins...379
16.5.3配置構(gòu)建任務(wù)...380
第1章前端開(kāi)發(fā)測(cè)試總覽第2章搭建測(cè)試基礎(chǔ)環(huán)境
3第1章前端開(kāi)發(fā)測(cè)試總覽和ASP等生成這樣的字符串。換句話說(shuō),所謂的“前端”是由后端服務(wù)器動(dòng)態(tài)輸出而成的HTML網(wǎng)頁(yè)。在這樣的傳統(tǒng)Web應(yīng)用中,前端只是充當(dāng)一個(gè)展示層,服務(wù)調(diào)用、網(wǎng)頁(yè)跳轉(zhuǎn)流程等都需要由后端服務(wù)器處理。每當(dāng)網(wǎng)頁(yè)功能有所變化時(shí)(即使網(wǎng)頁(yè)內(nèi)容只有細(xì)微變動(dòng)),瀏覽器都需要重新發(fā)起一個(gè)HTTP請(qǐng)求到服務(wù)器,然后由后端服務(wù)器重新生成整個(gè)頁(yè)面如圖1-1所示。這種方式不但增加服務(wù)器的負(fù)擔(dān),降低響應(yīng)速度,而且瀏覽器重復(fù)下載整個(gè)網(wǎng)頁(yè)會(huì)浪費(fèi)網(wǎng)絡(luò)帶寬,對(duì)于移動(dòng)應(yīng)用很不經(jīng)濟(jì)。服務(wù)器瀏覽器初始請(qǐng)求HTMLHTMLPageReloadFormPOST圖1-1傳統(tǒng)網(wǎng)頁(yè)生命周期而在現(xiàn)代Web應(yīng)用中,當(dāng)網(wǎng)頁(yè)的部分內(nèi)容需要更新時(shí),運(yùn)行在瀏覽器內(nèi)的JavaScript代碼通常會(huì)向服務(wù)器發(fā)送Ajax請(qǐng)求,而服務(wù)器端只需輸出必要的數(shù)據(jù),不需要重新構(gòu)造整個(gè)HTML頁(yè)面,如圖1-2所示。Web前端應(yīng)用接收到來(lái)自服務(wù)器的數(shù)據(jù)后,只需重繪界面上需要變化的部分。這種方式提高了應(yīng)用的響應(yīng)速度,改善了用戶的使用體驗(yàn)。同時(shí),因?yàn)楹芏嘤脩艚换サ奶幚砉ぷ骺梢栽跒g覽器內(nèi)完成,無(wú)需向服務(wù)器發(fā)送HTTP請(qǐng)求,服務(wù)器和瀏覽器之間交換的數(shù)據(jù)量大幅減少,所以服務(wù)器負(fù)荷降低,響應(yīng)速度也更快了。Web應(yīng)用漸漸開(kāi)始擁有和桌面應(yīng)用一樣的響應(yīng)速度和使用體驗(yàn)。服務(wù)器瀏覽器初始請(qǐng)求HTMLJSONAjax{.}圖1-2現(xiàn)代單頁(yè)應(yīng)用(SPA)生命周期除了網(wǎng)頁(yè)內(nèi)容的更新,Web應(yīng)用一部分業(yè)務(wù)邏輯的處理也從后端服務(wù)器慢慢移到前
端,Web前端開(kāi)發(fā)變得越來(lái)越重要。而這一切都離不開(kāi)JavaScript。
JavaScript是1995年由Netscape工程師BrendanEich花了10天的時(shí)間創(chuàng)造出來(lái)的,其最初目的是為了滿足用戶瀏覽網(wǎng)頁(yè)時(shí)產(chǎn)生的交互需求。可以說(shuō),JavaScript是為開(kāi)發(fā)Web應(yīng)用而誕生的。
自其誕生起的相當(dāng)長(zhǎng)一段時(shí)間內(nèi),這門在瀏覽器內(nèi)執(zhí)行一些簡(jiǎn)單的校驗(yàn)和互動(dòng)的腳本語(yǔ)言常被稱之為“玩具語(yǔ)言”,堪稱世界上被人誤解最深的編程語(yǔ)言a。在簡(jiǎn)潔的外表下,JavaScript其實(shí)有著強(qiáng)大的語(yǔ)言特性。它是一種面向?qū)ο蟮膭?dòng)態(tài)語(yǔ)言,包含類型、運(yùn)算符、標(biāo)準(zhǔn)內(nèi)置對(duì)象和方法。其語(yǔ)法來(lái)源于Java和C,所以這兩種語(yǔ)言的許多語(yǔ)法特性同樣適用于JavaScript。
隨著Web應(yīng)用的普及,JavaScript自身也在不斷演化以適應(yīng)更復(fù)雜的編程需求,目前JavaScript已經(jīng)成為Web前端的實(shí)際標(biāo)準(zhǔn),也是最熱門的編程語(yǔ)言之一。各種JavaScript前端框架,包括Ember、AngularJS、React和Vue等不斷涌現(xiàn)。
正因?yàn)榛贘avaScript前端應(yīng)用越來(lái)越重要,功能越來(lái)越復(fù)雜,對(duì)前端開(kāi)發(fā)測(cè)試帶來(lái)了極大的挑戰(zhàn)。如何保證Web前端應(yīng)用的正確性和可靠性成為了各大企業(yè)關(guān)注的問(wèn)題。
●在市場(chǎng)需求的推動(dòng)下,Web前端應(yīng)用規(guī)模不斷擴(kuò)大,一個(gè)應(yīng)用可能有成千上萬(wàn)行JavaScript代碼。這些代碼用于執(zhí)行各種復(fù)雜的功能,為用戶提供不同的交互體驗(yàn)。為了確保它們能實(shí)現(xiàn)預(yù)期的功能,因此Web前端應(yīng)用測(cè)試的工作量也需要相應(yīng)增加。●相對(duì)于傳統(tǒng)的桌面應(yīng)用,用戶只要重新刷新瀏覽器就可以獲得最新版本的網(wǎng)頁(yè),所以Web前端應(yīng)用具有天生的快速迭代特征,可以頻繁地更新和發(fā)布。而激烈的商業(yè)競(jìng)爭(zhēng)也使得Web前端應(yīng)用開(kāi)發(fā)周期縮短,對(duì)應(yīng)的測(cè)試周期也非常短。●除了JavaScript代碼,Web前端應(yīng)用還有各種超鏈接、表單以及圖片等信息,需要保證在不同的操作系統(tǒng)和瀏覽器上可以正確顯示網(wǎng)頁(yè)的內(nèi)容。1.2傳統(tǒng)開(kāi)發(fā)流程的局限性在過(guò)去二十年或更長(zhǎng)的時(shí)間中,傳統(tǒng)的、非敏捷的瀑布式軟件開(kāi)發(fā)模式通常依賴于一
aDouglasCrockford.JavaScript:TheWorld'sMostMisunderstoodProgrammingLanguage[OL].[2016].http://javascript.crockford.com/javascript.html.
第1章前端開(kāi)發(fā)測(cè)試總覽
個(gè)嚴(yán)格的模式化開(kāi)發(fā)流程。通常認(rèn)為瀑布模型a是WinstonW.Royce在1970年提出的軟件開(kāi)發(fā)模型(雖然他并沒(méi)有使用瀑布waterfall這個(gè)單詞)。這種方法源自傳統(tǒng)工業(yè)生產(chǎn),嚴(yán)格遵循預(yù)先計(jì)劃的需求、分析、設(shè)計(jì)、編碼、測(cè)試和部署的步驟順序進(jìn)行,每個(gè)步驟都有嚴(yán)格分工,由不同的技術(shù)人員分別執(zhí)行。執(zhí)行步驟的成果作為衡量進(jìn)度的途徑,例如需求規(guī)格、設(shè)計(jì)文檔、測(cè)試計(jì)劃和代碼審閱等。但隨著各種新興技術(shù)的蓬勃發(fā)展,特別是在產(chǎn)品快速迭代的需求背景下,這種傳統(tǒng)開(kāi)發(fā)流程的局限性日益明顯:
1.自由度低,缺乏靈活性傳統(tǒng)模式在項(xiàng)目早期即作出承諾,基于穩(wěn)定的目標(biāo)進(jìn)行階段性的開(kāi)發(fā),這種方式自由度低,應(yīng)對(duì)突發(fā)情況時(shí)缺乏靈活性。眾所周知,需求會(huì)隨著時(shí)間而變化,經(jīng)常出現(xiàn)開(kāi)發(fā)人員努力在設(shè)計(jì)前完成文檔,在編寫(xiě)代碼前完成設(shè)計(jì),最后卻因?yàn)樾枨笥凶兓坏貌煌耆频怪貋?lái)的情況,不僅大量工作被浪費(fèi),甚至導(dǎo)致對(duì)后期需求的變化難以應(yīng)變,代價(jià)高昂。
2.缺陷發(fā)現(xiàn)晚,無(wú)法及時(shí)反饋傳統(tǒng)流程一般在開(kāi)發(fā)階段接近尾聲時(shí)才開(kāi)始測(cè)試。雖然在這個(gè)階段進(jìn)行測(cè)試相對(duì)容易,但是一些在早期的單元測(cè)試中可以輕易發(fā)現(xiàn)的缺陷可能要到最后階段才會(huì)發(fā)現(xiàn),增加了被遺漏的風(fēng)險(xiǎn)。
由于缺陷發(fā)現(xiàn)得很晚,如果要解決問(wèn)題,則有可能導(dǎo)致錯(cuò)過(guò)發(fā)布的最后期限,再加上手工測(cè)試效率低下,任何一次代碼變更或缺陷修復(fù)對(duì)產(chǎn)品的影響都無(wú)法迅速反饋給開(kāi)發(fā)人員。隨著發(fā)現(xiàn)的缺陷越來(lái)越多,開(kāi)發(fā)人員只會(huì)對(duì)變更沒(méi)有信心,失去持續(xù)完善的動(dòng)力。
3.協(xié)同合作缺失,容易引起團(tuán)隊(duì)沖突傳統(tǒng)流程中每個(gè)步驟都有嚴(yán)格分工,不同階段的技術(shù)人員與上下游的工種往往溝通較少,甚至對(duì)產(chǎn)品本身的理解也存在差異。例如,開(kāi)發(fā)人員和測(cè)試人員在思維和工作方式上的不同,使得他們對(duì)軟件需求和測(cè)試場(chǎng)景的表述發(fā)生歧義,從而引起雙方的溝通問(wèn)題。而這些理解上的差異如果直到測(cè)試階段才被發(fā)現(xiàn)的話,則實(shí)在太晚,此時(shí)雙方的沖突與指責(zé)對(duì)解決問(wèn)題沒(méi)有任何幫助。
4.產(chǎn)品質(zhì)量無(wú)法保證傳統(tǒng)流程中常見(jiàn)的一個(gè)場(chǎng)景是在項(xiàng)目后期將要交付的階段,技術(shù)人員倉(cāng)促地從開(kāi)發(fā)環(huán)境構(gòu)建轉(zhuǎn)為腳本配置,而長(zhǎng)期在開(kāi)發(fā)環(huán)境內(nèi)依靠手工管理,構(gòu)建腳本的時(shí)候就可能會(huì)遇到各種各樣的問(wèn)題,例如接口沒(méi)有定義、配置文件丟失、組件不工作等。為了解決這些問(wèn)
aWikipedia.Waterfallmodel[OL].[2016].https://en.wikipedia.org/wiki/Waterfall_model.
題,技術(shù)人員不得不把主要精力放在軟件構(gòu)建上,結(jié)果時(shí)間成本越來(lái)越高,產(chǎn)品質(zhì)量無(wú)法保證,甚至出現(xiàn)產(chǎn)品無(wú)法按時(shí)交付的情況。
1.3傳統(tǒng)手工測(cè)試的局限性軟件測(cè)試是在規(guī)定的條件下對(duì)程序進(jìn)行操作,以發(fā)現(xiàn)程序中的錯(cuò)誤,衡量軟件質(zhì)量,并對(duì)其是否能滿足設(shè)計(jì)要求進(jìn)行評(píng)估的過(guò)程。軟件測(cè)試的目的是希望以最小的代價(jià)盡可能多地找出軟件中潛在的錯(cuò)誤和缺陷。
首先,測(cè)試人員會(huì)針對(duì)開(kāi)發(fā)人員開(kāi)發(fā)的功能寫(xiě)出測(cè)試用例,例如表單應(yīng)該填入的數(shù)據(jù),頁(yè)面單擊順序,以及最后頁(yè)面期待的顯示效果。然后,測(cè)試人員會(huì)按照用例一步步進(jìn)行手工檢驗(yàn),如果發(fā)現(xiàn)頁(yè)面行為異常,例如無(wú)法打開(kāi)頁(yè)面或生成的數(shù)據(jù)不正確,則會(huì)在企業(yè)缺陷管理系統(tǒng)中提交缺陷記錄,供開(kāi)發(fā)人員進(jìn)行修正。在開(kāi)發(fā)過(guò)程中,如果有新版本編譯出來(lái),測(cè)試人員需要根據(jù)測(cè)試用例重新測(cè)試,確認(rèn)是否有新缺陷,或者老缺陷是否已經(jīng)得到了修正。
長(zhǎng)久以來(lái),這種傳統(tǒng)的手工測(cè)試模式在各大公司廣泛應(yīng)用,并已被證明其能夠行之有效地保證產(chǎn)品質(zhì)量。但伴隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,這種傳統(tǒng)的測(cè)試模式已經(jīng)顯示出越來(lái)越多的瓶頸。
……