當(dāng)你最初想要成為一個(gè)軟件開發(fā)者的時(shí)候,你可能夢(mèng)想著創(chuàng)造令人興奮的新功能,玩弄一些新科技,并編寫一些非??岫腥さ拇a。




但是你可能從未想過的是,要在一個(gè)擁有10年歷史的并且由一個(gè)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 軟件開發(fā)人員維護(hù)代碼指南

軟件開發(fā)人員維護(hù)代碼指南

時(shí)間:2023-04-22 20:33:02 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-04-22 20:33:02 來源:網(wǎng)站運(yùn)營(yíng)

軟件開發(fā)人員維護(hù)代碼指南:




當(dāng)你最初想要成為一個(gè)軟件開發(fā)者的時(shí)候,你可能夢(mèng)想著創(chuàng)造令人興奮的新功能,玩弄一些新科技,并編寫一些非常酷而有趣的代碼。




但是你可能從未想過的是,要在一個(gè)擁有10年歷史的并且由一個(gè)很多年前就離開公司的某人所編寫的有點(diǎn)混沌的程序上工作,你要修復(fù)他留下來的bug。




事實(shí)上,在你軟件開發(fā)的職業(yè)生涯中,你維護(hù)代碼所花費(fèi)的時(shí)間要遠(yuǎn)多于寫代碼所消耗的時(shí)間。




生活就是如此。而這只是其中的一件事。




然而,這個(gè)事實(shí)并不意味著你將會(huì)只維護(hù)幾十年前編寫的老的VB6應(yīng)用。




事實(shí)上,你將要維護(hù)的代碼中很大一部分都可能是你自己所寫的。




因此,如果你能學(xué)會(huì)以下兩件事,也許就是很不錯(cuò)的。




首先,你需要知道如何正確的維護(hù)代碼,從而保證它不會(huì)隨著時(shí)間的推移變得越來越糟糕直到最終崩潰。




其次,你要學(xué)會(huì)如何編寫容易維護(hù)的良好代碼,這樣后來的開發(fā)人員要想維護(hù)你的代碼時(shí),就不會(huì)試圖找到你的行蹤,并來到你的家里,在你睡夢(mèng)的時(shí)候?qū)⒛愀傻簟?br>



在這一章節(jié)中,我們將要討論為什么要學(xué)習(xí)如何維護(hù)代碼和編寫可維護(hù)的代碼,而且我將會(huì)給你一些關(guān)于如何做好這兩件事的實(shí)用的建議。




聽起來不錯(cuò)吧?




你的職業(yè)生涯的大部分時(shí)間將會(huì)花在維護(hù)代碼上










我已經(jīng)提過這一點(diǎn)了,但是它值得再提一遍,因?yàn)樗_了。不管以哪種形式,你都將要維護(hù)代碼。




新的軟件一直在不斷產(chǎn)生,但是每一個(gè)新的軟件應(yīng)用的生命周期,都期望能比創(chuàng)建它的時(shí)間要長(zhǎng)久很多。這意味著在外面的舊軟件總是會(huì)比新的軟件要多一些。 (除非我們擁有高得離奇的新軟件生產(chǎn)率,而同時(shí)有一大批舊軟件死掉,但是這是不可能發(fā)生的。)




現(xiàn)有的舊軟件需要不斷改進(jìn)和維護(hù)??蛻魰?huì)發(fā)現(xiàn)需要修復(fù)的錯(cuò)誤。需要添加新功能或修改現(xiàn)有功能。生產(chǎn)軟件就像一個(gè)活的、呼吸的有機(jī)體,總是在生長(zhǎng)、變化或慢慢死亡。




我為什么要告訴你這個(gè)?我只是想讓你的希望破滅嗎?不,我希望你對(duì)自己作為軟件開發(fā)人員的職業(yè)生涯有現(xiàn)實(shí)的期望。




通常情況下,熱心并有善意的招聘經(jīng)理會(huì)對(duì)工作描繪出一幅美好的畫面,告訴你你將使用最新的技術(shù)從頭開始設(shè)計(jì)和編碼一個(gè)全新的系統(tǒng)。





雖然您的一些工作可能正在這樣做,但通常情況下,大多數(shù)工作(無論聽起來多么好)都將涉及維護(hù)現(xiàn)有系統(tǒng)。再說一遍,這就是生活的工作方式。




這是否就意味著你永遠(yuǎn)也不可能找到一份你可以完全從頭開始編寫新系統(tǒng)的工作?不,它肯定會(huì)發(fā)生的,但是請(qǐng)不要一直期待這會(huì)發(fā)生。即使你真的得到了這樣一份工作,也只是期待在某個(gè)時(shí)間點(diǎn)上發(fā)生,你或者其他人以后還是會(huì)需要維護(hù)這份代碼的。




