成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

單元測(cè)試框架進(jìn)行自動(dòng)化測(cè)試

開(kāi)發(fā) 測(cè)試 自動(dòng)化
這里介紹這里的單元測(cè)試框架只是實(shí)現(xiàn)自動(dòng)化測(cè)試的一個(gè)手段,對(duì)單元測(cè)試本身并不產(chǎn)生任何影響——沒(méi)有單元測(cè)試框架,單元測(cè)試一樣也是可以進(jìn)行的,只是會(huì)痛苦很多。

最近參與的一個(gè)項(xiàng)目里我把單元測(cè)試放到很重要的位置并且也發(fā)現(xiàn)了一些問(wèn)題。順便介紹一下單元測(cè)試框架進(jìn)行自動(dòng)化測(cè)試的方面

這不是一篇嚴(yán)謹(jǐn)?shù)募夹g(shù)文章。只是一些個(gè)人不成熟的感想。

在實(shí)際開(kāi)發(fā)過(guò)程中,我發(fā)現(xiàn)在單元測(cè)試代碼中經(jīng)常會(huì)出現(xiàn)兩種情況:***種就是在測(cè)試代碼中炫耀編程技巧,第二種就是敷衍了事,你不是讓我通過(guò)測(cè)試么?好,我就寫(xiě)一個(gè)用例,一定能通過(guò)的那種,然后告訴你,OK,我的測(cè)試通過(guò)了。我覺(jué)得,這就是對(duì)單元測(cè)試的意義沒(méi)有真正理解的表現(xiàn)。

到底單元測(cè)試是做什么用的?我想,在說(shuō)明這個(gè)問(wèn)題之前,我先說(shuō)說(shuō)我所理解的測(cè)試到底是做什么用的。

所謂的測(cè)試,是一種產(chǎn)品質(zhì)量保證的手段。我按照需求規(guī)格說(shuō)明書(shū)制造了一件產(chǎn)品,那么誰(shuí)來(lái)確保這個(gè)產(chǎn)品符合了需求規(guī)格的要求呢?就是測(cè)試。它會(huì)根據(jù)需求規(guī)格說(shuō)明書(shū)設(shè)計(jì)一系列的場(chǎng)景和用例,來(lái)對(duì)產(chǎn)品進(jìn)行測(cè)試,看看產(chǎn)品是不是真的符合所期望的需求。

要達(dá)到這個(gè)目標(biāo),其實(shí)并不十分的容易,因?yàn)橐粋€(gè)真正的系統(tǒng),情況十分復(fù)雜,里面充滿了數(shù)不清的分支、異常、邊界條件,甚至運(yùn)行環(huán)境,將這些東西組合起來(lái),產(chǎn)生的需要測(cè)試的點(diǎn)將會(huì)是一個(gè)天文數(shù)字,在有限的時(shí)間內(nèi)做完一個(gè)充分而可靠的測(cè)試,是不可能的。

為了將充分測(cè)試變得可能,一個(gè)比較好的途徑就是分層測(cè)試。我在做運(yùn)行測(cè)試或性能測(cè)試的時(shí)候,有一個(gè)前提,就是假設(shè)整個(gè)系統(tǒng)的集成運(yùn)行已經(jīng)沒(méi)有問(wèn)題了,在運(yùn)行測(cè)試或性能測(cè)試時(shí),我將不再考慮“系統(tǒng)無(wú)法正常運(yùn)行”這種場(chǎng)景。那么如何保證集成運(yùn)行沒(méi)問(wèn)題呢?我們用集成測(cè)試來(lái)檢驗(yàn)。但是在做集成測(cè)試的時(shí)候,我們同樣要基于一個(gè)假定,就是各個(gè)模塊的功能都能夠如期正常工作。而這一點(diǎn),又是通過(guò)模塊自身的功能測(cè)試來(lái)完成的。……這樣一層層往下推,每個(gè)層次就假設(shè)它所依賴的層次沒(méi)有問(wèn)題,這樣就可以減少很多場(chǎng)景以及由這些場(chǎng)景引出的額外的分支。將原先一個(gè)幾何級(jí)數(shù)的測(cè)試用例分解成可以接受的若干層次的算術(shù)級(jí)數(shù)的用例。這樣一來(lái)測(cè)試就變得有可能做好了。

