Kapag pinananatili at pinabubuti ang mga sistema ng inhinyeriya, ang mga organisasyon ay kadalasang humaharap sa isang kritikal na desisyon: dapat ba nilang muling baguhin ang umiiral na mga bahagi o isulat nang lubusan ang mga ito? ang pag-unawa sa mga pagkakaiba, bentaha, at disbentaha ng bawat pamamaraan ay mahalaga sa paggawa ng mga may kabatirang pagpili na umaayon sa mga tunguhin ng proyekto at mga limitasyong mapagkukunan. Ang artikulong ito ay nagbibigay ng isang komprehensibong balangkas para sa pagsusuri ng mga tradeoff, na gumagamit ng mga real-world na halimbawa at mga dalubhasang pang-unawa upang gabayan ang iyong desisyon.

Pag - unawa sa Pag - aayos

Ang pagrererecord ay kinasasangkutan ng paggawa ng inkremental na pagpapabuti sa mga umiiral na sistema nang hindi binabago ang kanilang core functionity.Nilayon nitong painam ang kalidad ng code, pagiging madaling basahin, at pagpapanatili habang iniingatan ang pag-uugali ng sistema. Ang pamamaraang ito ay kadalasang ginagamit upang mabawasan ang teknikal na utang at maghanda ng mga sistema para sa pag-unlad sa hinaharap. Ang refactoring ay hindi tungkol sa pagdaragdag ng mga katangian; ito ay tungkol sa pagpapabuti ng panloob na istraktura ng kodigo upang ang mga pagbabago sa hinaharap ay maging mas madali, mas ligtas, at mas mabilis.

Mga Pagpapabuti sa Imperyal na Paraan at mga Pangamoy ng Kodigo

Ang mga halimbawa ay kinabibilangan ng mga nagayang kodigo, mahabang pamamaraan, malalaking klase, at labis na pag - aalis ng mga amoy na ito, ang mga koponan ay maaaring gumawa sa codebase na mas simple at mas madaling gamitin. Ang mga kasangkapang gaya ng static analysis at mga IDE refactoring tampok (hal., Rename, mespendice, Pwersang Up) ay nakatutulong sa marami sa mga pagbabagong ito.

Kung Kailan Magpapalit

Ang muling paggawa ay pinaka epektibo kapag ang umiiral na sistema ay matatag pa ring gumagana ngunit ang mga pangkat na nagsasagawa ng patuloy na pag-reproductor bilang bahagi ng kanilang siklo ng pagpapaunlad (e.g., ang "boy scout rule") ay tumuturing sa panganib na mawalan ng hard-won domain administrations.Ang mga pangkat na nagsasagawa ng patuloy na muling pag-unlad bilang bahagi ng kanilang advancement (e.Ang mga "boy screcrewrewrewlections") ay tumuturing malusog at ang pangangailangan para sa malaking rewrites. Ang reporniflication ay hindi gaanong mapanganib dahil ang mga pres sa pamamagitan ng mga tests.

Pag - unawa sa Muling Pagsulat

Sa kabilang dako, ang paraang ito ay karaniwan nang pinipili kapag ang kasalukuyang sistema ay luma na, masyadong masalimuot, o hindi na natutugunan ang pangangailangan sa negosyo.

Greenfield vs. Brownfield Rewrites

Nagsisimula ang isang luntiang-dagat na muling pagsulat sa pamamagitan ng isang naka-blang na pisara, pagtatayo ng sistema sa isang ganap na bagong kapaligiran. Ito ay kadalasang nangyayari kapag ang orihinal na plataporma ay luma na (hal., nandarayuhan mula sa Cobol papuntang Java) o kapag ang sistema ay dapat na ganap na re-arkitekta para sa calitable.Ang kayumanggingfield na muling nagsusulat ay pinapalitan ang mga bahagi ng umiiral na sistema habang pinananatili ang iba ay tumatakbong quartoxiancy na tinatawag na "strangler figment." Ang hybrid na pamamaraang ito ay nakababawas sa panganib sa pamamagitan ng pagpayag ng isang phased elementation.

Kailan Magsusulat

