Refactorer c’est comme dormir

Nadia & Renaud Humbert-Labeaumaz

« Pas le temps de refactorer, il faut produire. »

Perceptions du refactoring

  • Le refactoring est souvent vu comme
    • Une perte de temps.
    • Sans valeur ajoutée.
    • Un caprice de développeur.

  • Cette présentation vise à montrer que le refactoring est bon pour la santé.

« Se priver de refactoring, c’est comme se priver de sommeil. »

Conséquences

  • La moindre tâche prend du temps.
  • Des erreurs étranges surviennent.
  • Cela s'impose au bout du compte.
  • La journée est très longue !

Que signifie refactorer ?

—« Le refactoring est l'acte d’améliorer le design du code sans changer son comportement. »

M. Feathers

Renommer une méthode

public BigDecimal calc() {
    return bks.stream()
                .map(Book::price)
                .reduce(BigDecimal::add)
                .orElse(BigDecimal.ZERO);
}
public BigDecimal computeTotalPrice() {
    return books.stream()
                .map(Book::price)
                .reduce(BigDecimal::add)
                .orElse(BigDecimal.ZERO);
}

Extraire une interface

public User createUser(String name, String password) {

    MessageDigest md = MessageDigest.getInstance("SHA-256");
    byte[] hashedPassword = md.digest(password.getBytes("UTF-8"));
    
    User user = new User(name, hashedPassword);
    return userRepository.save(user);
}
public User createUser(String name, String password) {

    byte[] hashedPassword = hashProvider.hash(password);
    
    User user = new User(name, hashedPassword);
    return userRepository.save(user);
}

Regrouper des attributs de méthode dans un objet

public User createUser(String firstName, String lastName, 
        String password, String email, String phone) {

    User user = new User(firstName, lastName, 
            hashProvider.hash(password), email, phone);

    return userRepository.save(user);
}
public User createUser(UserInfos infos) {

    User user = new User(infos, hashProvider);

    return userRepository.save(user);
}

Ajouter des tests

  • Premier pas vers un meilleur design
    • Étape nécessaire à du refactoring.
    • Améliore la compréhension du code.
    • Alerte si le code n'est pas testable.

En pratique

  • Refactorer avant chaque développement.
  • Seulement sur le code concerné
    • Impossible de tout corriger d'un coup.
    • Évite les régressions non liées.
  • Préparation nécessaire

    • Refactoring minimal pour rendre testable.

    • Création d'un harnais de tests.

Conclusion

  • Règle du boy scout
    • Laisser le code dans un meilleur état.
  • Amélioration continue du code
    • Inversion de la dette technique.

  • Les développeurs (re)prennent du plaisir.

Merci

@nphumbert (nphumbert.github.io)

Crafties @ YouTube

@rnowif (rnowif.github.io)

Made with Slides.com