Permalänk
Hedersmedlem

Hur ser ni på testning?

Jag har varit på ett par arbetsplatser med ganska annorlunda kultur kring testning. På ena var det viktigt att det fanns testtäckning och att testerna är välutvecklade medan på det andra känns det som ett nödvändigt ont där man helst vill kunna presentera goda siffror men vilken kvalité testerna har är mindre viktigt. Man gör hellre fula hack för att få till ett test än att tänka igenom det.

Även på första stället fanns det en viss känsla av att testerna var något man lämnade till sist, de skulle förmodligen inte hitta något seriöst och det vara bara att göra klart. Det skulle dock fortfarande göras rätt.

Jag undrar hur ni andra ser på det och upplever kulturen kring testning. Tas det seriöst av alla och hur tänker ni själva om ni ska skriva test?

Permalänk
Festpilot 2020, Antiallo
Skrivet av Shimonu:

Jag har varit på ett par arbetsplatser med ganska annorlunda kultur kring testning. På ena var det viktigt att det fanns testtäckning och att testerna är välutvecklade medan på det andra känns det som ett nödvändigt ont där man helst vill kunna presentera goda siffror men vilken kvalité testerna har är mindre viktigt. Man gör hellre fula hack för att få till ett test än att tänka igenom det.

Även på första stället fanns det en viss känsla av att testerna var något man lämnade till sist, de skulle förmodligen inte hitta något seriöst och det vara bara att göra klart. Det skulle dock fortfarande göras rätt.

Jag undrar hur ni andra ser på det och upplever kulturen kring testning. Tas det seriöst av alla och hur tänker ni själva om ni ska skriva test?

Vilken typ av testning pratar vi om? Det kan vara bra att snäva av området något. Bara mjukvaruprogram?

Visa signatur

 | PM:a Moderatorerna | Kontaktformuläret | Geeks Discord |
Testpilot, Skribent, Moderator & Geeks Gaming Huvudadmin

Permalänk
Hedersmedlem
Skrivet av DavidtheDoom:

Vilken typ av testning pratar vi om? Det kan vara bra att snäva av området något. Bara mjukvaruprogram?

Jag tänkte främst mjukvarutester. Ledsen om det var oklart

Permalänk
Medlem

Jobbar som programmerare. Tycker det är väldigt användbart med tester, speciellt integrations- och system- tester men de är oftast väldigt komplicerade att skriva. Enhetstester får bli på affärskritiska funktioner.

Svaret från mig är att jag by default inte skriver tester till grejer.

Visa signatur

Bättre än din.
Tagga mig för svar i trådar.

Permalänk
Medlem

Jag tror det beror väldigt mycket på inom vilket område det rör sig om. Man kan tycka att det testning borde vara högt på prio-listan men någonstans kompromissas det och i vissa branscher ofta kring testning har jag erfarit.
Men pysslar man med programmering inom områden som kan sluta med katastrofala följder finns inte alternativet "man gör hellre fula hack...". Senaste lärdomen är Boeings fuskande av tester som slutade i dödsolyckor. Även om det inte var enbart mjukvaruproblem så belyser det riskerna med hur fel det kan bli med kompromisser.

Några av de produkter jag varit inblandad i har ca 3-4 år av testande innan det släpps för skarpt bruk. Senaste produkten jag arbetat med har nu drygt 2 år av testande hos kund och fortfarande rättas mjukvaran och mekanik för att minska risken av personskador ute i fält.

Visa signatur

MSI K9N SLI Diamond | MSI Diamond HDMI 7600GT | AMD X2 4200+ | 1GB Kingston HyperX| 32" LG 5000:1 screen | Asus EeePC 701

Permalänk
Medlem

Min erfarenhet av tester är från byggindustrin.
Tester som är nödvändiga för funktionen och kvaliteten av anläggningen ska göras i min mening. Tester som finns inskrivna i underlaget bara för att de har funnits med sen 1960 är mindre nödvändiga. Till exempel vid nyläggning av en dricksvattenledning är det otroligt viktigt att testa så systemet är tätt och sterilt, då det är kritiskt för funktionen.
När en dagvattenledning ska testas med täthetsprov tillsammans med TV-inspelning utifrån samma förfrågningsunderlag så frågar man sig varför kunden vill betala för två olika tester med samma resultat. Ofta vill de inte det, så då gör vi TV-inspelningen som täcker det mesta. Resultatet blir samma med färre antal tester.
Det beror ofta på hur kritisk funktionen är hur ofta test krävs, och om det behövs test.

Visa signatur

Gigabyte X870E | 32GB DDR5 6000M/T CL30 | Ryzen 7 9800X3D | Noctua NH-D14 | RX 9070XT Pulse | Sound BlasterX AE-5 | RMe 850W

Permalänk
Medlem

Vi skriver integrationstester och enhetstester själv. Tyvärr hamnar de ibland efter om projektet har en pressad tidsram. Men jag tycker det är viktigt med automatiserade tester, speciellt för en applikation som kommer användas av kunder.

