C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

WTF. @Yoshman skriver om att det är dyrt att certifiera programvara, på den nivån att den genererade koden granskas instruktion för instruktion. Då håller du med men lägger till att det beror på att programmerarna testar för mycket!?! Och att koden blir långsam för att de testar??? Hur tänkte du nu?

Jag förklarade orsaken till att det blir dyrt, många arbetstimmar och det måste ut lön

Permalänk
Skrivet av klk:

Jag förklarade orsaken till att det blir dyrt, många arbetstimmar och det måste ut lön

Ja, certifieringen kräver ett omfattande testarbete. Om du nu skall styra rymdraketer, flygplan eller kärnkraftverk har beställaren ställt upp kriterier som måste uppfyllas för att programvaran skall godkännas. Certifieringen görs typiskt av tredje part som skall sätta sin stämpel på att alla krav har uppfyllts. Då krävs det att det finns tester enligt den specifikation som skall följas.

Skrivet av klk:

Exakt, det är dyrt vilket är en konsekvens av att programmerare aldrig blir klara. De trasslar i sin i massa test, koden blir segare och segare att jobba i tills projektet kraschar.

Så länge det är simpla saker kanske de lyckas få fram något men räkna med mängder med arbetstimmar

Det är därför enhetstester är totalt värdelöst

När jag läser ditt inlägg får jag intrycket att du lägger skulden på programmerarna. Inte att beställaren har lagt en testbörda på dem. Utan programmerarna är klåpare som behöver skriva tester och för att de skriver tester kommer inte projektet bli klart i tid, segt att jobba i. Det kommer att misslyckas.

Slutligen kommer kronan på verket: "Det är därför enhetstester är totalt värdelöst". Än en gång har du tappat bort mig i resonemanget. Enhetstester suger för att ...? Och hur relaterar det till kod-certifiering?

Permalänk
Datavetare
Skrivet av klk:

Jag förklarade orsaken till att det blir dyrt, många arbetstimmar och det måste ut lön

Fast vad har du "förklarat"?

Att det är dyrt att utveckla kod där testningen är på en nivå som krävs för certifiering är ju ingen nyhet, det finns redan massor med konkreta exempel på det vilket är också är huvudorsaken till att man inte testar på den nivån om det inte är ett hårt krav. Det trots att det är uppenbart vilken hög kvalité kod som är certifierad mot krav likt DO-178C är i praktiken.

Vad du överhuvudtaget inte lyckats förklara är hur "normal" användning av unit-testing skulle bli dyrare än att säga "skriv rätt från början!!!", sedan hoppas att det blir så och hantera problemen när de kommer in från fältet.

Att skriva bra tester är något man måste lära sig. Överlägset vanligaste misstaget är att man försöker testa den valda implementationen, det gör det väldigt tungrott om/när man sedan försöker ändra något.

Det man ska testa är förväntat externt observerbart beteende av sitt API, så länge inte APIet ändrar vad det utför och hur dess signatur ser ut krävs inga ändringar alls i testerna (tvärtom blir då testerna ett snabbt/effektivt test på att man inte pajat något som tidigare fungerade när koden ändras).

Om man vänder på frågan: på något sätt måste man ju ändå förvisa sig om att koden fungerar som tänkt. Hur anser du att det görs i det ideala fallet (och hur är det snabbare/effektivare än TDD)?

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Vad du överhuvudtaget inte lyckats förklara är hur "normal" användning av unit-testing skulle bli dyrare än att säga "skriv rätt från början!!!", sedan hoppas att det blir så och hantera problemen när de kommer in från fältet.

Försöker en liten förklaring igen.
Ett stort problem med enhetstester är att man låser koden, med det menar jag att det blir en "koppling" (coupling) till annan kod och de flesta som skrivit en del kod vet att alla programmerare har en huvudmotståndare, det är just coupling. Desto mer coupling desto mer problem. Man kan aldrig komma ifrån problemet helt med duktiga programmerare har ofta lärt sig producera kod som har mindre coupling.

I början av en utveckling så ändrar koden sig, man skriver om (eller borde göra det). Är det svårare att ändra koden görs det inte, i alla fall inte om de fått till något som fungerar. Istället lappas och lagas det och man gräver gropen djupare och djupare.

