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

Permalänk
Datavetare
Skrivet av KAD:

Jag kan inte undgå att tro att System Hungarian hade rätt mycket att göra med Cs och speciellt K&R Cs rätt hjärndöda funktionsdeklarationer, speciellt i samband med int.

Är också helt övertygad att HN uppfanns just p.g.a. pre-C89 funktionsdeklarationer + att C må vara statiskt typat, men det är ett väldigt svag typat språk där t.ex. konvertering till/från void* är helt tyst.

Sen ovanpå det hade i alla fall tidigare versioner av Win32 APIet en förkärlek att spara både det ena och andra i long/int, är då lämpligt att indikera vad de egentligen håller.

Lite svårare att se vad HN tillför i moderna statiskt typade och starkt typade språk med väldigt bra editor stöd... I det läget blir det mest en försämring av signal-to-noise.

Skrivet av klk:

Så fort jag försöker så skiter du bara i det, har postat upp exempelkod och frågat hur den skall testas med enhetstester men inte fått någon lösning.

Om jag har en strängmetod som räknar längd och skriver tester för den så lägger jag tid på fel saker dom du förstår

Du har fått ett högnivålösning, i tråden. Men flera har också påpekat att koden du postade är nära nog hopplös att testa p.g.a. väldigt API med en kombo av i praktiken globala variabler och vanliga argument/returvärden. Det kombinerat men en funktion som har en cyklomatisk komplexitet som nog inte skulle passera speciellt många code-reviews idag.

Men det är inte ett bevis på att unit-tester är generellt oanvändbara. Som redan nämnts i tråden kommer sättet man skriver kod förändras när man börjar med TDD. En av de bra utfallen brukar bli större andel rent funktionella delar (lättare att verifiera, fungerar att köras parallellt, typiskt lätta att kombinera med andra funktioner) samt större andel funktioner med relativt få argument och enklare returvärden.

På 90-talet fanns det tekniska orsaker till att inte dela upp sina funktioner i många mindre funktioner. Tooling på den tiden var helt enkelt inte tillräckligt bra att hantera det, så blev långsammare/större binärer. Det är ett icke-problem idag.

Sen angående HN. Fattar helt enkelt inte vad det är för extra information det skulle tillföra utöver det man ändå vet from namnet + typen. Visst kan man namnge saker korkat, men det blir ju lika dåligt med NH.

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:

Du har fått ett högnivålösning, i tråden. Men flera har också påpekat att koden du postade är nära nog hopplös att testa p.g.a. väldigt API med en kombo av i praktiken globala variabler och vanliga argument/returvärden. Det kombinerat men en funktion som har en cyklomatisk komplexitet som nog inte skulle passera speciellt många code-reviews idag.

Men då då får de inte funktionaliteten, skall du göra svåra saker får man köpa att det blir svår kod. Och det är få utvecklare som ens klarar att review den typen av kod. C++ utvecklare som klarar skriva parallella lösningar växer inte på träd.

Skrivet av Yoshman:

Vill också påpeka att jag inte anser det är oanvändbart. Men det kostar i tid och enligt mig så är det mycket ovanligt att utvecklar kan skriva bra tester även om det i den här tråden finns supertestskrivare.
Vad jag menar så kostar det mer än det smakar och det finns bättre sätt att säkra koden.

Eftersom utvecklare får så lite träning att skriva kod är det få som klarar att hantera stora kodmassor. Det är orsaken och bristen på utvecklare har varit extrem. Företag har tvingats anpassa sig till vad de kan få tag på. Finns säkerligen gott om företag där man inte får göra för svår kod även om det innebär bra funktionalitet.

Microsoft som "kom på" HN hade under tiden de här utvecklarna var med, perioden runt 1993 - 2005 mycket skickliga utvecklare. Allt de gjorde då var ofta mycket bättre än vad andra tog fram. Ta språket Java, M$ tog fram bästa miljön och blev stämda, bäst browser och de var till och med innovativa. Sedan började de tappa och idag tror jag det är rätt kass med deras utveckling.
När Visual Studio kom tog den över Borland snabbt, Borland var också duktiga men klarade inte att stå emot. Självklart hade Borland inte alls samma chans då M$ också ägde Windows

En gissning är att AI gör att läget ändrar sig, nu är det stenhård konkurrens igen och det går för de som kan att producera väldigt mycket.

