Yksikkö 9 / 11

Regressiotestaus, testien ylläpito ja hauraiden testien torjunta

Voitot:

  • Ymmärtää regressiotestauksen tarkoituksen ja osaa valita testejä ja tuottaa regressiotapauksia tekoälyn muutosten mukaan
  • Kyky diagnosoida hauraiden testien perimmäiset syyt (ajoitus, tilausriippuvuus, jaettu tila, ulkoinen riippuvuus) ja soveltaa pysyviä ratkaisuja oiretta tukahduttamatta
  • Kyky ylläpitää kurinalaisuutta täyden paketin esijulkaisun suorittamisesta samalla kun regressiosarja pysyy nopeana, riippumattomana ja luotettavana eliminoimalla päällekkäiset testaukset

Ohjelmisto muuttuu jatkuvasti; Jokainen uusi ominaisuus, jokainen korjaus voi rikkoa jotain aiemmin toiminutta. Aiemmin toimineen toiminnon myöhempää häiriötä kutsutaan regressioksi. Regressiotestaus testaa olemassa olevia toimintoja uudelleen jokaisen muutoksen yhteydessä näiden heikkenemien havaitsemiseksi. Ajan myötä nämä testipaketit kasvavat – tuhansia testejä – ja kaksi suurta ongelmaa syntyy: sarja hidastuu ja epäluotettavat testit – epäluotettavat testit, jotka joskus läpäisevät ja joskus epäonnistuvat samassa koodissa – tuhoavat tiimin luottamuksen testituloksiin. Tekoäly (AI) on tehokas apuväline pitämään regressiosarja hyvin hoidettuna, nopeana ja luotettavana. Mutta keskeinen varoitus säilyy: vaikka tekoäly voi tarjota "päästyä läpi" hauraan testin, se voi usein tuottaa korjaustiedoston, joka peittää todellisen virheen. Sinun tehtäväsi on löytää epävakauden perimmäinen syy, ei tukahduttaa oireita.

Hauraiden testien syyt

Hauras testaus on salakavalin testausongelma: se on epäluotettavaa, meneekö se läpi vai epäonnistuu, mikä työntää tiimin tapaan "sen on täytynyt juuttua uudelleen, suorita se uudelleen" - ja tämä tapa jättää eräänä päivänä huomiotta todellisen virheen "hiutaleeksi". Tärkeimmät perimmäiset syyt:

  • Ajoitus/kilpailun kunto: Testi tarkistaa tuloksen odottamatta toimenpiteen päättymistä. Yleisin syy.
  • Tilausriippuvuus: Testit riippuvat toistensa jättämistä tiedoista; Se katkeaa, kun järjestys muuttuu.
  • Jaettu tapaus: Useat testit käyttävät samoja testitietoja/käyttäjää, ristiriitaisia.
  • Ulkoinen riippuvuus: Todellinen verkko, kolmannen osapuolen palvelu, järjestelmäaika, satunnainen arvo.
  • Ympäristöero: Vaihtaa paikalliseen, pysyy CI:ssä (jatkuva integraatioympäristö).
Varoitus: Hauraan testin läpäiseminen "yrittämällä uudelleen muutaman kerran" peittää usein todellisen samanaikaisuusvirheen. Uudelleenyritys on diagnostinen työkalu, ei hoito. Etsi ensin perimmäinen syy; Käytä uudelleenyritystä vain viimeisenä keinona dokumentoituun, todella ulkoiseen epävakauteen.

Testihuolto: pakkauksen pitäminen terveenä

Regressiosarja on kuin puutarha; Jos sitä ei hoideta, rikkaruohot valtaavat. AI auttaa kolmessa ylläpitotehtävässä:

1. Kaksinkertainen/tarpeeton testipuhdistus. Ajan myötä suuri määrä tapauksia kerääntyy testaamaan samaa asiaa. Tekoäly ehdottaa samanlaisten testien ryhmittelyä ja yhdistämistä.

2. Hauras testidiagnoosi. Annat tekoälylle testikoodin ja epävakauskuvion; ehdottaa mahdollisia perimmäisiä syitä ja pysyvää ratkaisua.

3. Testin valinta/priorisointi. On kallista ajaa koko paketti jokaisen muutoksen yhteydessä. Testin vaikutusanalyysin avulla (vain asiaankuuluvien testien valinta muuttuneen koodin perusteella) tekoäly suosittelee, mitkä testit tulisi suorittaa ensin. Täysi ennakkojulkaisupaketti on kuitenkin pakollinen.

Karanteeni: herkän testauksen hallinta

