Teknisten velkojen arvioiminen, hallinta ja välttäminen
Jos tekninen velka kuulostaa joltain rahoituksen käsikirjasta nostetulta, se johtuu siitä, että termi liittyy rahoitukseen. Tekninen velka liittyy kuitenkin todellisessa merkityksessä ohjelmointiin. Se on ajatus siitä, että ohjelmistoprojektin kehittämisen aikana tietyt välttämättömät vaiheet jätetään väliin tai hylätään kokonaan, jotta saavutetaan määräaika.
Täydellisen sovelluksen tai ohjelmiston kehittämiseksi kehittäjillä on usein aikaa – aivan kuten kuka tahansa satunnainen henkilö, joka suorittaa mitä tahansa mielivaltaista tehtävää. Näin ollen on yleensä järkevää tehdä jonkinlainen kompromissi täydellisen tuotteen toimittamisen täydellisellä koodilla ja ajan maksimoimisen välillä.
Kysymys kuuluukin: onko näillä kompromissilla rajaa? Voiko tästä kompromissista johtua luontaisia haittoja? Lopuksi, onko kehittäjä todella parempi pitkällä aikavälillä? Tässä teknisiä velkoja käsittelevässä artikkelissa yritän vastata kaikkiin näihin kysymyksiin.
Mikä on tekninen velka?
Määriteltäessä teknistä velkaa meidän on viitattava mieheen, jonka tunnustetaan termin alun perin luoneen: Ward Cunningham. Teknisellä velalla tarkoitetaan Cunninghamin mukaan ylimääräistä kehitystyötä, joka on tehtävä koodin ohjelmoinnissa, jotta sen ohjelmoinnista syntyvä vaje saadaan korvattua lyhyessä ajassa.
Tee siitä graafisempi kuvittelemalla, että sinun tehtäväsi on siivota sotkuinen huone ja olet myöhässä tunnilta. Varmistaaksesi, että suoritat opetuksen ja olet ajoissa luokassasi, teet nopean siivouksen lakaisemalla suurimman osan roskat sohvan alle. Seurauksena tästä on, että joudut lopulta käyttämään aikaa sotkujen selvittämiseen. Ohjelmistojen kehittämisessä, kun ohitat tarvittavat vaiheet ja seuraat helpompaa reittiä ”ei niin puhtailla” koodeilla, koodin puhdistaminen tulee myöhemmin vaikeammaksi. Ohjelmistoprojektin dominoissa on useita vaiheita, ja mitä kauemmin ohitat olemassa olevan ongelman, sitä kauemmin sen ratkaiseminen kestää.
Teknisten velkojen tyypit
Teknisiä velkoja on erilaisia, mukaan lukien:
Suunnitellut tekniset velat
Tämä tapahtuu tilanteissa, joissa organisaatiot päättävät tietoisesti joutua teknisiin velkoihin. Kuten aiemmin mainittiin, tämä on yleensä asetettujen määräaikojen ylittämistä ja tietyn tavoitteen saavuttamista. Suunniteltuja teknisiä velkoja tehdessään organisaation tulee olla selvä, mistä on valmis luopumaan ja mistä ei. Sinun on pidettävä tarkkaa kirjaa, pitäen mielessä, että sinun on lopulta palautettava ja korjattava alussa ohittamasi virheet.
Tahattomia teknisiä velkoja
Tämäntyyppinen tekninen velka on suora vastakohta ensimmäiselle. Se syntyy, kun organisaatio ei ennakoi tai suunnittele teknistä velkaa. Syynä tähän on tyypillisesti organisaation eri yksiköiden välisen viestinnän katkeaminen tai yksiköiden väliset surkeat työtavat.
Välttämättömät tekniset velat
Tämä on sellainen tekninen velka, jota mikään organisaation toiminta ei olisi voinut estää. Esimerkiksi tekniikan nopeiden muutosten vuoksi on järkevää, että jotkin aiemmin kirjoitetut koodit eivät vastaa nykyisiä ennustettuja standardeja.
Myös tällainen tekninen velka voi syntyä, kun muutoksia pyydetään, kun koodia ollaan jo kirjoittamassa. Jos ohjelmiston suunnittelun puolivälissä tehdään tiettyjä muutoksia, se voi sotkea dynamiikkaa ja tehdä vanhasta koodista vanhentuneen tai tarpeettoman.
Teknisen velan syyt
Joitakin teknisten velkojen syitä on käsitelty yllä, mutta poimin ne peräkkäin selventääkseni niitä.
Kiire
Yleisin teknisten velkojen syy on kiire. Kehittäjillä on usein tiukat määräajat, joista osa sisältää määräajat tiettyjen ohjelmistojen käynnistämiselle. Usein on ymmärrettävää (ja odotettavissa) tällaisissa tilanteissa, että kehittäjälle saattaa syntyä teknisiä velkoja matkan varrella. Tämän tyyppinen tekninen velka on usein tahallinen ja voi johtaa ongelmiin, jotka voivat vaihdella koodin virheistä tai spagettikoodeista.
Huoli/virhe
Joskus ohjelmoijat vain kirjoittavat huonoja koodeja, jotka lopulta johtavat teknisiin velkoihin. Riippumatta siitä, onko huono koodi olemassa kooderin virheen seurauksena vai ei, tosiasia on, että virheet aiheuttavat teknisiä velkoja, ja koska ne eivät ole skaalautuvia, ne on lopulta korjattava.
Vaikutusten tietoisuuden puute
Joskus tekniset velat syntyvät, koska koodaaja ei ymmärrä tai tunnusta, kuinka haitallisia tekniset velat ovat pitkällä aikavälillä. Tämä voi johtua oikeutetusta tietämättömyydestä ohjelmoinnin aikana käytettävien pikanäppäinten haitallisista vaikutuksista tai se voi olla seurausten tahallista huomiotta jättämistä.
Tarkoitus
Tekniset velat voivat syntyä tahallisesti koodaajan tai organisaation tahallisista toimista.
Modulaarisuuden puute
Tämä johtuu pääasiassa siitä, että yksi koodi voi palvella eri liiketoimintalogiikkaa samanaikaisesti. Tällainen tilanne tekee ohjelmistojen käsittelystä paljon vaikeampaa. Jokaisella kehittäjän kirjoittamalla koodilla on todennäköisempää, että hän kohtaa haasteita modulaarisuuden kanssa.
Teknisen velan arviointi
Teknisiä velkoja ei pidä koskaan laskea käsin, koska se olisi melko vaivalloista. Se tarkoittaisi, että koodi on syötettävä manuaalisesti nykyisten ja mahdollisten tulevien ongelmien määrittämiseksi. Sen lisäksi, kuinka aikaavievä manuaalinen prosessi on, on mahdollista, että koodit ovat muuttaneet muotoaan manuaalisen prosessin lopussa.
Yksi tapa suorittaa arviointi on suorittaa staattinen analyysi käyttämällä joitain sitä tukevia työkaluja. Joitakin työkaluja, joita voidaan käyttää, ovat Coverity, SonarQube, Check Style ja Closure Compiler.
Yleensä on olemassa kaksi tapaa laskea tekniset velat. Ensimmäisessä lähestymistavassa se voitaisiin saada laskemalla teknisen velan suhde koodisuhteen jälkeen. Tässä alkuperäistä arviota tai sovelluksen kehittämiseen tarvittavaa kokonaisaikaa käytetään teknisen velan korjaamiseen tarvittavan ajan määrittämiseen.
Toisessa lähestymistavassa voit hyödyntää suoraan eri työkalujen, kuten SonarQube, antamia arvioita. Tämä yhdistetään teknisten velkojen luetteloihin sekä niiden viitekoodeihin. Työkalujen avulla saat tarkan arvion sen korjaamiseen tarvittavasta ajasta.
Arvioimalla teknisen velan saat käsityksen siitä, kuinka monta päivää teknisen velan korjaaminen kestää. Mitä enemmän velkoja on, sitä kauemmin sen korjaaminen kestää.
Teknisten velkojen ratkaiseminen
Entä jos sinulla on teknisiä velkoja ja et tiedä mitä tehdä? Voit suorittaa tiettyjä toimenpiteitä teknisten velkojen hoitamiseksi.
Ensinnäkin sinun tulee tunnustaa, että tekniset velat ovat olemassa, ja ilmoittaa sama tiimillesi. Kommunikoinnissa sinun tulee tehdä selväksi, mitä on tapahtunut ja mitä on tehtävä sen korjaamiseksi. Sinun tulee varmistaa, että kerrot selkeästi tarpeesta hoitaa tekninen velka mahdollisimman pian.
Kun olet ilmoittanut tiimillesi teknisistä veloista, voit valita kolmella tavalla. Ensimmäisessä lähestymistavassa voit päättää jatkaa järjestelmää sellaisena kuin se on. Tässä skenaariossa sovellusta käytetään sellaisenaan.
Vaihtoehtoisesti voit päättää muuttaa sovelluksen. Refaktorointi tehdään sovelluksen monimutkaisuuden vähentämiseksi sekä sovelluksen rakenteen puhdistamiseksi. Refaktoroinnin myötä ohjelmiston käyttäytyminen ei muutu; ainoa osa, joka vaikuttaa, on sisäinen rakenne.
Lopuksi, jos edellä mainitut kaksi vaihtoehtoa eivät toimi, sinun on korvattava koodi kokonaan. Yksi ongelma tässä on, että se voi johtaa uusiin teknisiin velkoihin, mutta se voisi olla parempi kompromissi pitkällä aikavälillä.
Teknisten velkojen välttäminen tulevaisuudessa
Tietenkin on turhaa, että teknisten velkojen välttäminen on ehdottomasti älykkäämpää kuin yrittää korjata niitä, kun niitä syntyy. Sen lisäksi, että se säästää sekä aikaa että stressiä, se myös varmistaa, että teknisten velkojen alusta alkaen aiheutuvat jäljelle jäävät seuraukset ovat poissa.
Voidaan väittää, että tekniset velat eivät sinänsä ole huonoja. Ne ovat yleensä ongelmallisia, koska ne ovat velkoja, jotka on maksettava takaisin, eivätkä ihmiset ole vastuullisin laji maan päällä. Jatkuvasti heikomman vaihtoehdon valitseminen heikentää yleensä ohjelmistosi vahvuutta ja vaikeuttaa toimintojen parantamista myöhemmin. Kaiken kaikkiaan teknisten velkojen välttäminen on paras vaihtoehto kenelle tahansa.
Joten miten estät teknisten velkojen syntymisen:
Luo projektien lopputulos
Ajatuksena tässä on pitää kaikki ajan tasalla prosessista ja nostaa heidät vauhtiin minkä tahansa suoritettavan tehtävän vaatimusten kanssa. Kun luot ruuhkan, kaikki näkevät tekemättä jääneet tehtävät ja polut niiden saavuttamiseksi.
Aseta laatu etusijalle nopeuden sijaan
Jos olet itse ohjelmoija, sinun on opittava priorisoimaan laadukkaan työn tekeminen suuren työn sijaan. Varmista, että koodisi ovat puhtaita ja että sovelluksesi tai muut ohjelmistosi on kehitetty täydellisesti. Ymmärrä, että kiusaus käyttää pikakuvakkeita ei ole sen arvoista, koska lopulta joudut silti suorittamaan luopumasi tehtävät.
Jos johdat tiimiä, sinun on viestittävä nämä samat arvot tiimin jäsenille. Jäseniä tulisi opettaa luomaan tuloshakuisia ratkaisuja ja välttämään pikakuvakkeita.
Luoda tietoisuutta
Yleensä syvällinen tietämys siitä, mitä tekninen velka on ja miten se voidaan välttää, voi olla hyödyllistä, jotta voidaan estää niiden syntyminen. Kun varustat kehittäjäsi tarvittavalla tiedolla, he välttävät paremmin teknisten velkojen ansoja.
Esittele hyviä koodauskäytäntöjä
Jotkut koodauskäytännöt tekevät teknisestä velasta todennäköisemmin joutumatta. Näin ollen olisi hienoa välttää tiukkaa kytkentää, käyttää abstraktiota ja refaktorointia.
Esittele päivitetty tekniikka
Säännölliset tekniikan päivitykset voivat olla erinomainen keino ennaltaehkäistä teknisiä velkoja. Päivityksessä on varmistettava, että käytössä on uusin kehys, tietokannat ja sovellusohjelmistot.
Johtopäätös
Tekniset velat ovat useimmissa tapauksissa väistämättömiä, kunhan jatkat ohjelmien kehittämistä ja koodien kirjoittamista. Niiden esiintymisen todennäköisyys voi kuitenkin pienentyä huomattavasti, kun noudatetaan yllä lueteltuja vaiheita. Myöskään teknisten velkojen sattuessa kaikki toivo ei ole menetetty. Pysy rauhallisena, ole varma, toimi sen mukaisesti.