国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

JUnit實施--1.測試的概念

JUnit實施--1.測試的概念

更新時間:2022-05-10 文章作者:未知 信息來源:網絡 閱讀次數:

1.測試的概念

長期以來,我所接觸的軟件開發人員很少有人能在開發的過程中進行測試工作。大部分的項目都是在最終驗收的時候編寫測試文檔。有些項目甚至沒有測試文檔。現在情況有了改變。我們一直提倡UML、RUP、軟件工程、CMM,目的只有一個,提高軟件編寫的質量。舉一個極端的例子:如果你是一個超級程序設計師,一個傳奇般的人物。(你可以一邊喝咖啡,一邊聽著音樂,同時編寫這操作系統中關于進程調度的模塊,而且兩天時間內就完成了!)我真得承認,有這樣的人。(那個編寫UNIX中的vi編輯器的家伙就是這種人。)然而非常遺憾的是這些神仙們并沒有留下如何修成正果的README。所以我們這些凡人--在同一時間只能將注意力集中到若干點(據科學統計,我并不太相信,一般的人只能同時考慮最多7個左右的問題,高手可以達到12個左右),而不能既縱覽全局又了解細節--只能期望于其他的方式來保證我們所編寫的軟件質量。

為了說明我們這些凡人是如何的笨。有一個聰明人提出了軟件熵(software entropy)的概念:一個程序從設計很好的狀態開始,隨著新的功能不斷地加入,程序逐漸地失去了原有的結構,最終變成了一團亂麻。你可能會爭辯,在這個例子中,設計很好的狀態實際上并不好,如果好的話,就不會發生你所說的情況。是的,看來你變聰明了,可惜你還應該注意到兩個問題:1)我們不能指望在恐龍紀元(大概是十年前)設計的結構到了現在也能適用吧。2)擁有簽字權的客戶代表可不理會加入一個新功能是否會對軟件的結構有什么影響,即便有影響也是程序設計人員需要考慮的問題。如果你拒絕加入這個你認為致命的新功能,那么你很可能就失去了你的住房貸款和面包(對中國工程師來說也許是米飯或面條,要看你是南方人還是北方人)。

另外,需要說明的是我看過的一些講解測試的書都沒有我寫的這么有人情味(不好意思...)。我希望看到這片文章的兄弟姐妹能很容易地接受測試的概念,并付諸實施。所以有些地方寫的有些夸張,歡迎對測試有深入理解的兄弟姐妹能體察民情,并不吝賜教(ericwq@263.net)。

好了,我們現在言歸正傳。要測試,就要明白測試的目的。我認為測試的目的很簡單也極具吸引力:寫出高質量的軟件并解決軟件熵這一問題。想象一下,如果你寫的軟件和Richard Stallman(GNU、FSF的頭兒)寫的一樣有水準的話,是不是很有成就感?如果你一致保持這種高水準,我保證你的薪水也會有所變動。

測試也分類,白箱測試、黑箱測試、單元測試、集成測試、功能測試...。我們先不管有多少分類,如何分類。先看那些對我們有用的分類,關于其他的測試,有興趣的人可參閱其他資料。白箱測試是指在知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能的條件下所作的測試。一般是由開發人員完成。因為開發人員最了解自己編寫的軟件。本文也是以白箱測試為主。黑箱測試則是指在知道被測試的軟件完成什么樣(What)的功能的條件下所作的測試。一般是由測試人員完成。黑箱測試不是我們的重點。本文主要集中在單元測試上,單元測試是一種白箱測試。目的是驗證一個或若干個類是否按所設計的那樣正常工作。集成測試則是驗證所有的類是否能互相配合,協同完成特定的任務,目前我們暫不關心它。下面我所提到的測試,除非特別說明,一般都是指單元測試。

需要強調的是:測試是一個持續的過程。也就是說測試貫穿與開發的整個過程中,單元測試尤其適合于迭代增量式(iterative and incremental)的開發過程。Martin Fowler(有點兒像引用孔夫子的話)甚至認為:“在你不知道如何測試代碼之前,就不應該編寫程序。而一旦你完成了程序,測試代碼也應該完成。除非測試成功,你不能認為你編寫出了可以工作的程序。”我并不指望所有的開發人員都能有如此高的覺悟,這種層次也不是一蹴而就的。但我們一旦了解測試的目的和好處,自然會堅持在開發過程中引入測試。

因為我們是測試新手,我們也不理會那些復雜的測試原理,先說一說最簡單的:測試就是比較預期的結果是否與實際執行的結果一致。如果一致則通過,否則失敗。看下面的例子:

//將要被測試的類public class Car {public int getWheels() {return 4;}}//執行測試的類public class testCar {public static void main(String[] args) {testCar myTest = new testCar();myTest.testGetWheels();}public testGetWheels() {int expectedWheels = 4;Car myCar = Car();if (expectedWheels==myCar.getWheels()) System.out.println("test [Car]: getWheels works perfected!");elseSystem.out.println("test [Car]: getWheels DOESN'T work!");}}
如果你立即動手寫了上面的代碼,你會發現兩個問題,第一,如果你要執行測試的類testCar,你必須必須手工敲入如下命令:
[Windows] d:>java testCar[Unix] % java testCar
即便測試如例示的那樣簡單,你也有可能不愿在每次測試的時候都敲入上面的命令,而希望在某個集成環境中(IDE)點擊一下鼠標就能執行測試。后面的章節會介紹到這些問題。第二,如果沒有一定的規范,測試類的編寫將會成為另一個需要定義的標準。沒有人希望查看別人是如何設計測試類的。如果每個人都有不同的設計測試類的方法,光維護被測試的類就夠煩了,誰還顧得上維護測試類?另外有一點我不想提,但是這個問題太明顯了,測試類的代碼多于被測試的類!這是否意味這雙倍的工作?不!1)不論被測試類-Car 的 getWheels 方法如何復雜,測試類-testCar 的testGetWheels 方法只會保持一樣的代碼量。2)提高軟件的質量并解決軟件熵這一問題并不是沒有代價的。testCar就是代價。

