SlideShare a Scribd company logo
CODE REFACTORING



           Phạm Anh Đới – doipa@fpt.com.vn
      Nguyễn Việt Khoa – khoanv4@fpt.com.vn
                              Hanoi, 11/2011
Code Refactoring – TechTalks #6   2




Objectives
 •     What’s Code Refactoring?

 •     Why do we Refactor?

 •     When should we Refactor?

 •     How do we Refactor?

 •     Refactoring Techniques

 •     Code Refactoring Tools

 •     Refactoring Dojo
Code Refactoring – TechTalks #6                3




What’s Code Refactoring?

 “A series of small steps, each of which changes
 the program’s internalstructure without
 changing its external behavior “
                                   Martin Fowler
Code Refactoring – TechTalks #6               4




What’s Code Refactoring?
• Code reorganization
   o Implies equivalence
   o Change the structure, not the behavior
• Cleans up “code-smell”
• Does NOT fix bugs
Code Refactoring – TechTalks #6                    5




Why do we Refactor?
•    Helps us deliver more business value faster
•    Improves the design of our software
•    Minimizes technical debt
•    Keep development at speed
•    To make the software easier to understand
•    To help find bugs
•    To “Fix broken windows”
Code Refactoring – TechTalks #6                             6




Example
Which code segment is easier to read?

 Sample 1:
 if (markT>=0 && markT<=25 && markL>=0 && markL<=25){
             float markAvg = (markT + markL)/2;
             System.out.println("Your mark: " + markAvg);
 }

 Sample 2:
 if (isValid(markT) && isValid(markL)){
             float markAvg = (markT + markL)/2;
             System.out.println("Your mark: " + mark);
 }
Code Refactoring – TechTalks #6                        7




When should we Refactor?
   • To add new functionality
    o refactor existing code until you understand it
    o refactor the design to make it simple to add
   • To find bugs
    o refactor to understand the code
   • For code reviews
    o immediate effect of code review
    o allows for higher level suggestions
Code Refactoring – TechTalks #6                                 8




How do we Refactor?
• Manual Refactoring
   o Code Smells
• Automated/Assisted Refactoring
   o Refactoring by hand is time consuming and prone to error
   o Tools (IDE)
• In either case, test your changes
Code Refactoring – TechTalks #6                           9




Code Smell
•Duplicated code                  • Long Method

• Feature Envy                    • Long Parameter List

• Inappropriate Intimacy          • Switch Statements

• Comments                        • Improper Naming
Code Refactoring – TechTalks #6                10