Speciellt då kod behöver refaktoreras, då vet man att man inte pajjar något kritiskt.

Permalänk
Medlem

Jag skriver mest API:er i mindre projekt (500K-10M). Det är faktiskt ganska smidigt att jobba testdrivet. Det blir mest integrationstester med anrop över nätverk och hela databasen uppkopplad, vilket kräver en hel produktionslik utvecklingsmiljö för att få igenom. Det man vill övertyga sig om är att alla delar kommer fungera tillsammans i produktion, med säkerhetslösningar och allt. Inte sällan krävs andra underliggande API:er, riktig kod eller mockade, som anropas över nätverk med produktionslik säkerhetslösning.

Jag använder testerna mest för att trigga igång debuggning av ett visst användningsfall, snarare än att försöka täcka alla varianter av in- och utdata. Om man vill testa något speciellt får man ändra data direkt i debuggern.

Visst skriver jag enhetstester för speciellt knölig kod, men varken enhetstesterna eller integrationstesterna är heltäckande - det skulle ta mer tid än vad kunden är beredd att betala för. Jag har för övrigt aldrig varit med om att kunden efterfrågat automatiska tester, det har varit sådant som vi själva skickat med på köpet eller som sålts in av tidigare leverantör (och ofta inte underhållits).

Det jag hatar mest av allt är när man ska ta över ett system som utvecklaren har testat med Postman eller liknande men inte checkat in scripten, eller bara har kvar någon gammal ounderhållen version. Min upplevelse är att automatiska tester ska vara i form av incheckad kod, skrivna i samma språk som resten av systemet.

Numera försöker jag även parameterisera testerna tillräckligt för att läs-operationer ska gå att köra mot (testmiljöer och) produktionsmiljön, samt gärna bygga in särskilda operationer som testar kontakt med databas och underliggande API:er. Det är jäkligt skönt att ha när man ska smoketesta driftsättningar.

Permalänk
Medlem

Det är väldigt viktigt med enhetstest och regressionstest. Om man inte skriver test tidigt kommer det bli mycket svårare att göra senare då man med stor sannolikhet har byggt in en massa beroenden.

Jag anser att test och god kodkvalitet går hand i hand. Om du skriver enhetstest före implementationen, eller åtminstone i samband med implementationen, kommer du upptäcka när du håller på att göra något dumt. Då kan du tidigt se att det börjar bli komplicerat att testa och kan avstyra direkt.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Problemet med testning är att man vill jämföra en genererad state med en förväntad, oavsätt om det ör enhets-/integrationstestning.

För enhetstestning är detta väldigt viktigt. Detta gör att programlogiken ej få ha state i sig. Den måste skickas med utifrån dvs all I/O. Inte ens new DateTime() får användas utan måste wrappas in i en fasad.

Sällan så artitekturen genomtänkt med detta.
De senaste tvp projekten jag har gjort artitekturen till så har jag använt onion design. Där extern state (I/O) pushas in wrappad utifrån från yttersta lagret in mot mitten. Så man kan göra bra mockade versioner av I/O när man ska skriva testerna.

Detta gör funktionella språk lättare/bättre att testa mot OOP. Då objekt har state.

Vi kör inte med 100% code coverage utan testar kritiska funktioner och lägger till tester vid varje bug rapport från manuell testing. Då man kan ha 100% coverage och fortfarande missa kombinationer/edge cases som orsakar buggar.

Äldre kodbaser som ej är artitekturen är genomtänkt för testning är typ omöjligt att skriva vettiga tester för. Det går att separera ut viss logik issolerat och testa.

Permalänk
Medlem

Känner att jag instämmer lite i kören här.

Beror på hur kritiskt det man gör är.
Integrationstester är mest användbart för att slippa dåliga releaser.
Enhetstester nästan enbart på riktigt central affärslogik, säkerhetsrelaterade grejer och buggar.

Som @MattiasFestin säger så bestämmer ju arkitektur och stil hur (automatiskt) testbart något är. Vill kunden ha testbart får kunden betala för det, annars får kunden sämre villkor för åtgärd av regressioner.

Man får inte glömma att otroligt mycket mjukvara som skrivs inte bär upp ett värde som motiverar den "perfektion" många utvecklare fokuserar så på. Finns det risk för liv, stora ekonomiska värden, informationssäkerhet - gå loss.

Men det mesta är ju bara massa bös. Om risken är att en avdelning med 5 administratörer står halvstill en halvdag 2-4 gånger om året kanske det är billigare än att låta tre konsulter rigga upp en full testsvit, eh?

Visa signatur

Brass knuckles and a 2x4

Permalänk
Avstängd

