單元測(cè)試范文

時(shí)間:2023-04-07 09:55:58

導(dǎo)語(yǔ):如何才能寫好一篇單元測(cè)試,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

篇1

一、選擇題(每題2分,共30分)

【 】1、家庭電路中接入的電能表,其作用是

A.給家用電路提供電能 B.提高家用電器效率

C.測(cè)量電路消耗的電能 D.保護(hù)電路避免火災(zāi)

【 】2、許多家用電器的三腳插頭有一特別之處:三腳插頭中與用電器金屬外殼連接的那個(gè)插腳比另兩個(gè)插腳夫要稍長(zhǎng),如圖1所示。這樣設(shè)計(jì)是為了

A.插頭插入插座時(shí),電器外殼先接地;撥出時(shí),電器外殼后離開地線

B.方便識(shí)別火線和零線插腳

C.延長(zhǎng)插頭使用壽命 D.使插頭的造型更美觀

圖2

1

【 】3、某同學(xué)家室內(nèi)的電燈均正常工作,當(dāng)他把“220V 8W”的臺(tái)燈插頭插入插座后,

閉合臺(tái)燈開關(guān),室內(nèi)電燈全部熄滅,發(fā)生這一現(xiàn)象的原因可能是

A.插座處短路 B.臺(tái)燈插頭處短路 C.臺(tái)燈開關(guān)處短路 D.臺(tái)燈燈頭處短路

【 】4、圖2是某家庭電路,閉合開關(guān),燈不亮。用試電筆接觸c點(diǎn)氖管不發(fā)光,接觸

d點(diǎn)氖管發(fā)光。已知該電路有兩處故障,則下列判斷正確的是

A、ac間斷路、bd間斷路 B、ac間斷路、eb間斷路

C、ac

間斷路、cd間短路 D、eb間斷路、cd間短路

【 】5、下列圖3四種情況中,人相對(duì)安全的是

【 】6、李明同學(xué)寒假在家看電視,為了取暖,他將一個(gè)電熱器插頭插入插座時(shí),聽(tīng)到

“叭”的一聲,同時(shí)從插座中冒一股黑煙,電視機(jī)和電燈都熄滅了,其原因是

A.電視機(jī)燒壞了 B.短路引起空氣開關(guān)斷開 C.電曖器燒壞了 D.燈絲燒斷

【 】7、下列四幅圖中,符合安全用電的是

圖4

【 】8、 暑期,徐延同學(xué)家新裝了一臺(tái)3kW的空調(diào)機(jī),試用了一會(huì)兒,家中突然停電,檢查發(fā)現(xiàn)熔絲斷了。導(dǎo)致上述故障的原因可能是

A.插頭和插座接觸不良 B.電路中用電器的總功率過(guò)大

C.空調(diào)機(jī)內(nèi)部斷路 D.控制空調(diào)機(jī)的開關(guān)短路

【 】9、 如圖5所示,當(dāng)開關(guān)S閉合后,發(fā)現(xiàn)電燈L不亮,用測(cè)電筆測(cè)試c、d兩點(diǎn)時(shí),氖管都發(fā)光,測(cè)試a、b兩點(diǎn)時(shí),只有a點(diǎn)氖管發(fā)光,則故障可能是

A.火線與零線短路 B.a(chǎn)、d之間某處斷路

C.b、c之間某處斷路 D.電燈的燈絲斷了

b a

c

圖7 圖5

圖6

【 】10、如圖6,教室的講臺(tái)旁邊裝有一盞白熾燈和白熾燈的控制開關(guān),老師需要在講臺(tái)上安裝一個(gè)插座,下面是幾位同學(xué)的安裝方案,其中正確的是

A.從白熾燈控制開關(guān)的兩個(gè)接線柱上分別引出兩根線將插座接入

B.從白熾燈燈頭接線盒內(nèi)的兩個(gè)接線柱上分別引出兩根線將插座接入

C.剝開a、b分別引出兩根線將插座接入

D.剝開a、c分別引出兩根線將插座接入

【 】11、某同學(xué)在學(xué)習(xí)家庭電路時(shí),安裝了兩盞額定電壓均為220V的完好的白熾燈(甲和乙)和兩個(gè)插座,如圖7所示,如果兩個(gè)插座均未連入家用電器,將電路中的開關(guān)全部閉合,保險(xiǎn)絲未熔斷,那么各用電器工作的情況是

A、甲、乙都正常工作 B、只有乙正常工作

C、甲、乙都不正常工作 D、只有甲正常工作

【 】12、 當(dāng)有人發(fā)生觸電事故時(shí),下列做法中,正確的是

A. 迅速用手將人脫離觸電區(qū) B. 用水果刀將電線割斷

C. 立即斷開閘刀開關(guān)或空氣開關(guān),或者用干燥竹竿挑開電線 D.趕快逃離現(xiàn)場(chǎng)

【 】13、家用電器中的總阻的變化情況是

A.只開一盞燈時(shí),電路中總電阻最小 B.不開燈時(shí),電路中電阻為零

C.所有燈都開時(shí),電路中的總電阻最大 D.所有燈都開時(shí),電路中的總電阻最小

【 】14、圖8甲所示為一個(gè)“一開三孔”開關(guān)

(即一個(gè)開關(guān)和一個(gè)三孔插座連在一起),它連入電路

如圖8乙所示。下列說(shuō)法正確的是

A.燈和插座是串聯(lián)的

B.燈和插座是并聯(lián)的

C.開關(guān)只控制插座

D.開關(guān)同時(shí)控制燈和插座

【 】15、小寧設(shè)計(jì)了一種照明電路圖, 圖8 其設(shè)計(jì)要求是:用兩個(gè)開關(guān)控制一盞燈,兩個(gè)

開關(guān)同時(shí)閉合燈才能發(fā)光,只閉合其中任意一個(gè)開關(guān)燈都不能發(fā)光。圖9所示的四幅電路圖中,既符合上述設(shè)計(jì)要求,又符合安全用電要求的是

圖9

二、填空題(每空1分,共24分)

16、家庭電路中每盞燈都有一個(gè)開關(guān),跟電燈 ,用來(lái)控制電燈的通斷,其他家用電器也都有自己的開關(guān)。家用電器要 聯(lián)接入電路中。

17、家庭電路的兩根線,一根叫火線,另一根叫零線。在低電壓供電的電源處, 線是接地的。所以在正常情況下, 線與地之間沒(méi)有電壓, 線和地之間有220V的電壓。

18、家庭電路中要裝 表,它用來(lái)測(cè)用戶在一定時(shí)間內(nèi)消耗多少千瓦時(shí)的電能。電能表要裝在家庭電路的 路上。

19、辨別火線和零線可以用測(cè)電筆,使用時(shí)一定要用手接觸筆尾的 體,筆尖接觸電線的裸露部分,氖管發(fā)光表明筆尖接觸的是 線。

20、家用保險(xiǎn)絲是由電阻 、熔點(diǎn) 的鉛銻合金制成。保險(xiǎn)絲是 聯(lián)在電路中。如果沒(méi)有備用的保險(xiǎn)絲, (填“能”或“不能”)用銅絲或鐵絲代替保險(xiǎn)絲。保險(xiǎn)絲是利用 工作的。更換保險(xiǎn)絲時(shí),一定要先 電源。

21、三孔插座比兩孔插座多的那個(gè)孔是跟 連接的。當(dāng)用電器的三腳插頭插在三孔插座里時(shí),除把用電部分連入電路外,還要把用電器的 與 連接起來(lái)。

22、安全用電的原則是,不 低壓帶電體,不 高壓帶電體。

23、小明在家看電視,突然斷電,發(fā)現(xiàn)空氣開關(guān)跳閘。原來(lái)是樓上鄰居家水管漏水,水流入小明家的插座中,因?yàn)榱魅氩遄乃?(選填“導(dǎo)體”或“絕緣體”),使電路發(fā)生 路,導(dǎo)致空氣開關(guān)跳閘。

24、如圖10所示,甲圖是小明家臥室的一個(gè)插座,他用試電筆測(cè)試插座的A孔,氖管發(fā)光,則A孔接的是 線;乙圖是一個(gè)臺(tái)燈的電路示意圖,當(dāng)把臺(tái)燈接入電路時(shí),為了安全,應(yīng)將臺(tái)燈插頭的 (選填“C”或“D”)插腳接火線。

10

三、作圖題(每題2分,共10分)

25、請(qǐng)用筆畫線代替導(dǎo)線將圖11乙中的三孔插座正確接入照明電路.

圖12 圖

11

26、小寶想在臥室安裝一盞照明電燈,請(qǐng)?jiān)趫D12中幫他把燈和開關(guān)接入電路。

27、小森家有兩盞墻壁燈,由一個(gè)開關(guān)控制,其元件符號(hào)如圖13所示,試連接電路圖。