這就是我要說的。

偉大的開發(fā)人員編寫可維護(hù)的代碼










既然您的期望值已經(jīng)設(shè)定好了,那么我將嘗試并鼓勵(lì)您編寫“您可以使用的最好的DARN可維護(hù)代碼”,因?yàn)?這就是你要做的正確的事情。




在我多年的軟件開發(fā)和軟件開發(fā)工作中,我發(fā)現(xiàn)了一個(gè)不可辯駁的事實(shí),那就是偉大的開發(fā)人員編寫了高度可維護(hù)的代碼。事實(shí)上,我會(huì)說,我判斷程序員的唯一標(biāo)準(zhǔn)是如何維護(hù)他們的代碼。




這看起來有點(diǎn)愚蠢。你有可能認(rèn)為我只是為了證明本章節(jié)的觀點(diǎn)才編造出這個(gè)出來。但我要告訴你,這是真的。為什么呢?讓我慢慢給你道來。




偉大的開發(fā)人員知道他們所寫的任何代碼的生命周期中的大部分處在維護(hù)階段。偉大的開發(fā)人員知道他們所寫的最有價(jià)值的代碼是哪些可以持續(xù)很長(zhǎng)時(shí)間的代碼,并且它們不會(huì)被廢棄或者重寫。




偉大的開發(fā)人員不會(huì)為了自作聰明,而盡可能的趕快或看起來很高效的樣子,他們會(huì)將代碼進(jìn)行優(yōu)化以便有更好的可維護(hù)性。




他們會(huì)編寫良好且干凈的代碼, 可以很容易被讀懂,修改并維護(hù)。他們創(chuàng)建靈活并松散耦合的設(shè)計(jì), 這樣如果系統(tǒng)中某件東西改變的話,也不會(huì)影響到系統(tǒng)中其他任何一個(gè)組件。他們格外的小心,以確保他們所做的都是有據(jù)可查的,并且盡可能做到不言自明。




他們會(huì)花費(fèi)大量的時(shí)間去研究別人的代碼或者自己的代碼,并試圖維護(hù)它,因?yàn)樗麄冎浪麄兯鶎懙淖詈玫拇a就是最容易維護(hù)的代碼。

童子軍規(guī)則

為了能夠擅長(zhǎng)維護(hù)代碼,其中一個(gè)秘訣就是童子軍規(guī)則。這條規(guī)則起源自美國(guó)童子軍,他們非常重視野營(yíng)的一條簡(jiǎn)單的規(guī)則:“讓營(yíng)地比你剛來時(shí)更干凈?!?/b>




這是適用于生活中多個(gè)領(lǐng)域的一條很好的規(guī)則,但它在軟件開發(fā)中尤其管用。讓代碼比你剛來時(shí)更好。它確實(shí)就是那么簡(jiǎn)單。當(dāng)你在某些代碼上工作時(shí),有可能是在修復(fù)一個(gè)bug或者增加一個(gè)新功能,請(qǐng)嘗試讓那段代碼比你剛來時(shí)要稍微好一點(diǎn)的狀態(tài)。




這可能意味著,你可以編寫一個(gè)額外的單元測(cè)試,這樣下一個(gè)開發(fā)者來的時(shí)候也許會(huì)想改變些什么東西時(shí)就會(huì)顯得稍微健壯一些。因?yàn)橄乱粋€(gè)開發(fā)人員需要對(duì)代碼進(jìn)行修改。




也可以是將一些功能分組放進(jìn)一個(gè)方法或程序中,以減少代碼里的一些冗余,或者使其更加容易理解。甚至還可以重構(gòu)一大段的代碼來實(shí)現(xiàn)一個(gè)更干凈且更簡(jiǎn)單的設(shè)計(jì)。




只要你遵循了這條規(guī)則,代碼就會(huì)隨時(shí)間的推移,逐漸的變得越來越好,或者至少代碼混亂(熵)的程度會(huì)有比較明顯的下降。這條基本規(guī)則也是維護(hù)一個(gè)已存在的代碼庫(kù)最簡(jiǎn)單的規(guī)則。

可讀性是最為重要的










影響代碼可維護(hù)性的最重要因素之一是代碼的可讀性。代碼可讀性越高,維護(hù)代碼就越容易。代碼越神秘,越難理解,維護(hù)起來就越困難。




道理就是這么質(zhì)樸簡(jiǎn)單。