Tester är viktigt av diverse anledningar. Enhetstesters syfte är ju dels att man tänker igenom koden och funktionen när man skriver dem, men ger också kontroll på regression. Har man tester på all funktionalitet så märks det ju tydligt när något slutar funka för att någon har gjort en "smart" lösning. Och har man bra byggverktyg och så, så kommer ju inte den koden in i något repo förrän testerna går igenom.

Acceptanstester, systemtester och så är ju också väldigt viktiga. Än mer så om man går mot microservices eller liknande där man ska integrera olika saker från olika team som har jobbat mer eller mindre isolerat.

På mitt jobb har vi fem nivåer på tester, Confidence Level 1-5. 1 är enhetstest, 4 är manuella systemtester med alla komponenter och CL5 är automatiserade systemtester, 2 och 3 är mellannivåer med komponenttester och så.

Permalänk
Medlem
Skrivet av jonasc:

Känner att jag instämmer lite i kören här.

Beror på hur kritiskt det man gör är.
Integrationstester är mest användbart för att slippa dåliga releaser.
Enhetstester nästan enbart på riktigt central affärslogik, säkerhetsrelaterade grejer och buggar.

Som @MattiasFestin säger så bestämmer ju arkitektur och stil hur (automatiskt) testbart något är. Vill kunden ha testbart får kunden betala för det, annars får kunden sämre villkor för åtgärd av regressioner.

Man får inte glömma att otroligt mycket mjukvara som skrivs inte bär upp ett värde som motiverar den "perfektion" många utvecklare fokuserar så på. Finns det risk för liv, stora ekonomiska värden, informationssäkerhet - gå loss.

Men det mesta är ju bara massa bös. Om risken är att en avdelning med 5 administratörer står halvstill en halvdag 2-4 gånger om året kanske det är billigare än att låta tre konsulter rigga upp en full testsvit, eh?

Tycker det är lika viktigt oavsett om det "bara" är ett affärssystem kontra något mer kritiskt. Det handlar om förvaltningsbarhet och utökningsbarhet.

Tester hjälper till att säkerställa att koden är enkel att arbeta med och resonera kring. Kodbaser utan tester, eller med tester som skrivits i efterhand löper stor risk att ruttna. Det gör att eventuella buggfixar mer troligt bara lappar ihop just det problemet men skapar nya problem. Nya features tar längre och längre tid att implementera.

Det kanske kostar lite mer up-front men betalar av sig ganska snabbt.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem
Skrivet av noMad17:

Tycker det är lika viktigt oavsett om det "bara" är ett affärssystem kontra något mer kritiskt. Det handlar om förvaltningsbarhet och utökningsbarhet.

Tester hjälper till att säkerställa att koden är enkel att arbeta med och resonera kring. Kodbaser utan tester, eller med tester som skrivits i efterhand löper stor risk att ruttna. Det gör att eventuella buggfixar mer troligt bara lappar ihop just det problemet men skapar nya problem. Nya features tar längre och längre tid att implementera.

Det kanske kostar lite mer up-front men betalar av sig ganska snabbt.

Det brukar låta så, som nåt mantra, men jag har erfarenheter som säger lite tvärtom.

En testsvit är en egen parallell kodbas som också måste hållas up to date. Det är inte bara jobb i början, det är jobb hela tiden. Tester som ruttnar är fan värre än när huvudapplikationen ruttnar.

Alla applikationer är inte konstant utvecklade och körda i CI. Tester skrivna i något bibliotek som är övergivet, inte uppdaterade, dåligt namngivna och helt frankt dåligt genomförda är en helt egen börda. Plocka fram och dra igång nått gammalt ekonomisystem där det börjar med att testerna smäller eller ljuger är fan inte roligt.

”Men du måste ju göra det på riktigt med låsta versioner och reproducerbara miljöer och bra programmerare och god arkitektur”

Jo, men det var problemet från början och att utöka det problemet med en kodbas till full av test_fileCopyWrapperActuallyCopiesFile() är inte alltid försvarbart.

Testning är dels en practice, men också en jävla produkt som säljs av konsulter och CI-providers. Precis som den jävla Agile-cancern.

Visa signatur

Brass knuckles and a 2x4

Permalänk
Medlem
Skrivet av jonasc:

Det brukar låta så, som nåt mantra, men jag har erfarenheter som säger lite tvärtom.

En testsvit är en egen parallell kodbas som också måste hållas up to date. Det är inte bara jobb i början, det är jobb hela tiden. Tester som ruttnar är fan värre än när huvudapplikationen ruttnar.

Alla applikationer är inte konstant utvecklade och körda i CI. Tester skrivna i något bibliotek som är övergivet, inte uppdaterade, dåligt namngivna och helt frankt dåligt genomförda är en helt egen börda. Plocka fram och dra igång nått gammalt ekonomisystem där det börjar med att testerna smäller eller ljuger är fan inte roligt.

”Men du måste ju göra det på riktigt med låsta versioner och reproducerbara miljöer och bra programmerare och god arkitektur”