28、如圖14所示,S1是光控開關(guān),夜晚自動(dòng)閉臺(tái),白天斷開;S2是聲控開關(guān),有聲音時(shí)自動(dòng)閉合,安靜時(shí)斷開。請(qǐng)把圖連接成聲光控樓道節(jié)能照明電路。

29、如圖15甲所示,是小明常用的一個(gè)插線板。他在使用中發(fā)現(xiàn):插線板上的指示燈在開關(guān)閉合時(shí)會(huì)發(fā)光,插孔正常通電;如果指示燈損壞,開關(guān)閉合時(shí)插孔也能正常通電。根據(jù)上述現(xiàn)象,在圖15乙中畫出插線板中開關(guān)、指示燈和插孔的連接方式,并與電源線接通。

火線 零線

指示燈

四、計(jì)算題(6分)

30、 某電路安裝的電能表上標(biāo)有“220V 5(10)A”,問(wèn)這電路中除使用2盞“220V 40W”的電燈,一臺(tái)60W的電視機(jī)外,

①是否還可以同時(shí)使用“220V 800W”的電爐?

②如果不使用電爐,只再安裝一些“220V 40W”的電燈,最多還可以再安裝多少盞?

單元測(cè)試

1. C 2.A 3.

D 4.

B 5.B 6.

B 7.

D 8.B 9.C 10.C 11.D 12.C 13.D 14.B 15.B

16.串聯(lián) 并 17.零 零 火 18.電能 干 19.金屬 火

20.大 低 串 不能 電流的熱效應(yīng) 切斷 21.大地 金屬外殼 大地

22.接觸 靠近 23.導(dǎo)體 短 24.火 D

25. 26. 27.

篇2

1. 圖1是一些汽車品牌的標(biāo)志,其中是中心對(duì)稱圖形但不是軸對(duì)稱圖形的共有().

A. 2個(gè)B.3個(gè)C. 4個(gè)D. 5個(gè)

2. 四張撲克牌如圖2(1)所示放在桌子上,小敏把其中兩張旋轉(zhuǎn)180°后如圖2(2)所示,那么她所旋轉(zhuǎn)的牌從左起是().

A. 第一張、第二張 B. 第二張、第三張

C. 第三張、第四張 D. 第四張、第一張

3. 如圖3,該圖形圍繞自己的旋轉(zhuǎn)中心,按下列角度順時(shí)針旋轉(zhuǎn)后,不能與其自身重合的是().

A. 72° B. 108°

C. 144° D. 216°

4. 如圖4,已知?荀ABCD的兩條對(duì)角線AC與BD交于平面直角坐標(biāo)系的原點(diǎn)O,點(diǎn)A的坐標(biāo)為(-2,3),則點(diǎn)C的坐標(biāo)為().

A. (-3,2) B. (-2,-3)

C. (3,-2) D. (2,-3)

5. 如圖5,在等邊ABC中,AC=9,點(diǎn)O在AC上,且AO=3,點(diǎn)P是AB上一動(dòng)點(diǎn),連接OP,將線段OP繞點(diǎn)O逆時(shí)針旋轉(zhuǎn)60°得到線段OD.要使點(diǎn)D恰好落在BC上,則AP的長(zhǎng)是().

A. 4B. 5C. 6D. 8

6. 圖6中這些復(fù)雜的圖案都是在一個(gè)圖案的基礎(chǔ)上,在“幾何畫板”軟件中拖動(dòng)一點(diǎn)后形成的,它們中每一個(gè)圖案都可以由一個(gè)“基本圖案”通過(guò)連續(xù)旋轉(zhuǎn)得來(lái),旋轉(zhuǎn)的角度是().

A. 30° B. 45° C. 60° D. 90°

二、填空題

7. 下午2點(diǎn)30分時(shí),時(shí)鐘的分針與時(shí)針?biāo)山堑亩葦?shù)為______.

8. 如圖7,直線y=-x+4與x軸、y軸分別交于A,B兩點(diǎn),把AOB繞點(diǎn)A順時(shí)針旋轉(zhuǎn)90°后得到AO′B′,則點(diǎn)B′的坐標(biāo)是______.

9. 如圖8,E,F(xiàn)分別是正方形ABCD的邊BC,CD上的一點(diǎn),且BE+DF=EF,則∠EAF=______.

10. 如圖9,用等腰直角三角板畫∠AOB=45°,并將三角板沿OB方向平移到如圖所示的虛線處后繞點(diǎn)M逆時(shí)針?lè)较蛐D(zhuǎn)22°,則三角板的斜邊與射線OA的夾角α為______度.

11. 如圖10,小新從A點(diǎn)出發(fā)前進(jìn)10 m,向右轉(zhuǎn)15°,再前進(jìn)10 m,又向右轉(zhuǎn)15°…這樣一直走下去,他第一次回到出發(fā)點(diǎn)A時(shí),一共走了______m.

12. 如圖11,直角梯形ABCD中,AD∥BC,ABBC,AB=1,AD=2,BC=3,將腰CD以D為中心逆時(shí)針旋轉(zhuǎn)90°至ED,連接AE,CE,則ADE的面積是______.

三、解答題

13. 如圖12,網(wǎng)格中有一個(gè)四邊形和兩個(gè)三角形.

(1) 請(qǐng)你畫出三個(gè)圖形關(guān)于點(diǎn)O的中心對(duì)稱圖形.

(2) 將(1)中畫出的圖形與原圖形看成一個(gè)整體圖形,請(qǐng)寫出這個(gè)整體圖形對(duì)稱軸的條數(shù).試問(wèn):這個(gè)整體圖形至少旋轉(zhuǎn)多少度才能與自身重合?

14. 如圖13,矩形ABCD中,AB=3,BC=4,若將矩形折疊,使C點(diǎn)和A點(diǎn)重合,求折痕EF的長(zhǎng).

15. 認(rèn)真觀察圖14中4個(gè)圖中陰影部分構(gòu)成的圖案,回答下列問(wèn)題.

(1) 請(qǐng)寫出這四個(gè)圖案都具有的兩個(gè)共同特征.

(2) 請(qǐng)?jiān)僭O(shè)計(jì)一個(gè)你心中最美麗的圖案,使它也具備你所寫出的上述特征.

16. 一位同學(xué)拿了兩個(gè)全等的45°三角尺M(jìn)NK和ACB,并做了一項(xiàng)探究活動(dòng):將MNK的直角頂點(diǎn)M放在ABC斜邊AB的中點(diǎn)處,設(shè)AC=BC=4.

(1) 如圖15(1),兩三角尺的重疊部分為ACM,則重疊部分的面積為______,周長(zhǎng)為______.

(2) 將圖15(1)中的MNK繞頂點(diǎn)M逆時(shí)針旋轉(zhuǎn)45°,得到圖15(2),此時(shí)重疊部分的面積為______,周長(zhǎng)為______.

(3) 如果將MNK繞M旋轉(zhuǎn)到不同于圖15(1)和圖15(2)的位置,如圖15(3),請(qǐng)你猜想此時(shí)重疊部分的面積:______.

(4)在圖15(3)情況下,若AD=1,求出重疊部分圖形的周長(zhǎng).

17. 如圖16,點(diǎn)O是等邊ABC內(nèi)一點(diǎn),∠AOB=110°,∠BOC=α.將BOC繞點(diǎn)C按順時(shí)針?lè)较蛐D(zhuǎn)60°得ADC,連接OD.

(1) 求證:COD是等邊三角形.

(2) 當(dāng)α=150°時(shí),試判斷AOD的形狀,并說(shuō)明理由.

(3) 探究:當(dāng)α為多少度時(shí),AOD是等腰三角形?

參考答案

一、1. A 2. A 3. B 4. D 5. C 6. C

二、7. 105 8. (7,3) 9. 45° 10. 22 11. 240 12. 1

三、13. (1)略. (2)4條,90°.

14. 如圖17,連接AF.∠FOC=90°,AC=5,AO=OC=.可得AF=.

OF 2=AF 2-OA2,得OF=.所以EF=.

15. (1) 4個(gè)圖中陰影部分的面積相等.它們都是軸對(duì)稱圖形和中心對(duì)稱圖形. (2) 圖形設(shè)計(jì)略.

篇3

關(guān)鍵詞:軟件測(cè)試;認(rèn)知誤區(qū);嵌入式;單元測(cè)試流程

1 軟件測(cè)試簡(jiǎn)述

