Duomenų bazių testavimas

Prieš keletą dienų užtikau patikusį straipsnį apie automatizuotus duomenų bazių testus. Programiniam kodui jau senokai tapo įprastinė praktika rašyti testus, bet duomenų bazių struktūra testuojama ne visada. Tiesa, gerai sutvarkytoje duomenų bazėje įmanoma sudėti daug saugiklių: stulpeliams uždėti apribojimus, išorinius raktus ir panašiai, tačiau bendras požiūris į duomenų teisingumą bei validumą vis tiek reikalingas.

Autorius siūlo duomenis testuoti trijose vietose: pirminių šaltinių lygyje, tik juos sukėlus į duomenų bazę ir jau po verslo logikos transformacijų. Šis testų sąrašas atrodo visai nebloga pradžia:

  • Ar visi pirminiai raktai lentelėse unikalūs?
  • Ar [svarbiame stulpelyje] nėra null reikšmių?
  • Ar visi išoriniai raktai egzistuoja lentelėse kaip pirminiai raktai (be dublikatų, ir pan. – referencinis integralumas)?
  • Ar skaitinės duomenų reikšmės neiššoka iš tikėtino reikšmių rėžio?
  • Ar agreguoti duomenys atitinka detalesnių duomenų informaciją (ar čekio suma atitinka atskirų prekių sumai čekyje)?
  • Ar yra visi stulpeliai, kurie bus naudojami galutinėse lentelėse?
  • Ar įmanoma be klaidų paleisti dažniausiai pasitaikančias verslo užklausas?

Dar prie šio sąrašo pridėčiau patikrinimą, ar eilučių kiekis įvairiose duomenų bazės lentelėse yra toks, koks ir tikėtasi – labai dažnai dėl kokios nors lentelių jungimo klaidos duomenys susidublikuoja.

Rožės monitoringas su Raspberry

Noriu pasigirti: žmonos paskatintas pirmą kartą su Raspberry Pi nuveikiau kažką sudėtingesnio nei vien tik pajungiau prie jo kamerą. Jai paklausus, ar nebūtų įmanoma sukonstruoti kokio nors prietaiso, stebinčio rožės dirvos temperatūrą, suėmė savotiškas azartas, ir jau kitą dieną stovėjau prie visiškai neaiškių daiktų kupinos vitrinos elektronikos komponentų parduotuvėje. Kažkokie sensoriai, laidukai, mikroschemos, montažinės dėžutės, rezistoriai ir kiti ten parduodami dalykai – nieko nesuprantu, nieko nežinau. Ar čia man reikia to, ar kito, ar skiriasi kuo DHT-22 nuo DHT-11, kokių ir kiek man reikia rezistorių (o jų iš vis pasirodo reikia?), o jei neturite BCM3008 mikroschemos kur Youtube mačiau kad man reiks, tai ar tiks kas nors kitas? Sakot ADC1115? Jei reiktų apie Hėgelio filosofiją pasikalbėti čiuvašų kalba, manau, kad jausčiausi pasimetęs mažiau nei toje elektronikos parduotuvėje atsakinėdamas į konsultanto klausimus.

Sistemos bandymai

Visgi nukovęs glėbį keistų komponentų, pergalėjau save, praleidau kelis vakarus prie įvairiausių forumų bei straipsnių internete ir sukonstravau kažką veikiančio. Prie Raspberry prijungiau oro temperatūros ir drėgmės jutiklį (net kažkiek apygraibomis supratau, kodėl dar prie jo reikia pajungti rezistorių) ir dirvos drėgmės sensorių. Pastarasis duoda analoginį signalą, tad reikėjo prijungti ir analoginio-diskretinio signalo konvertavimo mikroschemą. Kol kas dar jos nelitavau, tad bet koks sujudinimas dažniausiai reiškia, jog vėl kažkas nusimušė. Buvo šiek tiek vargo.

Nustebau, kad visgi tie visokie su geležimi ir mikroschemomis susiję dalykai buvo ganėtinai nesudėtingi – programavimas tikriausiai sunkiau įveikiamas niekada su tuo nesusidūrusiems. O čia tik reikia teisingai sujungti laidukus, nieko sudėtingo. Ir dar gauni tam tikrą pasitenkinimą, kai matai, jog fiziškai tavo padarytas daiktas veikia.

Viso to pasekmė: rožės monitoringo svetainė, kurioje beveik realiu laiku galima matyti balkone esamą oro temperatūrą, santykinę drėgmę ir dirvos „prilaistymo“ procentą. Pastarasis kol skaičiuojamas gana komplikuotai, mat daviklis duoda įtampą, pagal kurią sukalibruoti drėgnumą reikia pačiam: 100 proc. buvo tik dirvą paliejus, o 0 proc atitiko sensoriaus įtampą jį ištraukus iš dirvos. Tikėtina, kad kažkur ties 50 proc drėgnumu jau galima bus siųsti įspėjimą, jog rožę reikia vėl laistyti. Matyt, reikės ir kitų korekcijų: dieną kylant temperatūrai, dirvos pralaidumas elektrai didėja, tad sensorius mano, jog dirva tampa drėgnesnė.

Sujungtos mikroschemos

Naudotos detalės: ADC1115 mikroschema, DHT–22 temperatūros sensorius, YH–69 dirvos sensorius, Raspberry Pi B series.