SlideShare a Scribd company logo
1 of 26
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

What's hot

Code Refactoring
Code RefactoringCode Refactoring
Code Refactoringkim.mens
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code SmellsMario Sangiorgio
 
Refactoring and code smells
Refactoring and code smellsRefactoring and code smells
Refactoring and code smellsPaul Nguyen
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Mitsuru Kariya
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignVictor Rentea
 
C# for C++ Programmers
C# for C++ ProgrammersC# for C++ Programmers
C# for C++ Programmersrussellgmorley
 
C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringC# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringEyob Lube
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in JavaIonut Bilica
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Anshul Vinayak
 
A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsMatthias Noback
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix itRafael Dohms
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threadsYnon Perek
 

What's hot (20)

Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Code smells and remedies
Code smells and remediesCode smells and remedies
Code smells and remedies
 
Refactoring and code smells
Refactoring and code smellsRefactoring and code smells
Refactoring and code smells
 
Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15Effective Modern C++ 勉強会#3 Item 15
Effective Modern C++ 勉強会#3 Item 15
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable Design
 
C# for C++ Programmers
C# for C++ ProgrammersC# for C++ Programmers
C# for C++ Programmers
 
Clean code
Clean codeClean code
Clean code
 
C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringC# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoring
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)
 
A testing strategy for hexagonal applications
A testing strategy for hexagonal applicationsA testing strategy for hexagonal applications
A testing strategy for hexagonal applications
 
React hooks
React hooksReact hooks
React hooks
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix it
 
Python_Regular Expression
Python_Regular ExpressionPython_Regular Expression
Python_Regular Expression
 
React workshop
React workshopReact workshop
React workshop
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threads
 
Clean Code
Clean CodeClean Code
Clean Code
 

Viewers also liked

Agile estimation & planning
Agile estimation & planningAgile estimation & planning
Agile estimation & planningDUONG Trong Tan
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsMichel Alves
 
Code Refactoring - Live Coding Demo (JavaDay 2014)
Code Refactoring - Live Coding Demo (JavaDay 2014)Code Refactoring - Live Coding Demo (JavaDay 2014)
Code Refactoring - Live Coding Demo (JavaDay 2014)Peter Kofler
 
Using Git on the Command Line
Using Git on the Command LineUsing Git on the Command Line
Using Git on the Command LineBrian Richards
 
Creating Custom Drupal Modules
Creating Custom Drupal ModulesCreating Custom Drupal Modules
Creating Custom Drupal Modulestanoshimi
 
FLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth ImpactFLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth ImpactMichel Alves
 
FLTK Summer Course - Part II - Second Impact - Exercises
FLTK Summer Course - Part II - Second Impact - Exercises FLTK Summer Course - Part II - Second Impact - Exercises
FLTK Summer Course - Part II - Second Impact - Exercises Michel Alves
 
Manipulating file in Python
Manipulating file in PythonManipulating file in Python
Manipulating file in Pythonshoukatali500
 
Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2Blisstering drupal module development ppt v1.2
Blisstering drupal module development ppt v1.2Anil Sagar
 
FLTK Summer Course - Part II - Second Impact
FLTK Summer Course - Part II - Second ImpactFLTK Summer Course - Part II - Second Impact
FLTK Summer Course - Part II - Second ImpactMichel Alves
 
FLTK Summer Course - Part III - Third Impact
FLTK Summer Course - Part III - Third ImpactFLTK Summer Course - Part III - Third Impact
FLTK Summer Course - Part III - Third ImpactMichel Alves
 
FLTK Summer Course - Part VII - Seventh Impact
FLTK Summer Course - Part VII  - Seventh ImpactFLTK Summer Course - Part VII  - Seventh Impact
FLTK Summer Course - Part VII - Seventh ImpactMichel Alves
 
"Git Hooked!" Using Git hooks to improve your software development process
"Git Hooked!" Using Git hooks to improve your software development process"Git Hooked!" Using Git hooks to improve your software development process
"Git Hooked!" Using Git hooks to improve your software development processPolished Geek LLC
 
Git hooks For PHP Developers
Git hooks For PHP DevelopersGit hooks For PHP Developers
Git hooks For PHP DevelopersUmut IŞIK
 
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...Alessandro Molina
 
FLTK Summer Course - Part VI - Sixth Impact - Exercises
FLTK Summer Course - Part VI - Sixth Impact - ExercisesFLTK Summer Course - Part VI - Sixth Impact - Exercises
FLTK Summer Course - Part VI - Sixth Impact - ExercisesMichel Alves
 