軟件測(cè)試是在軟件投入商用前,對(duì)軟件需求分析報(bào)告、設(shè)計(jì)規(guī)格說(shuō)明書和編碼的最終復(fù)查,是軟件質(zhì)量保證的關(guān)鍵方法,軟件測(cè)試并不等于程序測(cè)試。它貫穿于軟件定義和開發(fā)的整個(gè)過(guò)程,因此,軟件需求分析、軟件概要設(shè)計(jì)、軟件詳細(xì)設(shè)計(jì)和程序編碼等各階段所得到的文檔,包括需求規(guī)格說(shuō)明書、概要設(shè)計(jì)說(shuō)明書、詳細(xì)設(shè)計(jì)說(shuō)明書,以及源代碼都是軟件測(cè)試的測(cè)試對(duì)象。隨著軟件規(guī)模的不斷擴(kuò)大,以及軟件設(shè)計(jì)復(fù)雜程度不斷的提高,軟件開發(fā)中出現(xiàn)失誤或缺陷的概率越來(lái)越大。隨著市場(chǎng)對(duì)軟件質(zhì)量重要性的認(rèn)知程序的提高,因此軟件測(cè)試在軟件項(xiàng)目實(shí)施過(guò)程中的重要性尤為突出。軟件測(cè)試將會(huì)成為一個(gè)具有很大發(fā)展前景的行業(yè),市場(chǎng)將需要更多具有豐富測(cè)試技術(shù)和先進(jìn)管理經(jīng)驗(yàn)的測(cè)試技術(shù)員和項(xiàng)目經(jīng)理。

2 軟件開發(fā)項(xiàng)目測(cè)試的誤區(qū)

軟件測(cè)試從1990年左右進(jìn)入中國(guó),目前國(guó)內(nèi)大的測(cè)評(píng)中心、大型企業(yè)已經(jīng)完全掌握了軟件測(cè)試的測(cè)試策略和測(cè)試方法。小企業(yè)普遍存在測(cè)試人員不懂什么是單元測(cè)試,怎樣進(jìn)行單元測(cè)試,很少能看懂代碼的細(xì)節(jié)。而開發(fā)人員很少能夠提供完整的詳細(xì)設(shè)計(jì)報(bào)告、需求報(bào)告。導(dǎo)致單元測(cè)試,以拼湊測(cè)試報(bào)告為目的。

認(rèn)知誤區(qū)一:軟件測(cè)試是軟件開發(fā)的最后一道步驟,工程師們一般認(rèn)為,軟件實(shí)際項(xiàng)目要經(jīng)過(guò)下面六個(gè)階段:需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),軟件編碼,軟件測(cè)試,軟件。因而,認(rèn)為軟件測(cè)試只是編碼后的一個(gè)孤立的階段,這就是不了解軟件測(cè)試流程的認(rèn)知偏差。軟件測(cè)試是一個(gè)系列的活動(dòng)過(guò)程,是一個(gè)開放的體系,包括軟件測(cè)試需求分析,測(cè)試計(jì)劃設(shè)計(jì),測(cè)試用例設(shè)計(jì),執(zhí)行測(cè)試。從而,軟件測(cè)試應(yīng)當(dāng)貫穿于軟件項(xiàng)目的整個(gè)生命周期,并不是軟件開發(fā)后最后一道步驟。認(rèn)知誤區(qū)二:軟件商用后如果發(fā)現(xiàn)質(zhì)量問(wèn)題,就武斷認(rèn)為是軟件測(cè)試人員的工作失誤。這種認(rèn)識(shí)很狹隘,很是打擊軟件測(cè)試人員的工作積極性。軟件測(cè)試只能確認(rèn)軟件存在錯(cuò)誤,不能保證軟件沒(méi)有錯(cuò)誤。因?yàn)閺母旧现v,軟件測(cè)試不可能發(fā)現(xiàn)全部錯(cuò)誤,軟件后的錯(cuò)誤可能來(lái)自軟件項(xiàng)目中的各個(gè)過(guò)程。認(rèn)知誤區(qū)三:軟件測(cè)試對(duì)測(cè)試人員技術(shù)要求不高,任何人都可以做。很多工程師認(rèn)為軟件測(cè)試就是安裝并運(yùn)行程序,按按鍵盤的重復(fù)性工作。隨著軟件測(cè)試技術(shù)的不斷改進(jìn)和完善,新測(cè)試方法、新流程、新工具都在不斷被開發(fā)出來(lái)。這就需要軟件測(cè)試工程師掌握和學(xué)習(xí)很多專業(yè)測(cè)試新理念和新技能。認(rèn)知誤區(qū)四:只有編寫程序的高手才是軟件專家,而軟件測(cè)試沒(méi)有前途。由于我國(guó)軟件行業(yè)整體研發(fā)能力比較低,軟件開發(fā)過(guò)程不規(guī)范。不少軟件項(xiàng)目的開發(fā)都還停留在“累加堆疊“階段。項(xiàng)目開發(fā)依靠個(gè)別程序員決定,他們一人負(fù)責(zé)總體設(shè)計(jì)和代碼編寫,給人的印象是程序員是真正的牛人,完成了所有的軟件項(xiàng)目開發(fā)工作。但在微軟等世界知名軟件企業(yè)里,軟件測(cè)試人員的待遇和數(shù)量與一般程序員沒(méi)有多少差異,優(yōu)秀測(cè)試人員的待遇甚至比普通程序員要高的多。

3 嵌入式軟件單元測(cè)試流程

單元測(cè)試是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。單元是規(guī)格說(shuō)明書中的最小單元,包括函數(shù)、子程序、程序。單元測(cè)試關(guān)注獨(dú)立的函數(shù)功能,是測(cè)試過(guò)程中最低級(jí)別的測(cè)試活動(dòng)。需要開發(fā)一個(gè)或多個(gè)測(cè)試用例執(zhí)行單元測(cè)試。把代碼問(wèn)題縮小范圍在開發(fā)階段鎖定Bug是單元測(cè)試的主旨要求,以下將介紹一種容易操作的嵌入式單元測(cè)試實(shí)戰(zhàn)流程。

第一階段,制定測(cè)試記錄表,記錄測(cè)試過(guò)程,和測(cè)試情況。測(cè)試記錄表包含:源文件名,子函數(shù)名,用例標(biāo)號(hào),用例名稱,用例個(gè)數(shù),用例通過(guò)個(gè)數(shù),語(yǔ)句覆蓋率,分支覆蓋率,MC/DC覆蓋率,測(cè)試結(jié)果,問(wèn)題描述,測(cè)試人員,測(cè)試時(shí)間。針對(duì)第一階段的測(cè)試結(jié)果,此時(shí)需要大家分析出問(wèn)題的代碼,各抒己見(jiàn),總結(jié)問(wèn)題,給出解決方法。

第二階段,解決部分測(cè)試用例failed問(wèn)題,找出阻止生成用例的共性。常見(jiàn)問(wèn)題匯總:局部變量未初始化,調(diào)用函數(shù)未聲明,局部變量直接賦值,結(jié)構(gòu)體嵌套、結(jié)構(gòu)體指針、聲明問(wèn)題、聲明位置問(wèn)題,函數(shù)指針,大循環(huán)、死循環(huán),絕對(duì)地址,指針變量,C語(yǔ)言程序中帶有g(shù)oto語(yǔ)句。解決辦法:局部變量聲明后,需要賦初值再使用。調(diào)用函數(shù)未聲明,該問(wèn)題發(fā)生在隔離測(cè)試階段,屬于代碼書寫不規(guī)范問(wèn)題。解決方法:自定義的函數(shù)都需要在頭文件中做統(tǒng)一聲明。局部變量直接賦初值:該問(wèn)題發(fā)生在測(cè)試用例無(wú)法生成階段,屬于代碼書寫不規(guī)范問(wèn)題。解決方法,結(jié)構(gòu)體局部變量,指針變量需要先聲明后賦初值。結(jié)構(gòu)體嵌套、結(jié)構(gòu)體指針、聲明問(wèn)題、聲明位置問(wèn)題:該問(wèn)題也屬于代碼書寫不規(guī)范問(wèn)題。解決方法:根據(jù)MISRA代碼書寫規(guī)范,結(jié)構(gòu)體需要放在頭文件中統(tǒng)一聲明。大循環(huán)、死循環(huán):?jiǎn)卧獪y(cè)試需要有程序結(jié)束的出口。解決方法:把大循環(huán)改為小循環(huán),注釋掉死循環(huán)(if(1)、for(; ;),while(1))。絕對(duì)地址:?jiǎn)卧獪y(cè)試不連接真實(shí)的硬件設(shè)備。遇到寄存器等絕對(duì)地址時(shí),需要對(duì)寄存器做變量處理。指針變量:需要聲明一個(gè)同類的數(shù)組,然后把數(shù)組的首地址,賦給指針變量。函數(shù)指針:需要虛構(gòu)一個(gè)函數(shù)實(shí)體,取函數(shù)地地址賦給函數(shù)指針,完成映射。C語(yǔ)言程序中帶有g(shù)oto語(yǔ)句:需要改變程序結(jié)構(gòu),增加判斷語(yǔ)句,去除所有的goto語(yǔ)句,以便確保C語(yǔ)言程序的穩(wěn)定性。

測(cè)試第三階段:基本圈復(fù)雜度高于MISRA閥值要求的函數(shù),先考慮把復(fù)雜函數(shù)改為幾個(gè)小函數(shù)。改不了的由開發(fā)人員寫聲明以及具體原因,再按照路徑分支來(lái)設(shè)計(jì)測(cè)試用例。匯總測(cè)試結(jié)果,提交測(cè)試問(wèn)題報(bào)告單,并提交行業(yè)標(biāo)準(zhǔn)測(cè)試報(bào)告。

