亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

測試概念進行代碼設計時的七條基本原則

2019-11-18 12:05:45
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久借妻| 日韩亚洲精品电影| 精品偷拍各种wc美女嘘嘘| 最近2019中文字幕mv免费看| 最新69国产成人精品视频免费| 中文字幕亚洲二区| 亚洲精品丝袜日韩| 欧美日韩福利视频| 亚洲欧美综合另类中字| 国产精品私拍pans大尺度在线| 91国产美女视频| 日韩毛片在线看| 国产一区av在线| 亚洲国产成人精品女人久久久| 狠狠躁夜夜躁人人爽超碰91| 欧美日韩免费在线| 欧美黑人国产人伦爽爽爽| 亚洲成人精品视频在线观看| 国产欧美一区二区三区久久| 国产欧亚日韩视频| 国产亚洲欧洲高清一区| 亚洲免费av网址| 日韩av影片在线观看| 日韩成人激情在线| 欧美在线亚洲在线| 高清一区二区三区四区五区| 亚洲天堂第二页| 国产精品老牛影院在线观看| 国产不卡av在线| 色综合五月天导航| 国产91ⅴ在线精品免费观看| 成人av电影天堂| 最近2019年中文视频免费在线观看| 91亚洲精品在线| 成人av.网址在线网站| 欧美大学生性色视频| 91精品国产乱码久久久久久蜜臀| 91久久精品日日躁夜夜躁国产| 亚洲性生活视频| 精品国产一区二区三区四区在线观看| 一区二区欧美久久| 国产成人综合精品| 另类少妇人与禽zozz0性伦| 亚洲综合最新在线| 日本韩国在线不卡| 亚洲欧洲美洲在线综合| 国产成人精品一区二区三区| 欧美性生活大片免费观看网址| 亚洲图片在区色| 日本精品免费观看| 欧美富婆性猛交| 日韩av一区在线观看| 日韩在线不卡视频| 欧美大片在线看| 爱福利视频一区| 性色av一区二区三区| 欧美性受xxxx白人性爽| 国产suv精品一区二区三区88区| 亚洲精品中文字幕女同| 久久九九亚洲综合| www.精品av.com| 日韩av在线网| 国产一区二区三区三区在线观看| 成人在线精品视频| 国产精品欧美日韩一区二区| 亚洲精品久久久久| 精品久久久一区二区| 亚洲综合最新在线| 久久99精品久久久久久青青91| 色与欲影视天天看综合网| 国产亚洲aⅴaaaaaa毛片| 久久亚洲精品网站| 久久久久国产一区二区三区| 欧美大肥婆大肥bbbbb| 成人黄色片在线| 日韩高清欧美高清| 日韩欧美中文字幕在线观看| 91社区国产高清| 国产精品va在线播放| 亚洲夜晚福利在线观看| 日韩av在线免费看| 国产精品网站入口| 亚洲精品www久久久久久广东| 国产精品第3页| 国产一区二区三区视频| 亚洲免费一级电影| 久久亚洲精品视频| 国产精品第100页| 国产成人高潮免费观看精品| 久久国产精品影片| 亚洲色图偷窥自拍| 中文字幕在线国产精品| 97超级碰在线看视频免费在线看| 欧美黄网免费在线观看| 国产精品电影网| 日韩成人av一区| 日韩av电影在线免费播放| 亚洲人成在线观| 91精品久久久久久综合乱菊| 亚洲国产精品人人爽夜夜爽| 日韩av中文字幕在线免费观看| 国产精品视频久久| 国产精品一区电影| 国产精品久久久久久久久久尿| 一区二区三区四区精品| 久久97久久97精品免视看| 成人黄色av播放免费| 国产福利视频一区二区| 亚洲人成欧美中文字幕| 懂色av影视一区二区三区| 日韩高清不卡av| 久久久久久久999精品视频| 亚洲一区二区三区777| 日韩中文字幕在线免费观看| 国产欧美一区二区三区久久| xxxxx成人.com| 国产精品电影久久久久电影网| 亚洲三级av在线| 97成人精品视频在线观看| 国产美女高潮久久白浆| 久久久国产视频| 国内精品久久久久影院 日本资源| 国产日产亚洲精品| 成人黄色生活片| 国产精品吹潮在线观看| 欧美日韩免费网站| 久久久噜噜噜久久| 92福利视频午夜1000合集在线观看| 热re99久久精品国产66热| 日韩中文字幕av| 国产成人在线一区二区| 久久精品一偷一偷国产| 亚洲精品不卡在线| 国产成人精品久久| 亚洲精品福利视频| 欧美黑人xxx| 亚洲一区二区三区成人在线视频精品| 国产精品美女无圣光视频| 欧美日本精品在线| 亚洲乱码av中文一区二区| 国产一区二区三区丝袜| 久久精品视频在线| 久久影视电视剧免费网站| 国产成人精品一区二区三区| 亚洲精品中文字幕av| 97在线精品国自产拍中文| 久久久久99精品久久久久| 色综合久综合久久综合久鬼88| 亚洲乱码一区av黑人高潮| 国产免费一区视频观看免费| 国产成人精品av| 成人美女av在线直播| 国产亚洲精品久久久久久777| 欧美网站在线观看| 激情懂色av一区av二区av| 丝袜亚洲欧美日韩综合| 精品国产网站地址| 欧美激情一级二级| 日韩禁在线播放| 日韩av在线免费看| 亚洲一区亚洲二区亚洲三区| 精品久久久久久久中文字幕| 亚洲欧美综合图区| 亚洲第一中文字幕在线观看|