太多的開發(fā)人員都試圖編寫簡(jiǎn)潔而巧妙的代碼。簡(jiǎn)明扼要固然有價(jià)值,但簡(jiǎn)明扼要絕對(duì)是災(zāi)難的良方。為什么?因?yàn)榇a被讀取的比被寫入的要多。




每當(dāng)程序員試圖理解一些通過代碼傳遞的工作流時(shí),他們反過來又可以添加新功能、修改現(xiàn)有功能或排除錯(cuò)誤。他們就需要弄明白你的代碼在做什么事情。

他們?cè)饺菀桌斫猓驮饺菀讓?duì)系統(tǒng)進(jìn)行正確的更改,所需的時(shí)間也就越少。如果代碼晦澀難懂,當(dāng)其他開發(fā)人員(甚至你自己)必須檢查并試圖理解代碼時(shí),就需要額外的時(shí)間。




也很可能有人會(huì)誤解代碼,然后在更改代碼或系統(tǒng)中使用該代碼的其他部分時(shí)出錯(cuò),從而進(jìn)一步降低系統(tǒng)的性能。




說了這么多,總結(jié)一句話,就是 可讀的代碼更易維護(hù),完事。因此,在編寫要維護(hù)的代碼時(shí),首先要努力提高可讀性。

重構(gòu)代碼以使它變得更好

我們已經(jīng)討論過童子軍規(guī)則,但是讓我們進(jìn)一步深入探討下“使代碼更好”到底意味著什么。

你怎樣才能使代碼變得更好?

關(guān)于重構(gòu)的話題可以寫出一整本書來,而且已經(jīng)有幾本書了。但是在這一部分里,我將要介紹些基礎(chǔ)的東西,然后你就可以練習(xí)并自己慢慢學(xué)習(xí)了。




重構(gòu)本質(zhì)上就是在提高現(xiàn)有代碼的設(shè)計(jì)。對(duì)于我來說,重構(gòu)就是在不改變功能的前提下使得已有代碼更具可讀性。




這其中“不改變功能”這部分相當(dāng)重要,因?yàn)槿绻阍诟淖兇a的同時(shí)也把功能也給改變了,那么即使代碼變得比你修改前更好,那你也是不可能就這么走開的。你有可能引入了bug而使代碼變得更糟了。并不是說你在改善代碼的時(shí)候不能改變功能,只是說這根本不是重構(gòu)要做的事。




重構(gòu)關(guān)鍵在于取出某些已有代碼并使它更好。更好可以(事實(shí)上總是應(yīng)該)意味著更易讀且易維護(hù)。




不過,它也可以是你通過消除重復(fù)代碼塊,或者以不同方式重組而縮減代碼的總行數(shù)。這可能意味著你已經(jīng)將整體的架構(gòu)做了改善,以使其能夠面對(duì)將來的修改顯得更加靈活健壯。




重構(gòu)代碼有很多方式,但是重構(gòu)中最重要的一個(gè)原則就是不要改變功能,而是要使代碼更加優(yōu)秀。

重構(gòu)和單元測(cè)試是相輔相成的,因?yàn)槿绻銢]有辦法測(cè)試,那就無法知道你是否修改了代碼的功能。




在你做重構(gòu)之前就準(zhǔn)備好相應(yīng)的單元測(cè)試是個(gè)不錯(cuò)的辦法,特別是當(dāng)你做的變更是比較大的時(shí)候。

一些現(xiàn)代的重構(gòu)工具可以輔助你,并可以保證你所做的重構(gòu)不會(huì)修改代碼的功能。




大多數(shù)現(xiàn)代IDE都已經(jīng)內(nèi)置一些重構(gòu)的工具。可以把重構(gòu)看成是對(duì)一個(gè)數(shù)學(xué)方程式進(jìn)行重組,而不改變其含義的過程。我們可以永遠(yuǎn)相信 4x= 8 跟2x = 4 或 x = 2是同一個(gè)含義。你無須去證明它。

自動(dòng)化是至關(guān)重要的










如果你的軟件需要手動(dòng)進(jìn)行構(gòu)建,以及通過手動(dòng)運(yùn)行測(cè)試來確保沒有問題的話,那就很難維護(hù)了。




你進(jìn)行修改并測(cè)試的越快,你擁有的安全網(wǎng)就越好,這樣能夠使你不會(huì)給已有的代碼庫(kù)引入新的bug和錯(cuò)誤。




這就是為什么自動(dòng)化對(duì)于增加一個(gè)軟件項(xiàng)目的可維護(hù)性是至關(guān)重要的。

擁有自動(dòng)化構(gòu)建,可持續(xù)集成的系統(tǒng)以及自動(dòng)化測(cè)試,使得你對(duì)代碼進(jìn)行更改和快速發(fā)現(xiàn)是否有任何損壞變得異常簡(jiǎn)單。