而單元測(cè)試,正是這些測(cè)試的***層次——保證每個(gè)函數(shù)/方法,或者說(shuō)最小功能模塊的正確性的一種測(cè)試。

通過(guò)上面的描述,我們至少清楚了這樣幾件事情:
1. 單元測(cè)試是一種測(cè)試,它不是代碼的一部分;
2. 單元測(cè)試是***層級(jí)的測(cè)試,它只保證函數(shù)的可靠性,不保證其它;
3. 單元測(cè)試應(yīng)該能保證每一個(gè)函數(shù)的可靠性。

單元測(cè)試是一種測(cè)試,所以,我們應(yīng)該以一種測(cè)試的眼光去面對(duì)它——我們要測(cè)試正常情況,邊界條件,要對(duì)它的測(cè)試目標(biāo)——函數(shù)做黑盒分析,白盒分析,選擇合適的測(cè)試數(shù)據(jù),構(gòu)建測(cè)試場(chǎng)景和測(cè)試環(huán)境——總之,一切測(cè)試應(yīng)該做的事情,單元測(cè)試都不應(yīng)該省略。

理論上來(lái)說(shuō),單元測(cè)試和其他測(cè)試一樣,也是可以純手工完成的:我們可以寫(xiě)一段某函數(shù)的測(cè)試代碼,然后輸入我們的測(cè)試輸入,觀察測(cè)試輸出,并跟期望值做比較——事實(shí)上這種人工測(cè)試,寫(xiě)了一段時(shí)間代碼的人應(yīng)該都不會(huì)陌生。但是,單元測(cè)試有一點(diǎn)特殊性,就是在一個(gè)系統(tǒng)中,函數(shù)會(huì)非常非常的多,變化也比軟件的功能頻繁的多。面對(duì)這么多的函數(shù),這么頻繁的變化,純手工測(cè)試是不現(xiàn)實(shí)的。所以,我們必須要引入單元測(cè)試框架進(jìn)行自動(dòng)化測(cè)試。注意,這里的單元測(cè)試框架只是實(shí)現(xiàn)自動(dòng)化測(cè)試的一個(gè)手段,對(duì)單元測(cè)試本身并不產(chǎn)生任何影響——沒(méi)有單元測(cè)試框架,單元測(cè)試一樣也是可以進(jìn)行的,只是會(huì)痛苦很多。

單元測(cè)試框架引入的目的只是為了自動(dòng)化單元測(cè)試,簡(jiǎn)化單元測(cè)試的步驟。所以,對(duì)于測(cè)試代碼的編寫(xiě),我們的重點(diǎn)應(yīng)該是:1、如何搭建測(cè)試環(huán)境、測(cè)試場(chǎng)景;2、如何選擇測(cè)試用例;3、如何校驗(yàn)測(cè)試結(jié)果。對(duì)于測(cè)試代碼本身,應(yīng)該盡可能的簡(jiǎn)單,能不要使用技巧盡量不要使用,我們的目的在于測(cè)試,如果測(cè)試本身過(guò)于復(fù)雜,我們不能保證測(cè)試的正確性,測(cè)試這個(gè)工作就白做了。

