第一篇:測(cè)試是一件有趣的事情?真的嗎?
測(cè)試是一件有趣的事情?真的嗎?
來(lái)自:DeveloperWorks中國(guó) 作者:Jeff Canna [2004/02/09]
測(cè)試。討厭!我一直討厭做測(cè)試。測(cè)試(單元測(cè)試和功能測(cè)試)是防礙“真正”工作的事情。每個(gè)人都確信自己的代碼是完美的,不是嗎?在確實(shí)需要更改代碼的極少數(shù)事件中,注釋編寫得如此之好,以致每個(gè)人都能領(lǐng)會(huì)其中的含義。我需要提高(或許還需要作一些咨詢)。在過去的幾年里,單元測(cè)試已成為我編寫軟件的核心環(huán)節(jié),多虧了一種稱為極限編程(XP)的簡(jiǎn)便編程方法(請(qǐng)參閱參考資源)。這種方法要求我為添加的每個(gè)函數(shù)編寫單元測(cè)試,并且要維護(hù)這些測(cè)試。如果單元測(cè)試失敗,我就無(wú)法整合任何代碼。隨著代碼庫(kù)的不斷增大,這些測(cè)試將使開發(fā)人員能夠很有把握地完成更改。
起初,我認(rèn)為有了單元測(cè)試,就沒必要再進(jìn)行功能測(cè)試。噢,又錯(cuò)了。功能測(cè)試與單元測(cè)試相差甚遠(yuǎn)。我花了很長(zhǎng)一段時(shí)間理解二者的區(qū)別,以及如何結(jié)合使用兩者來(lái)改進(jìn)開發(fā)過程。本文探究單元測(cè)試與功能測(cè)試之間的區(qū)別。并概述了在日常開發(fā)中使用這兩種測(cè)試的方法。測(cè)試與開發(fā)過程
測(cè)試對(duì)于開發(fā)人員極為重要,您必須在開發(fā)過程中不斷進(jìn)行測(cè)試。測(cè)試不應(yīng)該只屬于開發(fā)周期的某個(gè)特定階段。它絕不應(yīng)該是您將系統(tǒng)交給客戶前要完成的最后一項(xiàng)任務(wù)。如何才能知道您何時(shí)就完成了所有任務(wù)呢?如何才能知道對(duì)一個(gè)小錯(cuò)誤的修正是否破壞了系統(tǒng)的主要功能呢?目前想像中的系統(tǒng)如何才能演化為實(shí)實(shí)在在的系統(tǒng)呢?單元測(cè)試和功能測(cè)試都應(yīng)該是開發(fā)過程中不可分割的一部分。
單元測(cè)試應(yīng)成為您編寫代碼的核心環(huán)節(jié),當(dāng)您所做的項(xiàng)目時(shí)限很緊并且您希望控制開發(fā)進(jìn)度時(shí)尤其如此。由于單元測(cè)試是如此重要,所以您應(yīng)該先編寫測(cè)試,再編寫代碼。一套適當(dāng)?shù)膯卧獪y(cè)試具有以下功能:
說明可能的最實(shí)用設(shè)計(jì)
提供類文檔的最佳格式
確定一個(gè)類何時(shí)完成增強(qiáng)開發(fā)人員對(duì)代碼的信心
作為快速重構(gòu)的基礎(chǔ)
單元測(cè)試創(chuàng)建隨系統(tǒng)自然發(fā)展的設(shè)計(jì)文檔。再讀一遍上一句話。文檔隨系統(tǒng) 自然發(fā)展,這是軟件開發(fā)的“圣杯”。有什么方法比通過提供一個(gè)用例編碼集來(lái)記錄一個(gè)類效果更好呢?那就是單元測(cè)試:一系列記錄類所做工作的用例代碼,提供輸出控制。這樣,由于單元測(cè)試必須通過,所以設(shè)計(jì)文檔總是最新的。
您應(yīng)該首先編寫測(cè)試,然后再編寫代碼。這樣就為要測(cè)試的類提供了一種設(shè)計(jì),這種設(shè)計(jì)使您每一時(shí)刻都只需集中考慮一小塊代碼。這種做法也使設(shè)計(jì)變得不再?gòu)?fù)雜。您沒有試圖為以后著想而實(shí)現(xiàn)一些不必要的功能。先編寫測(cè)試還使您知道該類何時(shí)完成。一旦通過所有測(cè)試,任務(wù)也就完成了。
最后,單元測(cè)試可使您高度自信,這又會(huì)轉(zhuǎn)化為開發(fā)人員的滿意度。如果只要更改代碼即運(yùn)行單元測(cè)試,您立即就能發(fā)現(xiàn)您所做的更改是否對(duì)系統(tǒng)造成了破壞。
功能測(cè)試比單元測(cè)試更重要,因?yàn)楣δ軠y(cè)試將驗(yàn)證系統(tǒng)是否可以發(fā)行了。功能測(cè)試以一種有用的方式對(duì)您的工作系統(tǒng)進(jìn)行說明。一套適當(dāng)?shù)墓δ軠y(cè)試具有以下功能:
以有效方式捕獲用戶需求
增強(qiáng)小組(用戶和開發(fā)人員)在系統(tǒng)滿足用戶需求方面的信心
功能測(cè)試以有效方式捕獲用戶需求。傳統(tǒng)開發(fā)通過用例來(lái)捕獲需求。通常,人們討論用例并
花很長(zhǎng)時(shí)間對(duì)它們進(jìn)行細(xì)化。他們最后所得到的只是一紙空文。功能測(cè)試就像自驗(yàn)證式用例。極限編程方法可解釋這一概念。XP Stories 將成為未來(lái)用戶與開發(fā)人員進(jìn)行溝通的協(xié)議。功能測(cè)試便是這種溝通的結(jié)果。未經(jīng)功能測(cè)試的 Stories 不可能很完善。
功能測(cè)試填補(bǔ)單元測(cè)試留下的空白,并可增強(qiáng)小組對(duì)代碼的信心。單元測(cè)試漏掉許多錯(cuò)誤。盡管它可以提供您所需的全部 代碼,但它可能無(wú)法提供您所需的全部系統(tǒng)功能。功能測(cè)試將暴露單元測(cè)試遺漏的問題。一套適當(dāng)?shù)淖詣?dòng)化功能測(cè)試也不可能捕捉到每個(gè)錯(cuò)誤,但是它能比最好的單一單元測(cè)試捕捉更多的錯(cuò)誤。
單元測(cè)試與功能測(cè)試
單元測(cè)試向開發(fā)人員表明代碼正確執(zhí)行操作;而功能測(cè)試向開發(fā)人員表明代碼 執(zhí)行正確的操作。
單元測(cè)試
單元測(cè)試是從程序員的角度編寫的。它確保類的某個(gè)特定方法成功執(zhí)行一系列特定的任務(wù)。每個(gè)測(cè)試都確保只要給定輸入,方法將輸出預(yù)期的結(jié)果。
如果沒有測(cè)試框架,編寫一套可維護(hù)的自動(dòng)化單元測(cè)試幾乎是不可能的。在開始編寫測(cè)試之前,請(qǐng)選擇一個(gè)小組公認(rèn)的框架。您將經(jīng)常性地使用這個(gè)框架,因此您最好對(duì)它有點(diǎn)好感。極限編程網(wǎng)站提供了幾個(gè)單元測(cè)試框架(請(qǐng)參閱參考資源)。我最熟悉的框架是 JUnit,它專門用來(lái)測(cè)試 Java 代碼。
功能測(cè)試
功能測(cè)試是從用戶的角度編寫的。這種測(cè)試確保系統(tǒng)執(zhí)行用戶期望它執(zhí)行的工作。
很多時(shí)候,系統(tǒng)開發(fā)好比建筑房屋。盡管這種類比不很恰當(dāng),但為了理解單元測(cè)試與功能測(cè)試的區(qū)別,我們可以擴(kuò)充這種類比。單元測(cè)試好比房屋建筑現(xiàn)場(chǎng)的建筑監(jiān)理員。他關(guān)心房屋的各個(gè)內(nèi)部系統(tǒng),如地基、構(gòu)架、供電系統(tǒng)和管道設(shè)備等。他確保(測(cè)試)房屋每一部分的工作都安全、正常,即符合建筑說明。這種情況下,功能測(cè)試類似于視察同一建筑現(xiàn)場(chǎng)的房主。他假定內(nèi)部系統(tǒng)將正常運(yùn)作,并假定建筑監(jiān)理員在執(zhí)行其任務(wù)。房主關(guān)心的是住在這所房子里將會(huì)怎樣。他關(guān)心房子的外觀如何,各個(gè)房間的大小是否合適,房子能否滿足家庭的需要,以及窗戶的位置是否有利于采光。房主對(duì)房子執(zhí)行功能測(cè)試。他從用戶的角度考慮問題。建筑監(jiān)理員對(duì)房子執(zhí)行單元測(cè)試。他從建筑工人的角度考慮問題。
就像單元測(cè)試一樣,如果沒有測(cè)試框架,編寫一套可維護(hù)的自動(dòng)化功能測(cè)試實(shí)際上是不可能的。JUnit 非常適合編寫單元測(cè)試;但是,當(dāng)試圖編寫功能測(cè)試時(shí),它就顯得力不從心了。就功能測(cè)試而言,沒有與 JUnit 相當(dāng)?shù)目蚣?。也有幾種用于功能測(cè)試的產(chǎn)品,但我從來(lái)沒見過它們應(yīng)用于生產(chǎn)環(huán)境。如果找不到滿足您的需要的框架,您就必須創(chuàng)建一個(gè)。
無(wú)論我們多么擅長(zhǎng)于構(gòu)建手頭的項(xiàng)目,也不管我們正在創(chuàng)建的系統(tǒng)多么靈活,如果我們的產(chǎn)品不合用,那我們就是白費(fèi)時(shí)間。因此,功能測(cè)試是開發(fā)最重要的部分。
由于兩種測(cè)試都必不可少,您就需要了解編寫它們應(yīng)遵循的原則。
如何編寫單元測(cè)試
剛開始編寫單元測(cè)試時(shí)很容易恢心。最佳的入手方式就是為新代碼創(chuàng)建單元測(cè)試。(盡管為現(xiàn)有代碼創(chuàng)建單元測(cè)試比較困難,但并非無(wú)法實(shí)現(xiàn))。首先從新代碼著手,待您習(xí)慣了整個(gè)過程以后,再針對(duì)現(xiàn)有代碼創(chuàng)建測(cè)試程序。
如上文所述,應(yīng)該首先編寫單元測(cè)試,然后再編寫這些單元測(cè)試要測(cè)試的代碼。如何為尚不存在的代碼編寫測(cè)試呢?問得非常好。掌握這一方法需要 90% 的思維加 10% 的技術(shù)。我的意思是,您只需假定您正在為其編寫測(cè)試的類已經(jīng)存在。接下來(lái)的任務(wù)就是編寫測(cè)試。起初會(huì)犯很多語(yǔ)法錯(cuò)誤,但您先別管它。這一步您要做的就是定義該類要實(shí)現(xiàn)的接口。下一步
就是運(yùn)行您的單元測(cè)試,修正語(yǔ)法錯(cuò)誤(即,編寫一個(gè)類,使它實(shí)現(xiàn)您的測(cè)試剛定義的接口),并再次運(yùn)行測(cè)試。重復(fù)這一過程,每次僅編寫修正故障的代碼。運(yùn)行測(cè)試,直到測(cè)試全部通過為止。一旦通過全部單元測(cè)試,代碼也就完成了。
一般而言,類的每個(gè)公共方法都應(yīng)有一個(gè)單元測(cè)試。但是,功能簡(jiǎn)單的方法(例如,getter 方法和 setter 方法)不需要單元測(cè)試,除非它們以某種特別的方式進(jìn)行獲取和設(shè)置。應(yīng)該遵循下面這條很好的原則:即只要您認(rèn)為有必要對(duì)代碼中的某個(gè)行為加注,就編寫一個(gè)單元測(cè)試。如果您像其他許多程序員一樣不喜歡為代碼加注,則單元測(cè)試是記錄代碼行為的一種方法。
將單元測(cè)試與被測(cè)試的相關(guān)類放在同一個(gè)包內(nèi)。這種組織方式使每個(gè)單元測(cè)試都能訪問被測(cè)試類中帶有 package 或 protected 訪問修飾符的方法和引用變量。
在單元測(cè)試中避免使用域?qū)ο蟆S驅(qū)ο笫翘囟ㄓ谀硞€(gè)應(yīng)用程序的對(duì)象。例如,一個(gè)電子表格應(yīng)用程序可能包含一個(gè)注冊(cè)對(duì)象;這個(gè)注冊(cè)對(duì)象就是一個(gè)域?qū)ο?。如果您有一個(gè)已知這些域?qū)ο蟮念?,則在測(cè)試中完全可以使用這些對(duì)象。但是如果您有一個(gè)根本不使用這些域?qū)ο蟮念悾跍y(cè)試中就不要將這些對(duì)象聯(lián)系到該類上。應(yīng)該避免這種情形完全是因?yàn)榇a重用。為某一項(xiàng)目創(chuàng)建的類經(jīng)常要用于其他項(xiàng)目。重用這些類可能很簡(jiǎn)單。但是,如果對(duì)重用類的測(cè)試中用到了另一個(gè)項(xiàng)目的域?qū)ο螅瑒t使測(cè)試能夠正常運(yùn)行這一工作就會(huì)相當(dāng)耗時(shí)。通常情況下,這個(gè)測(cè)試將被刪除或重寫。
這些機(jī)制為您提供很好的幫助,但是如果您不運(yùn)行這些測(cè)試,一套綜合的單元測(cè)試就變得一文不值。盡早運(yùn)行測(cè)試通常使您在任何時(shí)候都對(duì)代碼充滿信心。您將隨著項(xiàng)目進(jìn)展不斷添加功能。運(yùn)行這些測(cè)試將會(huì)通知您剛剛實(shí)現(xiàn)的新功能是否對(duì)系統(tǒng)造成了破壞。
在您掌握了編寫單元測(cè)試的技巧之后,我們?cè)賮?lái)看看現(xiàn)有代碼。為現(xiàn)有代碼編寫測(cè)試可能是個(gè)挑戰(zhàn)。不要為測(cè)試而測(cè)試。當(dāng)您發(fā)現(xiàn)有必要對(duì)一個(gè)未經(jīng)很好測(cè)試(或者根本就沒有測(cè)試)的類進(jìn)行修改時(shí),請(qǐng)“隨時(shí)”編寫測(cè)試。現(xiàn)在是添加測(cè)試的時(shí)候了。像往常那樣,該類的單元測(cè)試應(yīng)該捕獲其每個(gè)方法的功能。找出應(yīng)該進(jìn)行哪些測(cè)試的最容易的方法之一是:查看現(xiàn)有代碼中的注釋。任何注釋都應(yīng)在單元測(cè)試內(nèi)捕獲。將位于方法開頭、說明該方法所起作用的注釋塊翻譯為單元測(cè)試。
如何編寫功能測(cè)試
盡管功能測(cè)試很重要,但它卻沒有受到足夠的重視。多數(shù)項(xiàng)目都有單獨(dú)的一個(gè)組來(lái)做功能測(cè)試。通常有一大群人不斷地與系統(tǒng)交互,以確定系統(tǒng)是否正確工作。這種觀念和設(shè)置專門的功能測(cè)試小組的做法很不明智。
對(duì)功能測(cè)試的處理與對(duì)單元測(cè)試的處理不應(yīng)該有太大的區(qū)別。只要您編寫的代碼用來(lái)產(chǎn)生要求用戶與之交互的組件(如對(duì)話框),就要編寫測(cè)試,但實(shí)際上編寫測(cè)試要在編寫代碼之前進(jìn)行。請(qǐng)與用戶一起編寫獲取用戶需求的功能測(cè)試。無(wú)論何時(shí)開始一項(xiàng)新任務(wù),都要在功能測(cè)試框架中描述此任務(wù)。您的開發(fā)工作將繼續(xù)向前發(fā)展,當(dāng)添加新代碼時(shí),請(qǐng)執(zhí)行單元測(cè)試。當(dāng)所有的單元測(cè)試都結(jié)束以后,運(yùn)行最初的功能測(cè)試,看看它是否能夠通過,或者是否需要修改。
從理論上講,功能測(cè)試小組的概念該消失了。開發(fā)人員應(yīng)與用戶共同編寫功能測(cè)試。在對(duì)系統(tǒng)所做的一系列功能測(cè)試結(jié)束之后,開發(fā)組中負(fù)責(zé)功能測(cè)試的成員就應(yīng)該用初始測(cè)試的各種變化形式來(lái)轟擊系統(tǒng)。
單元測(cè)試與功能測(cè)試的界限
通常單元測(cè)試與功能測(cè)試之間并沒有明確的界限。老實(shí)說,有時(shí)我也不清楚這個(gè)界限在什么位置。在編寫單元測(cè)試時(shí),我根據(jù)以下原則來(lái)確定當(dāng)前編寫的單元測(cè)試實(shí)際上是否是功能測(cè)
試:
如果單元測(cè)試跨越類邊界,則它就可能是功能測(cè)試。
如果單元測(cè)試變得很復(fù)雜,則它可能是功能測(cè)試。
如果單元測(cè)試很脆弱(也就是說,雖然它是一個(gè)有效測(cè)試,但它必須不斷改變以處理不同的用戶組合),則它可能是功能測(cè)試。
如果編寫單元測(cè)試比編寫其所測(cè)試的代碼更難,則它可能是功能測(cè)試。
請(qǐng)注意“它可能是功能測(cè)試”這一措辭。本文無(wú)法提供硬性而快速的規(guī)則。單元測(cè)試與功能測(cè)試中之間有一個(gè)界限,但界限的具體位置要由您來(lái)確定。您用單元測(cè)試用得越熟練,某個(gè)特定測(cè)試是單元測(cè)試還是功能測(cè)試的界限就越明顯。
小結(jié)
單元測(cè)試是從開發(fā)人員的角度出發(fā)編寫的,并且關(guān)注的是所測(cè)試的類的特定方法。當(dāng)編寫單元測(cè)試時(shí),請(qǐng)使用以下這些原則:
首先編寫單元測(cè)試,然后再編寫要測(cè)試的類代碼
在單元測(cè)試中捕獲代碼注釋。
測(cè)試所有執(zhí)行“令人感興趣的”功能(即,不是 getter 和 setter,除非它們以某種獨(dú)特的方式執(zhí)行獲取和設(shè)置操作)的公共方法。
將每個(gè)測(cè)試實(shí)例與它要測(cè)試的類放在同一個(gè)包內(nèi),以獲得對(duì)包成員和保護(hù)成員的訪問權(quán)。避免在單元測(cè)試中使用特定于域的對(duì)象。
功能測(cè)試是從用戶的角度出發(fā)編寫的,并且關(guān)注用戶感興趣的系統(tǒng)行為。找一個(gè)優(yōu)秀的功能測(cè)試框架,或者開發(fā)一個(gè)測(cè)試框架,并使用這些功能測(cè)試識(shí)別用戶的真實(shí)需求。這樣,功能測(cè)試人員即可獲得一種自動(dòng)化工具以及使用這一工具的著手點(diǎn)。
使單元測(cè)試和功能測(cè)試成為您開發(fā)過程中的中心環(huán)節(jié)。如果您這樣做了,您將對(duì)系統(tǒng)的運(yùn)行及擴(kuò)展充滿信心。如果您沒有這樣做,您對(duì)系統(tǒng)就沒有十足的把握。測(cè)試可能不那么有趣,但是在開發(fā)過程中進(jìn)行單元測(cè)試和功能測(cè)試使開發(fā)變得相當(dāng)有趣。
參考資源
“Incremental development with Ant and JUnit”(developerWorks,2000 年 11 月)探究單元測(cè)試的好處,尤其是使用 Ant 和 JUnit 框架。
逐漸熟悉極限編程方法。
從極限編程網(wǎng)站下載各種單元測(cè)試框架。
第二篇:一件有趣的事情
一件有趣的事情
我的童年多姿多彩,童年里發(fā)生的趣事像天上的星星一樣多得數(shù)不清。其中最亮最耀眼的還是那一顆。
那時(shí)一個(gè)星期天的中午,媽媽已經(jīng)睡熟了。那時(shí)我才四歲,沒什么好玩,在房間里瞎溜達(dá),不知怎么的就來(lái)到了鏡子前。呀!前面怎么有迎面過來(lái)一個(gè)和我長(zhǎng)相一樣的“人”?我不摸還好,一摸嚇一跳,那“人”竟是平平的,而且也伸手好像想摸我。我趕緊后退幾步。好啊,竟敢學(xué)我,看我怎么對(duì)付你。我掄起巴掌,那“人”也掄起巴掌,我一打,那“人”也打,喲,怪疼的。我可嚇著了,又平又會(huì)動(dòng),還會(huì)學(xué)我,還能打人,壞了,一定是個(gè)怪物。我趕緊三不并作兩步,來(lái)到媽媽床前,一把拉住媽媽的手,叫道:“媽媽,那邊有個(gè)怪東西,他還打我?!眿寢屔衿娴貑栁沂鞘裁礀|西,我卻一個(gè)勁的拉著媽媽來(lái)到鏡子前。怪了,怎么又多了一個(gè)怪物,我急忙躲在媽媽身后,不由得發(fā)起抖來(lái)。媽媽一看,笑了,我問:“媽媽,你笑什么?你不怕它嗎?”媽媽轉(zhuǎn)過身對(duì)我說:“這是鏡子,根本不是什么怪物,你看。”只見媽媽左搖右擺,鏡子里的人也左搖又?jǐn)[。經(jīng)過媽媽的一番講說,我才明白,原來(lái)鏡子可以把人“印”進(jìn)去,人們可以從鏡子里看出自己的影子。怪不得我干什么,它也干什么呢!現(xiàn)在每當(dāng)回想起這件事,仍是會(huì)笑出聲來(lái)!
暑假中一件有趣的事
我一直很想學(xué)游泳,暑假期間,我向爸爸提出請(qǐng)求,爸爸答應(yīng)了我的請(qǐng)求,我怎能不欣喜若狂呢?
到了目的地,我立刻被吸引住了。整個(gè)游泳池里像煮餃子似的下滿了人,說笑聲、叫喊聲,擊水聲響成一片。
我和爸爸換上游泳衣,做了些準(zhǔn)備活動(dòng)。爸爸對(duì)我說:“瑤瑤,看,老爸給你露一手。”說完便“撲通”一聲跳下水,熟練地游了起來(lái)。爸爸一邊游著,一邊對(duì)我說:“來(lái),快下來(lái),好舒服的?!?/p>
我試探著,小心翼翼地下了水,先在水淺的地方用手按著水底,不一會(huì)兒,爸爸把我拉到水深的地方,教我憋氣、蹬水、劃水。我用心地學(xué)著,剛開始,我的身體直往下沉,看到爸爸在笑我,我不甘心,又憋氣堅(jiān)持練了一陣子,身體終于不往下沉了。我高興地游了起來(lái),像一條活潑歡快的小魚兒來(lái)回穿梭,水面上濺起一串串浪花。
學(xué)游泳這件事一直在我腦海中留下了深刻印象。
一件有趣的事
爸爸和爺爺早就答應(yīng)放暑假以后帶我去釣魚,這一天總算盼到了。
早上,我五點(diǎn)多就起床了,和爸爸、爺爺一起坐著汽車,風(fēng)風(fēng)火火地來(lái)到了向往已久的大興垂釣園。一到魚塘邊,我們抓緊時(shí)間撐遮陽(yáng)傘,搬小板凳,支魚護(hù)。準(zhǔn)備停當(dāng)后,我學(xué)著爸爸和爺爺?shù)臉幼?,從袋子里拿出一粒魚餌,穿上魚鉤,把竿甩了出去,又向下鉤的地方撒了一把魚餌,便目不轉(zhuǎn)睛地盯住浮子。一會(huì)兒我把竿拿起來(lái)看一看,沒有!爸爸讓我耐心點(diǎn)。于是,我又把竿甩出去,又過了一會(huì)兒,看見魚鉤旁邊有小泡泡,發(fā)現(xiàn)浮子也微微動(dòng)了動(dòng),我的手癢癢得沒法,恨不得一下把竿提上來(lái),我使勁忍耐著,全神貫注地盯住浮子,突然,浮子往水下一沉,我趕緊拉,頓時(shí),魚竿彎得像弓一樣,上鉤的魚兒在水中竄來(lái)竄去。爸爸以前說過:咬鉤的魚兒要讓它在水里游一會(huì)兒,拽得太狠魚會(huì)脫鉤。想到這里,我緊握魚竿,牽著魚兒在水里慢慢地游著,我的心怦怦直跳,真是又高興,又緊張,過了一會(huì)兒,這條魚仿佛沒有力氣了,任憑我擺布,我用力一提,“啪”地上了岸!“爸爸,快來(lái)啊!我釣了一條大魚?!卑职众s緊過來(lái)幫我解鉤,我丟下魚竿跑上去使勁抓住大魚把它放入桶里。1
看著這條兩斤來(lái)重的大草魚,我和爸爸、爺爺笑得合不攏嘴。我心想:無(wú)論做什么事情,都要講究方法,耐心認(rèn)真,才能得到滿意的結(jié)果。這次釣魚,我不但玩得開心,還學(xué)到不少釣魚的知識(shí),真有趣。
一件有趣的事
暑假里的一天,我正在外面玩。突然天空烏云密布,電閃雷鳴,狂風(fēng)四起,豆大的雨點(diǎn)“噼噼啪啪”地掉下來(lái)。我急忙往家跑,當(dāng)跑到院子里時(shí),發(fā)現(xiàn)王阿姨家的衣服還掛在外面,我就連忙往下摘,因?yàn)閭€(gè)子太矮,夠不著,我又馬上從屋里拿出個(gè)小板凳蹬著,把衣服一件一件地摘下來(lái)掛到屋里,等我好不容易把衣服摘完了,一看自己已經(jīng)成了落湯雞,還累得呼哧帶喘的,我拿起毛巾邊擦著身上的雨水,邊來(lái)到窗前,剛想看一看雨景,沒想到雨居然停了,太陽(yáng)出來(lái)了。這場(chǎng)雨一共下了沒有十分鐘,我又把衣服從屋里拿出來(lái),想一件一件往上掛。誰(shuí)知,我拿著衣服剛蹬上板凳,只聽“哧溜、啪!”的一聲摔了一個(gè)大屁墩。唉,剛下完雨,地還滑呢。王阿姨家的衣服也臟了。我又馬上把王阿姨家的衣服洗干凈再掛好。等我干完了這一切,擦著臉上的汗,心想:我這是做了件什么事呀,整個(gè)瞎忙。就好像老天爺和我開了一個(gè)玩笑。這件事我想起來(lái)就想笑。
暑假中最最有趣的一件事
今天晚上,我正一心一意地刷著牙,準(zhǔn)備睡覺,突然,我看見一個(gè)小飛蟲從我眼
前飛來(lái)飛去,我產(chǎn)刻放下水杯與牙刷騰出兩只手,我“啪”地一聲小飛蟲立刻被我拍成了肉餅,我又往墻上一看“呀”有三四只小蟲飛,立刻“啪啪啪”跑了一只死了四只。
就在我得意洋洋的時(shí)候,一個(gè)不留神往紗窗上一看“哇!??!”紗窗被剛
才被打死的這種小飛蟲全部蓋住了,哦!原來(lái)我們家的燈因?yàn)樘貏e亮,所以十分容易召蟲子。
小飛蟲的“軍隊(duì)”越來(lái)越多。它們從紗窗的縫眼兒中一個(gè)一個(gè)很有次序地鉆進(jìn)
來(lái),越來(lái)越多越來(lái)越多!我見情況不妙,立刻從陽(yáng)臺(tái)拿來(lái)一把蒼蠅拍?!班ооА薄芭九九尽睅资畟€(gè)小飛蟲已經(jīng)成了我的手下敗將。
但擁有幾十千只的“大軍”來(lái)說,**幾個(gè)“將士”也沒什么大不了的。看著看
著,打著打著,死蟲子的尸體已經(jīng)散落了一地。這支“大軍”的主力已經(jīng)逃到上面去了。因?yàn)槲姨?,無(wú)法打到上面的蟲子。雖然,我夠不著兒,但是我的腦袋卻不知道比這些笨蟲子靈十幾萬(wàn)倍,你再多也沒有用。我靈機(jī)一動(dòng),拿出滿是蟲子的毛巾,抖一抖,然后用毛巾漫無(wú)目標(biāo)地往上甩,那群小蟲子好似一大群沒頭沒腦的山羊,被我趕上山坡趕下山坡,弄著玩兒。我乘機(jī)拿出法寶殺蟲劑,用了四分之一,也沒費(fèi)什么力氣,小飛蟲就像雨點(diǎn)兒一樣落了下來(lái),看來(lái)我又得洗一次澡了。
第二天,我看了報(bào)紙才知道,原來(lái)是蟲災(zāi)。十八年沒有過的,一盞燈。一夜就
能輕松地捕到十一萬(wàn)只!可比我的殺蟲劑厲害多了。
那一夜,真嚇人?。。。。?!
第三篇:一件有趣的事情
一件有趣的事情
紅衛(wèi)小學(xué) 四(7)班雷海嵐
“童年的夢(mèng),七彩的夢(mèng);童年的歌,快樂的歌;童年的腳印一串串,童年的故事一摞摞。”這首歌是否能讓你回想起美好的童年生活?在那五彩繽紛的歲月中,發(fā)生過許多事情,就像星星一樣的明亮。我的童年是美好的,有許多事情值得回憶??
記得四歲那年,我很愛吃糖。有一天,我聽見奶奶正在和鄰居談話:“種瓜得瓜,種豆得豆??”我一聽,心想:既然種瓜得瓜,種豆得豆,那如果我種糖果也應(yīng)該得到糖果呀!想到這兒,我可興奮了,連忙跑回家把自己儲(chǔ)存罐里的十幾顆糖全倒了出來(lái),又小心翼翼的把那十幾顆糖果埋在我家院子里。一眨眼,一個(gè)月過去了,我種的糖果一點(diǎn)兒長(zhǎng)勢(shì)也沒有,我心里疑惑起來(lái):難道奶奶騙了我?第二天一大早,我就悄悄地起床了。我扒開院子的土,頓時(shí)傻了眼:十幾顆好端端的糖果不翼而飛,只剩下一張張?zhí)枪垼』氐郊?,我問奶奶:“奶奶,為什么我把我的糖果種在土里,一個(gè)月之后糖果不見了呢?”奶奶聽了,笑著說:“傻孩子,螞蟻愛吃甜的東西,它們的家又剛好在泥土里。你把糖果埋在土里不就等于把糖果白白送給螞蟻嗎?”聽了奶奶的話我大哭起來(lái):“我的糖果呀!我最愛吃的糖果沒有了!嗚嗚??”
瞧!這就是我童年里最有趣的事情!
第四篇:一件有趣的事情
一件有趣的事情
一看到綠油油的麥田,就想起我小時(shí)候把麥子當(dāng)成韭菜的趣事。
大概是我三四歲住在老家的時(shí)候,一天,媽媽騎車帶我去趕集,經(jīng)過一片麥地,我說:“哇,這里種的韭菜真多??!”媽媽先是一愣,然后哈哈大笑,告訴我:“寶貝,那是麥子,不是韭菜!麥苗表面有細(xì)小的毛,而韭菜沒有。麥子是糧食,韭菜是菜,它們的味道不一樣。”
現(xiàn)在,我每次想起這件事,總會(huì)情不自禁地笑出聲來(lái),很有趣吧?
第五篇:一件有趣的事情
摘 西 瓜
今年夏天,天氣異常的悶熱,耐不住酷暑的我也跑到鄉(xiāng)下的奶奶家去避暑。沒想到,卻發(fā)生了一件非常有趣的事情。
那是到家第二天的早晨,我正躺在床上作著美夢(mèng),奶奶在樓下叫我,說是去摘西瓜。我一骨碌爬了起來(lái),飛快的跑下了樓梯,跟著奶奶就出發(fā)了。
一到瓜田,我就驚呆了,只見鋪滿了墨綠色瓜藤的田里碩果累累,一個(gè)個(gè)又大又圓的西瓜有了晨露的滋養(yǎng),看起來(lái)是那樣的健康和新鮮?!叭フ 保牭侥棠贪l(fā)話,我三步并作兩步的跑到早就看準(zhǔn)的那個(gè)瓜,抱著就往田埂走。心里正得意著呢,西瓜突然從我的懷里滑了下去,“噗”,看著原本滾圓滾圓的西瓜瞬間成了兩半,我心里真是哭笑不得,你們猜怎么著,剛才一著急,忘了剪瓜藤了。
這時(shí),奶奶走了過來(lái),撿起半個(gè)西瓜遞給我,說:“吃吧,沒臟,沒事的”。望著那鮮紅欲滴的瓜瓤,我忍不住咽了口口水,肚子也不爭(zhēng)氣的敲起了鼓。一把接過西瓜,狼吞虎咽的吃了起來(lái),也不知怎么搞的,腦子里居然浮現(xiàn)出了豬八戒吃西瓜的情景。奶奶邊高興的看著我吃邊給我講起了西瓜的功效:“這西瓜呀,不僅能清熱解暑,生津止渴,而且還能開胃呢!” 順便告訴大家個(gè)小秘密,西瓜要早上摘才好吃,脆脆的,涼涼的。等到太陽(yáng)出來(lái),西瓜就熱了,會(huì)吃壞肚子的喲。
吃完西瓜,我們又摘了一籃,趕在太陽(yáng)上山之前,高高興興的回到了家。