Hade Linux inte varit så anti M$ tror jag de vunnit mycket på att också ta till sig bra tekniker, istället agerade de som "barn" och bara för att M$ gjorde det så kunde de inte göra samma sak.

Edit
Angående AI, pröva AI och HN, AI plockar upp det snabbt och det blir väldigt produktivt

Permalänk
Medlem
Skrivet av klk:

Eftersom utvecklare får så lite träning att skriva kod är det få som klarar att hantera stora kodmassor.

Hur kan en person som arbetar med att skriva kod få lite träning i att skriva kod?

Nu har vi gått runt i cirkeln igen till stora kodmassor. Min förra arbetsgivare har en stor mängd kod och ca 1000 personer som arbetar aktivt med kodbasen. 1000 personer i mitt närområde skulle jag inte kalla få och då är detta enbart ett av många företag.

Skrivet av klk:

Det är orsaken och bristen på utvecklare har varit extrem.

Menar du seniora utvecklare? För om jag inte har helt fel för mig så finns det mängder med juniora utvecklare som inte kan säkra sitt första jobb.

Skrivet av klk:

Microsoft som "kom på" HN hade under tiden de här utvecklarna var med, perioden runt 1993 - 2005 mycket skickliga utvecklare.

Så står det inte i min historiebok. MS kanske var den drivande kraften för att försöka pusha igenom HN inom industrin.

Skrivet av klk:

Allt de gjorde då var ofta mycket bättre än vad andra tog fram. Ta språket Java, M$ tog fram bästa miljön och blev stämda, bäst browser och de var till och med innovativa.

Gällande Java så tog MS fram en inkomplett version av Java och kallade det Java och det var därför dom blev stämda.

Skrivet av klk:

Hade Linux inte varit så anti M$ tror jag de vunnit mycket på att också ta till sig bra tekniker, istället agerade de som "barn" och bara för att M$ gjorde det så kunde de inte göra samma sak.

Vad hade dom vunnit på det?
Vad är det som MS gjorde som Linux inte kunde göra utöver saker som begränsas av MS proprietära licenser?

Linux kör på fler maskiner än Windows så det verkar ju som att dom har gjort rätt val.

Permalänk
Medlem
Skrivet av orp:

Så står det inte i min historiebok. MS kanske var den drivande kraften för att försöka pusha igenom HN inom industrin.

Korrekt och det är också något som missuppfattats. HN är en teknisk lösning för att hantera kod. Microsoft liksom många andra förstod hur man kunde använda den tekniken för att lyckas bättre med projekt.

Känner man till de problem som finns med att hantera olika typer av kod så förstår man direkt varför HN hjälper så bra

Skrivet av orp:

Vad hade dom vunnit på det?

Massor

Permalänk
Medlem
Skrivet av klk:

Korrekt och det är också något som missuppfattats. HN är en teknisk lösning för att hantera kod. Microsoft liksom många andra förstod hur man kunde använda den tekniken för att lyckas bättre med projekt.

"Kom på" är samma som att dom uppfann tekniken dvs det är inte en missuppfattning utan du som har fel.

Skrivet av klk:

Ge exempel, du kan inte bara sitta och ljuga ihop saker utan exempel eller bevis.

Permalänk
Skrivet av klk:

Men då då får de inte funktionaliteten, skall du göra svåra saker får man köpa att det blir svår kod.

Vi har redan behandlat att ditt kodexempel inte passar för enhetstester. Bara för att uppgiften du skall lösa är komplex är det inget som säger att man måste producera onödigt komplex kod.

Jag uppfattade det som att du inte var en stor fan av Uncle Bob (Robert E Martin). Han driver det onödigt långt, men han har en poäng med Clean Code-idén. Det är lättare att läsa och förstå kortare funktioner än en 100+-radersfunktion med 32 variabler. De är även lättare att testa. Om du, när du skriver koden, har i åtanke att den skall vara testbar blir det funktioner som är små, enkla att förstå och att testa. Att ens byggblock är små betyder inte att man inte kan lösa komplexa uppgifter. Om man är en duktig pojkeperson och bedriver renlärig TDD kommer testerna mer eller mindre direkt från kravspec eller funktionsbeskrivning och du behöver inte ens fundera på vad du skall testa. Om man försöker lägga till enhetstester i efterhand och det är svårt att formulera sina tester är det ett tecken på att funktionen för komplex och behöver brytas ner i mindre delfunktioner.