De exempel på tester du beskrev tidigare i tråden anser jag att man lätt plockar med regressoinstest. Här är ett exempel på applikation som kan räkna kodrader bl.a., då kan ett test vara att räkna kod för boost. Denna typ av test går inte in på detaljnivå och det är möjligen det som vissa programmerare behöver för att veta var de skall leta men det fångar upp om något ändrat sig så programmet inte producerar samma resultat.

Givetvis behöver man tänka igenom vad för typ av test som görs så att de testar så mycket som möjligt av koden

Och viktigast av allt, man slipper extra kod som ökar på coupling

Permalänk
Medlem
Skrivet av klk:

Ett stort problem med enhetstester är att man låser koden, med det menar jag att det blir en "koppling" (coupling) till annan kod och de flesta som skrivit en del kod vet att alla programmerare har en huvudmotståndare, det är just coupling. Desto mer coupling desto mer problem. Man kan aldrig komma ifrån problemet helt med duktiga programmerare har ofta lärt sig producera kod som har mindre coupling.

Fast nu känns det som du rör ihop saker igen. Coupling har ju med arkitekturen i övrigt att göra och inget med unit tester.

Om du nu tvunget vill applicera coupling-perspektivet på unit tester så kommer ju unit testerna vara start kopplade mot koden som du testar men det är ju helt naturligt och inte unikt för unit tester, all typ av testning kommer vara starkt kopplad till koden som dom testar. Sedan koden som testas har ju ingen koppling till testet så ur det perspektivet så borde det ju vara skitbra i dina ögon.

Coupling handlar ju framförallt om väldefinierade interface i din kod så att det inte sker anrop kors och tvärs utan eftertanke och som tidigare sagt man brukar aldrig inkludera tester i det perspektivet för då har man missförstått något. Jag har t o m för mig att unit tester kan fungera som en indikator för att din kod är för hård kopplad om du upplever det svårt att skriva unit testerna.

Det känns som du hört "coupling är dåligt" utan att förstå konceptet.

Permalänk
Datavetare
Skrivet av klk:

Försöker en liten förklaring igen.
Ett stort problem med enhetstester är att man låser koden, med det menar jag att det blir en "koppling" (coupling) till annan kod och de flesta som skrivit en del kod vet att alla programmerare har en huvudmotståndare, det är just coupling. Desto mer coupling desto mer problem. Man kan aldrig komma ifrån problemet helt med duktiga programmerare har ofta lärt sig producera kod som har mindre coupling.

I början av en utveckling så ändrar koden sig, man skriver om (eller borde göra det). Är det svårare att ändra koden görs det inte, i alla fall inte om de fått till något som fungerar. Istället lappas och lagas det och man gräver gropen djupare och djupare.

De exempel på tester du beskrev tidigare i tråden anser jag att man lätt plockar med regressoinstest. Här är ett exempel på applikation som kan räkna kodrader bl.a., då kan ett test vara att räkna kod för boost. Denna typ av test går inte in på detaljnivå och det är möjligen det som vissa programmerare behöver för att veta var de skall leta men det fångar upp om något ändrat sig så programmet inte producerar samma resultat.

Givetvis behöver man tänka igenom vad för typ av test som görs så att de testar så mycket som möjligt av koden

<Uppladdad bildlänk>

Och viktigast av allt, man slipper extra kod som ökar på coupling

Det är en skill-issue! TDD m.h.a. unit-tester är programutveckling precis som all kod.

De som får problem med unit-tester ihop med TDD skriver sina tester med 1-till-1 mappning mot koden de tester, d.v.s. fallet till vänster. Det kan vara OK för enklare fall, men det kommer antagligen bli ett problem i mer komplexa fall.

Lösningen?

Exakt samma som vilken kod som helst där man kan ana att saker lär ändras framöver: man skapar en lokal abstraktion som man primärt skriver sina tester mot, inuti denna anropas produktionskoden som testas. D.v.s. fallet till höger.

Om/när något förändras i produktionskoden och man inte totalt ändrat vad den faktiskt gör kommer nu testerna initial gå sönder men kommer krävas en relativt modest förändring i den abstraktion man gjort. Själva testerna kommer i nära nog 100 % av fallen fortfarande vara helt orörda.

Så ja, man kan absolut köra i diket med TDD/unit-tester. Men det beror på bristande kunskap, inte att TDD/unit-tester är fundamentalt trasigt.

