qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          多個(gè)常見代碼設(shè)計(jì)缺陷

           0、前言
            在軟件設(shè)計(jì)開發(fā)中,代碼的設(shè)計(jì)都體現(xiàn)在:子系統(tǒng)與子系統(tǒng)、模塊與模塊、函數(shù)與函數(shù)之間的關(guān)系,設(shè)計(jì)越糟糕的軟件,維護(hù)成本越高,質(zhì)量也往往難以達(dá)標(biāo)和稱贊。
            好的設(shè)計(jì)必定是:層次關(guān)系簡潔、清晰、易維護(hù)和擴(kuò)展的。
            不會(huì)研究太高深的設(shè)計(jì),只總結(jié)出一些常見的代碼設(shè)計(jì)缺陷,這些設(shè)計(jì)缺陷如能很好的解決和避免,相信代碼能力(編寫、設(shè)計(jì)、評(píng)審、重構(gòu))能提高一個(gè)檔次。
            主要介紹下面15個(gè)常見代碼設(shè)計(jì)缺陷:
            1、復(fù)雜函數(shù)(Blob Operation)
            缺陷特征:指的是代碼行多,分支嵌套深,變量多,參數(shù)多,注釋多,復(fù)雜度高等特征的函數(shù)。
            缺陷影響:函數(shù)不易理解和維護(hù),代碼重復(fù)、冗余。
            解決方法:新開發(fā)代碼時(shí),函數(shù)都是越寫越復(fù)雜的,應(yīng)該要有意識(shí)地、積極地去分解提煉成小函數(shù)或獨(dú)立功能的函數(shù),甚至當(dāng)感覺需要以注釋來說明點(diǎn)什么的時(shí)候,這時(shí)其實(shí)就應(yīng)該獨(dú)立成一個(gè)函數(shù)。函數(shù)建議值:代碼行24,if語嵌套深度6,圈復(fù)雜度10,功能應(yīng)該單一。
            2、數(shù)據(jù)泥團(tuán)(Data Clumps)
            缺陷特征:函數(shù)的參數(shù)多且參數(shù)列表相似,反復(fù)調(diào)用相同的參數(shù)列表。
            缺陷影響:大量重復(fù),影響編譯的效率;參數(shù)多,很難理解和調(diào)用。
            解決方法:參數(shù)列表應(yīng)該封裝成結(jié)構(gòu)。建議值:函數(shù)參數(shù)平均為2,避免5個(gè)以上。
            偽碼示例:GetDate(int year,int month,int day,int time) -> GetDate(struct DateRange)。
            3、不必要的耦合(Unnecessary Coupling)
            缺陷特征:包含某個(gè)頭文件,但是卻沒有使用頭文件中任何內(nèi)容。
            缺陷影響:編譯鏈接速度慢,耦合度高,頭文件錯(cuò)誤包含,如包含某個(gè)頭文件卻沒有使用里面的內(nèi)容,某個(gè)頭文件卻依賴某個(gè)dll,則會(huì)引起不必要的dll依賴和錯(cuò)誤。
            解決方法:頭文件不能亂包含,100%確認(rèn)每個(gè)包含的頭文件使用情況,刪除不必要包含的頭文件。
            4、過度耦合(Intensiue Coupling)
            缺陷特征:一個(gè)函數(shù)調(diào)用大量其它模塊的函數(shù),卻調(diào)用很少本模塊的函數(shù)。
            缺陷影響:一個(gè)函數(shù)與多個(gè)函數(shù)(這些函數(shù)屬于少數(shù)一兩個(gè)類)聯(lián)系過于緊密;一個(gè)類提供了很多函數(shù)給外部某個(gè)函數(shù)調(diào)用;耦合度高,類不夠抽象。
            解決方法:識(shí)別內(nèi)、外部模塊函數(shù),外部模塊要足夠抽象調(diào)用。
            5、循環(huán)依賴(Cyclic Dependencies)
            缺陷特征:多個(gè)子系統(tǒng)處于一個(gè)環(huán)狀互相依賴關(guān)系里面;函數(shù)的調(diào)用關(guān)系混亂、循環(huán);文件直接或間接交叉引用。
            缺陷影響:不易理解和維護(hù),編譯慢,關(guān)系混亂,重用困難。
            解決方法:多文件或系統(tǒng)間要?jiǎng)澐智宄Y(jié)構(gòu)、層次關(guān)系,應(yīng)做到無環(huán)依賴。
            偽碼示例:循環(huán)包含頭文件,file A包含file B,而file B又包含了file A。
            6、依戀情節(jié)(Feature Envy)
            缺陷特征:函數(shù)很少訪問自己模塊數(shù)據(jù),總是訪問外部模塊數(shù)據(jù);訪問自己模塊少,訪問其它模塊多;數(shù)據(jù)和操作不在同一模塊;對(duì)其它類的數(shù)據(jù)比較感興趣。
            缺陷影響:耦合度高。
            解決方法:同一模塊的數(shù)據(jù)和操作應(yīng)該放在一起。
            7、重復(fù)代碼(Repeat code)
            缺陷特征:不同模塊或文件間有類似或重復(fù)功能的類;不同類間有類似或重復(fù)功能的函數(shù);同一父類的子類間存在相似或重復(fù)功能的代碼。
            缺陷影響:代碼膨脹混亂,不易維護(hù),本來維護(hù)一處代碼由于重復(fù)代碼要維護(hù)多處。
            解決方法:提煉重復(fù)代碼。如工具函數(shù)封裝成工具類,通用功能封裝成公共庫。
            8、不穩(wěn)定依賴(Unstable Dependencies)
            缺陷特征:一個(gè)子系統(tǒng)或模塊依賴于另一個(gè)比它更不穩(wěn)定的子系統(tǒng)或模塊,如上層模塊依賴于不穩(wěn)定的底層模塊,上層模塊肯定會(huì)問題不斷。
            缺陷影響:不獨(dú)立,不穩(wěn)定,牽一發(fā)而動(dòng)全身。
            解決方法:當(dāng)有依賴關(guān)系時(shí),一定要先保證被依賴子系統(tǒng)或模塊的穩(wěn)定性。至少應(yīng)保證不穩(wěn)定的子系統(tǒng)要依賴穩(wěn)定的子系統(tǒng)。
            9、未利用的接口(Underutiliaed Interface)
            缺陷特征:設(shè)計(jì)并實(shí)現(xiàn)了很多接口,大部分未使用或只在內(nèi)部使用;定義了很多全局變量,大部分其它模塊未使用。
            缺陷影響:冗余,設(shè)計(jì)過度,暴露可視化。
            解決方法:按需設(shè)計(jì)接口,不需要對(duì)外公開的變量和函數(shù)應(yīng)該私有化。
           10、紊亂類(Schizophrenic Class)
            缺陷特征:一個(gè)類實(shí)現(xiàn)了多個(gè)不同的功能,如界面類又處理了業(yè)務(wù)相關(guān)的功能。
            缺陷影響:不易理解,耦合度高,公共方法太多。
            解決方法:對(duì)多個(gè)功能進(jìn)行拆分。
            11、復(fù)雜類(Blob Class)
            缺陷特征:規(guī)模非常龐大、復(fù)雜性高的類,常常包含多個(gè)復(fù)雜函數(shù),有多重功能。
            缺陷影響:圈復(fù)雜度高,內(nèi)聚性差,耦合度高,不易看懂和維護(hù)。
            解決方法:解決復(fù)雜函數(shù),結(jié)構(gòu)要清晰,類功能應(yīng)該單一。建議值:類行數(shù)應(yīng)在2000以內(nèi)。
            12、全能類(God Class)
            缺陷特征:一個(gè)類集中了多個(gè)不相關(guān)類的功能;一個(gè)類操作其它模塊數(shù)據(jù)太多;大而復(fù)雜。
            缺陷影響:破壞了類的封裝性,耦合度高,內(nèi)聚性差,不易維護(hù)。
            解決方法:多個(gè)功能不相關(guān)的類應(yīng)該分別封裝成不同的類,適當(dāng)搬移函數(shù),解決復(fù)雜函數(shù)問題。
            13、歪曲層次(Distorted Hierarchy)
            缺陷特征:類的繼承關(guān)系比較深。
            缺陷影響:復(fù)雜度高,不易維護(hù)。
            解決方法:類的繼承層次結(jié)構(gòu)不應(yīng)該超過6。
            14、數(shù)據(jù)類(Data Class)
            缺陷特征:提供許多公共屬性和函數(shù),供很多其它類來操作,自己卻很少操作。
            缺陷影響:非面向?qū)ο螅狈Ψ庋b性,不易維護(hù)。
            解決方法:封裝性。
            15、破壞繼承(Tradition Breaker)
            缺陷特征:派生類幾乎沒有使用任何繼承父類的功能,卻增加了全新的功能。
            缺陷影響:非繼承關(guān)系卻繼承,難理解,不易維護(hù)。
            解決方法:理清類與類之間的繼承關(guān)系,不適合繼承關(guān)系的類應(yīng)該單獨(dú)分開。

          posted on 2014-10-30 11:31 順其自然EVO 閱讀(476) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄defalut managerment system 缺陷管理系統(tǒng)

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 临猗县| 灯塔市| 布拖县| 铜山县| 莱阳市| 乐东| 胶南市| 沐川县| 腾冲县| 曲沃县| 蒙阴县| 新龙县| 江孜县| 本溪市| 建始县| 临湘市| 灵山县| 通海县| 汶川县| 乐至县| 于都县| 泊头市| 宁晋县| 西乌珠穆沁旗| 娱乐| 平顶山市| 中牟县| 天气| 墨江| 黄梅县| 芒康县| 垦利县| 澄迈县| 锡林浩特市| 建昌县| 揭东县| 沧源| 顺义区| 辽阳市| 锡林浩特市| 贞丰县|