Väitteet eivät kestä todellisuutta
Yleensä väitteet eivät selviä kontaktista todellisen maailman datan kanssa. Se on osa ohjelmistosuunnitteluprosessia päättää, mitä tietoja haluat käsitellä ja mitkä ovat soveltamisalan ulkopuolella.
Sykliset perhekaaviot
Suku "puista" (itse asiassa ne ovat täydellisiä kaavioita, mukaan lukien syklit), on mukava anekdootti:
Menin naimisiin lesken kanssa, jolla oli aikuinen tytär. Isäni, joka vieraili meillä usein, rakastui tyttärepuoleni ja meni naimisiin hänen kanssaan. Tämän seurauksena isästäni tuli poikani ja tyttärestäni äitini. Jonkin ajan kuluttua annoin vaimolleni pojan, joka oli isäni veli, ja setäni. Isäni vaimo (joka on myös tyttäreni ja äitini) sai pojan. Tuloksena sain veljen ja pojanpojan samassa henkilössä. Vaimoni on nyt isoäitini, koska hän on äitini äiti. Olen siis vaimoni aviomies ja samalla vaimoni pojanpoika. Toisin sanoen olen oman isoisäni.
Asiat muuttuvat vieläkin kummallisemmiksi, kun otat huomioon korvikkeet tai "sumean isyyden".
Kuinka käsitellä sitä
Määritä syklit soveltamisalan ulkopuolelle
Voit päättää, että ohjelmistosi ei käsittele tällaisia harvinaisia tapauksia. Jos tällainen tapaus ilmenee, käyttäjän tulee käyttää toista tuotetta. Tämä tekee yleisempien tapausten käsittelystä paljon vankempaa, koska voit säilyttää enemmän väitteitä ja yksinkertaisemman tietomallin.
Lisää tässä tapauksessa ohjelmistoosi hyviä tuonti- ja vientiominaisuuksia, jotta käyttäjä voi tarvittaessa helposti siirtyä toiseen tuotteeseen.
Salli manuaaliset suhteet
Voit antaa käyttäjän lisätä manuaalisia suhteita. Nämä suhteet eivät ole "ensiluokan kansalaisia", eli ohjelmisto ottaa ne sellaisenaan, ei tarkista eikä käsittele niitä päätietomallissa.
Käyttäjä voi sitten käsitellä harvinaisia tapauksia käsin. Tietomallisi pysyy silti melko yksinkertaisena ja väitteesi säilyvät.
Ole varovainen manuaalisten suhteiden kanssa. On houkutus tehdä niistä täysin konfiguroitavissa ja luoda siten täysin konfiguroitavissa oleva tietomalli. Tämä ei toimi: Ohjelmistosi ei skaalaudu, saat outoja bugeja ja lopulta käyttöliittymä muuttuu käyttökelvottomaksi. Tätä estomallia kutsutaan "pehmeäksi koodaukseksi" ja "Päivittäinen WTF" on täynnä esimerkkejä tästä.
Tee tietomallistasi joustavampi, ohita väitteet, testaa invariantteja
Viimeinen keino olisi tehdä tietomallistasi joustavampi. Sinun pitäisi ohittaa melkein kaikki väitteet ja perustaa tietomallisi täydelliseen kaavioon. Kuten yllä oleva esimerkki osoittaa, on helposti mahdollista olla oma isoisäsi, joten sinulla voi olla jopa kiertoja.
Tässä tapauksessa sinun tulee testata ohjelmistoasi perusteellisesti. Sinun piti ohittaa melkein kaikki väitteet, joten on olemassa hyvä mahdollisuus lisävirheille.
Käytä testidatan generaattoria tarkistaaksesi epätavalliset testitapaukset. Haskell, Erlang tai C. Javalle/Scalalle on olemassa ScalaCheck ja Nyaya. Yksi testiidea olisi simuloida satunnaista populaatiota, antaa sen risteytyä satunnaisesti, antaa ohjelmiston sitten ensin tuoda ja viedä tulos. Odotuksena olisi, että kaikki lähdön liitännät ovat myös tulossa ja toisinpäin.
Tapausta, jossa ominaisuus pysyy samana, kutsutaan invariantiksi. Tässä tapauksessa invariantti on joukko "romanttisia suhteita" simuloidun populaation yksilöiden välillä. Yritä löytää mahdollisimman paljon invariantteja ja testaa niitä satunnaisesti luoduilla tiedoilla. Invariantit voivat olla toiminnallisia, esim.
- setä pysyy setänä, vaikka siihen lisätään "romanttisia suhteita"
- jokaisella lapsella on vanhempi
- kahden sukupolven väestöllä on vähintään yksi isovanhempi
Tai ne voivat olla teknisiä:
- Ohjelmistosi ei kaatu 10 miljardin jäsenen kaaviossa (riippumatta siitä, kuinka monta yhteenliittämistä)
- Ohjelmistosi skaalautuu O:lla (solmujen määrä) ja O (reunojen lukumäärä^2)
- Ohjelmistosi voi tallentaa ja ladata uudelleen jokaisen perhekaavion jopa 10 miljardiin jäseneen asti
Suorittamalla simuloituja testejä löydät paljon outoja kulmakoteloita. Niiden korjaaminen vie paljon aikaa. Lisäksi menetät paljon optimointeja, ohjelmistosi toimii paljon hitaammin. Sinun on päätettävä, onko se sen arvoista ja kuuluuko tämä ohjelmistosi piiriin.
person
stefan.schwetschke
schedule
26.01.2015