另外,剛剛提到單元測(cè)試是對(duì)函數(shù)的測(cè)試,因此,測(cè)試必須是以函數(shù)為單位的。每個(gè)函數(shù)應(yīng)該擁有自己?jiǎn)为?dú)的一個(gè)測(cè)試,但是在這個(gè)測(cè)試中,我們應(yīng)該針對(duì)這個(gè)函數(shù)的各個(gè)方面:正常的、異常的、邊界的……等等,各個(gè)方面進(jìn)行完善的測(cè)試,這樣我們才能保證這個(gè)函數(shù)的功能是如我們所愿的。但是單元測(cè)試不需要負(fù)責(zé)函數(shù)的組合工作情況。那應(yīng)該是(低層次)功能測(cè)試的工作,而不是單元測(cè)試的工作。這個(gè)功能測(cè)試就是在假定所有函數(shù)都工作正常的基礎(chǔ)之上,對(duì)這些函數(shù)組合形成的功能模塊進(jìn)行測(cè)試。這種測(cè)試,視情況而定,可以使用單元測(cè)試框架,也可以使用其他自動(dòng)化測(cè)試方法或者甚至是使用純?nèi)斯y(cè)試。

另外,我還想討論一下單元測(cè)試的編寫(xiě)和運(yùn)行。

絕大部分時(shí)候,單元測(cè)試的編寫(xiě),是由開(kāi)發(fā)人員做的。我們?cè)谝郧澳炒螌?duì)單元測(cè)試的討論中,甚至有人認(rèn)為,單元測(cè)試必須由開(kāi)發(fā)人員完成,而不應(yīng)該由獨(dú)立的測(cè)試人員完成。對(duì)于這個(gè)問(wèn)題,我是這樣看的:測(cè)試是一種針對(duì)需求的驗(yàn)證工作。如果這個(gè)需求非常清晰,清晰到開(kāi)發(fā)人員之外的人都可以輕易掌握(有些日本外包發(fā)出來(lái)的函數(shù)說(shuō)明書(shū)就能達(dá)到這一點(diǎn)),這時(shí)單元測(cè)試可以由獨(dú)立的測(cè)試人員完成。但是大部分情況下對(duì)于函數(shù)級(jí)別,做不到這一點(diǎn)。這時(shí)最清楚函數(shù)需求的人就是開(kāi)發(fā)人員本人,在這種情況下當(dāng)然就應(yīng)該是開(kāi)發(fā)人員自己編寫(xiě)測(cè)試用例。但是開(kāi)發(fā)人員必須搞清楚自己身兼兩個(gè)不同的角色:運(yùn)動(dòng)員(實(shí)現(xiàn)代碼)和裁判員(檢驗(yàn)代碼),在編寫(xiě)測(cè)試用例的時(shí)候絕不能假定任何函數(shù)的實(shí)現(xiàn),而應(yīng)該完全按照它應(yīng)該有的需求來(lái)做。這樣才能做好單元測(cè)試這件事。很多時(shí)候單元測(cè)試形同虛設(shè),就是因?yàn)殚_(kāi)發(fā)人員沒(méi)有很好的轉(zhuǎn)換自己的角色造成的。

單元測(cè)試的運(yùn)行,目前我們這個(gè)Python的項(xiàng)目比較容易,直接運(yùn)行模塊就是該模塊的單元測(cè)試,而以模塊形式import就是實(shí)際使用。對(duì)于像C++或者其他的一些語(yǔ)言來(lái)說(shuō),可能沒(méi)有這樣方便的形式。我們可以把測(cè)試寫(xiě)在獨(dú)立的文件中,然后用makefile組合不同的項(xiàng)目和主函數(shù)來(lái)做到這一點(diǎn)。另外還有一點(diǎn)就是,實(shí)際運(yùn)行過(guò)程中可能會(huì)有一些環(huán)境,這些環(huán)境在測(cè)試時(shí)難以獲得,或者增加上去之后,就難以測(cè)試(比如網(wǎng)絡(luò)環(huán)境、數(shù)據(jù)庫(kù)環(huán)境等等),這時(shí)我們可以采用一些虛擬的環(huán)境來(lái)做到。我們把運(yùn)行時(shí)需要的環(huán)境做一個(gè)簡(jiǎn)化的虛擬版本,然后以這個(gè)版本作為測(cè)試環(huán)境進(jìn)行測(cè)試,對(duì)于Python來(lái)說(shuō),我們可以實(shí)現(xiàn)這樣的一個(gè)庫(kù)在測(cè)試時(shí)import進(jìn)來(lái)并且同時(shí)做一些環(huán)境初始化工作,在C++里,我們可以專門為測(cè)試寫(xiě)一些運(yùn)行庫(kù),在實(shí)際運(yùn)行編譯和測(cè)試編譯時(shí),鏈接不同的庫(kù)。這在自動(dòng)化測(cè)試技術(shù)中有個(gè)專門的名稱叫做 Mock Object。關(guān)于這個(gè),我就不再深入了。