Tvärtom ser vi att "alla" insett deras värde till sådan grad att i praktiken alla relevanta programspråk har en eller flera de-facto standard ramverk för att göra detta och blir allt vanligare med en "riktig" standard i form av standard-tool-chain har stödet integrerat på samma sätt som ett standardbibliotek är integrerat.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Lösningen?

Exakt samma som vilken kod som helst där man kan ana att saker lär ändras framöver: man skapar en lokal abstraktion som man primärt skriver sina tester mot, inuti denna anropas produktionskoden som testas. D.v.s. fallet till höger.

Om/när något förändras i produktionskoden och man inte totalt ändrat vad den faktiskt gör kommer nu testerna initial gå sönder men kommer krävas en relativt modest förändring i den abstraktion man gjort. Själva testerna kommer i nära nog 100 % av fallen fortfarande vara helt orörda.

Även om du skrivit bra enhetstester som är isolerade från början, nu kommer krav från kunder att det skall läggas in mer funktionalitet eller att något skall ändra sig. Hur gör du?

Skrivet av Yoshman:

Om/när något förändras i produktionskoden och man inte totalt ändrat vad den faktiskt gör kommer nu testerna initial gå sönder men kommer krävas en relativt modest förändring i den abstraktion man gjort. Själva testerna kommer i nära nog 100 % av fallen fortfarande vara helt orörda.

Mycket "om" blir det ;), det här är inget realistiskt exempel. Saker ändrar sig hela tiden om man tänker på användardomän

Skrivet av Yoshman:

Det är en skill-issue! TDD m.h.a. unit-tester är programutveckling precis som all kod.

Som med allt annat men när utvecklare nått den nivån behöver de inte skriva tester längre för de trasslar inte till det för varandra. Man har lärt sig skriva felfriare kod på effektivare sätt

Permalänk
Medlem
Skrivet av orp:

Om du nu tvunget vill applicera coupling-perspektivet på unit tester så kommer ju unit testerna vara start kopplade mot koden som du testar men det är ju helt naturligt och inte unikt för unit tester, all typ av testning kommer vara starkt kopplad till koden som dom testar. Sedan koden som testas har ju ingen koppling till testet så ur det perspektivet så borde det ju vara skitbra i dina ögon.

Så om man skriver om metoder, låt säga en förbättring görs och då vissa metoder kanske plockas bort eller får andra argument. Måste jag inte då också skriva om testerna som tidigare var anpassade mot tidigare metoder?

Är inte det "coupling" menar du?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Ja, certifieringen kräver ett omfattande testarbete. Om du nu skall styra rymdraketer, flygplan eller kärnkraftverk har beställaren ställt upp kriterier som måste uppfyllas för att programvaran skall godkännas. Certifieringen görs typiskt av tredje part som skall sätta sin stämpel på att alla krav har uppfyllts. Då krävs det att det finns tester enligt den specifikation som skall följas.

Japp, känner till så mycket att beställaren har krav och visst, det kanske känns tryggt men om det är tryggt är en annan femma. Möjligen en säkerhet mot att man får kod som går att underhålla och inget egetsnickrat.

Vet att det finns certifieringar som inte tillåter nyare versioner av C++ för att ta ett exempel. Kanske inte helt smarta certifieringar isåfall.
Ingen expert på bilindustrin men har fått lite insyn och sett att det finns gott om certifieringar där och mjukvaruprojekten är inte kända för att gå bra.

Permalänk
Medlem
Skrivet av klk:

Så om man skriver om metoder, låt säga en förbättring görs och då vissa metoder kanske plockas bort eller får andra argument. Måste jag inte då också skriva om testerna som tidigare var anpassade mot tidigare metoder?

Är inte det "coupling" menar du?

Om du plockar bort en metod då kan du plocka bort testet/testerna relaterade till metoden dvs minimalt med arbete.

Jag sa ju att om du tvunget vill adressera coupling och cohesion när det kommer till unit tester så kommer testerna vara kopplade med koden. Du kan ju exempelvis plocka bort testerna utan att koden slutar fungera så åt det hållet har du ju inga kopplingar. Sedan har du ju sagt att du testar på andra sätt, du har nämnt regressionstester, behöver inte dessa tester uppdateras om du ändra interface? Isf har du ju coupling fast på en annan nivå bara.