Jo, men det var problemet från början och att utöka det problemet med en kodbas till full av test_fileCopyWrapperActuallyCopiesFile() är inte alltid försvarbart.

Testning är dels en practice, men också en jävla produkt som säljs av konsulter och CI-providers. Precis som den jävla Agile-cancern.

Kan inte annat än instämma, speciellt i det sistnämnda.

Jag tror det handlar om erfarenhet också. När jag var på ett globalt marknadsledande företag och jobbade så spenderades det 9 månader att skriva unittester och 6 månader att utveckla själva applikationen. All rim och reson var som bortblåst (men buggar fanns kvar). Ett av de stora problemen med testning är en känsla av falsk trygghet - kan man inte svara på vad gröna tester betyder _exakt_ så är man helt fel ute enligt mig.

Det finns tillfällen där testning är ett enormt hjälpmedel - framförallt funktioner som givet en input ska ge en viss output. På ett tidigare uppdrag testkördes flera hundra GB värd av testdata för att verifiera algoritmers korrekthet och effektivitet (ingick även regressionstestning). Där var det ett enormt hjälpmedel i den delen. För övrig kod så var det betydligt mindre viktigt.

Tester är bra när de levererar mer värde än vad de kostar, det är dock långt från alltid som det är fallet.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Hedersmedlem
Skrivet av Dimman:

Kan inte annat än instämma, speciellt i det sistnämnda.

Jag tror det handlar om erfarenhet också. När jag var på ett globalt marknadsledande företag och jobbade så spenderades det 9 månader att skriva unittester och 6 månader att utveckla själva applikationen. All rim och reson var som bortblåst (men buggar fanns kvar). Ett av de stora problemen med testning är en känsla av falsk trygghet - kan man inte svara på vad gröna tester betyder _exakt_ så är man helt fel ute enligt mig.

Det finns tillfällen där testning är ett enormt hjälpmedel - framförallt funktioner som givet en input ska ge en viss output. På ett tidigare uppdrag testkördes flera hundra GB värd av testdata för att verifiera algoritmers korrekthet och effektivitet (ingick även regressionstestning). Där var det ett enormt hjälpmedel i den delen. För övrig kod så var det betydligt mindre viktigt.

Tester är bra när de levererar mer värde än vad de kostar, det är dock långt från alltid som det är fallet.

Jag tror vi börjar komma in på ett intressant område här.
För mig så reflekterar testerna resten av projektet. Kan man skriva bra och värdefulla tester så betyder det i sin tur att dokumentation, kod och krav är i gott skick. Här visar sig också utveckling av tester sitt värde enligt mig. Samtidigt som jag skriver mina tester kommer jag utvärdera byggsystem, dokumentation, ramverk, bibliotek, krav och kod. Kanske mer. Tester kommer hjälpa till att hitta brister på andra håll också. Jag har jobbat på ett ställe där allt hängde ihop väldigt väl och kritik från testutveckling kunde förbättra miljön runtomkring som i slutändan ger en väldigt bra produkt. Det gäller däremot att man kan skriva bra tester och har rätt tänk.

Men det gäller såklart att det finns budget och vilja för det. Jag har jobbat i projekt där det finns risk för liv men har upplevt båda sidorna av testning vilket gör mig förvånad. Alla verkar inte ha samma syn eller respekt för vilket ansvar man har.

Permalänk
Medlem
Skrivet av jonasc:

Det brukar låta så, som nåt mantra, men jag har erfarenheter som säger lite tvärtom.

En testsvit är en egen parallell kodbas som också måste hållas up to date. Det är inte bara jobb i början, det är jobb hela tiden. Tester som ruttnar är fan värre än när huvudapplikationen ruttnar.

Alla applikationer är inte konstant utvecklade och körda i CI. Tester skrivna i något bibliotek som är övergivet, inte uppdaterade, dåligt namngivna och helt frankt dåligt genomförda är en helt egen börda. Plocka fram och dra igång nått gammalt ekonomisystem där det börjar med att testerna smäller eller ljuger är fan inte roligt.

”Men du måste ju göra det på riktigt med låsta versioner och reproducerbara miljöer och bra programmerare och god arkitektur”

Jo, men det var problemet från början och att utöka det problemet med en kodbas till full av test_fileCopyWrapperActuallyCopiesFile() är inte alltid försvarbart.

Testning är dels en practice, men också en jävla produkt som säljs av konsulter och CI-providers. Precis som den jävla Agile-cancern.

Skrivet av Dimman:

Kan inte annat än instämma, speciellt i det sistnämnda.

Jag tror det handlar om erfarenhet också. När jag var på ett globalt marknadsledande företag och jobbade så spenderades det 9 månader att skriva unittester och 6 månader att utveckla själva applikationen. All rim och reson var som bortblåst (men buggar fanns kvar). Ett av de stora problemen med testning är en känsla av falsk trygghet - kan man inte svara på vad gröna tester betyder _exakt_ så är man helt fel ute enligt mig.

