Permalänk
Medlem

Skriver gärna tester personligen. Är ett kontrakt för mig själv att koden fungerar som förväntat. Kan även peka på detta om PO säger att koden inte fungerar som vi har kommit överens om.

Permalänk
Medlem

Tester ska skrivas på den kod man skriver på jobbet. Enhetstester samt integrationstester bland annat. Tester ser man ju också som en dokumentation av hur det är tänkt att koden ska fungera. Har man skapligt heltäckande tester märker man också när man kladdar till det i koden, genom att testerna då failar. Det är en viss form av dokumentation för framtiden också när någon annan ska börja skruva på koden.

Men visst, tester kanske är mindre viktigt när företaget bara vill tjäna pengar och ser på saker kortsiktigt. I längden tror jag man vinner på att ha bra heltäckande tester för sitt system.
Jag skulle inte vilja hoppa in och koda i ett stort system som helt saknar tester.. För mig ger det också en indikation på en dåligt underhållen produkt där man tullar på kvalitet framför kvantitet.
Tester tar tid att skriva, ofta lika länge som implementationen, ibland längre. Sitter man med ganska kritiska system som kan få påverkan för människor så skriver man tester OCH det testas av någon mer än utvecklaren. Gärna ett testteam som kan skriva egna tester, automattester eller mnauellt testande. Skulle aldrig få släppa något i produktion utan att det testats.

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Hedersmedlem
Skrivet av SanTeoX:

Tester ska skrivas på den kod man skriver på jobbet. Enhetstester samt integrationstester bland annat. Tester ser man ju också som en dokumentation av hur det är tänkt att koden ska fungera. Har man skapligt heltäckande tester märker man också när man kladdar till det i koden, genom att testerna då failar. Det är en viss form av dokumentation för framtiden också när någon annan ska börja skruva på koden.

Men visst, tester kanske är mindre viktigt när företaget bara vill tjäna pengar och ser på saker kortsiktigt. I längden tror jag man vinner på att ha bra heltäckande tester för sitt system.
Jag skulle inte vilja hoppa in och koda i ett stort system som helt saknar tester.. För mig ger det också en indikation på en dåligt underhållen produkt där man tullar på kvalitet framför kvantitet.
Tester tar tid att skriva, ofta lika länge som implementationen, ibland längre. Sitter man med ganska kritiska system som kan få påverkan för människor så skriver man tester OCH det testas av någon mer än utvecklaren. Gärna ett testteam som kan skriva egna tester, automattester eller mnauellt testande. Skulle aldrig få släppa något i produktion utan att det testats.

Fetmarkerade en intressant bit. Jag tycker man bör vara försiktig hur man formulerar sig här. Jag har stött på någon som uttalade sig som att det är testerna som bestämmer vad kraven faktiskt betyder, det var i kontext av att det fanns otydliga krav som gjorde det svårt/omöjligt att testa. Just det tankesättet håller jag verkligen inte med om. Testaren ska aldrig behöva göra någon tolkning av kraven i min mening. De ska helst vara så tydliga att det inte finns någon tvetydighet.

Vad är ert tankesätt när det kommer till testning? Personligen ställer jag in mig på att granska allting kritiskt och faktiskt försöka hitta sätt att få koden att göra något dumt eller försöka misstolka krav om det finns utrymme för det. Mitt jobb blir att försöka hitta vad andra inte tänkt på eller struntat i.

Vad jag har sett ibland är att man gör absolut minsta för att ha ett test som gör någorlunda vad kravet säger. Ska en funktion sätta en bit baserat på ett argument som anger position så gör man ett anrop till funktionen med en position och ser att minnet har ett värde skiljt från noll till exempel. Man verifierar aldrig att biten inte var satt från början, man gör inte test med att sätta flera bitar eller samma bit flera gånger t.ex.

Permalänk
Avstängd
Skrivet av Shimonu:

Fetmarkerade en intressant bit. Jag tycker man bör vara försiktig hur man formulerar sig här. Jag har stött på någon som uttalade sig som att det är testerna som bestämmer vad kraven faktiskt betyder, det var i kontext av att det fanns otydliga krav som gjorde det svårt/omöjligt att testa. Just det tankesättet håller jag verkligen inte med om. Testaren ska aldrig behöva göra någon tolkning av kraven i min mening. De ska helst vara så tydliga att det inte finns någon tvetydighet.

Idealt hade kraven varit tydliga och testbara, tyvärr är det sällan så i verkligheten, enligt min erfarenhet i alla fall. Om man då jobbar enligt TDD så blir det ju den som skriver testerna (normalt utvecklaren) som tolkar de bristfälliga kraven. Har alla koll på syftet med vad man håller på med så behöver inte det vara något större problem, men om man inte riktigt har koll så kan det förstås slå fel, men det gäller ju lika mycket för utvecklaren om man inte kör någon form av TDD.

Citat:

Vad är ert tankesätt när det kommer till testning? Personligen ställer jag in mig på att granska allting kritiskt och faktiskt försöka hitta sätt att få koden att göra något dumt eller försöka misstolka krav om det finns utrymme för det. Mitt jobb blir att försöka hitta vad andra inte tänkt på eller struntat i.

Det beror helt på vad för tester man pratar om. På mitt jobb har vi fem nivåer av tester exempelvis.

Enhetstester skrivs av utvecklaren och granskas i den vanliga kodgranskningen och så. Dessa testar ju väldigt små enheter och då behöver man ofta inte fundera så jättemycket i mina ögon. Kan man inte det, om man behöver tänka mycket och skapa upp många objekt exempelvis, så är det ett tecken på att koden borde delas upp mer. Men funktionen av enhetstester är ju mer att hålla koll på regression och att få utvecklaren att tänka till ett varv till liksom, antingen före eller efter kodningen.

På högre nivåer blir det mer black-box, man testar ur ett användarperspektiv exempelvis. Vi har haft mycket diskussioner internt om hur detta ska ske, hur testfunktionen ska se ut, ska man bara testa acceptanskriterier eller ska man göra antaganden om sånt som inte står med, och så vidare. Tidigare hade varje team en testare som framför allt skrev testfall, genomförde eventuella manuella tester och satte upp exempelvis långkörningar av systemet, men de var också delaktiga i planeringen, granskade aceptanskriterier tillsammans med resten av teamet innan vi ens tog in en feature exempelvis. Sen valde företaget att inte göra på det sättet, istället har vi ett testteam till typ 6 utvecklarteam. Diskussionerna om ansvar har fortgått dock, testteamet hinner inte med riktigt så allt mer av "deras arbete" har hamnat på utvecklingsteamen.

Mitt team exempelvis har byggt en service som kopplar upp sig mot hårdvara via en tredjepartslösning och kommunicerar med den. Teamet är nu ansvarigt att först skriva testfall för manuell testning, sen faktiskt genomföra dessa tester i labbmiljö och i slutändan automatisera dessa inklusive att skriva eventuella simulatorer och liknande som behövs för att kunna köra dessa tester helt automatiserat som en del av pipelinen.

Citat:

Vad jag har sett ibland är att man gör absolut minsta för att ha ett test som gör någorlunda vad kravet säger. Ska en funktion sätta en bit baserat på ett argument som anger position så gör man ett anrop till funktionen med en position och ser att minnet har ett värde skiljt från noll till exempel. Man verifierar aldrig att biten inte var satt från början, man gör inte test med att sätta flera bitar eller samma bit flera gånger t.ex.