Om du ändra en metods parametrar så visst du kommer behöva göra en minimal ändring i ditt unit test men du måste ju även uppdatera dina asserts så mängden arbete lär var likvärdigt.

Permalänk
Medlem
Skrivet av orp:

Om du plockar bort en metod då kan du plocka bort testet/testerna relaterade till metoden dvs minimalt med arbete.

Hur vet jag vilka tester som använder metoden?
Och måste jag inte skriva nya tester mot den nya koden?

Skrivet av orp:

Jag sa ju att om du tvunget vill adressera coupling och cohesion när det kommer till unit tester så kommer testerna vara kopplade med koden. Du kan ju exempelvis plocka bort testerna utan att koden slutar fungera så åt det hållet har du ju inga kopplingar.

Men du har fortfarande lagt ner tid på att skriva testerna och ofta är det inte samma person som skriver kod, nya kommer till projekt och de blir rädda för att göra sönder tester.
Det känns inte som ni har så stor erfarenhet av tester och vilken soppa de kan skapa

Skrivet av orp:

Sedan har du ju sagt att du testar på andra sätt, du har nämnt regressionstester på någon högre nivå eftersom unit tester är uteslutna, behöver inte dessa tester uppdateras om du ändra interface, så är ditt svar att inte testa alls?

Som jag tidigare skrev gillar jag inte enhetstester för att de testar för dåligt, att jag inte är emot tester utan tvärtom tycker det är extremt viktigt att kod testas men då med bättre teknik än vad enhetstester erbjuder. I "min bok" är enhetstester nästan enbart merarbete som inte tillför någon direkt nytta, tvärtom blir det mycket teknisk skuld

Permalänk
Medlem

Man kanske kan sammanfatta det som försökt sägas något såhär: En funktion som givet en viss input X ska ge en output Y kan enkelt testas. Testa att func(X, ...) == Y. Testet är alltså inte knutet till en specifik implementation.

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Datavetare
Skrivet av klk:

Även om du skrivit bra enhetstester som är isolerade från början, nu kommer krav från kunder att det skall läggas in mer funktionalitet eller att något skall ändra sig. Hur gör du?

Att lägga till funktionalitet är det triviala fallet, behövs lite nya tester för de nya funktionerna.

Om saker ändras, finns i huvudsak två fall.

1. APIet förändras i specifika detaljer, då ändras abstraktionen men i de flesta fall påverkas inte testerna alls då man fortfarande testar samma sak.

2. Funktion tas bort (i praktiken väldigt ovanligt, men händer). Då lär också vissa tester tas bort.

Skrivet av klk:

Mycket "om" blir det ;), det här är inget realistiskt exempel. Saker ändrar sig hela tiden om man tänker på användardomän

Inte mer "om" än vilken kod som helst. Det är faktiskt normalfallet idag att ha den här typen av tester, så svårt kan det inte vara.

Har själv jobbat med det i allt från kod som är några tusen rader till kodbaser med årtionden med "legacy" som totalt är många miljoner rader kod.

Nu har jag en stor del av mitt arbetsliv jobbat med OS-kärnor och kringliggande systemtjänster, där ändrar man inte ett publicerat API och man vill ha kvar några kunder. Så att testa "customer-facing" delarna är rätt mycket ett icke-problem ur den aspekten.

Krävs lite mer när man tester interna APIer som man vill kunna ändra, men har man en någorlunda populär produkt lär man sig rätt snabbt att Hyrums lag tyvärr stämmer. Så i praktiken måste man alltid tänka till när man ändra sakers. Men går absolut att använda TDD i produkter där i stort sett hela koden är "intern" (man gör ett program folk använder via UI), jobbar specifikt med ett sådan fall just nu där TDD appliceras.

Så självklart finns utmaningar med TDD/unit-tester. Men tror den delen jag överhuvudtaget inte begriper är vad du anser är den bättre lösningen. För mig låter det verkligen som du anser "gör rätt från början, då behövs inga tester, ett gäng asserts fixar biffen!". Hel-coolt om det fungerar för dig, det är ett säkert recept för katastrof för de flesta.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk

Är det inte lite lustigt att han som inte tycker tester behövs

Skrivet av klk:

Som med allt annat men när utvecklare nått den nivån behöver de inte skriva tester längre för de trasslar inte till det för varandra. Man har lärt sig skriva felfriare kod på effektivare sätt