Det finns tillfällen där testning är ett enormt hjälpmedel - framförallt funktioner som givet en input ska ge en viss output. På ett tidigare uppdrag testkördes flera hundra GB värd av testdata för att verifiera algoritmers korrekthet och effektivitet (ingick även regressionstestning). Där var det ett enormt hjälpmedel i den delen. För övrig kod så var det betydligt mindre viktigt.

Tester är bra när de levererar mer värde än vad de kostar, det är dock långt från alltid som det är fallet.

Vad jag menar är att - om man skriver tester som ett led av implementationen av en feature (t.ex. TDD eller liknande) - så kommer sannolikheten att koden är välskriven och genomtänkt också att vara högre. Era exempel låter mer som att tester har skrivits efter applikationen i stort sett är "färdig", vilket sällan ger kvalitativa tester.

Sedan är det såklart så att inte varenda liten funktion måste ha ett enhetstest, utan testerna ska ju också vara givande. Om jag bygger en klass är det också vettigt att det finns några enhetstester som försäkrar att den fungerar som förväntat. Följer man de riktlinjer som beskrivs av SOLID bör heller testerna inte riskera att ruttna över tid då kod bör hållas stängd för förändring, men öppen för utökning.

Det handlar om disciplin, om du hela tiden tänker på testbarheten ska du ju inte ignorera befintliga testfall och då ska de heller rimligtvis inte ruttna.

Det är lite att måla fan på väggen att säga att: "Det kommer bli skit ändå, så varför ska vi ens försöka?".
Det är en ganska trist inställning. Varför ska vi ens utveckla något ö.h.t?

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem
Skrivet av noMad17:

Vad jag menar är att - om man skriver tester som ett led av implementationen av en feature (t.ex. TDD eller liknande) - så kommer sannolikheten att koden är välskriven och genomtänkt också att vara högre. Era exempel låter mer som att tester har skrivits efter applikationen i stort sett är "färdig", vilket sällan ger kvalitativa tester.

Sedan är det såklart så att inte varenda liten funktion måste ha ett enhetstest, utan testerna ska ju också vara givande. Om jag bygger en klass är det också vettigt att det finns några enhetstester som försäkrar att den fungerar som förväntat. Följer man de riktlinjer som beskrivs av SOLID bör heller testerna inte riskera att ruttna över tid då kod bör hållas stängd för förändring, men öppen för utökning.

Det handlar om disciplin, om du hela tiden tänker på testbarheten ska du ju inte ignorera befintliga testfall och då ska de heller rimligtvis inte ruttna.

Det är lite att måla fan på väggen att säga att: "Det kommer bli skit ändå, så varför ska vi ens försöka?".
Det är en ganska trist inställning. Varför ska vi ens utveckla något ö.h.t?

"Man måste göra rätt" är allt du säger.
Har du något som verifierar att alla dina tester är fria från buggar?
Testar du dina tester?
Eller har du bara skrivit mer kod någon måste reviewa. För du reviewar väl dina tester?

Allt dogmatiskt tjat från nördar om TDD, BDD, OE, SOLID, Agile och andra religiösa texter där alla bara upprepar samma floskler från samma Medium-bloggar är så tröttsamt.
"I feel confident to change my system when I have a full coverage test harness" säger dom, som några jävla papegojor.

"Det kommer bli skit ändå, så varför ska vi ens försöka?".
Så sa jag inte alls. Men jag biter ändå.
Vi ska försöka ändå för "gott nog" är tillräckligt för alla andra, programmerare måste bara klättra ner från sin höga häst och fatta att man inte behöver ett matematiskt bevis för ett nästan-REST API där man ska lista lediga tider i ett bokningssystem.

Visa signatur

Brass knuckles and a 2x4

Permalänk
Hedersmedlem
Skrivet av jonasc:

"Man måste göra rätt" är allt du säger.
Har du något som verifierar att alla dina tester är fria från buggar?
Testar du dina tester?
Eller har du bara skrivit mer kod någon måste reviewa. För du reviewar väl dina tester?

Allt dogmatiskt tjat från nördar om TDD, BDD, OE, SOLID, Agile och andra religiösa texter där alla bara upprepar samma floskler från samma Medium-bloggar är så tröttsamt.
"I feel confident to change my system when I have a full coverage test harness" säger dom, som några jävla papegojor.

"Det kommer bli skit ändå, så varför ska vi ens försöka?".
Så sa jag inte alls. Men jag biter ändå.
Vi ska försöka ändå för "gott nog" är tillräckligt för alla andra, programmerare måste bara klättra ner från sin höga häst och fatta att man inte behöver ett matematiskt bevis för ett nästan-REST API där man ska lista lediga tider i ett bokningssystem.

Så vad tycker du är rätt nivå? Är tester bara extra arbete eller finns det utrymme även om det bara ska listas lediga tider i ett bokningssystem?