4 結(jié)束語(yǔ)

文章簡(jiǎn)述了軟件測(cè)試的基本概念,澄清了軟件測(cè)試工程實(shí)踐中的幾個(gè)誤區(qū),依據(jù)單元測(cè)試實(shí)踐的具體案例,介紹了一種高效、容易操作的嵌入式單元測(cè)試的流程。

參考文獻(xiàn)

[1]胡丹,杜新華.基于目標(biāo)機(jī)的嵌入式軟件單元測(cè)試[J].電子測(cè)量技術(shù),2006(2).

[2]趙正海,王寧.跟蹤雷達(dá)“指示引導(dǎo)”功能軟件測(cè)試方法研究[J].現(xiàn)代電子技術(shù),2013(36).

[3]于園園.軟件測(cè)試技術(shù)與測(cè)試管理研究[J].江蘇科技信息,2016(7).

[4]王琨.嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)探討[J].科技創(chuàng)新與應(yīng)用,2016(7).

[5]張金環(huán),田洪濤.淺析設(shè)備軟件測(cè)試與質(zhì)量保證[J].電子工業(yè)專用備,2016,45(1).

作者簡(jiǎn)介:張軍(1988-),男,陜西武功人,工學(xué)碩士,助理工程師,主要研究方向:雷達(dá)信號(hào)處理算法、數(shù)字中頻收發(fā)機(jī)和嵌入式軟件測(cè)試。

篇4

滿分:100分 時(shí)間60分鐘 班 級(jí) : 姓 名 :

一yī、直zhí接jiē寫xiě出chū得dé數(shù)shù。(12×1=12分)

7+70= 35+5= 66-6= 83-3=

43-3= 4+60= 90+9= 3+40=

50-40= 97-7= 80-60= 50+5=

二èr、我wǒ會(huì)huì填tián。(每空1分,共20分)

1. 10個(gè)è一yī是shì( ),10個(gè)è十shí是shì( )。7個(gè)è十shí和hé6個(gè)è一yī合hé起qǐ來(lái)lái是shì( ),

6個(gè)è一yī和hé5個(gè)è十shí是shì( )。

2. 34里lǐ面miàn有yǒu( )個(gè)è十shí和hé( )個(gè)è一yī。80里lǐ面miàn有yǒu( )個(gè)è十shí。47里lǐ

有yǒu( )個(gè)è十shí和hé( )個(gè)è一yī。

3.與yǔ80相xiān鄰lín的de兩liǎn個(gè)è數(shù)shù是shì( )和hé( )。

4.七qī十shí二èr寫xiě作zuò( ),68讀dú作zuò( )。

5. 58里lǐ面miàn的de“5”在zài( )位wèi上shàn,表biǎo示shì( )個(gè)è( )。

6.比bǐ91小xiǎo,比bǐ88大dà的de數(shù)shù是shì( )和hé( )。

7.最zuì大dà的de兩liǎn位wèi數(shù)shù是shì( ),最zuì小xiǎo的de兩liǎn位wèi數(shù)shù是shì( )。

三sān、擺bǎi一yì擺bǎi,填tián一yì填tián。(4×3=12分)

1. 2個(gè)è同tón樣yàn的de正zhèn方fān形xín可kě以yǐ拼pīn成chén一yí個(gè)è( )。

2.( )個(gè)è同tón樣yàn的de正zhèn方fān形xín可kě以yǐ拼pīn成chén一yí個(gè)è大dà正zhèn方fān形xín。

3.2個(gè)è同tón樣yàn的de長(zhǎng)chán方fān形xín可kě以yǐ拼pīn成chén一yí個(gè)è( )或huò( )。

4.擺bǎi一yí個(gè)è三sān角jiǎo形xín最zuì少shǎo用yòn( )根ēn同tón樣yàn長(zhǎng)chán的de小xiǎo棒bàn。

四sì、判pàn斷duàn題tí。(對(duì)的在括號(hào)里畫“√”,錯(cuò)的畫“×”)(5×1=5分)

1.和hé80相xiān鄰lín的de數(shù)shù是shì81和hé82。 ( ) 2. 36后hòu面miàn第dì五wǔ個(gè)è數(shù)shù是shì41。 ( )

3. 100里lǐ面miàn有yǒu100個(gè)è十shí。 ( ) 4. 80比bǐ70少shǎo一yì些xiē。 ( )

5.個(gè)è位wèi是shì5,十shí位wèi是shì2,這zhè個(gè)è數(shù)shù是shì52。 ( )

五wǔ、比bǐ一yì比bǐ。(在內(nèi)填上“>”、“<”或“=”)(12×1=12分)

9390-3 8085-3 10090+9 78-880

42+849 20+630 5+50100 69-970

53-350 2022-2 3+7037 9999-9

六liù、連lián一yì連lián。(3×4=12分)

1.下xià面miàn哪nǎ兩liǎn部bù分fēn可kě以yǐ拼pīn成chén一yí個(gè)è完wán整zhěn的de圖tú形xín?

2.把bǎ小xiǎo動(dòng)dòn物wù送sòn回huí家jiā。

3.右yòu圖tú:蘋pín果uǒ是shì從cón哪n??胟ē樹shù上shàn摘zhāi下xià來(lái)lái的de?

七qī、數(shù)shǔ一yì數(shù)shù,填tián一yì填tián。(8分)

八bā、解jiě決jué問(wèn)wèn題tí。(9分)

1.一yí共òn數(shù)shǔ了le多duō少shǎo顆kē星xīn星xin。

2.一yí共òn有yǒu46架jià飛fēi機(jī)jī。

3.王wán強(qiáng)qián看kàn一yì本běn58頁(yè)yè的de書shū,看kàn了le一yì些xiē后hòu,還hái剩shèn8頁(yè)yè,他tā已yǐ經(jīng)jīn看kàn了le幾jǐ頁(yè)yè?

九jiǔ、動(dòng)dòn動(dòng)don腦nǎo。(10分)

篇5

傳統(tǒng)的單元測(cè)試包括了調(diào)用被測(cè)模塊(driver)和樁模塊(stub)。調(diào)用被測(cè)模塊的目的很單純,就是為了訪問(wèn)類庫(kù)的屬性和方法,來(lái)檢測(cè)類庫(kù)的功能是否正確;

調(diào)用被測(cè)模塊是用來(lái)模擬被測(cè)試模塊的上一級(jí)模塊,相當(dāng)于被測(cè)模塊的主程序。它接收數(shù)據(jù),將相關(guān)數(shù)據(jù)傳送給被測(cè)模塊,啟用被測(cè)模塊,并打印出相應(yīng)的結(jié)果。

Normal002falsefalsefalseEN-USKOX-NONEMicrosoftInternetExplorer4如果被測(cè)試模塊中的函數(shù)是提供給其他函數(shù)調(diào)用的,在設(shè)計(jì)測(cè)試用例時(shí)就應(yīng)該設(shè)計(jì)調(diào)用被測(cè)模塊(Driver)。

篇6

關(guān)鍵詞:?jiǎn)卧獪y(cè)試 LDRA Testbed 覆蓋分析

中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2015)09-0000-00

隨著計(jì)算機(jī)軟件技術(shù)的深入使用,各種軟件系統(tǒng)的復(fù)雜度不斷加深,為了更好,更有效率的完成任務(wù),節(jié)省時(shí)間和人力資源,這就對(duì)測(cè)試軟件有了更高的要求。LDRA Testbed測(cè)試工具的使用給工作帶來(lái)了很多便利,它是軟件驗(yàn)證與確認(rèn)的質(zhì)量工具,提供源代碼的測(cè)試和分析,主要應(yīng)用于需要軟件具有高可靠性,高健壯性,甚至要求盡可能達(dá)到零缺陷的領(lǐng)域[1]。

1測(cè)試準(zhǔn)備

為了提高測(cè)試的方便性,在用Testbed之前應(yīng)該做好準(zhǔn)備工作。建立一個(gè)包含項(xiàng)目各個(gè)模塊的文檔,對(duì)每個(gè)模塊創(chuàng)建合適的用例,包括邊界和特殊情況;并對(duì)各種不同的情況設(shè)計(jì)測(cè)試數(shù)據(jù),并計(jì)算出自己的期望值。如圖1。

圖1 單元測(cè)試數(shù)據(jù)表

2 Testbed單元測(cè)試

2.1 創(chuàng)建測(cè)試用例

