Kun ylläpidetään ja parannetaan teknisiä järjestelmiä, organisaatioiden on usein tehtävä kriittinen päätös: pitäisikö niiden korjata olemassa olevat komponentit tai kirjoittaa ne kokonaan uudelleen? Erilaisuuden, etujen ja haittojen ymmärtäminen on välttämätöntä, jotta voidaan tehdä tietoisia valintoja, jotka vastaavat hankkeen tavoitteita ja resurssien rajoituksia. Tämä artikkeli tarjoaa kattavan kehyksen vaihtokauppojen arvioimiselle käyttämällä tosimaailman esimerkkejä ja asiantuntija-oivalluksia päätöksen ohjaamiseksi.

Ymmärtäminen Korjaus

Refaktorointi edellyttää nykyisten järjestelmien lisäparannuksia muuttamatta niiden ydintoimintoja. Sen tavoitteena on parantaa koodin laatua, luettavuutta ja säilyvyyttä samalla kun järjestelmän toiminta säilyy. Tätä lähestymistapaa käytetään usein teknisen velan vähentämiseen ja järjestelmien valmisteluun tulevaa kehitystä varten. Refaktoroinnissa ei ole kyse ominaisuuksien lisäämisestä; siinä on kyse koodin sisäisen rakenteen parantamisesta niin, että tulevat muutokset tulevat helpommiksi, turvallisemmiksi ja nopeammiksi.

Incremental parannuksia ja koodi tuoksuu

Refaktorointi tyypillisesti kohteita "koodi hajut" . Pinta indikaattorit, jotka yleensä vastaavat syvempiä ongelmia järjestelmässä. Esimerkkejä ovat kaksoismerkitty koodi, pitkät menetelmät, suuret luokat, ja liiallinen kytkentä. poistamalla järjestelmällisesti nämä hajut, tiimit voivat tehdä koodipohjasta enemmän modulaarinen ja testattavissa. Työkalut kuten staattiset analyzerit ja IDE refactoring ominaisuuksia (esim., Nimeä, Extract Method, Vedä ylös) auttaa automatisoida monia näistä muunnoksista.

Milloin refaktori on?

Refaktorointi on tehokkainta, kun nykyinen järjestelmä on vielä rakenteellisesti terve, mutta on kertynyt kohtuullisen teknisen velan. Se on myös tarkoituksenmukaista, kun liiketoiminnan logiikka on monimutkainen ja hyvin ymmärretty, koska uudelleenkirjoittaminen riski menettää kovan voitollisen verkkotunnuksen tietoa. Joukkueet, jotka harjoittavat jatkuvaa refaktorointia osana niiden kehityssykliä (esim., "poikascout sääntö") huomaa, että koodipohja pysyy terveenä ja tarve suurten uudelleenkirjoitusten vähenee. Refaktorointi on vähemmän riskialtista, koska voit validoida korrektiutta asteittain kokeiden ja pienten käyttöönottojen avulla.

Ymmärtäminen uudelleenkirjoittaminen

Toisaalta uudelleenkirjoittaminen edellyttää uuden järjestelmän kehittämistä tyhjästä tai nykyisen järjestelmän perinpohjaista uudistamista. Tämä menetelmä valitaan tyypillisesti silloin, kun nykyinen järjestelmä on vanhentunut, liian monimutkainen tai ei enää vastaa liiketoiminnan tarpeita. Uudelleenkirjoittaminen voi tarjota uuden alun, jolloin moderni arkkitehtuuri ja teknologia voidaan toteuttaa. Se tarkoittaa kuitenkin myös vanhojen virheiden korjausten, optimointien ja institutionaalisen tiedon poistamista vanhaan koodiin haudattuna.

Greenfield vs. Brownfield Rewrites

Greenfieldin uudelleenkirjoitus alkaa tyhjällä taululla, joka rakentaa järjestelmää täysin uudessa ympäristössä. Tämä tapahtuu usein silloin, kun alkuperäinen alusta on vanhentunut (esim. siirtyminen Cobolista Javaan) tai kun järjestelmä on täysin uudelleen arkkitehtuurin mukaan skaalautuva. Brownfield korvaa asteittain olemassa olevan järjestelmän osia samalla kun muut pysyvät käynnissä. Tämä hybridilähestymistapa vähentää riskiä sallimalla asteittaisen siirtymisen.

Milloin kirjoitat uudelleen