Olet huomannut, että testi on hauras, mutta sinulla ei ole aikaa korjata perimmäistä syytä heti. Mitä tehdä? On kaksi väärää tapaa: poistaa testi kokonaan (tätä käyttäytymistä ei enää säilytetä ollenkaan) tai hiljentää se uudelleenyrityksellä (peittää todellisen virheen). Oikea tapa on asettaa karanteeni (erottamalla herkkä testi väliaikaisesti pääpaketista ja seuraamalla sitä erillisessä luettelossa). Karanteenitestaus ei estä versioiden yhdistämistä, mutta jää näkyväksi velaksi ja siihen puututaan säännöllisesti. Kriittinen kohta on tämä: karanteeni on odotushuone, ei roskakori. Jos karanteenilista kasvaa, tämä on hälytys siitä, että tiimin testien kunto heikkenee. Tekoäly voi ajoittain tarkistaa karanteeniluettelosi ja ryhmitellä sen perimmäisten syiden mukaan. Se mahdollistaa kollektiiviset ratkaisut paljastamalla yleisiä syitä, kuten "kaikki 6 testiä on yhdistetty samaan jaettuun testikäyttäjään".

Vinkki: Lisää "omistaja" ja "viimeinen tarkastelupäivä" jokaiseen karanteenitietueeseen. Hylätty karanteeni muuttuu pysyväksi kaatopaikaksi; Hauraat testit elävät siellä ikuisesti, koska kukaan ei välitä.

Regressiostrategiataulukko

Tila

strategia

AI:n rooli

pieni korjaus

Vaikutusalue + savutesti

Valitse asiaankuuluvat testit

uusi ominaisuus

Liittyvä moduuli + integrointi

Ehdota uusi regressiotapaus

iso reaktori

Täysi regressiopaketti

Kattavuusvaje-analyysi

ennakkojulkaisu

Täysi paketti + tutkimus

Prioriteetti- ja kestoarvio

Kiireellinen live-korjaus

Keskittynyt + kriittinen polku

Minimi turvallinen testisarja

Heikko kehote / Vahva kehote

Heikko: "Tämä testi epäonnistuu joskus, korjaa se."
Vahva: "Tämä testi epäonnistuu kolmella kymmenestä suorituksesta, koodi muuttumaton. Diagnosoi epävakauden perimmäinen syy: voi olla ajoitus/rotu, järjestysriippuvuus, jaettu tila, ulkoinen riippuvuus tai ympäristön ero. Näytä mikä testirivi osoittaa kuhunkin mahdolliseen syyn. Ehdota pysyvää ratkaisua; ÄLÄ ehdota oireita vaimentavaa ratkaisua, kuten [testaa 'advoidry' selkeästi 'add.] Virhejälki: [loki]."

Tehokas kehote; ohjaa diagnoosin perimmäiseen syyyn ja kieltää nimenomaisesti oireiden tukahduttamisen.

Neljä kopioitavaa mallia

1) Hauras testidiagnoosi:

Tämä testikoodi joskus läpäisee ja joskus epäonnistuu ilman muutoksia. Listaa perimmäiset syyehdokkaat (rotu, järjestysriippuvuus, yhteinen tila, ulkoinen riippuvuus, kello/satunnainen, ympäristön ero) ja näytä kunkin testin todisteet. Ehdota pysyvää ratkaisua; merkitse estävä ratkaisu, kuten yritä uudelleen viimeisenä keinona ja perustellusti. Testi: [koodi] / Epävakausmalli: [kuinka monta kertaa kuinka monessa ajossa]

2) Regressiotapauksen ehdottaminen:

Tehtiin seuraava muutos: [muutos/PR-yhteenveto]. Lista NYKYISET käyttäytymiset, jotka tämä muutos rikkoisi, ja ehdota jokaiselle regressiotestitapausta. Korosta erityisesti sivuvaikutuksia ja jaettuja riippuvuuksia.

3) Kaksoistestin puhdistus:

Tutustu alla olevaan testisarjaan. Ryhmittele päällekkäiset tai päällekkäiset tapaukset, jotka testaavat samaa toimintaa; Ehdota, mitkä minun pitäisi säilyttää ja mitkä yhdistää jokaiseen ryhmään. Varoita, jos on olemassa riski kattavuudesta. Testit: [luettelo/koodi]

4) Testitehosteen valinta:

Seuraavat tiedostot/toiminnot ovat muuttuneet: [luettelo]. Valitse ja perustele olemassa olevasta testipaketista ensin suoritettavat testit (ne, jotka liittyvät suoraan/epäsuorasti muutettuun koodiin). Huomaa: muistuta minua, että käytän edelleen koko esijulkaisupakettia.

kolme minilaukkua