這種快速反饋的周期給開發(fā)者在修改代碼時(shí)帶來更多的自信,并且也讓他們無所顧忌的進(jìn)行代碼重構(gòu)從而使代碼質(zhì)量更好。

如果你要寫注釋,那就寫些好的來

我對(duì)于在代碼里寫注釋并不是很感冒。是的,我知道這有點(diǎn)另類。

但是我寧愿寫清晰且富有表達(dá)力的能夠自我解釋的代碼,也不愿意寫一些只有通過閱讀注釋才能理解的神秘的代碼,而且順便提一句,這些注釋還得跟隨代碼一起被維護(hù)。

我更愿意看到你寫干凈且可讀的代碼,而不愿意給代碼加入一大堆最終可能會(huì)過時(shí)的注釋。

但是,如果你一定要寫注釋的話,請(qǐng)確保他們是非常良好的。你要確保所寫的注釋能夠非常清楚的解釋一些不是很明顯而需要解釋的事情。




神秘的注釋有的時(shí)候和神秘代碼一樣糟糕,甚至更糟糕, 因?yàn)槟阒辽龠€可以弄清楚神秘代碼做些什么。你卻無法真正弄明白一段神秘的注釋可能在說些什么。

跟代碼里的注釋一樣,在提交代碼時(shí),提交信息也要盡量做到清晰且對(duì)他人有幫助。清晰的提交信息也有助于提高代碼庫(kù)的可維護(hù)性,因?yàn)樘峤恍畔⒉粌H可以讓我們知道隨著時(shí)間的推移代碼是如何演變的,也能讓我們知道為什么會(huì)發(fā)生這些改變。




那個(gè)“為什么”對(duì)于我們理解某些不明顯的代碼或者修改來說,是很關(guān)鍵的,特別是在當(dāng)它涉及到修復(fù)了一個(gè)很蹊蹺的bug時(shí)。

學(xué)習(xí)編寫可維護(hù)代碼的資源

維護(hù)代碼是很棘手的。它涉及到大量的技巧,比如編寫整潔的代碼,重構(gòu),設(shè)計(jì),甚至像devops之類的基礎(chǔ)設(shè)施以及自動(dòng)化。




我準(zhǔn)備列出一些有價(jià)值的資源列表 ,希望它們可以幫助你在編寫可維護(hù)代碼以及維護(hù)現(xiàn)存的非你所寫的代碼時(shí)能夠更加得心應(yīng)手。

RobertMartin的《整潔的代碼 Clean Code》,它是關(guān)于編寫干凈、可讀代碼的最好的一本書,而且它還包含了關(guān)于為追求可維護(hù)性而設(shè)計(jì)和重構(gòu)的一些很不錯(cuò)的信息。

SteveMcConnell的《代碼大全 Code Complete》, 它是另外一本關(guān)于編寫良好可維護(hù)代碼的偉大的書。你將會(huì)發(fā)現(xiàn)這本書會(huì)深入討論關(guān)于書寫良好可讀代碼的一些底層的,結(jié)構(gòu)性的細(xì)節(jié)。




Michael Feathers的《修改代碼的藝術(shù) Working Effectively With LegacyCode》,這是一本關(guān)于如何維護(hù)現(xiàn)有代碼的經(jīng)典著作。它深入講述了遺留系統(tǒng)的事實(shí)真相以及如何處理其他人所寫的代碼。每一個(gè)軟件開發(fā)人員都應(yīng)該閱讀這本書,因?yàn)槊恳粋€(gè)開發(fā)人員都有可能要花費(fèi)大量的工作時(shí)間與遺留代碼打交道。


MartinFowler的《重構(gòu) Refactoring》,另外一本所有軟件開發(fā)人員都應(yīng)該閱讀的經(jīng)典著作。這本書介紹了所有你在不改變功能前提下對(duì)代碼進(jìn)行重組時(shí)所能用到的重構(gòu)方法。







好吧,這里有要點(diǎn)。

記住童子軍的規(guī)則,你會(huì)沒事的。哦,還有,別擔(dān)心:在軟件開發(fā)職業(yè)生涯中,你會(huì)得到很多維護(hù)代碼的實(shí)踐。

祝你好運(yùn)。

關(guān)鍵詞:維護(hù),指南

74
73
25
news
  • 網(wǎng)站
  • 營(yíng)銷
  • 設(shè)計(jì)
  • 運(yùn)營(yíng)
  • 優(yōu)化
  • 效率
  • 專注
  • 電商
  • 方案
  • 推廣
為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