Att arbeta med Legacy Codebases ( eller en entreprenör' livslängdM SK2 (Svenska (Swedish))

Att arbeta med Legacy Codebases ( eller en entreprenör' livslängdM SK2

Wednesday, 06 November 2024

//

12 minute read

Inleiding

Som fristående utvecklare är en av färdigheterna som du behöver lära dig snabbt att jobba på existerande kodbaser på ett effektivt sätt.

Utmaningarna

Förlegade system har stora utmaningar, särskilt när nyckelutvecklare, arkitekter, / och (, om du är lyckligt lottad att få dem,

Dokumentation

Detta är ofta överskattat, särskilt i mindre företag.

  1. Nu skapade utvecklare vägledningar så hur driver man projektet lokalt ( mer om det här på en minut ), vilka övervägningar finns det? ♫ ( ♫ om du till exempel behöver ett annat ramverk än det nuvarande ♫ МSK3 ♫ särskilt sant med Node tyvärr ♫
  2. Deploymentdokument i dessa dagar när CI, /, CD ses som guldet och - standard för att användas, så övervägs ofta att man måste veta hur man använder systemet manuellt.
  3. Procedurer för att lösa problem; vad gör du när systemet går ner ? Vem kallar du för det ? Vad är de viktigaste sakerna att kontrollera M SK3 Det här är ofta förbisett men är CRUCIAL i ett produktionssystem
  4. Arkitektur / System-Konstruktionsdokument; hur systemet fungerar, ? vilka nyckelkomponenter är, ? vilka viktigaste beroenden är,? tänk på detta som din vägledning när du lär dig ett nytt system.. Det ger en överblick på hur systemet arbetar på hög nivå, vilket kan vara kritiskt. I en .NET Core-applikation skulle det här innefatta ett diagram av servicen och hur de interagerar med varandra.

Dokumentation är en av de saker som vi som utvecklare ofta inte gillar att göra. (it' är inte kod, men det är viktigt, ' och det är avgörande, ♫ ♫ . ♫ Som ni kan se älskar jag markering, ♪ , ♫ med Mermaid och PlantUML så kan du skapa några riktigt fina diagram och strömmartor som kan inkluderas i din dokumentation.

Det måste vara ACTUELLET.De utvecklare talar ofta om bit.-, rot, ;, där ett projekts beroende blir föråldrade.

Det finns olika nivåer av dokumentation men i allmänhet varje gång du ändrar koden som är nämnt i ett dokument så måste du uppdatera det.

Att köra systemet lokalt

Detta är ofta en utmaning; särskilt om systemet har funnits ett tag i tiden. Du behöver veta vilken version av Nod M SK2 . NET etcMska4 vilken version databasen ärM Ska5 vilket version ramverket är etc Mska6 Det här är ofta överskattat men är CRUCIAL för att komma upp och köra snabbtMske7

Jag har ofta sett utvecklare säga att detta inte är relevant i dessa dagar av molnsystem och stora distribuerade applikationer, men jag håller med om, att du måste kunna köra systemet lokalt för att kunna lösa problem snabbt och effektivt.

  1. Profilering - det här verkar ha blivit en | ' | avancerad utvecklare bara | ' | färdighet | МSK3 | men det är viktigt |' | att kunna profilera din kod för att se var klyftorna finns |. | Detta är speciellt sant i ett arvsystem där du kanske inte har lyxen att kunna skriva om systemet från början | dotTrace och dotMemoryär ovärderliga här.
  2. Att hitta problem i debuggern - gillar det eller inte dagarna av Response.Write i Classic ASP är över.
  3. Logging - Återigen ofta överlookad (sorry men ingen ASP-exceptionsfilter på botten av stapeln är föregående artikel, inlogning är en viktig del i att kunna arbeta med kod LOCALT | . | Kom ihåg att du kan använda kunders inlogningar | m.ex. Ingen källgenerator) i ASP För Anwendungsinsikter kan du vilja ha användarfärder och andra egenskaper; det blir dyrt och snabbt om man använder LogInformation för varje begäran. Du kan vilja använda en anpassad Telemetri-Processor för att filtrera ut begäran du inte vill svara på
  4. Testing - Alltför ofta ser jag utvecklare | ' | testande i preprod | ' | eller tänker att Unit Test är bra för att testa | МSK3 | Det är välkrävt |, | det finns ' | som ger en stor värde i att använda ett verktyg som Resharper | / | NCrunch för att automatiskt köra unittest |; | men kom ihåg att Unit-tester är bara det ♫ ; | de testar en ♪ ' ♪ enhet ♫ ' ♪ av kod ♫ . | Man måste behålla uppmärksamheten på hur systemet faktiskt funkar i samspel med andra komponenter | . | Detta är vad integreringstester kommer in på |; | dem testar hur systemet fungerar i helhet | sk14 | man kan använda ett SpecFlow att skriva dessa tester i ett mänskligt format

I varje projekt som jag jobbar med är det första steget att få systemet (, eller en stor del av det, att fungera lokalt.

Kodbasen

I varje system är det källa till sanning, vad än läroplanen säger, , vad andra säger till dig om hur det borde fungera så fungerar det här.

Det här är ofta utmanande, det ' som att hitta din väg i en ny stad utan en karta. Lyckligtvis har du i applikationer ett ingångspunkt M SK3 en sida som laddas ♫ / ♫ en API-kõn till framsidan etc ♫.) ♫ plocka en punkt och börja där ♫

Använd vad du behöver för att interagera med den, oavsett om det är m.s.' PostMann , Rider, ' HttpClient eller till och med en webbsida

Refactoring

Generally leave this until you understand the system. It 's ALWAYS tempting to 'throw it away and start againM SK3 however resist this temptationMska4 Especially for a running system mska5usuallyM Ska6 Det fungerar att bygga om / till och med att göra om ett system är ett stort risk

Som allt annat ( speciellt när man beställer sig för ett kontrakt) behöver du rättfärdiga arbetet du utför på ett systemM SK2 Antingen måste denna rättfärdigation fokusera på en av de följande

  1. Förmågor - systemet är långsamt och behöver skjutas upp. ♫ var noggrann igen. ♪ , ♪ vad du finner långsamt kan vara hur systemet är utformat för att fungera.
  2. säkerhet - systemet är osäkra och behöver bli säkrat . Det här är en krånglig grej, especially i ett förlegat system . Med bit- kan man upptäcka att systemet använder gamla versioner av bibliotek som har befunna säkerhetsproblem M SK5 Detta är en bra rättfärdigande för arbeten MSC6 men var medveten om att du kanske behöver göra om en LOT av systemet för att få det uppdated.
  3. Hållbarhet - systemet är svårt att underhålla och behöver göra det lättare att underhållas . I allmänhet blir detta mycket arbete ; rättfärdigar den nuvarande livslängden av kodexbasen detta?
  4. Användarupplevelse - Jag prioriterar i allmänhet dessa frågor användar det spelar ingen roll om din kod är bättre, de är de som betalar för arbetet du gör i slutändan. Om du kan göra deras upplevelse bättre än den, så är det generellt värt det.

Arbetet med att arbeta på arvsystem

Det här är ofta överlookat.;, särskilt av utvecklare.. Du måste kunna rättfärdiga det arbete du gör på ett system. ' Detta är speciellt sant i en bolagsmiljö där du är betalad per timme, .. I slutändan är det ,, det är inte din kod och inte dina pengar.M SK8. Varför du gör en förändring är ofta viktigare än förändringen själv.

Jag har jobbat som entreprenör i mer än ett decennium nu.

Som utvecklare, har vi en tendens att vara dåliga affärsmänniskor, vi är fokuserade på perfektion, precision i varje steg. I verkligheten, behöver man inte bygga ett system.

På längre tid innefattar detta att se till att ny kod är underhållningsbar och kostnaden. I'm not making any changes du tror I'm just learning the system. Det här är ett misstag.;, du, ', lär dig att göra systemet bättre.., du och ', lär er att göra det mer effektivt.M SK4, du ja ', lär sig att göra systemet mer underhållningsbart. ., om en kund inte kan acceptera den här punkten, så måste man vara mycket försiktig med hur man kommunicerar den.

Folket

Återigen ofta förbisen.,, mycket av tiden som du kommer in som entreprenör eftersom någon nyckelperson har lämnat.(, jag har inte varit med om det här.M SK3, inte engagera mig i politiken. I ett kontrakt kommer du i allmänhet att ha villkoren för ditt engagemang uppskrivna. I mitt nuvarande kontrakt så är det: ', ', förbättra säkerheten och minska driftskostnaderna. ');, fokusera på detta.

Kom ihåg vem din direkta kontakt är; särskilt under de första månaderna . Informera dem ♫ ( ♫ du kommer förmodligen att vinna ♫' ♫ har inga nya egenskaper att skryta om när du får reda på hur systemet fungerar ♫

Kom ihåg, det här är personen som kommer att godkänna din Rechnung ; det ska inte finnas några överraskningar vid Rechnungsstället M SK2 När du börjar kontrollera koden regelbundet så är detta mindre av en problemsituation MSC3 du har en inteckning om exakt vad du gjorde och hur den hade påverkat dig . Till dess måste du hålla dem väl informerade Mska6 De behöver veta vad du gjorde och varför de borde betala dig för det.

Tillförlitlighet

Återigen , tillbaka till den ursprungliga koden; om du gör en förändring i allmänhet så behöver du sätta igång den. Även de bästa av oss kommer att få bort det här från och med du kunde inte veta när du utsätter igång. Det här går tillbaka till att logga in - om du har en server som håller igång så måste den logga in en LOT ♫ ( ♫ men behållas under en kort tidspann ♫) ♫ då när du använder detta kan du samla in mer information om vad som misslyckats

Hur bra du än är, ,, hur mycket lokaltest du gjort, ', vi är alla mänskliga.., det här är en viktig del av det , ', tänk på, M SK4, inte sätta igång på fredagar, ', regeln, ;, förvänta dig att en inställning ska orsaka ett nytt problem på ett system,., var beredd att arbeta tills det lösts, MST8, M st9, om du inte gör det, Mst10, DON KNOW varför det misslyckades, Mstr 11, lägga till fler tester för att återskapa problemet och göra mer logning för att se till att du kommer få samma problem i framtiden, M str 12

Speciellt för produktionssystem kan ditt ställsystem inte vara 1:1 ( speciellt när det gäller last k6 kan hjälpa er att simulera belastning ( ännu bättre lokalt där du kan göra korrekt profilering som tidigare nämnt

Deployment

Återigen är det ofta överlookat i CIs drivkraft som är orsaken till detta.. Enkelt, ; Du kommer att misslyckas.. Att ha ett väldigt snabbt och effektivt sätt att sätta igång ett system innebär att när du bryter det kan du också fixa det snabbare.M SK4 Om ditt CI-kodextestsystem betyder att det tar 2 dagar för att få en PR sammankopplad så är det ♫ ' ♫ det snabbaste du kan passa in på ett system.

Ett effektivt mekanisme för att fixa och implementera kod är nödvändigt för ett effektivt utvecklingskedjor.

'Fixing Legacy Apps

Jag lägger det här i citat eftersom detta är en fråga.

  • Körande Patcher

Det här är processen att helt enkelt fixa den existerande koden ; igen försäkra dig om att du testar noggrant och har processer på plats för att återvända / snabbt återanvända alla fixer Jag tror att den här typen av utveckling är sällan FUN eftersom du fortfarande troligtvis vandrar genom grogrunden i den existerande kodbasen.

Som vanligt bör du försäkra dig om att du har någon form av test för att uttyda den nuvarande koden; i bästa fall borde det också testa för fel på problemet du försöker lösa innan du gör lösningen . De IDYLL för detta är att ha en enhettest som i närheten fokuserar på området med kod som du behöver fixa men det här är ofta utanför arbetsscopen för stora system

I'd använder vanligtvis ett testsystem i den här preferensordningen

  1. Enhetens tester - återigen är dessa föredraras eftersom du kan rikta dina mål mot dem bara för att utöva koden du arbetar med. Hursomhelst
  2. Integrationstest - Det här är en överlägsen term eftersom den kan täcka allt från en enhettest som går genom flera lager av kod ( dessa är bäst att undvika ♫ ) ♫ till att använda likheterna med de Verifiera genom till och med Selenium-tester. I allmänhet vill du testa systemet i its helhet ; men var medveten om att dessa tester kan vara långsamma och brittade M SK2 Att använda Verify kan ofta vara en bra metod för gamla system eftersom du åtminstone kan ' verifiera ' duM SK5 inte bryter API-ytan på systemet MSC6
  3. Instruktionstest - Varenda utvecklare bör försöka göra manuella tester för varje kodtestning. Det här är bara för att säkerställa att det som du förväntar dig att | ' | användaren ♫ ' | ( | detta kan vara en verklig användare eller en annan del av systemet som interagerar med din kod | МSK5 | att se vad de faktiskt ser |. | Det kan vara lika enkelt som att köra systemet lokalt och kolla utgången till en sida eller lika komplext som att göra en komplett testuppsättning på en testserver |
  • Onion skinning När man arbetar med gamla system så får man i allmänhet inte lyxen att göra en komplett omställning.

För att kunna uppgradera PARTS av ett system kan man identifiera komponenter som kan skiftas från en existerande monolith till en mikroservice (för någon värde av 'micro'). Det här kan vara ett bra sätt att börja modernisera ett system utan risken för en full omställning De vanliga exemplen kan vara att dela ut API-gränssnitt till nya projekt som använder mer uppdaterade element.

I' kommer att omfatta det här sättet mer i en framtid artikel eftersom det ' är ett nyckelelement i hur jag arbetar med gamla system & inte uppenbart för många utvecklare

Att få betalt

Nu när vi har allt detta på väg ut så kommer det tundra problemet med betalningen.

Några betalningsproblem jag vill fortsätta med

Om de laterar med att betala, är det upp till och med beroende av ditt kontrakt, men på minst inom två dagar, men i allmänhet närmare, detta är ett dåligt tecken.

Nej, tänk inte på det här. Om du har gjort ditt jobb så måste du få betalt på rätt tid.

Var ärlig.

Jag har lett utvecklingsgrupper och jag har varit entreprenör. Jag har varit kund. Jag ser alla sidor av det här och jag kan säga till dig: om du inte får betalt på rätt tid så måste du gå vidare.

När det gäller beräkningar, så hittar du din nivå.;, personligen betalar jag mer för projekt där jag har mer ansvar, (, eller vilka jag inte gör.', ser inte ut som kul.M SK4, jag betalar mindre för projekt då jag lär mig nya tekniker eller start-ups.MSC6, jag har jobbat mindre dagar men hållit mitt anspråk stabilt.

I slutsats

Ja, det är det. Jag är ute på jobbet idag och imorgon för min mormors begravning. Och jag är faktiskt lite paniken över att jag har ett stort arv system att lära mig. Så jag tänkte att jag ska blunda ut mina tankar om hur det är att jobba med dessa system.

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.