Permalänk
Medlem
Skrivet av Shimonu:

Så vad tycker du är rätt nivå? Är tester bara extra arbete eller finns det utrymme även om det bara ska listas lediga tider i ett bokningssystem?

Du pratar om det som om det går att bestämma en nivå i förväg, som om det fanns rätt eller fel i frågan.
Läser du tidigare inlägg så ser du att jag tycker det är fullt försvarbart om det riskeras liv/hälsa/värden större än arbetsinsatsen med att skriva det.

I ett kommersiellt projekt som ett bokningssystem så finns det ju en betalare. Är du kapabel att översätta risken/kostnaden man balanserar för betalaren så är det ju den som avgör.

Om ställer krav på 100% coverage eller liknande i ett bokningssystem så är du ju bara en affärsförstörare. Startup efter startup får slut på pengar för att någon skitnödig kille med masters i bloggläsning tror att det inte går att skriva dålig mjukvara om man bara bränner hela budgeten på tester (och microservices).

Visa signatur

Brass knuckles and a 2x4

Permalänk
Medlem

@noMad17 Jag förstår vart du vill komma i de första styckena, men jag håller med @jonasc i mycket av det han säger (om än tydligt att frustationen tränger igenom ) - det finns någon slags tro om att TDD och "bra testning" är en garant för bra lösningar, det är det inte. Det finns ingen testning i världen som hjälper mot dålig design, ologisk lösningar och ren idioti.

Det sista stycket vet jag inte vad du refererar till, men antar att det inte var en kommentar till mig?

Hur som helst: Jag har jobbat i/för både stora och små bolag, byggt mjukvarulösningar för slutkund, byggt testutrustning för produktionslinor osv, och det handlar hela tiden om värde kontra kostnad. Det finns liksom inget adderat värde i att spendera 4 manmånader på något om inte vinsten av det är >> än 4 manmånader, varesig det gäller tester eller något annat.

Den bästa tekniska lösningen är inte alltid den bästa lösningen på ett problem. Vad jag har landat i är just vad @jonasc nämner ovan; good enough är nästan alltid den bästa lösningen (men det kräver att man ser det från ett större perspektiv).

(Kan väl tilläggas också att ingen av oss skulle motsätta oss tester för medicinsk utrustning och liknande, men det är ju också det som är poängen; det är inte mycket som faktiskt är kritiskt. Inte ens buggar i produktionstestutrustningen spelar i det stora hela någon större roll: det finns alltid multipla uppsättningar.)

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem
Skrivet av Dimman:

(om än tydligt att frustationen tränger igenom )

Jag, frustrerad? Av att försöka kombinera utvecklare med verkligheten i ett kommersiellt projekt? Aldrig!
Jag refererar till dig i fortsättningen, så går jag och lugnar mig på baksidan.

Visa signatur

Brass knuckles and a 2x4

Permalänk
Hedersmedlem

Det verkar finnas en viss frustration i denna tråden. Jag skulle vilja komma med några frågor.

Vilket ansvar har man som utvecklare för att man skriver fungerande kod? Och vems ansvar är det då att hitta felen i denna kod?
Allt för ofta så ser jag två läger. Ett gäng som utvecklar koden och ett annat gäng som testar den. Ofta klagar de sistnämnda på att de förstnämnda inte gör sitt jobb, och i många fall har de faktiskt rätt.

Jag tycker att den som skriver kod har ansvar för att den fungerar. Och hur ser man då till att den fungerar? Man använder de verktyg man har, dvs skriver kod.

Nästa fråga är då vad det innebär att koden fungerar? Jag har tex jobbat med e-handel. Jag skulle vilja säga att i e-handelsfallet fungerar koden om kunden kan välja ut ett valfritt antal varor betala för dem och få hem dem. Det behöver inte vara snyggt, det behöver inte vara lätt, bara det funkar. Människan har en unik förmåga att ta sig runt hinder. Det är inte skoj att behöva scrolla ner en sida för att hitta knappen, men vi brukar greja det. Djupare än så ska vi inte testa. Ju mer test vi skriver ju större risk att de ruttnar, är jobbiga att underhålla osv.
Nu kanske vårt koncept handlar om att vi har den bästa köpupplevelsen som går att få för pengar. Då är ju läget ett lite annat, men de flesta företag har inte det som koncept.

Man kan göra detta självreglerande. Om ett test hittar ett fel och vi kan tänka oss att bortse från det felet, släng testet. Ett fel som vi kan tänka oss att leva med är inte värt att testa.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

@jonasc Självfallet är det så att man måste göra "rätt". Jag har varit med om många projekt där testning har ignorerats eller blivit en eftertanke. Det slutar nästan alltid med att det blir ett helvete att förvalta.

Att skriva test före implementation kräver att du förstår det problem du ämnar lösa, vilket i sin tur gör att du kan ta bättre beslut. Det är annars väldigt enkelt att falla i fällan där en funktions eller klass scope går utanför vad som är nödvändigt.