選擇項(xiàng)目程序進(jìn)行測(cè)試,Tbrun進(jìn)行單元模塊測(cè)試進(jìn)行了有效的自動(dòng)化,創(chuàng)建測(cè)試序列,選擇單元模塊進(jìn)行白盒測(cè)試。Tbrun利用了代碼評(píng)審和設(shè)計(jì)評(píng)審的結(jié)果自動(dòng)對(duì)系統(tǒng)的每一個(gè)單元產(chǎn)生測(cè)試驅(qū)動(dòng);用戶被提示輸入數(shù)據(jù)(測(cè)試準(zhǔn)備文檔中模塊數(shù)據(jù))并與產(chǎn)生的結(jié)果進(jìn)行比較,是否期望與實(shí)際結(jié)構(gòu)一致(如圖2)。 Tbrun保存并維護(hù)所有的測(cè)試信息,方便在以后任何時(shí)候生成相同的驅(qū)動(dòng)進(jìn)行回歸測(cè)試。

圖2 對(duì)比結(jié)果圖

2.2 覆蓋率分析

覆蓋率分析有三種常用的覆蓋測(cè)試,分別是語(yǔ)句覆蓋,分支覆蓋和MC/DC覆蓋。語(yǔ)句覆蓋是常用的覆蓋方法,也是最弱的邏輯覆蓋準(zhǔn)則。即使語(yǔ)句覆蓋率達(dá)到100%,也不能保證被測(cè)程序100%的被覆蓋,其缺點(diǎn)是不能發(fā)現(xiàn)某些程序結(jié)構(gòu)的邏輯錯(cuò)誤[2]。

輸入了數(shù)據(jù)產(chǎn)生結(jié)果對(duì)比后會(huì)生成覆蓋分析報(bào)告,里面包含了結(jié)果對(duì)比情況和覆蓋率情況(如圖3),其中含有*的語(yǔ)句表示測(cè)試用例并沒(méi)有包含這些語(yǔ)句,我們需要進(jìn)行分析測(cè)試用例是否包含了這種情況;如果包含,則這些語(yǔ)句是多余的,否則增加此種情況的用例。

圖3 覆蓋分析報(bào)告

3 結(jié)語(yǔ)

軟件測(cè)試工具與人力的結(jié)合提高了測(cè)試效率,使軟件單元設(shè)計(jì)中的問(wèn)題提早暴露,保證了項(xiàng)目質(zhì)量并縮短了項(xiàng)目周期。Testbed是一個(gè)比較方便的測(cè)試工具,可以節(jié)省資源,提高產(chǎn)品質(zhì)量。不僅在編程階段可以檢測(cè)和修改軟件的錯(cuò)誤與缺點(diǎn),而且覆蓋率的測(cè)試提供了測(cè)試方案和必要信息。

參考文獻(xiàn)

[1]石磊.LDRA Testbed在彈載軟件測(cè)試中的應(yīng)用怕[J].軟件導(dǎo)刊,2008.

[2]王瑋.Testbed中常用覆蓋測(cè)試方法研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2015,13-14.

篇7

關(guān)鍵詞:軟件測(cè)試;單元測(cè)試;模擬對(duì)象

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)05-00ppp-0c

1 引言

隨著極限編程在實(shí)際軟件開發(fā)項(xiàng)目中的推廣,越來(lái)越多的項(xiàng)目開始采用測(cè)試驅(qū)動(dòng)開發(fā)作為主要的軟件開發(fā)方法。單元測(cè)試不僅優(yōu)化了軟件系統(tǒng)設(shè)計(jì),還大大簡(jiǎn)化了功能測(cè)試的工作量[1]。但是另一方面.更多的項(xiàng)目在開始不久就發(fā)現(xiàn)在很多情況下針對(duì)一個(gè)類編寫單元測(cè)試比較困難.隨著項(xiàng)目的進(jìn)行,越來(lái)越多的代碼無(wú)法進(jìn)行單元測(cè)試.到最后整個(gè)項(xiàng)目無(wú)法繼續(xù)采用測(cè)試驅(qū)動(dòng)的方式進(jìn)行開發(fā)。因此,要將測(cè)試驅(qū)動(dòng)開發(fā)真正在整個(gè)項(xiàng)目里貫徹執(zhí)行,必須有一種方法能夠相對(duì)容易的解決這些問(wèn)題。本文將首先討論了單元測(cè)試和無(wú)法或很難進(jìn)行單元測(cè)試的情況,然后引入Mock Object的概念,基于Mock Object實(shí)現(xiàn)單元測(cè)試。接下來(lái)討論在軟件開發(fā)過(guò)程中引入Mock Object對(duì)測(cè)試和設(shè)計(jì)的影響。最后簡(jiǎn)述了Mock Object的局限性。

2 單元測(cè)試

2.1 什么是單元測(cè)試

單元測(cè)試是對(duì)程序中的單個(gè)子程序或過(guò)程進(jìn)行測(cè)試的過(guò)程,也就是說(shuō),一開始并不是對(duì)整個(gè)程序進(jìn)行測(cè)試,而是將注意力集中在對(duì)構(gòu)成程序的較小模塊的測(cè)試上面[2]。單元測(cè)試從兩個(gè)角度進(jìn)行測(cè)試:一是測(cè)試數(shù)據(jù)都是針對(duì)程序的功能來(lái)設(shè)計(jì)的黑盒測(cè)試;二是針對(duì)程序的邏輯結(jié)構(gòu)來(lái)設(shè)計(jì)測(cè)試用例的白盒測(cè)試。

2.2 單元測(cè)試面對(duì)的難題

造成針對(duì)一個(gè)類難以進(jìn)行單元測(cè)試的主要原因是因?yàn)檫@個(gè)類依賴于一些其它的難以測(cè)試的資源。主要有這三類最主要的資源:數(shù)據(jù)庫(kù),第三方組件和網(wǎng)絡(luò)硬件資源。下面我們將對(duì)這三大類難以測(cè)試的資源進(jìn)行分類討論。

2.2.1 數(shù)據(jù)庫(kù)

現(xiàn)在大部分的軟件項(xiàng)目都會(huì)采用數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)。常見(jiàn)的開發(fā)團(tuán)隊(duì)會(huì)在每個(gè)開發(fā)人員的機(jī)器上安裝一個(gè)本地的數(shù)據(jù)庫(kù),每個(gè)人針對(duì)自己的數(shù)據(jù)庫(kù)進(jìn)行開發(fā)調(diào)試。這樣做的問(wèn)題是:必須有一種方式同步數(shù)據(jù)庫(kù)的設(shè)計(jì)。如果有一個(gè)人修改了數(shù)據(jù)庫(kù)schema或者某個(gè)存儲(chǔ)過(guò)程,這個(gè)修改必須同步到所有開發(fā)者的本地?cái)?shù)據(jù)庫(kù)以及測(cè)試服務(wù)器上。采用敏捷軟件開發(fā)的很多項(xiàng)目組往往會(huì)浪費(fèi)大量的時(shí)間在數(shù)據(jù)庫(kù)設(shè)計(jì)同步上。更嚴(yán)重的是每周都會(huì)遇到由于數(shù)據(jù)庫(kù)設(shè)計(jì)不同步,修改沖突導(dǎo)致的問(wèn)題導(dǎo)致整個(gè)項(xiàng)目的中心源碼庫(kù)在Auto Build時(shí)失敗。每個(gè)開發(fā)人員都有自己的測(cè)試數(shù)據(jù),除了上面提到的需要把這些測(cè)試數(shù)據(jù)同步到所有開發(fā)機(jī)器和測(cè)試服務(wù)器上外,還面臨更重大的問(wèn)題。因?yàn)闇y(cè)試用例需要修改數(shù)據(jù)庫(kù),因此還必須準(zhǔn)備一種機(jī)制能夠在每一個(gè)測(cè)試用例執(zhí)行結(jié)束后重新將所有的測(cè)試數(shù)據(jù)調(diào)入數(shù)據(jù)庫(kù)。采用最簡(jiǎn)單直接的方法就是在每個(gè)測(cè)試用例執(zhí)行前都將數(shù)據(jù)庫(kù)清空,然后再將測(cè)試數(shù)據(jù)調(diào)入,這樣會(huì)大大減慢單元測(cè)試的時(shí)間。單元測(cè)試時(shí)間越長(zhǎng),開發(fā)者就越不愿意執(zhí)行這些測(cè)試用例,單元測(cè)試所發(fā)揮的作用越小,這也是很多測(cè)試驅(qū)動(dòng)項(xiàng)目最終無(wú)法進(jìn)行到底的一個(gè)重要原因。另一個(gè)非常嚴(yán)重的問(wèn)題是為了清理測(cè)試環(huán)境,在針對(duì)商業(yè)邏輯的測(cè)試用例中加入了大量的數(shù)據(jù)訪問(wèn)層的代碼。采用這樣的方式強(qiáng)迫開發(fā)者在開發(fā)商業(yè)邏輯層的同時(shí)開發(fā)數(shù)據(jù)訪問(wèn)層,并且嚴(yán)重降低了可讀性。

2.2.2 第三方組件或應(yīng)用服務(wù)器

