logo

7 Code Refactoring-tekniker inom mjukvaruteknik

Att vara utvecklare hur börjar man arbeta med ett nytt projekt...??

Först samlar du ihop några grundläggande krav och baserat på kravet börjar du implementera funktionen en efter en. När du går vidare med ditt projekt och lär dig mer om det, fortsätter du att lägga till och ändra koden i din kodbas. Senare ändrar du även koden för att fixa bugg- och kantfallen.



7-Code-Refactoring-Techniques-in-Software-Engineering

Men vad händer efter ett par dagar eller månader...? Hur ser din kod ut...?? Är det komplicerat? Är det svårt att förstå? Om ja, så var du definitivt inte uppmärksam på att förbättra din kod eller omstrukturera din kod. Du kanske har skrivit en dubblettkod utan att titta på den befintliga koden eller så kan du ha skrivit några längre metoder/funktioner, stora klasser, för många parametrar, icke-intuitiva variabelnamn, kodplacering, etc.

Att förbättra eller uppdatera koden utan att ändra programvarans funktionalitet eller externa beteende hos applikationen kallas kodrefactoring. Det minskar den tekniska kostnaden och gör koden mer effektiv och underhållbar. Om du inte uppmärksammar kodrefaktoreringsprocessen tidigare, kommer du att betala för fel i din kod senare. Så ignorera inte att rensa upp koden.



I en mjukvaruutvecklingsprocess har olika utvecklare olika kodskrivningsstilar. De gör ändringar, underhåller koden, utökar koden, och för det mesta lämnar de koden utan kontinuerlig refaktorisering. Un-refactored kod tenderar att kod röta: mycket av förvirring och röran i kod som dubblettkod, ohälsosamma beroenden mellan klasser eller paket, dålig tilldelning av klassansvar, för många ansvarsområden per metod eller klass, etc. För att undvika alla dessa problem är kontinuerlig refaktorering viktig.

Nu är frågan... vilka är teknikerna för att refaktorisera koden?

Vi kommer att diskutera några populära och vanliga tekniker för att omstrukturera koden, men innan dess ska vi diskutera några snabba tips...



Tips:

  • Du måste utföra kodrefaktorering i små steg. Gör små ändringar i ditt program, var och en av de små ändringarna gör din kod något bättre och lämnar programmet i ett fungerande tillstånd.
  • Kör testet TDD och CI efter att ha gjort små ändringar i refaktoreringsprocessen. Utan att köra dessa tester skapar du en risk att introducera buggar.
  • Skapa inga nya funktioner eller funktioner under omstruktureringsprocessen. Du bör refaktorera koden innan du lägger till några uppdateringar eller nya funktioner i din befintliga kod.
  • Refaktoreringsprocessen kan påverka testresultaten, så det är bra att få ditt QA- och testteam involverat i refaktoreringsprocessen.
  • Du måste acceptera att du inte kommer att vara helt nöjd med din kod. Din refactored kod kommer att vara föråldrad inom en snar framtid och du måste refaktorisera den igen.

De vanligaste kodrefaktoreringsteknikerna

Det finns många tillvägagångssätt och tekniker för att refaktorisera koden. Låt oss diskutera några populära...

1. Röd-grön Refactoring

Red-Green är den mest populära och mest använda kodrefaktortekniken i den agila mjukvaruutvecklingsprocessen. Denna teknik följer test-först-metoden för design och implementering, detta lägger grunden för alla former av refactoring. Utvecklare tar initiativ till omstruktureringen till den testdrivna utvecklingscykeln och den genomförs i de tre distriktsstegen.

Röd-Grön-Refactoring

  • RÖD: Det första steget börjar med att skriva det underkända röda testet. Man stannar upp och kollar vad som behöver utvecklas.
  • Grön: I det andra steget skriver du den enklaste nog koden och får utvecklingspasset grönt test.
  • Refaktor: I det sista och tredje steget fokuserar du på att förbättra och förbättra din kod för att hålla ditt test grönt.

Så i grund och botten har denna teknik två distinkta delar: Den första delen involverar att skriva kod som lägger till en ny funktion till ditt system och den andra delen handlar om att omstrukturera koden som gör denna funktion. Tänk på att du inte ska göra båda samtidigt under arbetsflödet.

2. Refaktorering genom abstraktion

Denna teknik används mestadels av utvecklare när det finns ett behov av att göra en stor mängd refaktorisering. Främst använder vi denna teknik för att minska redundansen (duplicering) i vår kod. Detta involverar klassarv, hierarki, skapande av nya klasser och gränssnitt, extraktion, ersättande av arv med delegeringen och vice versa.

Refaktorering-genom-abstraktion

Pull-Up/Push-Down Metoden är det bästa exemplet på detta tillvägagångssätt.

  • Uppdragningsmetod: Det drar koddelar till en superklass och hjälper till att eliminera kodduplicering.
  • Push-down-metod: Den tar koddelen från en superklass och flyttar den ner i underklasserna.

Dra upp konstruktorkroppen, extrahera underklass, extrahera superklass, kollapsa hierarki, formulärmallsmetod, extrahera gränssnitt, ersätt arv med delegering, ersätt delegering med Arv, tryck ned-fält alla dessa är de andra exemplen.

I grund och botten bygger vi i den här tekniken abstraktionsskiktet för de delar av systemet som behöver refaktoreras och motsvarigheten som så småningom kommer att ersätta den. Två vanliga exempel ges nedan...

kommando touch i linux
  • Inkapslad fält: Vi tvingar koden att komma åt fältet med getter- och settermetoder.
  • Generalisera typ: Vi skapar mer allmänna typer för att tillåta koddelning, ersätta typkontrollkod med staten, ersätta villkorlig med polymorfism, etc.