Ang muling pagsulat ay binibigyang-katwiran kapag ang kasalukuyang sistema ay umabot sa isang punto kung saan ang muling paggawa ay hindi maaaring magkahalaga ng higit pa kaysa muling pagtatayo.Ang mga indicators ay kinabibilangan ng: ang codebase ay hindi na matitistika, ang arkitektura ay pumipigil sa kinakailangang mga pagbabago (hal.g., hindi na maaaring sukatin nang pahalang), o ang pagsasalansan ng teknolohiya ay hindi na suportado. Ang isa pang senaryo ay kapag ang modelo ng negosyo ay lubhang nagbago upang ang sistema ng pamana ay hindi makabagay nang walang kumpletong muling pagtatayo. Ang repridge ay maaari ring maging isang strategical recording forigsmsviersvierscer.

Paghahambing sa mga Panganib at Halaga

Ang pag - unawa sa mga ito ay tumutulong sa mga koponan na iayon ang kanilang pagpili sa mga pamamaraang naghahantad sa kanila sa pagpaparaya at mga siklo ng badyet sa organisasyon.

Mga Salik na Panganib

Refactoring cuspers:[1] Ang pinakamalaking panganib ay ang muling paggawa ay ang hindi kailanman equiption reassignmentit ay nagiging isang walang katapusang siklo ng mga maliit na pagpapabuti habang ang mga pangunahing problema ng sistema ay nananatili. ang isa pang panganib ay "reconfirming fatigue," kung saan ang koponan ay nawawalan ng pangganyak dahil ang pagsulong ay mabagal at hindi nakikita sa mga pointer. Gayunpaman, ang muling pag-ebol ay karaniwang may mas mababa per-palit na panganib dahil ang bawat pagbabago ay maliit at recontransformanceable.

