精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

異味代碼到底有多糟糕?—衡量代碼異味的影響

開發 項目管理
前輩曾經教導我們,作為開發人員,我們最主要的職責就是不要寫爛代碼。除非你是單兵作戰并且只是寫幾行很快就會棄用的Perl腳本而已,否則最重要 的一點,就是你寫的代碼必須易于閱讀和理解。在軟件產品的整個生命周期中,可維護的代碼通常會免除你和你的同事們呆坐在電腦前痛苦絕望的很多時間。

用科學實驗來衡量哪些代碼異味最難維護。如何處理有異味的代碼?

前輩曾經教導我們,作為開發人員,我們最主要的職責就是不要寫爛代碼。除非你是單兵作戰并且只是寫幾行很快就會棄用的Perl腳本而已,否則最重要 的一點,就是你寫的代碼必須易于閱讀和理解。在軟件產品的整個生命周期中,可維護的代碼通常會免除你和你的同事們呆坐在電腦前痛苦絕望的很多時間。

然而,導致代碼可讀性差的原因卻不總是那么清晰,這就是為什么像代碼編寫標準、準則、代碼模式和編程語言箴言之類的東西存在的原因之一。一條眾所周知的準則是Martin Fowler【1】寫的《重構》這本書,書里描述了一系列的代碼異味以及去掉這些異味的重構策略。盡管擁有這個無可估價的資源,我們依然面臨挑戰——除了要學習很多重構策略,還需要決定哪些的優先級比較高。顯然,它們不可能同樣重要!我們如何得知現在做的代碼重構工作會有長期正面效益呢?

問題在于Martin Fowler的重構書沒有提及哪些代碼異味是關鍵的,哪些不是。Fowler他自己也提到,沒有哪個標準或指標能夠比得上人的直覺。我們作為開發人員來說 只能依靠直覺和經驗去決定是否需要重構。這可能是一場噩夢。面對一個有數千個代碼異味的系統,你要從何處入手?除此之外,任何對代碼的改動都可能帶來意向 不到的副作用。就算有高質量的自動化測試,修改代碼常常蘊含高風險而且代價昂貴。如果知道哪些代碼異味是***破壞性,先把它們處理掉就好了。另外,我們希 望向管理層展示,我們并不是浪費時間在為了寫漂亮代碼而寫漂亮代碼上,而是我們當前的努力能夠在未來為項目帶來長期效益。

 【補充】:在軟件開發領域,代碼中的任何可能導致深層次問題的癥狀都可以叫做代碼異味。

通常,在對代碼做簡短的反饋迭代時,代碼異味會暴露出一些深層次的問題,這里的反饋迭代,是指以一種小范圍的、可控的方式重構代碼。基于這些暴露的問題,人們會進一步的檢查設計和代碼中是否還存在別的代碼異味,然后再做進一步的重構。從負責重構的開發者的角度來看,代碼異味可以啟發何時重構,如何重構。因此,可以說代碼異味推動著重構的進行。(摘自維基百科)

收集關于代碼異味的事實

2009年,挪威Simula研究所需要把一個內部系統改造成一個新的內容管理系統。這個項目被外包給6個Java開發人員。這個項目被認為是深入研究代碼異味對可維護性造成影響的機會。

在這個項目持續的三個月中,他們使用了一些工具來衡量代碼異味,每天跟那些開發人員面談,并且每個開發人員的Eclipse IDE上都安裝了一個日志記錄工具。這個日志記錄工具不但記錄修改每個文件花了多長時間,而且記錄了花在搜索,瀏覽以及翻閱代碼所花費的時間。 在這個項目過程中,他們使用一個問題追蹤工具登記下那些開發人員所面臨的問題,然后反向追蹤到那些引起問題的源代碼文件。除此之外,所有的開發人員都要接 受面談。這個過程中收集到的數據遠遠多于常規的僅僅分析代碼倉庫的方法。以下是所得到的觀察結果:

觀察結果1:***類其實很糟糕!

來源:https://simula.no/publications/Simula.simula.1460

