Testene koster mer enn de smaker? Ole Morten Amundsen

Slides:



Advertisements
Liknende presentasjoner
Nedlasting av apper på Apple
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Tilpasse spørringer i RT Kolonnetilpassninger Egne spørringer Legge spørring til forside Legge spørring til Dashboard.
Tabeller av objekter Klassen ArrayList
TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway.
Del 2: Personlig økonomi.
Elevenes røst 3 Omar Mekki, IMTEC.
Au2Pc med kortleser TPpay. Hurtigbruksanvisning.
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
Hva var egentlig spørsmålet? Johannes Brodwall. FitNesse eksempel #1.
”Verifiser Forventet Funksjonalitet”
Unit testing Gruppe 2: Kjartan Haugen Jon Gunnar Bjørkmo
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
JavaOne 2006 Markus Bjartveit Krüger
Om smidig brukerkommunikasjon Smidig 2011 Johannes Brodwall Steria Norway.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering Objektorientert systemutvikling
Objektorientert programmering i PHP del 2
Del 2: Personlig økonomi.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Den store ID-quizen Hvem er du? - Ta testen nå!.
Databasehåndtering med MySQL
© Lars-Erik Kindblad.  Et platformuavhengig verktøy for å automatisere build prosesser.  Støttes og drives av Apache Software Foundation.  Kommer ferdig.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
En gang til!? .
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Web-applikasjoner Prosjekt3 Logging Gruppe 9 Malik Muhammad Naeem Kevan Qureshi.
Mange IT-prosjekter kunne med fordel vært drevet mer som en Lean Startup.
  © Steria FitNesse som nyttig verktøy Smidig FitNesse som nyttig verktøy Anders Vindvad.
Design Patterns Iterator & Mediator. Gruppe 8 Presentasjonsgruppe:Resten av gruppen: Marianne AtesAndrè Johansen Tom Vidar LundeHege-Kristin Johansen.
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Objektorientert programmering
Tema: Test First Positivist: Det som ikke kan måles, eksisterer ikke! Reduserer sjanser for defekter! Gir en oppdatert ”TODO-liste” Gir trygghet til å.
Opplev smidig programmering
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
De 100 mest brukte ordene i bøker i klasse..
Implementering av caching ved hjelp av Spring Christian Vestøl
DATABASE: Oppgave 2 et medlemsregister for en idrettsklubb med flere idrettsgrener (fotball, håndball, osv). klubben ønsker å lagre informasjon om medlemmenes.
Fitnesse i PDMT 05. mai 2008 Finn-Robert Kristensen Systemarkitekt.
Onsdag 13. mars Sam Eyde vgs
Harmoni mellom teknologi og metodologi = økt produktivitet. Av Henrik Larsen Toft Takk til veileder: Lars-Petter Helland.
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Fiks dine egne tilgangsgrupper Gyda Kjekshus Seksjon for interne støttetjenester, USIT.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
Telenors satsing på fri programvare Paul Skrede - GoOpen 2009.
Android-Programmering Våren Oversikt Ytelse vs responsivitet Strategier for og opprettholde responsiviteten Tråder Asynchronous Task.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Kapittel 6 Kveldsmat hos familien Dalilah.
Upload av bildefiler Utdrag fra ImageIn Ved Kirsten Klæbo Tirsdag 25/11-03.
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 6 Kveldsmat hos familien Dalilah.
Android Programmering 10 timers kurs. Forutsetninger Noe bakgrunn i Java eller et annet objektorientert språk Litt peiling på XML Vi bruker Windows 7.
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
Ә.Тәжібаев “Сырдария ” өлеңі ашық сабақ 7-сынып
BilSalg klassedatastruktur Bil klassedatastruktur
Екпетал мектеп – балабақшасы Ана тілі 2 класс Өткізген: Г
“Сыни тұрғыдан ойлауға оқыту” модулі сабақтар топтамасында орындаған: бастауыш сынып мұғалімі:Алимбаева Алмаш Иренгалиевна санаты ІІ.
BilSalg klassedatastruktur Bil klassedatastruktur
Коучинг тақырыбы: “Оқыту мен оқудағы жаңа әдіс-тәсілдер”
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Testene koster mer enn de smaker? Ole Morten Amundsen

Et typisk prosjekt  Prodkode (src/main/)  Database (schema)  ORM (jpa, hibernate)  Test (src/test/)  Testdata Eks. Sak med navn  private String name;  "name" varchar2 (100)  new Sak("nn"); assertEquals("nn", sak.getName());  insert into Sak values('1','nn',..)

Endring av name til description er enkelt.