Tapaus 1 – Todellinen virhe peitti Retry. Yksi tiimi lisäsi 3 uudelleenyritystä satunnaiseen jäljellä olevaan maksutestiin; Koe oli aina "läpäisevä" nyt. "Hauraan testidiagnoosin" soveltaminen totesi, että epävakaus johtui todellisesta kilpailutilanteesta: suurella kuormituksella maksun vahvistus käsiteltiin joskus kaksinkertaisesti. Retry peitti kuukausien ajan virhettä, joka olisi voinut johtaa todellisiin rahan menetyksiin livenä. Pääsyy korjattu, yritä uudelleen poistettu.

Tapaus 2 – Pakkaus kutistui, nopeus lisääntyi. 1 400 testin regressiosarja kesti 55 minuuttia. "Kaksoistestipuhdistuksella" 380 testiä osoittautui kaksoiskappaleiksi tai peitetyiksi; yhdistetty. Paketti pienennettiin 900 testiin, aikaa lyhennettiin 34 minuuttiin, kattavuus ei vähentynyt mitattavissa olevasti. Nopeampi palaute kannusti tiimiä testaamaan useammin.

Tapaus 3 – Tilausriippuvuus. Testi läpäisi aina paikallisesti, mutta se epäonnistuisi satunnaisesti CI:ssä. AI-diagnostiikka osoitti, että testi riippui toisen testin luomasta käyttäjästä, CI:ssä se katkesi, koska testit suoritettiin rinnakkain/eri järjestyksessä. Jokainen testi tehtiin oman datansa luomiseksi; Päättämättömyys on ohi.

Yleisiä virheitä

  • Herkän testin hiljentäminen yrittämällä uudelleen. Yritetään uudelleen etsimättä perimmäistä syytä; peittää todellisen virheen.
  • "Taas jumissa" -kulttuuri. Rutiininomaisesti huomioimatta punaisia ​​tuloksia; Eräänä päivänä todellisen virheen väliin.
  • Ei leikata pakettia ollenkaan. Päällekkäisten testien kasautuminen ja paketin hidastaminen.
  • Testien välinen riippuvuus. Testit perustuvat yhteiseen ehtoon/sekvenssiin; epävarmuuden lähde.
  • Testataan vain vaihdettua osaa ja ohitetaan koko paketti. Ennen julkaisua pikakuvake; Piilotetut sivuvaikutukset pakenevat.
  • Ulkoiseen riippuvuuteen luottaminen. Testit perustuvat todelliseen verkko/kello/satunnaisarvoon; luonnollisesti epävakaa.

Yhteenvetona

Regressiotestaus havaitsee muutokset, jotka rikkovat aiemmin toimineita toimintoja; Mutta pakettien kasvaessa hitaus ja hauraat testaukset heikentävät luottamusta. Herkän testauksen perimmäiset syyt ovat yleensä ajoitus, tilausriippuvuus, jaettu tila ja ulkoiset riippuvuudet. Tekoäly on tehokas apu diagnosoinnissa, puhdistuksessa ja testien valinnassa; Mutta päättämättömyyden tukahduttaminen uudelleenyrityksellä peittää todelliset virheet. Etsi perimmäinen syy, tee testeistä riippumattomia ja deterministisiä, karsi pakettia säännöllisesti, suorita koko paketti ennen julkaisua.

Sovellustehtävä

Valitse omasta projektistasi testi, jonka tiedät olevan hauras (tai epävakaalta). Poimi perussyyehdokkaat ja tarkista testin todisteet "hauras testidiagnoosi" -mallilla. Tunnista perimmäinen syy ja ota käyttöön pysyvä ratkaisu yrittämättä uudelleen. Valitse sitten paketistasi 10 testiä ja etsi ne, jotka voidaan yhdistää "kaksoistestien puhdistukseen". Ilmoita kuinka monta testiepävakautta ratkaisit niiden perimmäisestä syystä ja kuinka monta tarpeetonta tapausta poistit sarjasta.

tarkistuslista

  • [ ] Olen diagnosoinut herkän testin perimmäisen syyn; En tukahduttanut oiretta.
  • [ ] Pidin Retryä oikeutettuna viimeisenä keinona, en parannuskeinona.
  • [ ] Tein testeistä riippumattomia ja deterministisiä (eristetty ulkoisista riippuvuuksista).
  • [ ] Karsisin päällekkäiset/tarpeettomat testit regressiosarjasta.
  • [ ] Päätin testata muutoksen perusteella, mutta suoritin koko paketin esijulkaisun.
  • [ ] Suhtauduin kaikkiin punaisiin vakavasti "uudestaan ​​jumissa, ohita" -kulttuuria vastaan.