Det låter som enhetstester och om man inte kontrollerar grundläget där så har man ju gjort fel i mina ögon. Ett problem är när man har olika personer som skriver acceptanskriterier som är på helt olika nivåer. Just nu har vi exempelvis tre produktägare som jobbar med/mot mitt team, en är en tidigare utvecklare som skriver väldigt tekniska och detaljerade kriterier ofta med flödesdiagram och så, mycket bra. En person kommer från liksom längre ner i stacken och har väldigt bra koll på hårdvaran som vi använder men detta spelar inte någon större roll för utvecklingen av mjukvaran i många fall. Dennas acceptanskriterier utgår mer från hur hårdvaran fungerar i detalj, vilket vi försöker abstrahera bort, så användbart ibland men inte riktigt rätt nivå ofta. Den sista personen är journalist i grunden och har jobbat med dokumentation så den skriver helt otekniska krav. I teorin ger det teamet mer frihet att lösa saker på bästa sätt själva, men samtidigt har vi ju ett team arkitekter som har en massa krav på just arkitekturen men också övriga NFR-grejer så man är ändå väldigt låst.

Permalänk
Medlem

Ni som är tväremot enhets- och integrationstester, hur gör ni innan ni driftsätter? Manuell testning av hela systemet?

Jag gillar agil utveckling med täta driftsättningar och då är automatiserade test ovärderliga. Men jag håller med om att automatiserade test kan bli väldigt jobbiga, och då gäller det ju att lägga sig på en bra nivå. Sedan har jag insett att det kan vara lätt att skriva automatiserade test på ett dåligt sätt, speciellt innan man fått litet erfarenhet av de, och då är de lätt att de blir jobbiga att hantera i längden.

Om ni tycker det är jobbigt och tar lång tid att få till väldesignade lösningar så jobbar ni nog med rätt kassa arkitekter, rent krasst. I de projekt jag varit med i där man lagt tid på att få en bra lösning och refaktorera sådant som inte varit bra har man haft minst lika bra produktivitet, och ofta bättre, än de projekt där man byggt på sig en teknisk skuld av halvdana lösningar.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Hedersmedlem
Skrivet av Phod:

Ni som är tväremot enhets- och integrationstester, hur gör ni innan ni driftsätter? Manuell testning av hela systemet?

Jag gillar agil utveckling med täta driftsättningar och då är automatiserade test ovärderliga. Men jag håller med om att automatiserade test kan bli väldigt jobbiga, och då gäller det ju att lägga sig på en bra nivå. Sedan har jag insett att det kan vara lätt att skriva automatiserade test på ett dåligt sätt, speciellt innan man fått litet erfarenhet av de, och då är de lätt att de blir jobbiga att hantera i längden.

Om ni tycker det är jobbigt och tar lång tid att få till väldesignade lösningar så jobbar ni nog med rätt kassa arkitekter, rent krasst. I de projekt jag varit med i där man lagt tid på att få en bra lösning och refaktorera sådant som inte varit bra har man haft minst lika bra produktivitet, och ofta bättre, än de projekt där man byggt på sig en teknisk skuld av halvdana lösningar.

Väl sammanfattat. Om man arbetar agilt eller i DevOps och man inte har automatiska tester så blir det väldigt begränsande. Det tar för lång tid att testa av hela produkten, om än bara de kritiska flödena för att man ska kunna bli snabb. Men man måste också hålla efter testerna samt inte ta i med för mycket tester. Tanken med DevOps är ju att vi kan fixa saker snabbt. Så mindre fel kan vi hantera på detta viset så länge de affärskritiska flödena fungerar.

Nu börjar ITIL och andra kvalitetsmänniskor som gillar att räkna buggar snart skrika, men alla buggar är faktiskt inte lika mycket värda, och det kommer alltid att finnas buggar. Lika bra att acceptera det och bygga upp en struktur som gör att vi kan hantera dem snabbt.

Visa signatur

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

Permalänk
Medlem

Om folk lagt lika mycket tid på att faktiskt förstå vad och varför man kodar som man lägger på att hitta fancy ramverk, läsa moderiktiga bloggar/yt och skriva one-liners, så hade vi inte behövt tester, PR eller annan kvalitetssäkring i lika stor utsträckning.
Vet inte hur mycket junior kod jag granskat som är tekniskt briljant och väldigt edgy o avancerad, men helt obegriplig, absurt komplex för vad den löser och som kommer att kosta massor att underhålla, både av nuvarande devs och framtida. Paradexemplet är en som implementerade moments.js bara för att få ut dagens datum...
Och en annan som skulle in och lägga till en sak i en dropdown (!) som hen skrev två veckor tidigare, och fick sitta o läsa igenom alltihopa igen för att begripa det, en dropdown... (Hen hade excellerat i att bryta ut exakt allt i komponenter)