“人人都知道”***類是不好的,可是到底不好到什么程度?如下圖所示:

Y軸代表在項目維護期間花費在閱讀修改一個文件上的時間;X軸代表文件的大小。

請注意,閱讀和修改***的文件(1844行代碼)要花的時間是大部分文件(少于600行代碼)的10倍以上。這個文件就是一個***類。另外請注 意,20000秒差不多是5個小時的工作(對于一個文件來說太長了!)。我們還可以看到編輯另一個大文件(大約1400行代碼)沒有花掉很多時間。這個大 文件包含了很多的訪問器和修改器,沒有包含任何邏輯(相對于全能類)。這解釋了為什么開發人員沒有在上面花太多時間。包含復雜邏輯的大文件(即全能類)會 顯著影響可維護性。

建議:你應該把包含復雜邏輯的大文件分割成小文件。一個推薦的閾值是將文件大小保持在1000行代碼內。

 

觀察結果2: 數據團塊沒有你想得那么糟糕……

來源:https://simula.no/publications/Simula.simula.1456

“數據團塊(Data Clump)”是指一些語義上沒有相關性的方法和變量集合。一般情況下,包含數據團塊的文件包含了不同類型的變量,后面跟著一系列的訪問器和修改器。比 如,下圖中Person這個類包含了不直接跟一個人相關的信息,因此可以被分割成兩個類。Simula的研究人員創建了一個統計模型來解釋代碼異味的出現 是否增加了開發人員在維護過程中遭遇問題的可能性(他們會記錄維護過程中面臨的所有問題以及那些引起問題的文件)。他們發現,事實上那些包含數據團塊的文 件引起維護問題的可能性更低!

建議:不要去管那些數據團塊,除非它們包含了其他代碼異味。

 

觀察結果3: 堅持接口分離原則

Robert C. Martin(Bob大叔)介紹了接口分離原則(ISP)作為 SOLID 原則【2】的一部分。

接口分離原則指出,任何軟件庫的調用者都不應該被強迫依賴于它沒有調用的方法。接口分離原則把非常龐大的接口分割成更小更加明確的接口,從而使得調用者只需要知道他們所關心的方法。

軟件工程的研究者們【3】提出了如何使用代碼量化標準去鑒別一些代碼異味。有些商業工具實現了這些量化標準,但是你也可以提出自己的探測策略并且在 工具中實現它們,比如Java中的SonarQube或者.Net中的NDepend。下圖展示了Simula使用的探測策略,這個策略是基于研究員 Radu Marinescu【4】的工作提出的。

這個類的類“接口寬度”(即公開的方法和屬性個數)為10,類的“調用者”數目為8,“平均接口用度”(即調用者所使用的方法或屬性個數除以調用者數目)為0.375。根據這個探測策略,這個類可能違反了接口分離原則.

關于數據團塊的分析同樣涵蓋了違反接口分離原則的文件,結果發現當一個文件違反了接口分離原則時,它存在問題的概率的概率會增加。

如下圖所示,違反接口分離原則的文件比沒有違反該原則的文件出問題的概率要高(大約30%),這也印證了上述觀點。


建議:分割那些過于寬泛,用途繁多的接口可以減少維護時出現問題的風險。

 #p#

觀察結果4:代碼異味往往成群結隊出現

來源:https://simula.no/publications/Simula.simula.1508

在同一個實驗中,某些代碼異味表現出在同一個文件中一起出現的趨勢。如下圖所示,識別出來的代碼異味往往出現在同一個文件里。“異味囤積者”本質上 就是那些想要囤積所有系統功能的文件。“混亂因素”是那些在文件中引起困惑的代碼異味。另外兩組,“寬泛接口”和“數據容器”的含義則是不言自明的。

建議:如果你在一個文件中發現了某個類型的代碼異味,你大概想要檢查它是否包含其他的“異味小伙伴”。同個文件中的代碼異味組合會增加風險,減少可維護性!

長文略讀