Code Smell examples (1)
public void display(String[] names) {
   System.out.println(“--------------");
   for(int i=0; i<names.length; i++){
       System.out.println(“ + " + names[i]);
   }
   System.out.println(“--------------");
}
                             Duplicated code
public void listMember(String[] names) {
   System.out.println(“List all member: ”);
   System.out.println(“--------------");
   for(int i=0; i<names.length; i++){
       System.out.println(“ + " + names[i]);
   }
   System.out.println(“--------------");
}
Code Refactoring – TechTalks #6                      11




Code Smell examples (2)
      public int getSum() {
           Scanner input = new Scanner(System.in);
           int[] list = new int[100];
           //Input
           System.out.println("count:");
           int count= input.nextInt();
           for (int i= 0; i < count; i++) {
                                  Long Method
               list[i] = input.nextInt();
           }

              //Get sum
              int sum=0;
              for (int i= 0; i < count; i++) {
                  sum+=list[i];
              }
              return sum;
       }
Code Refactoring – TechTalks #6             12




Code Smell examples (3)
public String formatStudent( int id,
                         String name,
                         Date dob,
                         String province,
                         String address,
           Long Parameter List
                         String phone ){
  //TODO:
  return null;
}
Code Refactoring – TechTalks #6   13




Refactoring Techniques

• for more abstraction

• for breaking code apart

• for improving code standard
Code Refactoring – TechTalks #6                  14




For more abstraction
• Encapsulate Field – force code to access the
      field with getter and setter methods
• Generalize Type – create more general types to
      allow for more code sharing
• Replace type-checking code with State/Strategy
• Replace conditional with polymorphism
Code Refactoring – TechTalks #6                                      15



Example
public class Book{
    private String title;
public class Book{
   String title;
   public void setTitle(String title){
        if(title!=null){
    public title = void main(String[] args) {
           static title.trim();
           if(!title.isEmpty()){
       Book book = new Book();
               this.title = title;
           }
       String title = new Scanner(System.in).nextLine();
       }
    }  if(title!=null){
                 title = title.trim();
    public String getTitle(){
             if(!title.isEmpty()){
        return title;
    }           book.title = title;
                      System.out.println("My book: " + book.title);
  public static void main(String[] args) {
           }
      Book book = new Book();
      }
      String title = new Scanner(System.in).nextLine();
  } book.setTitle(title);
}     System.out.println("My book: " + book.getTitle());
  }
}
Code Refactoring – TechTalks #6                      16




For breaking code apart
• Extract Method, to turn part of a larger method
      into a new method. By breaking down code in
      smaller pieces, it is more easily understandable.
      This is also applicable to functions.
•     Extract Class moves part of the code from an
      existing class into a new class.
Code Refactoring – TechTalks #6                    17




Example
public void showInfor(){
     showUser();
       showUser();

     System.out.println(“Email: “ +
       showContact();                 email);
}    System.out.println(“Phone: “ +   phone);
     System.out.println(“Address: “   + address);
public void showContact(){
}
     System.out.println(“Email: “ +   email);
     System.out.println(“Phone: “ +   phone);
     System.out.println(“Address: “   + address);
}
Code Refactoring – TechTalks #6                        18




For improving code standard
• Move Method or Move Field – move to a more
  appropriate Class or source file
• Rename Method or Rename Field – changing
     the name into a new one that better reveals its
     purpose
• Pull Up – in OOP, move to a superclass
• Push Down – in OOP, move to a subclass
Code Refactoring – TechTalks #6   19




Example
Code Refactoring – TechTalks #6                      20




Tools for Code Refactoring
   Supported by IDE
    • For Java:
        o Netbeans (www.netbeans.org)
        o Eclipse (www.eclipse.org)
        o IntelliJ IDEA (www.jetbrains.com)
     • For .NET:
        o Visual Studio (msdn.microsoft.com)
        o .NET Refactoring (www.dotnetrefactoring.com)
        o JustCode, ReSharper, Visual Assist, …
              (addon for Visual Studio)
Code Refactoring – TechTalks #6   21




Refactoring Dojo
Code Refactoring – TechTalks #6                       22




Refactoring and TDD




                  TDD Rhythm - Test, Code, Refactor
Code Refactoring – TechTalks #6                            23




Summary
• Improving the design of existing code
• Refactoring does not affect behavior
• The system is also kept fully working after each small
     refactoring
•    Two general categories of benefits to the activity of
     refactoring: Maintainability and Extensibility
•    3 techniques for refactoring
•    Using tools for Code Refactoring
•    Code Refactoring are often used to improve quality and
     enhance project agility.
Code Refactoring – TechTalks #6   24




Q&A
Code Refactoring – TechTalks #6                 25




References
•Book: Improving the Design of Existing
  Code (by Martin Fowler)
•Sites:
   • http://refactoring.com
   • http://en.wikipedia.org/wiki/Refactoring
   • http://wiki.netbeans.org/Refactoring
   • http://msdn.microsoft.com/en-
     us/library/ms379618(v=vs.80).aspx
Code Refactoring – TechTalks #6                                   26




                      Thank you
                          doipa@fpt.com.vn – khoanv4@fpt.com.vn

More Related Content

PPTX
Refactoring and code smells
PPT
Refactoring Tips by Martin Fowler
PDF
Refactoring 101
PPTX
Code smell overview
PDF
Refactoring: Improve the design of existing code
PDF
Code Smells and Its type (With Example)
ODP
Refactoring Techniques
PDF
Refactoring and code smells
Refactoring Tips by Martin Fowler
Refactoring 101
Code smell overview
Refactoring: Improve the design of existing code
Code Smells and Its type (With Example)
Refactoring Techniques

What's hot (20)

PPTX
PDF
Refactoring
KEY
Clean code and Code Smells
PDF
Refactoring
PPTX
Code smells and remedies
PPTX
Clean code slide
PPTX
clean code book summary - uncle bob - English version
PDF
Refactoring
PDF
Clean coding-practices
PDF
Lazy java
PPTX
java 8 new features
PPT
Method overriding
PPTX
Clean Code
PDF
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
PPTX
Clean code
PPTX
Object oriented programming concepts
PDF
Clean code
PPTX
Clean code
PPTX
Polymorphism
PPTX
The Art of Clean code
Refactoring
Clean code and Code Smells
Refactoring
Code smells and remedies
Clean code slide
clean code book summary - uncle bob - English version
Refactoring
Clean coding-practices
Lazy java
java 8 new features
Method overriding
Clean Code
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Clean code
Object oriented programming concepts
Clean code
Clean code
Polymorphism
The Art of Clean code
Ad

Viewers also liked (20)

PPTX
PPT
Agile estimation & planning
PDF
TMS - Schedule of Presentations and Reports
PDF
Code Refactoring - Live Coding Demo (JavaDay 2014)
PDF
Using Git on the Command Line
PPT
Creating Custom Drupal Modules
PDF
FLTK Summer Course - Part VIII - Eighth Impact
PDF
FLTK Summer Course - Part II - Second Impact - Exercises
PDF
Advanced Git
PPTX
Manipulating file in Python
PDF
Blisstering drupal module development ppt v1.2
PDF
FLTK Summer Course - Part II - Second Impact
PDF
FLTK Summer Course - Part III - Third Impact
PDF
FLTK Summer Course - Part VII - Seventh Impact
PDF
"Git Hooked!" Using Git hooks to improve your software development process
PDF
Git hooks For PHP Developers
PDF
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
PDF
FLTK Summer Course - Part VI - Sixth Impact - Exercises
PPT
Introduction to Git Commands and Concepts
ODP
Servicios web con Python
Agile estimation & planning
TMS - Schedule of Presentations and Reports
Code Refactoring - Live Coding Demo (JavaDay 2014)
Using Git on the Command Line
Creating Custom Drupal Modules
FLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part II - Second Impact - Exercises
Advanced Git
Manipulating file in Python
Blisstering drupal module development ppt v1.2
FLTK Summer Course - Part II - Second Impact
FLTK Summer Course - Part III - Third Impact
FLTK Summer Course - Part VII - Seventh Impact
"Git Hooked!" Using Git hooks to improve your software development process
Git hooks For PHP Developers
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
FLTK Summer Course - Part VI - Sixth Impact - Exercises
Introduction to Git Commands and Concepts
Servicios web con Python
Ad

Similar to Tech talks#6: Code Refactoring (20)

PPTX
refactoring code by clean code rules
ODP
Refactoring: Improving the design of existing code
PPTX
SAD10 - Refactoring
PPTX
Refactoring workshop
PDF
Bad Code Smells
PDF
Refactoring PHP
PPTX
Refactoring code in .net
PDF
Code Refactoring
PPTX
mehdi-refactoring.pptx
PDF
Code refactoring workshop (in Javascript)
PDF
Introduction to refactoring
PPT
Code Refactoring
PPTX
Refactoring
PPTX
Refactoring, 2nd Edition
PDF
Refactoring Fest
PDF
Refactoring 2 The Max
PPTX
Code refactoring
PDF
Refactoring - An Introduction
PDF
high performance mysql
PPTX
Code Refactoring
refactoring code by clean code rules
Refactoring: Improving the design of existing code
SAD10 - Refactoring
Refactoring workshop
Bad Code Smells
Refactoring PHP
Refactoring code in .net
Code Refactoring
mehdi-refactoring.pptx
Code refactoring workshop (in Javascript)
Introduction to refactoring
Code Refactoring
Refactoring
Refactoring, 2nd Edition
Refactoring Fest
Refactoring 2 The Max
Code refactoring
Refactoring - An Introduction
high performance mysql
Code Refactoring

More from Nguyễn Việt Khoa (7)

PPTX
Giới thiệu về Coding Dojo [at]CocoDojo.hn.vn
PPTX
Sơ lược về StAX
PPT
[Kaizen Game] Airplance Production
PPTX
Giới thiệu ngắn về DOM
PPTX
Giới thiệu ngắn về SAX
PPTX
Giới thiệu về JAXP
ODP
FAT.Seminar.FOSS_Joomla!
Giới thiệu về Coding Dojo [at]CocoDojo.hn.vn
Sơ lược về StAX
[Kaizen Game] Airplance Production
Giới thiệu ngắn về DOM
Giới thiệu ngắn về SAX
Giới thiệu về JAXP
FAT.Seminar.FOSS_Joomla!

Recently uploaded (20)

PPTX
A Presentation on Artificial Intelligence
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
cuic standard and advanced reporting.pdf
PPTX
Cloud computing and distributed systems.
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPT
Teaching material agriculture food technology
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
A Presentation on Artificial Intelligence
Reach Out and Touch Someone: Haptics and Empathic Computing
Dropbox Q2 2025 Financial Results & Investor Presentation
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Diabetes mellitus diagnosis method based random forest with bat algorithm
Review of recent advances in non-invasive hemoglobin estimation
cuic standard and advanced reporting.pdf
Cloud computing and distributed systems.
Understanding_Digital_Forensics_Presentation.pptx
Machine learning based COVID-19 study performance prediction
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Teaching material agriculture food technology
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf

Tech talks#6: Code Refactoring

  • 1. CODE REFACTORING Phạm Anh Đới – doipa@fpt.com.vn Nguyễn Việt Khoa – khoanv4@fpt.com.vn Hanoi, 11/2011
  • 2. Code Refactoring – TechTalks #6 2 Objectives • What’s Code Refactoring? • Why do we Refactor? • When should we Refactor? • How do we Refactor? • Refactoring Techniques • Code Refactoring Tools • Refactoring Dojo
  • 3. Code Refactoring – TechTalks #6 3 What’s Code Refactoring? “A series of small steps, each of which changes the program’s internalstructure without changing its external behavior “ Martin Fowler
  • 4. Code Refactoring – TechTalks #6 4 What’s Code Refactoring? • Code reorganization o Implies equivalence o Change the structure, not the behavior • Cleans up “code-smell” • Does NOT fix bugs
  • 5. Code Refactoring – TechTalks #6 5 Why do we Refactor? • Helps us deliver more business value faster • Improves the design of our software • Minimizes technical debt • Keep development at speed • To make the software easier to understand • To help find bugs • To “Fix broken windows”
  • 6. Code Refactoring – TechTalks #6 6 Example Which code segment is easier to read? Sample 1: if (markT>=0 && markT<=25 && markL>=0 && markL<=25){ float markAvg = (markT + markL)/2; System.out.println("Your mark: " + markAvg); } Sample 2: if (isValid(markT) && isValid(markL)){ float markAvg = (markT + markL)/2; System.out.println("Your mark: " + mark); }
  • 7. Code Refactoring – TechTalks #6 7 When should we Refactor? • To add new functionality o refactor existing code until you understand it o refactor the design to make it simple to add • To find bugs o refactor to understand the code • For code reviews o immediate effect of code review o allows for higher level suggestions
  • 8. Code Refactoring – TechTalks #6 8 How do we Refactor? • Manual Refactoring o Code Smells • Automated/Assisted Refactoring o Refactoring by hand is time consuming and prone to error o Tools (IDE) • In either case, test your changes
  • 9. Code Refactoring – TechTalks #6 9 Code Smell •Duplicated code • Long Method • Feature Envy • Long Parameter List • Inappropriate Intimacy • Switch Statements • Comments • Improper Naming
  • 10. Code Refactoring – TechTalks #6 10 Code Smell examples (1) public void display(String[] names) { System.out.println(“--------------"); for(int i=0; i<names.length; i++){ System.out.println(“ + " + names[i]); } System.out.println(“--------------"); } Duplicated code public void listMember(String[] names) { System.out.println(“List all member: ”); System.out.println(“--------------"); for(int i=0; i<names.length; i++){ System.out.println(“ + " + names[i]); } System.out.println(“--------------"); }
  • 11. Code Refactoring – TechTalks #6 11 Code Smell examples (2) public int getSum() { Scanner input = new Scanner(System.in); int[] list = new int[100]; //Input System.out.println("count:"); int count= input.nextInt(); for (int i= 0; i < count; i++) { Long Method list[i] = input.nextInt(); } //Get sum int sum=0; for (int i= 0; i < count; i++) { sum+=list[i]; } return sum; }
  • 12. Code Refactoring – TechTalks #6 12 Code Smell examples (3) public String formatStudent( int id, String name, Date dob, String province, String address, Long Parameter List String phone ){ //TODO: return null; }
  • 13. Code Refactoring – TechTalks #6 13 Refactoring Techniques • for more abstraction • for breaking code apart • for improving code standard
  • 14. Code Refactoring – TechTalks #6 14 For more abstraction • Encapsulate Field – force code to access the field with getter and setter methods • Generalize Type – create more general types to allow for more code sharing • Replace type-checking code with State/Strategy • Replace conditional with polymorphism
  • 15. Code Refactoring – TechTalks #6 15 Example public class Book{ private String title; public class Book{ String title; public void setTitle(String title){ if(title!=null){ public title = void main(String[] args) { static title.trim(); if(!title.isEmpty()){ Book book = new Book(); this.title = title; } String title = new Scanner(System.in).nextLine(); } } if(title!=null){ title = title.trim(); public String getTitle(){ if(!title.isEmpty()){ return title; } book.title = title; System.out.println("My book: " + book.title); public static void main(String[] args) { } Book book = new Book(); } String title = new Scanner(System.in).nextLine(); } book.setTitle(title); } System.out.println("My book: " + book.getTitle()); } }
  • 16. Code Refactoring – TechTalks #6 16 For breaking code apart • Extract Method, to turn part of a larger method into a new method. By breaking down code in smaller pieces, it is more easily understandable. This is also applicable to functions. • Extract Class moves part of the code from an existing class into a new class.
  • 17. Code Refactoring – TechTalks #6 17 Example public void showInfor(){ showUser(); showUser(); System.out.println(“Email: “ + showContact(); email); } System.out.println(“Phone: “ + phone); System.out.println(“Address: “ + address); public void showContact(){ } System.out.println(“Email: “ + email); System.out.println(“Phone: “ + phone); System.out.println(“Address: “ + address); }
  • 18. Code Refactoring – TechTalks #6 18 For improving code standard • Move Method or Move Field – move to a more appropriate Class or source file • Rename Method or Rename Field – changing the name into a new one that better reveals its purpose • Pull Up – in OOP, move to a superclass • Push Down – in OOP, move to a subclass
  • 19. Code Refactoring – TechTalks #6 19 Example
  • 20. Code Refactoring – TechTalks #6 20 Tools for Code Refactoring Supported by IDE • For Java: o Netbeans (www.netbeans.org) o Eclipse (www.eclipse.org) o IntelliJ IDEA (www.jetbrains.com) • For .NET: o Visual Studio (msdn.microsoft.com) o .NET Refactoring (www.dotnetrefactoring.com) o JustCode, ReSharper, Visual Assist, … (addon for Visual Studio)
  • 21. Code Refactoring – TechTalks #6 21 Refactoring Dojo
  • 22. Code Refactoring – TechTalks #6 22 Refactoring and TDD TDD Rhythm - Test, Code, Refactor
  • 23. Code Refactoring – TechTalks #6 23 Summary • Improving the design of existing code • Refactoring does not affect behavior • The system is also kept fully working after each small refactoring • Two general categories of benefits to the activity of refactoring: Maintainability and Extensibility • 3 techniques for refactoring • Using tools for Code Refactoring • Code Refactoring are often used to improve quality and enhance project agility.
  • 24. Code Refactoring – TechTalks #6 24 Q&A
  • 25. Code Refactoring – TechTalks #6 25 References •Book: Improving the Design of Existing Code (by Martin Fowler) •Sites: • http://refactoring.com • http://en.wikipedia.org/wiki/Refactoring • http://wiki.netbeans.org/Refactoring • http://msdn.microsoft.com/en- us/library/ms379618(v=vs.80).aspx
  • 26. Code Refactoring – TechTalks #6 26 Thank you doipa@fpt.com.vn – khoanv4@fpt.com.vn

Editor's Notes

  • #2: Nguồn tham khảo: Java Refactoring Fest (presentation) - Naresh Jain - naresh@agilefaqs.comhttp://refactoring.comRefactoring workbook - William C. WakeRefactoring to Patterns - Joshua KerievskyRefactoring (presentation) - Jason Lee
  • #6: Improves the design of our softwareLoại bỏ những code tồiGiúp code dễ hiểu và dễ bảo trìTạo điều kiện thuận lợi cho các thay đổiTăng tính linh hoạtTăng khả năng tái sử dụng
  • #10: Cầncóvídụ
  • #15: Mỗikỹthuậtcầncómột demo
  • #22: Giới thiệu về một thiết kế (tồi) biểu diễn với UML trênĐới + Khoa (5 phút): thiết kế lại (đồng thời)So sánh 2 bản thiết kế mới của Đới và Khoa với bản ban đầuCùng sinh viên thảo luận, đánh giáDùng Netbeans triển khai theo thiết kế ban đầu và dùng các kỹ thuật Refactor có sẵn của Netbeans để thực hiện Refactor theo 2 bản thiết kế mới
  • #23: Ảnh từ: Slide của Naresh Jain