Med det sagt så är jag inte emot tester, eller PR, men man måste få ut vettigt värde och funktion av dom. Oftast är det bättre att sänka tempot och begripa vad man gör istället
/2c

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem
Skrivet av kundun:

Om folk lagt lika mycket tid på att faktiskt förstå vad och varför man kodar som man lägger på att hitta fancy ramverk, läsa moderiktiga bloggar/yt och skriva one-liners, så hade vi inte behövt tester, PR eller annan kvalitetssäkring i lika stor utsträckning.
Vet inte hur mycket junior kod jag granskat som är tekniskt briljant och väldigt edgy o avancerad, men helt obegriplig, absurt komplex för vad den löser och som kommer att kosta massor att underhålla, både av nuvarande devs och framtida. Paradexemplet är en som implementerade moments.js bara för att få ut dagens datum...
Och en annan som skulle in och lägga till en sak i en dropdown (!) som hen skrev två veckor tidigare, och fick sitta o läsa igenom alltihopa igen för att begripa det, en dropdown... (Hen hade excellerat i att bryta ut exakt allt i komponenter)

Med det sagt så är jag inte emot tester, eller PR, men man måste få ut vettigt värde och funktion av dom. Oftast är det bättre att sänka tempot och begripa vad man gör istället
/2c

Inte bara en junior grej. Det finns på riktigt många där ute som tror ju mer avancerad kod, obskyra ramverk och paket ju bättre är koden.

Den bästa koden är ingen kod, din kod ska vara så enkel att en junior kan förstå fort vad den gör.

Försöker alltid skriva enkel och tråkig kod.

Visa signatur

I7 7700k 4,8GHZ | Asus Strix 1080TI 2000Mhz | Corsair Vengeance RGB DDR4 3100mhz| Gigabyte GA-Z270X-Ultra Gaming | Corsair RM850i 850W. AOC AG271QG.

Permalänk
Medlem
Skrivet av kundun:

Om folk lagt lika mycket tid på att faktiskt förstå vad och varför man kodar som man lägger på att hitta fancy ramverk, läsa moderiktiga bloggar/yt och skriva one-liners, så hade vi inte behövt tester, PR eller annan kvalitetssäkring i lika stor utsträckning.
Vet inte hur mycket junior kod jag granskat som är tekniskt briljant och väldigt edgy o avancerad, men helt obegriplig, absurt komplex för vad den löser och som kommer att kosta massor att underhålla, både av nuvarande devs och framtida. Paradexemplet är en som implementerade moments.js bara för att få ut dagens datum...
Och en annan som skulle in och lägga till en sak i en dropdown (!) som hen skrev två veckor tidigare, och fick sitta o läsa igenom alltihopa igen för att begripa det, en dropdown... (Hen hade excellerat i att bryta ut exakt allt i komponenter)

Med det sagt så är jag inte emot tester, eller PR, men man måste få ut vettigt värde och funktion av dom. Oftast är det bättre att sänka tempot och begripa vad man gör istället
/2c

I vissa fall kan man inte komma undan att koden blir komplex för att den utför något komplext. Men då bör man abstrahera bort det så mycket som möjligt. Givetvis ska man skriva det så självdokumenterat som möjligt, dvs refaktorera i små metoder med tydliga namn så en människa kan läsa vad som händer. Samtidigt tycker jag att lite kod är bättre än mycket kod, så jag föredrar one-liners framför t.ex. nästlade loopar där det är möjligt. Men det är något man får avväga då man skriver det, kan jag förstå det här eller är det bättre att bara göra en loop?

Har du en hög täckning av tester och ett automatiserat flöde så vågar man göra releaser till produktion flera gånger om dagen. Att sänka tempot är inte alltid önskvärt om du bygger en produkt som konkurrerar mot andra.