Om man bara hackar på fri hand, utan en plan, och aldrig refaktorerar är risken att resultatet kommer se ut som CDocument::FILE_UpdatePatternList. Att den är svår att testa får faktiskt du ta på dig.

Permalänk
Skrivet av klk:

ok, postar den här om det är så svårt att komma ihåg
https://www.youtube.com/watch?v=ZGKGb109-I4

Jag tittade på klippet och förskräcktes av hans "Nej, vi testar inte, men vi kan sjösätta en ny version på ett par minuter när någon rapporterar en bugg"-attityd. Det är en syn som är väsensskild från min vardag.

Jobbar man med saker där exempelvis ens mjukvara ingår som komponent hos kunden och de buggar som slinker igenom nätet kostar kunden pengar, i form av återkallade produkter, nödprogramvaruuppdateringar eller bara förlängd utvecklingstid, då har man en annan syn på testning. Har man (för mycket) buggar kommer det drabba ens affärsrelation.

Vad har buggar för konsekvenser för dig? Kommer UI inte ritas som det borde, eller slutar kundens produkter fungera?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Jobbar man med saker där exempelvis ens mjukvara ingår som komponent hos kunden och de buggar som slinker igenom nätet kostar kunden pengar, i form av återkallade produkter, nödprogramvaruuppdateringar eller bara förlängd utvecklingstid, då har man en annan syn på testning. Har man (för mycket) buggar kommer det drabba ens affärsrelation.

Teknisk skuld är alltid något man måste vara vaksam på men där brukar andra sätt att testa fungera bra med.

Skrivet av Ingetledigtnamn:

Vad har buggar för konsekvenser för dig? Kommer UI inte ritas som det borde, eller slutar kundens produkter fungera?

Tolkar jag dig rätt så anser du att enhetstester säkrar mjukvara från buggar? Om man tror att tester är samma sak som inga buggar så förstår jag, då är det självklart svårt att förstå att någon inte använder enhetstester.
För mig är inte tester samma sak som buggfritt utan det dyker upp en hel massa buggar trots tester

Permalänk
Medlem
Skrivet av orp:

Ge exempel, du kan inte bara sitta och ljuga ihop saker utan exempel eller bevis.

Istället för att fråga mig så fråga någon AI motor. Alla med historisk kunskap inom utveckling av mjukvara vet nog om konflikten mellan Microsoft och annat, hur otroligt mycket pengar Microsoft tjänade och andra fick slita för brödsmulor. Det och att datorer var löjligt dyrt.
Att Microsofts monopol vart skadligt tror jag de flesta vet men tiden runt 1995-2005 låg deras fokus på att göra bättre teknik, att slå andra bolag med bättre produkter. Sedan ändrade det sig, när de badar i pengar kan de köpa upp konkurrenter som då blir som bolag som utvecklar åt dem.

Problemet Linux nördarna hade för vid denna tiden var det mycket speciella människor som höll på med linux, deras hat var så starkt att det fungerade mer som en religion. De såg inte teknik som togs fram från fienden och därför var Microsoft inte rädda för gratis programvara. De kunde sätta vilka priser de ville i princip, de som behövde mjukvara hade inget eller få val.

Idag är IT ett oligopol, jättarna jobbar ihop eftersom de har samma ägare (pensionsfonder)

Permalänk
Medlem
Skrivet av klk:

Tolkar jag dig rätt så anser du att enhetstester säkrar mjukvara från buggar? Om man tror att tester är samma sak som inga buggar så förstår jag, då är det självklart svårt att förstå att någon inte använder enhetstester.
För mig är inte tester samma sak som buggfritt utan det dyker upp en hel massa buggar trots tester

Du hävdar ju själv att du är bra på logiskt tänkande, du är trots allt C++ programmerare. Tror du att han menar så eller kan det finnas en rimligare tolkning?

Permalänk
Medlem
Skrivet av pine-orange:

Du hävdar ju själv att du är bra på logiskt tänkande, du är trots allt C++ programmerare. Tror du att han menar så eller kan det finnas en rimligare tolkning?