就像Fowler所說,我們要追隨自己的直覺,經驗和判斷來決定哪些需要重構,但是下列根據科學研究得出的準則可以幫助你來區分優先級:

  1. 分割那些包含過多邏輯的大文件(多于1000行代碼)
  2.  關鍵不在于重構數據團塊
  3. 把那些寬泛而用途繁多的接口按照用途來分割成不同接口
  4. 包含某些代碼異味的文件往往同時會有更多的“不受歡迎的小伙伴”,注意識別它們!

快樂地重構吧!

引用:

【1】《重構:改善既有代碼的設計》

【2】《敏捷軟件開發(原則模式與實踐) 》

【3】http://sewiki.iai.uni-bonn.de/research/cultivate/tutorial_exploring_smells_and_metrics

【4】http://loose.upt.ro./download/thesis/thesis.zip

補充:常見的代碼異味

  • 重復代碼: 相同或者相似的代碼存在于一個以上的地方。
  • 長方法: 一個非常長的方法、函數或者過程。
  • 巨類: 一個非常龐大的類。
  • 太多的參數: 函數或者過程的冗長的參數列表使得代碼可讀性和質量非常差。
  • 特性依戀: 一個類過度的使用另一個類的方法。
  • 親密關系: 一個類依賴另一個類的實現細節。
  • 拒絕繼承: 子類以一種‘拒絕’的態度,覆蓋基類中的方法,換句話說,子類不想繼承父類中的方法,參考Liskov substitution principle。
  • 冗余類 / 寄生蟲: 一個功能太少的類。
  • 人為的復雜: 在簡單設計已經滿足需求的時候,強迫使用極度復雜的設計模式。
  • 超長標識符: 尤其,在軟件工程中,應該毫無保留的使用命名規則來消除歧義。
  • 超短標識符: 除非很明顯,一個變量名應該反映它的功用。
  • 過度使用字面值: 為提高可讀性和避免編碼錯誤,應該使用命名常量。此外,字面值可以且應該在可能的情況下,獨立存放于資源文件或者腳本中,在軟件部署到不同區域時,可以很方便的本地化。(摘自維基百科)

原文鏈接:http://fagblogg.mesan.no/how-bad-is-smelly-code/

譯文鏈接:http://blog.jobbole.com/48521/

責任編輯:陳四芳 來源: 博樂在線
相關推薦

2011-05-18 08:55:43

代碼程序員

2020-08-01 16:40:09

代碼語言Python

2016-09-22 16:47:55

iOSAndroidWindows Pho

2019-04-23 11:27:07

2022-04-08 07:52:00

架構多機房多活

2019-10-29 15:00:26

12306架構高并發

2020-07-20 07:55:53

微信支付架構

2024-10-22 15:04:15

2017-02-15 15:04:49

2015-02-13 13:31:29

2018-04-16 11:34:59

2020-11-20 09:23:01

高可用異地淘寶

2009-06-15 18:20:27

2022-03-28 18:08:50

通信網絡綠色通信節能減排

2022-09-23 08:47:01

DMA網卡CPU

2013-04-28 09:29:38

云計算

2019-08-01 15:06:49

離職成本員工

2022-03-28 07:15:56

Unsafe框架工具

2024-06-12 09:44:09

2020-08-05 07:00:00

SSD硬盤存儲
點贊
收藏

51CTO技術棧公眾號

