Refactorizaciones para Mejorar la Mantenibilidad
Las refactorizaciones en esta categoria están motivadas para
mejorar los atributos de calidad internos del codigo fuente como por
ejemplo: legibilidad, comprensibilidad, flexibilidad y
extensibilidad ( atributos internos que las refactorizaciones han
demostrado mejorar) y también refactorizaciones que permitan
actualizar el código fuente a nuevas versiones de Fortran,
eliminando caracteristicas obsoletas del lenguaje.
Refactorizaciones para Mejorar la Presentacion / Legibilidad
- Rename: cambia
el nombre de una variable,subprograma,etc.
- Extract Local Variable:
elimina una subexprecion dentro de una expresion mas
mayor y se la asigna a una variable locar .
- Extract Local
Procedure: extrae una secuenciua de instrucciones
de un procedimiento, las situa en una nueva subrutina y
reemplaza las intrucciones extraídas con la llamada al
procedimiento.
- Canonicalize
Keyword Capitalization: hace que
todos los archivos de codigo fuente seleccionesdo tengan el
mismo formato de Mayusculas o Minusculas.
- Standarize
Statements: Standardize Statements
rewrites all variables declarations, so that there is only one
variable declaration per line, and every variable declaration
contains a double colon (::).This is intended to make the code
more readable.
- Convert
Specification Statement to Declaration Attribute:
Replaces the various specification statements (DIMENSION,
PARAMETER, SAVE, etc.), with the attribute declarations in the
variables' type declaration statements.Added
15/04/2011
Refactorizaciones para Facilitar el Diseño/ Cambio de
Interface
- Encapsulate
Variable: crea los metodos getters y setter
para la variable seleccionada.
- Make Private
Entity Public: cambia la visibilidad de una
variable de modulo o subprograma de privada a publica .
- Change
Subprogram Signature: permite al usuario
agregar,cambiar,extraer,reordenar,renombrer o cambiar de tipos
de parámetros de una función o subprograma,
actualizando deacuerdo a esto la llamada.
- Add
Only
Clause
To Use Statements: crea una lista de simbolos
que están siendo utilizados por un móduilo y la
agrega en la instruccion USE correspondiente.
- Move
Entity
Between Modules: mueve una variable de módulo o
un procedimiento de un módulo a otro haciendo los ajustes
correspondientes en la intrucción USE.
- Add Use of
Named Entities To Module: permite
seleccionar una entidad en un módulo y agregarle la
cláusula use only en el módulo sellecionado.
- Safe-Delete
Internal Subprograms: Este refactoring
elimina aquellas subrutinas o funciones no utilizadas.Agregado 13/09/2010
- Change
Subroutine to Function: permite transforma una
subrutina a una funcion.Agregado
13/09/2010
- Change
Subroutine Signature: permite
reordenar los parametros de una subrutina. Agregado 13/09/2010
- Add Subroutine Parameter : This refactoring
will add arguments to a subroutine and adjust all call sites
accordingly.Added 15/04/2011
Refactorizaciones que Evitan Prácticas Pobres de
Programación en Fortran
- Remove
Unreferenced Labels: borra las etiquetas que no
son utilizadas.
- Remove
Real
Type
Iteration Index: elimina parametros o varriables
de control de los ciclos Do no enteras.
- Remove
Reserved
Words As Variables: renombre las variables con el
mismo nombre que palabras reservadas de Fortran.
- Introduce
Implicit
None: agrega la intrucción Implicit
None en un archivo y agrega las declaraciones explicitas para
todas las variables que fueron declaradas previamente como
implicitas.
- Introduce
Intent
In/
Out: agrega en las declaraciones de variables dentro de
funciones o procedimiento la palabras reservadas Intent In /
Intent OUT segun corresponda.
- Remove
Unused
Local Variables: elimina variables locales
declaradas y nunca utilizadas.
- Minimize
Only
List:
elimina simbolos
que no estan siendo utilizados de la lista Only en la
intrucción Use.
- Make
Common Variable Names Consistent: hace que todas
las definiciones deuna variable dentro de un bloque common sean
la misma .
- Delete
Unused
Common Block Variable: elimina las variables declaradas
en los bloque common nunca utilizadas.
- Add
Dimension
Statement:
agrega la instruccion Dimension en las declaraciones de
un array.
- Remove
Format Statement Labels: reemplaza los codigos de
las instrucciones format en las declaraciones de las
instrucciones read/write, en lugar de dejar la especificacion
del formato separada de la instrucción.
- Add
identifier to END statement (e.g. END SUBROUTINE FOO):
Agrega el nombre del identificador segun corresponda. Agregado 17/05/2010
- Toggle End
Name: The toggle-end-name refactoring is
designed to automatically add or remove the end-name of a
nameable construct, provided the end-name is optional (with
several exceptions).Added 15/04/2011
Refactorizaciones que Eliminan Construcciones Antiguas, Obsoletas
o No-Standard
- Replace
Obsolete Operators: reemplaza
todas
las ocurrencias de los operaciones de comparacion del viejo
estilo ( como .LT. y .EQ.) con sus nuevos equivalentes (
simbolos como < y =).
- Change
Fixed
Form To Free Form: cambia el formato fijo de archivos
Fortran por el Formato de estilo Libre.
- Transform
Character*
to Character(Len =) declaration: remplaza
Character* con su equivalente Character(Len =) en las
declaraciones de strings.
- Remove
Computed Go To statement: remplaza
los Go To computados con una construccion Slect-case equivalente
que puede contener o no los Go To.
- Remove
Arithmetic If Statement: remplaza
las viejas instrucciones de tipo if aritmetico con su
correspondiente instruccion if, es analogo que el anterior.
- Remove
Assigned
Go Tos: elimina los Go To assigandos.
- Replace Old
Styles DO loops: reemplaza las
instrucciones Do Loop Continue ( viejo estilo ) con su
equivalente Do Loop que finaliza con End Do.
- Replace
Shared Do Loop Termination: reemplaza
los Shared Do loop Terminatiion con la construccion equicalente
Do Loop que finaliza con End Do .
- Transform
To
While
Sentence: elimia los ciclos While creados a partir de
instrucciones If y Go To .
- Move
Common
Block
to Module: saca todas las declaraciones de
un common block particular, moviendo las declaraciones a un
modulo e introduce la clausuala Use donde sea necesario.
- Move
Saved
Variables
To Common Block: crea un Common Block para todas
las variables del tipo Saved de un subprograma.
- Data To
Parameter: cambia la declaracion de un
identificador de Data a Parametro.
Refactorizaciones para Performance
Esta categoría actualmente tiene dos ejemplos de como las
refactorizaciones pueden ser utilizadas para mejorar la performance
preservando no solo el comportamientos del programa sino que tambien
la legibilidad y la mantenibilidad del codigo. este es uno de los
factores que suelen apartar la refactorización de la
optimización.
Refactorizaciones para Performance
- Change To Vector
Form: reescribe un ciclo Do en su
equivalente utilizando la notacion vectorial de Fortran,
permitiendole al compilador hacer mejores optimizaciones.
- Make DO
Loop Concurrent/Non-Concurrent (Fortran 2008) :
Added 15/04/2011
Loop Refactorings
- Interchange
Loops: intercambia en un ciclo Loop el ciclo
interno por el externo, en el caso que este intercambio pueda
ser realizado esto permite optimizar el patron de acceso a
memoria y permite tomar ventaja de las tecnicas de prefetching.
- Fuse Loops: Takes two
do-loops, normalizes their bounds, and finally puts the loop
bodies in a single do-loop.Added 15/04/2011
- Reverse Loop:
Takes an incrementing or decrementing loop, swaps the lower and
upper bounds, and negates the step.Added
15/04/2011
- Tile Loop: This
refactoring takes a double nested do-loop, and creates a nested
do-loop with four levels of depth. Instead of iterating through
a two dimensional array (for example) by going through each row,
it will loop over smaller tile blocks.Added
15/04/2011
- Unroll
Loop: Takes the selected do-loop and either completely
or partially unrolls it. This will also optionally include a
conditional statement to make sure the loop stays in bounds. Added 15/04/2011