Det kan det säkert finnas men det framgick inte av texten och det är också svårt att förstå upprördheten för om man tror att de som inte använder enhetstester inte testar alls, då har personen missuppfattat.

Jag tror nog att samtliga av de som låter bli enhetstester gör det för att det vet bättre sätt att säkra programvara. ALLA vill ha mjukvara fri från buggar.

Tror du exempelvis jag tycker det är kul med att producera mjukvara med massa buggar?
Det gör jag inte, värsta jag vet
Få personer är så nervösa som jag brukar vara när någon säljare demonstrerat mjukvara jag gjort, tar det mycket hårt om det inte skulle fungera

Permalänk
Medlem
Skrivet av klk:

Istället för att fråga mig så fråga någon AI motor.

Nu är det inte en AI som suttit och ljugit ihop saker här, om du behöver hjälp av en AI för att reda dina dumma påstående så får du använda AI.

Permalänk
Medlem
Skrivet av orp:

Nu är det inte en AI som suttit och ljugit ihop saker här, om du behöver hjälp av en AI för att reda dina dumma påstående så får du använda AI.

Vad är din förklaring, hur kom det sig att Microsoft lyckades och att det tog sådan tid för Linux att bli populär trots att det är gratis.

Permalänk
Medlem
Skrivet av klk:

Det kan det säkert finnas men det framgick inte av texten och det är också svårt att förstå upprördheten för om man tror att de som inte använder enhetstester inte testar alls, då har personen missuppfattat.

Jag tror nog att samtliga av de som låter bli enhetstester gör det för att det vet bättre sätt att säkra programvara. ALLA vill ha mjukvara fri från buggar.

Tror du exempelvis jag tycker det är kul med att producera mjukvara med massa buggar?
Det gör jag inte, värsta jag vet
Få personer är så nervösa som jag brukar vara när någon säljare demonstrerat mjukvara jag gjort, tar det mycket hårt om det inte skulle fungera

Det framgår implicit, alla är medvetna om att tester inte leder till buggfri kod.

Nu har jag inte läst varje inlägg här så jag kan ha missat det, men vad jag vet så har du fortfarande inte beskrivit hur din testprocess ser ut? Till slut får man ju helt enkelt anta att du inte gör några tester om du väljer att undvika svara varje gång.

Permalänk
Medlem
Skrivet av pine-orange:

Nu har jag inte läst varje inlägg här så jag kan ha missat det, men vad jag vet så har du fortfarande inte beskrivit hur din testprocess ser ut? Till slut får man ju helt enkelt anta att du inte gör några tester om du väljer att undvika svara varje gång.

Har skrivit att för mig är extra kod = copuling. Copling är alla programmerares värsta motståndare och jag kan gå mycket långt för att förhindra coupling. Det går inte att ta bort helt men så långt som möjligt.

All form av testning som innebär extra kod som låser annan kod är mer coupling och då bli det mer problem.

- Återanvändning (code reuse) är viktigt för säker kod. Den typen av kod behöver inte testas om den används flitigt. Är det kod som inte används så ofta brukar man normalt kunna testa den genom att göra körningar och testa att output är samma.
- Kan bygga in skriptning för att skripta upp funktionalitet. Det fungerar också om man skall testa trådade applikationer. Kan bygga skript som stresstestar en applikation under flera timmar och se vad som händer.
- assert's tar det mesta av programmeringsfel

Sett till extra kod så är det skripthantering som kan bakas in, och det är ofta bra att ha för det gör kod flexibel men om det inte skall vara med till installationer så kan det villkoras med att kompilera med eller utan skriptning.

Så säkrar jag kod

Skriver också mycket tester men endast för utveckling av ny funktionalitet eller om kod måste låsas (ingen får röra, koden är en "black box"). Inte för att säkra koden från buggar.

Exempel: CRUD är vanligt, där är det ofta många endpoints och då måste man testa varje endpoint för det är ofta en hårdkodad lösning.
Mitt sätt att lösa det är att jobba bort endpoints och samla till så få som möjligt för att återanvända. Bygger logik kring att bygga SQL dynamiskt istället för att hårdkoda SQL (eller använda något ORM verktyg som också hårdkodar)

Permalänk
Medlem
Skrivet av klk:

Vad är din förklaring, hur kom det sig att Microsoft lyckades och att det tog sådan tid för Linux att bli populär trots att det är gratis.

