影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品

電子科大論壇-非清水河畔

 找回密碼
 注冊(cè)(開(kāi)放注冊(cè))
查看: 9146|回復(fù): 0
打印 上一主題 下一主題

[應(yīng)用技術(shù)] 測(cè)試概念進(jìn)行代碼設(shè)計(jì)時(shí)的七條基本原則

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2007-11-26 10:04:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
當(dāng)設(shè)計(jì)大型程序的時(shí)候,您必須時(shí)刻留心不同設(shè)計(jì)選項(xiàng)對(duì)諸如性能和可擴(kuò)展性這樣的特征的影響。隨著軟件產(chǎn)品的日漸復(fù)雜及其無(wú)所不在的部署,軟件的“可測(cè)試性”也成了更重要的考慮事項(xiàng)。
  徹底測(cè)試代碼的重要性是顯然的。花在編寫(xiě)測(cè)試和測(cè)試代碼上的時(shí)間和精力給您帶來(lái)的回報(bào)是維護(hù)成本的大幅降低。
  然而,除非您很小心,否則您花在測(cè)試代碼上的精力可能會(huì)首先達(dá)到花在編寫(xiě)代碼上的精力的幾倍!我曾看到程序員們齊心協(xié)力地對(duì)他們的全部代碼進(jìn)行單元測(cè)試,結(jié)果花在上面的時(shí)間使大多數(shù)人都以沮喪而告終。
  幸運(yùn)的是,沒(méi)有必要這樣。在您設(shè)計(jì)軟件的時(shí)候應(yīng)用一些基本原則,編寫(xiě)易于測(cè)試、甚至使測(cè)試成為樂(lè)趣的代碼是可能的。
  跟其它編碼原則一樣,這些原則也不是不容置疑或不可改變的教條。有時(shí)候打破這些規(guī)則也是必要的。因此,理解每條原則背后的動(dòng)機(jī)和判斷何時(shí)這些動(dòng)機(jī)不適用(或應(yīng)讓位給更關(guān)心的問(wèn)題)的能力是很重要的。
  原則 1. 到 GUI 視圖的外面去
  盡可能把代碼移到 GUI 視圖的外面。然后各種 GUI 動(dòng)作就能成了模型上的簡(jiǎn)單方法調(diào)用。為什么您需要這樣做呢?
  對(duì) GUI 測(cè)試者來(lái)說(shuō),通過(guò)方法調(diào)用測(cè)試功能比間接地測(cè)試功能容易的多。
  另一個(gè)好處是它使修改程序功能而不影響視圖變的更容易。
  當(dāng)然,視圖中也可能存在錯(cuò)誤。在理想情況下,對(duì)程序的測(cè)試將同時(shí)檢查模型和視圖。(想更多了解測(cè)試視圖,請(qǐng)參閱我關(guān)于 Liar View 錯(cuò)誤模式的文章或 Jeffries 等人的 Extreme Programming Installed。這兩個(gè)鏈接都在參考資料部分。)
  原則 2. 使用類(lèi)型進(jìn)行錯(cuò)誤檢查
  類(lèi)型是您的朋友 — 盡可能多地用類(lèi)型系統(tǒng)自動(dòng)檢查錯(cuò)誤。
  類(lèi)型能在程序運(yùn)行之前自動(dòng)捕捉程序中的錯(cuò)誤。沒(méi)有靜態(tài)類(lèi)型檢查的話,類(lèi)型錯(cuò)誤將作為破壞者逗留在您的程序中,直到恰當(dāng)?shù)膱?zhí)行路徑碰巧把它揭露出來(lái)為止。
  最大限度地發(fā)揮使用類(lèi)型的長(zhǎng)處是棘手的。通常,一組數(shù)據(jù)結(jié)構(gòu)可以在一個(gè)抽象級(jí)別上一起使用,或者被分出,成為一個(gè)單一的、更高抽象級(jí)別的一個(gè)新的相關(guān)數(shù)據(jù)類(lèi)型。
  事實(shí)上,編程語(yǔ)言自身的歷史可以看成是可以編程的抽象級(jí)別的逐漸提高。匯編語(yǔ)言提供了比特到整數(shù)和浮點(diǎn)數(shù)的抽象。接下來(lái)是記錄和函數(shù)抽象,然后又是諸如對(duì)象、類(lèi)、線程以及異常這樣的抽象。
  在每一抽象級(jí)別上,達(dá)到與更高級(jí)別抽象一致的功能是可能的,但那實(shí)質(zhì)上僅僅是耗費(fèi)更多精力,冒更多的錯(cuò)誤風(fēng)險(xiǎn)。
  在面向?qū)ο笳Z(yǔ)言(其它現(xiàn)代語(yǔ)言也一樣)中,一個(gè)程序員在設(shè)計(jì)抽象上有很大的靈活性。在哪個(gè)抽象級(jí)別上設(shè)計(jì)程序就成了基于折衷的決定,比如由抽象級(jí)別提供的更多的健壯性和由于不能在更低抽象級(jí)別上工作而帶來(lái)的表達(dá)性(有時(shí)是性能)的損失。
  通常,高級(jí)別抽象帶來(lái)的健壯性和簡(jiǎn)單性的價(jià)值很少被其它考慮事項(xiàng)超過(guò)。(要了解對(duì)這個(gè)問(wèn)題的更多討論,請(qǐng)參閱我關(guān)于 Impostor Type 錯(cuò)誤模式的文章,在參考資料部分有它的鏈接。)
  原則 3. 使用調(diào)節(jié)器避免“故障線路”(fault line)
  我用“故障線路”來(lái)指獨(dú)立組件之間的接口,獨(dú)立組件之間和組件與其相應(yīng)子組件之間相比,很少有交互。這種故障線路的一個(gè)典型示例是 GUI 視圖和它的模型之間的接口。其它示例包括在編譯器中處理的不同階段之間的接口或操作系統(tǒng)的內(nèi)核和用戶界面之間的接口。
  找出程序的故障線路,然后用具有轉(zhuǎn)發(fā)功能的調(diào)節(jié)器快速訪問(wèn)聚合組件。
  沿著故障線路隔離測(cè)試每個(gè)組件通常更容易。但如果每個(gè)組件暴露的對(duì)象有很多,或者組件中您想測(cè)試的一些對(duì)象只有通過(guò)多個(gè)嵌套引用才能訪問(wèn),那么測(cè)試就會(huì)變的很乏味。
  不用隔離測(cè)試,而是擁有您在它上面調(diào)用您想測(cè)試的各種方法的單個(gè)調(diào)節(jié)器對(duì)象通常是有幫助的。這個(gè)對(duì)象然后能把這些方法調(diào)用轉(zhuǎn)發(fā)到適當(dāng)?shù)牡胤健?/font>
  沿著相同線路,設(shè)計(jì)和自己的測(cè)試代碼串聯(lián)在一起的程序組件接口是有益的。這將使您把注意力集中在使這些接口盡可能簡(jiǎn)單上。
  原則 4. 方法:小型簽名和缺省參數(shù)
  使用小型方法說(shuō)明和重載帶缺省方法參數(shù)的方法將使您在測(cè)試中調(diào)用這些方法變的愉快的多。否則,在測(cè)試這些方法時(shí)您將不得不構(gòu)造額外參數(shù)。如果參數(shù)很大,那么將很快導(dǎo)致代碼膨脹。更糟的是,它會(huì)誘使您編寫(xiě)比在其它情況下更少的測(cè)試。
  原則 5. 訪問(wèn)器不應(yīng)修改內(nèi)存狀態(tài)
  請(qǐng)?jiān)谀臏y(cè)試中使用不修改內(nèi)存狀態(tài)的訪問(wèn)器來(lái)檢查對(duì)象狀態(tài)。
  在某些方面,測(cè)試和實(shí)驗(yàn)室試驗(yàn)相似。它們都想證明特定假設(shè)有效。如果特定檢查動(dòng)作改變了該領(lǐng)域的狀態(tài),那么要這樣做會(huì)變得困難的多。
  與量子力學(xué)領(lǐng)域不同,計(jì)算機(jī)進(jìn)程的狀態(tài)可以不修改就被檢查。使用這種原則對(duì)您有好處。
  原則 6. 用接口說(shuō)明外部程序組件
  用接口說(shuō)明外部程序組件使得我們可以容易地在測(cè)試案例中模擬這些組件。
  這條原則能節(jié)省大量時(shí)間,特別是當(dāng)外部組件的實(shí)現(xiàn)還未完成時(shí)。通常,大多數(shù)基本組件都不能準(zhǔn)時(shí)可用。如果這些組件不在適當(dāng)位置您就不能測(cè)試您自己的代碼的話,那么您就在朝災(zāi)難走去。您的客戶不會(huì)關(guān)心您只有兩個(gè)小時(shí)來(lái)集成遲到了兩周的組件。他們知道的全部就是整套產(chǎn)品被延期了和這是違約的。
  原則 7. 優(yōu)先編寫(xiě)測(cè)試代碼
  優(yōu)先編寫(xiě)測(cè)試代碼。這是標(biāo)準(zhǔn)的 XP 方法,但卻總有一種忽視它的誘惑。
  每次我屈服于這種誘惑時(shí),我都感到后悔。假設(shè)您正努力生產(chǎn)正確的代碼,那么您 好象能從推遲編寫(xiě)測(cè)試代碼中節(jié)省的時(shí)間其實(shí)只是一個(gè)幻想。
  注意:這不是說(shuō)您應(yīng)該一次性編寫(xiě)全部測(cè)試代碼后,再一次性全部實(shí)現(xiàn)。編寫(xiě)一些測(cè)試代碼,實(shí)現(xiàn)它們,再編寫(xiě)一些測(cè)試代碼,再實(shí)現(xiàn)它們等等是個(gè)更好的辦法。設(shè)計(jì)以這種方式得以進(jìn)展;在實(shí)現(xiàn)階段捕捉錯(cuò)誤并在下一組測(cè)試中改正它。以這種方式編寫(xiě)測(cè)試也更少會(huì)使人畏縮。
  代碼比您需要的還多?
  只需一點(diǎn)點(diǎn)努力,就可能容易地對(duì)任何程序進(jìn)行徹底的測(cè)試。當(dāng)然,不可避免存在這些原則不適用的情況;于是,看起來(lái)好像不可能對(duì)功能進(jìn)行測(cè)試。
  當(dāng)出現(xiàn)這些情況時(shí),我盡力退一步地看這個(gè)問(wèn)題,“我怎樣才可能測(cè)試這種代碼?”相反地,我問(wèn)自己,“我怎樣才能以可測(cè)試方式編寫(xiě)這些代碼呢?”這種想法上的改變的結(jié)果經(jīng)常是增加了大量 僅僅服務(wù)于簡(jiǎn)化測(cè)試的功能。
  什么?別擔(dān)心;出現(xiàn)這種情況完全正常。
  就象很多現(xiàn)有的設(shè)計(jì)模式,它們只是為了增加程序的可擴(kuò)展性就往程序中添加很多類(lèi)(例如 visitor、decorator 等等),開(kāi)發(fā)簡(jiǎn)化測(cè)試的新模式是可以接受的。實(shí)際上,面向?qū)ο笳Z(yǔ)言的很多特征都是為了簡(jiǎn)化擴(kuò)展而包含進(jìn)去的;為什么語(yǔ)言的未來(lái)版本(或全新的語(yǔ)言)不應(yīng)包含簡(jiǎn)化測(cè)試的特征。
  對(duì) Java 語(yǔ)言來(lái)說(shuō),這已經(jīng)開(kāi)始。人們計(jì)劃在未來(lái)版本中包含很多更強(qiáng)大的類(lèi)型系統(tǒng)、斷言(assertion)等等。就象面向?qū)ο蟮恼Z(yǔ)言已經(jīng)增加了我們重用和擴(kuò)展現(xiàn)有代碼的程度,將來(lái),面向測(cè)試的設(shè)計(jì)和特征將幫助我們?cè)鰪?qiáng)新老代碼的健壯性。
來(lái)原:www

本版積分規(guī)則

手機(jī)訪問(wèn)本頁(yè)請(qǐng)
掃描左邊二維碼
本網(wǎng)站聲明
本網(wǎng)站所有內(nèi)容為網(wǎng)友上傳,若存在版權(quán)問(wèn)題或是相關(guān)責(zé)任請(qǐng)聯(lián)系站長(zhǎng)!
站長(zhǎng)電話:0898-66661599    站長(zhǎng)聯(lián)系QQ:12726567   
站長(zhǎng)微信:hainanok
請(qǐng)掃描右邊二維碼
www.myujob.com

小黑屋|手機(jī)版|Archiver|電子科大論壇-非清水河畔 ( 瓊ICP備10001196號(hào)-2 )

GMT+8, 2025-11-6 20:22 , Processed in 0.125782 second(s), 14 queries .

Powered by 校園招聘信息

© 2001-2020 電子科大論壇-非清水河畔校園招聘

快速回復(fù) 返回頂部 返回列表