Vanhan ohjelman uudistaminen: näin se tehdään turvallisesti
Miten selvitän ohjelman, jota kukaan ei enää tunne, miten siirto etenee ja miten varmistetaan, että uusi tekee samat asiat kuin vanha.
Yksi tärkeä ohjelma, yksi vanha kone
Ohjelma on tehnyt työnsä 15–25 vuotta. Kaikki tietävät, että jonain päivänä se ei käynnisty. Et joudu määrittelemään mitään uudelleen, ensimmäinen askel on kiinteähintainen, eikä kaikkea aina tarvitse tehdä uusiksi.
Kymmenkunta ohjelmaa, ei kokonaiskuvaa
Räätälöidyt työkalut 2000-luvun alusta estävät palvelinuudistuksen tai ERP-vaihdon. Aloitetaan kartoituksella, joka laittaa ne järjestykseen riskin ja kustannuksen mukaan.
Miksi vanhaa ohjelmaa ei kannata vain pitää hengissä
"Toimii vielä" pitää paikkansa siihen päivään asti, kun ei toimi. Tyypillisiä tilanteita, joiden jälkeen aikaa on vähän:
- Kone hajoaa, tai Windows-versio, jolla ohjelma pyörii, ei enää saa tietoturvapäivityksiä. Windows 10:n tuki loppui lokakuussa 2025 ja Windows Server 2016:n loppuu tammikuussa 2027.
- Tietokantapalvelin, tulostin tai integraation toinen pää vaihtuu, eikä vanha ohjelma osaa enää puhua sen kanssa.
- Ainoa henkilö, joka osasi ohjelman kiertotiet, lähtee talosta.
- Tilintarkastaja, asiakas tai vakuutusyhtiö kysyy, miten laskenta on varmistettu.
- ERP-vaihto tai palvelinuudistus pysähtyy, koska yksi ohjelma ei siirry mukana.
Kiireessä tehty uusiminen on kallein mahdollinen. Ajoissa aloitettu on halvin.
Neljä mahdollista lopputulosta. Uusi ohjelma on vain yksi niistä.
Työ vaihe vaiheelta
1–2 h
muutama viikko · hyvitetään jatkosta
selvityksen perusteella
voit lopettaa milloin vain
hyväksynnän jälkeen
Miten ohjelma selvitetään, kun dokumentaatiota ei ole
Vanhan ohjelman määrittely on ohjelma itse. En pyydä sinua kirjoittamaan sitä uudelleen. Yhdistän neljä lähdettä:
Käyttäjä näyttää työn
Käyttäjä tekee tilauksen, laskee tarjouksen tai ajaa raportin niin kuin aina. Tallennan sen.
Lähdekoodi, jos sitä on
Käyn läpi, mitä koodi tekee, myös ne haarat, joita esittelyssä ei nähty. Tekoäly nopeuttaa tätä paljon, mutta jokainen löydös tarkistetaan.
Tietokanta ja tiedostot
Rakenne, triggerit, proseduurit ja vanha data kertovat, mitä ohjelma on oikeasti tehnyt vuosien varrella, poikkeukset mukaan lukien.
Käynnissä oleva ohjelma
Kun ohjelma on saatu käyntiin, sitä voi kokeilla: mitä tapahtuu, kun syöte on tällainen.
Lopputuloksena tuon sinulle konkreettisia väitteitä tarkistettavaksi:
Sinun on helpompi sanoa "kyllä, näin se on" tai "ei, se muutettiin 2015" kuin kirjoittaa vaatimusmäärittely tyhjästä. Harvinaiset tilanteet, kuten vuodenvaihteen ajot, virhetilanteet ja erikoisasiakkaat, etsitään erikseen, koska ne eivät näy yhdessä esittelyssä.
Miten varmistetaan, että uusi laskee samat tulokset kuin vanha
Ajan saman aineiston molempiin ohjelmiin eristetyissä ympäristöissä ja vertaan tulokset: lasketut arvot, pyöristykset, raportit ja tietokantaan syntyvät muutokset. Saat listan: nämä täsmäävät, näissä on ero, tästä syystä.
Kolme asiaa, jotka sanon suoraan:
- Vertailu todistaa vastaavuuden vain tutkituissa tapauksissa. Siksi aineisto kannattaa ottaa usealta vuodelta ja ottaa mukaan tunnetut erikoistapaukset.
- Vanhan ohjelman virheitä ei kopioida automaattisesti. Kun ero johtuu vanhan ohjelman virheestä, sinä päätät, kumpi on oikein.
- Uusi ohjelma tarvitsee lisäksi omat tietoturva-, suorituskyky- ja ympäristötarkistuksensa. Ne eivät sisälly vertailuun vaan tehdään erikseen.
Vertailussa käytetty aineisto jää sinulle. Sillä voi tarkistaa myös seuraavan version, toisen toimittajan tai toisen tekoälytoteutuksen.
Millaisia ohjelmia otan työn alle
Tekniikka valitaan tilanteen mukaan, esimerkiksi .NET ja React, tietokantana SQL Server tai PostgreSQL. Valinnan peruste on aina sama: laajasti osattua ja pitkään tuettua, jotta työtä voi jatkaa lähes mikä tahansa suomalainen ohjelmistotalo. Jos sinulla on oma toive tai talossa on jo jokin tekniikka, mennään sillä. Tarvittaessa ehdotan sopivaa vaihtoehtoa. Työpöytäohjelma voidaan tehdä työpöytäohjelmana, jos selain ei sovi käyttötilanteeseen.
Jos ohjelman voi korvata valmistuotteella halvemmalla, jos sen käyttö loppuu lähivuosina tai jos lähdekoodia ei ole eikä ohjelmaa saa käyntiin. Viimeisessä tapauksessa kyse on uuden ohjelman tekemisestä, ja sanon sen suoraan.
Tekoälyn rooli ja aineistosi käsittely
Mitä tekoäly tekee
Lukee ja selittää vanhaa koodia, ehdottaa sääntöjä, kirjoittaa uutta toteutusta. Se tekee työstä murto-osan siitä, mitä käsityönä menisi. Siksi pystyn tarjoamaan kiinteitä hintoja pienillekin ohjelmille.
Mitä tekoäly ei tee
Se ei päätä, mikä on oikein. Vaarallisin virhe tässä työssä on se, että tekoäly tulkitsee vanhan säännön väärin ja kirjoittaa samalla tulkinnalla sekä uuden toteutuksen että sen testit. Testit menevät läpi ja tulos on silti väärä. Siksi vertailun mittari on aina vanhan ohjelman todellinen tulos ja sinun vahvistuksesi, ei tekoälyn tulkinta.
Missä koodisi ja datasi käsitellään
- Sovitaan kirjallisesti ennen aloitusta, mitä aineistoa saa käsitellä tekoälypalveluissa.
- Tuotantodataa, henkilötietoja tai hintatietoja en lähetä malleille. Testaus tehdään anonymisoidulla tai keinotekoisella aineistolla, ellei toisin sovita.
- Käytän Anthropicin Claudea (Claude Code) ja OpenAI:n ChatGPT:tä asetuksilla, joissa aineistoa ei käytetä mallien kouluttamiseen. Palvelut käsittelevät aineistoa omilla palvelimillaan, jotka voivat sijaita EU:n ulkopuolella. Jos se ei sovi, aineistoa ei viedä ulkopuolisiin palveluihin lainkaan.
- Lähdekoodi ja tietokannat säilytetään työn ajan omassa, muista asiakkaista erotetussa ja salatussa ympäristössä. Ne poistetaan luovutuksen jälkeen, ellei ylläpidosta sovita erikseen.
- Jos lähdekoodia ei saa käsitellä ulkopuolisissa palveluissa lainkaan, sekin onnistuu. Hitaammin ja kalliimmin, mutta onnistuu.
Yhden hengen toimittaja. Mitä jos en ole käytettävissä?
Kysymys on aiheellinen, ja siihen kannattaa vaatia vastaus jokaiselta pieneltä toimittajalta. Minun vastaukseni:
Luovutus joka vaiheessa
Lähdekoodi on sinulla jokaisen vaiheen päätteeksi, ei vasta lopussa. Keskeneräistäkin työtä voi jatkaa.
Yleinen tekniikka
Valitut tekniikat pyritään pitämään yleisinä, esimerkiksi .NET ja React, joten ohjelmaa voi jatkokehittää kuka tahansa niiden osaaja. Et ole minusta riippuvainen.
Ei omaa alustaa, ei omaa tuotetta
Mitään ei ole lukittu minun järjestelmiini.
Jos sinulla on jo IT-kumppani, joka hoitaa infran, teen mielelläni töitä sen kanssa: he hoitavat ympäristön ja jatkuvan tuen, minä ohjelman selvityksen ja siirron.
Usein kysyttyä
En tiedä, millä kielellä ohjelma on tehty. Haittaako se?
Pitääkö kaikki tehdä uusiksi?
Menetetäänkö vanhat tiedot?
Mitä tämä maksaa?
Kuinka paljon minun tai työntekijöideni aikaa tämä vie?
Ohjelmassa on toimintoja, joita ei enää käytetä. Pitääkö nekin siirtää?
Meillä on useita ohjelmia. Miten laitat ne järjestykseen?
Miten tulokset tarkistetaan mitattavasti?
Voimmeko jatkaa toisen toimittajan kanssa kesken kaiken?
Miten toimit nykyisen IT-kumppanimme kanssa?
Käsitelläänkö lähdekoodimme tekoälypalveluissa?
Voiko uutta ohjelmaa kehittää eteenpäin?
Tarjoatko jatkuvaa ylläpitoa?
Seuraava askel
Ensimmäisessä keskustelussa osaan yleensä sanoa, kannattaako edetä ja mitä selvitys maksaa. Lähdekoodia ei tarvita vielä.