Jag har inte hittat på påståendet så jag kan inte svara på vad du hade i åtanken...

Permalänk
Medlem
Skrivet av orp:

Jag har inte hittat på påståendet så jag kan inte svara på vad du hade i åtanken...

Är det ett påhittat påstående att Microsoft är ett extremt framgångsrikt företag, ok.
Känner du till någon historik kring mjukvara?

Permalänk
Medlem
Skrivet av klk:

Vad är din förklaring, hur kom det sig att Microsoft lyckades och att det tog sådan tid för Linux att bli populär trots att det är gratis.

MS-DOS och Microsoft Windows kom tidigare och hade hunnit bli väletablerade innan Linux ens fanns. Det fanns också en stor mängd programvara till dessa OS. Användare byter inte gärna miljö om de väl lyckats lära sig den gamla.
Att Linux var gratis spelade mindre roll när DOS/Windows ändå kom förinstallerat på de flesta datorer.

Att MS-DOS blev populärt berodde mycket på att det körde på IBM PC. "Nobody ever got fired for buying IBM" som det hette på den tiden - Microsoft åkte snålskjuts på IBMs rykte.
Och sen så hade Microsoft en del fula tricks för sig på 90-talet för att se till att just deras OS kom förinstallerat.

Sen så var Microsoft inte så där jättebra på att lyckas, men de hade tålamod och hade råd med misslyckanden. Första versionen av Windows var inte särskilt bra eller särskilt populär. Andra versionen var inte så värst mycket bättre. Det var först med Windows 3.0 som den började bli populär.
Samma med många andra Microsoft produkter, de var inte så bra från början, men så småningom lyckades de få ihop något som fungerade.

Det är lustigt att tänka på att Microsoft en gång i tiden var mest känt för BASIC-tolkar och Unix-system.

Permalänk
Medlem
Skrivet av Erik_T:

MS-DOS och Microsoft Windows kom tidigare och hade hunnit bli väletablerade innan Linux ens fanns. Det fanns också en stor mängd programvara till dessa OS. Användare byter inte gärna miljö om de väl lyckats lära sig den gamla.
Att Linux var gratis spelade mindre roll när DOS/Windows ändå kom förinstallerat på de flesta datorer.

Linux är byggd efter Unix (samma som apple, byggt sin på darwin) och unix tror jag kom i början på 1970 talet

Om ett operativsystem skall lyckas beror inte på operativsystemet, det beror på om det finns mjukvara (användbara program) som inte kostar en förmögenhet.
Microsoft med sitt MS-DOS och framförallt att de tog fram Visual Basic för windows 3.x, att detta gick att köpa för arbetsstationer med unix var liksom inte att tänka på för normala människor

Linux lyckades inte för utvecklare (nördarna) kunde inte skriva applikationer, det blev bara kommandobaserade småsaker.

Windows 95 som var microsofts första riktiga operativsystem för konsumenter (och windows NT) är extremt stora mjukvaruprojekt som de lyckades med just för att då stod Microsoft på topp.

Men absolut, Microsoft har också haft bra uppbackning

Permalänk
Skrivet av klk:

Tolkar jag dig rätt så anser du att enhetstester säkrar mjukvara från buggar? Om man tror att tester är samma sak som inga buggar så förstår jag, då är det självklart svårt att förstå att någon inte använder enhetstester.
För mig är inte tester samma sak som buggfritt utan det dyker upp en hel massa buggar trots tester

Inte alls. Jag ser enhetstester som en av flera sorters tester. Jag har inga illusioner att man kan testa bort alla potentiella buggar, men enhetstesterna ger mig ett extra lager trygghet. Jag kommer inte oavsiktligt ändra beteendet på den kod jag har under enhetstester. Jag säger inte att enhetstesterna räcker som enda testmetod. Det är ord du lägger i våra munnar när vi inte håller med om att de är värdelösa.

När det kommer uttalanden som

Skrivet av klk:

Försöker att bygga så mycket som möjligt på kod som återanvänds, den behöver inte testas.

Skrivet av klk:

Koden testar sig själv, är du med?

uppfattar jag det som om du har en relaxerad inställning till tester. Jag undrar om det är för att dina buggar är "ofarliga", på samma sätt som Theos, och det inte spelar någon roll om du har buggar i koden.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