【編輯推薦】

  1. 在單元測(cè)試中應(yīng)用Hibernate配置文件
  2. 使用MOCK對(duì)象進(jìn)行單元測(cè)試的實(shí)例講解
  3. 單元測(cè)試、功能測(cè)試與場(chǎng)景測(cè)試三者之間的比較
  4. 軟件測(cè)試技術(shù)JUnit和單元測(cè)試入門簡(jiǎn)介
  5. 進(jìn)行Struts應(yīng)用程序單元測(cè)試開(kāi)發(fā)
責(zé)任編輯:桑丘 來(lái)源: 51cto博客
相關(guān)推薦

2016-09-26 16:42:19

JavaScript前端單元測(cè)試

2017-01-14 23:42:49

單元測(cè)試框架軟件測(cè)試

2017-01-16 13:38:05

前端開(kāi)發(fā)自動(dòng)化

2012-03-30 15:52:51

ibmdw

2017-01-14 23:26:17

單元測(cè)試JUnit測(cè)試

2017-01-16 12:12:29

單元測(cè)試JUnit

2009-08-12 18:37:46

VSTS2005單元測(cè)

2013-06-04 09:49:04

Spring單元測(cè)試軟件測(cè)試

2017-03-23 16:02:10

Mock技術(shù)單元測(cè)試

2010-08-27 09:11:27

Python單元測(cè)試

2022-05-12 09:37:03

測(cè)試JUnit開(kāi)發(fā)

2021-06-26 07:40:21

前端自動(dòng)化測(cè)試Jest

2023-10-07 08:49:56

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)Xunit 框架

2021-03-28 23:03:50

Python程序員編碼

2024-10-16 16:09:32

2023-05-18 14:01:00

前端自動(dòng)化測(cè)試

2020-08-18 08:10:02

單元測(cè)試Java

2024-11-21 15:24:49

2017-12-24 21:00:10

自動(dòng)化測(cè)試測(cè)試框架敏捷

2012-11-01 11:32:23

IBMdw
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久久久久一区二区三区 | 九九热在线免费视频 | 爱爱综合网 | 2018天天干天天操 | 国产激情一区二区三区 | 亚洲天堂中文字幕 | 国产在线精品一区二区 | 欧美日韩国产精品一区二区 | 欧美 日韩 在线播放 | 婷婷不卡| 日韩二区 | 国产91九色 | 欧美一区二区在线观看 | 伊人网一区| 午夜视频在线免费观看 | 天天干天天草 | 亚洲国产精品99久久久久久久久 | 中文久久 | 国产成人免费网站 | 九九热九九 | 涩涩操| 伊人爽 | 成年人网站国产 | 欧美日韩不卡合集视频 | 亚洲精品一区二区三区丝袜 | 国产精品国产三级国产aⅴ中文 | 欧美日韩中 | 日韩图区 | 91麻豆精品国产91久久久久久 | 国产91观看 | 久久久久久久国产 | 美女131mm久久爽爽免费 | 成人区精品一区二区婷婷 | 国产精品视频免费观看 | 久久免费观看一级毛片 | 国产精品一区在线 | 超碰欧美 | 91网站视频在线观看 | 欧美激情国产日韩精品一区18 | 亚洲精品一区二区在线 | 国产精品免费一区二区 |