日本在线一区| 欧美黄色免费网站| xx欧美撒尿嘘撒尿xx| 免费黄网站在线观看| 首页国产欧美久久| 色999日韩欧美国产| 免费人成视频在线播放| 成人国产电影在线观看| 久久久99精品免费观看不卡| 欧美性一区二区三区| 久久久久久久毛片| 日本免费一区二区三区视频| 一区二区三区欧美在线观看| 国产精品裸体一区二区三区| 久久久久久久久影院| 台湾佬综合网| 日韩视频免费观看高清完整版 | 2022国产精品| 免费观看一区二区三区毛片| 精品国产一区一区二区三亚瑟| 欧美日韩精品欧美日韩精品一综合| 2021国产视频| 成人p站proumb入口| 国产成人午夜精品5599| 国产成人91久久精品| 中文字幕亚洲欧美日韩| 国产成人精品一区二区免费看京| 欧美一卡在线观看| 黄色手机在线视频| 毛片免费看不卡网站| 一区二区三区日韩在线观看| 久久综合一区| 天天综合天天色| 国产成人免费视频网站| 国产精品爽黄69| 亚洲欧美偷拍视频| aⅴ色国产欧美| 欧美激情第三页| 欧美三级免费看| 亚洲国产精品久久久天堂| 亚洲欧美中文字幕在线一区| 中文字幕第66页| 欧美黄色网络| 欧美无砖专区一中文字| 成人免费毛片网| 人狥杂交一区欧美二区| 一区二区成人在线观看| 自拍偷拍99| 日本三级视频在线观看| 欧美—级在线免费片| 欧美精品尤物在线| 免费在线黄色网址| 91农村精品一区二区在线| 国产精品xxxx| 日本毛片在线观看| 99亚偷拍自图区亚洲| av一区二区三区免费| 一区二区三区免费观看视频| 羞羞答答国产精品www一本| 午夜精品久久久久久久男人的天堂 | 99欧美精品| 欧美亚洲动漫精品| xxx国产在线观看| 亚洲国产伊人| 日韩免费在线观看| 欧美夫妇交换xxx| 香蕉久久精品日日躁夜夜躁| 欧美白人最猛性xxxxx69交| 超碰91在线播放| aaa国产精品视频| 日韩激情视频在线| 日本一区二区视频在线播放| 国产精品一国产精品| 揄拍成人国产精品视频| 自拍偷拍第9页| 亚洲综合色站| 91高清视频在线免费观看| 日韩美女视频网站| 日日摸夜夜添夜夜添国产精品 | 欧美亚洲福利| 日韩欧美一级特黄在线播放| 中文字幕第六页| 青青草久久爱| 最好看的2019的中文字幕视频| 午夜国产福利视频| 国产精品v一区二区三区| 97视频免费在线观看| 国产又黄又猛又粗又爽| 日韩一区精品视频| 91在线播放国产| 天堂中文在线资源| 国产精品色在线| 国产片侵犯亲女视频播放| hd国产人妖ts另类视频| 色婷婷一区二区| 三大队在线观看| 婷婷综合福利| 欧美www在线| 无码人妻丰满熟妇精品区| 狠狠色丁香久久婷婷综| 激情五月综合色婷婷一区二区| 黄色电影免费在线看| 亚洲欧美一区二区三区国产精品| 精品人妻少妇一区二区| 伊人久久高清| 亚洲成色777777女色窝| 青青草自拍偷拍| 日韩香蕉视频| 亚洲一区中文字幕在线观看| 欧美一级片免费| 国产精品美女久久久久高潮| 亚洲小视频在线播放| 亚洲最大成人| 精品国产乱码久久久久久久 | 亚洲综合av在线播放| 亚洲成人黄色| 日韩综合中文字幕| 久久久久久久久久免费视频| 日本中文在线一区| 国模一区二区三区私拍视频| 高清在线观看av| 精品国产乱码久久久久久虫虫漫画| 亚洲黄色小视频在线观看| 国偷自产av一区二区三区| 日韩在线视频一区| 国产情侣小视频| 99久久免费国产| 国产夫妻自拍一区| 欧美91在线|欧美| 伊人亚洲福利一区二区三区| 青草影院在线观看| 精品一区二区三区久久| 欧美下载看逼逼| 在线观看v片| 日韩av在线免费播放| 91成人福利视频| 国产一区二区三区四区五区入口| 日产中文字幕在线精品一区| 欧美6一10sex性hd| 欧美一区二区二区| 精品国产精品国产精品| 蜜桃精品视频在线观看| 日本一区二区免费看| 国产直播在线| 日韩精品在线视频| 国产一级片毛片| 91在线视频在线| 777米奇影视第四色| 久久97精品| 欧美精品福利视频| 日韩在线观看视频一区| 亚洲在线观看免费视频| 亚洲成a人片在线www| 中文字幕乱码亚洲无线精品一区| 国产精品视频久久久| 搞黄视频在线观看| 欧美丰满一区二区免费视频| 国产真人做爰视频免费| 日韩精品电影一区亚洲| 色女人综合av| 日韩福利在线观看| 久久亚洲一区二区三区四区五区高| 中文字幕精品无码亚| 国产精品美女www爽爽爽| 爱情岛论坛亚洲首页入口章节| 国内精品久久久久久99蜜桃| 欧美在线观看日本一区| 国产在线播放av| 在线播放欧美女士性生活| 中文字幕五月天| 99免费精品视频| 亚洲成人av免费看| 久久中文字幕av| wwwxx欧美| gay欧美网站| 精品国产一区二区三区久久| 中文无码av一区二区三区| 中文字幕 久热精品 视频在线| 一道本在线免费视频| 亚洲国产精品久久久久蝴蝶传媒| 99中文视频在线| 成人欧美大片| 久久综合五月天| 亚洲色图欧美视频| 欧美日韩一级片在线观看| 男女做暖暖视频| 26uuu另类欧美亚洲曰本| 污片在线免费看| 欧美人与禽猛交乱配视频| 久久精品国产第一区二区三区最新章节| av一区在线| 久久99久久久久久久噜噜 | 日韩最新在线视频| 日本毛片在线观看| 欧美日韩国产精选| 日韩欧美a级片| 国产精品国产三级国产普通话蜜臀 | 石原莉奈在线亚洲二区| 亚洲日本理论电影| 另类尿喷潮videofree| 国产精品入口免费视| ririsao久久精品一区| 亚洲欧美中文在线视频| www.国产黄色| 欧美丝袜第三区| 麻豆久久久久久久久久| 自拍偷在线精品自拍偷无码专区| 亚洲观看黄色网| 国产一区二区三区av电影| 日本在线xxx| 午夜精品久久| 一区二区三区四区五区精品| 午夜日韩影院| 国产日韩专区在线| 水蜜桃在线视频| 欧美激情一区二区三区久久久| 国产三级视频在线播放线观看| 日韩一级完整毛片| 一卡二卡在线观看| 色屁屁一区二区| www.国产高清| 精品福利在线视频| 国产亚洲自拍av| 亚洲欧美一区二区不卡| 日本成人免费在线观看 | 日韩天堂在线观看| 国产一区二区在线视频观看| 亚欧色一区w666天堂| 九九精品视频免费| 国产精品成人午夜| 无码人妻丰满熟妇啪啪欧美| 国产91精品一区二区| 在线观看免费av网址| 日本欧美一区二区三区| av网站在线观看不卡| 亚洲经典在线| 六月婷婷在线视频| 激情久久一区| 男人日女人视频网站| 欧美国产免费| 精品国产av无码一区二区三区| 99热精品久久| 欧美性受xxxx黑人猛交88| 99精品美女| 四虎影院一区二区| 91精品福利| mm131午夜| 午夜精品影院| 99在线免费视频观看| 欧美日韩福利| 久久久久久久久久久99| 亚洲区第一页| 成人免费毛片网| 全部av―极品视觉盛宴亚洲| 日本三级免费网站| 丝袜美腿亚洲色图| 亚洲国产精品三区| 国产一区二区三区免费观看| 成人性生生活性生交12| 日本女优在线视频一区二区| 精品视频无码一区二区三区| 亚洲欧美网站| 日韩一区二区三区不卡视频| 日韩中文欧美在线| 国产无遮挡猛进猛出免费软件| 精品制服美女丁香| 性活交片大全免费看| caoporm超碰国产精品| 国产xxxxxxxxx| 国产喂奶挤奶一区二区三区| 国产美女免费无遮挡| 中文在线免费一区三区高中清不卡| 国产在线免费av| 亚洲制服丝袜av| japanese国产在线观看| 欧美日韩高清一区二区三区| 最近中文字幕在线免费观看| 欧美亚一区二区| 精品人妻无码一区二区| 亚洲黄色在线看| 日本韩国在线视频爽| 久久成人一区二区| 99色在线观看| 国产精品美女网站| 97人人澡人人爽91综合色| 麻豆av福利av久久av| 成人亚洲一区二区| av片在线免费| 日韩成人精品视频| 丰满少妇xbxb毛片日本| 久久综合色综合88| 久久久久久久久久网站| 欧美日韩国产精品一区| 91theporn国产在线观看| 欧美成人vps| 91精彩在线视频| 性亚洲最疯狂xxxx高清| 国产原创一区| 精品在线不卡| 一本一道久久a久久精品蜜桃| 日韩精品―中文字幕| 久久国产精品99精品国产| 久久久高清视频| 中文字幕视频一区| 狠狠狠狠狠狠狠| 欧美精品一区二区三区一线天视频 | 黄色激情在线播放| 91精品综合久久久久久五月天| 欧美美女在线直播| 超碰超碰超碰超碰超碰| 日韩有码一区二区三区| 97精品人妻一区二区三区蜜桃| 国产午夜精品久久久久久久 | 国产欧美婷婷中文| 欧美变态挠脚心| 欧美日韩激情四射| 老汉av免费一区二区三区| 国产亚洲无码精品| 亚洲超丰满肉感bbw| 国产精品欧美久久久久天天影视| 日韩精品视频在线观看网址| 日本三级视频在线观看| 国产不卡在线观看| 亚洲影院天堂中文av色| 国内自拍中文字幕| 精品在线一区二区| av在线免费播放网址| 色94色欧美sute亚洲线路一久| 日本高清视频免费看| 美女黄色丝袜一区| 精品视频一区二区三区在线观看| 色一情一乱一伦一区二区三欧美| 一本久久综合| 网站免费在线观看| 婷婷丁香久久五月婷婷| 亚洲AV无码国产精品午夜字幕| www.午夜精品| 日日夜夜综合| 成年人黄色在线观看| 蜜臀国产一区二区三区在线播放| 91精品人妻一区二区三区蜜桃欧美 | 日韩在线不卡av| 欧美日韩视频一区二区| 国产九九在线| 国产精品久在线观看| 九一精品国产| 一区二区三区视频在线观看免费| 久久久精品中文字幕麻豆发布| 久久久久久少妇| 亚洲人成在线播放| 香蕉成人影院| 在线观看精品视频| 国产精品一区三区| 国产在线拍揄自揄拍无码视频| 日韩欧美一级片| 大黄网站在线观看| 蜜桃传媒视频麻豆一区| 久久久久久婷| 特级西西人体高清大胆| 欧美视频一区二区三区| 亚洲精品传媒| 91嫩草免费看| 99热这里只有精品8| 美国黄色a级片| 欧美在线不卡视频| 好吊日视频在线观看| av日韩中文字幕| 欧美亚洲一区| 天天鲁一鲁摸一摸爽一爽| 日韩欧美国产麻豆| 日本在线影院| 亚洲日本理论电影| 成人国产在线观看| 伊人久久中文字幕| 欧美第一页在线| 国产精品一区二区三区av麻 | 四虎4hu永久免费入口| 成人福利视频网站| 亚洲色成人www永久网站| 中文字幕在线观看亚洲| 日韩视频一区二区三区四区| 2021国产视频| 久久久久久久精| 国产成人精品毛片| 日本成熟性欧美| 欧美一区二区三区久久精品茉莉花| 中文字幕天堂av| 欧美亚洲国产一区在线观看网站 | 成人精品在线播放| 国产成人一区二区| 欧美日韩一区自拍| 在线观看亚洲大片短视频| 欧美一区二区国产| 亚州一区二区三区| 亚洲色成人www永久在线观看| www久久精品| 国产激情久久久久久熟女老人av| 992tv在线成人免费观看| 97精品一区| 日本黄色网址大全|