uppfattar jag det som om du har en relaxerad inställning till tester. Jag undrar om det är för att dina buggar är "ofarliga", på samma sätt som Theos, och det inte spelar någon roll om du har buggar i koden.

Vad jag tror är problem är man kanske missar hur extrem återanvändningen är

Låt säga att du har en CRUD applikation med kanske 100 endpoints. Om man med annan teknik ändrar så att de här 100 enpoints görs om till 5 stycken, kanske färre ändå.
Dessa 5 endpoints kommer självklart ha mer komplexitet men samma endpoints körs för nära nog allt.

Lättare att hantera kod och lättare att testa

Permalänk
Medlem
Skrivet av klk:

Är det ett påhittat påstående att Microsoft är ett extremt framgångsrikt företag, ok.
Känner du till någon historik kring mjukvara?

Fast nu ljuger du igen...

Detta sa du:

Skrivet av klk:

Hade Linux inte varit så anti M$ tror jag de vunnit mycket på att också ta till sig bra tekniker, istället agerade de som "barn" och bara för att M$ gjorde det så kunde de inte göra samma sak.

Du hävdade att Linux gått miste om bra tekniker till följd av sitta barnsliga agerande pga hat mot Microsoft.

Att jag försöker hålla dig tillsvars om detta påståendet är inte samma sak som att jag skulle förneka att Microsoft haft framgång. Varför ljuger du ihop att jag inte skulle känna till något om mjukvaras historia, när du inte själv kommer ihåg vad du ljög ihop tidigare idag?

Permalänk
Medlem
Skrivet av orp:

Fast nu ljuger du igen...

Detta sa du:

Du hävdade att Linux gått miste om bra tekniker till följd av sitta barnsliga agerande pga hat mot Microsoft.

Att jag försöker hålla dig tillsvars om detta påståendet är inte samma sak som att jag skulle förneka att Microsoft haft framgång. Varför ljuger du ihop att jag inte skulle känna till något om mjukvaras historia, när du inte själv kommer ihåg vad du ljög ihop tidigare idag?

Tror faktiskt att du skall ta en liten paus med att svara mig, det känns som "vår" diskussion är något helt annat än konstruktiv. Oavsett vad jag skriver vet jag svaret från dig

Permalänk
Skrivet av klk:

Vad jag tror är problem är man kanske missar hur extrem återanvändningen är

Ledsen, men jag köper inte resonemanget att återanvänd kod inte behöver testas. Det kan vara så att den redan är testad (testad på riktigt!) och då är den testad, men den är definitivt inte testad för att den har körts i andra sammanhang och ni inte har hittat något där. Du kan mycket väl köra helt otestade vägar genom koden och hitta nya överraskningar.

Jag repeterar min fråga, vad har dina buggar för konsekvenser? Hur många blir lidande när det hittas fel i din kod? Kommer någon dö? Kommer någon fysik produkt sluta fungera? Eller rullar du bara ut en ny version och sedan så är det bra?

Permalänk
Medlem
Skrivet av klk:

Tror faktiskt att du skall ta en liten paus med att svara mig, det känns som "vår" diskussion är något helt annat än konstruktiv. Oavsett vad jag skriver vet jag svaret från dig

Jag tror att du borde ta en paus från att ljuga så kommer det bli mer konstruktivt.

Skrivet av klk:

Hade Linux inte varit så anti M$ tror jag de vunnit mycket på att också ta till sig bra tekniker, istället agerade de som "barn" och bara för att M$ gjorde det så kunde de inte göra samma sak.

Svara bara på frågan med någon form av bevis. Vilka tekniker gick Linux miste om som de legalt kunde plockat från Windows pga att Linux-communityn hatade Microsoft så mycket? Det är du som kom med detta påståendet, inte jag.

Ångrar du ditt påstående för att du insätt att det var felaktigt?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Ledsen, men jag köper inte resonemanget att återanvänd kod inte behöver testas.

Tror inte heller jag kan övertyga dig, vi skriver också i ett forum och möjligheterna att förklara beskriva är begränsade

Men för att visa:
Tror den här länken fungerar: https://pastebin.com/vVHxU3ZR

Äldre kod men exempel på att bygga SQL dynamiskt. Använder SQL för de flesta tror jag är vana vid att jobba med backend/frontend och databas.