talar om för oss, som vanemässigt skriver enhetstester och tycker att de hjälper oss i utvecklingen,

Skrivet av klk:

Det känns inte som ni har så stor erfarenhet av tester och vilken soppa de kan skapa

att vi inte vet vad vi håller på med?

Skiljetecken saknades
Permalänk
Skrivet av klk:

Japp, känner till så mycket att beställaren har krav och visst, det kanske känns tryggt men om det är tryggt är en annan femma. Möjligen en säkerhet mot att man får kod som går att underhålla och inget egetsnickrat.

Vet att det finns certifieringar som inte tillåter nyare versioner av C++ för att ta ett exempel. Kanske inte helt smarta certifieringar isåfall.
Ingen expert på bilindustrin men har fått lite insyn och sett att det finns gott om certifieringar där och mjukvaruprojekten är inte kända för att gå bra.

Nu hoppade du över frågan som handlade om hur certifiering leder till att enhetstester är värdelösa. @Yoshman skrev att certifiering var dyrt och du avslutade ditt svar på det inlägget med "Det är därför enhetstester är totalt värdelöst". Jag skulle väldigt gärna vilja veta hur du resonerade när du kom till den slutsatsen.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Är det inte lite lustigt att han som inte tycker tester behövs

Tvärtom och för tredje gången, enhetstester är för dåliga. Du fångar för lite, de kostar för mycket extra jobb och hela koden blir trögjobbad och tung. Man snärjer in sig
Enhetstester testar alltså för dåligt, inte att tester inte behövs.

Skrivet av Ingetledigtnamn:

att vi inte vet vad vi håller på med?

Ni har inte prövat annan teknik för idag är det väldigt svårt att protestera mot massorna. Trender är extremt starka inom programmering och det finns också en hel del incitament för ofta är utveckling konsultstyrd och de tjänar pengar på att fakturera timmar

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Nu hoppade du över frågan som handlade om hur certifiering leder till att enhetstester är värdelösa. @Yoshman skrev att certifiering var dyrt och du avslutade ditt svar på det inlägget med "Det är därför enhetstester är totalt värdelöst". Jag skulle väldigt gärna vilja veta hur du resonerade när du kom till den slutsatsen.

Flera diskussioner samtidigt. Ger mig på att försöka sammanfatta. Flexibilitet är mycket viktigt när man skriver kod, att saker inte är beroende av varandra. Alla hinder som eventuellt har ett gott syfte inkräktar i princip alltid mer eller mindre på flexibilitet. Extern testkod inkräktar på flexibilitet, byråkratiska regler inkräktar också på flexibilitet.

Beroende på skicklighet kan självklart utvecklare behöva hinder för de kan inte hantera flexibiliteten men då uppstår ett annat problem, hur skall de lära sig om de inte får lov att träna?

Låt säga att certifieringen endast tillåter C++11, jobbigt läge för det finns en del mycket trevligt i senare versioner av C++. En smartare certifiering hade isåfall varit att begränsa viss typ av kod men antar att det blir för svårt att kontrollera. De har kanske dåliga sökverktyg

Här om reflections i C++ som kommer i C++26, något många anser att det bli ett nytt språk

Permalänk
Medlem
Skrivet av klk:

Det känns inte som ni har så stor erfarenhet av tester och vilken soppa de kan skapa

Du erkänner att du inte skriver unit test medans vi andra skriver unit test. Jag tror därför att du har minst erfarenhet av att skriva test.

Jag tror att du är kass på att skriva unit test och därför vill du inte skriva unit test och därför predikar du om att unit test är värdelöst. Du kan helt enkelt inte arbeta med att koda inom safety(militär, fordon och med-tech) om du inte skriver unit test, kan du lista ut varför?

För att unit test inte är värdelösa...

Dold text
Permalänk
Medlem
Skrivet av orp:

Du kan helt enkelt inte arbeta med att koda inom safety(militär, fordon och med-tech) om du inte skriver unit test, kan du lista ut varför?

Jag gissar, kan det vara för att B-laget i första hand jobbar där, den typen av programmeringstjänster kanske inte tillhör de mest eftertraktade. De har svårt att attrahera duktiga utvecklare och behöver därför regler för att få något gjort

Permalänk
Medlem
Skrivet av klk:

Jag gissar, kan det vara för att B-laget i första hand jobbar där, den typen av programmeringstjänster kanske inte tillhör de mest eftertraktade. De har svårt att attrahera duktiga utvecklare och behöver därför regler för att få något gjort

Eller för att man måste bevisa att ens kod fungerar och det räcker inte med "Trust me, bro".

Permalänk
Medlem
Skrivet av orp:

Eller för att man måste bevisa att ens kod fungerar och det räcker inte med "Trust me, bro".

Bevisar du det med enhets tester?

Kan jag exempelvis inte bevisa att min kod fungerar om jag inte har gjort enhetstester mot den?

Tror du någon utvecklare ens kan påverka ett team med ideer om man är så fastlåst i en viss teknik?

Permalänk
Medlem
Skrivet av klk:

Bevisar du det med enhets tester?

Bland annat

Skrivet av klk:

Kan jag exempelvis inte bevisa att min kod fungerar om jag inte har gjort enhetstester mot den?

Hur uppnår du motsvarande granularitet som ett unit test i ett automatiserat test utan att det klassas som ett unit test?

Permalänk
Medlem
Skrivet av orp:

Hur uppnår du motsvarande granularitet som ett unit test i ett automatiserat test utan att det klassas som ett unit test?

Kanske köra programmet? Du vet, använda mjukvaran
Hur bevisar man att annat fungerar, köper du en spis, tv, mobil eller liknande, är det inte användning som är beviset

Permalänk
Medlem
Skrivet av klk:

Kanske köra programmet? Du vet, använda mjukvaran
Hur bevisar man att annat fungerar, köper du en spis, tv, mobil eller liknande, är det inte användning som är beviset

Där har du ju inte bevisat något mer än vad en bilförsäljare har, "Kolla bilen startar, där är inga fel på den".

I allt det du listade där så är jag övertygad om att bolaget använder unit tester. Iaf i TV, mobiler, övervakningskameror, möbelföretag, låstillverkare ...

Du är nog den första utöver juniora utvecklare som kommer färska från skolan som jag stött på som tycker att det är värdelöst. Juniora utvecklare erkänner iaf att dom inte gillar unit tester jobbigt för dom att skriva testerna(dina lata briljanta utvecklare ).

Permalänk
Medlem
Skrivet av orp:

Där har du ju inte bevisat något mer än vad en bilförsäljare har, "Kolla bilen startar, där är inga fel på den".

Hört talas om "garanti" `?

Permalänk
Medlem
Skrivet av klk:

Hört talas om "garanti" `?

Det är ju fortfarande inte ett bevis för att mjukvaran fungerar så du hade fortfarande inte fått lansera en safety-reglerad produkt på marknaden.

Jag tror att din arbetsgivare hade varit jätteglad av att höra dig säga: "jag pallar inte skriva test men jag har testkört det på min dator utan några problem så vi borde release:a..."

Du får göra som du vill men jag hade varit nyfiken på vilket bolag du jobbar åt så jag kan undvika era produkter/tjänster?

Permalänk
Skrivet av klk:

Tvärtom och för tredje gången, enhetstester är för dåliga. Du fångar för lite, de kostar för mycket extra jobb och hela koden blir trögjobbad och tung. Man snärjer in sig
Enhetstester testar alltså för dåligt, inte att tester inte behövs.

Enhetstesterna är vad du gör dem till.

De låter dig på ett enkelt sätt verifiera att det externt observerbara i ett API beter sig som förväntat.

Täckningsgraden beror, precis som i all annan form av testning, på antalet tester du skriver. Om du tycker att de fångar för lite skriver du inte tillräckligt bra tester. Jag tycker det är mycket lättare att få hög coverage med enhetstester där jag kan skicka in de "intressanta" värdena direkt i ett funktionsanrop och verifiera att rätt värde returneras. Att få samma täckningsgrad med det du refererat till som regressionstester, där man startar hela applikationen, kör på viss input och verifierar mot förväntad output är mycket krångligare och dessa tester tar mycket längre tid att köra. Hela testprocessen blir mer tung och trögjobbad.

Vad menar du med att man snärjer in sig? Du har nämnt coupling. Jo, det stämmer att testkoden kommer anropa funktioner i ditt API. Det måste den rimligen göra om man skall anropa funktionen, men den anropade koden har ingen koppling till testerna. Så länge du håller dig till att testa det externt observerbara finns det inget som hindrar att refactoring eller utökningar av produktionskoden.

