要建立有效的皮下測試,我們可以嘗試通過(guò)常見(jiàn)的邏輯流程建立uniform pinch points。例如,我們可以建立一個(gè)命令消息處理系統,或一個(gè)普通的查詢(xún)界面。在最近的一個(gè)處理批處理文件項目上,批處理文件中的每一行都被轉換為一條消息。然后,我們創(chuàng )造一條消息,發(fā)送給這個(gè)系統,然后驗證處理該消息的所有異常情況。
由于皮下測試不是基于設計而是基于高級(業(yè)務(wù))行為,它們是理想的基于場(chǎng)景的測試策略,如BDD或Testcase Class per Fixture模式。如果我們要進(jìn)行大的重構,我們需要這些高層次的測試,為商業(yè)行為建立全面的安全保障。由于皮下測試更關(guān)注于端對端的邏輯,所以它也是標志功能點(diǎn)完成的一個(gè)重要的目標點(diǎn)。
雖然皮下測試使我們能夠安全地執行較大的重構,但它仍無(wú)法保證我們可以放心地將系統升級到生產(chǎn)環(huán)境。
全系統測試策略
起初,我們把全系統測試稱(chēng)為“UI 測試”,直到我們的項目越來(lái)越多地牽涉到集成策略。這時(shí)輸入到我們系統中的不再是瀏覽器,取而代之的是消息,來(lái)自 REST 端點(diǎn)、FTP 或批處理文件。UI 測試只是全系統測試的一個(gè)子集。全系統測試背后的思想是,我們想按照軟件在生產(chǎn)環(huán)境中的使用方式來(lái)測試它們。對于一個(gè) MVC 應用程序來(lái)說(shuō),就是基于瀏覽器的測試。對于批處理文件來(lái)說(shuō),我們會(huì )使用實(shí)際的文件。對于 REST 使用實(shí)際的 HTTP 請求。對于消息則使用實(shí)際的隊列和消息。
如果我們想知道,應用程序在部署到生產(chǎn)環(huán)境之前是否能按照預期工作,一個(gè)有效而且高效的方法是,創(chuàng )建一個(gè)自動(dòng)化測試來(lái)測試整個(gè)系統。如果我可以讓 UI 測試登錄到應用程序中、創(chuàng )建一個(gè)訂單,然后我可以驗證是否產(chǎn)生了一個(gè)訂單請求,那么我會(huì )感覺(jué)很良好。
關(guān)于全系統測試的一個(gè)常見(jiàn)誤區是認為它就是黑盒測試。然而,全系統測試的特點(diǎn)在于,你必須對系統內部發(fā)生的事情了如指掌。實(shí)際上,全系統測試甚至還可以利用域模型來(lái)生成數據,而不是一個(gè)純粹為測試目的而構建的系統后門(mén)。很多團隊容易掉進(jìn)去的一個(gè)大坑是,不按照與生產(chǎn)環(huán)境一樣的代碼路徑來(lái)測試,這將導致系統處于古怪的、無(wú)效的、很難處理的狀態(tài)。
在我們的項目中,全系統測試代碼是我們在聲稱(chēng)一個(gè)功能/故事做完之前的所寫(xiě)的最后代碼。對于描述一個(gè)功能的“已完成”特性來(lái)說(shuō),手工測試的成本太高、而且不可靠。但是,如果我能像在生產(chǎn)環(huán)境一樣去測試,通過(guò)完全一樣的外部界面來(lái)完成,那這樣的手工測試也算是成功的。
全盤(pán)考慮
在一個(gè)未經(jīng)測試過(guò)的應用程序中,作為提高覆蓋率的手段,我們發(fā)現實(shí)際上最有價(jià)值的測試策略是從全系統測試開(kāi)始,然后往下移,直至單元測試。我們先做最寬松、最簡(jiǎn)單的斷言,然后慢慢往下移,直至單元級別的邏輯。在全新開(kāi)發(fā)的應用程序中,我們傾向于不只是特別關(guān)注某一個(gè)區域,因為對于一個(gè)需要長(cháng)期維護的系統來(lái)說(shuō),所有的測試都很重要。
這種測試策略確實(shí)需要一定的投資。我們發(fā)現,當我們知道這個(gè)應用程序對客戶(hù)的業(yè)務(wù)有決定性作用的時(shí)候,這樣的全盤(pán)考慮在特別有效。如果一個(gè)應用程序對業(yè)務(wù)有決定性作用,那它將不得不面臨變更。當變更來(lái)臨的時(shí)候,我們最好能安全地實(shí)施變更而不影響客戶(hù)的業(yè)務(wù)。
作者簡(jiǎn)介
Jimmy Bogard是德克薩斯州Headspring公司的技術(shù)架構師,致力于研究DDD,分部式系統和其他acronym-centric design/架構/方法論的研究.同時(shí)也是AutoMapper的創(chuàng )始人和ASP.NET MVC in Action的作者
原文轉自:http://www.uml.org.cn/Test/2014052911.asp