Hva med å endre relasjoner?  Prodkoden, den ekte, kjørende koden er relativt rask å endre.  (Om du følger practices som DDD, DRY og KISS) public = "SAK_ID") private Sak Sak;.. }

Hva med testene?  Har du mange tester? Opprettet Sak og Vedtak hundrevis av steder med new XX osv?  Har du testet mange permutasjoner? Masse insert-scripts for å teste DB, orm o.l?  Hva med integrasjonstester? FitNesse? Må disse og endres?  En slik refaktoring krever at ALT må fikses samtidig, før innsjekk.  Alt: Prodkode, orm, db OG alle tester og alle testdata.

Konsekvens  Tid fra utsjekk til innsjekk =.. lang  Andre kan ikke jobbe samtidig i berørt kode  Nattarbeid  Snarveier for å bli ferdig  Store feilkilder  Eller, du prøver å omgå det for unngå smerten.  Du bare jobber deg rundt og leverer story points som forventet. Applauderes for leveransedyktighet

JA Koster testene mer enn de smaker?  Hvorfor har vi automatiserte tester?  Høy utviklingshastighet! ??  Er nettoverdien av tester positiv? Er nettoverdien av tester positiv?

Hvorfor skriver vi tester?  Det jeg lager idag, skal også fungere i morgen  Kodekvalitet (TDD/BDD)  Lappverk starter så fort noen ikke tør endre eksisterende kodesnutter. Tester gir trygghet.  Felles forståelse.  Beskrivelse av oppførselen til systemet  Robust kodebase.  Redusere behov for kostbar manuell testing.  Høy utviklingshastighet, over tid (ikke bare i begynnelsen!).

Investér i testkvalitet!  Ut med insert-scripts! Absolutt alt, bort!  Ut med new i testene dine.  Inn med DRY, KISS, Object Mother (Builder Pattern) og/eller Factory Pattern  (Opsjon) Inn med in-memory database for testene. (f.eks hsqldb)

Ut med new i tester. Builder Pattern, Object Mother, Factory public void skalKunneVedtaISak(){ //factory pattern Sak sak = ObjectMother.createSak(); sak.vedta(Vedtak.GODKJENT); assertTrue(sak.hasVedtak()); = {IllegalStateException.class}) public void enSakKanKunHaEttVedtak(){ //object mother pattern, factory pattern Sak sak = ObjectMother.createSakMedVedtak(); sak.vedta(Vedtak.GODKJENT); = {IllegalStateException.class}) public void enSakKanKunHaEttVedtak2(){ //Builder pattern Sak sak = BuilderPattern.createSak().withVedtak(); sak.vedta(Vedtak.GODKJENT); }

Ut med insert scripts  Insert-scripts er kostbart vedlikehold. insert into Sak values('1','nn',..) insert into Sak values('2','nn1',..).. insert into Sak values('100','nn2',..)  Men hvordan teste db og orm uten dem?

@ContextConfiguration ("spring_test.xml") public class TestDBVedtakOnSak extends AbstractDbTests private SakService sakService; private Sak public void opprettTestData(){ sakMedVedtak = super.persist(ObjectMother.createSakMedVedtak()); public void skalKunneHenteVedtakFraEnSakIDB(){ Vedtak vedtak = sakService.hentVedtakFraSak(sakMedVedtak.getId()); assertNotNull(vedtak); } public abstract class AbstractDbTests extends AbstractTransactionalJUnit4SpringContextTests private SakRepository repository; public Sak persist(Sak sak){ return repository.persist(sak); }

Databasetestdataene vedlikeholder seg selv!  Object Mother klassene er delt med resten av testene, ikke kun db-testene.  Du ser også hva som blir lagret, slik at du bedre kan teste mot det.

Egen erfaring: 400 tester inkl db på 15 sek, det er vel ok? Med spring, hibernate og in-memorydatabasen hsqldb Jeg deltok i gjennomføring av flere store refaktoreringer som følge av at ny informasjon kom på bordet. Raskt og robust! Testkjøring

Det er alltid trade-offs  Dine tester og dine builders må kontinuerlig pleies og vedlikeholdes!  Manuell testing for å dekke evt tapt insert-script testverdi  Testledere liker tester. Om flere permutasjoner:  Verdien av den enkelte test faller  Kostnaden med testvedlikehold øker  Skjæringspunktet er flyktig.  Du vil betale skyhøye renter for snarveiene dere har tatt tidligere, selv om du «måtte» for å nå en sprint-deadline.

Gode tester hjelper deg å være smidig! betyr alliert. Stol på oss !

Referanser