3. Komponeringsmetod

Under utvecklingsfasen av en applikation skriver vi många gånger långa metoder i vårt program. Dessa långa metoder gör din kod extremt svår att förstå och svår att ändra. Kompositionsmetoden används mest i dessa fall.

I detta tillvägagångssätt använder vi effektiviseringsmetoder för att minska dubbelarbete i vår kod. Några exempel är: extrahera metod, extrahera en variabel, inline Temp, ersätta Temp med Query, inline metod, dela upp temporär variabel, ta bort tilldelningar till parametrar, etc.

Extraktion: Vi delar upp koden i mindre bitar för att hitta och extrahera fragmentering. Efter det skapar vi separata metoder för dessa bitar, och sedan ersätts det med ett anrop till denna nya metod. Extraktion involverar klass, gränssnitt och lokala variabler.

I kö: Detta tillvägagångssätt tar bort antalet onödiga metoder i vårt program. Vi hittar alla anrop till metoderna och sedan ersätter vi alla med innehållet i metoden. Efter det tar vi bort metoden från vårt program.

autocad stretch kommando

4. Förenkla metoder

Det finns två tekniker involverade i detta tillvägagångssätt ... låt oss diskutera dem båda.

  • Förenkla refaktorering av villkorliga uttryck: Villkorsangivelse i programmering blir mer logiskt och komplicerat med tiden. Du måste förenkla logiken i din kod för att förstå hela programmet.
    Det finns så många sätt att omstrukturera koden och förenkla logiken. Några av dem är: konsolidera villkorligt uttryck och duplicera villkorliga fragment, dekomponera villkorligt, ersätt villkorligt med polymorfism, ta bort kontrollflagga, ersätt kapslat villkorligt med skyddssatser, etc.
  • Förenkla metoden kallar refaktorering: I detta tillvägagångssätt gör vi metodanrop enklare och lättare att förstå. Vi arbetar med interaktionen mellan klasser och vi förenklar gränssnitten för dem.
    Exempel är: lägga till, ta bort och införa nya parametrar, ersätta parametern med den explicita metoden och metodanropet, parameterisera metod, göra en separat fråga från modifierare, bevara hela objektet, ta bort inställningsmetoden, etc.

5. Flytta funktioner mellan objekt

I den här tekniken skapar vi nya klasser, och vi flyttar funktionaliteten säkert mellan gamla och nya klasser. Vi döljer implementeringsdetaljerna från allmänhetens tillgång.

Nu är frågan... när ska man flytta funktionaliteten mellan klasser eller hur man identifierar att det är dags att flytta funktionerna mellan klasser?

När du upptäcker att en klass har så många ansvarsområden och för mycket saker pågår eller när du upptäcker att en klass är onödig och inte gör något i en applikation, kan du flytta koden från den här klassen till en annan klass och ta bort den helt och hållet.

Exempel är: flytta ett fält, extrahera klass, flytta metod, inline-klass, dölj delegat, introducera en främmande metod, ta bort mellanhand, introducera lokal förlängning, etc.

6. Förberedande refaktorering

Detta tillvägagångssätt är bäst att använda när du märker behovet av refaktorisering samtidigt som du lägger till några nya funktioner i en applikation. Så i grund och botten är det en del av en mjukvaruuppdatering med en separat refactoringprocess. Du sparar dig själv med framtida tekniska skulder om du märker att koden behöver uppdateras under de tidigare faserna av funktionsutvecklingen.

Slutanvändaren kan inte se sådana ansträngningar från ingenjörsteamet öga mot öga, men utvecklarna som arbetar med applikationen kommer att finna värdet av att omstrukturera koden när de bygger applikationen. De kan spara tid, pengar och andra resurser om de bara lägger lite tid på att uppdatera koden tidigare.

Det är som att jag vill åka 100 mil österut men istället för att bara traska genom skogen ska jag köra 20 mil norrut till motorvägen och sedan åka 100 mil österut i tre gånger den hastighet jag kunde ha om Jag gick bara direkt dit. När folk pressar dig att bara gå rakt dit, behöver du ibland säga: ’Vänta, jag måste kolla kartan och hitta den snabbaste vägen.’ Den förberedande omstruktureringen gör det för mig.

Jessica Kerr (Mjukvaruutvecklare)

Preparatory-Refactoring

7. Refaktorering av användargränssnitt

Du kan göra enkla ändringar i användargränssnittet och refaktorisera koden. Till exempel: justera inmatningsfält, tillämpa teckensnitt, omformulera med aktiv röst, ange formatet, tillämpa vanlig knappstorlek och öka färgkontrasten, etc.

Slutord

Du måste betrakta kodrefaktoreringsprocessen som att städa upp det ordnade huset. Onödigt stök i ett hem kan skapa en kaotisk och stressig miljö. Detsamma gäller skriven kod. En ren och välorganiserad kod är alltid lätt att ändra, lätt att förstå och lätt att underhålla. Du kommer inte att möta svårigheter senare om du uppmärksammar kodrefaktoreringsprocessen tidigare.

Två av de mest inflytelserika mjukvaruutvecklarna Martin Fowler och Kent Beck har ägnat sin tid åt att förklara kodrefaktoreringsprocessen och teknikerna för den. De har också skrivit en komplett bok om detta ämne Refactoring: Förbättring av utformningen av befintlig kod . Den här boken beskriver olika refactoring-tekniker med en tydlig förklaring av arbetet med dessa refactoring-processer. Vi rekommenderar dig att läsa den här boken om du vill gå på djupet med kodrefaktoreringsprocessen.