I övrigt tycker jag det nästan är tvärtom. Seniorer använder patterns från 90 talet (då det behövdes) och bygger 10 lager med abstraktioner och factories för att anropa databasen. Medan en junior gör en abstraktion och är klar. KISS.

Permalänk

Min syn på det är att det är helt jävla omöjligt att skriva kod som ens kompilerar och sen fungerar över huvud taget om man inte testar. Testa att skriva en hello world utan att använda kompilator eller IDE och se om du får alla fnuttar och annat rätt...

Så folk måste har alltid något sätt de testar koden på, men det kan vara lite "omedvetet" så att säga, genom att t.ex helt enkelt köra den och få in rätt inputs för att deras kod ska traverseras.

Testautomation handlar om att göra det på ett, ja automatiserat, sätt. Man gör samma sak som om man skriver koden "utan" tester, bara gör ett litet program som går igenom stegn åt en istället för att göra det själv varje gång.

Problemen är att i riktiga kodbaser därute har man tillhörande arbetsmetoder som är väldigt ingrodda och svåra att backa ut ur. Det är sällan du får skriva nåt från grunden och har fria händer liksom. Ofta går det inte att ens köra koden utan att hoppa igenom en massa konstiga manuella steg. Eftersom koden och miljön inte är byggd med automatiserade tester från början, är det alltid väldigt trixit att få upp förutsättningarna för att skriva sådana. Så ser verkligheten ut å de är bara bita ihop och fortsätta på bygget som det ser ut, man sällan tid eller motiverat att ändra på sånt här i grunden.

Permalänk
Medlem
Skrivet av zaibuf:

I övrigt tycker jag det nästan är tvärtom. Seniorer använder patterns från 90 talet (då det behövdes) och bygger 10 lager med abstraktioner och factories för att anropa databasen. Medan en junior gör en abstraktion och är klar. KISS.

Och min erfarenhet av drygt 20 år inom branschen (sen slutet av 90-talet, ja, jag vet att jag är gammal!) är att det finns grymma juniorer liksom det finns grymma seniorer. Nu har jag under min karriär aldrig stött på någon applikation med 10 lager. Men den / de som utvecklade det du har erfarenhet av och använde något märkligt "design pattern" var definitivt INTE senior. Alla gamla är inte seniora utvecklare och alla unga är inte juniora.

För övrigt var inte behovet större av design patterns under 90-talet. Om det var något årtionde som design patterns var väldigt "inne" skulle jag påstå att det var 2000-talet. Då överutnyttjades det i många projekt.

Det finns skräckexempel både bland unga och gamla oavsett vad dom själva anser sig använda för metod.

För att glida över till trådens ämne om tester.

Ett perspektiv som saknas, delvis, i tråden är att det pratas mycket om man är för eller emot "tester" (många klumpar även ihop alla olika typer av tester till enbart "tester"), men väldigt lite om i vilket kontext det är viktigt eller inte viktigt.

Utvecklar man någon mindre kampanj som kommer leva i några månader (bara ett exempel), behövs 100% coverage? Knappast. Utvecklar man en applikation som är tänkt att vidareutvecklas och frodas under X antal år. Då ökar absolut behovet av bra "tester" och bra rutiner.

Så min åsikt är att det beror helt och hållet på vad det är för projekt.

Dock har jag på många ställen sett extremt dåligt skrivna tester att dom enbart blir en belastning.

Sammanfattningsvis, tester är bra och viktiga i rätt projekt och om testerna skrivs bra.

Visa signatur

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Permalänk
Medlem

Jag skriver kod för plc och är inne på test-spåret. Vanligtvis försöker man i branschen jag verkar simulera så gott det går, forcera ingångar och kontrollera vad som kommer ut.

Hur kan unit testing se ut? Hur skulle ni rekommendera att jag börjar?
Till info skriver jag oftast i strukturerad text(ST), vilket är som pascal. Men det kanske kvittar. Vidare så verkar jag på ett ställe där produktion går nästan dygnet runt och alltså är väldigt känslig för osäkerhet och stopp.

Visa signatur

#nul