數(shù)據(jù)庫(kù)是最常見(jiàn)的第三方服務(wù)器。除此以外在越來(lái)越多的項(xiàng)目中使用第三方的組件和應(yīng)用服務(wù)器。例如:客戶環(huán)境中的ERP系統(tǒng),全球定位系統(tǒng)(GPS)的Web Service接口,繪圖引擎等。對(duì)于這些第三方提供的內(nèi)容,造成難以編寫單元測(cè)試的最根本的原因有:一是系統(tǒng)不透明:對(duì)于大部分商業(yè)組件或者服務(wù)來(lái)說(shuō),一個(gè)很重要的內(nèi)容是良好的封裝。但這個(gè)特性帶來(lái)的問(wèn)題是在外界無(wú)法對(duì)其內(nèi)部狀態(tài)進(jìn)行控制和訪問(wèn)。往往經(jīng)過(guò)好幾個(gè)操作后才能在外部觀察到相應(yīng)的變化。二是環(huán)境配置困難。由于項(xiàng)目組成員計(jì)算機(jī)配置不同,加入項(xiàng)目的時(shí)間不同,在項(xiàng)目中負(fù)責(zé)的內(nèi)容不同導(dǎo)致無(wú)法為所有開發(fā)人員配置一個(gè)完全一致的環(huán)境。例如一個(gè)繪圖引擎的開發(fā)版的license是按照一個(gè)局域網(wǎng)內(nèi)部同時(shí)使用的人員個(gè)數(shù)收費(fèi)的,就不可能只為了能夠進(jìn)行完整的單元測(cè)試就為只編寫商業(yè)邏輯層的開發(fā)人員也安裝一套。

2.2.3 網(wǎng)絡(luò)資源和硬件資源

在稍大一些的項(xiàng)目中都或多或少的用到一些網(wǎng)絡(luò)資源。例如將文件部署到遠(yuǎn)程的webDAV服務(wù)器上同時(shí)很多項(xiàng)目還會(huì)用到一些硬件資源。常見(jiàn)的有打印機(jī)、指紋識(shí)別驗(yàn)證或者條形碼閱讀器等。這些資源有兩大特點(diǎn)導(dǎo)致很難針對(duì)與他們相關(guān)的類編寫測(cè)試用例。

一是資源訪問(wèn)沖突。很多網(wǎng)絡(luò)資源對(duì)于并發(fā)訪問(wèn)的響應(yīng)協(xié)調(diào)是通過(guò)鎖機(jī)制進(jìn)行的,在實(shí)際項(xiàng)目中常見(jiàn)的是一個(gè)開發(fā)人員在調(diào)試本地代碼時(shí)導(dǎo)致遠(yuǎn)端資源被鎖定導(dǎo)致其它開發(fā)者無(wú)法訪問(wèn)這些資源。

二是環(huán)境可控因素。對(duì)于網(wǎng)絡(luò)資源和硬件資源相關(guān)代碼的測(cè)試與針對(duì)商業(yè)邏輯層代碼的測(cè)試最大的不同是環(huán)境的不確定性。訪問(wèn)網(wǎng)絡(luò)資源有可能遇到的異常情況非常多,例如網(wǎng)絡(luò)忙造成訪問(wèn)超時(shí),也有可能建立鏈接后數(shù)據(jù)傳輸失敗,還有可能數(shù)據(jù)傳輸完成后校驗(yàn)失敗。針對(duì)訪問(wèn)這些資源的代碼進(jìn)行的測(cè)試必須能夠覆蓋到所有可能出現(xiàn)的每一種情況。如果沒(méi)有一個(gè)可控,并且是全自動(dòng)的環(huán)境輔助單元測(cè)試的話,這項(xiàng)任務(wù)基本上不可能完成。

3 模擬對(duì)象

3.1 什么是模擬對(duì)象

Mock這個(gè)單詞翻譯成中文大概的意思是假的,模擬的。如圖1所示:通過(guò)一個(gè)常見(jiàn)的對(duì)商業(yè)邏輯的測(cè)試描述了一個(gè)Mock Object。在圖中我們可以看出:測(cè)試代碼需要測(cè)試商業(yè)邏輯,而商業(yè)邏輯代碼需要通過(guò)IMyDataAccess接口訪問(wèn)底層數(shù)據(jù)庫(kù),這就是數(shù)據(jù)庫(kù)依賴問(wèn)題。為了解決這個(gè)問(wèn)題我們引入一個(gè)Mock Object,并將這個(gè)Mock Object而非真正的Data Access傳遞給商業(yè)邏輯代碼進(jìn)行測(cè)試。這里的Mock Object不需要實(shí)現(xiàn)任何邏輯只需要根據(jù)商業(yè)邏輯的需要返回適當(dāng)?shù)膬?nèi)容就可以了。

圖1 使用Mock Object對(duì)商業(yè)邏輯進(jìn)行測(cè)試

3.2 模擬對(duì)象實(shí)現(xiàn)單元測(cè)試應(yīng)用實(shí)例

現(xiàn)在我們寫好了類AccountService,具體如下:

public class AccountService {

private AccountManager accountManager;

public void setAccountManager(AccountManager manager) {

this.accountManager = manager;

}

public void transfer(String senderId, String beneficiaryId, long amount) {

Account sender = this.accountManager.findAccountForUser(senderId);

Account beneficiary =

this.accountManager.findAccountForUser(beneficiaryId);

sender.debit(amount);

beneficiary.credit(amount);

this.accountManager.updateAccount(sender);

this.accountManager.updateAccount(beneficiary);

}}

現(xiàn)在我們想測(cè)試transfer方法,它內(nèi)部調(diào)用的AccountManager的兩個(gè)方法。但是對(duì)于AccountManager來(lái)說(shuō),它只是個(gè)接口,如下:

public interface AccountManager {

Account findAccountForUser(String userId);

void updateAccount(Account account);

}

所以現(xiàn)在我們必須寫個(gè)MockAccountManager對(duì)象。而且里面的方法體都是非常簡(jiǎn)單的,就是假定它就返回某某值。

我們這里還有Account類。

public class Account {

private String accountId;

private long balance;

public Account(String accountId, long initialBalance) {

this.accountId = accountId;

this.balance = initialBalance;

}public void debit(long amount) {

this.balance -= amount;

}

public void credit(long amount) {

this.balance += amount;

}

public long getBalance() {

return this.balance;

}

public String getAccountId() {

return accountId;

}}

public class AccountService1Tests extends TestCase {

public void testTransfer(){

AccountService as = new AccountService();

MockAccountManager mockAccountManager=new MockAccountManager();

Account accountA = new Account("A",3000);

Account accountB = new Account("B",2000);

mockAccountManager.addAccount(accountA);

mockAccountManager.addAccount(accountB);

as.setAccountManager(mockAccountManager);

as.transfer("A","B",1005);

assertEquals(accountA.getBalance(),1995);

assertEquals(accountB.getBalance(),3005);

}}

這里我們?cè)诩俣ˋccountManager方法都工作正常的情況下,完成了對(duì)transfer方法的測(cè)試。

從以上代碼可以看出,采用Mock Object進(jìn)行的單元測(cè)試基本上可以分為下面幾步:

(1)基于一個(gè)接口定義Mock并實(shí)現(xiàn)這個(gè)接口的所有函數(shù)。

(2)創(chuàng)建Mock Object的一個(gè)對(duì)象

(3)設(shè)置對(duì)象內(nèi)部屬性

(4)告訴對(duì)象測(cè)試代碼希望看到的反應(yīng)

(5)進(jìn)行測(cè)試

(6)檢查Mock Object的確按照希望的順序進(jìn)行工作。

3.3 模擬對(duì)象的優(yōu)點(diǎn)

3.3.1 模擬對(duì)象作為測(cè)試手段的優(yōu)點(diǎn)

Mock Object最直接的優(yōu)點(diǎn)在于提供單元測(cè)試的質(zhì)量和覆蓋率:

(1)只要在測(cè)試中對(duì)期待發(fā)生的問(wèn)題指定好執(zhí)行的順序引入Mock Object對(duì)象后的單元測(cè)試就是在一個(gè)完全可控的環(huán)境里進(jìn)行的。也就是說(shuō)我們?cè)僖膊粫?huì)無(wú)法定位一個(gè)“時(shí)隱時(shí)現(xiàn)”的bug。相反我們可以非常迅速的將問(wèn)題定位在一個(gè)類的內(nèi)部,而不是一個(gè)函數(shù)調(diào)用序列。

(2)于測(cè)試人員來(lái)說(shuō),最常見(jiàn)的問(wèn)題是測(cè)試人員提交的bug無(wú)法在開發(fā)人員那里復(fù)現(xiàn)。有了Mock Object這個(gè)工具測(cè)試人員可以利用Mock Object明確的指定輸入和輸出編寫一個(gè)測(cè)試用例讓開發(fā)人員修復(fù)。

