Automaatio3 min luettavaa

Plus katosi, ja luku kasvoi tuhatkertaiseksi

Muodollisesti kelvollinen luku voi olla täysin mahdoton, eikä yksikään muototarkistus huomaa sitä. Näin kirjoitat ajoon yhden säännön siitä, mikä sinun datassasi ei voi olla totta.

Plus katosi, ja luku kasvoi tuhatkertaiseksi

Taulukon soluun oli kirjoitettu kaksi lukua ja niiden väliin plusmerkki. Ihmiselle se on täysin selvä: Kokonaisuus koostuu kahdesta osasta, ja tähän on merkitty molemmat.

Olin rakentamassa verkkokaupan tuontitiedostoa taulukosta, johon hinnat ja kustannukset kootaan käsin. Tavallista tietotyötä, ja juuri siksi hyvä automatisoitavaksi: Sama tiedosto, sama muunnos, joka kerta. Jäsennin lukee solun, siivoaa siitä merkit joita se ei tunnista, ja palauttaa luvun.

Plusmerkki siivoutui muun ylimääräisen mukana. Luvut jäivät peräkkäin ja liimautuivat yhteen. Kustannus kasvoi tuhatkertaiseksi.

Miksi tällainen ei jää kiinni tarkistuksesta

Koska lopputulos on kelvollinen luku. Se on numero, se on positiivinen, se on oikeassa kentässä ja oikeassa muodossa. Jokainen muototarkistus päästää sen läpi, koska muodossa ei ole mitään vikaa. Vika on merkityksessä, eikä muotoa tarkistava kone tiedä merkityksestä mitään.

Tämä on eri virhelaji kuin puuttuva tieto. Tyhjä solu huutaa heti. Väärä luku ei huuda, koska se näyttää täsmälleen samalta kuin oikea. Tuonti olisi mennyt läpi ilman virheilmoitusta ja ilman varoitusta. Luku olisi tullut esiin vasta katelaskennassa, viikkoja myöhemmin, kun joku olisi ihmetellyt miksi yhden tuoteryhmän kate on mitä on.

Kone ei myöskään tiedä, että ihmiset kirjoittavat taulukoihin muutakin kuin lukuja. Soluun päätyy arvioita, yksiköitä, välihuomioita ja pieniä laskutoimituksia, koska taulukko on ihmisten työtila ennen kuin se on koneen lähde. Se ei ole virhe taulukossa. Se on tieto, jota jäsennin ei osaa lukea.

Mitä kirjoitin sääntöihin

  • Yksi mahdottomuus riittää alkuun. Kustannus ei saa koskaan ylittää myyntihintaa. Sääntö on typerän yksinkertainen eikä se kata kaikkea, mutta se on ainoa merkki joka paljastaa liimautuneen luvun ilman että kukaan laskee rivejä käsin.
  • Sääntö kuuluu ajoon, ei tarkistuslistaan. Jos mahdottomuuden huomaaminen jää ihmisen muistin varaan, se huomataan silloin kun ehditään. Koneen tekemänä se tapahtuu joka kerta, myös sinä kiireisenä päivänä jona kukaan ei katso tiedostoa läpi.
  • Siivoaminen on tulkintaa. Kun jäsennin poistaa kaiken mitä se ei tunnista, se poistaa joskus merkityksen ja jättää merkit. Turvallisempi ohje on kieltäytyä: Jos solussa on jotain muuta kuin pelkkä luku, älä siivoa sitä pois, vaan nosta rivi esiin.

Mitä se muutti

Tuntisäästöä tästä ei tullut, enkä keksi sellaista. Virhe jäi kiinni lopputarkastuksessa ennen ajoa, eli ennen kuin luku ehti mihinkään. Ilman sääntöä se olisi mennyt eteenpäin, ja seuraava paikka jossa se olisi näkynyt, on kate ja kassavirta. Sieltä käsin jäljittäminen takaisin yhteen taulukon soluun on aivan eri työ kuin varoitus ajon yhteydessä.

Isompi muutos oli siinä, mitä pidän tarkistuksena. Aiemmin tarkistin että data on oikeanmuotoista. Nyt tarkistan myös että se on mahdollista. Ne ovat kaksi eri kysymystä, ja vain jälkimmäiseen tarvitaan se, mitä kone ei voi tietää: Sinun alasi säännöt.

Kokeile tätä tällä viikolla

Ota yksi taulukko tai raportti, jota syötetään koneelle säännöllisesti. Kirjoita siitä yksi lause, joka kertoo mikä on juuri sinun datassasi mahdotonta. Kustannus ei ylitä myyntihintaa. Toimituspäivä ei ole ennen tilauspäivää. Kappalemäärä ei ole suurempi kuin varastossa oleva määrä. Yksi lause riittää aluksi, ja se kannattaa valita siitä kentästä jonka virhe maksaisi eniten. Sitten pyydä että ajo tarkistaa sen joka kerta ja pysähtyy, jos sääntö rikkoutuu. Se on muutaman rivin lisäys, eikä se hidasta mitään. Se vain siirtää löytymisen katelaskennasta siihen hetkeen, jossa virhe vielä on yhden solun kokoinen.