@Dimman Det var mest att jag drog det han sa till sin spets. Jag anser att det är bättre att sträva efter att göra ett så bra jobb som möjligt. God kodkvalitet är lika mycket för min och mina kollegors välbefinnande som att kunden ska få en bra produkt. Det finns inget värre än att jobba i en kodbas som knappt går att förvalta p.g a. teknisk skuld och spaghetti.

Alla verktyg man kan ta till för att motverka en sådan situation är i min värld värda att utforska. Själv tycker jag att resultatet blivit bättre.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Jag tar mig friheten att klippa ut några meningar som utgör själva kärnan i vad vi försöker förmedla.

Skrivet av noMad17:

Jag anser att det är bättre att sträva efter att göra ett så bra jobb som möjligt.

Det gör jag alltid, men vad jag tycker är bra och vad kunden tycker är bra och värderar är inte alltid samma sak.

Skrivet av noMad17:

God kodkvalitet är lika mycket för min och mina kollegors välbefinnande som att kunden ska få en bra produkt. Det finns inget värre än att jobba i en kodbas som knappt går att förvalta p.g a. teknisk skuld och spaghetti....

Du sätter huvudet på spiken här; Nej det är inte alltid lika mycket för dig och dina kollegors välbefinnande som att kunden ska få en bra produkt. Det beror på. Din stolthet är inget som kunden betalar för. Att du leverar 4 veckor senare för ditt eget bättre välbefinnande måste betala tillbaka sig i framtida tidsvinst.

Det finns givetvis projekt där arbete och utveckling sker kontinuerligt, där är det såklart viktigare att ha en stabil bas att stå på. I många fall ser verkligheten inte ut så i min erfarenhet.

Kunden bryr sig inte det minsta om snygg kod, kunden vill ha sitt problem löst. Back to basics, simpla smarta lösningar och good enough är det vinnande konceptet, IMO. Visst suger det att veta att "det hade kunnat vara mycket snyggare/bättre", men när man ställer det till sin spets så är det väldigt sällan det går att motivera.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem
Skrivet av Dimman:

Jag tar mig friheten att klippa ut några meningar som utgör själva kärnan i vad vi försöker förmedla.
Det gör jag alltid, men vad jag tycker är bra och vad kunden tycker är bra och värderar är inte alltid samma sak.

Du sätter huvudet på spiken här; Nej det är inte alltid lika mycket för dig och dina kollegors välbefinnande som att kunden ska få en bra produkt. Det beror på. Din stolthet är inget som kunden betalar för. Att du leverar 4 veckor senare för ditt eget bättre välbefinnande måste betala tillbaka sig i framtida tidsvinst.

Det finns givetvis projekt där arbete och utveckling sker kontinuerligt, där är det såklart viktigare att ha en stabil bas att stå på. I många fall ser verkligheten inte ut så i min erfarenhet.

Kunden bryr sig inte det minsta om snygg kod, kunden vill ha sitt problem löst. Back to basics, simpla smarta lösningar och good enough är det vinnande konceptet, IMO. Visst suger det att veta att "det hade kunnat vara mycket snyggare/bättre", men när man ställer det till sin spets så är det väldigt sällan det går att motivera.

Fast dålig kod kommer i slutändan att ge en dålig produkt. Om det tar längre och längre tid att implementera en ny feature eller fixa en bugg kommer det kosta kunden mer och mer pengar.

Visst, har du en produkt som inte kommer vidareutvecklas kanske det är mindre viktigt. I den agila världen skulle jag påstå att det är viktigt att koden är lättarbetad.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Hedersmedlem
Skrivet av Dimman:

Jag tar mig friheten att klippa ut några meningar som utgör själva kärnan i vad vi försöker förmedla.
Det gör jag alltid, men vad jag tycker är bra och vad kunden tycker är bra och värderar är inte alltid samma sak.

Du sätter huvudet på spiken här; Nej det är inte alltid lika mycket för dig och dina kollegors välbefinnande som att kunden ska få en bra produkt. Det beror på. Din stolthet är inget som kunden betalar för. Att du leverar 4 veckor senare för ditt eget bättre välbefinnande måste betala tillbaka sig i framtida tidsvinst.

Det finns givetvis projekt där arbete och utveckling sker kontinuerligt, där är det såklart viktigare att ha en stabil bas att stå på. I många fall ser verkligheten inte ut så i min erfarenhet.

Kunden bryr sig inte det minsta om snygg kod, kunden vill ha sitt problem löst. Back to basics, simpla smarta lösningar och good enough är det vinnande konceptet, IMO. Visst suger det att veta att "det hade kunnat vara mycket snyggare/bättre", men när man ställer det till sin spets så är det väldigt sällan det går att motivera.