(3)超過(guò)8O% 的異常處理代碼沒(méi)有被充分測(cè)試過(guò)。主要原因是在沒(méi)有Mock Object之前很多情況是無(wú)法由人工進(jìn)行控制的,例如寫文件失敗網(wǎng)絡(luò)連接超時(shí),數(shù)據(jù)庫(kù)數(shù)據(jù)傳輸失敗或者從網(wǎng)絡(luò)接收到的數(shù)據(jù)已經(jīng)損壞。通過(guò)控制Mock Object我們很容易就可以模擬上面的這些情況。

3.3.2 模擬對(duì)象作為設(shè)計(jì)手段的優(yōu)點(diǎn)

雖然Mock Object最直接的優(yōu)點(diǎn)在于給予測(cè)試代碼更多的可控性和可操作性,它最大的優(yōu)點(diǎn)在于對(duì)軟件設(shè)計(jì)的影響[3]。

(1)測(cè)試驅(qū)動(dòng)開發(fā)與Mock Object一起使用,可以寫出低耦合高內(nèi)聚,非常優(yōu)雅干凈的代碼。

(2)強(qiáng)迫設(shè)計(jì)者放棄對(duì)第三方庫(kù)的強(qiáng)依賴關(guān)系,取而代之的是比較弱的依賴關(guān)系。

(3)設(shè)計(jì)人員可以將更大的注意力放在商業(yè)邏輯的實(shí)現(xiàn)和測(cè)試.由于Mock Object的存在,我們不需要實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層就可以對(duì)商業(yè)邏輯進(jìn)行測(cè)試。而商業(yè)邏輯才是任何系統(tǒng)中對(duì)于客戶最重要的內(nèi)容,它的正確與否決定了整個(gè)系統(tǒng)是否能完成任務(wù),它的穩(wěn)定性決定了整個(gè)系統(tǒng)架構(gòu)的穩(wěn)定性。

(4)在項(xiàng)目初期,甚至是中期,將設(shè)計(jì)人員解放出來(lái),不用對(duì)系統(tǒng)底層的基礎(chǔ)設(shè)施做出判斷。例如,在商業(yè)邏輯并不明確,需求還不穩(wěn)定的時(shí)候,我們是更多根據(jù)感覺(jué)來(lái)做出很多重要的判斷的,而這些判斷往往導(dǎo)致比較關(guān)鍵的決定。例如,在項(xiàng)目之初,誰(shuí)能夠明確的回答到底需要什么樣的數(shù)據(jù)庫(kù)?Oracle?SQL Server?還是XML文件?到底需要什么樣的隊(duì)列服務(wù)器 MSMQ還是IBM―MQ?由于Mock Object的引入,我們可以將這些決策推遲到商業(yè)邏輯層更加明確之后進(jìn)行,從而可以獲得更加準(zhǔn)確有針對(duì)性的答案。

3.4 模擬對(duì)象的局限性

Mock Object在實(shí)際項(xiàng)目中的應(yīng)用存在一些限制,一些是由于Mock Object本身性質(zhì)決定的,有一些則是由于其它類庫(kù)設(shè)計(jì)存在的缺陷導(dǎo)致的。

(1)一個(gè)典型的不是Mock Object的問(wèn)題,而是類庫(kù)設(shè)計(jì)的問(wèn)題。是Mock Object無(wú)法模擬比較深的對(duì)象樹。有一些第三方的類庫(kù),尤其是一些消息處理函數(shù)的參數(shù),提供的不是接口而是一些對(duì)象。往往這些對(duì)象內(nèi)部有很多子對(duì)象,也就是我們常說(shuō)的一棵大的對(duì)象樹。我們需要花費(fèi)太多的精力去構(gòu)造這些對(duì)象來(lái)進(jìn)行模擬,時(shí)間消耗巨大。

(2)一般性而言,單元測(cè)試的粒度越細(xì),功能測(cè)試的粒度就可以越粗[4]。但是引入Mock Object的單元測(cè)試仍然無(wú)法取代功能測(cè)試。一個(gè)很好的例子就是誤差積累的測(cè)試,哪怕每個(gè)單元的誤差都在可接收范圍內(nèi),我們?nèi)匀恍枰粋€(gè)功能測(cè)試確保整體誤差也是可以接受的。

4 結(jié)束語(yǔ)

模擬對(duì)象解決了傳統(tǒng)單元測(cè)試的兩個(gè)問(wèn)題:一是如何將需要測(cè)試的代碼與相關(guān)環(huán)境隔離;二是如何創(chuàng)建一個(gè)快速、可控的環(huán)境輔助測(cè)試開發(fā)。隨著模擬對(duì)象技術(shù)的成熟,基于模擬對(duì)象的單元測(cè)試會(huì)越來(lái)越廣泛地被采用。

參考文獻(xiàn):

[1]Kent Beck.測(cè)試驅(qū)動(dòng)開發(fā)[M].北京:中國(guó)電力出版社,2003.

[2]Myers.王峰,陳杰譯.軟件測(cè)試的藝術(shù)(第二版)[M]. 北京:機(jī)械工業(yè)出版社,2006.50-52.

[3]David Astels.崔凱,譯.測(cè)試驅(qū)動(dòng)開發(fā)實(shí)用指南[M].北京:中國(guó)電力出版社,2004.120-130.

[4]Paul C Jorgensen.韓柯,杜旭濤,譯.軟件測(cè)試(第二版)[M].北京:機(jī)械工業(yè)出版社,2003.

篇8

關(guān)鍵詞:Java類;面向?qū)ο蟮膯卧獪y(cè)試;測(cè)試用例

中圖分類號(hào):G642文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)35-2435-02

Object-oriented Unit Testing of the Case Teaching Method

ZHENG Li-xiang

(Quanzhou Senior Technical School, Quanzhou 362000, China)

Abstract: This article describes a software testing in the curriculum, students have learned the combination of Java-related knowledge, the case teaching method used to explain the object-oriented unit testing the contents of teaching so that students can understand the theory of knowledge can master the practical skills and to improve their interest in learning to cultivate the ability of students.

Key words: Java class; object-orient unit test; test case

1 引言

面向?qū)ο蟮膯卧獪y(cè)試(簡(jiǎn)稱為OO Unit Test)是檢驗(yàn)面向?qū)ο蟪绦蜃钚挝?,即檢查類有無(wú)錯(cuò)誤的測(cè)試工作。因?yàn)轭愂敲嫦驅(qū)ο蟪绦蛑凶罨镜膯挝?,所以?duì)于類的測(cè)試必須要100%通過(guò),這樣面向?qū)ο髥卧獪y(cè)試就顯得非常重要了。面向?qū)ο蟮母拍罴俺绦蛟O(shè)計(jì)方法本身就是一個(gè)難點(diǎn),那么要幫助學(xué)生理解和掌握面向?qū)ο髥卧獪y(cè)試就更困難了。學(xué)生們對(duì)此也覺(jué)得很枯燥,聽(tīng)不懂,學(xué)不會(huì),最后放棄了。為了讓學(xué)生掌握這方面的知識(shí)和技能,我采用的方法是以Java類為例,講解面向?qū)ο髥卧獪y(cè)試的基本操作過(guò)程,以案例代替概念,理論與實(shí)踐相結(jié)合,采用案例教學(xué)法。

為什么要采用Java類作為案例進(jìn)行教學(xué)呢?這主要是考慮到以下兩點(diǎn):

一是Java語(yǔ)言是當(dāng)前應(yīng)用前景非常好的軟件設(shè)計(jì)開發(fā)語(yǔ)言,現(xiàn)在的計(jì)算機(jī)專業(yè)一般都會(huì)開設(shè)這一課程,并且是在《軟件測(cè)試》之前開設(shè),學(xué)生有知識(shí)基礎(chǔ)。

二是Java語(yǔ)言是純面向?qū)ο蟮恼Z(yǔ)言,它摒棄了C/C++中的一些不易掌握的結(jié)構(gòu),如指針等,其最小處理單位就是類,而且Java語(yǔ)言的程序非常簡(jiǎn)潔,理解起來(lái)比較容易。

當(dāng)然作為案例的Java類不能太難了,否則一開始學(xué)生就看不懂該Java類的功能,更不用說(shuō)理解該類的測(cè)試過(guò)程了。

為了讓學(xué)生能夠掌握面向?qū)ο髥卧獪y(cè)試技術(shù),我根據(jù)學(xué)生的知識(shí)水平,選用合適的被測(cè)試的Java類,為其設(shè)計(jì)測(cè)試用例,執(zhí)行測(cè)試并生成測(cè)試文檔,用完整的案例進(jìn)行教學(xué)。

2 針對(duì)面向?qū)ο笳Z(yǔ)言的特征,選擇自動(dòng)化的單元測(cè)試方法

在一個(gè)典型的軟件項(xiàng)目中,有兩種類型的測(cè)試最為重要:程序員測(cè)試和用戶測(cè)試,或稱為單元測(cè)試和驗(yàn)收測(cè)試。單元測(cè)試由程序設(shè)計(jì)師自行編寫測(cè)試代碼,目的在于驗(yàn)證程序設(shè)計(jì)師所撰寫的代碼是否依據(jù)其所設(shè)想的方式執(zhí)行而產(chǎn)生符合預(yù)期的結(jié)果。即驗(yàn)證程序代碼的正確性。如果是對(duì)采用面向?qū)ο蠓椒ㄔO(shè)計(jì)的軟件進(jìn)行單元測(cè)試,就是面向?qū)ο髥卧獪y(cè)試了。

