Hello!

Je suis sur ma première opération de refactoring d'un code pas-à-moi! C'est super intéressant, mais je ne suis pas certain d'utiliser les bons outils.

Par exemple, le codeur (un physicien) a largement copié collé et dupliqué son code sur des millier et des milliers de lignes. Ca donne des choses comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
                          MPI_Send(&save_x_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_y_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_z_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
 
                          MPI_Send(&save_vx_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_vy_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_vz_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
 
                          MPI_Send(&save_ax_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_ay_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
                          MPI_Send(&save_az_i2cg_INRTL[ii][eee][ispan_constellation], 1, MPI_DOUBLE, ccc, iProc, MPI_COMM_WORLD);
Souvent il y a des comportements entiers (sur plusieurs dizaines de lignes) qui au lieu d'avoir été extraits en méthodes, ont été copié collé dans la même fonction en changeant le nom d'une variable.
Du coup j'essaie d'identifier les portions de code qui ont la plus forte priorité en terme de refactoring, c'est à dire trouver les redondances qui maximisent la longueur du pattern répété et le nombre de répétitions.
Existe-t-il un outil qui fait ça ou bien je dois scroller à travers tout le code manuellement ?

Merci !