我們目前所能做的就是盡量降低所付出的代價:我們編寫的測試代碼要能被維護人員容易的讀取,我們編寫測試代碼要有一定的規范。最好IDE工具可以支持這些規范。 好了,你所需要的就是JUnit。一個Open Source的項目。用其主頁上的話來說就是:“JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。用于Java開發人員編寫單元測試之用。”所謂框架就是 Erich Gamma 和 Kent Beck 定下了一些條條框框,你編寫的測試代碼必須遵循這個條條框框:繼承某個類,實現某個接口。其實也就是我們前面所說的規范。好在JUnit目前得到了大多數軟件工程師的認可。遵循JUnit我們會得到很多的支持。回歸測試就是你不斷地對所編寫的代碼進行測試:編寫一些,測試一些,調試一些,然后循環這一過程,你會不斷地重復先前的測試,哪怕你正編寫其他的類,由于軟件熵的存在,你可能在編寫第五個類的時候發現,第五個類的某個操作會導致第二個類的測試失敗。通過回歸測試我們抓住了這條大Bug。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        99国产精品一区| 久久99精品国产| 亚洲欧洲一区二区在线播放| 青青草伊人久久| 精品国产乱码久久久久久影片| 免费一级片91| 久久亚洲免费视频| 成人听书哪个软件好| 亚洲三级电影网站| 欧美日本在线观看| 国产精一区二区三区| 亚洲日本在线天堂| 91精品婷婷国产综合久久竹菊| 激情久久五月天| 亚洲视频一区在线| 欧美久久久久久蜜桃| 国产一区二区在线视频| 亚洲激情自拍偷拍| 欧美成人乱码一区二区三区| 成人av资源站| 爽爽淫人综合网网站| 日韩视频国产视频| 色偷偷成人一区二区三区91| 婷婷开心久久网| 国产日产欧美一区二区视频| 91在线国产观看| 亚洲电影你懂得| 中文字幕精品一区二区精品绿巨人 | www.亚洲免费av| 亚洲男人的天堂在线aⅴ视频| 国产综合色视频| 国产三级欧美三级日产三级99 | 在线观看视频一区二区欧美日韩| 亚洲国产aⅴ天堂久久| 欧美一区二区三区在线电影| 成人蜜臀av电影| 日本欧美在线观看| 国产女同互慰高潮91漫画| 欧美色网一区二区| 国产精品99久| 捆绑调教一区二区三区| 樱花草国产18久久久久| 久久久久久久性| 欧美性受xxxx| 色一区在线观看| 国产成人在线电影| 狠狠色伊人亚洲综合成人| 亚洲人成网站精品片在线观看| 精品免费国产二区三区| 一本到不卡免费一区二区| 懂色av噜噜一区二区三区av| 日韩黄色片在线观看| 亚洲欧美色图小说| 久久久午夜精品| 狠狠狠色丁香婷婷综合激情| 亚洲一本大道在线| 亚洲欧美在线另类| 国产欧美一区二区三区鸳鸯浴| 日韩一区二区三区免费看 | 暴力调教一区二区三区| 久久精工是国产品牌吗| 性久久久久久久| 综合精品久久久| 亚洲国产成人在线| 久久女同性恋中文字幕| 26uuu久久综合| 日韩免费性生活视频播放| 欧美美女喷水视频| 欧美专区日韩专区| 欧美日韩在线直播| 欧美日韩一区二区三区高清| 99在线精品免费| av午夜一区麻豆| 99久久国产综合精品女不卡| 成人h版在线观看| 色综合天天狠狠| 欧美在线视频全部完| 欧美亚洲一区二区在线观看| 欧美亚洲国产一卡| 日韩欧美一区二区久久婷婷| 精品久久久久久久人人人人传媒| 欧美电影影音先锋| 欧美成人精品二区三区99精品| 精品嫩草影院久久| 亚洲国产成人自拍| 亚洲国产视频直播| 欧美aaa在线| 成人黄色在线网站| 在线观看亚洲精品| 亚洲精品在线一区二区| 国产日韩欧美激情| 亚洲一区自拍偷拍| 午夜影院久久久| 国产乱淫av一区二区三区| 成人永久看片免费视频天堂| 欧美日韩一区二区三区不卡| 久久亚洲综合av| 一级特黄大欧美久久久| 奇米一区二区三区| 色综合久久久网| 久久影院电视剧免费观看| 亚洲精品乱码久久久久久| 久久爱另类一区二区小说| 色综合色狠狠综合色| 欧美精品一区二区精品网| 一区二区三区在线免费| 不卡大黄网站免费看| 欧美一级在线观看| 一区二区三区不卡视频| 国产一区二区三区免费观看| 欧美视频中文一区二区三区在线观看 | 欧美丰满一区二区免费视频 | 亚洲精品乱码久久久久| 国产一区二区在线免费观看| 欧美日韩免费一区二区三区 | av男人天堂一区| 宅男在线国产精品| 中文字幕一区二| 国产激情偷乱视频一区二区三区| 欧美日韩免费不卡视频一区二区三区| 久久久久久久久99精品| 婷婷久久综合九色国产成人| 色综合欧美在线| 亚洲天天做日日做天天谢日日欢| 国产一区二区影院| 欧洲一区二区三区在线| 亚洲乱码国产乱码精品精可以看| 国产成人免费在线观看| 精品免费99久久| 久久99国产乱子伦精品免费| 欧美日韩免费观看一区二区三区| 国产精品萝li| 成人深夜视频在线观看| 国产欧美久久久精品影院| 国产乱码一区二区三区| 欧美一区二区三区免费| 亚洲成av人在线观看| 欧美男人的天堂一二区| 国产精品久久久久久久浪潮网站| 风间由美中文字幕在线看视频国产欧美 | 亚洲免费观看高清完整| 成人激情视频网站| 国产精品美女久久久久av爽李琼| 麻豆91在线播放| 久久综合久久综合久久综合| 美女国产一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 久久综合综合久久综合| 欧美日韩国产免费一区二区| 男女视频一区二区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩成人免费电影| 欧美高清www午色夜在线视频| 亚洲gay无套男同| 91精品国产麻豆国产自产在线| 偷拍一区二区三区| 亚洲精品在线免费观看视频| 大尺度一区二区| 亚洲一级在线观看| 3atv一区二区三区| 精品一区二区三区免费| 亚洲国产精品成人综合| 成人av中文字幕| 视频一区免费在线观看| 精品国产免费久久| 91丨porny丨国产| 亚洲电影欧美电影有声小说| 久久免费国产精品| 在线欧美日韩国产| 激情综合色播激情啊| 国产欧美精品一区二区色综合朱莉| 色婷婷香蕉在线一区二区| 亚洲一二三四区| 精品久久久久久久一区二区蜜臀| 91麻豆123| 蜜臀久久久久久久| 1024国产精品| 欧美日韩成人在线| 波多野结衣在线aⅴ中文字幕不卡| 亚洲成a人片综合在线| 欧美国产精品久久| 日韩欧美在线综合网| 国产成人av福利| 男人的j进女人的j一区| 亚洲欧美日韩中文字幕一区二区三区 | 欧美色倩网站大全免费| 精品亚洲国产成人av制服丝袜 | proumb性欧美在线观看| 亚洲一区二区三区四区五区黄| 久久久久久久久蜜桃| 欧美在线视频全部完| 成人国产亚洲欧美成人综合网 | 日韩和欧美一区二区三区| 国产精品久久久久久亚洲伦| www国产亚洲精品久久麻豆| 8x8x8国产精品| 欧美日韩精品免费观看视频| 日本精品一区二区三区高清| 成人黄色av网站在线| 成人理论电影网|