通常,在進(jìn)行面向?qū)ο蟮膯卧獪y(cè)試前,我們都要分析幾個(gè)問(wèn)題:

1) 面向?qū)ο蟮膯卧獪y(cè)試的對(duì)象是誰(shuí)?

2) 采用人工測(cè)試還是自動(dòng)化測(cè)試?

3) 如果是自動(dòng)化測(cè)試,那么使用什么樣的工具合適?

4) 如何進(jìn)行面向?qū)ο蟮膯卧獪y(cè)試?

對(duì)于不同的程序代碼來(lái)說(shuō),以上的問(wèn)題可能都有不同的答案與之相對(duì)應(yīng),那么如果使用的是Java語(yǔ)言所編寫的代碼的話,該怎樣決定呢?

首先,我們知道Java語(yǔ)言是一種高級(jí)的、通用的、完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,其程序的基本處理單位是類。所以單元測(cè)試的對(duì)象就是類,即Java的單元測(cè)試指的是面向?qū)ο蟮膯卧獪y(cè)試。

其次,隨著軟件的復(fù)雜程度越來(lái)越高,面向?qū)ο髥卧獪y(cè)試的工作量也隨之增加了,若采用人工測(cè)試恐怕難以完成。因此,自動(dòng)化的單元測(cè)試要比人工測(cè)試要來(lái)得適用。再者,自動(dòng)化測(cè)試的另一個(gè)好處是能生成測(cè)試文檔,這樣也可以減少文檔的撰寫工作。

當(dāng)然,如果選擇了自動(dòng)化測(cè)試就需要工具來(lái)支持了,使用何種工具比較合適呢。在此,推薦使用JUnit,這是一種輕量級(jí)的測(cè)試框架。JUnit是一個(gè)開發(fā)源代碼的Java測(cè)試框架,用于編寫和運(yùn)行可重復(fù)的測(cè)試。它是用于單元測(cè)試框架體系xUnit的一個(gè)實(shí)例(用于Java語(yǔ)言)。主要用于白盒測(cè)試,回歸測(cè)試。JUnit一般不需要另行安裝,通常集成的程序設(shè)計(jì)平臺(tái),如Eclipse、JBuilder等都會(huì)裝有JUnit。

3 設(shè)計(jì)簡(jiǎn)單的Java類的單元測(cè)試用例來(lái)解析面向?qū)ο髥卧獪y(cè)試

3.1 選取待測(cè)試的Java類

為使學(xué)生更易理解,案例的選擇要先易后難。我們可以用HelloWorld為例說(shuō)明JUnit是如何進(jìn)行單元測(cè)試的,因?yàn)槊恳环N語(yǔ)言在其學(xué)習(xí)用書的第一個(gè)例子通常都是HelloWorld,它最簡(jiǎn)單了。以下是代碼:

// HelloWorld.java

packageHelloWorld ;

public class helloWorld {

public String sayHello( ) {// 返回測(cè)試字符串的方法

returnstr;

}

private String str;

}

3.2 設(shè)計(jì)測(cè)試用例,幫助學(xué)生掌握測(cè)試步驟

為了對(duì)HelloWorld類進(jìn)行測(cè)試,我編寫了以下測(cè)試用例,它本身也是一個(gè)Java類文件。代碼如下:

// HelloWorldTest.java;

package hello.Test ;

import helloWorld.*;

import junit.framework.*;// 引入junit.framework包

public class HelloWorldTest extends TestCase{

//繼承TestCase類

public HelloWorldTest ( String name ) {

super ( name );

}

public static Test suite ( ){

returnnewTestSuite ( HelloWorldTest.class );

}

public static void main ( String args[] ) { //主方法

junit.textui.TestRunner.run ( suite ( ) ) ;

篇9

一、填空(每空1分,共15分)

1、在漫長(zhǎng)的地質(zhì)歷史中,經(jīng)過(guò)自然界的作用,古代生物的(

)、(

)或(

)埋藏在地下變成了跟(

)一樣的東西,這些東西就是(

)。

2、英國(guó)生物學(xué)家達(dá)爾文,1859年出版了(《

》)一書,全面提出了(

)。他認(rèn)為,生物的繁衍是在(

)的過(guò)程中發(fā)生的,同一物種內(nèi)哪些個(gè)體(

),它就比其他個(gè)體更容易(

)下來(lái)。

3、寫出馬的進(jìn)化順序(

)、(

)、(

)、(

)、(

二、判斷題(在你認(rèn)為對(duì)的題后畫√,錯(cuò)的畫×)(5分)

1、化石的形成是它們自己死后變成的

2、達(dá)爾文的生物進(jìn)化學(xué)說(shuō)的核心就是自然選擇學(xué)說(shuō)(

3、古代的馬與現(xiàn)代的馬沒(méi)有什么差別

4、喙大而強(qiáng)壯的地雀更適宜吃外殼堅(jiān)硬的種子

5、為了吃到更高處的樹上的嫩葉,長(zhǎng)頸鹿的頸長(zhǎng)得特別長(zhǎng)(

三、觀察與分析(17分)

1、觀察下圖是什么化石?推想:這種化石是怎樣形成的?(5分)

2、現(xiàn)有青色青蛙和淡黃色青蛙,研究它們的生存環(huán)境。(12分)

(1)如果都生活在有青草的水邊,哪種易被蛇吃掉?哪種易生存下來(lái)?(4分)

(2)如果都生活在有沙灘的水邊,哪種易被蛇吃掉?哪種易生存下來(lái)?(4分)

(3)通過(guò)以上分析,你有什么發(fā)現(xiàn)?(4分)

四、根據(jù)你學(xué)過(guò)的知識(shí),回答下面的問(wèn)題。(13分)

1、你見(jiàn)過(guò)或知道哪些具體的生物化石,請(qǐng)至少寫出四種。(4分)

篇10

一、填一填,我能行! 1.小紅有三件上衣,三條褲子搭配著穿,可以有( )種不同的穿法。 2.用2、7、9這三個(gè)數(shù)字組成沒(méi)有重復(fù)的兩位數(shù),它們分別是( )、( )、( )、( )( )、( )。 3. 用0,1,2可組成( )個(gè)不同的三位數(shù),其中的數(shù)是( ),最小的數(shù)是( )。 4. 4個(gè)小朋友通電話,每?jī)扇酥g通一次電話,一共需通( )次電話。 5.我的早餐有( )種搭配。(飲料和點(diǎn)心每次只能各選一種。) 6. 上面4種文具任買2種,一共有( )種不同的買法。 7.第十五屆世界杯足球賽共有32支球隊(duì)分成8個(gè)小組比賽。 (1)每個(gè)小組有( )支球隊(duì)。 (2)小組內(nèi)每?jī)芍蜿?duì)進(jìn)行一場(chǎng)比賽,每組要進(jìn)行( )場(chǎng)比賽。二、快樂(lè)手拉手。(把正確答案的字母填在括號(hào)里) 1.小紅有2頂不同的帽子,3件不同的上衣,她一共有( )種搭配方法。 A.5 B.6 C.8 2.三個(gè)小朋友比賽跳繩,每2個(gè)小朋友比一次,一共要比( )次。 A.3 B.4 C. 5 3. 數(shù)一數(shù),圖中有( )條線段。 A.3 B.5 C.6三、看一看,想一想,連一連。 1.只買一把椅子和一張桌子。 2.飲料與點(diǎn)心搭配。 3. 學(xué)校組織羽毛球男女混合雙打比賽,五(一)班有2名女生和3名男生參賽,可以有多少種不同的組隊(duì)方案?請(qǐng)用線連一連。 四、我是小小神算手。 1.直接寫得數(shù) 300÷5= 15×60= 36÷(3×4)420×30= 700÷7= 180÷9÷5= 540÷9= 84÷6= (28+12)÷5=2.列式計(jì)算 (1)84除以4,再除以7,得多少?

(2)從15與40的積里減去500,差是多少?

(3)12乘15的積的4倍是多少?

五、走進(jìn)生活,解決問(wèn)題。 1. 從小強(qiáng)、小華、小貝和小寶這4名同學(xué)中選出2人代表學(xué)校參加乒乓球比賽,有幾種不同的組隊(duì)方式?請(qǐng)寫下來(lái)。 2.文靜快餐店的午餐豐富多樣,請(qǐng)你看看有幾種不同的分法? 3.從下面的人民幣中每次取2種,取出的錢共有幾種情況?請(qǐng)寫下來(lái)。 4.一共有幾種買法? 爸爸說(shuō):“今天只能買2本,你挑吧!”可能會(huì)買哪兩本?請(qǐng)一一寫出來(lái)。