Koden är ändå min arbetsplats, kunden kanske inte betalar för snygg kod men vill företaget att jag ska jobba där så hoppas jag de lägger resurser på att arbetsplatsen ska vara någorlunda lättarbetad. Jag vill inte sitta och rota i kod jag behöver läsa om flera gånger och lägga mycket tid på att förstå. Det är inte bara kunden som bestämmer. Sen behöver inte simpla smarta lösningar som är good enough och snygg kod vara skilda saker.

Permalänk
Medlem
Skrivet av noMad17:

Fast dålig kod kommer i slutändan att ge en dålig produkt. Om det tar längre och längre tid att implementera en ny feature eller fixa en bugg kommer det kosta kunden mer och mer pengar.

För mig är dålig kod och visuellt mindre snygg kod inte samma sak. Om man satsar på att hitta enkla, smarta och genomtänkta lösningar där koden gör det man har tänkt så är det inte dålig kod även om den är visuellt ful.

Jo precis, det beror på som jag skrev ovan. Det finns många aspekter att ta in, inte allt för sällan handlar det om deadlines när produkter _måste_ ut på marknaden för att hinna före konkurrenter eller hinna i tid till en mässa och liknande. Om vi får som vi vill och kan designa något "riktigt snyggt" rakt igenom så tar det nästan alltid betydligt längre tid än om man tar genvägar och gör en "good enough"-lösning. Ha då i åtanke att du måste vinna tillbaka tidsskillnaden i utvecklingstid för dessa nya features eller buggfixar. Det är inte ofta jag kan säga att det hade sparat varken tid eller pengar att göra den "perfekta" lösningen från början.

Skrivet av noMad17:

Visst, har du en produkt som inte kommer vidareutvecklas kanske det är mindre viktigt. I den agila världen skulle jag påstå att det är viktigt att koden är lättarbetad.

Det finns ju också ett spann mellan total katastrof och perfektion Jag skriver sällan min kod mer än en gång. "Den agila världen" ser nog lite annorlunda ut beroende på var man är någonstans som @jonasc var inne på tidigare. Ska man ranta lite så är det väl bara titta hur det ser ut högre upp (web/cloud osv), det är nya "rekommendationer" och hittepå var och varannan dag. Lika stabilt som bantningskurer i Aftonbladet.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Medlem
Skrivet av Shimonu:

Koden är ändå min arbetsplats, kunden kanske inte betalar för snygg kod men vill företaget att jag ska jobba där så hoppas jag de lägger resurser på att arbetsplatsen ska vara någorlunda lättarbetad. Jag vill inte sitta och rota i kod jag behöver läsa om flera gånger och lägga mycket tid på att förstå. Det är inte bara kunden som bestämmer.

Visst, man får ha i åtanke att vi drar saker till sin spets här. Det är klart att om ett företags primära produkt är en mjukvarulösning så finns det egenintresse i att hålla hög standard.

Skrivet av Shimonu:

Sen behöver inte simpla smarta lösningar som är good enough och snygg kod vara skilda saker.

Så är det absolut.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk

Jag har mycket negativ bild av testning hur det utförs rent byråkratisk.

Jag har flera gånger fått skriva ut runt 30 sidor från excel där man för varje kolumn ska skriva sina Ok på 3 ställen, sina initialer och sedan årtal med dagens datum. Detta för det är superviktigt att precis allt är testat. Och att kund i efterhand ska kunna säga att exakt den grejen påstod du fungerade fungerar ej. Och att vi har anlitat ett annat företag som har granskat lösningen och de kom fram till att det aldrig har fungerat och det kommer nu bli en civilrättslig process med vite för skadan som har skett.

Iden med mycket manuell dokumentation är bra, men man blir rätt så slut att skriva all denna text manuellt hela tiden. Detta arbete med att manuellt skriva mycket text gör att man tappar koncentrationen och det lätt kan bli fel för bara detta.

Ett annat jobb och det ska dokumenteras på flera ställen att man har gjort något, det är så viktigt att det inte blir fel och om man skriver in exakt samma information om ett jobb på helt olika sätt på olika ställen så blir det bra testat eller?

Jag själv har börjat automattester för en sak, jag hittade fel som jag har gjort, men även som andra företag har gjort. Och detta är väldigt känsligt att upptäcka andras fel. För säg att jag hittar ett fel som kostar 500 000kr att åtgärda som ett annat företag har gjort. Och om jag mailar kund eller företaget om detta så får jag aggressivitet tillbaka från det företaget som får detta garantiärende.
Detta då det inte på något sätt är min uppgift att granska deras arbete, det är bara det att mina automattester hittar allas fel. Ett sätt är då att skita i detta och låta felen finnas och alla är nöjda och glada.
*edit*
Tur jag inte jobbar i bilbranschen. hitta ett fel och de får återkalla alla bilar i 10år kostar lite pengar. Men det hör mer till. Hos oss vanliga utvecklare så ska vi egentligen bara granska det som ingår i vårt arbete och berör det, inte köra automattester som kontrollerar annat.