Introduction to Git Commands and Concepts
Introduction to Git Commands and ConceptsIntroduction to Git Commands and Concepts
Introduction to Git Commands and ConceptsCarl Brown
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con PythonManuel Pérez
 

Viewers also liked (20)

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

Similar to Tech talks#6: Code Refactoring

Agile_goa_2013_clean_code_tdd
Agile_goa_2013_clean_code_tddAgile_goa_2013_clean_code_tdd
Agile_goa_2013_clean_code_tddSrinivasa GV
 
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019Paulo Clavijo
 
Assuring the code quality of share point solutions and apps - Matthias Einig
Assuring the code quality of share point solutions and apps - Matthias EinigAssuring the code quality of share point solutions and apps - Matthias Einig
Assuring the code quality of share point solutions and apps - Matthias EinigSPC Adriatics
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review ProcessDr. Syed Hassan Amin
 
EKON 23 Code_review_checklist
EKON 23 Code_review_checklistEKON 23 Code_review_checklist
EKON 23 Code_review_checklistMax Kleiner
 
What’s eating python performance
What’s eating python performanceWhat’s eating python performance
What’s eating python performancePiotr Przymus
 
SQL Saturday 28 - .NET Fundamentals
SQL Saturday 28 - .NET FundamentalsSQL Saturday 28 - .NET Fundamentals
SQL Saturday 28 - .NET Fundamentalsmikehuguet
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...Antonio de la Torre Fernández
 
LINQ Inside
LINQ InsideLINQ Inside
LINQ Insidejeffz
 
Code Generation using T4
Code Generation using T4Code Generation using T4
Code Generation using T4Joubin Najmaie
 
C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#Hawkman Academy
 
refactoring code by clean code rules
refactoring code by clean code rulesrefactoring code by clean code rules
refactoring code by clean code rulessaber tabatabaee
 
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Michele Orselli
 
Design Like a Pro: Scripting Best Practices
Design Like a Pro: Scripting Best PracticesDesign Like a Pro: Scripting Best Practices
Design Like a Pro: Scripting Best PracticesInductive Automation
 

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

Agile_goa_2013_clean_code_tdd
Agile_goa_2013_clean_code_tddAgile_goa_2013_clean_code_tdd
Agile_goa_2013_clean_code_tdd
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
 
Refactoring
RefactoringRefactoring
Refactoring
 
Assuring the code quality of share point solutions and apps - Matthias Einig
Assuring the code quality of share point solutions and apps - Matthias EinigAssuring the code quality of share point solutions and apps - Matthias Einig
Assuring the code quality of share point solutions and apps - Matthias Einig
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review Process
 
EKON 23 Code_review_checklist
EKON 23 Code_review_checklistEKON 23 Code_review_checklist
EKON 23 Code_review_checklist
 
What’s eating python performance
What’s eating python performanceWhat’s eating python performance
What’s eating python performance
 
SQL Saturday 28 - .NET Fundamentals
SQL Saturday 28 - .NET FundamentalsSQL Saturday 28 - .NET Fundamentals
SQL Saturday 28 - .NET Fundamentals
 
More about PHP
More about PHPMore about PHP
More about PHP
 
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
20191116 DevFest 2019 The Legacy Code came to stay (El legacy vino para queda...
 
LINQ Inside
LINQ InsideLINQ Inside
LINQ Inside
 
Code Generation using T4
Code Generation using T4Code Generation using T4
Code Generation using T4
 
C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#
 
Dapper
DapperDapper
Dapper
 
refactoring code by clean code rules
refactoring code by clean code rulesrefactoring code by clean code rules
refactoring code by clean code rules
 
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
Comunicare, condividere e mantenere decisioni architetturali nei team di svil...
 
Design Like a Pro: Scripting Best Practices
Design Like a Pro: Scripting Best PracticesDesign Like a Pro: Scripting Best Practices
Design Like a Pro: Scripting Best Practices
 
Old code doesn't stink
Old code doesn't stinkOld code doesn't stink
Old code doesn't stink
 

More from Nguyễn Việt Khoa

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

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

Recently uploaded

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

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

  1. 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
  2. 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
  3. Cầncóvídụ
  4. Mỗikỹthuậtcầncómột demo
  5. 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
  6. Ảnh từ: Slide của Naresh Jain