4.5.19 · HinglishSoftware Engineering

Refactoring — code smells, common refactorings (extract method, rename, etc.)

1,959 words9 min readRead in English

4.5.19 · Coding › Software Engineering


WHAT is refactoring?

WHY do we refactor?

  • WHY 1 — Cost of change: Software likhe jaane se ~10x zyada padhha jaata hai. Messy code har future change ko slower aur riskier banata hai.
  • WHY 2 — Compounding: Chhoti chhoti gandi cheezein milke "technical debt" ban jaati hain. Refactoring us debt ko chukane ka kaam karti hai interest (bugs, slowdowns) ke tumhe dabaane se pehle.
  • WHY 3 — Safety: Ek clean structure bugs ko visible aur changes ko local banata hai.

HOW do we refactor safely? (the loop)

Golden rule: tests ke bina kabhi refactor mat karo.

  1. Ensure karo ki ek passing test suite code ko cover karti hai.
  2. Ek chhoti si change karo.
  3. Tests run karo. Green? Rakho. Red? Turant undo karo.
  4. Commit karo.
  5. Repeat karo.

Figure — Refactoring — code smells, common refactorings (extract method, rename, etc.)

The Common Code Smells (catalogue)


The Common Refactorings

1. Extract Method

2. Rename (Variable / Method)

3. Introduce Explaining Variable

4. Replace Magic Number with Named Constant

5. Extract Class (fixing God Object / Data Clumps)



Recall Feynman: ek 12-saal-ke-bachche ko samjhao

Socho tumhara LEGO castle bahut acchi tarah kaam karta hai, lekin andar se ek tangled mess hai — bricks random jagahon par thuse hue hain. Refactoring bricks ko carefully rearrange karna hai taaki castle bahar se bilkul waise hi dikhe, lekin andar se neat ho aur baad mein ek naya tower add karna aasaan ho. Tum ek baar mein ek brick move karte ho aur har move ke baad check karte ho ki castle abhi bhi khada hai (woh checks "tests" hain). Ek code smell ek ajeeb wobble jaisi hai jo tumhe warn karti hai ki andar kuch messy hai — chahe castle abhi gira nahi ho.


Flashcards

Refactoring ki defining property kya hai?
Yeh behaviour-preserving hai — external behaviour wahi rehta hai jabki internal structure improve hoti hai.
Code smell kya hota hai (aur kya yeh bug hai)?
Ek surface symptom jo deeper design problem hint karta hai; BUG NAHI hai — code theek kaam kar sakta hai.
Refactor karne se pehle passing tests kyun hone chahiye?
Tests behaviour ki tumhari proxy hain; unke bina tum prove nahi kar sakte ki change ne behaviour preserve kiya, jo refactoring ki definition hi hai.
Refactoring safety loop batao.
Tests se cover karo → ek chhoti si change karo → tests run karo → green rakho / red revert karo → commit karo → repeat karo.
Extract Method mainly kaun sa smell fix karta hai?
Long Method (aur reuse / independent testing enable karta hai).
Rename ko cheap hote hue bhi high-value kyun maana jaata hai?
Acche naam intent reveal karte hain aur documentation ki tarah kaam karte hain jo kabhi stale nahi hoti.
Yeh smell bolo: variables ka ek group hamesha saath pass hota hai.
Data Clumps (fix: Extract Class / ek object introduce karo).
Yeh smell bolo: ek change kai files mein edits karne par majboor karti hai.
Shotgun Surgery.
Refactoring aur feature changes ko alag commits mein kyun rakhna chahiye?
Taaki ek failing test unambiguously ek tarah ki change ko point kare; milana failures ko undiagnosable banata hai.
Duplication ke liye Rule of Three kya hai?
Ek baar duplicate karna theek hai, do baar winch karo; teesre occurrence par refactor karo duplication hatane ke liye.
Feature Envy kya hai?
Ek method jo apni class ke data se zyada doosri class ka data use karta hai — use data ke paas move karo.
Replace Magic Number with Named Constant se kya milta hai?
Truth ka single source aur ek otherwise unexplained literal ka explicit meaning.

Connections

  • Unit Testing — woh safety net jo refactoring ko enable karti hai.
  • Technical Debt — jo refactoring chukati hai.
  • Clean Code / Naming Conventions — Rename & Extract ke peeche ke principles.
  • Design Patterns — refactorings aksar ek pattern ki taraf hoti hain.
  • Cyclomatic Complexity — ek metric jo Long Method / God Object smells flag karta hai.
  • DRY Principle — seedha Duplicated Code hatane ki motivation deta hai.
  • Single Responsibility Principle — God Object / Large Class ka ilaaj.

Concept Map

defined by

triggered by

requires

done via

checks

reduces

yields

hints at

fixed by

fixed by

fixed by

verified by

Refactoring

Behaviour preserving

Code smell

Test suite

Safe loop tiny steps

Lower cost of change

Technical debt

Extract Method

Rename

Long Method smell

Duplicated Code smell

Magic Numbers smell