Uudelleenkirjoittaminen on perusteltua, kun nykyinen järjestelmä on saavuttanut pisteen, jossa refaktorointi maksaisi enemmän kuin uudelleenrakentaminen. Indikaattorit sisältävät: koodipohja on testaamaton, arkkitehtuuri estää tarvittavat muutokset (esim., ei voida skaalata horisontaalisesti), tai teknologia pino ei enää tue. Toinen skenaario on, kun liiketoimintamalli on muuttunut niin dramaattisesti, että entinen järjestelmä ei voi sopeutua ilman täydellistä uudelleenrakentamista. Kirjoittaminen voi myös olla strateginen siirto kilpailuetua ottamalla käyttöön uusia paradigmoja, kuten mikropalvelut tai palvelinkyvytön.

Vertailuriskit ja kustannukset

Molemmissa lähestymistavoissa on erilliset riskiprofiilit ja kustannusrakenteet. Näiden ymmärtäminen auttaa tiimiä sovittamaan valintansa organisaation riskien sieto- ja budjettisyklien kanssa.

Riskitekijät

Väsymysriskit:[ Suurin riski on se, että refaktorointi ei koskaan lopu, vaan siitä tulee pienien parannusten loputon sykli, kun järjestelmän taustalla olevat ongelmat jatkuvat. Toinen riski on "refaktoroiva väsymys," jossa tiimi menettää motivaationsa, koska edistys on hidasta ja näkymätöntä sidosryhmille. Kuitenkin refaktoroinnilla on tyypillisesti pienempi per-change-riski, koska jokainen muutos on pieni ja palautuva.

Uudelleenkirjoitusriskit:[[] Kuuluisin varoitus tulee Joel Spolskyn artikkelista "Thinks You Well Never Do, Part I", jossa hän väittää, että uudelleenkirjoitus johtaa usein vian, ominaisuus-huono vaihtovuosia myöhässä. Kirjoittaminen tuo aikataulun riski (uusi järjestelmä voi kestää odotettua kauemmin), tietoriski (liiketoiminnan säännöt hukkuvat kääntämisessä), ja integraatioriski (tiedon siirto ja yhteentoimivuus muiden järjestelmien kanssa).

Kustannusten analysointi

Refaktorointi leviää kustannuksia ajan mittaan. Ohjelmistotekniikan instituutin tutkimuksessa todettiin, että vikaa release kustannukset 10.100x enemmän kuin vahvistamisesta sen suunnitteluvaiheessa. Mutta korjausta saalis monia virheitä varhaisessa vaiheessa parantamalla koodin selkeyttä. Uudelleenkirjoitus vaatii suuren alkuinvestointi: sinun täytyy uudelleen analysoida, uudelleensuunnittelu, uudelleenkoodata, ja uudelleentestata kaikki. Kokonaiskustannukset omistajuuden (TCO) uudelleenkirjoittaminen usein ylittää refaktorointi yli 3.05 vuotta aikavälillä, ellei perintöjärjestelmä on todella mahdoton ylläpitää. Kuitenkin, kirjoittaminen voi vähentää käyttökustannuksia (esim., pilviinfrastruktuuri, lisensointi) kerran käytössä.

Päätöskehys konetekniikan johtajille

Uudelleenkäsittelyn ja uudelleenkirjoituksen valinta riippuu eri tekijöistä, kuten järjestelmän monimutkaisuudesta, liiketoiminnan painopisteistä, käytettävissä olevista resursseista ja pitkän aikavälin tavoitteista. Seuraavassa päätöksessä voidaan arvioida tilannettasi.

Järjestelmän terveysarviointi

Tee systemaattinen analyysi koodibase käyttäen metrit kuten syklomaattinen monimutkaisuus, koodin kattavuus, kytkentä, ja vikatiheys. Työkalut kuten SonarQube tai CodeClimate voivat tarjota objektiivista tietoa. Jos järjestelmä pisteet huono ylläpidettävyys mutta liiketoiminnan logiikka on vakaa, refaktorointi voi riittää. Jos arkkitehtuuri on pohjimmiltaan virheellinen (esim., monoliittinen spagetti, joka ei voi olla modulaarinen), voi olla tarpeen kirjoittaa uudelleen.

Liiketoimintatavoitteet

Jos tavoitteena on nopeuttaa ominaisuustoimitusta seuraavan vuosineljänneksen aikana, korjaus on yleensä turvallisempaa. Jos tavoitteena on päästä uusille markkinoille, jotka edellyttävät aivan erilaisia suorituskykyä tai skaalautuvia ominaisuuksia, voi olla perusteltua kirjoittaa uusiksi. Käynnistä tuotteiden omistajat ja sidosryhmät selventämään "miksi." Esimerkiksi startup voisi valita uudelleenkirjoittaa nopeasti, kun taas kriittisen perinnön järjestelmät omaava yritys voisi mieluummin lisätä refaktorointia välttääkseen seisonta-ajan.

Joukkueen valmius ja institutionaalinen tietämys

Refaktorointi perustuu vahvasti olemassa olevan järjestelmän ymmärtämiseen. Jos alkuperäiset kirjoittajat ovat edelleen tiimissä, refaktorointi on tehokkaampaa. Jos koodikanta on musta laatikko, jossa on vähän dokumentaatiota, voi kirjoittaa uudelleen houkuttelevalta, mutta se sisältää riskin toistaa aiempia virheitä. Siinä tapauksessa harkitse "uudelleenkirjoita säilöminen": rakentaa uusi järjestelmä rinnakkain, mutta poimia liiketoiminnan säännöt vanhasta koodista huolellisesti lukemalla ja automatisoidulla testauksella ennen kuin hylkää vanha järjestelmä.

Esimerkkejä reaalimaailmasta

Kun tarkastellaan, miten muut organisaatiot ovat navigoineet tämän valinnan, voidaan saada käytännön tietoa.

Esimerkki: Basecampin HEY-korjaus

Kehittäessään sähköpostipalvelua HEY, Basecampin tiimi päätti korjata olemassa olevan Rails-koodikannan eikä kirjoittaa uudelleen tyhjästä. He systemaattisesti imivät verkkotunnuksen logiikkaa huoltokohteiksi, paransivat testikattavuutta ja eliminoivat kuolleen koodin. Näin he saattoivat lähettää tuotteen aikataulussa pitäen koodin kanta kunnossa. []Tiimi dokumentoi heidän lähestymistapansa[, mikä korosti, että asteittainen parannus oli avain heidän syvään ymmärrykseensä sähköpostin käsittelystä.

Esimerkki: FreshBooks' Rewrite

FreshBooks, kirjanpito-ohjelmisto yritys, kuuluisa uudelleenkirjoittaa koko alustan monoliittinen PHP sovellus moderniin, skaalautuva järjestelmä. Päätös tuli sen jälkeen, kun vuosien kamppailee suorituskykyä ja arkkitehtonisia rajoituksia, jotka refaktorointi ei voinut korjata. Uudelleenkirjoitus kesti yli 2 vuotta ja maksoi kymmeniä miljoonia dollareita, mutta se mahdollisti heille palvella suurempia asiakkaita ja vähentää tukikustannuksia. Toimitusjohtaja totesi, että uudelleenkirjoitus oli "vaikein asia, mitä olemme koskaan tehneet," mutta se oli tarpeen liiketoiminnan selviytyä. []Heidän post- mortem[ korostaa merkitystä linjaus liiketoiminnan vision ja teknisen arkkitehtuurin.

Esimerkki: Martin Fowlerin refaktoriyhteisö

Martin Fowler, kirjoittaja seminal kirja Refactoring: Parantaminen Design of Existing Code[, on pitkään kannattanut refaktorointia uudelleenkirjoitus. Hän väittää, että useimmat järjestelmät voidaan vähitellen parantaa, jos joukkueet investoida automatisoituun testaukseen ja jatkuvaan integrointiin. Hänen refactoring luettelo[ tarjoaa todistettu kuvioita, että joukkue voi soveltaa. Fowler näkökulma on, että uudelleenkirjoitus olisi viimeinen vaihtoehto, ei ensimmäinen vaisto.

Päätelmä: Oikea valinta

Sekä refaktorointi että uudelleenkirjoitus ovat heidän paikkansa konepajajärjestelmän hallinnassa. Huolellinen arviointi erityistilanteen ohjaa organisaatioita kohti tehokkainta strategiaa, tasapainottamiseen riskejä, kustannuksia ja tulevaa valmiutta. Oikea polku usein liittyy yhdistelmä: korjata osat, jotka ovat pelastettavat, ja kirjoittaa vain ne komponentit, jotka ovat korjauskelvottomia. Käytä tässä hahmoteltua kehystä arvioida koodipohjan terveyttä, linjata liiketoiminnan tavoitteet, ja vipuvaikutus tiimin tietoa. Tekemällä tietoon perustuva valinta, voit johtaa organisaatiosi kohti vankempaa, tehokasta ja mukautuva järjestelmiä, jotka tukevat kasvua putoamatta ansaan ennenaikainen uudelleenkirjoittaminen tai loputon refaktorointi.