Vad koden där gör är att generera SELECT/INSERT/UPDATE/DELETE frågor, det är runt 500 rader om man tar bort kommentarer. Länge sedan koden gjordes och inte klar men för att visa hur det går att rensa på endpoints som endast finns för att det inte gjorts logik att automatiskt generera SQL.

Ett tänkbart scenario att testa sådan kod är att läsa in en databas (använda INFORMATION_SCHEMA), bygga ett träd och slumpa SQL genom att slumpa tabeller/fält och binda samman dem, köra SQL frågan. Låta den stå och generera SQL som körs i några timmar och efter det vet du att den fungerar.

Permalänk
Medlem
Skrivet av KAD:

...
Jag kan inte undgå att tro att System Hungarian hade rätt mycket att göra med Cs och speciellt K&R Cs rätt hjärndöda funktionsdeklarationer, speciellt i samband med int.
...

Nja, det var BCPL, föregångaren till föregångaren till C, som inte hade typer alls som låg till grund för utvecklandet av HN. Men man ändrade syntaxen i BCPL och kallade resultatet för B och när det visade sig att B inte riktigt räckte till för att utveckla UNIX alldeles som man hade tänkt sig så "värkte" Ken Thompson och Dennis Ritchie fram C ur B. Kan inte kalla Cs funktionsdeklarationer för hjärndöda, de var ett stort steg framåt jämfört med tidigare språk.

Permalänk
Skrivet av klk:

Tror inte heller jag kan övertyga dig, vi skriver också i ett forum och möjligheterna att förklara beskriva är begränsade

Men för att visa:
Tror den här länken fungerar: https://pastebin.com/vVHxU3ZR

Äldre kod men exempel på att bygga SQL dynamiskt. Använder SQL för de flesta tror jag är vana vid att jobba med backend/frontend och databas.

Vad koden där gör är att generera SELECT/INSERT/UPDATE/DELETE frågor, det är runt 500 rader om man tar bort kommentarer. Länge sedan koden gjordes och inte klar men för att visa hur det går att rensa på endpoints som endast finns för att det inte gjorts logik att automatiskt generera SQL.

Ett tänkbart scenario att testa sådan kod är att läsa in en databas (använda INFORMATION_SCHEMA), bygga ett träd och slumpa SQL genom att slumpa tabeller/fält och binda samman dem, köra SQL frågan. Låta den stå och generera SQL som körs i några timmar och efter det vet du att den fungerar.

Här postar du lite kod och föreslår en metod för hur den skulle kunna testas. På vilket sätt stödjer det resonemanget att återanvänd kod inte behöver testas?

Antag att du i applikation A använder en modul M, A har under en längre tid har körts utan att några problem upptäckts och att du nu inkluderar M i applikation B. Så länge B använder M på exakt samma sätt som A gör så är det sannolikt att det inte skulle fungera sämre än det gör i A, men om M är generellt skriven och hanterar fler fall än de som A använder och användningsmönstren skiljer det minsta (olika parametrar) så riskerar du att A och B följer olika vägar genom koden. Då är "det har funkat i A i alla år" igen garanti för att det kommer fungera i B. Proven in use gör det mer sannolikt att det kommer fungera, men att gå så långt som att likställa proven in use med vältestad är väl ändå att gå ett steg för långt?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Här postar du lite kod och föreslår en metod för hur den skulle kunna testas. På vilket sätt stödjer det resonemanget att återanvänd kod inte behöver testas?

Jag postade kod som visar hur du kan rensa bort i princip alla endpoints in webserver.
Den "bästa" koden är den kod som inte behöver skrivas.
Mitt försök var att visa hur viktigt det är med återanvändning för det som sker när man rensar och återanvänder är att den koden körs hela tiden. Därför behöver du inte skriva test.

Om du däremot skriver hårkodade lösningar, låt säga att du har 100 endpoints, då har du så många att det inte går att veta när de körs. En ny version är en "röra" och därför tvingas du göra något för att ändå se att det fungerar som det skall.

Hur återanvänder du kod?

Skrivet av Ingetledigtnamn:

Antag att du i applikation A använder en modul M, A har under en längre tid har körts utan att några problem upptäckts och att du nu inkluderar M i applikation B. Så länge B använder M på exakt samma sätt som A gör så är det sannolikt att det inte skulle fungera sämre än det gör i A, men om M är generellt skriven och hanterar fler fall än de som A använder och användningsmönstren skiljer det minsta (olika parametrar) så riskerar du att A och B följer olika vägar genom koden. Då är "det har funkat i A i alla år" igen garanti för att det kommer fungera i B. Proven in use gör det mer sannolikt att det kommer fungera, men att gå så långt som att likställa proven in use med vältestad är väl ändå att gå ett steg för långt?

1: Den typen av lösning du beskriver här är inte bra (coupling). Om möjligheterna finns hade jag försökt lösa det annorlunda. För det är betydligt mer problem i den koden än bara det du beskriver.
2: Men om vi nu har ett case där man är tvingad till det du beskriver (separata moduler som anropar varandra med hårdkodade metoder/argument) hade jag försökt skriva en "körning" om jag beskriver det så, alltså något som kan köra igenom ett förlopp och kontrollera resultat. Jag hade kunnat lägga rätt mycket tid på att få till en sådan sak för det du beskriver är ett så allvarligt problem.
3: Jag vet (som nog alla andra som utvecklat ett tag också vet) hur vanligt problemet är, att det exempelvis vimlar av microservices som anropar varandra. Trots tester läggs massor av tid för att endast underhålla röran. En sådan arkitektur behöver tänkas igenom ordentligt för annars dröjer det inte länge innan de måste ha personal vars enda uppgift är och kontrollera att allt fungerar. Räcker inte med test.
4: Postade tidigare en video där Casey Muratori gjort en video som lätt hittas om man söker på "OOPs", han beskriver där taggad data. Kan tänka mig att det är en typ av lösning som jag försökt dra det åt. AUTOSAR i bilindustrin är en gammal teknik för att lösa kommunikation mellan olika delar (påstår inte att det är optimalt) men det är en viss typ av taggning och där kan du lägga till saker, du kan däremot inte ändra eller ta bort.
Samma med taggad data, det går alltid att lägga till saker så utan test har man ändå möjligheter att öka på logiken.
Programmerare måste lära sig hur riskabelt det är att ändra eller ta bort

Permalänk
Skrivet av klk:

Jag postade kod som visar hur du kan rensa bort i princip alla endpoints in webserver.
Den "bästa" koden är den kod som inte behöver skrivas.
Mitt försök var att visa hur viktigt det är med återanvändning för det som sker när man rensar och återanvänder är att den koden körs hela tiden. Därför behöver du inte skriva test.

Hur återanvänder du kod?

Ursäkta om jag ställer en naiv fråga, men jag noll erfarenhet av webb-programmering. Om du skall tillhandahålla samma funktionalitet via en endpoint istället för 100 enklare, blir inte din enda endpoint väldigt komplex då? Och svårt att avgöra om testerna verkligen täcker in det som 100 endpoints gjorde tidigare? Bara för att alla anrop kommer via samma endpoint så är det väl det ingen garanti att de täcker in all funktionalitet som finns och att all kod faktiskt blir körd?

För att ta en liknelse jag förstår, blir det inte lite som att inte vilja göra direkta funktionsanrop i Python så istället skriver man funktionsanropet i en sträng som man anropar eval() på? Om allting går via eval så behöver vi inte testa något i Python? Den funktionen kommer ju köras hela tiden. Eller missar jag det fina i kråksången?

Det jag jobbar med körs typiskt från kommandoraden, med eller utan GUI. Återanvändning av kod sker i form av bibliotek, header-filer och Python-moduler.

Skrivet av klk:

1: Den typen av lösning du beskriver här är inte bra (coupling). Om möjligheterna finns hade jag försökt lösa det annorlunda. För det är betydligt mer problem i den koden än bara det du beskriver.

Jag har inget val. Det är så det ser ut för oss som skriver riktiga program. Hur klarar du dig i din ripgrep-ersättare utan att göra direkta anrop till libc, OS eller tredjepartsbibliotek?

Skrivet av klk:

Programmerare måste lära sig hur riskabelt det är att ändra eller ta bort

Precis, här spelar enhetstester en viktigt roll. Om man oavsiktligt råkar ändra på eller ta bort något kommer enhetstesterna hitta det med en gång. Det är just för att vi har lärt oss den läxan som vi skriver enhetstester