Räcker det med enhetstester? Nej, de garanterar inte på något sätt att enheterna kommer fungera ihop. Men om du på ett enkelt sätt kan verifiera att de olika enheterna var för sig beter sig som du förväntar dig så är det en bra start. Under resten av utvecklingen ger de en snabb återkoppling med små testfall där det är lätt att identifiera vad som ger fel svar och sannolikt lättare att hitta problemet än om du måste köra hela applikationen. En annan fördel är att de går att köra långt innan man har en färdig applikation.

Skrivet av klk:

Ni har inte prövat annan teknik för idag är det väldigt svårt att protestera mot massorna.

Jag har ju frågat igen och igen hur du hanterar din testning. Som svar har jag fått asserts och regressionstester, men det ser jag inte som något som skulle revolutionera min testning. Upplys oss, utbilda oss i "annan teknik". Fräls oss!

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Jag har ju frågat igen och igen hur du hanterar din testning. Som svar har jag fått asserts och regressionstester, men det ser jag inte som något som skulle revolutionera min testning. Upplys oss, utbilda oss i "annan teknik". Fräls oss!

Har tidigare nämnt om att eventuellt starta en tråd om arkitektur för det du frågar om är ofta invecklat och beskriva i ett enda svar.
Men känner du till Data Orienterad Design så vet du mycket om mitt tänk. Kan dra det till absurda nivåer och kod återanvänds. Nämnde också tidigare att enligt mig är det viktigt att olika delar är isolerade. Istället för att anropa en metod kan jag skicka taggad data. Där mottagaren får läsa av information. Samma princip som url'er fungerar och olika varianter på det. Att göra hårdkodade metodnamn som anropas i något större projekt, har jag något att säga till om så händer inte det.

Att lägga ner tid på en arkitektur som skickar strängar istället för att hårdkoda namn kan återanvändas så investerad tid i kod är inte bortkastad om funktionalitet behöver skrivas om

Nackdelen med den typen av funktionalitet är att om utvecklare inte är vana så ser det lustigt ut, man är säkert van vid att leta efter metodnamn.

Återanvändning är det som gör utvecklare snabba och producerar säker kod.

Svårt och veta hur man skall beskriva för det är känsligt med skryt i tråden. Skulle kunna visa det där sökverktyget jag pillar lite med då och då, det har kommit så långt att jag tror det slår det mesta som finns men konkurrensen är inte direkt hård.

Permalänk
Medlem
Skrivet av klk:

Har tidigare nämnt om att eventuellt starta en tråd om arkitektur för det du frågar om är ofta invecklat och beskriva i ett enda svar.
Men känner du till Data Orienterad Design så vet du mycket om mitt tänk. Kan dra det till absurda nivåer och kod återanvänds. Nämnde också tidigare att enligt mig är det viktigt att olika delar är isolerade. Istället för att anropa en metod kan jag skicka taggad data. Där mottagaren får läsa av information. Samma princip som url'er fungerar och olika varianter på det. Att göra hårdkodade metodnamn som anropas i något större projekt, har jag något att säga till om så händer inte det.

Att lägga ner tid på en arkitektur som skickar strängar istället för att hårdkoda namn kan återanvändas så investerad tid i kod är inte bortkastad om funktionalitet behöver skrivas om

Nackdelen med den typen av funktionalitet är att om utvecklare inte är vana så ser det lustigt ut, man är säkert van vid att leta efter metodnamn.

Återanvändning är det som gör utvecklare snabba och producerar säker kod.

Svårt och veta hur man skall beskriva för det är känsligt med skryt i tråden. Skulle kunna visa det där sökverktyget jag pillar lite med då och då, det har kommit så långt att jag tror det slår det mesta som finns men konkurrensen är inte direkt hård.

Inte ett ord som har med testning att göra... Imponerande.

Permalänk
Medlem
Skrivet av pine-orange:

Inte ett ord som har med testning att göra... Imponerande.

Koden testar sig själv, är du med? Känner du till "defensive programming", har säkert bättre namn men det ingår en hel del och om du inte direktanropar metoder kan du i princip byta ut delar i drift utan att systemet går ner.

Fungerar inte någon del så märker andra delar av det, då löser man det och lägger till delen igen

Självklart beror det på hur maskinkoden kompilerats samman men möjligheterna är många så länge de förstår data som skickas