[[[[T: Ang pinakatanyag na babala ay nagmula sa artikulo ni Joel Spolsky " Mga Bagay na Dapat Mong Gawin Kailanman, Bahagi Ako", kung saan ikinatwiran niya na ang muling pagsulat ay kadalasang humahantong sa pagpapadala ng isang wagon, tampok na-poor replacement years late. respiritwals repositions o iskedyul (ang bagong sistema ay maaaring kumuha ng mas matagal kaysa sa inaasahan), kaalaman (pagkuha ng mga tuntunin sa pagsasalin), at pagsasama-sama (paglipat sa ibang sistemang inter-ed at inter-editerato.)

Halaga ng Pagsusuri

Natuklasan ng isang pag-aaral ng Software Engineering Institute na ang pag-aayos ng depekto pagkatapos ilabas ay nagkakahalaga ng 10–100x higit pa sa pagsasaayos nito sa panahon ng designificipero refactoring paghuli ng maraming mga depekto sa pamamagitan ng pagpapabuti ng codelinaw. Ang repriting ay nangangailangan ng malaking upfront investment: kailangan mong muling-analyze, reconstitures, recode, at muling suriin ang lahat ng mga bagay. Ang kabuuang halaga ng pagmamay-ari (TCO) para sa muling pagsulat ay kadalasang lampas sa isang pag-panimulat ng isang higit sa isang higit sa isang higit sa isang taon, na pag-ka-ka-ka-ka-taong abot, maliban sa isang hindi pamantaya, kung ang hindi pamantaya ay tunay na magagamit sa pag-kataya.

Mabigat na Pasiya Para sa mga Lider ng Inhinyeriya

Ang pagpili sa pagitan ng muling paggawa at muling pagsulat ay nakasalalay sa iba't ibang salik gaya ng sistema complexing, mga priyoridad sa negosyo, magagamit na mga mapagkukunan, at mga long-term goal. Ang sumusunod na balangkas ng desisyon ay makatutulong sa pagsusuri ng iyong espesipikong sitwasyon.

Sistemang Pagpapahina ng Kalusugan

Magsagawa ng sistematikong pagsusuri sa codebase gamit ang mga metrikong tulad ng cyclomatic complexing, code coverage, configuration, at defect density. mga kasangkapang tulad ng SonarQube o CodeClimate ay maaaring magbigay ng walang kinikilingang datos. Kung ang sistema ay hindi gaanong ma-iinture ngunit ang lohikang pangnegosyo ay matatag, maaaring sapat na ang muling pag-aayos. Kung ang arkitektura ay pangunahing may depekto (hal., ⁇ , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ), maaaring kailanganin ang isang rewrite.

Mga Tunguhin sa Negosyo

Mapa ang teknikal na desisyon sa mga kinalabasan ng negosyo. Kung ang tunguhin ay pabilisin ang paghahatid ng tampok sa loob ng susunod na sangkapat, ang muling paggawa ng produkto ay karaniwang mas ligtas. Kung ang tunguhin ay makapasok sa isang bagong pamilihan na nangangailangan ng malaking pagkakaiba sa pagsasagawa o pag-uugali, maaaring bigyang-katwiran ang muling pagsulat. ang mga nag-aartista ng produkto at mga staindors upang linawin ang "bakit." Halimbawa, ang isang startup ay maaaring pumili na muling magsulat upang mabilis na mag-erecorecord, habang ang isang negosyo na may mga kritikal na sistemang pamana ay maaaring mas gugustuhing gumawa ng inkremental na muling pag-remental na pag-iwas.

Kakayahang Magtulungan at Kaalaman sa Institusyon

Kung ang mga orihinal na may akda ay naka-recombinate pa rin sa pag-unawa sa umiiral na sistema, mas mahusay ang muling paggawa. kung ang codebase ay isang itim na kahon na may kaunting dokumentasyon, ang isang muling pagsulat ay maaaring magmukhang nakatutuksong feekspero ito ay nagdadala ng panganib ng pag-uulit ng nakaraang mga pagkakamali. sa kasong iyon, isaalang-alang ang isang "rewrite na may pagpapanatili": magtayo ng bagong sistema na magkakahanay, ngunit kumuha ng mga tuntunin sa negosyo mula sa lumang kodigo sa pamamagitan ng maingat na pagbasa at de-defacaning pagsubok bago alisin ang lumang sistema.

Mga Tunay-World Halimbawa

Ang pagsusuri kung paano ginamit ng ibang organisasyon ang pagpiling ito ay makapaglalaan ng praktikal na mga kaunawaan.

Halimbawa: Refactoring of HEY ni Basecamp

Nang gawin ang serbisyo ng email na HEY, pinili ng pangkat ni Basecamp na muling baguhin ang umiiral na Rails codebase sa halip na isulat mula sa mga piraso. sistematiko nilang kinuha ang lohikang domain tungo sa mga bagay na may kinalaman sa serbisyo, inayos ang saklaw ng pagsusulit, at inalis ang patay na kodigo.Dahil dito, nailubog nila ang produkto sa iskedyul habang pinananatili ang kodigo ng computer na napananatiling matibay ng mga ito. Napatunay ng pangkat ang kanilang paraan, anupat itinatampok na ang pagsulong sa inskripormentaliksik ay ang susi upang mapanatili ang kanilang malalim na pagkaunawa.

Halimbawa: Rewrite ng mga FreshBooks

Ang mga FreshBook, isang kompanya ng accounting software, ay tanyag na nagreregula ng kanilang buong plataporma mula sa isang monolitong aplikasyon ng PHP sa isang moderno at makroskopikong sistema.Ang desisyon ay dumating pagkatapos ng mga taon ng pakikipagpunyagi sa pagganap at arkitektural na mga strip na hindi maaaring ayusin. Ang muling pagsulat ay kumuha ng mahigit 2 taon at nagkakahalaga ng sampu-sampung milyong dolyar, ngunit ito ay nakatulong sa kanila na makapaglingkod sa mas malalaking mga parokyano at bawasan ang mga gastos sa pagsuporta.[O ay nagsabi na ang muling pagsulat ay "ang pinakamahirap na nagawa natin ngunit ang kailangan ay ang negosyo ay nanatili sa pagitan ng mga post-T.F.[0][T][T][T].[T] Ang arkitektura ay nagbibigay ng mga gusali[T.[T]

Halimbawa: Ang Nagrereresulta na Komunidad ni Martin Fowler

Martin Fowler, awtor ng seminal book [[T] Refactoring: Pagpapaunlad sa Disenyo ng Pag - iral na Kodigo, ay matagal nang nagmungkahi ng muling paggawa sa ibabaw ng recountment.

Pagsasaayos: Paggawa ng Tamang Pagpili

Ang isang maingat na pagtatasa sa espesipikong kalagayan ay aakay sa mga organisasyon tungo sa pinakamabisang estratehiya, pagtitimbang - timbang ng panganib, gastos, at pagiging handa sa hinaharap. Kadalasang nasasangkot sa tamang landas ang kombinasyon: muling paggawa ng mga bahagi na maaaring iligtas, at muling pagsulat ng mga sangkap na hindi na maaayos pa. Gamitin ang balangkas na binalangkas dito upang suriin ang kalusugan ng iyong codebase, pagtutugma ng mga tunguhin sa negosyo, at kaalaman sa pag - aayos.