You are on page 1of 187

Anlisis de Tcnicas de Aspect Mining Aplicadas a un Sistema en Produccin

por Sebastin Bisbal Juan Pablo Cassano

Dra. Claudia A. Marcos Directora Ing. Esteban S. Abait Co-Director

FACULTAD DE CIENCIAS EXACTAS UNIVERSIDAD NACIONAL DEL CENTRO DE LA PROVINCIA DE BUENOS AIRES

Tandil, Mayo 2012

ndice de Contenidos
AGRADECIMIENTOS ...................................................................................................................................... 9 CAPTULO 1 ................................................................................................................................................. 10 INTRODUCCIN .......................................................................................................................................... 10 I.1. MANTENIMIENTO DE SISTEMAS DE SOFTWARE........................................................................................ 10 I.2. TCNICAS DE ASPECT MINING.............................................................................................................. 11 I.3. ANLISIS DE TCNICAS DE ASPECT MINING EN UN SISTEMA DE PRODUCCIN ................................................ 13 I.4. ORGANIZACIN DEL DOCUMENTO ........................................................................................................ 16 CAPTULO 2 ................................................................................................................................................. 18 INTRODUCCIN AL DESARROLLO DE SOFTWARE ORIENTADO A ASPECTOS ............................................. 18 II.1. EVOLUCIN DEL DESARROLLO DE SOFTWARE ..................................................................................... 18 II.2. SEPARACIN DE CONCERNS ............................................................................................................ 19 II.3. INTRODUCCIN A LA PROGRAMACIN ORIENTADA A ASPECTOS............................................................. 20 II.4. CONCEPTOS DE LA POA................................................................................................................. 21 II.5. LENGUAJES ORIENTADOS A ASPECTOS .............................................................................................. 24 II.6. INTRODUCCIN A ASPECT MINING ................................................................................................... 24 II.6.1. Conceptos de Aspect Mining............................................................................................... 25 II.6.2. Evaluacin de las Tcnicas de Aspect Mining ..................................................................... 27 II.6.3. Reconocimiento de Aspectos .............................................................................................. 27 CAPTULO 3 ................................................................................................................................................. 29 TCNICAS DE ASPECT MINING .................................................................................................................... 29 III.1. UNIQUE METHODS ....................................................................................................................... 29 III.1.1. Tcnica ................................................................................................................................ 30 III.1.2. Ejemplo del Enfoque ........................................................................................................... 30 III.2. FAN-IN ANALYSIS ......................................................................................................................... 31 III.2.1. Tcnica ................................................................................................................................ 31 III.2.2. Ejemplo del Enfoque ........................................................................................................... 34 III.3. EXECUTION RELATIONS .................................................................................................................. 35 III.3.1. Tcnica ................................................................................................................................ 35 III.3.2. Clasificacin de las Relaciones de Ejecucin ....................................................................... 35 III.3.3. Ejemplo del Enfoque ........................................................................................................... 37 III.4. COMPARACIN DE TCNICAS .......................................................................................................... 38 CAPTULO 4 ................................................................................................................................................. 42 ASPECT MINING APLICADO A UN SISTEMA EN PRODUCCIN ................................................................... 42 IV.1. DESARROLLO DEL CASO DE ESTUDIO................................................................................................. 42 IV.2. AME HERRAMIENTA DE ASPECT MINING.......................................................................................... 44 IV.3. CASO DE ESTUDIO ........................................................................................................................ 44 IV.3.1. Descripcin de GridGain ..................................................................................................... 44 IV.3.2. Releases de GridGain .......................................................................................................... 46 IV.4. ANLISIS DE ASPECT MINING APLICADO EN GRIDGAIN ........................................................................ 47 IV.5. ANLISIS GENERAL DE LOS RESULTADOS OBTENIDOS ........................................................................... 49 IV.6. CLASIFICACIN DE SEEDS MEDIANTE CROSSCUTTING CONCERNS SORTS .................................................. 52 IV.7. PRECISIN Y RECALL...................................................................................................................... 55 IV.7.1. Definicin ............................................................................................................................ 56 IV.7.2. Combinacin de Tcnicas .................................................................................................... 57 IV.7.3. Aplicacin al Caso de Estudio ............................................................................................. 59 IV.7.4. Interpretacin de Resultados .............................................................................................. 61 IV.7.5. Anlisis de los Resultados ................................................................................................... 65 IV.8. CONCLUSIN ............................................................................................................................... 66 IV.9. LIMITACIONES .............................................................................................................................. 67 CAPTULO 5 ................................................................................................................................................. 68 ANLISIS ESTADSTICOS .............................................................................................................................. 68 V.1. MEDIDAS DE CENTRALIZACIN ........................................................................................................ 68 V.1.1. Definicin de las Medidas de Centralizacin ...................................................................... 68

ndice de Contenidos
V.1.2. Aplicacin al Caso de Estudio ............................................................................................. 70 V.1.3. Resultados de Aplicar Anlisis de Cuartiles......................................................................... 74 V.2. ANLISIS DE OUTLIERS ................................................................................................................... 75 V.2.1. Definicin de Outliers .......................................................................................................... 76 V.2.2. Clculo de Outliers en el Caso de Estudio ........................................................................... 78 V.2.3. Resultados de Aplicar Anlisis de Outliers .......................................................................... 81 V.3. ANLISIS DE CCC EN GRIDGAIN ...................................................................................................... 83 V.4. CONCLUSIN ............................................................................................................................... 84 CAPTULO 6 ................................................................................................................................................. 86 CASO DE ESTUDIO ...................................................................................................................................... 86 VI.1. CROSSCUTTING CONCERNS TPICOS EN SISTEMAS EN PRODUCCIN ........................................................ 86 VI.2. MTRICAS A APLICAR .................................................................................................................... 87 VI.2.1. Tendencia del Fan-in Promedio .......................................................................................... 87 VI.2.2. CC (Ciclomatic Complexity) ................................................................................................. 87 VI.2.3. NCSS (Non Commenting Source Statements) ..................................................................... 88 VI.2.4. NLS (Number of Locals in Scope)......................................................................................... 88 VI.2.5. NOL (Number of Levels) ...................................................................................................... 88 VI.3. CROSSCUTTING CONCERN DE LOGGING............................................................................................. 88 VI.3.1. Tendencia del Crosscutting Concern Logging ..................................................................... 90 VI.3.2. Anlisis General de Mtricas por Mtodos ......................................................................... 90 VI.3.3. Anlisis de Resultados para el Crosscutting Concern de Logging ....................................... 91 VI.4. CROSSCUTTING CONCERN DE DATA VALIDATION ................................................................................ 91 VI.4.1. Tendencia del Crosscutting Concern Data Validation ......................................................... 92 VI.4.2. Anlisis General de Mtricas por Mtodos ......................................................................... 92 VI.4.3. Anlisis de Resultados para el Crosscutting Concern de Data Validation ........................... 93 VI.5. CROSSCUTTING CONCERN SYNCHRONIZATION .................................................................................... 94 VI.5.1. Tendencia del Crosscutting Concern Synchronization ........................................................ 95 VI.5.2. Anlisis General de Mtricas por Mtodos ......................................................................... 95 VI.5.3. Anlisis de Resultados para el Crosscutting Concern de Synchronization .......................... 97 VI.6. CONCLUSIN ............................................................................................................................... 98 CAPTULO 7 ................................................................................................................................................. 99 CONCLUSIN .............................................................................................................................................. 99 VII.1. ANLISIS DEL ESTUDIO PROPUESTO.................................................................................................. 99 VII.2. TRABAJOS FUTUROS .................................................................................................................... 100 ANEXO I .................................................................................................................................................... 102 CLASIFICACIN DE SEEDS ......................................................................................................................... 102 AI.1. SEEDS DETECTADOS CON UNIQUE METHODS ................................................................................... 102 AI.1.1. Seeds en GridGain v1.5.0 .................................................................................................. 104 AI.1.2. Seeds en GridGain v1.6.0 .................................................................................................. 107 AI.1.3. Seeds en GridGain v2.0.0 .................................................................................................. 108 AI.1.4. Seeds en GridGain v2.0.2 .................................................................................................. 109 AI.1.5. Seeds en GridGain v2.1.0 .................................................................................................. 109 AI.1.6. Seeds en GridGain v2.1.1 .................................................................................................. 111 AI.2. SEEDS DETECTADAS CON EXECUTION RELATIONS - OUTSIDE BEFORE .................................................... 111 AI.2.1. Seeds en GridGain v1.5.0 .................................................................................................. 112 AI.2.2. Seeds en GridGain v1.6.0 .................................................................................................. 114 AI.2.3. Seeds en GridGain v2.0.0 .................................................................................................. 115 AI.2.4. Seeds en GridGain v2.0.2 .................................................................................................. 116 AI.2.5. Seeds en GridGain v2.1.0 .................................................................................................. 116 AI.2.6. Seeds en GridGain v2.1.1 .................................................................................................. 117 AI.3. SEEDS DETECTADOS CON EXECUTION RELATIONS - OUTSIDE AFTER ...................................................... 117 AI.3.1. Seeds en GridGain v1.5.0 .................................................................................................. 118 AI.3.2. Seeds en GridGain v1.6.0 .................................................................................................. 119 AI.3.3. Seeds en GridGain v2.0.0 .................................................................................................. 119 AI.3.4. Seeds en GridGain v2.0.2 .................................................................................................. 120 AI.3.5. Seeds en GridGain v2.1.0 .................................................................................................. 120

ndice de Contenidos
AI.3.6. Seeds en GridGain v2.1.1 .................................................................................................. 121 AI.4. SEEDS DETECTADOS CON EXECUTION RELATIONS - INSIDE FIRST .......................................................... 121 AI.4.1. Seeds en GridGain v1.5.0 .................................................................................................. 122 AI.4.2. Seeds en GridGain v1.6.0 .................................................................................................. 123 AI.4.3. Seeds en GridGain v2.0.0 .................................................................................................. 123 AI.4.4. Seeds en GridGain v2.0.2 .................................................................................................. 124 AI.4.5. Seeds en GridGain v2.1.0 .................................................................................................. 124 AI.4.6. Seeds en GridGain v2.1.1 .................................................................................................. 125 AI.5. SEEDS DETECTADOS CON EXECUTION RELATIONS - INSIDE LAST ........................................................... 125 AI.5.1. Seeds en GridGain v1.5.0 .................................................................................................. 126 AI.5.2. Seeds en GridGain v1.6.0 .................................................................................................. 127 AI.5.3. Seeds en GridGain v2.0.0 .................................................................................................. 127 AI.5.4. Seeds en GridGain v2.0.2 .................................................................................................. 128 AI.5.5. Seeds en GridGain v2.1.0 .................................................................................................. 128 AI.5.6. Seeds en GridGain v2.1.1 .................................................................................................. 128 AI.6. SEEDS DETECTADOS CON FAN-IN ANALYSIS ..................................................................................... 129 AI.6.1. Seeds en GridGain v1.5.0 .................................................................................................. 133 AI.6.2. Seeds en GridGain v1.6.0 .................................................................................................. 139 AI.6.3. Seeds en GridGain v2.0.0 .................................................................................................. 140 AI.6.4. Seeds en GridGain v2.0.2 .................................................................................................. 141 AI.6.5. Seeds en GridGain v2.1.0 .................................................................................................. 141 AI.6.6. Seeds en GridGain v2.1.1 .................................................................................................. 144 ANEXO II ................................................................................................................................................... 145 TABLAS Y GRFICOS DE CUARTILES, OUTLIERS Y BOX-PLOTS .................................................................. 145 AII.1. CUARTILES Y OUTLIERS PARA UNIQUE METHODS .............................................................................. 145 AII.1.1. Respecto a la Media ..................................................................................................... 145 AII.1.2. Respecto al Cuartil 1 .................................................................................................... 146 AII.1.3. Respecto al Cuartil 2 .................................................................................................... 147 AII.1.4. Respecto al Cuartil 3 .................................................................................................... 147 AII.1.5. Respecto al Lmite Superior Normal ............................................................................. 148 AII.1.6. Respecto al Lmite Superior Extremo ........................................................................... 149 AII.1.7. Box-Plot ........................................................................................................................ 149 AII.2. CUARTILES Y OUTLIERS PARA EXECUTION RELATIONS - OUTSIDE BEFORE ............................................... 149 AII.2.1. Respecto a la Media ..................................................................................................... 149 AII.2.2. Respecto al Cuartil 1 .................................................................................................... 150 AII.2.3. Respecto al Cuartil 2 .................................................................................................... 151 AII.2.4. Respecto al Cuartil 3 .................................................................................................... 151 AII.2.5. Respecto al Lmite Superior Normal ............................................................................. 152 AII.2.6. Respecto al Lmite Superior Extremo ........................................................................... 153 AII.2.7. Box-Plot ........................................................................................................................ 153 AII.3. CUARTILES Y OUTLIERS PARA EXECUTION RELATIONS - OUTSIDE AFTER ................................................. 153 AII.3.1. Respecto a la Media..................................................................................................... 153 AII.3.2. Respecto al Cuartil 1 .................................................................................................... 154 AII.3.3. Respecto al Cuartil 2 .................................................................................................... 155 AII.3.4. Respecto al Cuartil 3 .................................................................................................... 155 AII.3.5. Respecto al Lmite Superior Normal ............................................................................. 156 AII.3.6. Respecto al Lmite Superior Extremo ........................................................................... 157 AII.3.7. Box-Plot ........................................................................................................................ 157 AII.4. CUARTILES Y OUTLIERS PARA EXECUTION RELATIONS - INSIDE FIRST ..................................................... 157 AII.4.1. Respecto a la Media ..................................................................................................... 157 AII.4.2. Respecto al Cuartil 1 .................................................................................................... 158 AII.4.3. Respecto al Cuartil 2 .................................................................................................... 159 AII.4.4. Respecto al Cuartil 3 .................................................................................................... 159 AII.4.5. Respecto al Lmite Superior Normal ............................................................................. 160 AII.4.6. Respecto al Lmite Superior Extremo ........................................................................... 161 AII.4.7. Box-Plot ........................................................................................................................ 161

ndice de Contenidos
AII.5. CUARTILES Y OUTLIERS PARA EXECUTION RELATIONS - INSIDE LAST ...................................................... 161 AII.5.1. Respecto a la Media ..................................................................................................... 161 AII.5.2. Respecto al Cuartil 1 .................................................................................................... 162 AII.5.3. Respecto al Cuartil 2 .................................................................................................... 163 AII.5.4. Respecto al Cuartil 3 .................................................................................................... 163 AII.5.5. Respecto al Lmite Superior Normal ............................................................................. 164 AII.5.6. Respecto al Lmite Superior Extremo ........................................................................... 165 AII.5.7. Box-Plot ........................................................................................................................ 165 AII.6. CUARTILES Y OUTLIERS PARA FAN-IN ANALYSIS ................................................................................ 165 AII.6.1. Respecto a la Media ..................................................................................................... 165 AII.6.2. Respecto al Cuartil 1 .................................................................................................... 166 AII.6.3. Respecto al Cuartil 2 .................................................................................................... 167 AII.6.4. Respecto al Cuartil 3 .................................................................................................... 167 AII.6.5. Respecto al Lmite Superior Normal ............................................................................. 168 AII.6.6. Respecto al Lmite Superior Extremo ........................................................................... 169 AII.6.7. Box-Plot ........................................................................................................................ 169 ANEXO III .................................................................................................................................................. 170 MTRICAS DEL CASO DE ESTUDIO ............................................................................................................ 170 AIII.1. CROSSCUTTING CONCERN LOGGING ............................................................................................... 170 AIII.1.1. Mtricas para las Seeds en GridGain v1.5.0 ................................................................ 170 AIII.1.2. Mtricas para las Seeds en GridGain v1.6.0 ................................................................ 171 AIII.1.3. Mtricas para las Seeds en GridGain v2.0.0 ................................................................ 172 AIII.1.4. Mtricas para las Seeds en GridGain v2.0.2 ................................................................ 173 AIII.1.5. Mtricas para las Seeds en GridGain v2.1.0 ................................................................ 174 AIII.1.6. Mtricas para las Seeds en GridGain v2.1.1 ................................................................ 175 AIII.2. CROSSCUTTING CONCERN DATA VALIDATION................................................................................... 176 AIII.2.1. Mtricas para las Seeds en GridGain v1.5.0 ................................................................ 176 AIII.2.2. Mtricas para las Seeds en GridGain v1.6.0 ................................................................ 176 AIII.2.3. Mtricas para las Seeds en GridGain v2.0.0 ................................................................ 177 AIII.2.4. Mtricas para las Seeds en GridGain v2.0.2 ................................................................ 177 AIII.2.5. Mtricas para las Seeds en GridGain v2.1.0 ................................................................ 177 AIII.2.6. Mtricas para las Seeds en GridGain v2.1.1 ................................................................ 177 AIII.3. CROSSCUTTING CONCERN SYNCHRONIZATION .................................................................................. 177 AIII.3.1. Mtricas para las Seeds en GridGain v1.5.0 ................................................................ 177 AIII.3.2. Mtricas para las Seeds en GridGain v1.6.0 ................................................................ 178 AIII.3.3. Mtricas para las Seeds en GridGain v2.0.0 ................................................................ 178 AIII.3.4. Mtricas para las Seeds en GridGain v2.0.2 ................................................................ 179 AIII.3.5. Mtricas para las Seeds en GridGain v2.1.0 ................................................................ 180 AIII.3.6. Mtricas para las Seeds en GridGain v2.1.1 ................................................................ 180 CAPTULO 8 ............................................................................................................................................... 182 BIBLIOGRAFA ........................................................................................................................................... 182 VIII.1. BIBLIOGRAFA ............................................................................................................................ 182

ndice de Figuras
FIGURA I.1 - CLASIFICACIN DE SEEDS POR TCNICA. ............................................................................... 13 FIGURA I.2 - PORCENTAJE DE SEEDS CONFIRMADAS O NO, RESPECTO A UN VALOR DE REFERENCIA. ..... 15 FIGURA I.3 - PORCENTAJE DE SEEDS CONFIRMADAS O NO, RESPECTO A UN VALOR OUTLIER DE REFERENCIA. ............................................................................................................................................... 15 FIGURA II.1 - DESCOMPOSICIN DE UN CONJUNTO DE REQUERIMIENTOS Y SEPARACIN DE LOS MISMOS EN CONCERNS.............................................................................................................................. 19 FIGURA II.2 - DEFINICIN DE ASPECTJ PARA EL CONCERN DE TRAZABILIDAD. .......................................... 23 FIGURA II.3 - MIGRACIN DE UN SISTEMA LEGADO EN UNO ORIENTADO A ASPECTOS [2]...................... 25 FIGURA III.1 - IMPLEMENTACIN DEL CONCERN DE LOGGING. ................................................................. 29 FIGURA III.2 - TRAZA DE EJEMPLO. ............................................................................................................. 36 FIGURA IV.1 - EJEMPLO DE FUNCIONAMIENTO MAP/REDUCE. ................................................................. 45 FIGURA IV.2 - PRESENTACIN DE LOS RESULTADOS ARROJADOS POR LA HERRAMIENTA AME. .............. 48 FIGURA IV.3 - FRAGMENTO DE UNA TABLA CON LOS SOMBREADOS INDICADOS ANTERIORMENTE. ...... 48 FIGURA IV.4 - CANTIDAD DE SEEDS CANDIDATAS DETECTADAS POR CADA TCNICA. .............................. 49 FIGURA IV.5 - CLASIFICACIN DE SEEDS POR TCNICA. ............................................................................. 50 FIGURA IV.6 - PORCENTAJE DE SEEDS CONFIRMADAS DE ACUERDO A LA CANTIDAD DE TCNICAS QUE LAS CLASIFICARON...................................................................................................................................... 51 FIGURA IV.7 - PORCENTAJE DE FALSOS POSITIVOS DE ACUERDO A LA CANTIDAD DE TCNICAS QUE LOS CLASIFICARON. ........................................................................................................................................... 52 FIGURA IV.8 - EJEMPLOS DE PRECISIN Y RECALL...................................................................................... 56 FIGURA IV.9 - UNIN DE CONJUNTOS. ....................................................................................................... 58 FIGURA IV.10 - INTERSECCIN DE CONJUNTOS. ........................................................................................ 58 FIGURA IV.11 - DIFERENCIA DE CONJUNTOS. ............................................................................................. 58 FIGURA IV.12 - DIFERENCIA SIMTRICA DE CONJUNTOS. .......................................................................... 59 FIGURA IV.13 - PRECISIN DE CADA TCNICA Y SUS COMBINACIONES. .................................................... 62 FIGURA IV.14 - RECALL DE CADA TCNICA Y SUS COMBINACIONES. ......................................................... 62 FIGURA IV.15 - F1-SCORE DE CADA TCNICA Y SUS COMBINACIONES. ..................................................... 63 FIGURA IV.16 - TOTAL DE SEEDS EN EL CONJUNTO MUESTREADO. ........................................................... 64 FIGURA V.1 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO A LA MEDIA. .................................... 71 FIGURA V.2 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO AL CUARTIL 1. .................................. 72 FIGURA V.3 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO AL CUARTIL 2. .................................. 73 FIGURA V.4 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO AL CUARTIL 3. .................................. 74 FIGURA V.5 - PORCENTAJE DE SEEDS CONFIRMADAS O NO, RESPECTO A UN VALOR DE REFERENCIA..... 75 FIGURA V.6 - EJEMPLO DE UN BOXPLOT. .................................................................................................. 76 FIGURA V.7 - BOXPLOT PARA FAN-IN ANALYSIS. ........................................................................................ 79 FIGURA V.8 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL. ....... 80 FIGURA V.9 - REPRESENTACIN DEL ANLISIS DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO. ..... 81 FIGURA V.10 - PORCENTAJE DE SEEDS CONFIRMADAS O NO, RESPECTO A UN VALOR OUTLIER DE REFERENCIA. ............................................................................................................................................... 82 FIGURA VI.1 - TENDENCIA DEL CCC DE LOGGING. ...................................................................................... 90 FIGURA VI.2 - TENDENCIA DEL CCC DE DATA VALIDATION. ....................................................................... 92 FIGURA VI.3 - TENDENCIA DEL CCC SYNCHRONIZATION. ........................................................................... 95 FIGURA VI.4 - MTRICA NCSS DEL CCC SYNCHRONIZATION. ...................................................................... 96 FIGURA VI.5 - MTRICA CC DEL CCC DE SYNCHRONIZATION. .................................................................... 97 FIGURA AII.1 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 146 FIGURA AII.2 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 146 FIGURA AII.3 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ......................................................... 147 FIGURA AII.4 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 148 FIGURA AII.5 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 148 FIGURA AII.6 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 149 FIGURA AII.7 - BOX-PLOT PARA UNIQUE METHOD. ................................................................................. 149 FIGURA AII.8 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 150 FIGURA AII.9 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 150

ndice de Figuras
FIGURA AII.10 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ....................................................... 151 FIGURA AII.11 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ....................................................... 152 FIGURA AII.12 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............. 152 FIGURA AII.13 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............. 153 FIGURA AII.14 - BOX-PLOT PARA EXECUTION RELATIONS - OUTSIDE BEFORE. ........................................ 153 FIGURA AII.15 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ......................................................... 154 FIGURA AII.16 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ....................................................... 154 FIGURA AII.17 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ....................................................... 155 FIGURA AII.18 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ....................................................... 156 FIGURA AII.19 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............. 156 FIGURA AII.20 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............. 157 FIGURA AII.21 - BOX-PLOT PARA EXECUTION RELATIONS - OUTSIDE AFTER. .......................................... 157 FIGURA AII.22 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ......................................................... 158 FIGURA AII.23 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ....................................................... 158 FIGURA AII.24 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ....................................................... 159 FIGURA AII.25 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ....................................................... 160 FIGURA AII.26 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............. 160 FIGURA AII.27 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............. 161 FIGURA AII.28 - BOX-PLOT PARA EXECUTION RELATIONS - INSIDE FIRST. ............................................... 161 FIGURA AII.29 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ......................................................... 162 FIGURA AII.30 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ....................................................... 162 FIGURA AII.31 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ....................................................... 163 FIGURA AII.32 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ....................................................... 164 FIGURA AII.33 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............. 164 FIGURA AII.34 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............. 165 FIGURA AII.35 - BOX-PLOT PARA EXECUTION RELATIONS - INSIDE LAST. ................................................ 165 FIGURA AII.36 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ......................................................... 166 FIGURA AII.37 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ....................................................... 166 FIGURA AII.38 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ....................................................... 167 FIGURA AII.39 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ....................................................... 168 FIGURA AII.40 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............. 168 FIGURA AII.41 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............. 169 FIGURA AII.42 - BOX-PLOT PARA EXECUTION RELATIONS - FAN-IN ANALYSIS. ........................................ 169

ndice de Tablas
TABLA III.1 - MTODOS NICOS ENCONTRADOS EN EL EXPERIMENTO. .................................................... 30 TABLA III.2 - CLASES, SIGNATURAS Y NMERO DE INVOCACIONES DE LOS ASPECTOS IDENTIFICADOS. .. 31 TABLA III.3 - RESULTADOS DEL ENFOQUE APLICADO A JHOTDRAW. ......................................................... 34 TABLA III.4 - RESULTADOS DE RELACIONES INSIDE-FIRST-EXECUTION. ..................................................... 37 TABLA III.5 - RESULTADOS DE RELACIONES OUTSIDE-BEFORE-EXECUTION. .............................................. 38 TABLA III.6 - TCNICAS A COMPARAR......................................................................................................... 39 TABLA III.7 - TIPO DE DATOS DE ENTRADA Y TIPO DE ANLISIS UTILIZADO............................................... 39 TABLA III.8 - GRANULARIDAD Y SNTOMAS. ............................................................................................... 40 TABLA III.9 - PARTICIPACIN DEL USUARIO. .............................................................................................. 40 TABLA IV.1 - CLASIFICACIN DE SEEDS POR TCNICAS. ............................................................................. 50 TABLA IV.2 - CLASIFICACIN DE SEEDS POR CANTIDAD DE TCNICAS. ...................................................... 51 TABLA IV.3 - CLASIFICACIN DE FALSOS POSITIVOS POR CANTIDAD DE TCNICAS. .................................. 52 TABLA IV.4 - RESUMEN DE RESULTADOS DE LA CLASIFICACIN DE SEEDS. ............................................... 54 TABLA IV.5 - CLCULO DE PRECISIN Y RECALL. ........................................................................................ 60 TABLA IV.6 - CLCULO DE F1-SCORE. ......................................................................................................... 61 TABLA IV.7 - CLASIFICACIN DE COMBINACIONES DE TCNICAS. ............................................................. 65 TABLA V.1 - VALORES OBTENIDOS PARA LAS MEDIDAS DE CENTRALIZACIN........................................... 70 TABLA V.2 - ANLISIS DE SEEDS RESPECTO A LA MEDIA. ........................................................................... 71 TABLA V.3 - ANLISIS DE SEEDS RESPECTO AL CUARTIL 1. ......................................................................... 72 TABLA V.4 - ANLISIS DE SEEDS RESPECTO AL CUARTIL 2. ......................................................................... 72 TABLA V.5 - ANLISIS DE SEEDS RESPECTO AL CUARTIL 3. ......................................................................... 73 TABLA V.6 - COMPARACIN DE LA REGLA 1,5 * IQR. ................................................................................. 77 TABLA V.7 - COMPARACIN DE LA REGLA 3 * IQR. .................................................................................... 78 TABLA V.8 - LMITES DE LOS OUTLIERS INFERIORES Y SUPERIORES PARA CADA TCNICA. ....................... 79 TABLA V.9 - CANTIDAD DE OUTLIERS POR TIPO Y POR TCNICA. ............................................................... 79 TABLA V.10 - ANLISIS DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL. ............................................ 80 TABLA V.11 - ANLISIS DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO. .......................................... 81 TABLA VI.1 - FAN-IN PARA LAS SEEDS DEL CCC DE LOGGING. .................................................................... 89 TABLA VI.2 - MTRICAS DEL CCC DE LOGGING. .......................................................................................... 91 TABLA VI.3 - FAN-IN PARA LAS SEEDS DEL CCC DATA VALIDATION. .......................................................... 91 TABLA VI.4 - MTRICAS DEL CCC DE DATA VALIDATION. ........................................................................... 93 TABLA VI.5 - FAN-IN PARA LAS SEEDS DEL CC SYNCHRONIZATION. ........................................................... 94 TABLA VI.6 - MTRICAS DEL CCC SYNCHRONIZATION. ............................................................................... 96 TABLA AI.1 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON UNIQUE METHODS EN LAS 6 VERSIONES DE GRIDGAIN. ........................................................................................................................ 104 TABLA AI.2 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON EXECUTION RELATIONS - OUTSIDE BEFORE EN LAS 6 VERSIONES DE GRIDGAIN. ........................................................................................... 112 TABLA AI.3 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON EXECUTION RELATIONS - OUTSIDE AFTER EN LAS 6 VERSIONES DE GRIDGAIN. .............................................................................................. 118 TABLA AI.4 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON EXECUTION RELATIONS - INSIDE FIRST EN LAS 6 VERSIONES DE GRIDGAIN. ......................................................................................................... 122 TABLA AI.5 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON EXECUTION RELATIONS - INSIDE LAST EN LAS 6 VERSIONES DE GRIDGAIN. ......................................................................................................... 126 TABLA AI.6 - VALOR DE FAN-IN PARA LAS SEEDS DETECTADAS CON FAN-IN ANALYSIS EN LAS 6 VERSIONES DE GRIDGAIN. ........................................................................................................................ 133 TABLA AII.1 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ............................................................. 146 TABLA AII.2 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ........................................................... 146 TABLA AII.3 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ........................................................... 147 TABLA AII.4 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ........................................................... 147 TABLA AII.5 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ................. 148 TABLA AII.6 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER................. 149 TABLA AII.7 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ............................................................. 150 TABLA AII.8 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ........................................................... 150

ndice de Tablas
TABLA AII.9 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ........................................................... 151 TABLA AII.10 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 151 TABLA AII.11 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 152 TABLA AII.12 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 153 TABLA AII.13 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 154 TABLA AII.14 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 154 TABLA AII.15 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ......................................................... 155 TABLA AII.16 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 155 TABLA AII.17 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 156 TABLA AII.18 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 157 TABLA AII.19 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 158 TABLA AII.20 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 158 TABLA AII.21 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ......................................................... 159 TABLA AII.22 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 159 TABLA AII.23 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 160 TABLA AII.24 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 161 TABLA AII.25 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 162 TABLA AII.26 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 162 TABLA AII.27 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ......................................................... 163 TABLA AII.28 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 163 TABLA AII.29 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 164 TABLA AII.30 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 165 TABLA AII.31 - CLASIFICACIN DE SEEDS RESPECTO A LA MEDIA. ........................................................... 166 TABLA AII.32 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 1. ......................................................... 166 TABLA AII.33 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 2. ......................................................... 167 TABLA AII.34 - CLASIFICACIN DE SEEDS RESPECTO AL CUARTIL 3. ......................................................... 167 TABLA AII.35 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR NORMAL OUTLIER. ............... 168 TABLA AII.36 - CLASIFICACIN DE SEEDS RESPECTO AL LMITE SUPERIOR EXTREMO OUTLIER............... 169

Agradecimientos

A mis viejos, mi hermano, mi novia y mis amigos. A Claudia y Esteban por el apoyo constante. A los que ya no estn y todos los que de una u otra forma me han sabido acompaar todos estos aos. Sebastian Bisbal.

A mi familia, mi novia y mis amigos. A todas aquellas personas que me alentaron y formaron parte de esta aventura. A mis directores, Claudia Marcos y Esteban Abait. Sin todos ustedes no hubiera sido posible Juan Pablo Cassano

Captulo 1 Introduccin

I.1.

Mantenimiento de Sistemas de Software

Los sistemas de software actuales se encuentran en constante evolucin. Esto se debe a la necesidad de no quedar obsoletos ante las caractersticas que los clientes desean que el mismo posea. Estas modificaciones producen que diferentes mdulos del sistema se vayan transformando, haciendo que sus comportamientos difieran del objetivo inicial para el cual fueron creados debido a la necesidad de adaptarse rpidamente a los cambios. Los problemas surgen cuando la funcionalidad que requiere ser modificada no se encuentra debidamente centralizada en un nico componente, y para cumplir con el nuevo requerimiento se deben realizar modificaciones en varios componentes del sistema. Estos requerimientos cuya funcionalidad es transversal a varios mdulos, se denominan crosscutting concerns [7]. Ejemplos tpicos de crosscutting concerns incluyen caching de datos, sincronizacin de mtodos o funciones, persistencia de datos, entre otros. El principal problema que producen los crosscutting concerns, es que cada modificacin en alguna funcionalidad ocasiona un gran costo para llevar a cabo el cambio requerido [7]. Esta situacin hace que se genere cdigo scattering y tangling (cdigo disperso y/o enredado) [9] impactando en el diseo y en el desarrollo del software de muchas maneras: pobre trazabilidad, menor productividad, menor reutilizacin de cdigo, mala calidad y difcil evolucin. La programacin orientada a aspectos (POA) [10], ofrece mecanismos de programacin para tratar los crosscutting concerns que pueden ser modularizados de manera similar a las unidades de la descomposicin principal. En lugar de distribuir el cdigo que implementa un crosscutting concern a travs de las clases de un sistema, es posible abstraer el comportamiento en una nica unidad de programacin denominada aspecto [1]. El beneficio que presenta la POA, es un mayor grado de modularizacin y reutilizacin de componentes que ayudan en la reduccin de tiempos y costos de desarrollo, como

10

Introduccin
as tambin mejoran la flexibilidad, el mantenimiento, la productividad y la calidad del software [7]. Para aprovechar los beneficios que provee la POA en sistemas existentes, es necesario migrar dichos sistemas hacia su equivalente orientado a aspectos y restructurarlos de manera continua. Sin embargo, aplicar manualmente tcnicas orientadas a aspectos a un sistema legado es un proceso difcil y tendiente al error [2], por lo que para este proceso se aplican tcnicas de Aspect Mining y Aspect Refactoring [11]. Aspect mining es la actividad de descubrir desde el cdigo fuente o las trazas de ejecucin de una aplicacin, aquellos crosscutting concerns que podran ser encapsulados como aspectos del nuevo sistema. Aspect refactoring es la actividad de transformar los aspectos candidatos identificados en el cdigo orientado a objetos en aspectos reales en el cdigo fuente. Debido al gran tamao de estos sistemas, a la complejidad de su implementacin, a la falta de documentacin y al conocimiento sobre el mismo, es que existe la necesidad de contar con herramientas y tcnicas que ayuden a los desarrolladores a localizar y documentar los crosscutting concerns presentes en esos sistemas. Ejemplos de tcnicas de Aspect Mining son: Unique Method [3], Fan-In Analysis [4] y Execution Relations [25] entre otras.

I.2.

Tcnicas de Aspect Mining

Aspect mining busca crosscutting concerns en cdigo no orientado a aspectos. Estos concerns, posiblemente, podrn ser mejorados mediante la aplicacin de soluciones orientadas a aspectos, o ser documentados con el propsito de facilitar la comprensin de los programas. Aspect mining implica la bsqueda de elementos de cdigo fuente que pertenecen a la implementacin de un crosscutting concern, o que forman parte de la extensin de un concern. Los elementos de cdigo se referencian como seeds (semillas) [20]. Existe una variedad de tcnicas con diferentes caractersticas que identifican crosscutting concerns. Mientras que algunas tcnicas descubren aspectos a nivel de mtodos, otras trabajan a una granularidad ms fina, considerando las sentencias individuales o fragmentos de cdigo como parte de los aspectos candidatos. Tambin se diferencian entre las que buscan cdigo tangled (mezclado) y las que buscan cdigo scattered (disperso). Algunas de las tcnicas existentes para dar soporte a aspect mining, se basan en heursticas para encontrar cdigo duplicado disperso (scattered) y otras buscan seeds que se implementan como un nico mtodo que se llama desde un nmero generalizado de lugares, identificando cdigo tangled.

11

Introduccin
Otro criterio importante es el tipo de anlisis que realizan, ya sea esttico o dinmico. En el primero de ellos, el anlisis se hace en base a los datos de entrada del cdigo, mientras que el anlisis dinmico se realiza a partir de la ejecucin del mismo, obteniendo trazas del programa que posteriormente sern evaluadas para encontrar patrones de ejecucin peridica. A pesar que las tcnicas de aspect mining descubren crosscutting concerns que potencialmente podran convertirse en aspectos [6], existen algunos problemas que no han sido tratados con profundidad: La decisin sobre qu es un crosscutting concern depende del desarrollador encargado de evaluar los resultados (seeds) de la tcnica aplicada al sistema legado. Cuanto ms grande es la cantidad de resultados arrojados por la tcnica, ya sea por la magnitud del sistema o por la baja calidad de su diseo, ms costosa es la tarea del desarrollador para evaluar dichos resultados en la bsqueda de crosscutting concerns. Cada tcnica de aspect mining realiza la bsqueda de seeds candidatas en base a diferentes caractersticas del sistema. Unique Methods [3] identifica crosscutting concerns buscando en mtodos nicos, mtodos sin valor de retorno que implementan un mensaje que no es implementado por ningn otro mtodo; Fan-In Analysis [4], identifica crosscutting concerns midiendo el nivel de dispersin del cdigo (scattering); por ltimo, Execution Relations [25] es un enfoque dinmico para el anlisis de aspectos basado en las trazas de ejecucin. Por lo que los resultados obtenidos con una tcnica pueden diferir considerablemente de los obtenidos con otra. El desarrollador encargado del estudio de los resultados no puede valerse de estrategias que permitan definir si un resultado corresponde a un crosscutting concern o no. Por lo tanto, no hay una respuesta afirmativa o negativa a la pregunta de si un concern identificado es adecuado para llevarlo a una refactorizacin orientada a aspectos, esta decisin queda sujeta al criterio subjetivo del evaluador. Esta medida debe tomarse para cada seed reportada por la tcnica, lo que lleva a un considerable consumo de tiempo para la realizacin de dicha tarea. Por otra parte hay un gran dficit de benchmarks que permitan observar los crosscutting concerns existentes sobre sistemas en produccin (solo se puede nombrar a HSQL, como uno de ellos), en cambio, existen algunos ya realizados para aplicaciones acadmicas (por ejemplo sobre JHotdraw [12], HealthWatcher [13]).

12

Introduccin

I.3.

Anlisis de Tcnicas de Aspect Mining en un Sistema de Produccin

Existen numerosos trabajos donde diferentes tcnicas de aspect mining se utilizan en un caso de estudio y se evalan sus resultados, pero en general estos corresponden a aplicaciones acadmicas (como por ejemplo JHotdraw [12]) las cuales no representan una gran complejidad por ser casos de estudio pequeos y con buenos diseos. Es por esta razn que el presente trabajo consiste en la bsqueda de crosscutting concerns en un sistema de software en produccin. Para esto se eligi un sistema open source, desarrollado en Java, de gran uso en el mercado, con un crecimiento importante debido a sus prestaciones a los usuarios y siendo muy utilizado en el campo del grid computing, llamado GridGain [8]. Con el objetivo de estudiar y comparar varias tcnicas de aspect mining, cada una con caractersticas particulares, y poder estudiar las transformaciones que un concern puede sufrir en su cdigo durante el tiempo de vida de un sistema, se tomaron seis versiones consecutivas del cdigo fuente del sistema GridGain sobre las cuales se aplicaron un conjunto de seis tcnicas de aspect mining. Este estudio consisti en el anlisis de los resultados de las tcnicas de forma cualitativa, clasificacin de las seeds encontradas y comparacin de los resultados de las tcnicas que identifican el mismo tipo de crosscutting concerns (crosscutting concern sorts). Adems, sobre la distribucin de las seeds resultantes se realiz un estudio estadstico, para determinar cmo se agrupan y as saber si es posible introducir mejoras a las tcnicas que permitan obtener resultados de mayor calidad (reduciendo la cantidad de falsos positivos).

Figura I.1 - Clasificacin de Seeds por tcnica.

13

Introduccin
Conjuntamente, se analizaron los problemas que fueron surgiendo durante todo el proceso para recabar beneficios y dificultades con los que un desarrollador se puede encontrar a la hora de migrar un sistema existente al paradigma orientado a aspectos. En cuanto a los estudios realizados, primero se aplicaron tres tcnicas de aspect mining como Unique Methods, Fan-In Analysis y Execution Relations (en sus cuatro variantes) al cdigo bajo anlisis en seis releases del mismo, las seeds resultantes fueron analizadas manualmente de forma individual para confirmarlas o clasificarlas como falsos positivos. En la Figura I.1 se brinda una visin de los resultados obtenidos sobre las 276 seeds presentes en el sistema. La figura muestra cuntas fueron identificadas por cada tcnica y a su vez cuntas de stas fueron clasificadas como seeds confirmadas o falsos positivos. Con los valores obtenidos se realizaron los siguientes anlisis: o Se catalog cada seed en uno de los cuatro tipos bsicos de crosscutting concern sort (Redirection Layer, Contract Enforcement, Consistent Behavior y Role Superimposition) con el fin de dar una definicin atmica de la funcionalidad de cada seed y ver cuntas de cada tipo se encuentran en el sistema. Las tcnicas de aspect mining utilizadas en este trabajo identifican seeds del tipo Consistent Behavior y Contract Enforcement, sin embargo en el estudio se pudo determinar que varias seeds resultantes se clasificaron como Role Superimposition o Redirection Layer. o Se realiz una comparacin de los resultados de cada tcnica. Encontrando que Fan-In Analysis fue la tcnica que ms seeds detect debido a su simple criterio de bsqueda. Siendo a la vez la tcnica que ms seeds confirmadas tuvo, como tambin la que ms falsos positivos detect. o Se hizo un estudio de combinaciones de tcnicas aplicando Unin [41], Interseccin [42], Diferencia [43] y Diferencia Simtrica [44], aplicando mtricas de precisin y recall para evaluar la mejor composicin de tcnicas que ayude a obtener los mejores resultados de aspect mining. Del anlisis realizado, Unique Method Fan-In Analysis fue la combinacin con precisin optima ya que confirm el 100% de las seeds que detect, aunque su recall fue de slo el 12,1%. Tambin se concluy que para detectar todas las seeds confirmadas en el sistema, la combinacin ideal fue Unique Method Execution Relations Fan-In Analysis ya que detect todas las seeds confirmadas de la aplicacin (recall optimo), pero para esto tuvo que analizar la totalidad de las mismas

14

Introduccin
(incluyendo los falsos positivos), causando que la precisin se vea disminuida al 62,7%.

Figura I.2 - Porcentaje de seeds confirmadas o no, respecto a un valor de referencia.

Siguiendo con el objetivo de mejorar los resultados arrojados por las tcnicas de aspect mining, se realiz un anlisis cualitativo de los valores encontrados, aplicando anlisis estadsticos de medidas de centralizacin y outliers. o Se estudi la distribucin de las seeds respecto a su valor de fan-in de acuerdo a distintas medidas aritmticas de referencia como los cuartiles, cuyo resumen de resultados puede verse en la Figura I.2. El estudio demostr que para el caso de estudio las seeds que se encuentran por encima de las medidas de referencia ms altas son las que engloban un conjunto de seeds con mayores probabilidades de ser confirmadas.

Figura I.3 - Porcentaje de seeds confirmadas o no, respecto a un valor outlier de referencia.

15

Introduccin

o El anlisis de outliers como puede verse en la figura I.3 permiti validar tambin que la mayora de las seeds que alcanzan a la definicin de outliers superiores son seeds confirmadas que pueden pertenecer a un crosscutting concern. Por ltimo, a partir de las seeds reportadas por las tcnicas, se identificaron los crosscutting concerns en el cdigo y se tomaron tres de ellos (Logging, Data Validation Synchronization) como caso de estudio, los cuales fueron analizados durante seis versiones del cdigo para estudiar su evolucin de la siguiente forma:

o Se analiz la tendencia del Fan-in promedio de las seeds pertenecientes a cada crosscutting concern calculando la mtrica para las seis versiones del cdigo. Con ste estudio se puede ver la cantidad de llamados a los mtodos del concern y as ver su evolucin. Para los tres crosscutting concern se pudo observar que la tendencia de los mismos fue en aumento en el tiempo, aunque ms marcado en el de Logging y Data Validation. o Se realiz una medicin analtica de la complejidad que los crosscutting concerns pudieron sufrir en el transcurso de las seis versiones de GridGain. Para esto se aplicaron mtricas sobre las seeds afectadas como CC (Ciclomatic Complexity), NCSS (Non Commenting Source Statements), NLS (Number of Locals in Scope) y NOL (Number of Levels). El estudio expuso que el crosscutting concern de Synchronization fue el nico de los tres que present variaciones en los valores de las mtricas demostrando que el cdigo involucrado se fue volviendo ms complejo con el transcurso de las versiones.

I.4.

Organizacin del Documento

Este trabajo est organizado de la siguiente manera: En el captulo 2, se introduce al desarrollo de software orientado a aspectos, comenzando con una descripcin de la evolucin del desarrollo de software, siguiendo con los conceptos principales y lenguajes ms utilizados. En el captulo 3, se presentan y explican las tcnicas de aspect mining de inters para este trabajo.

16

Introduccin
En el captulo 4, se exhibe el anlisis de los resultados de las tcnicas de forma cualitativa, clasificacin de las seeds encontradas, y comparacin de los resultados de las tcnicas. En el captulo 5, se estudia la distribucin de las seeds resultantes, realizando dos estudios: el primero, sobre medidas de centralizacin y en el segundo, se estudiaron los valores extremos utilizando outliers. En el captulo 6, se realiza un estudio analtico aplicado a tres crosscutting concerns evaluando la evolucin de los mismos en el tiempo. Por ltimo, en el captulo 7 se muestra la conclusin y los trabajos futuros obtenidos del desarrollo del proyecto

Adicionalmente, se ofrece una serie de anexos que contienen todos los clculos y tablas utilizadas en el desarrollo del estudio, los mismos se organizan de la siguiente manera: En el Anexo I, se presenta la clasificacin de las seeds detectadas con la herramienta AME para cada tcnica en las diferentes versiones de GridGain. En el Anexo II, se presentan las tablas y grficos de Cuartiles, Outliers y BoxPlots. En el Anexo III, se presentan los valores arrojados por las mtricas de CC (Ciclomatic Complexity), LOCm (Line of Code in Methods), NLS (Number Of Locals in Scope) y NOL (Number of Levels) por crosscutting concern.

17

Captulo 2 Introduccin al Desarrollo de Software Orientado a Aspectos

En el presente captulo se brindar una introduccin al desarrollo de software orientado a aspectos comenzando con una descripcin de la evolucin del desarrollo de software, siguiendo con los conceptos principales del paradigma orientado a aspectos y los lenguajes ms utilizados para este paradigma, al final del captulo se brindar una introduccin del concepto de aspect mining.

II.1.

Evolucin del Desarrollo de Software

El desarrollo de software ha evolucionado desde sus comienzos. Al principio, los sistemas se desarrollaban utilizando lenguajes que no permitan una clara separacin de conceptos; datos y comportamiento se mezclaban sin una lnea que los dividiera claramente [14]. A medida que la ingeniera de software fue creciendo, se fueron introduciendo conceptos que llevaron a una programacin de ms alto nivel: la nocin de tipos, bloques estructurados, unidades, mdulos, tipos de datos abstractos, herencia, etc. [14]. Como se puede observar, los progresos ms importantes se han obtenido aplicando tres conceptos, los cuales estn estrechamente relacionados entre s: abstraccin, encapsulamiento, y modularidad. La abstraccin permite administrar la complejidad, por medio de la concentracin en las caractersticas esenciales de una entidad, que la distinguen de cualquier otra clase de entidades. El segundo concepto, llamado encapsulamiento, permite la ubicacin fsica de caractersticas (por ejemplo, propiedades y comportamientos) en una sencilla abstraccin de caja negra que oculta su implementacin detrs de una interface pblica. El ltimo concepto, llamado modularidad, consiste en la nocin de descomponer un sistema complejo en subsistemas ms fciles de manejar, siguiendo la antigua tcnica de divide y conquista.

18

Introduccin al Desarrollo de Software Orientado a Aspectos


La Programacin Orientada a Objetos (POO), favorece el encapsulamiento y la abstraccin, a travs de una entidad llamada Clase que captura tanto funcionalidad como comportamiento y estructura interna. Ya sea a travs de la POO o con otras tcnicas de abstraccin de alto nivel (como por ejemplo, programacin estructural, modular o declarativa), se logra un diseo y una implementacin que satisface la funcionalidad bsica, y con una calidad aceptable. Sin embargo, existen crosscutting concerns que no pueden encapsularse dentro de una unidad funcional, debido a que atraviesan todo el sistema, o varias partes de l. Algunos de estos conceptos son: sincronizacin, manejo de memoria, distribucin, chequeo de errores, seguridad o redes, entre otros [14].

II.2.

Separacin de Concerns

Un concern es un requisito especfico o consideracin que debe ser abordado con el fin de satisfacer el objetivo general del sistema [7]. Un sistema de software es la realizacin de un conjunto de concerns. Un sistema bancario, por ejemplo, es una realizacin de los siguientes concerns: gestin de clientes y cuenta, clculo de intereses, transacciones interbancarias, transacciones en cajeros automticos, la persistencia de todas las entidades, la autorizacin de acceso a diversos servicios, la generacin de declaraciones, la atencin al cliente, y as sucesivamente. Adems de los concerns del sistema, un proyecto de software necesita abordar los problemas del proceso, tales como comprensin, facilidad de mantenimiento, trazabilidad, y facilidad de evolucin.

Figura II.1 - Descomposicin de un conjunto de requerimientos y separacin de los mismos en concerns.

19

Introduccin al Desarrollo de Software Orientado a Aspectos


Es posible clasificar los concerns en dos categoras principales: concerns de la funcionalidad central, y los crosscutting concerns a nivel de sistema (los requisitos que cruzan varios mdulos). Una aplicacin tpica de una empresa puede necesitar abordar crosscutting concerns, como la autenticacin, registro, puesta en comn de recursos, administracin, funcionamiento, gestin del almacenamiento, la persistencia de datos, la seguridad, la seguridad multi-hilo, integridad de la transaccin, la comprobacin de errores, y aplicacin de polticas, por nombrar slo algunos. Todos estos concerns atraviesan varios subsistemas y deben ser tratados [7]. Al identificar el ncleo y crosscutting concerns de un sistema, es posible centrarse en cada concern por separado y reducir la complejidad general del diseo e implementacin. Para hacer esto, el primer paso consiste en descomponer el conjunto de requerimientos y separarlos en concerns. La Figura II.1 [7] utiliza la analoga de un haz de luz que pasa a travs de un prisma para ilustrar el proceso de descomposicin de los requisitos en un conjunto de concerns. Se enva un haz de luz de las necesidades a travs de un prisma identificador de concerns y en la salida se obtienen los concerns desglosados. Si bien cada requisito inicialmente parece ser una sola unidad, mediante la aplicacin del proceso de identificacin concerns, se pueden separar los requerimientos centrales y los crosscutting concerns que sean necesarios para cumplir los requisitos del cliente [16].

II.3.

Introduccin a la Programacin Orientada a Aspectos

Debido a que los lenguajes de programacin actuales carecen de mecanismos para encapsular conceptos que no forman parte de la funcionalidad bsica de los sistemas, tales como sincronizacin, distribucin, seguridad, administracin de memoria, y otros. Se produce una notable disminucin de la calidad del software final. Una de las alternativas para resolver este problema es la Programacin Orientada a Aspectos (POA) [10]. La POA es un paradigma que brinda un mayor grado de abstraccin en el desarrollo de software, permitiendo realizar una mejor separacin de concerns [18]. Corresponde aclarar que este paradigma no trata de sustituir a otros, sino que trata de complementarlos [17]. El objetivo es aumentar la modularizacin de determinados elementos que con otros paradigmas sera difcil o imposible de realizar [16]. Los problemas bsicos que intenta solucionar son [17]: Tangled Code (Cdigo Mezclado): Este problema aparece cuando el cdigo que implementa la lgica de negocio concreta de un mdulo se mezcla con cdigo para satisfacer algn crosscutting concern.

20

Introduccin al Desarrollo de Software Orientado a Aspectos

Scattered Code (Cdigo Disperso): Aparece cuando la implementacin de un concern afecta a muchos mdulos diferentes. La POA tiene como objetivo incrementar la compresibilidad, adaptabilidad y reusabilidad de componentes mediante la introduccin de una nueva unidad modular, llamada aspecto, para la especificacin de crosscutting concerns o comportamientos transversales. De esta forma, el cdigo relacionado a requerimientos no funcionales y transversales se especifica en forma separada y aislada, evitando que se mezcle y duplique por las restantes unidades de mdulos funcionales. La idea central de la POA es permitir que un programa sea construido describiendo cada concepto (o concern) separadamente [18].

II.4.

Conceptos de la POA

Un aspecto se define como un concern que no es posible encapsularlo claramente, y que se encuentra diseminado por todo el cdigo. Los aspectos son la unidad bsica de la programacin orientada a aspectos. Una definicin ms formal pertenece al creador de la POA, Gregor Kiczales, y es con la que se trabaja actualmente: Un aspecto es una unidad modular que se disemina por la estructura de otras unidades funcionales. Los aspectos existen tanto en la etapa de diseo como en la de implementacin. Un aspecto de diseo es una unidad modular del diseo que se entremezcla en la estructura de otras partes del diseo. Un aspecto de implementacin es una unidad modular del programa que aparece en otras unidades modulares del programa [14]. Se deduce de esta definicin, que los aspectos de una aplicacin son aquellos mdulos que encapsulan crosscutting concerns, es decir, los mdulos que estn diseminados por el resto de las unidades funcionales. Es de resaltar que la definicin de aspecto no hace referencia al tipo de programacin en la que se implemente (orientada a objetos o procedural), por lo que el concepto, como tal, aplica a ambos [18]. En una primera instancia puede ser fcil asociar a aspectos los servicios comunes, incluyendo aspectos de auditoria (logging), aspectos de seguridad, aspectos de concurrencia, etc. Sin embargo, el concepto es mucho ms genrico, las herramientas que soportan POA permiten utilizar tanto las clases como aspectos como unidades para desarrollar un sistema, lo que permite total generalidad en el uso de este paradigma. Los elementos bsicos que se utilizan en la programacin orientada a aspectos son los siguientes:

21

Introduccin al Desarrollo de Software Orientado a Aspectos


Weaving (Entretejido): Los lenguajes orientados a aspectos definen una nueva unidad de programacin de software para encapsular las funcionalidades diseminadas por todo el cdigo (los aspectos). Sin embargo, componentes y aspectos deben interactuar. En la ejecucin del programa, finalmente, los aspectos debern estar insertados dentro de los componentes. Para ello ser necesario definir claramente cmo ser sta estrategia de insercin. En la terminologa de POA, este proceso se denomina entretejido, ya que puede pensarse que aspectos y componentes deben entretejerse para formar finalmente un cdigo ejecutable. Este proceso encargado de unir los aspectos con el resto de la aplicacin, se puede realizar en distintos momentos [17]: En la fase de pre-compilacin. En la fase de compilacin. En la fase de ejecucin.

Los dos primeros mecanismos se denominan estticos, son compiladores y preprocesadores que generan un ejecutable del programa junto con el cdigo de los aspectos. El ltimo pertenece a mecanismos dinmicos y se valen de los eventos que suceden durante la ejecucin de un programa para incorporar los mecanismos que decidan la aplicacin de los aspectos. Para poder realizar el entretejido entre aspectos y componentes, es necesario definir o declarar ciertos Join Points (puntos de enlace). Son los lugares del cdigo en los que ste se debe modificar, incorporando los comportamientos adicionales especificados en los aspectos y estos pueden ser por ejemplo, llamadas a mtodos, constructores o destructores, lanzamiento de excepciones, etc. Luego los Point cut (puntos de corte) son un predicado o sentencia cumplida por uno o varios puntos de enlace en el cdigo. Por ejemplo Todas las llamadas al mtodo X, Todos las llamadas a mtodos con nombre Set* o Todos los constructores de clases en el paquete Xm entre otros. Se denomina Advice (Consejo) [17] a la entidad que indica qu aspecto corresponde aplicar cuando el flujo de ejecucin pasa por un punto de enlace que cumple las condiciones de algn punto de corte. Hay 3 tipos de Advice: Before: se ejecutan justo antes del join-point. After: se ejecutan justo despus del join-point. Around: se ejecutan en lugar del join-point y pueden decidir si ejecutarlo o no. 22

Introduccin al Desarrollo de Software Orientado a Aspectos

El desarrollo de software orientado a aspectos pretende evitar los problemas de mantenimiento ocasionados por la dispersin y los enredos (scattering and tangling), haciendo uso de la modularizacin de aspectos. Como un ejemplo simple [24], en la Figura II.2 se considera una implementacin del concern de trazabilidad en ASPECTJ (lenguaje orientado a aspectos que se introducir en la siguiente seccin) en este ejemplo se puede observar cmo la POA aborda el concern y cmo se aplican los conceptos introducidos anteriormente.

Figura II.2 - Definicin de AspectJ para el concern de trazabilidad.

La sentencia de declaracin en la parte superior del cuerpo del aspecto asegura que todas las clases contenidas en un paquete en particular extienden la interfaz Traceable (lnea 4). La interfaz de trazabilidad en s es provista en las lneas posteriores, incluyendo una implementacin predeterminada de ella. De esta manera, el aspecto extiende mltiples clases, capturando estticamente la naturaleza crosscutting de las trazas. El resto de los aspectos capturan el crosscutting dinmico mediante un pointcut (lnea 20), que intercepta todas las llamadas a los mtodos pblicos, y alrededor de los advice (lnea 25), que emiten una cadena de caracteres con la signatura del mtodo en ejecucin, justo antes y justo despus de la misma. El aspecto puede ser tejido en el cdigo base, quedando este ltimo desacoplado del concern de trazabilidad. Esto ayuda a reducir enredos en el cdigo 23

Introduccin al Desarrollo de Software Orientado a Aspectos


base y proporciona una implementacin sin dispersin del crosscutting concern. Por otra parte, una pequea reduccin en el tamao del cdigo se puede lograr si el crosscutting es lo suficientemente regular (como es el caso con el concern de trazabilidad: la expresin pointcut puede cuantificar sobre todos los mtodos pblicos).

II.5.

Lenguajes Orientados a Aspectos

El soporte para este nuevo paradigma se logra a travs de una nueva clase de lenguajes, llamados lenguajes orientados a aspectos (LOA), los cuales brindan mecanismos para capturar y declarar aquellos concerns que se diseminan por todo el sistema (aspectos) [18]. Los LOA son extensiones de lenguajes convencionales que incorporan nuevos mecanismos y abstracciones para dar soporte al enfoque. As un aspecto se compone de construcciones sintcticas y semnticas especficas como los puntos de cortes, puntos de unin, avisos, introducciones. El proceso denominado entretejido compone los aspectos con las unidades funcionales. Una referencia clsica suele ser el LOA AspectJ [15]. Esta herramienta actualmente se considera la herramienta ms popular y difundida en la comunidad POA. Dado que AspectJ es una extensin de Java, todo programa vlido en Java es tambin vlido en AspectJ. Un compilador AspectJ produce clases que satisfacen la especificacin de java. Permitiendo a cualquier maquina virtual de Java (VM) ejecutar estas clases. Usando Java como lenguaje base, AspectJ toma todos los beneficios de este y hace que los programadores Java puedan entender fcilmente el lenguaje AspectJ. Este lenguaje consiste de dos partes: El lenguaje de especificacin y la implementacin del lenguaje. La parte del lenguaje de especificacin define el lenguaje en el cual se escribe el cdigo; se implementan los concerns usando el lenguaje de programacin Java, y se utiliza la extensin brindada por AspectJ para implementar el entretejido de los crosscutting concerns. La parte de la implementacin del lenguaje provee herramientas para la compilacin, debug e integracin con los ambientes de desarrollo (IDEs) [7]. AspectJ permite encapsular los crosscutting concerns de un sistema, pero es necesario definir de que manera un usuario puede obtener los concerns existentes en un sistema existente.

II.6.

Introduccin a Aspect Mining

Para que la POA cumpla su objetivo en sistemas existentes, es necesario migrarlos hacia su equivalente orientado a aspectos y restructurarlos continuamente. 24

Introduccin al Desarrollo de Software Orientado a Aspectos


El proceso de migracin de un sistema legado en un sistema orientado a aspectos (Figura II.3) consta de dos pasos: el descubrimiento de los aspectos candidatos y la refactorizacin de (algunos de) estos candidatos en aspectos [2]. Esto no es una tarea trivial debido al tamao y complejidad de los sistemas de software actuales y a la falta de documentacin explcita de crosscutting concerns presentes en esos sistemas, lo que hace que el proceso sea difcil y tendiente al error [2].

Figura II.3 - Migracin de un sistema legado en uno orientado a aspectos [2].

Debido al gran tamao de estos sistemas, la complejidad de su implementacin, la falta de documentacin y conocimiento sobre el mismo, es que existe la necesidad de contar con herramientas y tcnicas que ayuden a los desarrolladores a localizar y documentar los crosscutting concerns presentes en esos sistemas. El estudio y desarrollo de tales tcnicas es el objetivo de aspect mining [2], cuya actividad es descubrir crosscutting concerns que potencialmente podran convertirse en aspectos [6]. A partir de all, estos concerns pueden ser encapsulados en nuevos aspectos del sistema (mediante la utilizacin de tcnicas conocidas como aspect refactoring [2]) o pueden documentarse con el objetivo de mejorar la comprensin del mismo. Aspect mining engloba un conjunto de tcnicas que aspiran a encontrar crosscutting concerns en los sistemas existentes, y es la direccin de las investigaciones destinadas a encontrar crosscutting concerns en aplicaciones no orientados a aspectos [20]. Una vez que los concerns han sido identificados, estos pueden ser utilizados para la comprensin de los programas o con propsitos de refactorizacin. Adems de eso, las investigaciones sobre aspect mining aumentan la comprensin de los crosscutting concerns, ya que obligan a pensar sobre las circunstancias en las que un concern debe ser implementado como un aspecto, y tambin a encontrar crosscutting concerns que estn ms all de las formas cannicas, como el logging y el manejo de errores [20].

II.6.1. Conceptos de Aspect Mining


Sutton y Rouvellou [19] proporcionan una discusin sobre lo que constituye un concern. Tras ellos, se toma a los concerns generalmente como "cualquier materia de

25

Introduccin al Desarrollo de Software Orientado a Aspectos


inters en un sistema de software". Los concerns pueden vivir en cualquier nivel, desde los requerimientos o los casos de uso, hasta los patrones. Se distinguen los concerns por intencin y por extensin [20]: El concern por intencin se define como el objetivo de un concern. Por ejemplo, la intencin de un concern de trazabilidad, es que todos los parmetros de entrada y salida de los mtodos pblicos estn debidamente trazados. El concern por extensin, es la representacin concreta de este concern en el cdigo fuente del sistema. Por ejemplo, la extensin de un concern de trazabilidad consiste de la coleccin de todos los estados que estn actualmente generando trazas de un parmetro de mtodo determinado.

En aspect mining, se buscan elementos de cdigo fuente que pertenecen a la extensin de concerns que entrecrucen la estructura de modularizacin de los sistemas de software. Tales crosscutting concerns no se encuentran en una unidad de modularizacin como un solo paquete, una jerarqua de clases, una clase o un mtodo, se encuentran dispersos por todas estas unidades. A modo de ejemplo, el concern de trazabilidad afectar a muchos mtodos diferentes distribuidos sobre diferentes paquetes o clases. Una consecuencia de esta dispersin son los enredos (tangled): las unidades modulares no se pueden tratar exclusivamente con su concern principal, pero hay que tener en cuenta la implementacin de otros concerns que tambin entrecruzan su modularizacin. Aspect mining aspira encontrar en cdigo no orientado a aspectos los crosscutting concerns. Estos concerns, posiblemente, se podran mejorar mediante la aplicacin de soluciones orientadas a aspectos o pueden ser documentados con el propsito de facilitar la comprensin de los programas. Mining implica la bsqueda de elementos de cdigo fuente que pertenecen a la implementacin de un crosscutting concern, o que forman parte de la extensin de un concern. Los elementos de cdigo se referencian como seeds (semillas). Una vez que se encuentra una seed para un concern, se puede tratar de expandirla en toda la extensin del mismo, por ejemplo, por los siguientes datos o dependencias de control de flujo [20]. Aspect mining, generalmente, requiere de intervencin humana. Por lo tanto, lo que producen las herramientas de aspect mining son seeds candidatas, que pueden convertirse en seeds confirmadas (o, simplemente, seeds) si son aceptadas por un experto humano, o no-seeds si son rechazadas. A veces una no-seed tambin se conoce como un falso positivo, un resultado falso negativo es, entonces, una parte de un crosscutting concern conocido, potencialmente detectable por la tcnica, pero se perdi debido a las limitaciones inherentes del enfoque, o debido a los filtros 26

Introduccin al Desarrollo de Software Orientado a Aspectos


especficos aplicados en l. El desafo clave de aspect mining es mantener el porcentaje de seeds confirmadas en el conjunto total de las seeds candidatas lo ms alto posible, sin aumentar excesivamente el nmero de falsos negativos.

II.6.2. Evaluacin de las Tcnicas de Aspect Mining


Existen dos problemas principales a la hora de evaluar la calidad de una tcnica de aspect mining [20]: El primero es que debe existir un sistema de referencia en los cuales los crosscutting concerns se conozcan, por ejemplo, porque han sido identificados por un experto. Por el momento, no existe dicho sistema de referencia. Sin embargo, un nmero creciente de investigadores de aspect mining [25, 26], estn utilizando JHotDraw como ese caso, el cual est evolucionando hacia un sistema de referencia. El segundo desafo de la evaluacin, es la decisin de qu concern es crosscutting y propenso a ser implementado como aspecto, lo cual es una tarea completamente dependiente del anlisis del experto. Por lo tanto, no hay una respuesta afirmativa o negativa a la pregunta de si un elemento identificado es parte de la implementacin de un crosscutting concern. Como consecuencia, los datos cuantitativos sobre el nmero de falsos negativos (cuntos crosscutting concerns se pierden) o falsos positivos (cuntos de los identificados en realidad no son crosscutting) tienen un elemento subjetivo a s mismo. Esto significa que una evaluacin de una tcnica de aspect mining slo en trminos de, por ejemplo, porcentajes de falsos positivos y negativos, o en trminos de precisin y recall, es una simplificacin excesiva [20]. El origen de aspect mining es relativamente reciente como rea de investigacin, por esta razn a continuacin se presentan los conceptos, y luego se presentan los enfoques ms importantes de aspect mining publicados [20].

II.6.3. Reconocimiento de Aspectos


Kellens, Mens y Tonella [2] distinguen tres tipos principales de enfoques para el descubrimiento de aspectos: Early aspect: Tradicionalmente, el DSOA se ha centrado principalmente en la fase de implementacin durante el ciclo de vida del software. La investigacin sobre early aspect trata de descubrir los aspectos en fases tempranas del ciclo de vida del programa, tales como los requisitos y el anlisis del dominio o el diseo de la arquitectura. Identificar y gestionar early aspect no slo contribuye a 27

Introduccin al Desarrollo de Software Orientado a Aspectos


mejorar la modularidad de los requerimientos y el diseo arquitectnico, sino tambin muchos early aspects finalmente encuentran su camino en el cdigo como aspectos de la aplicacin. En el contexto de los sistemas legados, donde los requerimientos y documentos de arquitectura son a menudo anticuados, obsoletos o ya no estn disponibles, estas tcnicas no se pueden aplicar y los enfoques que se centran en el cdigo fuente por lo tanto son potencialmente ms prometedoras. Browsers dedicados: Una segunda clase de enfoques son los navegadores de cdigo que ayudan a un desarrollador a navegar manualmente el cdigo fuente de un sistema para explorar crosscutting concerns. Aunque el objetivo principal de estos enfoques no es explcitamente para el aspect mining, sino para documentar y localizar los crosscutting concerns con el fin de mantener y desarrollar un sistema, estos navegadores dedicados se pueden tambin utilizar para identificar los aspectos en un sistema. Normalmente, un usuario de dicho enfoque comienza a navegar por una seed de un concern, un punto de partida en el cdigo, y utiliza el navegador para explorar ms a fondo este concern. Para ello, el navegador podr proponer otros puntos de acceso en el cdigo que se relacionan con el concern o proporcionar al usuario un lenguaje de consulta para que de forma manual pueda atravesar los concern. Ejemplos de estos enfoques son Concern graphs [19], Intensional Views [61], Aspect Browser [21], Aspect Mining Tool [10, 22] y Prism [23]. Tcnicas de aspect mining: Automatizan el proceso de descubrimiento de aspectos y proponen al usuario uno o ms aspectos candidatos. Para tal fin, razonan sobre el cdigo fuente del sistema o sobre los datos que se adquieren mediante la ejecucin o la manipulacin del cdigo.

28

Captulo 3 Tcnicas de Aspect Mining

En este capitulo se brindar una descripcin de cinco tcnicas de aspect mining. Se presentar para cada una de ellas, su intencin y un ejemplo terico de aplicacin. Sobre el final del captulo, se presentar una comparacin de las cinco tcnicas basada en ciertos criterios predefinidos.

III.1. Unique Methods


Gybels y Kellens [3] estudiaron que algunas de las tcnicas existentes para dar soporte a aspect mining se basan en heursticas para encontrar cdigo duplicado disperso (tangling). Pero otros crosscutting concerns, como por ejemplo el logging y la actualizacin de cambio de estado, se implementan como un nico mtodo que se llama desde un nmero generalizado de lugares en el cdigo. Por ejemplo, el concern de logging se puede encapsular suficientemente bien con las tcnicas clsicas (por ejemplo singleton) para evitar el tangling, aunque no el scattering.

Figura III.1 - Implementacin del concern de logging.

La Figura III.1, muestra cmo sera la implementacin de este concern y el impacto sobre el resto de las clases en el sistema. Como estas implementaciones no se 29

Tcnicas de Aspect Mining


caracterizan por tener cdigo duplicado disperso, el mtodo log ser llamado de otros lugares donde se requiera registrar informacin, por lo tanto, las tcnicas de identificacin de tangling no suelen ser adecuadas para la identificacin de cdigo scattering.

III.1.1. Tcnica
Con esta tcnica los autores [3] intentan identificar aspectos candidatos, buscando los crosscutting concerns implementados particularmente en un mtodo nico. El que se define como: Un mtodo sin valor de retorno el cual implementa un mensaje que no es implementado por ningn otro mtodo. La tcnica da como resultado una lista de mtodos que son invocados una determinada cantidad de veces en todo el cdigo, la cual puede estar filtrada por un nmero mnimo de llamados que debe tener el mtodo para ser considerado nico, y tambin cumplir con el requisito de no ser un mtodo irrelevante, como por ejemplo los mtodos getters y setters.

III.1.2. Ejemplo del Enfoque


Los autores [3] presentan la realizacin de un experimento de identificacin de aspectos, basada en mtodos nicos en una imagen de Smalltalk: se seleccionaron todos los mtodos nicos en una imagen estndar VisualWorks Smalltalk, la cual contiene 3.400 clases que poseen un total de 66.000 mtodos. Fueron encontrados 6.248 mtodos nicos, de los cuales se filtraron los mtodos de acceso (getters y setters que no forman parte de los aspectos) y los mtodos que son llamados al menos 5 veces; dando como resultado un total de 228 mtodos finales, un nmero lo suficientemente pequeo como para que sea posible inspeccionarlos manualmente e identificar aspectos candidatos en una cantidad razonable de tiempo.
Clase
CodeComponent Locale Menu ScheduledWindow UIFinderVW2 ComposedText UIBuilder Text Cursor Image

Mtodo nico (Signatura)


#startLoad #currentPolicy: #addItem:value: #updateEvent: #showClasses: #centered #wrapWith: #emphasizeAllWith: #show #pixelsDo:

Tabla III.1 - Mtodos nicos encontrados en el experimento.

30

Tcnicas de Aspect Mining


La Tabla III.1 muestra una serie de mtodos nicos que se mantuvieron despus del filtrado. Con slo mirar las signaturas de estos mtodos, la inclusin de las palabras update y event hacen que #UpdateEvent: se destaque como un aspecto candidato y que un mtodo como #addItem:value: de la clase Menu, parezca menos proclive a implementar algn crosscutting concern, ya que claramente se refiere a la adicin de elementos en una barra de men. Finalmente, se obtuvieron 16 aspectos candidatos. En la Tabla III.2 se presentan algunas de las seeds identificadas junto con el nmero de llamadas de cada mtodo.
Clase Mtodo nico (Signatura) Invocaciones

Parcel #markAsDirty 23 ParagraphEditor #resetTypeIn 19 UIPainterController #broadcast PendingSelectionChange 18 CodeRegenerator #pushPC 15 AbstractChangeList #updateSelection: 15 Tabla III.2 - Clases, signaturas y nmero de invocaciones de los aspectos identificados.

III.2. Fan-In Analysis


La tcnica propuesta por Marin, van Deursen y Moonen [4], intenta identificar crosscutting concerns midiendo el nivel de dispersin (scattering): el cdigo de un crosscutting concern se extiende en todo el sistema. Si las piezas dispersas de cdigo tienen una funcionalidad en comn, generalmente su funcionalidad es refactorizada en un nuevo mtodo. Estos mtodos son llamados desde muchos lugares, dndoles un alto valor de fan-in. En una reimplementacin orientada a aspectos, el mtodo formara parte de un Advice, y el sitio de la llamada sera capturado utilizando un pointcut.

III.2.1. Tcnica
El Fan-In Analysis segn los autores [4] consiste en los siguientes tres pasos: 1. Calcular la mtrica de fan-in para todos los mtodos. La mtrica de fan-in es una medida de la cantidad de mtodos que llaman a algn otro mtodo. Con esto, se obtendr el conjunto de los potenciales llamadores de cada mtodo y la cardinalidad de este conjunto da el valor de fan-in. Sin embargo, el valor real de fan-in del mtodo, depende de la forma en que se tomen los mtodos polimrficos. Cuando se usa polimorfismo, una llamada al mtodo m, contribuye al

31

Tcnicas de Aspect Mining


fan-in de todos los mtodos que son referenciados por m y al de todos los que referencian a m. Por esto se aplican dos refinamientos a la mtrica: - El primero toma en cuenta el nmero de mtodos distintos que llaman a otro mtodo. De esta manera, si un mtodo abstracto es implementado en dos subclases concretas, se consideran a estas dos implementaciones como invocaciones separadas. - El segundo trata con los mtodos polimrficos. Teniendo en cuenta que se intenta encontrar mtodos que son llamados desde diferentes lugares, siendo estos partes de potenciales crosscutting concerns. Si un mtodo m pertenece a un cierto concern, es muy probable que las declaraciones de la superclase o subclases que redefinen m pertenezcan al mismo concern. Por esta razn, si el mtodo m' aplica el mtodo m a un objeto de tipo C, se agrega m' al conjunto de (potenciales) invocadores por cada m declarado en cualquier clase o subclase de C. Con esta definicin, las declaraciones de mtodos abstractos que estn arriba en la jerarqua de herencia actan como acumuladores de fan-in: cuando una implementacin de una subclase especfica es llamada, el fan-in no solo del mtodo, sino tambin del mtodo padre se ve incrementado. De esta manera, si existen muchas invocaciones a diferentes implementaciones de un mtodo abstracto, se obtiene un alto valor de fan-in para el mtodo de la superclase. 2. Identificar los mtodos considerados crosscutting. Luego de completar el clculo del valor de fan-in para todos los mtodos, se aplican los siguientes filtros con el fin de obtener un conjunto ms pequeo de mtodos que tengan mayor posibilidad de implementar un comportamiento crosscutting. Primero, se restringe el conjunto de mtodos a aquellos que presentan un fan-in superior a cierto umbral. Este puede ser un valor absoluto (por ejemplo 10) o un porcentaje relativo (por ejemplo el 5% de los mtodos con mayor valor de fan-in). Se puede notar que el valor absoluto de umbral no solo acta como filtro, sino que adems puede interpretarse como un indicador del nivel de dispersin. Segundo, se eliminan los mtodos getters y setters de la lista de mtodos. Este filtrado puede estar basado en convenciones de nombres (mtodos que coincidan con el patrn get* y set*) o en un anlisis de la implementacin de los mtodos.

32

Tcnicas de Aspect Mining


Por ltimo pero no menos importante, se excluyen los mtodos utilitarios, como el mtodo toString(), clases como XMLDocumentUtils que contengan utils en su nombre, mtodos que manipulan colecciones, etc. Este es un paso manual, requiere alguna familiaridad con el sistema analizado. 3. Analizar los mtodos resultantes. El paso final consiste en el anlisis manual del conjunto de mtodos obtenidos. Este anlisis sigue un conjunto de guas, que en parte pueden brindarse por soporte automtico. El razonamiento para la seleccin de los aspectos puede abordarse tanto en forma top-down como bottom-up. El enfoque bottom-up consiste en buscar las invocaciones de un mtodo que presente un alto valor de fan-in, de estos sitios ser posible que se capture a las llamadas en un pointcut. Ejemplo de tales invocaciones incluyen: - Las llamadas ocurren siempre al principio o al final de un mtodo. - Las llamadas ocurren en mtodos que son todos refinamientos de un nico mtodo abstracto, por ejemplo, contratos que abarcan varias jerarquas de clases. - Las llamadas ocurren en mtodos con nombres similares, como handlers del mouse o eventos del teclado. - Todas las llamadas ocurren en mtodos implementando un cierto rol, por ejemplo, objetos que se registran a si mismos como observadores del estado de otro objeto. La regularidad de esos sitios de invocacin har posible capturar todas las llamadas mediante un mecanismo pointcut, y el mtodo con alto fan-in en un advice. El mayor desafo del enfoque bottom-up es reconocer estos patrones en pointcuts. En el enfoque topdown, se toma en cuenta el conocimiento del dominio o el conocimiento de los tpicos crosscutting concerns. Por ejemplo, algunos patrones de diseo definen roles de funcionalidad crosscutting y mtodos especficos a esos roles que pueden aparecer en la lista de candidatos. Se puede tomar ventaja del propio conocimiento cuando se analizan las seeds candidatas para reconocer patrones especficos. El patrn Composite, define roles y mtodos que permiten a superclases referirse y manipular elementos de sus hijos. Similarmente, el mtodo en una clase Decorator est caracterizado por la redireccin de la funcionalidad que ellas implementan.

33

Tcnicas de Aspect Mining III.2.2. Ejemplo del Enfoque


Marin [20] aplica el enfoque propuesto en diversos casos de estudio. En la Tabla III.3, se encuentra un resumen de los resultados obtenidos con la tcnica aplicada al sistema de dibujo en dos dimensiones JHotDraw. Para este caso se corri la tcnica con un umbral de fan-in de 10, esto implica que solo se tomarn en cuenta los valores iguales o superiores a este umbral. JHotDraw
Cantidad de mtodos Mtodos con fan-in > 10 Estadsticas para mtodos con fan-in 10 Mtodos utilitarios Mtodos de acceso Seeds confirmadas Falsos positivos Concerns 3230 205(6 %)

20 71 58 (51%) 56(49%) 10

Tabla III.3 - Resultados del enfoque aplicado a JHotDraw.

En una primera observacin de los resultados se observa que para el umbral definido de 10, la cantidad de mtodos a ser inspeccionados se reduce a solo un 6% del total. Otra observacin que puede hacerse sobre los resultados, es un significante porcentaje de seeds positivas (51%) sobre el total de mtodos a ser inspeccionados, y sobre estos se debe estudiar a que crosscutting concern hacen referencia. A continuacin se presentan algunos de los crosscutting concerns identificados dentro de las seeds detectadas por la tcnica. Un crosscutting concern que a travs de un alto fan-in es claramente identificable, es la persistencia. Los autores [20] afirman que el concern puede ser visto con facilidad, ya que hay seis mtodos diferentes involucrados, cada uno con un nombre construido a partir de palabras como "read", "write", "storable", "input" y "output". El almacenamiento y la restauracin de las figuras se realizan con mtodos heredados de la interfaz Storable. Esta interfaz proporciona mtodos para leer de a uno por la entrada StorableInput, o escribir de a un dato por la salida StorableOutput. La implementacin del concern de persistencia se expande por ms de 36 clases. Las figuras que implementan la interfaz Storable invocan varios mtodos de las clases StorableOutput y StorableInput. Las dos clases se especializan en escribir/leer varios tipos (primitivos), por ejemplo String, Color, int, etc a/desde un dispositivo de almacenamiento. Esto se traduce en un alto fan-in por sus mtodos, lo que permiti detectar el concern de persistencia mediante Fan-In Analysis. Esta tcnica tambin aporta informacin para la identificacin otros tipos de concerns, por ejemplo, varios mtodos con alto fan-in apuntan a las instancias del patrn de 34

Tcnicas de Aspect Mining


diseo Observer. Si nos referimos a la definicin de este patrn [27], un mtodo que se espera tenga un alto valor de fan-in es notify: este mtodo es llamado para cada tipo diferente de evento de cambio cuando el observer quiere escuchar. Adems, se espera que el fan-in para los mtodos attach y desattach se relacione con el nmero de observadores involucrados. El mtodo Observer.update() es probable que tenga un bajo valor de fan-in, ya que slo es llamado desde el mtodo Subject.notify(). Segn los autores [20], estas expectativas se cumplen en JHOTDRAW: El mtodo Figure.changed() se corresponde con Subject.notify(), y de hecho, tiene el mayor fanin, permitiendo descubrir este concern. Los observadores son llamados oyentes en JHOTDRAW, y el mtodo addFigureChangeListener se corresponde con el mtodo agregar. Haciendo matching con la convencin de nomenclatura utilizada en el primer observador encontrado, lleva a otra instancia del patrn (con un fan-in algo ms bajo). Por lo tanto, Fan-In Analysis provee seeds iniciales y la comprensin de la aplicacin, que puede ser utilizado por tcnicas complementarias para identificar crosscutting concerns adicionales.

III.3. Execution Relations


S. Breu y J. Krinke [25] proponen un enfoque dinmico para el anlisis de aspectos basado en trazas. Durante la ejecucin de un programa, las trazas del mismo que se generan, reflejan el comportamiento en tiempo de ejecucin de un sistema de software. Estas trazas son entonces investigadas para analizar patrones de ejecucin peridica. Luego diferentes restricciones definen cuando un patrn es recurrente.

III.3.1. Tcnica
El enfoque propuesto por Breu y Krinke [25] se basa en: Primero, investigar la traza del programa y buscar patrones de relaciones de ejecucin, con la intencin de obtener automticamente los crosscutting concern en el sistema, y luego obtener manualmente aspectos candidatos a partir de las relaciones obtenidas en el primer paso.

III.3.2. Clasificacin de las Relaciones de Ejecucin


La definicin de las relaciones de ejecucin en el enfoque formulado por los autores se basa en la obtencin de trazas de ejecucin. Intuitivamente, una traza de ejecucin es

35

Tcnicas de Aspect Mining


una secuencia de llamadas a mtodos para una corrida del sistema. Slo se tienen en cuenta las entradas y salidas de las ejecuciones de los mtodos, ya que luego se puede hacer un seguimiento del orden relativo en que se inician y terminan dichas ejecuciones. Se hace foco en la ejecucin de los mtodos porque se quiere analizar un programa orientados a objetos donde lgicamente la funcionalidad relacionada se encapsula en mtodos. Formalmente, una traza de ejecucin TP de un programa P con signatura de mtodo NP se define como una lista [t1,..., tn] de pares ti pertenecientes a (NP {ent, ext}), donde ent marca la entrada en un mtodo de ejecucin, y ext marca la salida de la ejecucin de un mtodo. Para hacer las trazas de ejecucin ms fcil de leer, las marcas ent y ext son representados por los caracteres { y } respectivamente.

Figura III.2 - Traza de ejemplo.

Los crosscutting concerns son reflejados por las dos relaciones diferentes de ejecucin que se pueden encontrar en las trazas: un mtodo puede ser ejecutado despus que se termina el mtodo anterior (por ejemplo, H () en la lnea 4 es ejecutado despus de G () en la lnea 3), o dentro del mtodo anterior (por ejemplo, C () en la lnea 2 se ejecuta dentro de B () en la lnea 1). Los autores distinguen entre estos dos casos, y tambin se califica que hay fuera y dentro de las relaciones de ejecucin en las trazas. De este modo se pueden definir formalmente cuatro tipos de ejecucin: outside-before-execution Un mtodo es ejecutado antes que el otro mtodo sea ejecutado. Por ejemplo, G() (lnea 3) es ejecutado antes que H() (lnea 4) sea ejecutado. outside-after-execution Un mtodo es ejecutado despus que el otro mtodo sea ejecutado. Por ejemplo, H() (lnea 4) es ejecutado posteriormente a la ejecucin de G() (lnea 3).

36

Tcnicas de Aspect Mining

inside-first-execution Un mtodo es el primero en ejecutarse dentro de la invocacin del mtodo precedente. Por ejemplo, G() (lnea 3) es el primero en llamarse dentro de la ejecucin de C() (lnea 2). inside-last-execution Un mtodo es el ltimo en ejecutarse dentro de la invocacin del mtodo precedente. Por ejemplo, H() (lnea 4) es el ltimo en llamarse dentro de la ejecucin de C() (lnea 2).

III.3.3. Ejemplo del Enfoque


Breu y Krinke [25] aplicaron el enfoque descripto en esta seccin utilizando como caso de test JHotDraw versin 5.4b1. A continuacin se presentan los resultados ms significativos arrojados por la tcnica para inside-first-execution y outside-beforeexecution en las Tablas III.4 y III.5 respectivamente, donde se muestra la cantidad de mtodos que tienen una determinada cantidad de relaciones del tipo analizado. Para inside-first-execution la tcnica arroj 277 candidatos con 1236 relaciones de este tipo, y para outside-before-execution 92 candidatos con 294 relaciones.
Cantidad de Relaciones Cantidad de Mtodos Cantidad de Relaciones Cantidad de Mtodos

2 127 13 4 3 55 15 2 4 30 16 1 5 12 17 2 6 9 18 1 7 7 19 1 8 7 20 1 9 3 22 1 10 3 24 2 11 3 32 1 12 4 49 1 Tabla III.4 - Resultados de relaciones inside-first-execution.

En la Tabla III.4, se puede observar que el mejor candidato posee 49 relaciones de ejecucin donde el mtodo involucrado es ...CollectionsFactory.current, este es un mtodo crosscutting, ya que brinda acceso a una factory de objetos, y es utilizado en muchos otros mtodos del sistema. En la Tabla III.5, se puede observar que el mejor candidato posee 13 relaciones de ejecucin donde el mtodo involucrado es ...Iterator.next, si se observan las

37

Tcnicas de Aspect Mining


invocaciones con detenimiento se puede observar que este candidato corresponde a un falso positivo ya que el mtodo es ejecutado luego que se declaran ciertos contenedores. El sexto mejor candidato consiste de siete relaciones outside-beforeexecution para el mtodo ...AbstractFigure.willChange. Este mtodo es llamado antes de los mtodos que cambian la figura presentada, y puede ser clasificado como parte del patrn Observer/Observable, pudiendo este candidato ser refactorizado en un aspecto.
Cantidad de Relaciones Cantidad de Mtodos Cantidad de Relaciones Cantidad de Mtodos

2 53 8 1 3 19 9 1 4 4 11 1 5 6 12 1 6 3 13 1 7 2 Tabla III.5 - Resultados de relaciones outside-before-execution.

III.4. Comparacin de Tcnicas


A continuacin se presentarn una serie de criterios propuestos por Andy Kellens, Kim Mens, y Paolo Tonella [2] que permiten comparar las tcnicas de aspect mining mencionadas en este captulo (ver Tabla III.6). Se ha elegido este conjunto centrndose en la variabilidad de las diferentes tcnicas. Como tal, la intencin es obtener una clasificacin que ayude a los usuarios potenciales de las tcnicas de aspect mining a seleccionar la tcnica adecuada, y a los investigadores a entender las diferencias entre sus propias tcnicas y las existentes. El conjunto de criterios utilizados es: Datos estticos versus dinmicos: Qu tipo de datos proporciona el anlisis de la tcnica? Se analizan los datos de entrada que pueden ser obtenidos por el anlisis esttico del cdigo, la informacin dinmica que se obtiene mediante la ejecucin del programa, o ambas cosas? Anlisis basado en token versus anlisis estructural/comportamiento Qu tipo de anlisis realiza la tcnica? Distinguimos entre: - Basado en token. Simple anlisis lxico del programa: las secuencias de caracteres, expresiones regulares, etc. - Estructural/Comportamiento. Anlisis estructural y de comportamiento del programa: rboles de anlisis, tipo de informacin, envo de mensajes, etc. 38

Tcnicas de Aspect Mining

Nombre Tcnica
Unique Methods Fan-In Analysis Execution Relations

Descripcin
Detecta mtodos nicos del sistema. Anlisis mediante mtrica fan-in. Analiza patrones recurrentes presentes en las trazas de ejecucin. Tabla III.6 - Tcnicas a comparar.

Seccin
III.1 III.2 III.3

Granularidad Cul es el nivel de granularidad de los aspectos candidatos encontrados? Mientras que algunas tcnicas descubren aspectos a nivel de mtodos, otras trabajan a una granularidad ms fina, considerando las sentencias individuales o fragmentos de cdigo como parte de los aspectos candidatos. Tangling y Scattering Qu sntomas de aspectos busca la tcnica de aspect mining? Busca explcitamente por sntomas de Tangling, de Scattering o ambos? Los crosscutting concerns, Se caracterizan por tener fuertes sntomas de cdigo disperso o enredado? Participacin de los usuarios Qu tipo de participacin se requiere de los usuarios? Qu esfuerzo requiere la tcnica por parte de sus usuarios? El usuario tiene que navegar manualmente a travs de todos los resultados de la tcnica a fin de encontrar los aspectos candidatos? Se requiere entrada adicional de datos por parte del usuario durante el proceso bsqueda? Para cada una de las tcnicas de estudio, la Tabla III.7 muestra el tipo de datos (estticos o dinmicos) analizados, as como el tipo de anlisis (basado en tokens, estructural, o de comportamiento).
Tipo de datos de entrada Tcnica Esttico Dinmico Tipo de anlisis Estructural/ Token Comportamiento
x x x

Unique Methods x Fan-In Analysis x Execution Relations x Tabla III.7 - Tipo de datos de entrada y tipo de anlisis utilizado.

De las tcnicas evaluadas, todas realizan un anlisis esttico del cdigo excepto Execution Relations, que obtiene, a partir de la ejecucin del mismo, trazas del programa que posteriormente sern evaluadas para encontrar patrones de ejecucin peridica. En este caso, todas las tcnicas utilizan un tipo de anlisis de cdigo basado en caractersticas estructurales o de comportamiento, y no se basan en la identificacin de crosscutting concerns mediante la utilizacin de convenciones de nombrado como lo hacen las tcnicas basadas en tokens.

39

Tcnicas de Aspect Mining


Las tres tcnicas anteriores se basan en el hecho de que los crosscutting concerns son generalmente implementados mediante la utilizacin de rigurosas convenciones de nombrado. Por ejemplo, la tcnica Execution Relations analiza el comportamiento del sistema ya que intenta encontrar patrones recurrentes de mtodos invocados durante la ejecucin del mismo. Por otra parte, el anlisis realizado por la tcnica Fan-In Analysis es estructural ya que toma en cuenta el grafo esttico de invocaciones para poder calcular el valor de la mtrica para los mtodos.
Granularidad Fragmento Mtodo de cdigo Sntoma Scattering Tangling
-

Tcnica
Unique Methods Fan-In Analysis Execution Relations

x x x x x x Tabla III.8 - Granularidad y sntomas.

Como puede verse en la Tabla III.8 todas las tcnicas dan resultados con granularidad a nivel de mtodo, debido a que retornan en la salida seeds que corresponden a mtodos que han sido identificados como potenciales crosscutting concerns. Las tres tcnicas buscan sntomas de scattering en el cdigo. La Tabla III.9 muestra si es necesaria la participacin por parte del usuario para cada una de las tcnicas. Ninguna trabaja de forma automtica, todas requieren que el experto en el dominio recorra y analice los resultados obtenidos. De la evaluacin de criterios realizada, podemos distinguir que las tcnicas de aspect mining se pueden clasificar en dos grandes grupos: las que realizan un anlisis esttico del cdigo y las que realizan un anlisis dinmico del mismo.
Tcnica Participacin del usuario Si No
-

Unique Methods x Fan-In Analysis x Execution Relations x Tabla III.9 - Participacin del usuario.

El anlisis esttico trata de identificar los crosscutting concerns mediante la agrupacin de entidades con nombres similares. Ms concretamente se aprovecha la similitud sintctica con todas las clases y mtodos del programa analizado (excepto los que generan mucho ruido en los resultados, como las clases de tests y mtodos de acceso) [28]. El anlisis dinmico, en cambio, se puede utilizar para localizar crosscutting concerns en el cdigo del programa a travs del anlisis de sus trazas de ejecucin, donde sta traza representa el comportamiento de la aplicacin en tiempo de ejecucin.

40

Tcnicas de Aspect Mining


De los criterios elegidos para esta comparacin, en base a los propuestos por Kellens, Mens y Tonella [2], podemos distinguir ciertas caractersticas comunes en las tcnicas analizadas en esta seccin. Por ejemplo, podemos ver que las cinco tcnicas tienen granularidad a nivel de mtodo, lo que significa que los resultados arrojados por ellas como seeds de posibles aspectos, son a nivel de mtodos del cdigo bajo anlisis, no existiendo ninguno que lo haga con una granularidad mas fina. As mismo, todas las tcnicas requieren intervencin del usuario ingresando datos a modo de filtro de los resultados a obtener, y para la identificacin de los crosscutting concerns reales en el anlisis final de los resultados.

41

Captulo 4 Aspect Mining Produccin Aplicado a un Sistema en

Existen muchas tcnicas propuestas sobre aspect mining pero pocos trabajos donde stas sean analizadas en profundidad aplicadas a un sistema en produccin y comparando sus resultados unas con otras. En particular, dicho anlisis permitir la evaluacin de las tcnicas de aspect mining en un contexto real y estudiar los resultados en la bsqueda de parmetros que permitan optimizar las tcnicas para obtener mayor calidad de seeds. En este captulo, se presentar un estudio realizado sobre seis versiones del cdigo fuente del sistema GridGain [8] sobre el cual se aplicaron un conjunto de 6 tcnicas de aspect mining. Este estudio consisti en el anlisis de los resultados de las tcnicas de forma cualitativa, clasificacin de las seeds encontradas, y comparacin de los resultados de las tcnicas que identifican el mismo tipo de crosscutting concerns (crosscutting concern sorts). A continuacin, se realizar una presentacin de la motivacin del estudio, la herramienta utilizada para realizar el aspect mining y se brindar una introduccin al caso de estudio elegido. Por ltimo, se expondr el anlisis realizado junto con los resultados generales con un anlisis estadstico y comparativo de los mismos.

IV.1. Desarrollo del Caso de Estudio


El objetivo del presente trabajo consiste en la bsqueda de crosscutting concerns en un sistema de software real, de gran uso en el mercado y con un crecimiento importante debido a sus prestaciones a los usuarios. El software utilizado se llama GridGain [8] y su eleccin se debe a las siguientes caractersticas: Es de cdigo abierto, este motivo esta fundamentado en la necesidad de poseer acceso al cdigo fuente para realizar los anlisis requeridos, Est desarrollado en Java, ya que las tcnicas a utilizar toman como entrada sistemas realizados en este lenguaje.

42

Aspect Mining Aplicado a un Sistema en Produccin


Ser ampliamente utilizado en el campo del Grid Computing, esto es importante por dos motivos: o 1) GridGain representa un software de una complejidad mayor a los utilizados anteriormente como benchmarks para comparar tcnicas de aspect mining como por ejemplo JHotDraw [20]. o 2) al ser ampliamente utilizado y poseer una gran base de usuarios, Grid Gain es un buen prospecto para analizar la evolucin de los crosscutting concerns presentes en el mismo. Este sistema se utilizar para estudiar la evolucin de los crosscutting concerns presentes en el mismo a travs de una serie acotada de versiones, y evaluar el costo que requiere una modificacin en alguno de estos crosscutting concerns. Para esto, en principio se realizar una bsqueda de seeds en las distintas versiones del sistema utilizando la herramienta AME [31], y a partir de estos resultados, los siguientes anlisis: Evaluacin de seeds: Los resultados obtenidos se evalan para identificar cuales son seeds positivas (que pueden pertenecer a un crosscutting concern en el sistema) y cuales son falsos positivos. Clasificacin de seeds positivas: Cada una de las seeds positivas es clasificada segn un crosscutting concern sorts [26]. Combinatoria de tcnicas: Se analizan la precisin y el recall de diversas combinatorias de los resultados arrojados por las tcnicas. Anlisis de medidas de centralizacin: Se analiza la distribucin de frecuencias de las seeds positivas en los resultados arrojados por las tcnicas utilizadas. Anlisis de outliers: Se analizan los valores que afectan la correlacin de los datos resultantes del anlisis de seeds.

Los dos ltimos puntos son desarrollados en el captulo siguiente. Estos estudios se realizan con el objetivo de encontrar caractersticas que ayuden a potenciar los resultados de las tcnicas de aspect mining permitiendo que sean ms precisos y faciliten la validacin manual de los mismos. Adems, se presentan los problemas que fueron surgiendo durante todo el proceso para evaluar beneficios y dificultades con los que un desarrollador se puede encontrar a la hora de migrar un sistema existente al paradigma orientado a aspectos.

43

Aspect Mining Aplicado a un Sistema en Produccin

IV.2. AME Herramienta de Aspect Mining


Para estudiar GridGain, se utiliz una herramienta de Aspect Mining llamada AME [31], la cual se ejecuta como plugin de Eclipse, y es utilizada para analizar proyectos implementados en lenguaje Java, buscando elementos del cdigo fuente que pertenezcan a la implementacin de algn crosscutting concern, dando como resultado lo que se denomina aspecto candidato o seed [2, 24]. Los aspectos candidatos o seeds pueden convertirse en un conjunto de seeds confirmadas (o simplemente seeds) si son aprobadas por el desarrollador, o no-seeds si las mismas son desechadas (tambin llamadas falsos positivos). A su vez, un falso negativo es una parte de un crosscutting concern conocido, potencialmente detectable por la tcnica, pero no encontrado debido a las limitaciones inherentes a la misma. El desafo principal es mantener el porcentaje de seeds confirmadas lo ms alto posible sobre el total de seeds candidatas, sin aumentar el nmero de falsos negativos [24]. La herramienta dispone de anlisis para seis tcnicas diferentes de identificacin de crosscutting concerns, y 3 de ellas sern utilizadas en el presente estudio: Fan-In Analysis [20] Execution Relations [5] Unique Methods [3]

IV.3. Caso de Estudio


En esta seccin se presenta el diseo general de GridGain y se describen las seis versiones del mismo a ser utilizadas para el desarrollo del anlisis del caso de estudio.

IV.3.1.

Descripcin de GridGain

GridGain es un API para computacin grid desarrollada en Java. GridGain es un producto open source bajo licencia LGPL-2.1 y Apache 2.0, el cul se dio a conocer en julio del 2007. Como muchas otras APIs y frameworks, GridGain facilita la paralelizacin de procesos de manera que se puedan compartir recursos, reducir los tiempos y mejorar la performance. Las claves de GridGain se pueden resumir en dos puntos: Map/Reduce y SPI (Service Provider Interface).

44

Aspect Mining Aplicado a un Sistema en Produccin


El paradigma de programacin detrs de GridGain es Map/Reduce [35], un enfoque de resolucin de problemas del estilo divide y conquista [36, 37], el cual se ha hecho popular por su aplicacin por Google. Como se observa en la Figura IV.1, la idea subyacente es simple: dividir un problema en partes ms pequeas y ejecutarlas en paralelo en los nodos de una red (parte map), y cuando los nodos han finalizado, componer los resultados individuales para obtener el resultado final (parte reduce). Si un problema puede ser expresado en trminos de operaciones map y reduce, entonces se puede escalar a travs de varios nodos y resolver problemas grandes. En el modelo de Map/Reduce, el mapping es un proceso que divide la tarea inicial en subtareas y las asigna a los nodos de la grid. Generalmente, el mapping involucra la propia lgica de la divisin, e incluye el balance de carga (asignacin de las subtareas a los nodos), manejo de potenciales fallas (fail over) y resolucin de colisiones.

Figura IV.1 - Ejemplo de funcionamiento map/reduce.

En GridGain, el enfoque Map/Reduce es mejorado por un mecanismo denominado balance de carga temprano/tardo. Cuando una tarea comienza su ejecucin, primero se realiza el mapping inicial, que la divide en un nmero de subtareas y las asigna a uno o ms nodos grid. Esto se denomina balance de carga temprano. Luego las subtareas viajan a los respectivos nodos remotos para ser ejecutadas, y al arribar a un nodo grid destino, estas estn sujetas a colisiones. Un proceso denominado SPI es 45

Aspect Mining Aplicado a un Sistema en Produccin


llamado cada vez que una subtarea arriba a un nodo, y de acuerdo al estado de la cola (schedulling), SPI puede: cancelar la subtarea, dejarla esperando en la cola, transferirla a otro nodo para su ejecucin, o comenzar su ejecucin localmente. Este mecanismo se denomina balance de carga tardo, y ocurre en la ejecucin del proceso y en el nodo destino. La caracterstica importante es que puede existir una diferencia de tiempo importante entre los dos balances de carga. El tipo de balance de carga de GridGain ayuda a adaptar la ejecucin de la tarea a la naturaleza no-determinstica de ejecucin en la grid eficazmente. SPI es un mecanismo muy poderoso que configura y afecta dinmicamente casi todos los aspectos del framework de computacin grid: comunicacin, descubrimiento, fallas, resolucin de conflictos, balance de carga, manejo de la topologa, etc.

IV.3.2.

Releases de GridGain

En este trabajo se estudiarn 6 versiones de GridGain a saber: 1.5.0, 1.6.0, 2.0.0, 2.0.2, 2.1.0 y 2.1.1. A continuacin, se describen las principales caractersticas de cada una de ellas: GridGain versin 1.5: La primer release sobre la cual se inicia el anlisis, introdujo mejoras con respecto a su versin anterior en la funcionalidad del ncleo y soporte para Jboss, Spring, AspectJ, Weblogic, Websphere, Coherence, GigaSpaces, JXInsight, y Mule. Tambin se agregaron caractersticas para comunicacin entre jobs y monitoreo [29]. GridGain versin 1.6.0: Esta versin mejora la estabilidad, la documentacin y la Integracin con GlassFish y con JUnit, siendo GridGain el primer grid con integracin natural para JUnit. GridGain versin 2.0.0: Incorpor una serie de caractersticas nuevas y mejoradas como [30]: Implementacin avanzada de Map/Reduce [30]. Capacidad de balanceo de carga [30]. Soporte para productos de almacenamiento en cach, como JBoss Cache u Oracle Coherence. Mejora de las mtricas en tiempo de ejecucin, supervisin y gestin.

46

Aspect Mining Aplicado a un Sistema en Produccin


GridGain versin 2.0.2: Correccin de errores y mejoras en la documentacin. Una de las mejoras ms notables, es la modificacin en la carga de clases P2P para apoyar el trabajo de integracin con Groovy/Grails [30]. GridGain versin 2.1.0: El principal objetivo de esta release fue la mejora del ncleo y en la estabilidad. Se implementaron cambios acumulativos como repositorio Maven, personalizacin SPI por tarea, y una mayor integracin con Spring [30]. GridGain versin 2.1.1: Versin de estabilidad en la que solamente se incluyeron correcciones de algunos errores de importancia [30].

IV.4. Anlisis de Aspect Mining Aplicado en GridGain


Sobre las seis versiones mencionadas de GridGain se ejecutaron cada una de las tcnicas de aspect mining en el orden: Unique Method, Execution Relations con suborden: Outside Before, Outside After, Inside First e Inside Last, y por ltimo las detectadas mediante la tcnica Fan-In Analysis, para detectar y clasificar las seeds en cada caso. A su vez se realizaron tablas para seguir la evolucin de cada una de ellas y para encontrar diferencias en los resultados obtenidos; as como tambin para analizar cualitativamente estas diferencias. Se analiza en profundidad el impacto que poseen los diferentes parmetros en los resultados de cada una de las tcnicas utilizadas. Y se comparan los resultados de aquellas tcnicas que identifican el mismo tipo de crosscutting concerns (crosscutting concern sorts). El anlisis se ejecuta con la herramienta AME [31] para todas las tcnicas indicadas anteriormente, con las siguientes consideraciones: Se toma un valor mnimo de fan-in igual a 5 para las tcnicas Unique Method y para las cuatro variantes de Execution Relations. En tanto para Fan-In Analysis, se tienen en cuenta solo las seeds con fan-in igual o superior a 10, dado que tomar un valor ms bajo introduce mayor cantidad de seeds nuevas al estudio, las que demandan una considerable cantidad de tiempo para su investigacin, pero no aportan resultados significativos al anlisis debido a su bajo valor para la mtrica. Este valor de referencia fue establecido por Marin et al. [20].

47

Aspect Mining Aplicado a un Sistema en Produccin


En primer trmino, se realiza el anlisis con la herramienta para cada una de las versiones y con cada tcnica, en la Figura IV.2 se presenta una imagen de ejemplo, luego se analizan manualmente las seeds resultantes de la ejecucin. Por lo que para una seed X que sea detectada por ms de una tcnica, solo se presenta su clasificacin una vez, la primera vez que se detecte.

Figura IV.2 - Presentacin de los resultados arrojados por la herramienta AME.

Una vez finalizada la ejecucin de las tcnicas, se arma una tabla (Figura IV.3) por cada una de ellas, con los valores de fan-in para cada seed en cada versin de GridGain, las mismas se encuentran completas y en detalle en el Anexo I. La convencin utilizada en la confeccin de las tablas fue la siguiente: Con fondo amarillo se indic la ausencia de esa seed en dicha versin (simblicamente equivale a seed con valor de fan-in igual a 0). Con color gris, se indic la primera vez que la herramienta detecta esa seed (fan-in mayor o igual al umbral). En rojo se indic si el mtodo fue identificado pero con fan-in menor al umbral utilizado.

La finalidad de los colores, es para tener visualmente un panorama ms claro de cmo fue la evolucin de cada una de las seeds a travs de las distintas versiones.

Figura IV.3 - Fragmento de una tabla con los sombreados indicados anteriormente.

Luego, se agrega a la tabla anterior una columna con el promedio de fan-in, teniendo en cuenta que cuando una seed no existe en alguna versin, no se toma en cuenta en 48

Aspect Mining Aplicado a un Sistema en Produccin


el clculo del promedio para no afectar los resultados, ya que un valor 0 de fan-in influira de manera negativa. Es decir, si un mtodo fue clasificado en 4 de las 6 de las tcnicas y entre todas suman 40 de fan-in, se dividir ste valor por 4, y no por 6 que es la cantidad total de tcnicas. De esta forma, el resultado sera muy diferente si en lugar de un valor promedio de fan-in igual a 10 (40/4) se tomara un valor promedio de 6,666 (40/6).

IV.5. Anlisis General de los Resultados Obtenidos


Se corre el anlisis con la herramienta AME de las 6 tcnicas de Aspect Mining sobre cada una de las 6 versiones de GridGain obteniendo las seeds candidatas, luego estas son analizadas manualmente de forma individual para confirmarlas o clasificarlas como falsos positivos, y adems, en alguno de los 4 tipos de Crosscutting Concern Sorts. En la Figura IV.4 se puede tener una visin de la cantidad de seeds detectadas por cada tcnica que se obtuvieron para el cdigo analizado. A simple vista, es posible notar que la tcnica de Fan-in Analysis report un nmero de seeds mucho mayor con respecto a las dems, esto ocurre ya que las restricciones de la tcnica solo se basan en la mtrica de fan-in, permitiendo que muchos mtodos sean reportados como seeds candidatas. Como hemos visto en el captulo anterior, las dems tcnicas poseen restricciones adicionales adems del valor de fan-in, lo que produce que sea inferior la cantidad de seeds que cumplan las condiciones de la misma.

Fan-In Analysis Exec. Relations (Inside Last) Exec. Relations (Inside First) Exec. Relations (Outside After) Exec. Relations (Outside Before) Unique Methods 0 50 48

206

55

60

51

62 100 150 200 250

Figura IV.4 - Cantidad de seeds candidatas detectadas por cada tcnica.

49

Aspect Mining Aplicado a un Sistema en Produccin


Las seeds reportadas se analizaron manualmente para detectar si cada una corresponde a un crosscutting concern o es un falso positivo. En la Tabla IV.1 (como en la Figura IV.5) se presentan los resultados obtenidos.
Execution Relations Outside Before 51 21 30 51 Outside After 48 29 19 48 Inside First 60 38 22 60 Inside Last 55 63 9 55

Unique Method
Seeds Candidatas Seeds Confirmadas Falsos Positivos Totales

Fan-In Totales Analysis 206 130 76 206 276 173 103

62 49 13 62

Tabla IV.1 - Clasificacin de seeds por tcnicas.

Los totales de la tabla anterior, no representan la suma de los resultados de todas las tcnicas anteriores porque existen seeds encontradas por ms de una tcnica. Por ejemplo, una seed detectada como Falso Positivo con Unique Method y Fan-In Analysis solo incrementa en 1 el total de Falsos Positivos.

Figura IV.5 - Clasificacin de Seeds por tcnica.

Seguidamente, se contabilizaron la cantidad de tcnicas que detectaron a un mtodo como seed candidata, y luego de la clasificacin manual, cuantas pertenecieron a un crosscutting concern (cuantas fueron confirmadas) para cada una de las tcnicas, as como tambin el porcentaje de seeds confirmadas.

50

Aspect Mining Aplicado a un Sistema en Produccin


Cantidad de tcnicas que identifican la misma Seed 6 5 4 3 2 1 Total Porcentaje de Seeds Confirmadas 0,00% 75,00% 61,90% 76,92% 59,18% 60,12% 55,52%

Seeds Candidatas 0 4 21 39 49 163 276

Seeds Confirmadas 0 3 13 30 29 98 173

Tabla IV.2 - Clasificacin de seeds por cantidad de tcnicas.

Observando la Tabla IV.2 (o la Figura IV.6) se deduce claramente que cuantas ms tcnicas clasifican a un mtodo como seed candidata (ms alto es el porcentaje), ste tiene ms probabilidad de ser parte de un crosscutting concern.

Figura IV.6 - Porcentaje de seeds confirmadas de acuerdo a la cantidad de tcnicas que las clasificaron.

Sin embargo, al observar la Figura IV.6, se encontr la particularidad de que la porcin amarilla, correspondiente a las seeds que fueron encontradas por 4 de las 6 tcnicas de Aspect Mining, y que a su vez fueron confirmadas como parte de un concern, representa un porcentaje menor que la porcin naranja, que muestra las seeds encontradas por 3 tcnicas y confirmadas por el experto; lo que quiere decir que tiene ms probabilidad de ser parte de un crosscutting concern una seed que fue clasificada por 3 tcnicas que una que fue detectada por 4, escenario donde, a priori, se hubiese supuesto lo contrario.

51

Aspect Mining Aplicado a un Sistema en Produccin

Figura IV.7 - Porcentaje de falsos positivos de acuerdo a la cantidad de tcnicas que los clasificaron.

En la Figura IV.7 se puede apreciar la misma particularidad comentada anteriormente pero para el caso de los falsos positivos, es decir, que en relacin, se encontraron ms falsos positivos cuando una seed fue detectada por 4 tcnicas que en cualquier otro caso.
Cantidad de tcnicas que identifican el mismo Falso Positivo 6 5 4 3 2 1 Total

Seeds Candidatas 0 4 21 39 49 163 276

Falsos Positivos 0 1 8 9 20 65 103

Porcentaje de Falsos Positivos 0,00% 25,00% 38,10% 23,08% 40,82% 39,88% 27,81%

Tabla IV.3 - Clasificacin de Falsos Positivos por cantidad de tcnicas.

IV.6. Clasificacin de Seeds Mediante Crosscutting Concerns Sorts


Una limitacin importante de aspect mining proviene de una falta de definicin de crosscutting concerns. Esta definicin permite especificar claramente los objetivos de bsqueda de una tcnica y la correspondencia entre estos objetivos y los resultados reales. Sin esta definicin, las tcnicas de aspect mining tienen que recurrir a las

52

Aspect Mining Aplicado a un Sistema en Produccin


descripciones ad-hoc de sus objetivos y salidas, y a veces incluso omitir una especificacin detallada de sus resultados y la transversalidad asociada. Un primer paso para superar esta limitacin, consiste en un sistema para abordar y describir los crosscutting concerns. Con este fin, se propone el uso de los crosscutting concerns sorts, como un sistema de clasificacin para la funcionalidad transversal. Los crosscutting concerns sorts son descripciones atmicas de funcionalidad crosscutting. Se caracterizan por una serie de propiedades comunes a todas las instancias del sort: (1) Una descripcin genrica del sort (por ejemplo, la intencin del sort). (2) Un lenguaje de implementacin especfico de las instancias del sort en un lenguaje no orientado a aspectos (por ejemplo, los sntomas especficos de los sorts). (3) Un mecanismo atmico de lenguaje de aspectos para modularizar instancias concretas del sort. La clasificacin de los crosscutting concerns basada en sorts, asegura un nmero importante de propiedades para aspect mining: Primero, la atomicidad de los sorts garantiza un nivel de granularidad consistente para los resultados del mining. Segundo, los sorts describen la relacin entre las instancias concretas y la funcionalidad crosscutting asociada. En tercer lugar, sorts provee un lenguaje comn para referirse a los casos comunes de crosscutting concerns, y por lo tanto, para definir los objetivos buscados con una tcnica de aspect mining [26].

Luego de obtener los primeros resultados, se realiz un anlisis de la funcionalidad de cada seed candidata, indicando si pertenece a un crosscutting concern o no, y en caso afirmativo, a qu tipo de crosscutting concern sort corresponde. Esta clasificacin del tipo al cual la seed corresponde, se basar en cuatro tipos bsicos definidos por Marin, Moonen y Van Deursen [26]: Consistent Behavior (Comportamiento Consistente): Mtodos que implementan un comportamiento consistente como un paso controlado en la ejecucin de una serie de mtodos que podran ser capturados naturalmente por un pointcut.

53

Aspect Mining Aplicado a un Sistema en Produccin


Contract Enforcement (Ejecucin de Contratos): Cumplen con el diseo de las reglas de los contratos. Este tipo de concern corresponde a mtodos que son parte de pre/post-condiciones. Redirection Layer (Capas de Redireccin): Definen una capa de interfaz a un objeto (para agregar funcionalidad o cambiar su contexto) y desvan las llamadas a otro objeto. Role Superimposition (Superimposicin de Roles): Mtodos que poseen ms de un rol especfico.

Estos tipos de crosscutting concern sorts son definiciones atmicas de funcionalidad crosscutting. Para poder comparar las distintas tcnicas, se requiere que ellas detecten los mismos tipos de crosscutting concern sorts. De esta manera, ser posible evaluar los resultados de todas ellas bajo las mismas caractersticas, as como tambin combinarlos. En el caso de las tcnicas evaluadas, en su mayora, las seeds que encuentran se corresponden con los sorts de Consistent Behavior y Contract Enforcement. En el Anexo I, se puede observar para cada seed encontrada, su clasificacin en cuanto al tipo de sort con su justificacin, y si pertenece, o no, a un crosscutting concern.
Tcnica Aplicada Sort Consistent Behavior Contract Enforcement Redirection Layer Role Superimposition Total

Unique Method
34 5 8 0 47

Execution Relations
Outside Before
11 8 2 0 21

Outside After
20 6 3 0 29

Inside First
21 13 4 0 38

Inside Last
35 3 8 0 46

Fan-In Analysis
78 20 32 0 130

Tabla IV.4 - Resumen de resultados de la clasificacin de seeds.

La Tabla IV.4 muestra la cantidad de seeds clasificadas en cada tipo de crosscutting concern sort y para cada tcnica. Se observa que al contrario de lo que se supona, hay mayor cantidad de seeds clasificadas como Redirection Layer que como Contract Enforcement, cuando las tcnicas utilizadas para el caso de estudio, encuentran en su mayora seeds de tipo Consistent Behavior y Contract Enforcement. Los totales de la tabla anterior no coinciden con la cantidad total de seeds confirmadas, 173, ya que una seed que se clasific con ms de una tcnica, increment en 1 el total en cada una de ellas.

54

Aspect Mining Aplicado a un Sistema en Produccin

IV.7. Precisin y Recall


En esta seccin se presentar un anlisis de precisin y recall motivado por el enfoque GQM (Goal-Question-Metric Objetivo-Preguntas-Mtricas) que proporciona una manera til para definir mediciones, tanto del proceso, como de los resultados de un proyecto. Este enfoque considera que un programa de medicin ser ms satisfactorio si es diseado teniendo en mente las metas (objetivo perseguido). Las preguntas ayudan a medir si se est alcanzando en forma exitosa la meta definida, por lo tanto, se deben considerar preguntas que sean potencialmente medibles. GQM define un objetivo, refina este objetivo en preguntas y define mtricas que intentan dar informacin para responder a estas preguntas. Se puede aplicar a todo el ciclo de vida del producto, procesos y recursos, y se puede alinear fcilmente con el ambiente organizacional. De acuerdo a sta definicin, se plantean para el caso de estudio los siguientes objetivos: Balancear el tiempo de trabajo para analizar la aplicacin con la cantidad de crosscutting concerns encontrados. Disminuir al mnimo posible el tiempo empleado e incrementar al mximo posible la deteccin de crosscutting concerns. Reducir costos, mejorar los tiempos de anlisis, evitar anlisis innecesarios y mejorar la confiabilidad de los resultados.

Lo que lleva a plantear 2 grandes interrogantes: Se puede disminuir en mayor medida el tiempo de anlisis que los resultados que se resignan en consecuencia? Se puede determinar una secuencia de pasos para encontrar todos los crosscutting concerns existentes en un caso de estudio?

Los cuales sern respondidos mediante la aplicacin de las siguientes mtricas: Precisin Recall F1-Score

55

Aspect Mining Aplicado a un Sistema en Produccin IV.7.1. Definicin

Precisin: Es lo cerca que los valores medidos estn unos de otros. Se refiere a la dispersin del conjunto de valores obtenidos de mediciones repetidas de una magnitud. Cuanto menor es la dispersin, mayor es la precisin. Una medida comn de la variabilidad es la desviacin estndar de las mediciones y la precisin se puede estimar como una funcin de ella. Para el caso de estudio planteado, equivale a la cantidad de seeds confirmadas dentro del conjunto solucin de todas las seeds encontradas, ya sea con una nica tcnica, o en cada combinacin de ellas. Recall: Se refiere a cun cerca del valor real se encuentra el valor medido. En trminos estadsticos, el recall est relacionado con el sesgo de una estimacin. Cuanto menor es el sesgo, ms exacta es la estimacin. Para el caso de estudio, corresponde a la proporcin de seeds confirmadas que encuentra cada combinacin de tcnicas, respecto al total de seeds confirmadas que existen en la aplicacin.

Figura IV.8 - Ejemplos de Precisin y Recall.

En el contexto de la recuperacin de informacin, la precisin es el porcentaje de documentos recuperados que son relevantes para una bsqueda.

Por otro lado, el concepto de recall corresponde a la fraccin de documentos relevantes a la bsqueda, sobre el total de documentos relevantes. Este concepto complementa la mtrica de precisin asegurando un nivel de confianza garantizando que no se han perdido demasiados resultados (falsos negativos) de la solucin final. 56

Aspect Mining Aplicado a un Sistema en Produccin

La manera de calcular estas mtricas de acuerdo a los conceptos utilizados anteriormente es la siguiente: falsos positivos (# elementos reconocidos, pero de manera errnea, ya que no deban ser parte de la solucin) falsos negativos (# elementos no reconocidos, que debieron haber sido incluidos en la solucin) verdadero positivo (Seed Confirmada) (# elementos reconocidos, siendo que deban reconocerse) verdadero negativo (# elementos no reconocidos, cuando efectivamente no deban serlo)

Por lo tanto, se define a la precisin como el nmero de verdaderos positivos reconocidos dividido el total de elementos que fueron reconocidos (suma de falsos positivos y verdaderos positivos); y al recall, como el nmero de verdaderos positivos reconocidos dividido el total de elementos que realmente son relevantes (suma de verdaderos positivos y falsos negativos):

Pero como en el caso de estudio no se analizaron los falsos negativos, la formula utilizada para calcular recall es:

IV.7.2.

Combinacin de Tcnicas

Opcionalmente (pero recomendado) la tcnica de mining debe proporcionar directrices para mejorar los valores de la mtrica. Estas mejoras se pueden hacer, por ejemplo, a travs de combinaciones de tcnicas. Por ejemplo, la precisin puede ser 57

Aspect Mining Aplicado a un Sistema en Produccin


mejorada mediante la combinacin de tcnicas con el mismo objetivo de bsqueda, y el recall puede ser mejorado mediante la combinacin de tcnicas con diferentes objetivos. Los tipos de combinaciones que se realizan son: Unin, Interseccin, Diferencia y Diferencia Simtrica [40, 45].

Unin [41]. La unin de dos conjuntos A y B, es el conjunto A B que contiene todos los elementos de A y todos los de B.

Figura IV.9 - Unin de conjuntos.

Interseccin [42]. La interseccin de dos conjuntos A y B, es el conjunto A B que contiene todos los elementos de A que tambin pertenecen a B.

Figura IV.10 - Interseccin de conjuntos.

Diferencia [43]. La diferencia entre dos conjuntos A y B, es el conjunto A \ B que contiene todos los elementos de A que no pertenecen a B (Idem para B \ A).

Figura IV.11 - Diferencia de conjuntos.

58

Aspect Mining Aplicado a un Sistema en Produccin

Diferencia Simtrica [44]. La diferencia simtrica de los conjuntos A y B (A B), es la unin de A \ B con B \ A, o lo que es equivalente a A B - A B.

Figura IV.12 - Diferencia Simtrica de conjuntos.

IV.7.3.

Aplicacin al Caso de Estudio

Para poder realizar estos clculos es necesario haber realizado previamente la clasificacin de las seeds, ya sea para confirmarlas o para marcarlas como falsos positivos, y haber hecho, adems, un estudio manual de la herramienta analizada para detectar falsos negativos (en el presente anlisis no se realiz debido a razones de tiempo, ya que sera necesario investigar toda la aplicacin manualmente para encontrar seeds que las tcnicas no hayan detectado), y para obtener la cantidad de seeds totales presentes en ella. Para el clculo de las mtricas, se determinaron los siguientes valores: 276 seeds en total (seeds candidatas) 173 seeds confirmadas 103 falsos positivos

Donde todos fueron determinados manualmente luego del anlisis por parte del desarrollador de las seeds arrojadas por la herramienta. Precisin: Se toman los resultados para Unique Method, el cual detecta un total de 62 seeds, de las cuales 49 son confirmadas, por lo que la precisin es de 49/62 = 0,790. Recall: GridGain tiene 276 seeds candidatas y 173 confirmadas, por lo que nuevamente para Unique Method, se tienen 49 seeds encontradas sobre 173 existentes, lo que da un recall de 49/173 = 0,283. En primer trmino, se obtuvieron 17 conjuntos resultantes de distintas combinaciones entre las 6 tcnicas analizadas, que sumados a los 6 de cada una de ellas en forma

59

Aspect Mining Aplicado a un Sistema en Produccin


individual, ms la combinacin de los 4 tipos de Execution Relations en uno solo, hacen un total de 24 conjuntos sobre los cuales se evaluarn la precisin y el recall. Se presenta la Tabla IV.5 que muestra los valores calculados para cada uno de los 24 conjuntos, donde sobresalen con color verde los conjuntos con mejores resultados y con rojo, los que brindaron los resultados menos convenientes. Conjunto de Tcnicas
Unique Method Execution Relations Execution Relations - Outside Before Execution Relations - Outside After Execution Relations - Inside First Execution Relations - Inside Last Fan-In Analysis Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis Unique Method \ Execution Relations Unique Method \ Fan-In Analysis Execution Relations \ Fan-In Analysis Execution Relations \ Unique Method Fan-In Analysis \ Unique Method Fan-In Analysis \ Execution Relations Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis U.M. E.R. F.I.A. U.M. E.R. F.I.A.

Precisin
49 / 62 = 0,790 83 / 132 = 0,629 21 / 51 = 0,412 29 / 48 = 0,604 38 / 60 = 0,633 46 / 55 = 0,836 130 / 206 = 0,631 24 / 26 = 0,923 21 / 21 = 1,000 62 / 95 = 0,653 108 / 168 = 0,643 158 / 247 = 0,640 151 / 243 = 0,621 25 / 36 = 0,694 28 / 41 = 0,683 21 / 37 = 0,568 59 / 106 = 0,557 109 / 185 = 0,589 68 / 111 = 0,613 84 / 142 = 0,592 137 / 226 = 0,606 89 / 148 = 0,601 18 / 18 = 1,000 173 / 276 = 0,627

Recall
49 / 173 = 0,283 21 / 173 = 0,480 21 / 173 = 0,121 29 / 173 = 0,168 38 / 173 = 0,220 46 / 173 = 0,266 130 / 173 = 0,751 24 / 173 = 0,139 21 / 173 = 0,121 62 / 173 = 0,358 101 / 173 = 0,624 152 / 173 = 0,913 146 / 173 = 0,873 23 / 173 = 0,145 26 / 173 = 0,162 20 / 173 = 0,121 59 / 173 = 0,341 110 / 173 = 0,630 68 / 173 = 0,393 82 / 173 = 0,486 136 / 173 = 0,792 89 / 173 = 0,514 18 / 173 = 0,104 173 / 173 = 1,000

Tabla IV.5 - Clculo de Precisin y Recall.

Luego de esto es necesario determinar cual es la mejor combinacin a aplicar sin resignar demasiada precisin, ni mucho recall. Para esto existe en las estadsticas la funcin F1-Score [46] (tambin conocida como F-Measure), que es una medida de la exactitud de una prueba teniendo en cuenta tanto la precisin como el recall de la misma para calcularla, donde sus resultados se pueden interpretar como un promedio ponderado entre la precisin y el recall, y en el cual una prueba alcanza su mejor valor cuando F1-Score se aproxima a 1, y su peor puntuacin cuando sta tiende a 0. La F1-Score tradicional, es la media armnica entre la precisin y el recall:

60

Aspect Mining Aplicado a un Sistema en Produccin


Se presentan en la Tabla IV.6, los valores de F1-Score para las 24 combinaciones de tcnicas con la misma convencin de colores que la tabla anterior: Conjunto de Tcnicas
Unique Method Execution Relations Execution Relations - Outside Before Execution Relations - Outside After Execution Relations - Inside First Execution Relations - Inside Last Fan-In Analysis Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis Unique Method \ Execution Relations Unique Method \ Fan-In Analysis Execution Relations \ Fan-In Analysis Execution Relations \ Unique Method Fan-In Analysis \ Unique Method Fan-In Analysis \ Execution Relations Unique Method Execution Relations Unique Method Fan-In Analysis Execution Relations Fan-In Analysis U.M. E.R. F.I.A. U.M. E.R. F.I.A.
Tabla IV.6 - Clculo de F1-Score.

F1-Score
0,417 0,544 0,188 0,262 0,326 0,404 0,686 0,241 0,216 0,463 0,633 0,752 0,726 0,239 0,262 0,200 0,423 0,609 0,479 0,533 0,687 0,555 0,188 0,771

IV.7.4.

Interpretacin de Resultados

Los resultados obtenidos son interpretados de acuerdo a los objetivos planteados. En la Figura IV.13 de precisin, se puede ver que las 3 mejores tcnicas bajo este criterio, en orden decreciente, son: Unique Method Fan-In Analysis: 21 seeds confirmadas sobre 21 encontradas por la tcnica, da una precisin de 21/21 = 1,000 Unique Method Execution Relations Fan-In Analysis: 18 seeds confirmadas sobre 18 encontradas por la tcnica, da una precisin de 18/18 = 1,000 61

Aspect Mining Aplicado a un Sistema en Produccin


Unique Method Execution Relations: 24 seeds confirmadas sobre 26 encontradas por la tcnica, da una precisin de 24/26 = 0,923

Figura IV.13 - Precisin de cada tcnica y sus combinaciones.

Y las 3 que menor precisin tienen, comenzando con la ms baja: Execution Relations Outside Before: 21 seeds confirmadas sobre 51 encontradas por la tcnica, da una precisin de 21/51 = 0,412 Execution Relations \ Unique Method: 59 seeds confirmadas sobre 106 encontradas por la tcnica, da una precisin de 59/106 = 0,557 Execution Relations \ Fan-In Analysis: 21 seeds confirmadas sobre 37 encontradas por la tcnica, da una precisin de 21/37 = 0,568

Figura IV.14 - Recall de cada tcnica y sus combinaciones.

62

Aspect Mining Aplicado a un Sistema en Produccin


Anlogamente para el recall se realiz el mismo anlisis, arrojando la Figura IV.14, notndose en el mismo, que las 3 tcnicas con mejor recall son: U.M. E.R. F.I.A.: 173 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 173/173 = 1,000 Unique Method Fan-In Analysis: 158 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 158/173 = 0,913 Execution Relations Fan-In Analysis: 151 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 151/173 = 0,873

Y en el otro extremo, con el peor recall, se encuentran: U.M. E.R F.I.A.: 18 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 18/173 = 0,104 Unique Method Fan-In Analysis: 21 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 21/173 = 0,121 Unique Method Execution Relations: 24 seeds confirmadas sobre 173 encontradas por la tcnica, da una precisin de 24/173 = 0,139

Figura IV.15 - F1-Score de cada tcnica y sus combinaciones.

Por ltimo, se realizaron los clculos para F1-Score (Figura IV.15) mediante el cual es posible afirmar que las mejores combinaciones de tcnicas para hallar crosscutting concerns en una aplicacin son:

63

Aspect Mining Aplicado a un Sistema en Produccin


U.M. E.R. F.I.A.: Con un valor F1-Score de 0,771, es la combinacin ms recomendable para encontrar seeds con exactitud. Unique Method Fan-In Analysis: Con un valor F1-Score de 0,752, es la segunda combinacin ms recomendable para encontrar seeds con exactitud. Execution Relations Fan-In Analysis: Con un valor F1-Score de 0,726, es la tercera combinacin ms recomendable para encontrar seeds con exactitud.

Y las que no deben ser tenidas en cuenta al momento de realizar un estudio de cierta magnitud: U.M. E.R F.I.A.: Con un valor F1-Score de 0,188, es la combinacin menos recomendable para encontrar seeds con exactitud. Unique Method Fan-In Analysis: Con un valor F1-Score de 0,216, es la segunda combinacin menos conveniente para encontrar seeds con exactitud. Execution Relations Outside Before: Con un valor F1-Score de 0,188, es la tercera tcnica menos recomendable para encontrar seeds con exactitud.

Figura IV.16 - Total de seeds en el conjunto muestreado.

Luego, teniendo los valores de F1-Score para todas las combinaciones, resta determinar de acuerdo a la cantidad de seeds en cada conjunto (Figura IV.16) cuales son los ms recomendables. 64

Aspect Mining Aplicado a un Sistema en Produccin


Segn la Tabla IV.7 que ordena de mayor a menor los conjuntos en base a la cantidad de seeds confirmadas, se observa que los primeros 11, coinciden en el orden en cuanto a valor de F1-Score con la cantidad de seeds confirmadas, por lo tanto, al momento de realizar el estudio se debe determinar hasta que punto se desea resignar seeds confirmadas para disminuir el tiempo de anlisis y/o la cantidad total de seeds analizadas. Conjunto de Tcnicas
U.M. E.R. F.I.A. Unique Method Fan-In Analysis Execution Relations Fan-In Analysis Unique Method Fan-In Analysis Fan-In Analysis Unique Method Execution Relations Fan-In Analysis \ Unique Method Execution Relations Fan-In Analysis Execution Relations Unique Method Execution Relations Fan-In Analysis \ Execution Relations Execution Relations Fan-In Analysis Execution Relations \ Unique Method Unique Method Execution Relations - Inside Last Execution Relations - Inside First Execution Relations - Outside After Unique Method \ Fan-In Analysis Unique Method Execution Relations Unique Method \ Execution Relations Unique Method Fan-In Analysis Execution Relations \ Fan-In Analysis Execution Relations - Outside Before U.M. E.R. F.I.A.

F1-Score
0,771 0,752 0,726 0,687 0,686 0,633 0,609 0,555 0,544 0,533 0,479 0,463 0,423 0,417 0,404 0,326 0,262 0,262 0,241 0,239 0,216 0,200 0,188 0,188

Seeds Confirmadas
173 158 151 137 130 108 109 89 21 84 68 62 59 42 46 38 29 28 24 25 21 21 21 18

Total de Seeds
276 247 243 226 206 168 185 148 132 142 111 95 106 62 55 60 48 41 26 36 21 37 51 18

Tabla IV.7 - Clasificacin de combinaciones de tcnicas.

IV.7.5.

Anlisis de los Resultados

En primer termino, se debe aclarar que todos los resultados estn sujetos a la clasificacin que se di manualmente a las seeds para este caso de estudio, por lo que no deben tomarse las conclusiones como una regla aplicable en el 100% de los casos que puedan presentarse, pero si como una gua para tener en cuenta. 65

Aspect Mining Aplicado a un Sistema en Produccin


Otra consideracin a tener en cuenta es la cantidad de seeds que resultan en cada una de las 24 combinaciones de tcnicas (Tabla IV.6), ya que como se dijo en los objetivos, no solo es interesante conocer el F1-Score de cada una de ellas, si no tambin la cantidad de seeds del conjunto resultante, ya que de nada sirve un F1-Score de 1, si la cantidad de seeds en el conjunto es muy poca en cuanto al total de seeds, y lo mismo en el caso anlogo. Habra que analizar hasta que punto es conveniente la unin de las 3 tcnicas, ya que en ese caso es necesario analizar el conjunto total de seeds (276 para GridGain), cuando por ejemplo con la tcnica de fan-in individualmente, se deben analizar 206 seeds y no se resigna tanta precisin ni tanto recall, pero si se gana mucho tiempo de estudio, ya que no es lo mismo analizar manualmente 276 seeds que 206. Se puede disminuir en mayor medida el tiempo de anlisis que los resultados que se resignan en consecuencia? Si, observando la Figura IV.15, se desprende que F1-Score determin como tcnicas ms recomendadas a U.M. E.R. F.I.A. (Unique Method Execution Relations Fan-In Analysis), Unique Method Fan-In Analysis y Execution Relations Fan-In Analysis, y combinando la Figura IV.16 del total de seeds en cada conjunto, con la IV.5 con el total de seeds confirmadas por conjunto, se concluye que: U.M. E.R. F.I.A. si bien detect todas las seeds confirmadas de la aplicacin, tuvo que analizar la totalidad de las mismas. Unique Method Fan-In Analysis, analiza 247 seeds, que si bien no es el total de ellas, redujo en 23 las seeds analizadas y solo perdi 14 seeds confirmadas. Execution Relations Fan-In Analysis, detecta 243 seeds confirmadas, que si bien no es el total de ellas, redujo en 33 las seeds analizadas y perdi 22 seeds confirmadas.

Se puede determinar una secuencia de pasos para encontrar todos los crosscutting concerns existentes en un caso de estudio? Si, la unin de las 3 tcnicas principales encuentra todas las seeds confirmadas, pero para ello debe analizar la totalidad de seeds existentes en la aplicacin, lo que es imprctico desde el punto de vista del tiempo a emplear para llevar a cabo el anlisis.

IV.8. Conclusin
El anlisis de GridGain en las 6 versiones analizadas se llev a cabo desde dos puntos de vista diferentes: el cualitativo y el cuantitativo. El anlisis cualitativo, fue realizado

66

Aspect Mining Aplicado a un Sistema en Produccin


para justificar la evidencia que dan las distintas tcnicas de Aspect Mining sobre la presencia de crosscutting concerns en el cdigo fuente de la aplicacin. El cuantitativo, en cambio, consisti en la obtencin de medidas y mtricas con el objetivo de evaluar el desempeo de cada tcnica en la identificacin de crosscutting concerns. Del anlisis cualitativo, se desprende que determinados concerns pueden tener mayor influencia dentro del diseo de una aplicacin y esa influencia puede provocar que el anlisis genere mayor cantidad de informacin respecto a ese concern, como sucedi con el crosscutting concern de logging en el caso de estudio presentado. Del anlisis cuantitativo, la primera conclusin alcanzada es que se obtuvo un mnimo de 59%,18 de seeds candidatas confirmadas, y un promedio de 64,97%. Este porcentaje, se basa en un juicio subjetivo sobre si cada seed es indicadora de la presencia de un crosscutting concern o no. Por lo tanto, no debe ser tomado como algo absoluto o inapelable, sino ms bien, como un indicador sobre la aptitud de las 6 tcnicas aplicadas para la identificacin de crosscutting concerns sobre cdigo legado.

IV.9. Limitaciones
Algunas limitaciones que se presentaron en el trabajo desarrollado son las siguientes: - Deteccin de falsos negativos: para analizar aquellos mtodos con comportamiento crosscutting que no han sido reconocidos por la herramienta, el desarrollador deber inspeccionar manualmente el cdigo. Considerando que por investigaciones relacionadas se sabe que en lneas generales las tcnicas aplicadas encuentran una tasa muy alta de seeds, se determin dejar de lado el estudio de falsos negativos. - Anlisis manual: si bien se encuentra automatizada una gran parte del proceso de bsqueda de crosscutting concerns, la confirmacin de cada seed se debe realizar de manera manual, lo que conlleva a tener que contar con cierta experiencia no solo del dominio, sino tambin en cuanto a la clasificacin de crosscutting concerns, adems del respectivo tiempo que esto insume. - Conocimiento del dominio: al momento de comenzar el presente trabajo, no se contaba con conocimiento sobre la aplicacin GridGain, lo cual supone una desventaja en cuanto a la confirmacin como crosscutting concern de cada seed y a su clasificacin dentro de los 4 tipos de crosscutting concern sorts. - Inexperiencia en la deteccin de concerns: tampoco se contaba con la suficiente experiencia en cuanto a deteccin de concerns, por lo que esto presume otra desventaja al momento de desarrollar la presente investigacin. 67

Captulo 5 Anlisis Estadsticos

Uno de los principales problemas que poseen las tcnicas de aspect mining, es que stas arrojan un conjunto de resultados que requieren la evaluacin de un desarrollador para discriminar las seeds confirmadas de los falsos positivos. En este sentido, el anlisis de los resultados de las tcnicas desde una perspectiva estadstica es una forma de encontrar oportunidades de mejora con el objetivo de reducir el trabajo del desarrollador. Con tal fin, se realiz un estudio estadstico sobre la distribucin de las seeds resultantes, para estudiar cmo se agrupan y as saber si es posible introducir mejoras a las tcnicas que permitan obtener resultados de mayor calidad (reduciendo la cantidad de falsos positivos). En el presente captulo se realizaron dos estudios: el primero, sobre medidas de centralizacin donde se estudio la distribucin de las seeds agrupadas en cuartiles para observar dnde se encuentra la mayor cantidad de resultados positivos. Y en el segundo, se estudiaron los valores extremos utilizando outliers, para evaluar los resultados que provocan desvos a la generalidad de los mismos.

V.1. Medidas de Centralizacin


En la presente seccin se realiza un estudio de la distribucin de las seeds respecto a su valor de fan-in de acuerdo a las medidas aritmticas de los resultados de las tcnicas. Las medidas que se analizaron son los cuartiles [39] y con ellas se busca encontrar algn patrn para facilitar y/o perfeccionar la deteccin de crosscutting concerns estadsticamente.

V.1.1. Definicin de las Medidas de Centralizacin


Las medidas de centralizacin [39] dan un centro de la distribucin de frecuencias, es decir, un valor que se puede tomar como representativo de todos los datos. Hay diferentes modos para definir el "centro" de las observaciones en un conjunto de 68

Anlisis Estadsticos
datos. En este caso, sobre los resultados obtenidos para cada tcnica se realiz un anlisis estadstico de cuartiles y media. La media aritmtica (o simplemente media), es el promedio aritmtico de las observaciones, es decir, el cociente entre la suma de todos los datos y el nmero de ellos. Si xi es el valor de la variable y ni su frecuencia, se tiene que:

Si los datos estn agrupados, utilizamos las marcas de clase, es decir ci en vez de xi. Los cuartiles son un caso especial de la definicin de cuantiles. Diremos que un nmero es el cuantil de orden p en una distribucin de frecuencias, si el porcentaje de datos inferiores a l es igual a p (y los superiores 100-p). Por ejemplo, el cuantil C85 ser un punto que cumple que el 85% de los datos sea inferior o igual a l. Los cuantiles que dividen a la distribucin en cuatro partes iguales, es decir, C25, C50 y C75, reciben el nombre de cuartiles, y se representan por: Q1 (o primer cuartil) es el lmite que determina que el 25% de los datos analizados se encuentran por debajo de l. Q2 (o segundo cuartil, coincide con la mediana de la muestra) es el nmero que establece que el 50% de los datos analizados se encuentran por debajo de l. Q3 (o tercer cuartil) determina que el 75% de los datos analizados se encuentran por debajo de ste valor.

El clculo de los cuantiles es similar al de la mediana: ( )

La frmula se interpreta de la siguiente manera: N.p: es el producto del nmero de datos (N) por la proporcin (p) que define el cuantil (si es porcentaje, se deber despus dividir entre 100). Ampl: es la amplitud del intervalo contiene la frecuencia acumulada p. nant: es la frecuencia acumulada anterior al intervalo del cuantil. ninterv: es la frecuencia absoluta de dicho intervalo. Li: representa el lmite inferior verdadero del intervalo del cuantil. 69

Anlisis Estadsticos

Se observa que el segundo cuartil, Q2, coincide con el valor de la Mediana, que es el valor que separa por la mitad las observaciones ordenadas de menor a mayor, de tal forma que el 50% de estas son menores que la mediana y el otro 50% son mayores. Si el nmero de datos es impar, la mediana ser el valor central, y si por el contrario, es par, la mediana se toma como la media aritmtica entre los dos valores centrales.

V.1.2. Aplicacin al Caso de Estudio


Para el caso de estudio se aplicaron los clculos antes expuestos a fin de obtener la distribucin de las seeds candidatas acorde a su valor de fan-in. Esto se aplic para las tcnicas Unique Method, para las cuatro variantes de Execution Relations y para Fan-In Analysis. Adems, se debe tener en cuenta que para todos los clculos se tom el valor promedio de fan-in entre las 6 tcnicas. La intencin del anlisis es estudiar cmo se distribuyen las seeds confirmadas y si es posible identificar algn patrn que permita filtrar los resultados de las tcnicas y as reducir el trabajo del usuario encargado de evaluarlos. A continuacin se presentan los resultados obtenidos para cada una de las tcnicas.
Q2 (Mediana) 6,917 8,333 Desviacin Estndar 10,451 11,312

Media Unique Methods Execution Relations Outside Before Execution Relations Outside After Execution Relations Inside First Execution Relations Inside Last Fan-In Analysis 11,301 12,152

Q1 5,000 5,000

Q3 12,125 14,042

Mnimo 3,333 3,000

Mximo 58,167 65,000

Moda 5,000 5,000

12,094

4,625

6,000

10,188

3,000

129,833

6,000

19,595

15,335

5,125

7,000

11,917

3,250

151,000

8,000

23,626

17,349 38,879

5,708 10,208

8,000 17,000

12,083 49,500

3,833 5,500

138,333 190,833

5,000 190,833

27,099 47,274

Tabla V.1 - Valores obtenidos para las medidas de centralizacin.

Con los clculos anteriores se estudi la cantidad de seeds confirmadas con respecto a las medidas de centralizacin calculadas. A modo de ejemplo se presentan los resultados del anlisis de cuartiles para Unique Methods, los resultados particulares para el resto de las tcnicas se pueden observar en el Anexo II.

70

Anlisis Estadsticos
Se expresa en la Tabla V.1 el anlisis sobre la media (11,301) de los valores de fan-in para Unique Method, evaluando la cantidad de seeds que arroj la tcnica y calculando cuntas de estas se identificaron como parte de un crosscutting concern y cuantas fueron falsos positivos con respecto a dicho valor.
Seeds Confirmadas Mayores a la Media Menores a la Media Total Falsos Positivos

18 0 31 13 49 13 Tabla V.2 - Anlisis de seeds respecto a la Media.

En la Tabla V.2, se observa que se confirmaron ms seeds por debajo de la media, que por encima de ella, visualmente estos valores pueden verse representados en la Figura V.1. Esta situacin se da tomando como referencia las cantidades, es decir, por encima de la media existen 18 seeds confirmadas y por debajo 44, pero si se trasladan a porcentaje estos valores, se tiene que por sobre la media el 100% de las seeds fueron confirmadas, en tanto, cuando no se supera dicho umbral, el 70,45% son parte de un crosscutting concern (y el 29,55% no lo es) como se observa en la Figura V.1.
0 13 Falsos Positivos 18 31 Seeds Confirmadas

100% 90% 80% 70%

60%
50% 40% 30% 20% 10% 0% Mayores a la Media Menores a la Media

Figura V.1 - Representacin del anlisis de seeds respecto a la Media.

El anlisis respecto al Cuartil 1 para Unique Method, evaluando la cantidad de seeds que arroj la tcnica y calculando cuantas de estas se identificaron como parte de un crosscutting concern y cuantas como falsos positivos, se expresa en la Tabla V.3. En este caso se tiene un muestreo mayor de valores sobre el lmite del cuartil 1 que por debajo, 55 seeds contra solo 6. Este caso bajo anlisis no brinda mucha informacin, ya que como puede observarse en la Figura V.2, mayor cantidad de seeds fueron confirmadas sobre el lmite del cuartil 1 que por debajo; de igual forma ocurri

71

Anlisis Estadsticos
con los falsos positivos, ya que se encontraron mayor cantidad de ellos por encima del cuartil 1.
Seeds Confirmadas Mayores al Cuartil 1 Menores al Cuartil 1 Total Falsos Positivos

45 11 4 2 49 13 Tabla V.3 - Anlisis de seeds respecto al Cuartil 1.

Pero si se toman los valores en trminos de porcentaje, Figura V.2, se observa que existen ms seeds confirmadas por encima del lmite para el cuartil 1 (80,36%), que por debajo de l (66,67%).

100% 90% 11 2 Falsos Positivos Seeds Confirmadas

80%
70% 60% 50% 40% 30% 20% 10% 0% Mayores al Cuartil 1 45

Menores al Cuartil 1

Figura V.2 - Representacin del anlisis de seeds respecto al Cuartil 1.

El anlisis realizado para el cuartil 2 brinda resultados ms interesantes, esta medida divide la cantidad de datos a la mitad, 50% de las seeds por encima del cuartil y 50% por debajo del mismo, 31 seeds en cada caso. Con este lmite establecido en 6,917 de fan-in, por encima de l se obtuvo mayor cantidad de seeds confirmadas que de falsos positivos. En cambio por debajo de sta medida, si bien sucede la misma situacin, se nota que la diferencia es mucho menor.
Seeds Confirmadas Mayores al Cuartil 2 Menores al Cuartil 2 Total Falsos Positivos

29 2 20 11 49 13 Tabla V.4 - Anlisis de seeds respecto al Cuartil 2.

72

Anlisis Estadsticos
En la Figura V.3 se observa que por encima del cuartil 2 se obtuvieron mejores resultados en cuanto a la confirmacin de seeds. Se aprecia claramente que existen ms seeds confirmadas por sobre el lmite del cuartil 2 (29), que por debajo de l (20). Tomando estos valores en trminos de porcentaje, el 93,55% de las seeds por sobre el lmite del cuartil 2 se confirmaron, y por debajo de l, las confirmadas, fueron el 64,51% del total.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

2 11 Falsos Positivos 29 20 Seeds Confirmadas

Mayores al Cuartil 2

Menores al Cuartil 2

Figura V.3 - Representacin del anlisis de seeds respecto al Cuartil 2.

En el anlisis para el cuartil 3 presentado en la Tabla V.5, puede notarse una particularidad, a pesar de que por encima de Q3 solo hay 16 seeds contra 46 que quedaron por debajo (33 confirmadas y 13 falsos positivos), la precisin de las seeds confirmadas por sobre Q3 es optima, ya que todas las seeds se confirmaron como parte de un crosscutting concern.
Seeds Confirmadas Mayores al Cuartil 3 Menores al Cuartil 3 Total Falsos Positivos

16 0 33 13 49 13 Tabla V.5 - Anlisis de seeds respecto al Cuartil 3.

Como se observa en la Figura V.4, se puede concluir que si una seed tiene un valor de fan-in por encima del cuartil 3, es por dems probable que sea parte de un crosscutting concern, ya que tomando los valores en trminos de porcentaje, en este caso el 100% de ellas lo es, en cambio por debajo de ste lmite la probabilidad de que una seed sea confirmada es del 71,74%.

73

Anlisis Estadsticos V.1.3. Resultados de Aplicar Anlisis de Cuartiles


Los clculos de medidas de centralizacin realizados para la tcnica de Unique Methods expuestos anteriormente, se replicaron para cada una de las cinco tcnicas restantes cuyos resultados pueden verse en el Anexo II.
0 13 Falsos Positivos 16 33 Seeds Confirmadas

100% 90% 80%

70% 60% 50% 40%


30% 20% 10% 0% Mayores al Cuartil 3 Menores al Cuartil 3

Figura V.4 - Representacin del anlisis de seeds respecto al Cuartil 3.

Luego, los anlisis particulares realizados para cada tcnica, se trasladaron a clculos globales para comprobar si es posible obtener una conclusin general. Primero, de los valores obtenidos anteriormente para las cuatro medidas de centralizacin se calcularon los promedios correspondientes a los siguientes criterios sobre cada una de las seis tcnicas: Mayores o iguales a la medida de referencia que son seeds confirmadas. Menores a la medida de referencia que son seeds confirmadas. Mayores o iguales a la medida de referencia que son falsos positivos. Menores a la medida de referencia que son falsos positivos.

Con estos valores se obtuvo la Figura V.5, donde se puede ver para cada valor de referencia (Media, Cuartil 1, Cuartil 2 y Cuartil 3) los porcentajes promedio (entre las seis tcnicas) para cada uno de los cuatro criterios definidos. Aqu se puede notar, globalmente, que las seeds que se encuentran por encima de la medida de referencia, tienen mayor probabilidad de ser confirmadas que de ser falsos positivos. En cambio, cuando las seeds estn por debajo de la referencia, los promedios son menos diferenciados. 74

Anlisis Estadsticos

Figura V.5 - Porcentaje de seeds confirmadas o no, respecto a un valor de referencia.

La Figura V.5 indica por ejemplo para el primer dato desde la izquierda, que el 77,59% de las veces que una seed tenga fan-in mayor o igual a la media, entonces ser confirmada; de igual manera se interpreta el resto de la Figura. Por ltimo, un punto muy importante a destacar, es la gran precisin que poseen las seeds que se encuentran por arriba del cuartil 3, con un 79,67% de probabilidad promedio de que la seed sea parte de un crosscutting concern. Este hallazgo es destacable como un clculo muy til a la hora de utilizar una tcnica para la identificacin de crosscutting concerns en el cdigo, ya que si se toma como referencia la medida centralizada del cuartil 3, es posible asegurar que ese 25% de resultados que se encuentren por encima de Q3 tienen grandes probabilidades de ser resultados positivos y permite al desarrollador analizar una cantidad de seeds muy acotada. Ahora si se desea tener buenos resultados pero con un conjunto de seeds mayor a analizar por el desarrollador, los resultados que se obtienen por encima de la media es una mtrica muy til para considerar.

V.2. Anlisis de Outliers


Un "outlier" es un valor extremo dentro de una variable. Por ejemplo, si en una variable los sujetos puntan normalmente entre 20 y 35 puntos, el valor 80 debera ser, en principio, considerado como "sospechoso". Este tipo de valores afecta gravemente a la correlacin, sobre todo si se trabaja con muestras pequeas. La distorsin producida normalmente es aumentar de forma "espuria" el grado de relacin lineal. Este problema puede deberse desde una mala

75

Anlisis Estadsticos
introduccin de la informacin, a la mezcla de datos correspondientes a distribuciones distintas. En el siguiente anlisis se calculan los lmites inferiores y superiores para el valor de fan-in de las seeds resultantes de las tcnicas, para as identificar cuales de stas se clasifican como outliers.

V.2.1. Definicin de Outliers


John Tukey defini el BoxPlot [34, 38] como un medio para resumir visualmente las caractersticas de una muestra real, en lugar de asumir un proceso generador de datos o la forma de distribucin. El BoxPlot muestra la ubicacin central, la difusin, la asimetra y los puntos de datos extremos para la muestra objeto de investigacin. La construccin del BoxPlot es relativamente fcil, slo se necesitan unas simples estadsticas de la muestra: los cuartiles de la muestra y los valores mximo y mnimo de la misma. El BoxPlot (Figura V.6) se construye dibujando un rectngulo cuyos extremos son el primer y el tercer cuartil. El segundo cuartil, que equivale a la mediana, se representa por una lnea vertical dentro de la caja en el valor correspondiente. Los valores mximos y mnimos se representan con una "x" sobre el valor correspondiente, con una lnea de conexin que une desde la x hasta el extremo ms cercano de la caja. Adems, los limites inferior y superior se representan con lneas verticales en los valores adecuados y se dibujan en el grfico resultante. Los lmites estn diseados para indicar la presencia de outliers: valores de la muestra mayores que el lmite superior o menores que el inferior, que se consideran valores inusuales (valores que tienen una baja probabilidad de ocurrencia). Un outlier es una observacin que se desva tanto de las otras observaciones como para crear la sospecha de que fue generado por un mecanismo diferente [33].

Figura V.6 - Ejemplo de un BoxPlot.

76

Anlisis Estadsticos
Los lmites inferior y superior se construyen utilizando la regla 1,5 * IQR (Inter Quartile Range) propuesta por Tukey. El lmite inferior se calcula como Q1 - 1,5 * IQR, y el superior como Q3 + 1,5 * IQR, donde IQR se define como Q3 - Q1. Supuestamente, cuando un estudiante le pregunt Por qu 1,5?, Tukey respondi: "Porque 1 es demasiado pequeo y 2 es demasiado grande". Sin embargo, se puede demostrar en una amplia variedad de distribuciones que la regla 1,5 * IQR es razonable para determinar si un valor de la muestra es un outlier. Por ejemplo, si se considera el tipo de distribucin Gaussiana [47] con media 0 y varianza 1, para distribuciones simtricas la mediana y la media son iguales, en este caso 0, y para la distribucin normal estndar, el primer y el tercer cuartil estn dados por -0,6745 y 0,6745 respectivamente. Por lo tanto, los limites superior e inferior, 2,698 y -2,698, contienen alrededor del 99,3% de la distribucin. En otras palabras, si una muestra aleatoria es elaborada a partir de una distribucin normal estndar, se puede esperar que menos del 1% de los valores de la muestra se encuentren fuera de los lmites definidos por la regla 1,5 * IQR. Del mismo modo, para una distribucin Chi-cuadrado con 5 grados de libertad, se espera que menos del 3% de los valores de la muestra se encuentren fuera de los lmites. Si hay 20 grados de libertad, menos del 1,4% de los valores quedan fuera de los lmites [34].
Probabilidad fuera de los lmites Distribucin Standard Normal Chi-Cuadrado 5 libertad Chi-Cuadrado 20 libertad Lmite Inferior
-2,70 -3,25 2,89

Lmite Superior
2,70 12,56 36,39

Debajo del Lmite Inferior


0,004 0,000 0,000

Sobre el Lmite Superior


0,004 0,028 0,014

Total
0,007 0,028 0,014

Tabla V.6 - Comparacin de la regla 1,5 * IQR.

Si un investigador desea utilizar una regla ms conservadora, podra utilizarse para identificar los outliers la regla 3 * IQR. Utilizando sta, puede esperarse que menos de 0,00000117 de los datos estn fuera de los lmites de una distribucin standard normal. Se esperan resultados similares para las 2 distribuciones Chi-Cuadrado aqu presentadas. Mientras que la regla 1,5 * IQR (o 3 * IQR) es para algunos arbitraria, "la experiencia con muchos conjuntos de datos indica que esta definicin sirve tambin para la identificacin de outliers [34]; y aunque un procedimiento anlogo basado en la

77

Anlisis Estadsticos
media y en la desviacin estndar de la muestra, dice que se podra utilizar un intervalo de confianza de ( KS, + KS), a ste le faltara la resistencia necesaria a los outliers. Es decir, la media y la desviacin estndar de la muestra son sensibles a la presencia de un nico valor aislado. Los cuartiles, por el contrario, son resistentes a la presencia de valores con cierto grado de aislamiento. De hecho, "hasta el 25% de los valores pueden ser arbitrariamente grandes, sin perturbar en gran medida a la mediana, a los cuartiles, o a la caja rectangular en el BoxPlot" [34]. Por lo tanto, se concluye que el BoxPlot ofrece un medio razonable para la identificacin de valores poco comunes, valores que tienen una baja probabilidad de ocurrencia.
Probabilidad fuera de los lmites Distribucin Standard Normal Chi-Cuadrado 5 libertad Chi-Cuadrado 20 libertad Lmite Inferior
-4,72 -9,18 9,68

Lmite Superior
4,72 18,48 48,96

Debajo del Lmite Inferior


1,17E-6 0,000 0,000

Sobre el Lmite Superior


1,17E-6 2,40E-3 3,12E-4

Total
2,34E-6 2,40E-3 3,12E-4

Tabla V.7 - Comparacin de la regla 3 * IQR.

Una observacin es declarada outlier si cae fuera del intervalo ( KS,

+ KS) donde:

es la media, S la desviacin estndar del conjunto de datos, y donde el valor de K es usualmente tomado como 2 (o 3). La justificacin de estos valores descansa en el hecho que asumiendo una distribucin normal, se espera que el 95,45% (99,75% respectivamente) de los datos caiga en el intervalo centrado en la media y con semilongitud igual a 2 (3 respectivamente) desviaciones estndar.

V.2.2. Clculo de Outliers en el Caso de Estudio


La intencin del anlisis de outliers aplicado a los resultados de las tcnicas de aspect mining analizadas anteriormente, es determinar si los lmites outliers permiten identificar una frontera a partir de la cual obtener la mejor calidad de seeds. En principio se calcularon (como se describi en la seccin V.2.1) los valores lmites de los outliers para cada tcnica. Se toma como ejemplo el BoxPlot generado para la tcnica Fan-In Analysis, Figura V.7. Los diagramas tanto ste como el del resto de las tcnicas se pueden encontrar en el Anexo II.

78

Anlisis Estadsticos

Figura V.7 - Boxplot para Fan-In Analysis.

En la Tabla V.8 se expresan los valores de outliers normales y extremos para cada una de las seis tcnicas de aspect mining bajo estudio.
Execution Relations Outside Before
-8,5625 18,5625

Unique Method
Outliers Normales Lmite Inferior Limite Superior Outliers Extremos Lmite Inferior Limite Superior
-16,3750 26,3750 -5,6875 15,6875

Outside After
-3,7188 12,9688

Inside First
-5,0625 15,3125

Inside Last
-3,8542 15,2708

Fan-In Analysis

-48,7292 69,1458

-22,1250 32,1250

-12,0625 21,3125

-15,2500 25,5000

-13,4167 24,8333

-107,6667 128,0833

Tabla V.8 - Lmites de los Outliers Inferiores y Superiores para cada tcnica.

En el caso de estudio, no aplican los valores negativos de los outliers, dado que no existe la posibilidad de que una seed tenga fan-in negativo, aunque igualmente se realizaron los clculos para obtenerlos. Con los lmites definidos, todas las seeds arrojadas por cada una de las seis tcnicas, se estudiaron para identificar cules son las que corresponden con la definicin de outliers, ya sea positivo como negativo (aunque como se dijo anteriormente, esto nunca ocurre en el caso de estudio analizado), tambin si es extremo normal o superior, o si directamente no es outlier. De ste anlisis se hizo el recuento para cada tcnica, arrojando los siguientes resultados expresados en la Tabla V.9:
Tcnica Tipo de Outlier Normales superiores Extremos superiores Execution Relations Outside Before 9 4 Outside After 7 6 Inside First 12 11 Inside Last 11 7

Unique Method 12 6

Fan-In Analysis 38 14

Totales 89 48

Tabla V.9 - Cantidad de Outliers por tipo y por tcnica.

79

Anlisis Estadsticos
Como puede observarse en la Tabla V.9, la tcnica Fan-In Analysis fue la que mas outliers normales y superiores arroj, esto se debe a la simple razn de que la tcnica en s, identific muchas mas seeds que el resto por las caractersticas que ella posee (descriptas en el captulo 3), ya que tiene menos restricciones para la identificacin de seeds y por lo tanto se obtiene una mayor cantidad de resultados. Con las seeds identificadas como outliers, a partir de los resultados de cada tcnica, se estudi cuantos de ellas son seeds confirmadas y cuantas falsos positivos. A modo de ejemplo se presentan los resultados del anlisis de outliers para Fan-In Analysis, los resultados particulares para el resto de las tcnicas se pueden observar en el Anexo II. Se expresa en la Tabla V.10 el anlisis de las seeds identificadas como outliers para Fan-In Analysis, evaluando cuntas de estas se identificaron como parte de un crosscutting concern y cuantos fueron falsos positivos.
Seeds Confirmadas Mayores o iguales al Lmite Superior Normal Menores al Lmite Superior Normal Total
33 97

Falsos Positivos
5 71

130 76 Tabla V.10 - Anlisis de seeds respecto al lmite superior normal.

En la Tabla V.10 se puede ver que de las 38 seeds que superan el valor del lmite superior normal, 33 fueron confirmadas y de las 168 que quedaron por debajo de ste lmite, a pesar de que hay mayor cantidad de seeds confirmadas, 97, la precisin en trminos de porcentaje, es menor. Esta situacin puede observarse ms claramente en la Figura V.8.

Figura V.8 - Representacin del anlisis de seeds respecto al lmite superior normal.

80

Anlisis Estadsticos
Esta situacin denota que las seeds que se encuentran por encima del limite superior normal de outliers, da un subconjunto de resultados acotado con una gran probabilidad de que estas seeds sean parte de un crosscutting concern. El anlisis respecto al lmite superior extremo tambin di buenos resultados para el caso de Fan-In Analysis como se puede notar en la Tabla V.11. Las seeds que se encuentran sobre el lmite son solo 14 contra 192 que se encuentran por debajo de ste.
Seeds Confirmadas Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo Total
12 118

Falsos Positivos
2 74

130 76 Tabla V.11 - Anlisis de seeds respecto al lmite superior extremo.

En este caso podemos notar que se mantiene el mismo comportamiento que para el lmite superior normal pero con menor cantidad de seeds por encima del lmite superior extremo. En la Figura V.9 se puede observar que las seeds por encima del lmite tienen mayor calidad respecto a las que se encuentran por debajo.

Figura V.9 - Representacin del anlisis de seeds respecto al lmite superior extremo.

V.2.3. Resultados de Aplicar Anlisis de Outliers


De todas las seeds consideradas como outliers, se realizaron los clculos globales para verificar cuan til es aplicar este anlisis con el objetivo de obtener la mayor cantidad de seeds confirmadas sin la intervencin del usuario. 81

Anlisis Estadsticos
Al igual que para las medidas de centralizacin, de los valores obtenidos para los lmites de outliers normales y extremos, se calcularon los promedios correspondiente a los siguientes criterios sobre cada una de las seis tcnicas: Mayores o iguales al outlier normal que son seeds confirmadas. Menores al outlier normal que son seeds confirmadas. Mayores o iguales al outlier extremo que son falsos positivos. Menores al outlier extremo que son falsos positivos.

Con estos valores se obtuvo la Figura V.10, donde se puede ver para cada tipo de outlier, los porcentajes promedio (entre las seis tcnicas) para cada uno de los cuatro criterios definidos.

Figura V.10 - Porcentaje de seeds confirmadas o no, respecto a un valor outlier de referencia.

Aqu se puede observar, globalmente, que las seeds que se encuentran por encima de la medida de referencia, tienen mayor probabilidad de ser confirmadas que de ser falsos positivos. En cambio, cuando las seeds estn por debajo de la referencia, los promedios son menos diferenciados. La Figura V.10 indica por ejemplo para el primer dato desde la izquierda, que el 81,34% de las veces que una seed tenga fan-in mayor o igual al lmite superior normal, entonces ser confirmada. O que el 78,62% (segunda barra desde la izquierda) de las veces que una seed tenga fan-in mayor o igual al lmite superior extremo ser parte de algn crosscutting concern.

82

Anlisis Estadsticos
Observando los resultados para ambos lmites, es posible determinar que por encima del lmite normal existen muchas mas seeds que por sobre el extremo, y adems, el primero posee mejor precisin en sus resultados. Por lo tanto, con el objetivo de ayudar al desarrollador en el anlisis de las seeds arrojadas por una tcnica de aspect mining, la utilizacin del limite superior normal de outliers para acotar el nmero de seeds generadas es una medida mas que suficiente, no solo por la calidad de las seeds que agrupa sino tambin por la cantidad de estas que son confirmadas, ya que el lmite superior extremo acota mucho mas la cantidad de seeds que identifica, pero no aporta mayor calidad a los resultados. Sin embargo, cabe aclarar que las generalizaciones obtenidas a partir de este caso de estudio debern ser replicadas y validadas en otros casos de estudio, los cuales estn fuera del alcance de este trabajo.

V.3. Anlisis de CCC en GridGain


Luego de los anlisis anteriores aplicados a las seis versiones de GridGain, se investig en profundidad la versin 2.1.1 (ultima versin de la aplicacin tomada bajo anlisis) en busca de los CCC presentes en el sistema. Se revisaron todas las seeds halladas para la versin y se obtuvieron 10 CCC los cuales se describen a continuacin:

Logging: Se refiere a la idea de registrar las actividades que realiza un sistema. Uno de los principales beneficios del uso del logging, es la capacidad de recopilar datos de forma automtica. Se utilizan para medir y registrar la informacin, permitiendo una visin completa y precisa de las condiciones y estado del sistema [56]. Synchronization: Hace referencia al manejo de la sincronizacin de procesos, con el fin de controlar los accesos y evitar esperas infinitas para la utilizacin de los recursos. [48] Timing: Se realiza un control del tiempo que funciona cada SPI (Service Provider Interfaces) dentro de GridGain. Observer: Define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos los objetos dependientes. Persistence: Se refiere a la propiedad de los datos para que estos sobrevivan a la ejecucin del programa que los ha creado. [53]

83

Anlisis Estadsticos

Marshalling: Es el proceso por el cual debe pasar toda informacin para que sta sea utilizable en ambientes heterogneos. Security: En GridGain, se aplica este concern especficamente al manejo de los passwords de manera segura. Application Properties: Archivos de propiedades, es la forma en que una aplicacin puede utilizar objetos para mantener su configuracin. El System mantiene un objeto de la clase Properties para describir la configuracin del entorno de trabajo actual. Entre las propiedades del sistema se incluye informacin sobre el usuario actual, el sistema sobre el cual se encuentra corriendo la aplicacin, el carcter utilizado para separar componentes de un nombre de ruta del archivo, etc. Data Validation: Es el proceso de asegurar que el programa opera con datos limpios, correctos y tiles. Se utilizan rutinas, comnmente llamadas "reglas de validacin" o "rutinas de control", que comprueban la exactitud y la seguridad de los datos que se introducen en el sistema [52]. MBean Registration: Un MBean es un objeto que implementa una interface estndar y sigue los patrones de diseo asociados al mismo. Un MBean expondr todos los mtodos y propiedades que considere necesarios para un determinado recurso, a travs de los mtodos set* y get*. Para acceder a l, un MBean debe estar registrado en un servidor de MBeans con un nombre nico.

V.4. Conclusin
La motivacin del presente captulo fue buscar parmetros que permitan acotar el nmero de resultados arrojados por las tcnicas con el objetivo de obtener resultados con la mejor calidad posible. Donde calidad hace referencia a la idea de que los resultados tengan una mayor probabilidad de que sean identificados como seeds confirmadas por el usuario encargado de evaluarlos. El primer estudio realizado se bas en las medidas de centralizacin, definiendo la distribucin de las seeds en base a los cuartiles. En este estudio se pudo determinar que las seeds que se encuentran por encima del cuartil 3, tienen una gran probabilidad de ser seeds confirmadas y puedan ser parte de algn crosscutting concern. Lo mismo ocurri con el segundo estudio fundamentado en outliers, que se encarga de obtener los valores extremos de una variable (en este caso el fan-in de las seeds arrojado por las tcnicas). El anlisis permiti validar tambin que la mayora de las seeds que alcanzan a la definicin de outliers son seeds confirmadas que pueden pertenecer a un crosscutting concern. 84

Anlisis Estadsticos
Por lo tanto, estos dos estudios permiten determinar que es posible agregar medidas estadsticas a los clculos arrojados por una tcnica de aspect mining y brindarle as un subconjunto acotado de resultados al encargado de evaluar las seeds. Esto no significa que el desarrollador deba desentenderse del anlisis del resto de las seeds arrojadas por una tcnica, sin embargo, estas mtricas le pueden brindar una ayuda para simplificar el trabajo y as tener la certeza de que se va a encontrar con seeds que seguramente sean confirmadas, y que permitan dar indicios rpidamente de crosscutting concerns existentes en el sistema. Por ltimo, vale destacar que las generalizaciones obtenidas a partir de este caso de estudio debern ser replicadas y validadas en otros casos de estudio, los cuales estn fuera del alcance de este trabajo. Los resultados obtenidos en este trabajo sirven como una base para futuros trabajos en aplicacin de estudios estadsticos sobre tcnicas de aspect mining o de ingeniera reversa en general.

85

Captulo 6 Caso de Estudio

En el presente captulo se brinda un estudio de los cambios sufridos por los diferentes crosscutting concerns en las distintas versiones de GridGain. Para esto se tomaron las seeds obtenidas como resultado de la ejecucin de todas las tcnicas analizadas en los captulos anteriores, y se revisaron en la bsqueda de los crosscutting concerns que representan. Luego, se realiz un estudio de stos durante las diferentes versiones del cdigo de GridGain tomadas bajo anlisis en este trabajo para as poder ver el comportamiento de estas funcionalidades transversales a lo largo del tiempo y comparar el costo que agrega a un sistema un crosscutting concern.

VI.1. Crosscutting Concerns Tpicos en Sistemas en Produccin


Un crosscutting concern es aquel que por su naturaleza no puede ser completamente modularizado dada la descomposicin actual del sistema o el lenguaje de programacin utilizado. Como resultado, se obtiene cdigo disperso, ya que el concern en cuestin no se encuentra en un solo lugar (mdulo), y cdigo enredado, porque el cdigo de los mdulos afectados adems contiene fragmentos del crosscutting concern. El cdigo de concerns como logging, synchronization y persistence, suele aparecer mezclado con cdigo de concerns de base [10]. De todos los crosscutting concerns identificados en GridGain, se analizarn con ms detalle los siguientes: Logging Data Validation Synchronization

El propsito de este anlisis en profundidad sobre estos 3 CCC, es analizar su complejidad y como fueron evolucionando durante las versiones del sistema.

86

Caso de Estudio
A continuacin, se presentan las mtricas que fueron aplicadas a las seeds y permitieron descubrir estos concerns (VI.2), para luego describir los resultados de su aplicacin (VI.3, VI.4 y VI.5).

VI.2. Mtricas a Aplicar


Los crosscutting concerns obtenidos del cdigo de GridGain sern evaluados con distintas mtricas sobre las seis versiones bajo estudio. Las mtricas elegidas tienen la particularidad de ser mtricas a nivel mtodo, esto permite obtener un valor por cada seed perteneciente al crosscutting concern y con estos valores obtener un promedio de la mtrica para todas las seeds dando una idea general para todo el crosscutting concern. Estos estudios se realizaron con el objeto de estudiar analticamente cun disperso se encuentra el crosscutting concern y cun complejo es el cdigo de las seeds pertenecientes a l. A continuacin se presentar una breve descripcin de cada mtrica a aplicar. Los resultados completos pueden observarse en el Anexo III.

VI.2.1.

Tendencia del Fan-in Promedio

El fan-in de un mtodo es un conteo del nmero de flujos de datos locales que entran en el mismo, ms el nmero de estructuras de datos desde los cuales el procedimiento recupera informacin. Henry y Kafura [57] sostienen que estas mtricas son tiles para poder identificar componentes o sectores del programa, conflictivos o complejos, donde existe un excesivo flujo de informacin.

VI.2.2.

CC (Ciclomatic Complexity)

Esta mtrica se deriva del grafo de flujo de control de un programa y mide el nmero de caminos independientes a travs del mismo. Adems, es un indicativo de la complejidad y la facilidad de testing (testeability) de un programa. Tambin es usada como un mtodo de evaluacin de la completitud del testing de las sentencias de un programa. Esta mtrica se utiliza (entre otras aplicaciones tiles) para realizar anlisis de riesgo de cambio durante la fase de mantenimiento. La complejidad del cdigo tiende a incrementarse a medida que es mantenido durante el tiempo. Midiendo la

87

Caso de Estudio
complejidad antes y despus de un cambio propuesto, puede ayudar a decidir cmo minimizar el riesgo del cambio [58].

VI.2.3.

NCSS (Non Commenting Source Statements)

La mtrica NCSS se calcula contando el nmero de las lneas que no son comentarios. El NCSS para una clase es un resumen del NCSS de todos sus mtodos, el NCSS de sus clases anidadas y el nmero de declaraciones de variables locales. Los mtodos demasiado grandes y las clases difciles de leer, son costosas de mantener. Un gran nmero de NCSS a menudo significa que un mtodo o una clase tiene demasiadas responsabilidades y / o funcionalidades que debieran ser descompuestas en unidades ms pequeas [60].

VI.2.4.

NLS (Number of Locals in Scope)

Esta mtrica sirve como indicador del nmero de variables locales a un mtodo. La idea de esta mtrica, es que un gran nmero de variables locales incrementa la complejidad y reduce la comprensibilidad del cdigo. En estas situaciones, el mtodo podra ser descompuesto en otros mtodos ms pequeos, o se debera extraer la complejidad en un nuevo objeto [59].

VI.2.5.

NOL (Number of Levels)

Esta mtrica, es una medida que indica el nmero mximo de niveles de anidamiento en un mtodo. La intencin de sta, es que un gran nmero de niveles aumenta la complejidad y reduce la comprensibilidad generando confusin [59].

VI.3. Crosscutting Concern de Logging


La tcnica de fan-in entre todos los resultados que arroj para el cdigo de GridGain, detect 48 seeds que permitieron reconocer fcilmente el crosscutting concern de Logging por las clases que definen los mtodos y el nombre de los mismos. A continuacin, se muestra en la Tabla VI.1 el fan-in de cada una de las seeds correspondientes a este crosscutting concern. De la Tabla VI.1 se realizar un estudio de la tendencia general del crosscutting concern de logging respecto al fan-in y adems

88

Caso de Estudio
se aplicarn mtricas que den una idea de la complejidad de cada mtodo involucrado en las distintas versiones de GridGain evaluadas. Seeds del CCC de logging 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
249 249 249 249 249 249 249 249 249 249 138 138 138 138 138 136 136 136 136 136 119 119 119 119 119 96 96 96 96 96 24 24 24 24 24 23 23 23 23 23 13 13 13 13 13 240 240 240 240 240 240 240 240 240 240 133 133 133 133 133 131 131 131 131 131 115 115 115 115 115 93 93 93 93 93 24 24 24 24 24 23 23 23 23 23 12 12 12 12 12

GridLog4jLogger.debug(String) 136 146 186 188 GridJclLogger.debug(String) 136 146 186 188 GridJbossLogger.debug(String) 136 146 186 188 GridJavaLogger.debug(String) 136 146 186 188 GridLogger.debug(String) 136 146 186 188 GridLog4jLogger.isDebugEnabled() 136 146 186 188 GridJclLogger.isDebugEnabled() 136 146 186 188 GridJbossLogger.isDebugEnabled() 136 146 186 188 GridJavaLogger.isDebugEnabled() 136 146 186 188 GridLogger.isDebugEnabled() 136 146 186 188 GridLog4jLogger.info(String) 84 90 110 115 GridJclLogger.info(String) 84 90 110 115 GridJbossLogger.info(String) 84 90 110 115 GridJavaLogger.info(String) 84 90 110 115 GridLogger.info(String) 84 90 110 115 GridLog4jLogger.isInfoEnabled() 84 90 110 115 GridJclLogger.isInfoEnabled() 84 90 110 115 GridJbossLogger.isInfoEnabled() 84 90 110 115 GridJavaLogger.isInfoEnabled() 84 90 110 115 GridLogger.isInfoEnabled() 84 90 110 115 GridLog4jLogger.error(String, Throwable) 80 84 95 98 GridJclLogger.error(String, Throwable) 80 84 95 98 GridJbossLogger.error(String, Throwable ) 80 84 95 98 GridJavaLogger.error(String, Throwable) 80 84 95 98 GridLogger.error(String, Throwable) 80 84 95 98 GridLog4jLogger.warning(String) 51 56 69 72 GridJclLogger.warning(String) 51 56 69 72 GridJbossLogger.warning(String) 51 56 69 72 GridJavaLogger.warning(String) 51 56 69 72 GridLogger.warning(String) 51 56 69 72 GridLog4jLogger.getLogger(Object) 17 17 17 17 GridJclLogger.getLogger(Object) 17 17 17 17 GridJbossLogger.getLogger(Object) 17 17 17 17 GridJavaLogger.getLogger(Object) 17 17 17 17 GridLogger.getLogger(Object) 17 17 17 17 GridLog4jLogger.error(String) 15 15 17 18 GridJclLogger.error(String) 15 15 17 18 GridJbossLogger.error(String) 15 15 17 18 GridJavaLogger.error(String) 15 15 17 18 GridLogger.error(String) 15 15 17 18 GridLog4jLogger.warning(String, Throwable) 9 9 7 7 GridJclLogger.warning(String, Throwable) 9 9 7 7 GridJbossLogger.warning(String, Throwable) 9 9 7 7 GridJavaLogger.warning(String, Throwable) 9 9 7 7 GridLogger.warning(String, Throwable) 9 9 7 7 Tabla VI.1 - Fan-in para las seeds del CCC de Logging.

89

Caso de Estudio VI.3.1. Tendencia del Crosscutting Concern Logging

En la Tabla VI.1 se puede observar que para la mayora de las seeds a medida que el cdigo va evolucionando y aumentando su funcionalidad de versin a versin, el fan-in va aumentando, esto es natural ya que cada vez ms funcionalidad es la que desea dejar registros en los logs de la aplicacin y eso produce que se registren ms llamadas a esos mtodos. En la Figura VI.1, se presenta el comportamiento del concern en relacin al fan-in promedio a lo largo de las 6 versiones analizadas.
120
110 100 Fan-in 90 promedio 80 70 60 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1 Versiones de GridGain Figura VI.1 - Tendencia del CCC de Logging.

Observando la Figura VI.1, la cantidad de llamados a los mtodos de ste concern fue creciendo de versin en versin, pero en la ltima considerada en el anlisis, la tendencia de todas las seeds hace que se reduzca la cantidad de llamados que se hacen al crosscutting concern de Logging. Esto ocurre ya que la versin 2.1.1 corresponde a una versin de estabilidad que no agrega nueva funcionalidad, solamente realiza optimizaciones y correcciones en el cdigo general de GridGain.

VI.3.2.

Anlisis General de Mtricas por Mtodos

Para realizar una medicin analtica de la complejidad que el crosscutting concern de logging pudo sufrir en el transcurso de las seis versiones de GridGain, se presentan en la Tabla VI.2 los resultados promedio de aplicar las mtricas sobre ste. De los resultados obtenidos para cada mtrica sobre las distintas versiones de GridGain, se nota que el cdigo no ha sufrido alteraciones y adems en trminos de complejidad los valores de las mtricas son muy bajos. Esto significa que el logging es 90

Caso de Estudio
una funcionalidad que, prcticamente, no ha sufrido modificaciones en su cdigo, y que en general, los mtodos son simples en su estructura interna.
GridGain v1.5 v1.6 v2.0.0 v2.0.2 v2.1.0 v2.1.1 CC
0,844 0,844 0,844 0,844 0,844

NCSS
1,97777778 1,97777778 1,97777778 1,97777778 1,97777778

NLS
0 0 0 0 0

NOL
0,8 0,8 0,8 0,8 0,8 0,8

0,844 1,97777778 0 Tabla VI.2 - Mtricas del CCC de Logging.

VI.3.3. Anlisis de Resultados para el Crosscutting Concern de Logging


De los dos estudios analizados anteriormente, las mtricas que denotan complejidad demuestran que el crosscutting concern de logging no sufri modificaciones en el tiempo, su complejidad y mantenibilidad se mantuvo estable desde la primera versin bajo anlisis hasta la ltima. Sin embargo, evaluando la tendencia del fan-in del crosscutting concern, se observa que fue cada vez ms utilizado en todo el cdigo de GridGain haciendo que una modificacin en los mtodos del logging, por ms simple que la misma sea, tiene un impacto cada vez mayor en las versiones ms nuevas. Esto requiere que cada vez que se deba realizar un cambio en ste, deba analizarse de forma ms cuidadosa todo el cdigo para evitar problemas en la siguiente versin.

VI.4. Crosscutting Concern de Data Validation


En esta seccin se analizan las seeds identificadas como pertenecientes al crosscutting concern de Data Validation. La funcin principal de los mtodos de data validation es realizar chequeos de parmetros contra null o contra un rango como precondiciones para la ejecucin de alguna funcionalidad determinada en el cdigo. En la Tabla VI.3 puede observarse el fan-in de estas seeds en cada una de las versiones estudiadas. Seeds del CCC de Data Validation 1.5.0 1.6.0 2.0.0 2.0.2
65 30 16

2.1.0
76 33 19

2.1.1
76 31 19

GridArgumentCheck.checkNull(Object, String) 33 37 62 GridSpiAdapter.assertParameter(Boolean, String) 24 24 30 GridArgumentCheck.checkRange(Boolean, String) 9 11 16 Tabla VI.3 - Fan-in para las seeds del CCC Data Validation.

91

Caso de Estudio

VI.4.1.

Tendencia del Crosscutting Concern Data Validation

La tendencia del CC respecto al valor de fan-in, al igual que en el caso estudiado anteriormente, va en aumento de versin en versin. Esto se debe al incremento de funcionalidad que cada versin agrega, haciendo que el concern de Data Validation siga dispersndose en el cdigo de GridGain. En la figura VI.2 se grafica sta tendencia tomando en cuenta el valor de fan-in promedio de las seeds para cada versin. Si se observa con detenimiento la figura, el mayor crecimiento de los llamados al CC se da en el upgrade comprendido entre la v1.6.0 y la v2.0.0. Observando el cdigo, se identific que en la clase GridManagerAdapter en la v2.0.0 se realiz la implementacin de mtodos que realizan diversos chequeos por null. Es aqu donde se realizan llamados a las seeds de Data Validation para el chequeo de condiciones. Esto increment el fan-in de la seed checkNull() en 16, haciendo que la tendencia del CC en el upgrade a la versin 2.0.0 aumente notoriamente ms que en el resto de los upgrades. Idntica situacin a la presentada para el concern de logging se da en este caso para la versin 2.1.1, donde el fan-in tambin disminuye por ser una versin correspondiente a la realizacin de un refactoring de mantenimiento.
45 40 35 Fan-in 30 promedio 25 20 15 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1 Versiones de GridGain Figura VI.2 - Tendencia del CCC de Data Validation.

VI.4.2.

Anlisis General de Mtricas por Mtodos

Al realizar una medicin analtica de la complejidad del crosscutting concern de Data Validation en el transcurso de las seis versiones de GridGain, se obtuvieron los siguientes resultados expresados en la Tabla VI.4.

92

Caso de Estudio

GridGain v1.5 v1.6 v2.0.0 v2.0.2 v2.1.0 v2.1.1

CC
2 2 2 2 2 2

NCSS
3 3 3 3 3 3

NLS
0 0 0 0 0 0

NOL
2 2 2 2 2 2

Tabla VI.4 - Mtricas del CCC de Data Validation.

Al observar la Tabla VI.4 se puede advertir que en las 6 versiones de GridGain los valores de cada mtrica no sufrieron alteraciones. Esto demuestra que los mtodos afectados al crosscutting concern no tuvieron modificaciones en el tiempo. Esta situacin es comprensible, ya que ste tipo de mtodos no debieran tener otro rol que el de chequear la condicin para el que fueron creados, a lo sumo pueden sufrir una modificacin en la condicin misma, pero sto no tiene porque afectar a la complejidad del cdigo del mismo, por lo que no se vera reflejado en las mtricas utilizadas. Haciendo referencia a la complejidad que el crosscutting concern posee en su cdigo, puede verse que los valores promedio de cada mtrica son muy bajos. Las mtricas Ciclomatic Complexity y Number of Levels indican que los mtodos tienen el mnimo de bifurcaciones; la mtrica NCSS indica que no sobrepasan las 3 sentencias de cdigo, lo que demuestra que la cantidad de cdigo que poseen es muy baja, dando una idea de la simplicidad de las seeds; la mtrica NLS da 0 en todas las versiones, por lo que los mtodos no poseen variables locales. Todo esto aporta claros indicios de que se est ante un crosscutting concern relativamente sencillo de mantener.

VI.4.3. Anlisis de Resultados para el Crosscutting Concern de Data Validation


Este crosscutting concern de Data Validation es muy pequeo ya que solo est compuesto por 3 seeds. Segn las mtricas analizadas, es posible ver que el mismo se utiliza cada vez ms en cada nueva versin, haciendo que una modificacin en el concern tenga mayor impacto en distintas partes del cdigo, teniendo que evaluar el riesgo que se pueda generar donde los mtodos sean utilizados. Sin embargo, las mtricas recolectadas sobre las 6 versiones bajo estudio dejaron como conclusin que las seeds no poseen una complejidad que dificulte la mantenibilidad del cdigo, y adems comparando los resultados en las distintas versiones es posible ver que no se realizaron modificaciones en el cdigo que hayan requerido trabajo para el 93

Caso de Estudio
mantenimiento de ste crosscutting concern. Podra afirmarse, a su vez, que la creacin de test de unidad para estos mtodos sera una tarea muy sencilla, la cul producira grandes ganancias al asegurar que ningn cambio rompa el contrato de estos con el resto de la aplicacin.

VI.5. Crosscutting Concern Synchronization


Al analizar el cdigo de GridGain, se detectaron 18 seeds que dieron indicios de la presencia del crosscutting concern Synchronization, ya que en todas ellas se emplea el uso de semforos de sincronizacin. Se muestra en la Tabla VI.5 el valor de fan-in de cada una de las seeds correspondiente al crosscutting concern, en cada una de las versiones del sistema analizadas. Seeds del CCC Synchronization 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
29 29 11 (4) 10 10 10 10 10 10 10 (3) 20 4 5 (4) 29 29 11 (4) 9 9 9 9 9 9 9 (3) 18 4 5 (4)

GridKernal.beforeCall() 22 24 26 26 GridKernal.afterCall() 22 24 26 26 GridCommunicationManager.addMessageLis 8 9 10 10 tener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, 5 (3) (3) (4) GridException, boolean) GridJobProcessor.JobExecutionListener.onM 7 7 7 essage(UUID, Serializable) GridEventStorageManager.RequestListener. 7 7 7 onMessage(UUID, Serializable) GridTaskProcessor.JobMessageListener.onM 7 7 7 essage(UUID, Serializable) GridMessageListener.onMessage(UUID, 8 7 7 7 Serializable) GridJobProcessor.JobCancelListener.onMess 8 7 7 7 age(UUID, Serializable) GridJobProcessor.JobSessionListener.onMes 8 7 7 7 sage(UUID, Serializable) GridCheckpointManager.CheckpointRequest 8 7 7 7 Listener.onMessage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() 5 (3) (3) (3) GridDiscoverySpi.getRemoteNodes() 18 18 17 17 GridJobWorker.cancel() 10 6 5 4 GridCommunicationManager.removeMessa (3) 5 6 6 geListener(String, GridMessageListener) GridCommunicationManager.addMessageLis (2) (3) 5 5 tener(String, GridMessageListener) Tabla VI.5 - Fan-in para las seeds del CC Synchronization.

De las seeds reconocidas como pertenecientes al crosscutting concern synchronization solo tres de ellas poseen valores de fan-in mayores a 15 en todas las versiones bajo anlisis, el resto de las seeds poseen valores relativamente bajos y en algunos casos no 94

Caso de Estudio
llegan a alcanzar el lmite inferior de 5 para la mtrica de fan-in, pero de todas formas se toman en cuenta ya que la idea es estudiar el comportamiento del crosscutting concern en general.

VI.5.1.

Tendencia del Crosscutting Concern Synchronization

Realizando un estudio del promedio de los valores de fan-in para todas las seeds consideradas en el crosscutting concern, se puede observar en la Figura VI.3 que la tendencia del mismo es siempre es creciente, aunque ste incremento no sea en gran medida (comparando los valores de fan-in de versin en versin). En el upgrade de la v2.0.0 a la v2.0.2 la tendencia se mantuvo estable, esta situacin, segn la informacin de la v2.0.2 de GridGain, corresponde a una versin de correccin de errores y mejoras en la documentacin. En tanto, en la ltima versin considerada en el anlisis, se observa, al igual que en los anteriores concerns, que la tendencia del crosscutting concern disminuye, debido a que la v2.1.1 de GridGain es una versin de estabilidad, que al no agregar funcionalidad, los valores de fan-in en general se mantienen o disminuyen, ya sea por mejoras u optimizaciones aplicadas sobre el cdigo.
12 11,5 11

10,5
10 Fan-in promedio 9,5 9 8,5 8 7,5 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1 Versiones de GridGain Figura VI.3 - Tendencia del CCC Synchronization.

VI.5.2.

Anlisis General de Mtricas por Mtodos

En est seccin se realizar una medicin analtica de la complejidad que el crosscutting concern synchronization posee en las seis versiones de GridGain. Los resultados obtenidos para cada mtrica se pueden observar en la Tabla VI.6. 95

Caso de Estudio

GridGain v1.5 v1.6 v2.0.0 v2.0.2 v2.1.0 v2.1.1

CC
3,6 5,2 5,933 6,066 7

NCSS
12,333 19,4 21,2 21 25,933

NLS
0,625 0,937 1 1 2,375

NOL
2,312 3,125 3,312 3,375 3,562 3,437

6,6 25,933 2,375 Tabla VI.6 - Mtricas del CCC Synchronization.

Observando los resultados obtenidos para cada mtrica sobre las distintas versiones de GridGain, se pueden ver las variaciones en los valores a travs del tiempo. A continuacin se dar una revisin grafica de algunas de ellas.
28 26 24 22 20 18 16 14 12 1.5 1.6 2.0 2.0.2 2.1.0 2.1.1 Figura VI.4 - Mtrica NCSS del CCC Synchronization. NCSS

Teniendo en cuenta la mtrica NCSS para los mtodos considerados como seeds, la Figura VI.4 permite observar que el cdigo dentro de las seeds fue creciendo de versin en versin, excepto en las que correspondieron a mantenimiento o mejoras del cdigo, por ejemplo: v2.0.2 y v2.1.1. Esto significa que las seeds pertenecientes al crosscutting sufrieron transformaciones en el cdigo en el transcurso de las versiones. Es posible ver que la mtrica aumenta de un valor de 12 en la v1.5.0 a un valor de 26 en la 2.1.1, si tomamos en cuenta que en general un mtodo java no debiera tener ms de 10 lneas de cdigo para que ste sea legible y evite realizar ms tareas que para la cual fue creado, la mtrica demuestra que el cdigo del crosscutting concern es complejo de mantener ya que un mtodo que posee 12 sentencias es complejo y si consideramos que ese promedio aumenta hasta un valor de 26, estamos frente a un

96

Caso de Estudio
crosscutting concern que en el transcurso del tiempo su cdigo se fue haciendo ms difcil de mantener.
7,5

7
6,5 6 5,5 5 4,5 4 3,5 3 1.5 1.6 2.0 2.0.2 2.1.0 2.1.1 Figura VI.5 - Mtrica CC del CCC de Synchronization. CC

La Figura VI.5 grafica los valores obtenidos para la mtrica Ciclomatic Complexity en las seis versiones de GridGain, donde se puede ver que ste valor empieza en 3,6 en la v1.5 y termina en 6,6 en la v2.1.1, pasando por un pico de 7 en la v2.1.0. ste anlisis da indicios de que las seeds afectadas al crosscutting concern se volvieron ms complejas ya que el nmero de caminos independientes en cada mtodo aumento al doble, haciendo que el concern sea ms difcil de mantener ante los cambios. Analizando las ltimas mtricas de la Tabla VI.6, NLS (Number of Locals in Scope) y NOL (Number of Levels), se puede ver que tienen comportamiento anlogo a las dos anteriores, dando indicios de que el cdigo involucrado en las seeds del crosscutting concern se volvi cada vez ms complejo.

VI.5.3. Anlisis de Resultados para el Crosscutting Concern de Synchronization


Este crosscutting concern est compuesto por 18 seeds que presentan caractersticas de sincronizacin. Las mtricas analizadas permitieron ver, en el caso de la tendencia del fan-in, que el crosscutting concern fue cada vez ms utilizado de versin en versin, aunque ste aumento en la mtrica no fue significativo para considerar que el cdigo se dispers ms en cada nueva versin ya que el aumento entre la primera y la ltima fue de solo 3 puntos habiendo pasado seis versiones, lo que deja en claro que el aumento en la utilizacin del crosscutting fue muy bajo. En cuanto al cdigo que afecta 97

Caso de Estudio
al crosscutting concern, las mtricas demostraron que el cdigo de las seeds es complejo de mantener y adems fue aumentando de versin en versin, lo que provoca que un cambio en el cdigo sea complicado de realizar tanto por la complejidad del propio mtodo como de las llamadas que se realizan a cada seed.

VI.6. Conclusin
En ste captulo se realiz un estudio de tres diferentes crosscutting concerns identificados a partir de las seeds arrojadas por las tcnicas de aspect mining aplicadas en el cdigo de GridGain. Se aplicaron diversas mtricas sobre ellas para permitir evaluar analticamente dispersin y complejidad en el cdigo en el transcurso de las seis versiones de GridGain, con la intencin de saber si ste se fue haciendo ms difcil de mantener por un crecimiento en la funcionalidad del mismo que increment la dispersin por aumentar la cantidad de llamadas que se hacen desde otras partes, o porque el cdigo interno de cada seed sufri transformaciones que lo hicieron ms complejo y difcil de mantener. Como resultado de estos estudios se pudo observar que los tres crosscutting concerns poseen una tendencia creciente en el estudio del fan-in promedio de sus respectivas seeds. En el caso de los crosscutting concerns de Logging y Data Validation, el aumento en el fan-in promedio fue ms marcado que en el caso del Synchronization. Esto significa que las seeds involucradas en los dos primeros concerns son ms generales y por ende ms requeridas en otras partes del cdigo, lo que hace que las llamadas se dispersen cada vez ms que en el caso de las seeds de sincronizacin que su utilizacin es ms especfica. En el caso de las mtricas que evaluaron la complejidad del cdigo de las seeds, en los crosscutting concerns de Logging y Data Validation no se presentaron grandes modificaciones al cdigo en ninguna de las seis versiones bajo anlisis, los valores arrojados por las mtricas fueron iguales o con variaciones mnimas. En el caso del crosscutting concern Synchronization, se presentaron variaciones en los valores que demuestran que el cdigo involucrado es difcil de mantener y se fue volviendo ms complejo con el transcurso de las versiones. Como conclusin, es posible determinar que los crosscutting concern se vuelven complejos de mantener a medida que el cdigo va evolucionando, ya que cada vez las seeds se vuelven ms dispersas y esto provoca que una modificacin en un mtodo requiera evaluar mucho ms cdigo afectado. Situacin que podra evitarse si estas funcionalidades fueran encapsuladas con un paradigma orientado a aspectos.

98

Captulo 7 Conclusin

En el presente captulo se manifiestan las conclusiones alcanzadas luego de aplicar el estudio realizado sobre tcnicas de aspect mining aplicadas y sobre los crosscutting concerns encontrados sobre un cdigo java de un sistema en produccin. Adems, se comentarn los problemas encontrados durante la realizacin del estudio. Y se presentarn los trabajos futuros.

VII.1. Anlisis del Estudio Propuesto


Aspect mining es la actividad de descubrir crosscutting concerns a partir del cdigo fuente o las trazas de ejecucin de una aplicacin [11]. A partir de all, estos concerns pueden ser encapsulados en nuevos aspectos del sistema (mediante la utilizacin de tcnicas conocidas como aspect refactoring [2]) o pueden documentarse con el fin de mejorar la comprensin del programa. El estudio propuesto tuvo como objetivo aplicar tcnicas de aspect mining como Unique Method, Execution Relations (Outside Before, Outside After, Inside First e Inside Last) y Fan-In Analysis sobre el cdigo de un sistema de software real para evaluar estadsticamente tanto las tcnicas como los resultados arrojados en un cdigo de gran tamao, realizar la evaluacin manual de las seeds y estudiar crosscuttings concerns en distintas versiones del cdigo. El software elegido para aplicar las tcnicas de aspect mining fue un sistema Open Source, desarrollado en Java y muy utilizado en el campo del Grid Computing, llamado GridGain [8]. El objetivo fue elegir un cdigo que posea cierta complejidad en su estructura, dada por su crecimiento en la cantidad de clases y/o lneas de cdigo, con la intencin de ver las dificultades presentadas a la hora de realizar el anlisis de aspect mining sobre l. Del anlisis de GridGain en las 6 versiones analizadas se desprende que determinados concerns tienen mayor influencia dentro del diseo de una aplicacin, lo que provoca que el anlisis genere mayor cantidad de informacin respecto a l, como sucedi con el crosscutting concern de logging en el caso de estudio presentado, por la cantidad de seeds que se identificaron para l. Del anlisis cualitativo de las seeds se observ que 99

Conclusin
la confirmacin (o no) de ellas, se basa en un juicio subjetivo por parte del evaluador sobre si cada seed es indicadora de la presencia de un crosscutting concern o no. Esta situacin requiere contar con cierta experiencia no solo del dominio, sino tambin en cuanto a la clasificacin de crosscutting concerns, adems del respectivo tiempo que esto insume. Ante esta situacin, se motiv la bsqueda de parmetros que permitieran acotar el nmero de resultados arrojados por las tcnicas con el objetivo de obtener resultados con la mejor calidad posible. Donde calidad, hace referencia a la idea de que los resultados tengan una mayor probabilidad de que sean identificados como seeds confirmadas por el usuario encargado de evaluarlos. Para esto, se realiz un estudio basado en las medidas de centralizacin, y otro fundamentado en outliers. Estos dos estudios permitieron determinar que es posible agregar medidas estadsticas a los clculos arrojados por una tcnica de aspect mining y brindarle as un subconjunto acotado de resultados al encargado de evaluar las seeds. Esto no significa que el desarrollador deba desentenderse del anlisis del resto de las seeds arrojadas por una tcnica, sin embargo, estas mtricas le pueden brindar una ayuda para simplificar el trabajo y as tener la certeza de que se va a encontrar con seeds que seguramente sean confirmadas, y que permitan dar indicios rpidamente de crosscutting concerns existentes en el sistema. Por ltimo, de las seeds obtenidas se analizaron tres crosscutting concerns, los cuales se estudiaron analticamente en las seis versiones bajo anlisis para estudiar como se comport cada uno en el tiempo y se pudo observar que algunos crosscutting concern se vuelven complejos de mantener a medida que el cdigo va evolucionando, ya que cada vez las seeds se vuelven ms dispersas y sto provoca que una modificacin en un mtodo requiera evaluar mucho mas cdigo afectado. Esta ltima situacin podra evitarse si estas funcionalidades fueran encapsuladas con un paradigma orientado a aspectos.

VII.2. Trabajos Futuros


A continuacin se enumeran los estudios o proyectos que se pueden derivar del presente trabajo realizado: Incrementar y mejorar los resultados arrojados al usuario por las tcnicas de aspect mining. Identificar seeds fuertes para ayudar al anlisis manual de seeds por parte del desarrollador. Agregar al estudio realizado otras tcnicas de aspect mining, como pueden ser: Redirector Finder, Interfaces Aspectizables o Sinergy Analysis. 100

Conclusin
Desarrollar una herramienta que automatice y/o facilite el estudio y posterior anlisis por parte del usuario. Refactorizar la herramienta estudiada a una implementacin orientada a aspectos.

101

Anexo I Clasificacin de Seeds

En esta seccin se presenta la clasificacin de las seeds detectadas con la herramienta AME para cada tcnica en las diferentes versiones de GridGain, en base a los crosscutting concern sorts definidos en la seccin IV.5. La presentacin de la clasificacin se hace en base al orden en que los seeds fueron identificados, esto significa que en primer trmino se analizan las seeds encontradas mediante Unique Method, luego las de Execution Relations en el orden: Outside Before, Outside After, Inside First e Inside Last, y por ltimo las detectadas mediante la tcnica de Fan-In Analysis. Por lo que una seed que fue identificada por varias tcnicas solo ser analizada la primera vez que fue detectada segn el orden establecido.

AI.1. Seeds Detectados con Unique Methods


Mtodo/Fan-In por Versin GridArgumentCheck.checkNull(Object argVal, String argName) Object.notifyAll() GridSpiAdapter.startStopwatch() GridSpiAdapter.registerMBean(String gridName, T impl, Class<T> mbeanItf) GridSpiAdapter.unregisterMBean() GridUtils.close(Closeable rsrc, GridLogger log) GridSpiAdapter.assertParameter(boolean cond, String condDescr) GridKernal.beforeCall() GridKernal.afterCall() Lock.unlock() Lock.lock() Thread.sleep(long) GridArgumentCheck.checkRange(boolean argRange, String rangeDesc) Thread.start() Writer.write(String) System.arraycopy(Object, int, Object, int, int) GridResourceIoc.injectResource(Object target, Class<? extends Annotation> annCls, Class<? extends GridTask<?, ?>> taskCls, GridResourceInjector injector) GridUtils.writeUUID(ObjectOutput out, UUID uid) Object.wait()
1.5.0 33 28 25 25 25 22 24 22 22 13 9 11 11 12 10 6 1.6.0 37 32 25 25 25 22 24 24 24 13 11 10 11 12 10 16 2.0.0 62 38 34 34 34 22 30 26 26 13 13 16 16 14 12 12 8 10 15 2.0.2 65 38 34 34 34 22 30 26 26 23 23 17 16 14 13 12 9 10 15 2.1.0 76 44 38 37 37 32 33 29 29 25 25 23 19 15 13 12 12 12 11 2.1.1 76 43 36 35 35 32 31 29 29 25 25 20 19 14 13 12 12 12 11

102

Anexo I: Clasificacin de Seeds


GridUtils.interrupt(Thread t) GridCommunicationManager.addMessageListener(final String topic, final GridMessageListener listener) Thread.setContextClassLoader(ClassLoader) GridDiscoveryManager.addDiscoveryListener(GridDiscoveryListener listener) AccesibleObject.setAccesible(boolean) GridUtils.close(Statement rsrc, GridLogger log) Thread.interrupt() GridCommunicationManager.sendMessage(GridNode node, String topic, Serializable msg, GridCommunicationThreadPolicy policy) GridUtils.close(GridMailInbox rsrc, boolean purge, GridLogger log) GridRunnablePool.execute(final GridRunnable r) GridCheckpointManager.record(GridEventType type, String key, GridTaskSessionImpl ses) GridTaskWorker.finishTask(R res, GridException e) GridExecutorService.checkShutdown() DataOutput.writeBoolean(boolean) GridConfigurationAdapter.setGridLogger(GridLogger log) GridJobProcessor.handleCollisions() Executor.execute(Runnable) PrintStream.println(String) GridCommunication.sendMessage(Collection<GridNode> nodes, String topic, Serializable msg, GridCommunicationThreadPolicy policy) DataOutput.writeInt(int) GridExecutorService.deployTask(Class<? extends GridTask> taskCls, Object cmd) GridExecutorService.checkSerializable(Collection<?> cmds) GridUtils.close(Socket rsrc, GridLogger log) GridUtils.close(MulticastSocket rsrc) GridUtils.close(java.sql.Connection rsrc, GridLogger log) GridJobWorker.recordEvent(GridEventType evtType, String msg) GridTimeoutProcessor.addTimeoutObject(GridTimeoutObject timeoutObj) PreparedStatement.setString(int, String) PreparedStatement.setTime(int, Time) GridDeploymentManager.releaseClass(GridDeploymentClass dep) GridUtils.writeString(ObjectOutput out, String s) GridUriDeploymentSpi.onUnitReleased(ClassLoader clsLoader) GridJobProcessor.cancelJob(GridJobWorker job, boolean system) GridMailInboxConfiguration.setStoreFileName(String storeFileName) GridMarshalHelper.marshal(GridMarshaller marshaller, Object obj, OutputStream out) GridByteArrayList.requestFreeSize(int cnt) DataOutput.writeLong(long) GridSpiAdapter.warnSpiParameter(String, param, String attrName, GridNode rmtNode) GridSpiAdapter.warnSpi(String spiName, Class<? extends GridSpi> spiCls, String attrName) Map<Serializable, Serializable>.putAll(Map<? extends Serializable, ? extends Serializable> attrs) GridTaskWorker.finishTask(Object res, GridException e)
9 8 (4) (2) 7 9 7 6 (4) (4) (4) 7 5 (2) 5 (4) 5 (3) 5 5 5 (4) (4) (2) 8 9 7 5 (2) 7 6 7 7 (4) 6 (4) 7 (3) 5 (2) 5 (4) 5 (3) 5 5 5 5 (4) (3) 7 11 10 9 6 6 8 7 7 7 7 5 6 6 6 5 6 (2) 5 (4) 5 (3) 5 5 5 5 6 5 11 10 9 6 7 8 7 7 7 7 5 6 6 6 5 6 (2) 5 (4) 5 (3) 5 5 5 5 6 12 9 5 12 11 9 9 8 8 8 8 7 7 7 7 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 (4) 11 11 9 9 8 8 8 8 7 7 7 7 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 (4) -

103

Anexo I: Clasificacin de Seeds


8 Throwable.printStackTrace(PrintStream) GridJobWorker.finishJob(Serializable res, GridException ex, boolean 5 (3) (3) (4) (4) (4) sendReply) Tabla AI.1 - Valor de fan-in para las seeds detectadas con Unique Methods en las 6 versiones de GridGain.

AI.1.1.

Seeds en GridGain v1.5.0

GridArgumentCheck.checkNull(Object, String): fan-in 33 Mtodo que chequea si el argumento dado es null, lanza excepcin. Es parte de un crosscutting concern y corresponde al sort de contract enforcement. Object.notifyAll(): fan-in 28 Mtodo que maneja las notificaciones a los oyentes. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridSpiAdapter.startStopWatch(): fan-in 25 Mtodo que se encarga de hacer el set del tiempo en el cual se inicia la ejecucin del mismo. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridSpiAdapter.registerMBean(String gridName, T impl, Class<T> mbeanItf): fan-in 25 Mtodos para manejar el registro de mBeans. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridSpiAdapter.unregisterMBean(): fan-in 25 Mtodos para manejar el registro de mBeans. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridSpiAdapter.assertParameter(boolean cond, String condDescr): fan-in 24 Mtodo encargado de chequea las condiciones y lanzar excepciones si corresponde. Es parte de un crosscutting concern y corresponde al sort de contract enforcement. GridUtils.Close(Closeable rsrc, GridLogger log): fan-in 22 Es un mtodo que se encarga de liberar los recursos de rsrc. Siempre se ejecuta en el finally de un try-catch. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridKernal.BeforeCall() y AfterCall(): fan-in 22

104

Anexo I: Clasificacin de Seeds


Actan como semforos de sincronizacin. Se ejecutan siempre juntos, primero se chequean contra null los parmetros del mtodo, luego se ejecuta beforecall(), luego una redireccin del mtodo dentro de un try y en el finally aftercall(). Es parte de un crosscutting concern y corresponde al sort de consistent behavior. Thread.sleep(): fan-in 13 Es parte de un crosscutting concern y corresponde al sort de consistent behavior. System.arraycopy(): fan-in 12 Es parte de un crosscutting concern y corresponde al sort de consistent behavior. Writer.write(): fan-in 11 Es parte de un crosscutting concern y corresponde al sort de consistent behavior. Thread.start(): fan-in 11 Es parte de un crosscutting concern y corresponde al sort de consistent behavior. Throwable.printstacktrace(printstream): fan-in 8 No es parte de un crosscutting concern. GridUtils.writeUUID(ObjectOutput out, UUID uid): fan-in 10 Siempre se llama desde el mtodo writeExternal(ObjectOutput out) imprime el UUID por la salida estndar. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridCommunicationManager.sendMessage(GridNode node, String topic, Serializable msg, GridCommunicationThreadPolicy policy): fan-in 9 Obtiene un GridCommunicationSpi y redirige el llamado al mtodo con el mismo nombre de dicho objeto. Es parte de un crosscutting concern y corresponde al sort de Redirection Layer. GridUtils.interrupt(Thread t): fan-in 9 Mtodo encargado de interrumpir la ejecucin de un thread, se llama una vez desde un mtodo stop() otra desde cancel() que llama a spiStop() y las otras 7 directamente desde spiStop(). Ejecuta t.interrupt(). Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridArgumentCheck.checkRange(boolean argRange, String rangeDesc): fan-in 9

105

Anexo I: Clasificacin de Seeds


Si argRange es falso, lanza una excepcin con el mensaje rangeDesc. Se ejecuta siempre al inicio de los mtodos. Es parte de un crosscutting concern y corresponde al sort de Contract Enforcement ya que su funcionalidad es chequear una condicin (argRange). GridCommunicationManager.addMessageListener(GridMessageListener listener, String topic): fan-in 8 Realiza un chequeo con assertion los dos parmetros y luego de sincronizarse agrega todos los topics obtenidos de hash.get(topic), a un listener de forma sincrnica. Se ejecuta 7 veces desde el mtodo start() de distintas clases y la restante ejecucin es una redireccin desde el mtodo con idntico nombre. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. GridUtils.close(GridMailInbox rsrc, boolean purge, GridLogger log): fan-in 7 Cierra el rsrc loggeando posibles causas de error y dependiendo de la variable purge elimina los mensajes borrados que existan en rsrc. Se ejecuta 7 veces de las cuales dos son desde el mtodo body() que est declarado dentro del mtodo spiStart() (desde donde se llama dos veces tambin), sumado a esas 4 llamadas, otras dos ms lo llaman desde el finally y la restante se llama desde el mtodo spiStop(). Es parte de un crosscutting concern, porque aunque solo libera recursos, es una funcionalidad transversal a la del mtodo y corresponde al sort de Consistent Behavior. Thread.interrupt(): fan-in 7 Mtodo encargado de interrumpir la ejecucin de un thread. Es parte de un crosscutting concern y corresponde al sort de consistent behavior. Object.wait(): fan-in 6 Es un mtodo de sincronizacin. Es parte de un crosscutting concern y es de tipo consistent behavior. GridCheckpointManager.record(GridEventType type, String key, GridTaskSessionImpl ses): fan-in 6 Es un mtodo que almacena un registro de logging. Es parte de un crosscutting concern y es de tipo Consistent Behavior. GridUtils.close(Socket rsrc, GridLogger log): fan-in 5 Mtodo encargado de realizar el close del objeto Socket, en caso de error genera un log. Es parte de un crosscutting concern y es de tipo Consistent behavior.

106

Anexo I: Clasificacin de Seeds


GridJobWorker.recordEvent(GridEventType evtType, String msg): fan-in 5 Redirige el llamado a reg.getEventStorageManager().record(evtType, ses.getTaskName(), ses.getId(), ses.getJobId(), msg) registra los eventos ocurridos sobre el job. Es parte de un crosscutting concern y es de tipo Redirection Layer. GridJobWorker.finishJob(Serializable res, GridException ex, boolean sendReply): fanin 5 Evita finalizar un job desde diferentes threads loggeando todos los mensajes y eventos ocurridos. Es parte de un crosscutting concern y es de tipo Consistent Behavior, porque tiene una sincronizacin y tanto puede ejecutarse como no, segn como se d la pila de ejecucin, realiza una funcionalidad determinada y se utiliza al final de los llamadores. GridCommunication.sendMessage(GridNode node, String topic, Serializable msg, GridCommunicationThreadPolicy policy): fan-in 5 Obtiene un GridCommunicationSpi y redirige el llamado al mtodo con el mismo nombre de dicho objeto. Es parte de un crosscutting concern y es de tipo Redirection Layer. GridUtils.writeString(ObjectOutput out, String s): fan-in 5 Se llama las 5 veces desde el mismo mtodo writeExternal(ObjectOutput out) de 5 clases distintas. Es parte de un crosscutting concern y es de tipo consistent Behavior, escribe un String en el objeto ObjectOutput manejando los valores null. GridMailInboxConfiguration.setStoreFileName(String storeFileName): fan-in 5 Su nico objetivo es guardar la variable storeFileName. El seed es un falso positivo ya que es un mtodo setter. GridByteArrayList.requestFreeSize(int cnt): fan-in 5 Cambia el tamao de la representacin interna del array, solicitando cnt bytes extras. No es una funcionalidad que pueda considerarse crosscutting concern.

AI.1.2.

Seeds en GridGain v1.6.0

Thread.setContextClassLoader(ClassLoader): fan-in 7 No es parte de un crosscutting concern, ya que solo setea un objeto ClassLoader. GridTaskWorker.finishTask(Object res, GridException e): fan-in 7 107

Anexo I: Clasificacin de Seeds


Se ejecuta 6 veces desde la misma clase GridTaskWorker y generalmente en los catch con el parmetro res = null. Es un mtodo que realiza una sincronizacin. Es parte de un crosscutting concern y es de tipo Consistent Behavior. GridConfigurationAdapter.setGridLogger(GridLogger log): fan-in 6 No es un seed positivo, solo realiza un set un objeto GridLogger. GridDiscoveryManager.addDiscoveryListener(GridDiscoveryListener listener): fan-in 5 Es un mtodo que agrega el listener pasado como parmetro a la lista de listeners de forma sincronizada. Es parte de un crosscutting concern y es de tipo Consistent Behavior. GridJobProcessor.cancelJob(GridJobWorker job, boolean system): fan-in 5 Es parte de un crosscutting concern, redirige la llamada a job.cancel(system). Es un seed de tipo redirection layer.

AI.1.3.

Seeds en GridGain v2.0.0

Lock.unlock(): fan-in 13 Es parte de un crosscutting concern, maneja la sincronizacin de objetos de lectura/escritura. Es de tipo Consistent Behavior. Lock.lock(): fan-in 13 Es concern, maneja la sincronizacin de objetos de lectura/escritura. Es de tipo Consistent Behavior. GridResourceIoc.injectResource(Object target, Class<? extends Annotation> annCls, Class<? extends GridTask<?, ?>> taskCls, GridResourceInjector injector): Fain-in 8 Realiza un manejo especial en caso de que las clases sean annimas, sino, llama a GridResourceInjector.Inject(). Es un seed positivo de tipo redirection layer. AccesibleObject.setAccesible(boolean): Fain-in 6 Es un mtodo setter, Es un seed falso positivo. GridJobProcessor.handleCollisions(): Fain-in 6 Es parte de un crosscutting concern y corresponde al sort consistent behavior, porque realiza una funcionalidad consistente para el manejo de colisiones. 108

Anexo I: Clasificacin de Seeds

DataOutput.writeLong(long): Fain-in 6 No es parte de un crosscutting concern, realiza un set de un long en un objeto de salida. DataOutput.writeBoolean(boolean): fan-in 5 No es un seed positivo, realiza un set de un boolean en un objeto de salida. PrintStream.println(String): fan-in 5 Imprime el String pasado como parmetro en la salida. No es parte de un crosscutting concern. Map<Serializable, Serializable>.putAll(Map<? extends Serializable, ? extends Serializable> attrs): fan-in 5 No es parte de un crosscutting concern, porque solo agrega atributos (attrs) a una lista.

AI.1.4.

Seeds en GridGain v2.0.2

GridSpiAdapter.warnSpiParameter(String, param, String attrName, GridNode rmtNode): fan-in 12 Es parte de un crosscutting concern de tipo Consisten Behavior, genera un log a nivel de warning respecto a ciertas condiciones. GridSpiAdapter.warnSpi(String spiName, Class<? extends GridSpi> spiCls, String attrName): fan-in 9 Es parte de un crosscutting concern de tipo Consisten Behavior, genera un log a nivel de warning respecto a ciertas condiciones.

AI.1.5.

Seeds en GridGain v2.1.0

GridUtils.close(Statement rsrc, GridLogger log): fan-in 8 Idem a los close anteriores. Es un mtodo que se encarga de liberar los recursos de rsrc. Siempre se ejecuta en el finally de un try-catch. Es parte de un crosscutting concern de tipo Consisten Behavior, porque aunque solo libera recursos, es una funcionalidad transversal a la del mtodo. GridRunnablePool.execute(GridRunnable): fan-in 7 109

Anexo I: Clasificacin de Seeds


Es parte de un crosscutting concern de tipo Redirection Layer. Decora de funcionalidad al objeto Executor. GridExecutorService.checkShutdown(): fan-in 6 Es parte de un crosscutting concern de tipo contract enforcement, porque chequea que realmente este finalizado el servicio. DataOutput.writeInt(int): fan-in 6 No es parte de un crosscutting concern, realiza un set de un boolean en un objeto de salida. GridExecutorService.deployTask(Class<? extends GridTask> taskCls, Object cmd): fanin 5 Es parte de un crosscutting concern de tipo Redirection Layer, redirecciona el llamado y maneja los errores. GridExecutorService.checkSerializable(Collection<?> cmds): fan-in 5 Es parte de un crosscutting concern de tipo contract enforcement. GridUtils.close(MulticastSocket rsrc): fan-in 5 dem close anteriores. GridUtils.close(java.sql.Connection rsrc, GridLogger log): fan-in 5 dem close anteriores. GridTimeoutProcessor.addTimeoutObject(GridTimeoutObject timeoutObj): fan-in 5 Es parte de un crosscutting concern de tipo consistent behavior, carga el objeto GridTimeoutObject y notifica al resto. PreparedStatement.setString(int, String): fan-in 5 No es parte de un crosscutting concern, ya que funciona como un mtodo setter, lo nico que hace es setear el String en el parmetro int del PreparedStatement. PreparedStatement.setTime(int, Time): fan-in 5 dem anterior. GridDeploymentManager.releaseClass(GridDeploymentClass dep): fan-in 5 Es parte de un crosscutting concern de tipo Consisten Behavior ya que chequea una condicin y libera la clase dep si es necesario. 110

Anexo I: Clasificacin de Seeds

GridUriDeploymentSpi.onUnitReleased(ClassLoader clsLoader): fan-in 5 Es parte de un crosscutting concern de tipo consistent behavior ya que notifica a los oyentes sobre la liberacin del class loader. GridMarshalHelper.marshal(GridMarshaller marshaller, Object obj, OutputStream out): fan-in 5 Es parte de un crosscutting concern de tipo Redirection Layer, lo que hace es redefinir un objeto en otro.

AI.1.6.

Seeds en GridGain v2.1.1

No existen nuevos concerns en esta versin respecto a la anterior (2.1.0).

AI.2. Seeds Detectadas con Execution Relations - Outside Before


Mtodo/Fan-In por Versin GridLogger.isInfoEnabled() StringBuilder.append(String) GridLogger.debug(String) GridAbstractException.setData(int, String) GridTestPrintStream.out(boolean) Object.getClass() GridLogger.error(String, Throwable) GridManagerRegistry.getDiscoveryManager() System.currentTimeMillis() Thread.currentThread() GridProcessorRegistry.getResourceProcessor() GridDeploymentClass.getClassLoader() GridLogger.isDebugEnabled() GridFailoverContext.getJobResult() GridJobWorker.getJobId() GridLogger.warning(String) String.endsWith(String) Lock.lock() GridSpiAdapter.createSpiAttributeName(String) GridSpiAdapter.onContextInitialized(GridSpiContext) UUID.equals(Object) GridSpiAdapter.getSpiContext() GridLogger.info(String) String.toLowerCase() 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
50 49 26 32 28 17 15 14 6 5 16 9 11 10 50 50 27 33 29 28 17 18 12 15 5 17 9 11 9 68 75 28 31 29 32 19 18 19 17 24 8 12 10 14 12 5 9 11 68 30 32 29 31 21 18 16 17 24 7 13 10 13 12 15 10 10 10 79 11 49 38 29 11 26 25 26 24 7 15 32 14 13 12 12 12 11 10 10 9 9 75 11 54 29 11 27 25 25 21 7 15 32 14 13 14 12 13 9 10 10 9 9

111

Anexo I: Clasificacin de Seeds


GridProcessorRegistry.getTaskProcessor() GridNode.getId() File.isDirectory() Thread.holdsLock(Object) GridArgumentCheck.checkNull(Object, String) GridManagerRegistry.getEventStorageManager() GridTaskSession.getId() File.getAbsolutePath() GridByteArrayList.getSize() GridMailInboxConfiguration.getProtocol() String.equals(Object) GridJunit4SuiteRunner.getChildren() GridJobResultImpl.getJobId() GridJgroupsDiscoveryNode.getId() GridMarshalHelper.unmarshal(GridMarshaller, GridByteArrayList, ClassLoader) GridProxyFactory.getProxy(T, Object[]) GridTaskSessionRequest.getAttributes() GridUriDeploymentScanner.getDeployDirectory() GridUriDeploymentUnitDescriptor.getTask() GridUriDeploymentUnitDescriptor.getTaskClass() String.charAt(int) GridJmsDiscoveryMessage.getNodeId() String.length() UUID.randomUUID() GridManagerRegistry.getDeploymentManager() String.startsWith(String) GridConfiguration.getGridName()
4 7 4 6 7 5 6 6 5 6 10 5 5 4 3 3 2 2 6 4 7 6 5 7 6 6 6 6 6 5 10 5 5 4 4 4 3 2 8 6 7 6 8 9 9 6 6 6 6 6 5 5 3 5 5 4 5 3 4 2 8 6 7 6 8 9 9 6 6 6 6 6 5 3 5 5 5 4 5 3 4 2 10 15 7 13 10 7 4 7 6 6 5 5 5 5 2 5 5 4 4 4 5 4 5 10 15 13 13 10 7 4 7 6 6 5 5 5 5 2 5 5 4 5 4 5 5 5

Tabla AI.2 - Valor de fan-in para las seeds detectadas con Execution Relations - Outside Before en las 6 versiones de GridGain.

AI.2.1.

Seeds en GridGain v1.5.0

GridLogger.isInfoEnabled(): fan-in 50 Es parte de un crosscutting concern de tipo contract enforcement, ya que sirve para chequea una condicin. StringBuilder.append(String): fan-in 49 No es parte de un crosscutting concern, solo se encarga de concatenar dos strings. GridAbstractException.setData(int, String): fan-in 32 No es parte de un crosscutting concern, solo setea los dos datos pasados como parmetro.

112

Anexo I: Clasificacin de Seeds


Object.getClass(): fan-in 28 No es parte de un crosscutting concern, solo retorna un objeto. GridLogger.debug(String): fan-in 26 Chequea si est habilitado el log y registra el mensaje pasado como parmetro, Es parte de un crosscutting concern de tipo consistent behavior. GridLogger.error(String, Throwable): fan-in 17 dem al anterior. GridJobWorker.getJobId(): fan-in 16 A pesar de realizar una redireccin a un mtodo de otra clase, realiza la funcionalidad de un mtodo getter. No forma parte de un crosscutting concern. GridManagerRegistry.getDiscoveryManager(): fan-in 15 No forma parte de un crosscutting concern. Solo retorna un objeto. System.currentTimeMillis(): fan-in 14 Es parte de un crosscutting concern de tipo Consistent Behavior. Los llamados a este mtodo se hacen desde lugares donde se desea chequear el tiempo que tarda la ejecucin del mismo. String.endsWith(String): fan-in 11 Es parte de un crosscutting concern de tipo Contract Enforcement. Se encarga de chequear una condicin. GridLogger.info(String): fan-in 10 dem a GridLogger.debug(String). GridProxyFactory.getProxy(T, Object[]): fan-in 10 Mtodo encargado de crear objetos Proxy. Es parte de un crosscutting concern de tipo Consistent Behavior. GridLogger.warning(String): fan-in 9 dem a GridLogger.debug(String). File.isDirectory(): fan-in 7 Es parte de un crosscutting concern de tipo contract enforcement.

113

Anexo I: Clasificacin de Seeds


GridManagerRegistry.getEventStorageManager(): fan-in 7 No forma parte de un Crosscutting Concern, solo retorna un objeto. GridByteArrayList.getSize(): fan-in 6 No forma parte de un Crosscutting Concern, solo retorna un objeto. GridJobResultImpl.getJobId(): fan-in 6 No forma parte de un Crosscutting Concern, solo retorna un objeto. GridMailInboxConfiguration.getProtocol(): fan-in 6 No forma parte de un Crosscutting Concern, solo retorna un objeto. Thread.currentThread(): fan-in 6 No forma parte de un Crosscutting Concern, solo retorna un objeto (el thread que actualmente se est ejecutando). File.getAbsolutePath(): fan-in 5 No forma parte de un crosscutting concern, solo retorna un String con la ruta completa de un archivo. GridJmsDiscoveryMessage.getNodeId(): fan-in 5 No forma parte de un Crosscutting Concern, solo retorna un objeto. GridLogeer.isDebugEnabled(): fan-in 5 Es parte de un crosscutting concern igual a GridLogger.isInfoEnabled(). Es parte de un crosscutting concern de tipo Contract Enforcement. GridTaskSessionRequest.getAttributes(): fan-in 5 No forma parte de un crosscutting Concern, solo retorna un objeto. String.equals(Object): fan-in 5 Es parte de un crosscutting concern de tipo Contract Enforcement, compara dos Strings, realiza un chequeo de condiciones.

AI.2.2.

Seeds en GridGain v1.6.0

GridTestPrintStream.out(boolean): fan-in 29

114

Anexo I: Clasificacin de Seeds


Es parte de un crosscutting concern de tipo Consistent Behavior. Obtiene la salida donde imprimir. Thread.holdsLock(Object): fan-in 6 Es parte de un crosscutting concern de consisten behavior, realiza un manejo de concurrencia. GridProcessorRegistry.getTaskProcessor(): fan-in 6 No es parte de un crosscutting concern, solo retorna un objeto. GridJunit4SuiteRunner.getChildren(): fan-in 6 No es parte de un crosscutting concern. Lo que hace es retornar un objeto, pero si este no existe, lo crea. GridUriDeploymentUnitDescriptor.getTaskClass(): fan-in 5 No es parte de un crosscutting concern. Solo retorna un objeto.

AI.2.3.

Seeds en GridGain v2.0.0

GridProcessorRegistry.getResourceProcessor(): fan-in 24 No es parte de un crosscutting concern. Solo retorna un objeto. GridFailoverContext.getJobResult(): fan-in 12 No es parte de un crosscutting concern. Solo retorna un objeto. GridSpiAdapter.getSpiContext(): fan-in 9 No es parte de un crosscutting concern. Solo retorna un objeto. GridTaskSession.getId(): fan-in 9 No es parte de un crosscutting concern. Solo retorna un objeto. GridNode.getId(): fan-in 6 No es parte de un crosscutting concern. Solo retorna un objeto. GridJgroupsDiscoveryNode.getId(): fan-in 5 No es parte de un crosscutting concern. Solo retorna un objeto. UUID.randomUUID(): fan-in 5 115

Anexo I: Clasificacin de Seeds


No es parte de un crosscutting concern. Solo retorna un objeto.

AI.2.4.

Seeds en GridGain v2.0.2

GridSpiAdapter.onContextInitialized(GridSpiContext): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior. Puede suscribir un oyente y enviar un mensaje a un nodo remoto. GridUriDeploymentScanner.getDeployDirectory(): fan-in 5 No es parte de un crosscutting concern. Solo retorna un objeto. GridUriDeploymentUnitDescriptor.getTask(): fan-in 5 No es parte de un crosscutting concern. Solo retorna un objeto.

AI.2.5.

Seeds en GridGain v2.1.0

GridDeploymentClass.getClassLoader(): fan-in 15 No es parte de un crosscutting concern. Solo retorna un objeto. GridSpiAdapter.createSpiAttributeName(String): fan-in 11 Es parte de un crosscutting concern de tipo redirection layer, ya que se encarga de realizar una redireccin. UUID.equals(Object): fan-in 10 Es parte de un crosscutting concern de tipo contract enforcement. Sirve para realiza un chequeo de condicin. String.toLowerCase(): fan-in 9 Es parte de un crosscutting concern de tipo consistent behavior. GridMarshalHelper.unmarshal(GridMarshaller, GridByteArrayList, ClassLoader): fanin 5 Es parte de un crosscutting concern de tipo redirection layer, ya que el Marshall/unmarshall es la adaptacin de parmetros tanto para enviar como para recibir entre un cliente y un servidor. GridManagerRegistry.getDeploymentManager(): fan-in 5 116

Anexo I: Clasificacin de Seeds


No es parte de un crosscutting concern. Solo retorna un objeto. String.charAt(int): fan-in 5 No es parte de un crosscutting concern. GridConfiguration.getGridName(): fan-in 5 No es parte de un crosscutting concern. Solo retorna un objeto.

AI.2.6.

Seeds en GridGain v2.1.1

String.length(): fan-in 5 No es parte de un crosscutting concern. String.startsWith(String): fan-in 5 Es parte de un crosscutting concern de tipo Contract Enforcement. Chequea una condicin.

AI.3. Seeds Detectados con Execution Relations - Outside After


Mtodo/Fan-In por Versin GridLogger.info(String) GridLogger.isDebugEnabled() StringBuilder.append(String) GridLogger.debug(String) GridAbstractException.setData(int, String) GridLogger.error(String, Throwable) System.currentTimeMillis() GridKernal.addAttribute(Map<String, Serializable>, String, Serializable) GridLogger.isInfoEnabled() GridProcessorRegistry.getResourceProcessor() String.endsWith(String) ReadWriteLock.writeLock() GridKernal.afterCall() GridUriDeploymentScanner.getLogger() String.toLowerCase() Object.notifyAll() GridProcessorAdapter.getManagerRegistry() GridDeploymentClass.getClassLoader() GridNode.getId() 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
112 35 39 24 20 15 18 12 9 10 10 9 7 10 112 32 37 24 23 14 16 12 9 10 11 10 9 9 146 47 41 31 27 19 19 13 13 19 11 5 10 10 10 9 8 69 42 30 26 21 19 13 13 19 11 12 10 10 10 10 7 176 72 25 38 34 34 26 13 12 3 11 12 10 10 10 11 9 8 164 72 25 38 34 22 13 14 3 11 12 10 11 10 11 9 8

117

Anexo I: Clasificacin de Seeds


GridLogger.warning(String) GridProxyFactory.getProxy(T, Object[]) GridUtils.makeMap(String, Serializable) GridDiscoveryListener.onDiscovery(GridDiscoveryEventType, GridNode) GridSpiAdapter.createSpiAttributeName(String) GridUtils.asIterable(Enumeration<T>) Method.getAnnotation(Class <T>) URL.toString() Collections.unmodifiableSet(Set<? extends T>) File.getAbsolutePath() GridUriDeploymentUtils.hidePassword(String) GridCollisionJobContextAdapter.getJobWorker() GridUriDeploymentScanner.getDeployDirectory() GridUriDeploymentUnitDescriptor.getTask() Object.getClass() GridManagerRegistry.getCommunicationManager() GridUriDeploymentUnitDescriptor.getTaskClass() GridResourceField.getField() GridMessageListener.onMessage(UUID, Serializable) GridManagerRegistry.getDiscoveryManager() File.exists() AccesibleObject.setAccesible(boolean) Throwable.getMessage() ReadWriteLock.readLock() GridUtils.close(Closeable, GridLogger) GridJgroupsDiscoveryNode.isReady() String.startsWith(String) String.length() GridUtils.deserialize(GridByteArrayList, ClassLoader, GridLogger)
5 8 6 5 5 9 3 4 6 2 4 3 2 5 5 2 5 5 8 6 6 5 5 2 4 5 4 5 5 2 3 5 2 2 9 6 6 5 5 5 3 5 3 4 4 3 4 2 3 2 2 2 7 8 5 6 6 6 5 5 5 5 5 5 3 4 4 4 4 5 3 2 3 11 8 7 6 6 6 6 6 4 5 8 5 6 4 5 4 5 6 4 2 3 2 5 11 7 6 6 6 6 6 6 4 5 8 5 6 4 5 4 5 6 4 5 3 4 5 -

Tabla AI.3 - Valor de fan-in para las seeds detectadas con Execution Relations - Outside After en las 6 versiones de GridGain.

AI.3.1.

Seeds en GridGain v1.5.0

GridKernal.addAttribute(Map<String, Serializable>, String, Serializable): fan-in 12 Es parte de un crosscutting concern de tipo Consistent Behavior. GridUriDeploymentScanner.getLogger(): fan-in 9 No es parte de un crosscuttings concern, solo retorna el logger. GridUriDeploymentUtils.hidePassword(String): fan-in 9 Es parte de un crosscutting concern, en los mtodos donde es llamado, agrega funcionalidad transversal. Es de tipo consistent behavior. 118

Anexo I: Clasificacin de Seeds

GridMessageListener.onMessage(UUID, Serializable): fan-in 6 Es parte de un crosscutting concern de tipo consistent behavior, enva un mensaje y notifica a los oyentes. GridUtils.asIterable(Enumeration<T>): fan-in 6 Es parte de un crosscutting concern de tipo Consistent Behavior. Convierte un Enumeration en un Iterable. Collections.unmodifiableSet(Set<? Extends T>): fan-in 5 Es parte de crosscutting concern, transforma una collection en la misma, pero de solo lectura. Es de tipo redirection layer, decora/adapta un objeto en otro. GridJgroupsDiscoveryNode.isReady(): fan-in 5 Es parte de un crosscutting concern de tipo contract enforcement, ya que su objetivo es el chequeo de una condicin. GridUtils.deserialize(GridByteArrayList, ClassLoader, GridLogger): fan-in 5 Es parte de un crosscutting concern. Transforma un objeto de tipo GridByteArrayList hacindolo Serializable. Es de tipo redirection layer, decora/adapta un objeto en otro.

AI.3.2.

Seeds en GridGain v1.6.0

File.exists(): fan-in 5 Es parte de un crosscutting de tipo contract enforcement, ya que chequea que el archivo (o directorio) exista.

AI.3.3.

Seeds en GridGain v2.0.0

GridProcessorAdapter.getManagerRegistry(): fan-in 9 No es parte de un crosscutting concern porque solo retorna un valor. ReadWriteLock.writeLock(): fan-in 5 Es parte de un crosscutting concern de tipo Consisten Behavior, maneja la sincronizacin de objetos de lectura/escritura. GridCollisionJobContextAdapter.getJobWorker(): fan-in 5 119

Anexo I: Clasificacin de Seeds


No es parte de un crosscutting concern porque solo retorna un valor.

AI.3.4.

Seeds en GridGain v2.0.2

GridUtils.makeMap(String, Serializable): fan-in 8 Es parte de un crosscutting concern de tipo Consistent Behavior, su funcionalidad es crear un hash con un nico elemento formado por los dos valores pasados como parmetros. URL.toString(): fan-in 6 Es parte de un crosscutting concern, lo que hace es transformar una url en un String, pero es una tarea que entrecruza la funcionalidad principal de los mtodos que la utilizan. GridDiscoveryListener.onDiscovery(GridDiscoveryEventType, GridNode): fan-in 5 Es parte de un crosscutting concern de tipo consistent behavior, porque realiza notificaciones a todos los oyentes. ReadWriteLock.readLock(): fan-in 5 Es parte de un crosscutting concern de tipo Consisten behavior, maneja la sincronizacin de objetos de lectura/escritura.

AI.3.5.

Seeds en GridGain v2.1.0

Throwable.getMessage(): fan-in 6 No es parte de un crosscutting concern, porque solo retorna un valor. Method.getAnnotation(Class<T>): fan-in 6 Es parte de un crosscutting concern de tipo Consistent Behavior. GridResourceField.getField(): fan-in 6 No es parte de un crosscutting concern, porque solo retorna un valor. GridManagerRegistry.getCommunicationManager(): fan-in 5 No es parte de un crosscutting concern, porque solo retorna un valor.

120

Anexo I: Clasificacin de Seeds AI.3.6. Seeds en GridGain v2.1.1

No existen nuevos seeds en esta versin respecto a la anterior (2.1.0).

AI.4. Seeds Detectados con Execution Relations - Inside First


Mtodo/Fan-In por Versin GridToStringBuilder.toString(Class<T>, T) Object.getClass() GridArgumentCheck.checkNull(Object, String) GridNode.getMetrics() GridLogger.isDebugEnabled() GridSpiAdapter.createSpiAttributeName(String) System.currentTimeMillis() GridTestPrintStream.out(boolean) GridAbstractException.setData(int, String) Thread.holdsLock(Object) GridSpiAdapter.startStopwatch() GridSpiAdapter.unregisterMBean() GridSpiThread.isInterrupted() GridSpiAdapter.checkConfigurationConsistency(GridNode) GridLogger.isInfoEnabled() Collections.unmodifiableMap(Map<? Extends K, ? extends V>) GridSourceAntTask.replaceLicense(Pattern, String, String, String, String) GridDiscoveryMetricsProvider.getMetrics() File.isDirectory() GridProcessorRegistry.getResourceProcessor() ReadWriteLock.writeLock() GridSpiAdapter.assertParameter(boolean, String) GridManagerRegistry.getDiscoveryManager() GridKernal.getThreadPoolExecutor() GridProcessorAdapter.getManagerRegistry() GridSpiAdapter.onContextInitialized(GridSpiContext) GridUtils.interrupt(Thread) Throwable.getMessage() String.length() GridMailInboxConfiguration.getProtocol() GridTaskSessionImpl.getJobId() GridSpiAdapter.getSpiContext() UUID.equals(Object) System.getProperty(String) GridArgumentCheck.checkRange(boolean, String) GridJunit4SuiteRunner.getTestClass() 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
136 33 33 29 30 10 21 13 11 8 12 10 9 8 4 8 7 6 7 7 6 5 141 37 33 28 33 31 14 21 13 11 10 12 10 9 8 5 8 7 7 7 7 5 5 6 152 62 47 37 38 33 31 15 29 18 14 10 12 11 10 9 9 5 9 7 8 8 6 9 6 7 7 6 6 6 6 136 23 65 47 38 32 33 32 14 29 18 14 13 13 12 11 10 9 9 9 9 7 8 8 14 9 8 5 7 7 7 7 6 6 162 36 75 47 60 42 37 33 38 60 33 22 15 16 12 11 11 9 11 9 14 6 8 8 10 7 7 7 7 6 7 6 155 37 75 47 57 38 35 33 60 31 20 14 16 11 11 10 9 11 9 14 6 8 8 10 7 7 7 6 7 7 6

121

Anexo I: Clasificacin de Seeds


GridNode.getId() Object.notifyAll() GridLogger.warning(String) StringBuilder.append(String) GridFactory.stop(String, boolean) GridManagerRegistry.getCommunicationManager() GridMarshalHelper.marshal(GridMarshaller, Object) Thread.currentThread() GridDiscoveryListener.onDiscovery(GridDiscoveryEventType, GridNode) GridDeploymentTask.getTaskClass() GridKernal.beforeCall() ReadWriteLock.readLock() Method.getAnnotation(Class <T>) GridConfiguration.isPeerClassLoadingEnabled() GridTaskSessionImpl.getId() GridUtils.byteArray2HexString(byte[]) String.equals(Object) File.exists() GridConfiguration.getGridName() GridSpiThread.interrupt() String.replaceAll(String, String) UUID.randomUUID() GridNode.getAttribute(String) List<GridNode>.isEmpty()
9 6 4 6 4 7 8 5 3 6 3 4 2 3 2 2 2 3 6 7 6 4 7 5 8 5 5 4 2 4 4 3 4 3 3 2 3 6 6 5 6 3 5 8 5 5 4 5 4 2 3 3 3 4 2 5 6 6 6 3 5 3 5 5 5 5 4 5 5 4 2 3 3 3 5 7 7 6 6 6 7 7 6 6 2 5 5 5 4 4 5 4 8 5 5 5 2 9 6 6 6 7 7 5 6 2 5 5 5 5 4 5 5 8 5 5 5 2

Tabla AI.4 - Valor de fan-in para las seeds detectadas con Execution Relations - Inside First en las 6 versiones de GridGain.

AI.4.1.

Seeds en GridGain v1.5.0

Collections.unmodifiableMap(Map<? Extends K, ? extends V>) >): fan-in 12 Es parte de un crosscutting concern, transforma un map en el mismo, pero de solo lectura. Es de tipo redirection layer, decora/adapta un objeto en otro. GridSpiThread.isInterrupted(): fan-in 11 Es parte de un crosscutting concern de tipo contract enforcement, ya que chequea una condicin. GridSourceAntTask.replaceLicense(Pattern, String, String, String, String): fan-in 10 Es parte de un crosscutting concern de tipo Consistent behavior, porque aplica cambios sobre una licencia, dada una cadena y una expresin regular, busca en dicha cadena sub cadenas con la expresin regular y las remplaza con otra cadena creada por el mtodo.

122

Anexo I: Clasificacin de Seeds

GridKernal.getThreadPoolExecutor(): fan-in 8 No es parte de un crosscutting concern ya que devuelve un valor. GridTaskSessionImpl.getJobId(): fan-in 7 No es parte de un crosscutting concern ya que devuelve un valor. GridTaskSessionImpl.getId(): fan-in 6 No es parte de un crosscutting concern ya que devuelve un valor. System.getProperty(String): fan-in 6 Es parte de un crosscutting concern de tipo Consistent Behavior. Realiza una funcionalidad crosscutting. Obtiene la propiedad del sistema indicada por la clave especificada. En primer lugar, si hay un administrador de seguridad, su mtodo checkPropertyAccess se llama con la clave pasada como parmetro. Esto puede dar lugar a una SecurityException. Si no hay un conjunto actual de propiedades del sistema, primero se crea y se inicializa de la misma manera que para el mtodo getProperties.

AI.4.2.

Seeds en GridGain v1.6.0

GridJunit4SuiteRunner.getTestClass(): fan-in 6 No es parte de un crosscutting concern, solo retorna un valor.

AI.4.3.

Seeds en GridGain v2.0.0

GridNode.getMetrics(): fan-in 47 Es parte de un crosscutting concern de tipo Consistent Behavior. GridDiscoveryMetricsProvider.getMetrics(): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior. GridFactory.stop(String, boolean): fan-in 6 Es parte de un crosscutting concern de tipo Consistent behavior, detiene todas las tareas que se estn ejecutando en el nodo local o en el grid por defecto, chequeando cual es distinto de null y accediendo al mismo de manera sincronizada.

123

Anexo I: Clasificacin de Seeds

AI.4.4.

Seeds en GridGain v2.0.2

GridToStringBuilder.toString(Class<T>, T): fan-in 136 Es parte de un crosscutting concern de tipo consistent behavior, implementa chequeos contra null y vaco, ejecutando sentencias para transformar a String un objeto. GridSpiAdapter.checkConfigurationConsistency(GridNode): fan-in 13 Es parte de un crosscutting concern de tipo contract enforcement, ya que chequea una condicin, y en caso de error imprime un mensaje. List<GridNode>.isEmpty(): fan-in 7 Es parte de un crosscutting concern concern de tipo contract enforcement, chequea que la lista contenga elementos, retornando true en ese caso, false en el contrario. GridDeploymentTask.getTaskClass(): fan-in 5 No es parte de un crosscutting concern, solo retorna un objeto. GridNode.getAttribute(String): fan-in 5 No es parte de un crosscutting concern, retorna directamente un objeto, lo obtiene de un Map (HashMap). GridUtils.byteArray2HexString(byte[]): fan-in 5 Transforma un array de bytes en String. Es parte de un crosscutting concern de tipo Consistent Behavior

AI.4.5.

Seeds en GridGain v2.1.0

GridMarshalHelper.marshal(GridMarshaller, Object): fan-in 6 Es parte de un crosscutting concern de tipo redirection layer, adapta/transforma un objeto en otro. GridSpiThread.interrupt(): fan-in 5 Es parte de un Crosscutting Concern de tipo Redirection Layer, ya que agrega funcionalidad al mtodo heredado. String.replaceAll(String, String): fan-in 5 No es parte de un Crosscutting Concern. 124

Anexo I: Clasificacin de Seeds

AI.4.6.

Seeds en GridGain v2.1.1

GridConfiguration.isPeerClassLoadingEnabled(): fan-in 5 Es parte de un crosscutting concern de tipo Contract Eforcement, se utiliza para chequeo de condicin.

AI.5. Seeds Detectados con Execution Relations - Inside Last


Mtodo/Fan-In por Versin GridToStringBuilder.toString(Class<T>, T) StringBuilder.toString() GridLogger.info(String) GridAbstractException.setData(int, String) GridLogger.debug(String) System.currentTimeMillis() GridKernal.afterCall() GridLogger.error(String, Throwable) Object.notifyAll() Thread.holdsLock(Object) Lock.unlock() GridLogger.warning(String) GridUtils.close(Closeable, GridLogger) Collections.unmodifiableMap(Map<? Extends K, ? extends V>) GridSpiAdapter.warnSpiParameter(String, String, GridNode) GridToStringBuilder.toString(Class<T>, T, String, Object) UUID.equals(Object) Collections.unmodifiableList(List<? Extends T>) GridUtils.makeMap(String, Serializable) Writer.write(String) Throwable.getMessage() Collections.singletonList(T) GridUtils.writeUUID(ObjectOutput, UUID) GridFactory.stop(String, boolean) GridUtils.readUUID(ObjectInput) GridLogger.getLogger(Object) GridResourceIoc.injectResource(Object, Class<? extends Annotation>, GridResourceInjector, GridDeploymentClass) GridSpiAdapter.warnSpi(String, Class<? extends GridSpi>, String) Throwable.printStackTrace(PrintStream) GridDiscoveryMetricsProvider.getMetrics() System.arrayCopy(Object, int, Object, int, int) GridDiscoveryListener.onDiscovery(GridDiscoveryEventType, 1.5.0 1.6.0 2.0.0 2.0.2 2.1.0 2.1.1
105 59 69 57 22 22 20 14 7 11 12 5 10 9 2 9 8 8 8 7 111 62 72 56 22 24 21 20 8 11 12 5 10 8 3 8 8 8 7 125 81 80 71 30 26 26 25 9 13 11 12 11 7 11 8 11 8 7 7 8 7 123 83 81 73 29 26 28 26 18 14 11 12 12 11 11 15 12 8 8 11 8 7 6 8 7 8 7 150 98 85 96 37 29 28 30 18 19 24 19 13 11 11 12 17 11 9 9 10 12 9 10 9 9 7 8 142 95 98 36 29 26 29 18 19 25 20 12 13 12 11 16 11 13 10 10 12 9 10 9 8 7 7

125

Anexo I: Clasificacin de Seeds


GridNode) GridMessageListener.onMessage(UUID, Serializable) 6 6 7 7 GridAbstractRuntimeException.setData(int, String) 2 6 7 5 12 System.getProperty(String) 6 6 6 6 7 GridConfiguration.getMarshaller() 6 Thread.interrupt() 6 6 6 6 6 UUID.hashCode() 6 Collections.unmodifiableSet(Set<? Extends T>) 9 10 4 4 4 Thread.sleep(long) 5 4 5 6 8 GridSpiContext.addDiscoveryListener(GridDiscoveryListener) 5 6 6 GridArgumentCheck.checkRange(boolean, String) 5 5 6 6 6 GridResourceContext.getLogger(Class<?>) 6 5 GridResourceIoc.injectResource(Object, Class<? extends Annotation>, Class<? extends GridTask<?, ?>>, GridResourceInjector) 5 6 GridRunnablePool.execute(GridRunnable) 3 6 6 6 6 Collections.emptyList() 4 4 6 GridCommunicationManager.removeMessageListener(String, GridMessageListener) 3 5 6 6 5 GridResourceProcessor.getLogger(Class<?>) 5 5 GridUtils.close(Statement, GridLogger) 5 File.getAbsolutePath() 3 4 4 4 4 GridUtils.intToBytes(int, byte[], int) 3 3 5 5 5 String.charAt(int) 3 3 3 3 7 String.equals(Object) 3 5 4 5 GridCheckpointManager.record(GridEventType, String, GridTaskSessionImpl) 4 4 4 4 4 GridCommunicationManager.addMessageListener(String, GridMessageListener) 2 3 5 5 4 Tabla AI.5 - Valor de fan-in para las seeds detectadas con Execution Relations - Inside Last en las 6 versiones de GridGain.

7 6 6 4 7 6 6 -

6 6 5 5 7 5 7 5 4

AI.5.1.

Seeds en GridGain v1.5.0

StringBuilder.toString(): fan-in 105 Es parte de un crosscutting concern, porque retorna una copia del String, no su valor original. Es de tipo redirection layer, decora/adapta un objeto. GridUtils.readUUID(ObjectInput): fan-in 9 Siempre se llama desde el mtodo readExternal(ObjectInput) lee el UUID desde la entrada stream. Es parte de un crosscutting concern de tipo Consistent Behavior. GridLogger.getLogger(Object): fan-in 8

126

Anexo I: Clasificacin de Seeds


Es parte de un crosscutting concern, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, debe crearlo primero. Es de tipo Consistent Behavior, ya que oculta la creacin del objeto al usuario. GridResourceContext.getLogger(Class<?>): fan-in 6 Es parte de un crosscutting concern, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, debe crearlo primero. Es de tipo Consistent Behavior, ya que oculta la creacin del objeto al usuario. UUID.hashCode(): fan-in 6 No es parte de un crosscutting concern, solo retorna un valor.

AI.5.2.

Seeds en GridGain v1.6.0

GridAbstractRuntimeException.setData(int, String): fan-in 6 No es parte de un crosscutting concern, realiza un set de dos valores pasados como parametros y retorna un objeto de tipo exception. GridCommunicationManager.removeMessageListener(String, GridMessageListener): fan-in 5 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que realiza operaciones sobre los oyentes.

AI.5.3.

Seeds en GridGain v2.0.0

Collections.unmodifiableList(List<? Extends T>): fan-in 11 Es parte de un crosscutting concern, transforma un objeto list en el mismo, pero de solo lectura. Es de tipo Redirection Layer, decora/adapta un objeto en otro. GridSpiContext.addDiscoveryListener(GridDiscoveryListener): fan-in 5 Es parte de un crosscutting concern, realiza operaciones sobre oyentes. Es de tipo Consistent Behavior. GridUtils.intToBytes(int, byte[], int): fan-in 5 Es parte de un crosscutting concern de tipo Consistent Behavior. Convierte un int en un arreglo de bytes.

127

Anexo I: Clasificacin de Seeds


GridResourceProcessor.getLogger(Class<?>): fan-in 5 Es parte de un crosscutting concern, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, debe crearlo primero. Es de tipo Consistent Behavior, ya que oculta la creacin del objeto al usuario. GridResourceIoc.injectResource(Object, Class<? extends Annotation>, GridResourceInjector, GridDeploymentClass) ) : fan-in 5 Es parte de un crosscutting concern de tipo redirection layer, ya sea llamndose a s mismo por recursin con otros parmetros o a otro mtodo para realizar la inyeccin en el inyector.

AI.5.4.

Seeds en GridGain v2.0.2

GridToStringBuilder.toString(Class<T>, T, String, Object): fan-in 11 Es parte de un crosscutting concern de tipo Consistent Behavior. Realiza un conjunto de sentencias para lograr la conversin a String.

AI.5.5.

Seeds en GridGain v2.1.0

Collections.singletonList(T): fan-in 9 Es parte de un crosscutting concern, transforma al objeto pasado como parmetro en una lista que contiene ese un nico objeto; dicha lista es serializable. Es de tipo redirection layer, decora/adapta un objeto en otro. Collections.emptyList(): fan-in 6 No es parte de un crosscutting concern, ya que lo nico que hace es crear una lista vacia y retornarla. GridConfiguration.getMarshaller(): fan-in 6 No es parte de un crosscutting concern, porque solo retorna un objeto.

AI.5.6.

Seeds en GridGain v2.1.1

No existen nuevos seeds en esta versin respecto a la anterior (v2.1.0).

128

Anexo I: Clasificacin de Seeds AI.6. Seeds Detectados con Fan-In Analysis


Mtodo/Fan-In por Versin GridJavaLogger.debug(String) GridJavaLogger.isDebugEnabled() GridJbossLogger.debug(String) GridJbossLogger.isDebugEnabled() GridJclLogger.debug(String) GridJclLogger.isDebugEnabled() GridLog4jLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridLogger.debug(String) GridLogger.isDebugEnabled() GridAbstractException.setData(int, String) GridToStringBuilder.toString(Class<T>, T) StringBuilder.toString() Object.getClass() GridJavaLogger.info(String) GridJbossLogger.info(String) GridJclLogger.info(String) GridLog4jLogger.info(String) GridLogger.info(String) GridJavaLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridLog4jLogger.isInfoEnabled() GridLogger.isInfoEnabled() Class<>.getSimpleName() GridJavaLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable ) GridJclLogger.error(String, Throwable) GridLog4jLogger.error(String, Throwable) GridLogger.error(String, Throwable) StringBuilder.append(String) System.currentTimeMillis() GridJavaLogger.warning(String) GridJbossLogger.warning(String) GridJclLogger.warning(String) GridLog4jLogger.warning(String) GridLogger.warning(String) GridNode.getId() UUID.equals(Object) GridArgumentCheck.checkNull(Object, String) GridNode.getMetrics() GridSpiAdapter.createSpiAttributeName(String) GridCoherenceDiscoveryNode.getId()
1.5.0 136 136 136 136 136 136 136 136 136 136 138 127 161 84 84 84 84 84 84 84 84 84 84 91 80 80 80 80 80 126 63 51 51 51 51 51 47 33 35 1.6.0 146 146 146 146 146 146 146 146 146 146 144 133 168 90 90 90 90 90 90 90 90 90 90 98 84 84 84 84 84 132 66 56 56 56 56 56 50 37 38 2.0.0 186 186 186 186 186 186 186 186 186 186 160 147 191 110 110 110 110 110 110 110 110 110 110 119 95 95 95 95 95 146 77 69 69 69 69 69 70 62 57 48 2.0.2 188 188 188 188 188 188 188 188 188 188 163 136 66 115 115 115 115 115 115 115 115 115 115 98 98 98 98 98 77 72 72 72 72 72 72 65 57 51 2.1.0 249 249 249 249 249 249 249 249 249 249 185 162 101 138 138 138 138 138 136 136 136 136 136 119 119 119 119 119 23 99 96 96 96 96 96 99 71 76 50 57 72 2.1.1 240 240 240 240 240 240 240 240 240 240 155 98 133 133 133 133 133 131 131 131 131 131 115 115 115 115 115 23 94 93 93 93 93 93 96 67 76 50 50 72

129

Anexo I: Clasificacin de Seeds


GridJbossDiscoveryNode.getId() GridMailDiscoveryNode.getId() GridJgroupsDiscoveryNode.getId() GridMulticastDiscoveryNode.getId() GridJmsDiscoveryNode.getMetrics() GridMuleDiscoveryNode.getId() GridMuleDiscoveryNode.getMetrics() GridJmsDiscoveryNode.getId() GridMailDiscoveryNode.getMetrics() GridMulticastDiscoveryNode.getMetrics() GridCoherenceDiscoveryNode.getMetrics() GridJbossDiscoveryNode.getMetrics() GridJgroupsDiscoveryNode.getMetrics() GridManagerRegistry.getDiscoveryManager() Object.notifyAll() GridTestPrintStream.out(Boolean) String.length() Throwable.getMessage() GridSpiAdapter.startInfo() GridSpiAdapter.startStopWatch() GridSpiAdapter.stopInfo() String.equals(Object) GridManagerRegistry.getCommunicationManager() GridSpiAdapter.registerMBean(String, T, Class<T>) GridSpiAdapter.unregisterMBean() Thread.holdsLock(Object) GridSpiAdapter.assertParameter(Boolean, String) GridTaskSession.getId() GridTaskSessionImpl.getId() GridSpiAdapter.configInfo(String, Object) File.isDirectory() GridKernal.afterCall() GridKernal.beforeCall() GridProcessorRegistry.getResourceProcessor() GridUtils.close(Closeable, GridLogger) File.getAbsolutePath() GridSpiAdapter.getSpiContext() GridProcessorAdapter.getManagerRegistry() GridSpiThread.isInterrupted() Lock.lock() Lock.unlock() System.getProperty(String) GridMarshalHelper.marshal(GridMarshaller, Object) GridDiscoveryMetricsProvider.getMetrics() File.exists() GridJavaLogger.getLogger(Object) GridJbossLogger.getLogger(Object)
36 37 36 36 36 35 28 28 27 21 25 25 25 27 27 25 25 10 24 23 23 21 25 22 22 22 23 19 18 19 17 17 39 40 39 39 39 38 31 32 33 28 22 25 25 25 32 29 25 25 14 24 23 23 21 26 24 24 22 24 19 21 21 17 17 47 46 47 45 52 45 51 44 49 49 48 48 48 40 38 33 29 32 34 34 34 32 33 34 34 15 30 28 28 30 26 26 26 33 22 24 20 22 22 13 13 20 14 19 17 17 50 49 49 48 52 48 51 47 49 49 48 48 48 40 38 33 27 39 34 34 34 36 33 34 34 14 30 30 30 30 26 26 26 34 22 24 25 22 22 23 23 21 14 19 17 17 71 70 70 71 50 69 50 69 50 50 50 50 50 58 44 33 43 41 38 38 38 34 37 37 61 33 32 32 33 28 29 29 9 32 26 23 25 25 25 24 23 28 19 24 24 71 70 70 71 50 69 50 69 50 50 50 50 50 58 43 33 42 41 36 36 36 34 35 35 61 31 32 32 31 26 29 29 32 24 23 23 25 25 24 18 24 19 24 24

130

Anexo I: Clasificacin de Seeds


GridJclLogger.getLogger(Object) GridLog4jLogger.getLogger(Object) GridLogger.getLogger(Object) GridJavaLogger.error(String) GridJbossLogger.error(String) GridJclLogger.error(String) GridLog4jLogger.error(String) GridLogger.error(String) GridDiscoverySpi.getRemoteNodes() GridTaskSessionImpl.getJobId() Thread.currentThread() GridDeploymentClass.getClassLoader() GridDiscoveryManager.getNode(UUID) Thread.sleep(long) Class<>.getClassLoader() GridUriDeploymentUtils.hidePassword(String) GridManagerRegistry.getEventStorageManager() GridArgumentCheck.checkRange(Boolean, String) GridCoherenceDiscoveryNode.getAttribute(String) GridJbossDiscoveryNode.getAttribute(String) GridJgroupsDiscoveryNode.getAttribute(String) GridJmsDiscoveryNode.getAttribute(String) GridMailDiscoveryNode.getAttribute(String) GridMuleDiscoveryNode.getAttribute(String) GridMulticastDiscoveryNode.getAttribute(String) GridNode.getAttribute(String) String.charAt(int) ReadWriteLock.writeLock() GridUriDeploymentScanner.getLogger() String.startsWith(String) GridUtils.resolveGridGainPath(String) GridDeploymentVersionedTask.getTaskClass() GridMarshalHelper.unmarshal(GridMarshaller, GridByteArrayList, ClassLoader) GridSpiAdapter.checkConfigurationConsistency(GridNode) Thread.start() String.substring(int, int) String.toLowerCase() GridToStringBuilder.toString(Class<T>, T, String, Object) Object.wait() Collections.unmodifiableMap(Map<? extends K, ? extends V>) Writer.write(String) Collections.unmodifiableList(List<? extends T>) GridConfiguration.getMarshaller() GridConfigurationAdapter.getMarshaller() GridDeploymentTaskAdapter.getTaskClass() GridResourceIoc.injectResource(Object, Class<? extends
17 17 17 15 15 15 15 15 18 17 5 12 13 7 17 11 9 11 11 11 11 11 11 11 11 13 14 11 10 11 12 12 6 12 11 11 17 17 17 15 15 15 15 15 18 17 14 14 13 10 17 12 11 11 11 11 11 11 11 11 11 13 14 13 13 10 13 12 16 12 11 12 17 17 17 17 17 17 17 17 17 17 19 16 16 12 17 14 16 16 16 16 16 16 16 16 16 14 8 15 15 15 14 13 12 15 12 12 12 17 17 17 18 18 18 18 18 17 19 19 16 17 16 17 14 16 19 19 19 19 19 19 19 19 13 15 14 15 15 13 13 14 12 12 11 15 12 13 12 12 24 24 24 23 23 23 23 23 20 19 24 17 22 23 29 16 21 19 17 17 17 17 17 17 17 17 17 17 14 15 16 14 15 13 14 13 11 13 13 13 12 12 12 24 24 24 23 23 23 23 23 18 19 23 17 22 20 27 16 21 19 14 14 14 14 14 14 14 14 17 17 14 15 14 12 14 13 14 13 11 12 13 12 12 12 12

131

Anexo I: Clasificacin de Seeds


Annotation>, GridResourceInjector, GridDeploymentClass) GridSpiAdapter.warnSpiParameter(String, String, GridNode) System.arrayCopy(Object, int, Object, int, int) Grid.getName() GridUtils.join(Thread, GridLogger) GridKernal.getName() GridAbstractRuntimeException.setData(int, String) GridDeploymentClass.getUserVersion() GridJunit4Runner.getTestClass() GridUtils.makeMap(String, Serializable) GridConfiguration.getGridLogger() GridConfigurationAdapter.getGridLogger() GridSourceAntTask.replaceLicense(Pattern, String, String, String, String) GridUtils.readUUID(ObjectInput) GridUtils.writeUUID(ObjectOutput, UUID) GridCommunicationManager.removeMessageListener(String, GridMessageListener) GridUtils.serialize(Serializable, GridLogger) GridUtils.interrupt(Thread) String.toUpperCase() GridByteArrayList.getArray() GridConfiguration.getMBeanServer() GridConfigurationAdapter.getMBeanServer() GridJunit4SuiteRunner.getTestClass() GridMailInboxConfiguration.getProtocol() GridResourceProcessor.getGrid() GridUtils.getTaskName(Class<? extends GridTask<?, ?>>) GridCommunicationManager.addMessageListener(String, GridMessageListener) GridUtils.byteArray2HexString(byte[]) ReadWriteLock.readLock() GridTaskSession.getTaskName() GridTaskSessionImpl.getTaskName() URL.toString() GridJavaLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridLog4jLogger.warning(String, Throwable) GridLogger.warning(String, Throwable) GridByteArrayList.getSize() GridJobWorker.getJobId() Thread.getContextClassLoader() GridConfiguration.getGridName() GridConfigurationAdapter.getGridName() GridSpiAdapter.onContextInitialized(GridSpiContext) GridTaskSession.getEndTime() GridTaskSessionImpl.getEndTime()

12 7 10 7 3 5 7 7 10 10 10 9 9 9 13 9 8 8 10 8 9 8 8 9 9 9 9 9 9 8 4 4 6 6

12 11 9 11 12 11 5 9 9 10 10 10 10 11 8 13 9 8 8 10 10 9 9 8 8 9 9 9 9 9 9 8 6 5 5 10 10

12 17 12 17 12 11 7 9 9 11 10 10 11 11 11 10 9 10 10 10 10 10 10 9 6 9 9 7 7 7 7 7 9 10 8 4 4 7 10 10

12 12 17 12 17 12 11 15 9 9 11 10 10 11 11 11 8 9 10 10 10 10 10 10 10 10 11 11 11 9 7 7 7 7 7 9 10 8 4 4 15 10 10

12 9 14 8 16 11 11 17 15 15 11 12 12 11 12 9 15 12 12 10 10 11 12 11 11 11 10 13 13 13 13 13 10 10 12 19 19 7 9 9

12 9 13 8 11 11 16 15 15 11 12 12 11 11 9 10 12 12 10 10 11 10 11 11 11 10 12 12 12 12 12 10 10 12 19 19 7 9 9

132

Anexo I: Clasificacin de Seeds


Collections.emptyList() GridFactory.stop(String, boolean) GridProcessorRegistry.getTimeoutProcessor() Method.invoke(Object, Object[]) GridConfiguration.getExecutorService() GridConfigurationAdapter.getExecutorService() Method.getAnnotation(Class <T>) UUID.randomUUID() Collections.singletonList(T) GridManagerRegistry.getDeploymentManager() GridCheckpointManager.CheckpointRequestListener.onMessage( UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) Throwable.getCause() GridDeploymentTask.getTaskClass() GridDiscoveryManager.getLocalNode() GridJobResult.getNode() GridJobResultImpl.getNode() GridConfiguration.getNodeId() GridConfigurationAdapter.getNodeId() GridRunnable.cancel() GridJobWorker.cancel()
3 4 3 6 6 4 6 5 6 8 8 8 8 6 4 5 5 4 4 11 10 4 3 8 5 6 6 7 7 4 7 7 7 7 7 7 7 7 6 4 5 5 4 4 6 6 9 11 8 11 6 6 8 8 5 8 7 7 7 7 7 7 7 6 9 3 6 6 4 4 5 5 9 11 8 11 7 7 8 8 5 8 7 7 7 7 7 7 7 6 13 3 7 7 4 4 4 4 14 12 10 11 13 13 12 11 15 10 10 10 10 10 10 10 10 11 12 10 10 12 12 4 4 14 12 10 11 13 13 12 11 15 10 9 9 9 9 9 9 9 11 12 10 10 12 12 4 4

Tabla AI.6 - Valor de fan-in para las seeds detectadas con Fan-In Analysis en las 6 versiones de GridGain.

AI.6.1.

Seeds en GridGain v1.5.0

GridJavaLogger.debug(String): fan-in 136 Verifica si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo consistent behavior. GridJbossLogger.debug(String): fan-in 136 Verifica si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo consistent behavior. GridJclLogger.debug(String): fan-in 136 133

Anexo I: Clasificacin de Seeds


Verifica si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo consistent behavior. GridLog4jLogger.debug(String): fan-in 136 Verifica si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo consistent behavior. GridJavaLogger.isDebugEnabled(): fan-in 136 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridJbossLogger.isDebugEnabled(): fan-in 136 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridJclLogger.isDebugEnabled(): fan-in 136 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridLog4jLogger.isDebugEnabled(): fan-in 136 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. Class<>.getSimpleName(): fan-in 91 No es parte de un crosscutting concern, solo devuelve el nombre de una clase. GridJavaLogger.info(String): fan-in 84 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJbossLogger.info(String): fan-in 84 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJclLogger.info(String): fan-in 84 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridLog4jLogger.info(String): fan-in 84 134

Anexo I: Clasificacin de Seeds


Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJavaLogger.isInfoEnabled(): fan-in 84 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridJbossLogger.isInfoEnabled(): fan-in 84 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridJclLogger.isInfoEnabled(): fan-in 84 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridLog4jLogger.isInfoEnabled(): fan-in 84 Realiza el chequeo de una condicin. Es parte de un crosscutting concern de tipo Contract Enforcement. GridJavaLogger.error(String, Throwable): fan-in 80 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJbossLogger.error(String, Throwable): fan-in 80 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJclLogger.error(String, Throwable): fan-in 80 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridLog4jLogger.error(String, Throwable): fan-in 80 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJavaLogger.warning(String): fan-in 51 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior.

135

Anexo I: Clasificacin de Seeds


GridJbossLogger.warning(String): fan-in 51 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridJclLogger.warning(String): fan-in 51 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridLog4jLogger.warning(String): fan-in 51 Chequea si esta habilitado y realiza el log del mensaje pasado como parmetro. Es parte de un crosscutting concern de tipo Consistent Behavior. GridMailDiscoveryNode.getId(): fan-in 37 No es parte de un crosscutting concern, solo retorna un objeto. GridJbossDiscoveryNode.getId(): fan-in 36 No es parte de un crosscutting concern, solo retorna un objeto. GridMuleDiscoveryNode.getId(): fan-in 36 No es parte de un crosscutting concern, solo retorna un objeto. GridMulticastDiscoveryNode.getId(): fan-in 36 No es parte de un crosscutting concern, solo retorna un objeto. GridCoherenceDiscoveryNode.getId(): fan-in 35 No es parte de un crosscutting concern, solo retorna un objeto. GridJmsDiscoveryNode.getId(): fan-in 35 No es parte de un crosscutting concern, solo retorna un objeto. GridSpiAdapter.startInfo(): fan-in 25 Es parte de un crosscutting concerns de tipo consistent behavior, controla el inicio de una operacin. Se ejecuta conjuntamente y siempre en el mismo orden con GridSpiAdapter.stopInfo(). GridSpiAdapter.stopInfo(): fan-in 25 Es parte de un crosscutting concerns de tipo consistent behavior, controla el fin de una operacin. Se ejecuta conjuntamente y siempre en el mismo orden con GridSpiAdapter.startInfo(). 136

Anexo I: Clasificacin de Seeds

GridSpiAdapter.configInfo(String, Object): fan-in 21 Es parte de un crosscutting concern de tipo Consistent Behavior, obtiene Strings uniformes para la configuracin de parmetros. GridDiscoverySpi.getRemoteNodes(): fan-in 18 Es parte de un crosscutting concern de tipo Consistent Behavior, porque arma una lista de nodos remotos, pero chequeando ciertas condiciones, adems de acceder a los nodos de manera sincronizada. GridJavaLogger.getLogger(Object): fan-in 17 Es parte de un crosscutting concerns, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, Debe crearlo primero. Es de tipo Redirection Layer, ya que oculta la creacin del objeto al usuario. GridJbossLogger.getLogger(Object): fan-in 17 Es parte de un crosscutting concerns, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, Debe crearlo primero. Es de tipo Redirection Layer, ya que oculta la creacin del objeto al usuario. GridJclLogger.getLogger(Object): fan-in 17 Es parte de un crosscutting concerns, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, Debe crearlo primero. Es de tipo Redirection Layer, ya que oculta la creacin del objeto al usuario. GridLog4jLogger.getLogger(Object): fan-in 17 Es parte de un crosscutting concerns, porque si bien solo retorna un logger, es un mtodo de interfaz que para retornar el Objeto, Debe crearlo primero. Es de tipo Redirection Layer, ya que oculta la creacin del objeto al usuario. GridJavaLogger.error(String): fan-in 15 Es parte de un crosscutting concern de tipo Redirection Layer. Realiza una redireccin a un log genrico. GridJbossLogger.error(String): fan-in 15 Es parte de un crosscutting concern de tipo Redirection Layer. Realiza una redireccin a un log genrico. GridJclLogger.error(String): fan-in 15 137

Anexo I: Clasificacin de Seeds


Es parte de un crosscutting concern de tipo Redirection Layer. Realiza una redireccin a un log genrico. GridLog4jLogger.error(String): fan-in 15 Es parte de un crosscutting concern de tipo Redirection Layer. Realiza una redireccin a un log genrico. String.toUpperCase(): fan-in 13 Es parte de un crosscutting concern, ya que es una funcionalidad extra a la de los mtodos. Es de tipo Consistent Behavior. GridDiscoveryManager.getNode(UUID): fan-in 12 Es parte de un crosscutting concern, ya que retorna el nodo con Id igual al pasado como parametro, pero para eso debe chequear condiciones y recorrer una lista de nodos en cierto caso. Es de tipo Consistent Behavior. String.substring(int, int): fan-in 12 No es parte de un crosscutting concern. GridCoherenceDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridJbossDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridJgroupsDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridJmsDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridMailDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridMuleDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. GridMulticastDiscoveryNode.getAttribute(String): fan-in 11 No es parte de un crosscutting concern. Es un mtodo getter. 138

Anexo I: Clasificacin de Seeds

GridRunnable.cancel(): fan-in 11 Es parte de un crosscutting concern de tipo Consistent Behavior. Se encarga de interrumpir un thread. GridJobWorker.cancel(): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior. Obtiene un objeto de tipo GridJob, al cual se encarga de interrumpir. GridUtils.join(Thread, GridLogger): fan-in 10 Es parte de un crosscutting concern de tipo redirection layer, chequea que el parametro Thread no sea null, para luego llamar al mtodo Thread.join. GridUtils.resolveGridGainPath(String): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior. El metodo se encarga de devolver el archivo sealado por el path que viene pasado como parametro, pero para eso necesita saber si el archivo en ese path existe, si no, intenta obtenerlo agregandole a ese path, el correspondiente a GRIDGAIN_HOME y si existe ah lo retorna, en otro caso, retorna null.

AI.6.2.

Seeds en GridGain v1.6.0

Grid.getName(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un valor. GridKernal.getName(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un valor. GridJunit4Runner.getTestClass(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un valor. GridUtils.serialize(Serializable, GridLogger): fan-in 11 Es parte de un crosscutting concern de tipo Consistent Behavior, es un metodo que serializa un objeto dado transformndolo a un array de bytes. Class<>.getClassLoader(): fan-in 10 No es parte de un crosscutting concern, porque solo retorna un objeto.

139

Anexo I: Clasificacin de Seeds


GridTaskSession.getEndTime(): fan-in 10 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo retorna un objeto. GridTaskSessionImpl.getEndTime(): fan-in 10 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo String.

AI.6.3.

Seeds en GridGain v2.0.0

GridJmsDiscoveryNode.getMetrics(): fan-in 52 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridMuleDiscoveryNode.getMetrics(): fan-in 51 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridMailDiscoveryNode.getMetrics(): fan-in 49 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridMulticastDiscoveryNode.getMetrics(): fan-in 49 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridCoherenceDiscoveryNode.getMetrics(): fan-in 48 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridJbossDiscoveryNode.getMetrics(): fan-in 48 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. GridJgroupsDiscoveryNode.getMetrics(): fan-in 48 Es parte de un crosscutting concern de tipo Redirection Layer, dependiendo de una condicin se realiza la redireccin para retornar un valor. Method.invoke(Object, Object[]): fan-in 11 140

Anexo I: Clasificacin de Seeds


No es parte de un crosscutting concern, es una invocacin al mtodo Object con los parmetros Object[]. GridConfiguration.getMBeanServer(): fan-in 10 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo debe retornar un objeto. GridConfigurationAdapter.getMBeanServer(): fan-in 10 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo MBeanServer. GridResourceProcessor.getGrid(): fan-in 10 Es parte de un crosscutting concern de tipo Redirection Layer, si bien solo retorna un objeto, para ello realiza una llamada a un metodo que no tiene la misma signatura, pero es claramente una redireccion.

AI.6.4.

Seeds en GridGain v2.0.2

GridDeploymentVersionedTask.getTaskClass(): fan-in 12 Es parte de un crosscutting concern de tipo Consistent Behavior, si bien solo retorna un objeto local a la clase, accede al mismo de manera sincronizada. GridDeploymentTaskAdapter.getTaskClass(): fan-in 12 No es parte de un crosscutting concern, porque solo retorna un objeto. GridTaskSession.getTaskName(): fan-in 11 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo retorna un objeto. GridTaskSessionImpl.getTaskName(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo String. GridUtils.getTaskName(Class<? extends GridTask<?, ?>>): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, si bien solo retorna un String, para ello debe llevar a cabo ciertas acciones y chequeos de condiciones.

AI.6.5.

Seeds en GridGain v2.1.0


141

Anexo I: Clasificacin de Seeds

GridConfigurationAdapter.getGridName(): fan-in 19 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo String. GridByteArrayList.getArray(): fan-in 15 No es parte de un crosscutting concern, si bien para retornar el objeto de tipo byte[] realiza un System.arraycopy, es la funcionalidad deseada. GridConfiguration.getGridLogger(): fan-in 15 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo retorna un objeto. GridConfigurationAdapter.getGridLogger(): fan-in 15 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo GridLogger. GridConfiguration.getExecutorService(): fan-in 13 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo retorna un valor. GridConfigurationAdapter.getExecutorService(): fan-in 13 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo ExecutorService. GridJavaLogger.warning(String, Throwable): fan-in 13 Es parte de un crosscutting concern de tipo Redirection Layer, redirige el loggeo a la implementacin del logger. GridJbossLogger.warning(String, Throwable): fan-in 13 Es parte de un crosscutting concern de tipo Redirection Layer, redirige el loggeo a la implementacin del logger. GridJclLogger.warning(String, Throwable): fan-in 13 Es parte de un crosscutting concern de tipo Redirection Layer, redirige el loggeo a la implementacin del logger. GridLog4jLogger.warning(String, Throwable): fan-in 13 Es parte de un crosscutting concern de tipo Redirection Layer, redirige el loggeo a la implementacin del logger. 142

Anexo I: Clasificacin de Seeds

GridLogger.warning(String, Throwable): fan-in 13 Es parte de un crosscutting concern de tipo Redirection Layer. GridConfiguration.getNodeId(): fan-in 12 No es parte de un crosscutting concern, porque si bien es un mtodo abstracto de una interfaz, su implementacin solo retorna un objeto. GridConfigurationAdapter.getNodeId(): fan-in 12 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo UUID. GridConfigurationAdapter.getMarshaller(): fan-in 12 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo GridMarshaller. GridDiscoveryManager.getLocalNode(): fan-in 12 Es parte de un crosscutting concern de tipo Redirection Layer, redirige la llamada al mismo mtodo pero de otro objeto. Thread.getContextClassLoader(): fan-in 12 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo ClassLoader. GridDeploymentClass.getUserVersion(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo String. Throwable.getCause(): fan-in 11 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo Throwable. GridCheckpointManager.CheckpointRequestListener.onMessage(UUID, Serializable): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridEventStorageManager.RequestListener.onMessage(UUID, Serializable): fan-in 10

143

Anexo I: Clasificacin de Seeds


Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable): fan-in 10 Es parte de un crosscutting concern de tipo Consistent Behavior, ya que enva notificacion de los mensajes recibidos, ademas de loggear informacin sobre esta accin. GridJobResult.getNode(): fan-in 10 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo GridNode. GridProcessorRegistry.getTimeoutProcessor(): fan-in 10 No es parte de un crosscutting concern, porque solo retorna un objeto de tipo GridTimeoutProcessor.

AI.6.6.

Seeds en GridGain v2.1.1

No existen nuevos concerns en esta versin respecto a la anterior (2.1.0).

144

Anexo II Tablas y Grficos de Cuartiles, Outliers y Box-Plots

En esta seccin se presentarn tablas con la cantidad de seeds confirmadas y falsos positivos comparadas con 8 medidas de referencia: 1. Media 2. Cuartil 1 3. Cuartil 2 4. Cuartil 3 5. Lmite Superior Extremo 6. Lmite Superior Normal 7. Lmite Inferior Normal 8. Lmite Inferior Extremo 9. Box-Plot Se presentarn, adems, los grficos correspondientes a cada uno de los anlisis sobre las medidas de referencia anteriores, teniendo en cuenta que en el caso de estudio presentado no existen Lmites Inferiores, ya que estos son valores negativos y una seed nunca tendr fan-in negativo. Por lo que las referencias 7 y 8 son solo tericas y no sern analizadas. Adicionalmente se agrega el grfico de box-plot para cada una de las tcnicas. La presentacin se hace en base al orden en que las seeds fueron identificadas, en primer trmino se analizan las seeds encontradas mediante Unique Method, luego las de Execution Relations en el orden: Outside Before, Outside After, Inside First e Inside Last, y por ltimo las detectadas mediante la tcnica de Fan-In Analysis.

AII.1. Cuartiles y Outliers para Unique Methods

AII.1.1.

Respecto a la Media

Valor del Lmite: 11,301

145

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 18 0 Menores a la Media 31 13 Total 49 13 Tabla AII.1 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

0 13 Falsos Positivos 31 Seeds Confirmadas

18

Mayores a la Media

Menores a la Media

Figura AII.1 - Clasificacin de seeds respecto a la Media.

AII.1.2.

Respecto al Cuartil 1

Valor del Lmite: 5,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 45 11 Menores al Cuartil 1 4 2 Total 49 13 Tabla AII.2 - Clasificacin de seeds respecto al Cuartil 1. 100% 90% 11 2

80%
70% 60% 50% 40% 30% 20% 10% 0% Mayores al Cuartil 1 45

Falsos Positivos
4

Seeds Confirmadas

Menores al Cuartil 1

Figura AII.2 - Clasificacin de seeds respecto al Cuartil 1.

146

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.1.3.

Respecto al Cuartil 2

Valor del Lmite: 6,917


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 29 2 Menores al Cuartil 2 20 11 Total 49 13 Tabla AII.3 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80% 70% 60% 50% 40% 30% 20%

2 11 Falsos Positivos 20 Seeds Confirmadas

29

10%
0% Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.3 - Clasificacin de seeds respecto al Cuartil 2.

AII.1.4.

Respecto al Cuartil 3

Valor del Lmite: 12,125


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 16 0 Menores al Cuartil 3 33 13 Total 49 13 Tabla AII.4 - Clasificacin de seeds respecto al Cuartil 3.

147

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 16 33 Falsos Positivos Seeds Confirmadas 0

13

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.4 - Clasificacin de seeds respecto al Cuartil 3.

AII.1.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 15,6875


Seeds Confirmadas Falsos Positivos

Mayores o iguales al 12 0 Lmite Superior Normal Menores al Lmite 37 13 Superior Normal Total 49 13 Tabla AII.5 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier. 100% 0

90%
80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Normal 12

13
Falsos Positivos Seeds Confirmadas

37

Menores al Lmite Superior Normal

Figura AII.5 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

148

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.1.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 26,3750


Seeds Confirmadas Falsos Positivos Mayores o iguales al 6 0 Lmite Superior Extremo Menores al Lmite 43 13 Superior Extremo Total 49 13 Tabla AII.6 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo 6 43 Falsos Positivos Seeds Confirmadas 0 13

Figura AII.6 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.1.7.

Box-Plot

Figura AII.7 - Box-Plot para Unique Method.

AII.2. Cuartiles y Outliers para Execution Relations - Outside Before AII.2.1. Respecto a la Media

Valor del Lmite: 12,152

149

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 6 9 Menores a la Media 15 21 Total 21 30 Tabla AII.7 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

21 Falsos Positivos Seeds Confirmadas

15

Mayores a la Media

Menores a la Media

Figura AII.8 - Clasificacin de seeds respecto a la Media.

AII.2.2.

Respecto al Cuartil 1

Valor del Lmite: 5,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 20 25 Menores al Cuartil 1 1 5 Total 21 30 Tabla AII.8 - Clasificacin de seeds respecto al Cuartil 1.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

25 5 Falsos Positivos

Seeds Confirmadas
20 1 Mayores al Cuartil 1 Menores al Cuartil 1

Figura AII.9 - Clasificacin de seeds respecto al Cuartil 1.

150

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.2.3.

Respecto al Cuartil 2

Valor del Lmite: 8,333


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 14 12 Menores al Cuartil 2 7 18 Total 21 30 Tabla AII.9 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80%

70%
60% 50% 40% 30% 20% 10% 0%

12

18

Falsos Positivos Seeds Confirmadas

14 7 Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.10 - Clasificacin de seeds respecto al Cuartil 2.

AII.2.4.

Respecto al Cuartil 3

Valor del Lmite: 14,042


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 6 7 Menores al Cuartil 3 15 23 Total 21 30 Tabla AII.10 - Clasificacin de seeds respecto al Cuartil 3.

151

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 6 15 7 23 Falsos Positivos Seeds Confirmadas

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.11 - Clasificacin de seeds respecto al Cuartil 3.

AII.2.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 18,5625


Seeds Confirmadas Falsos Positivos

Mayores o iguales al 5 4 Lmite Superior Normal Menores al Lmite 16 26 Superior Normal Total 21 30 Tabla AII.11 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Normal Menores al Lmite Superior Normal 5 16 4 26 Falsos Positivos Seeds Confirmadas

Figura AII.12 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

152

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.2.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 32,1250


Seeds Confirmadas Falsos Positivos Mayores o iguales al 2 2 Lmite Superior Extremo Menores al Lmite 19 28 Superior Extremo 21 30 Total Tabla AII.12 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90%

80%
70% 60% 50% 40% 30% 20%

2 28 Falsos Positivos Seeds Confirmadas 2 19

10%
0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo

Figura AII.13 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.2.7.

Box-Plot

Figura AII.14 - Box-Plot para Execution Relations - Outside Before.

AII.3. Cuartiles y Outliers para Execution Relations - Outside After AII.3.1. Respecto a la Media

Valor del Lmite: 12,094

153

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 6 2 Menores a la Media 23 17 Total 29 19 Tabla AII.13 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

2 17 Falsos Positivos 6 23 Seeds Confirmadas

Mayores a la Media

Menores a la Media

Figura AII.15 - Clasificacin de seeds respecto a la Media.

AII.3.2.

Respecto al Cuartil 1

Valor del Lmite: 4,625


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 22 14 Menores al Cuartil 1 7 5 Total 29 19 Tabla AII.14 - Clasificacin de seeds respecto al Cuartil 1.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

14

5 Falsos Positivos

22

Seeds Confirmadas

Mayores al Cuartil 1

Menores al Cuartil 1

Figura AII.16 - Clasificacin de seeds respecto al Cuartil 1.

154

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.3.3.

Respecto al Cuartil 2

Valor del Lmite: 6,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 20 7 Menores al Cuartil 2 9 12 Total 29 19 Tabla AII.15 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80% 70% 60% 50% 40% 30% 20% 9 20 12 Falsos Positivos Seeds Confirmadas 7

10%
0% Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.17 - Clasificacin de seeds respecto al Cuartil 2.

AII.3.4.

Respecto al Cuartil 3

Valor del Lmite: 10,188


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 9 3 Menores al Cuartil 3 20 16 Total 29 19 Tabla AII.16 - Clasificacin de seeds respecto al Cuartil 3.

155

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 9 20 Falsos Positivos Seeds Confirmadas 3 16

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.18 - Clasificacin de seeds respecto al Cuartil 3.

AII.3.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 12,9688


Seeds Confirmadas Falsos Positivos

Mayores o iguales al 5 2 Lmite Superior Normal Menores al Lmite 24 17 Superior Normal 29 19 Total Tabla AII.17 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Normal Menores al Lmite Superior Normal 5 24 2 17 Falsos Positivos Seeds Confirmadas

Figura AII.19 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

156

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.3.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 21,3125


Seeds Confirmadas Falsos Positivos Mayores o iguales al 4 2 Lmite Superior Extremo Menores al Lmite 25 17 Superior Extremo Total 29 19 Tabla AII.18 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo 4 25 2 17 Falsos Positivos Seeds Confirmadas

Figura AII.20 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.3.7.

Box-Plot

Figura AII.21 - Box-Plot para Execution Relations - Outside After.

AII.4. Cuartiles y Outliers para Execution Relations - Inside First AII.4.1. Respecto a la Media

Valor del Lmite: 15,335

157

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 10 2 Menores a la Media 28 20 Total 38 22 Tabla AII.19 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

2 20 Falsos Positivos 10 28 Seeds Confirmadas

Mayores a la Media

Menores a la Media

Figura AII.22 - Clasificacin de seeds respecto a la Media.

AII.4.2.

Respecto al Cuartil 1

Valor del Lmite: 5,125


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 29 16 Menores al Cuartil 1 9 6 Total 38 22 Tabla AII.20 - Clasificacin de seeds respecto al Cuartil 1.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

16

6 Falsos Positivos

29

Seeds Confirmadas

Mayores al Cuartil 1

Menores al Cuartil 1

Figura AII.23 - Clasificacin de seeds respecto al Cuartil 1.

158

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.4.3.

Respecto al Cuartil 2

Valor del Lmite: 7,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 21 10 Menores al Cuartil 2 17 12 Total 38 22 Tabla AII.21 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80% 70% 60% 50% 40% 30% 20% 21 17 Falsos Positivos Seeds Confirmadas 10 12

10%
0% Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.24 - Clasificacin de seeds respecto al Cuartil 2.

AII.4.4.

Respecto al Cuartil 3

Valor del Lmite: 11,917


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 13 2 Menores al Cuartil 3 25 20 Total 38 22 Tabla AII.22 - Clasificacin de seeds respecto al Cuartil 3.

159

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 13 25 Falsos Positivos Seeds Confirmadas 2 20

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.25 - Clasificacin de seeds respecto al Cuartil 3.

AII.4.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 15,3125


Seeds Confirmadas Falsos Positivos Mayores o iguales al 10 2 Lmite Superior Normal Menores al Lmite 28 20 Superior Normal Total 38 22 Tabla AII.23 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

100%
90% 80% 70% 60% 50% 40%

2 20 Falsos Positivos 10 28 Seeds Confirmadas

30%
20% 10% 0% Mayores o iguales al Lmite Superior Normal

Menores al Lmite Superior Normal

Figura AII.26 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

160

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.4.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 25,5000


Seeds Confirmadas Falsos Positivos Mayores o iguales al 9 2 Lmite Superior Extremo Menores al Lmite 29 20 Superior Extremo Total 38 22 Tabla AII.24 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo 9 29

2 20 Falsos Positivos Seeds Confirmadas

Figura AII.27 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.4.7.

Box-Plot

Figura AII.28 - Box-Plot para Execution Relations - Inside First.

AII.5. Cuartiles y Outliers para Execution Relations - Inside Last AII.5.1. Respecto a la Media

Valor del Lmite: 17,349

161

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 9 1 Menores a la Media 37 8 Total 46 9 Tabla AII.25 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

Falsos Positivos 9 37 Seeds Confirmadas

Mayores a la Media

Menores a la Media

Figura AII.29 - Clasificacin de seeds respecto a la Media.

AII.5.2.

Respecto al Cuartil 1

Valor del Lmite: 5,708


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 35 6 Menores al Cuartil 1 11 3 Total 46 9 Tabla AII.26 - Clasificacin de seeds respecto al Cuartil 1.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

Falsos Positivos 35 11 Seeds Confirmadas

Mayores al Cuartil 1

Menores al Cuartil 1

Figura AII.30 - Clasificacin de seeds respecto al Cuartil 1.

162

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.5.3.

Respecto al Cuartil 2

Valor del Lmite: 8,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 26 3 Menores al Cuartil 2 20 6 Total 46 9 Tabla AII.27 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80% 70% 60% 50% 40% 30% 20%

Falsos Positivos 26 20 Seeds Confirmadas

10%
0% Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.31 - Clasificacin de seeds respecto al Cuartil 2.

AII.5.4.

Respecto al Cuartil 3

Valor del Lmite: 12,083


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 13 1 Menores al Cuartil 3 33 8 Total 46 9 Tabla AII.28 - Clasificacin de seeds respecto al Cuartil 3.

163

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

Falsos Positivos 13 33 Seeds Confirmadas

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.32 - Clasificacin de seeds respecto al Cuartil 3.

AII.5.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 15,2708


Seeds Confirmadas Falsos Positivos Mayores o iguales al 10 1 Lmite Superior Normal Menores al Lmite 36 8 Superior Normal Total 46 9 Tabla AII.29 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier. 100% 90%

1 8 Falsos Positivos 10 36

80%
70% 60% 50% 40% 30% 20%

Seeds Confirmadas

10%
0% Mayores o iguales al Lmite Superior Normal Menores al Lmite Superior Normal

Figura AII.33 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

164

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.5.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 24,8333


Seeds Confirmadas Falsos Positivos Mayores o iguales al 7 1 Lmite Superior Extremo Menores al Lmite 39 8 Superior Extremo Total 46 9 Tabla AII.30 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo 7 39 Falsos Positivos Seeds Confirmadas

Figura AII.34 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.5.7.

Box-Plot

Figura AII.35 - Box-Plot para Execution Relations - Inside Last.

AII.6. Cuartiles y Outliers para Fan-In Analysis AII.6.1. Respecto a la Media

Valor del Lmite: 38,879

165

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots


Seeds Confirmadas Falsos Positivos

Mayores a la Media 44 13 Menores a la Media 86 63 Total 130 76 Tabla AII.31 - Clasificacin de seeds respecto a la Media.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

13 63 Falsos Positivos 44 86 Seeds Confirmadas

Mayores a la Media

Menores a la Media

Figura AII.36 - Clasificacin de seeds respecto a la Media.

AII.6.2.

Respecto al Cuartil 1

Valor del Lmite: 10,208


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 1 105 49 Menores al Cuartil 1 25 27 Total 130 76 Tabla AII.32 - Clasificacin de seeds respecto al Cuartil 1.

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%

49 27 Falsos Positivos 105 25 Seeds Confirmadas

Mayores al Cuartil 1

Menores al Cuartil 1

Figura AII.37 - Clasificacin de seeds respecto al Cuartil 1.

166

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

AII.6.3.

Respecto al Cuartil 2

Valor del Lmite: 17,000


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 2 79 25 Menores al Cuartil 2 51 51 Total 130 76 Tabla AII.33 - Clasificacin de seeds respecto al Cuartil 2.

100% 90% 80% 70% 60% 50% 40% 30% 20% 79 51 25

51
Falsos Positivos Seeds Confirmadas

10%
0% Mayores al Cuartil 2 Menores al Cuartil 2

Figura AII.38 - Clasificacin de seeds respecto al Cuartil 2.

AII.6.4.

Respecto al Cuartil 3

Valor del Lmite: 49,500


Seeds Confirmadas Falsos Positivos

Mayores al Cuartil 3 41 12 Menores al Cuartil 3 89 64 Total 130 76 Tabla AII.34 - Clasificacin de seeds respecto al Cuartil 3.

167

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots

100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 41 89 Falsos Positivos Seeds Confirmadas 12 64

Mayores al Cuartil 3

Menores al Cuartil 3

Figura AII.39 - Clasificacin de seeds respecto al Cuartil 3.

AII.6.5.

Respecto al Lmite Superior Normal

Valor del Lmite: 69,1458


Seeds Confirmadas Falsos Positivos Mayores o iguales al 33 5 Lmite Superior Normal Menores al Lmite 97 71 Superior Normal Total 130 76 Tabla AII.35 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier. 100% 90%

5 71 Falsos Positivos 33 97

80%
70% 60% 50% 40% 30% 20%

Seeds Confirmadas

10%
0% Mayores o iguales al Lmite Superior Normal Menores al Lmite Superior Normal

Figura AII.40 - Clasificacin de seeds respecto al Lmite Superior Normal Outlier.

168

Anexo II: Tablas y Grficos de Cuartiles, Outliers y Box-Plots AII.6.6. Respecto al Lmite Superior Extremo

Valor del Lmite: 128,0833


Seeds Confirmadas Falsos Positivos Mayores o iguales al 12 2 Lmite Superior Extremo Menores al Lmite 118 74 Superior Extremo Total 130 76 Tabla AII.36 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier. 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Mayores o iguales al Lmite Superior Extremo Menores al Lmite Superior Extremo

2 74 Falsos Positivos

12
118

Seeds Confirmadas

Figura AII.41 - Clasificacin de seeds respecto al Lmite Superior Extremo Outlier.

AII.6.7.

Box-Plot

Figura AII.42 - Box-Plot para Execution Relations - Fan-In Analysis.

169

Anexo III Mtricas del Caso de Estudio

En esta seccin se presentan los valores arrojados por las mtricas CC (Ciclomatic Complexity), NCSS (Non Commenting Source Statements), NLS (Number Of Locals in Scope) y NOL (Number of Levels) por crosscutting concern, para cada seed de gridgain afectada al mismo. Estos valores se evaluaron en promedio en el Captulo 6.

AIII.1. Crosscutting Concern Logging AIII.1.1. Mtricas para las Seeds en GridGain v1.5.0
Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled() GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable) GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable) GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable) GridLog4jLogger.warning(String) GridJclLogger.warning(String)

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2 2 2 1 2 2 2 2 1 2 2

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1

170

Anexo III: Mtricas del Caso de Estudio


GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

1 1 0 3 1 1 1 0 1 1 1 1 0 1 1 1 1 0

2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.1.2.

Mtricas para las Seeds en GridGain v1.6.0


Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled() GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable) GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable) GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable)

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2 2 2 1 2 2 2 2 1

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

171

Anexo III: Mtricas del Caso de Estudio


GridLog4jLogger.warning(String) GridJclLogger.warning(String) GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

1 1 1 1 0 3 1 1 1 0 1 1 1 1 0 1 1 1 1 0

2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.1.3.

Mtricas para las Seeds en GridGain v2.0.0


Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled() GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable) GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable)

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2 2 2 1 2 2 2

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1

172

Anexo III: Mtricas del Caso de Estudio


GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable) GridLog4jLogger.warning(String) GridJclLogger.warning(String) GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

1 0 1 1 1 1 0 3 1 1 1 0 1 1 1 1 0 1 1 1 1 0

2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.1.4.

Mtricas para las Seeds en GridGain v2.0.2


Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled() GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable)

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2 2 2 1 2

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1

173

Anexo III: Mtricas del Caso de Estudio


GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable) GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable) GridLog4jLogger.warning(String) GridJclLogger.warning(String) GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

1 1 1 0 1 1 1 1 0 3 1 1 1 0 1 1 1 1 0 1 1 1 1 0

2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.1.5.

Mtricas para las Seeds en GridGain v2.1.0


Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled() GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled()

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 3 1 1 1

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2 2 2

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1

174

Anexo III: Mtricas del Caso de Estudio


GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable) GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable) GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable) GridLog4jLogger.warning(String) GridJclLogger.warning(String) GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.1.6.

Mtricas para las Seeds en GridGain v2.1.1


Seeds del CCC Logging
GridLog4jLogger.debug(String) GridJclLogger.debug(String) GridJbossLogger.debug(String) GridJavaLogger.debug(String) GridLogger.debug(String) GridLog4jLogger.isDebugEnabled() GridJclLogger.isDebugEnabled() GridJbossLogger.isDebugEnabled() GridJavaLogger.isDebugEnabled() GridLogger.isDebugEnabled() GridLog4jLogger.info(String) GridJclLogger.info(String) GridJbossLogger.info(String) GridJavaLogger.info(String) GridLogger.info(String) GridLog4jLogger.isInfoEnabled() GridJclLogger.isInfoEnabled()

CC 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 3 1

NCSS 3 3 3 3 1 2 2 2 2 1 3 3 3 3 1 2 2

NLS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

NOL 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1

175

Anexo III: Mtricas del Caso de Estudio


GridJbossLogger.isInfoEnabled() GridJavaLogger.isInfoEnabled() GridLogger.isInfoEnabled() GridLog4jLogger.error(String, Throwable) GridJclLogger.error(String, Throwable) GridJbossLogger.error(String, Throwable) GridJavaLogger.error(String, Throwable) GridLogger.error(String, Throwable) GridLog4jLogger.warning(String) GridJclLogger.warning(String) GridJbossLogger.warning(String) GridJavaLogger.warning(String) GridLogger.warning(String) GridLog4jLogger.getLogger(Object) GridJclLogger.getLogger(Object) GridJbossLogger.getLogger(Object) GridJavaLogger.getLogger(Object) GridLogger.getLogger(Object) GridLog4jLogger.error(String) GridJclLogger.error(String) GridJbossLogger.error(String) GridJavaLogger.error(String) GridLogger.error(String) GridLog4jLogger.warning(String, Throwable) GridJclLogger.warning(String, Throwable) GridJbossLogger.warning(String, Throwable) GridJavaLogger.warning(String, Throwable) GridLogger.warning(String, Throwable)

1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0

AIII.2. Crosscutting Concern Data Validation AIII.2.1. Mtricas para las Seeds en GridGain v1.5.0
Seeds del CCC Data Validation
GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

CC 2 2 2

NCSS 3 3 3

NLS 0 0 0

NOL 2 2 2

AIII.2.2.

Mtricas para las Seeds en GridGain v1.6.0


Seeds del CCC Data Validation
CC 2 2 2 NCSS 3 3 3 NLS 0 0 0 NOL 2 2 2

GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

176

Anexo III: Mtricas del Caso de Estudio

AIII.2.3.

Mtricas para las Seeds en GridGain v2.0.0


Seeds del CCC Data Validation
CC 2 2 2 NCSS 3 3 3 NLS 0 0 0 NOL 2 2 2

GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

AIII.2.4.

Mtricas para las Seeds en GridGain v2.0.2


Seeds del CCC Data Validation
CC 2 2 2 NCSS 3 3 3 NLS 0 0 0 NOL 2 2 2

GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

AIII.2.5.

Mtricas para las Seeds en GridGain v2.1.0


Seeds del CCC Data Validation
CC 2 2 2 NCSS 3 3 3 NLS 0 0 0 NOL 2 2 2

GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

AIII.2.6.

Mtricas para las Seeds en GridGain v2.1.1


Seeds del CCC Data Validation
CC 2 2 2 NCSS 3 3 3 NLS 0 0 0 NOL 2 2 2

GridArgumentCheck.checkNull(Object, String) GridSpiAdapter.assertParameter(Boolean, String) GridArgumentCheck.checkRange(Boolean, String)

AIII.3. Crosscutting Concern Synchronization AIII.3.1. Mtricas para las Seeds en GridGain v1.5.0
Seeds del CCC Synchronization
GridKernal.beforeCall() GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable)

CC 3 2 2 9 0

NCSS 8 6 14 31 0

NLS 0 0 0 3 0

NOL 3 2 2 6 0

177

Anexo III: Mtricas del Caso de Estudio


GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

6 0 5 14 0 3 1 0 5 4

21 0 17 44 0 9 3 1 14 17

5 0 0 0 0 0 0 0 2 0

4 0 2 5 0 2 1 0 4 4

AIII.3.2.

Mtricas para las Seeds en GridGain v1.6.0


Seeds del CCC Synchronization
CC 3 2 6 12 8 6 2 6 14 6 4 1 0 1 7 NCSS 8 6 27 43 27 21 27 17 44 23 14 3 1 2 28 NLS 0 0 0 5 0 5 0 0 0 5 0 0 0 0 0 NOL 3 2 5 8 3 4 2 2 5 2 3 1 0 1 4

GridKernal.beforeCall() GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

AIII.3.3.

Mtricas para las Seeds en GridGain v2.0.0


Seeds del CCC Synchronization
CC 2 NCSS 6 NLS 0 NOL 2

GridKernal.beforeCall()

178

Anexo III: Mtricas del Caso de Estudio


GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

2 6 13 10 6 8 5 16 8 4 1 0 1 7

6 27 48 38 21 27 16 54 27 14 3 1 2 28

0 0 6 0 5 0 0 0 5 0 0 0 0 0

2 5 8 4 4 4 2 5 3 3 1 0 1 4

AIII.3.4.

Mtricas para las Seeds en GridGain v2.0.2


Seeds del CCC Synchronization
CC 2 2 6 13 11 6 8 6 16 8 4 1 0 1 7 NCSS 6 6 25 48 39 21 27 14 54 27 14 3 1 2 28 NLS 0 0 0 6 0 5 0 0 0 5 0 0 0 0 0 NOL 2 2 5 8 5 4 4 2 5 3 3 1 0 1 4

GridKernal.beforeCall() GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

179

Anexo III: Mtricas del Caso de Estudio

AIII.3.5.

Mtricas para las Seeds en GridGain v2.1.0


Seeds del CCC Synchronization
CC 2 2 5 13 14 16 8 6 16 10 4 1 0 1 7 NCSS 6 6 25 48 61 63 27 14 54 34 14 3 1 2 31 NLS 0 0 4 6 8 11 0 0 0 5 0 0 0 0 0 NOL 2 2 4 8 6 6 4 2 5 4 3 1 0 1 5

GridKernal.beforeCall() GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable) GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

AIII.3.6.

Mtricas para las Seeds en GridGain v2.1.1


Seeds del CCC Synchronization
CC 2 2 5 13 14 16 2 6 16 10 NCSS 6 6 25 48 61 63 27 14 54 34 NLS 0 0 4 6 8 11 0 0 0 5 NOL 2 2 4 8 6 6 2 2 5 4

GridKernal.beforeCall() GridKernal.afterCall() GridCommunicationManager.addMessageListener(String, GridMessageListener) GridJobWorker.finishJob(Serializable, GridException, boolean) GridJobProcessor.JobExecutionListener.onMessage(UUID, Serializable) GridEventStorageManager.RequestListener.onMessage(UU ID, Serializable) GridTaskProcessor.JobMessageListener.onMessage(UUID, Serializable) GridMessageListener.onMessage(UUID, Serializable) GridJobProcessor.JobCancelListener.onMessage(UUID, Serializable) GridJobProcessor.JobSessionListener.onMessage(UUID, Serializable)

180

Anexo III: Mtricas del Caso de Estudio


GridCheckpointManager.CheckpointRequestListener.onMe ssage(UUID, Serializable) GridJgroupsDiscoveryNode.isReady() GridDiscoverySpi.getRemoteNodes() GridJobWorker.cancel() GridCommunicationManager.removeMessageListener(Strin g, GridMessageListener)

4 1 0 1 7

14 3 1 2 31

0 0 0 0 0

3 1 0 1 5

181

Captulo 8 Bibliografa

VIII.1. Bibliografa
[1] Tonella Paolo and Ceccato Mariano: "Migrating Interface Implementations to Aspects". Proceedings of the 20th IEEE International Conference on Software Maintenance (ICSM04) 1063-6773/04 2004 IEEE. [2] Kellens Andy, Mens Kim and Tonella Paolo, "A survey of automated code-level aspect mining techniques". In: Lecture Notes in Computer Science, Springer Berlin/Heidelberg (2007), vol. 4640. 143-162. [3] Gybels K. and Kellens A., "Experiences with Identifying Aspects in Smalltalk Using Unique Methods". In: International Conference on Aspect Oriented Software Development. Amsterdam, Netherlands 2005. [4] Marin M., van Deursen A. and Moonen L., "Identifying aspects using fan-in analysis". In: Working Conference on Reverse Engineering (WCRE), IEEE Computer Society (2004). [5] Krinke J., "Mining Control Flow Graphs for Crosscutting Concerns". In: Proceedings of the 13th Working Conference on Reverse Engineering (WCRE), IEEE - Computer Society. Washington, DC, USA (2006) 334-342. [6] Vidal S. A., Abait E. S. and Marcos C. A., "Un proceso iterativo para la refactorizacin de aspectos". Avances en Sistemas e Informtica, Vol. 6, Nm. 1, Junio 2009, pp. 93-104 Universidad Nacional de Colombia. [7] Laddad Rammivas, "AspectJ in Action: Practical Aspect-Oriented Programming". Manning Publications Co (2003). ISBN 1-930110-93-6. [8] GridGain web page: http://www.gridgain.com [9] R. Laddad, "I want my AOP", Part 1, 2, 3 from JavaWorld.com (2002). [10] Kiczales G., Lamping J., Mendhekar A., Maeda C., Lopes C., Loingtier J. M. and Irwin J., "Aspect oriented programming". In: Proceedings of the 11th European

182

Bibliografa
Conference on Object-Oriented Programming (ECOOP), of Lecture Notes in Computer Science, Springer-Verlag (1997), vol. 1241, 220-242. [11] Kellens A. and Mens K., "A survey of aspect mining tools and techniques". Technical report, INGI 2005-07, Universite catholique de Louvain, Belgium (2005). [12] E. Gamma. JHotDraw Project. http://sourceforge.net/projects/jhotdraw [13] Soares S., Borba P. and Laureano E., "Distribution and Persistence as Aspects". In: Software Practice and Experience, Wiley, vol. 36 (7), (2006) 711-759. [14] Asteasuain Fernando y Contreras Bernardo Ezequiel, "Programacin Orientada a Aspectos: Anlisis del Paradigma". Tesis de Licenciatura. 2002. [15] Kiczales G., Hilsdale E., Hugunin J., Kersten M., Palm J. and Griswold W., "An Overview of AspectJ". ECOOP 2001. [16] Hannemann J. and Kiczales G., "Overcoming the Prevalent Decomposition in Legacy Code". In: Workshop on Advanced Separation of Concerns, 23rd International Conference on Software Engineering (ICSE). 2001. [17] Casado Bernardez Alfredo, "Programacin Orientada a Aspectos". Universidad Rey Juan Carlos. Departamento de Informtica, Estadstica y Telemtica. [18] Joskowicz Jos, "Programacin Orientada Aspectos". Universidad de Vigo, Espaa. 2008. [19] Sutton S. M. and Rouvellou I., "Modeling of software concerns in cosmos". In: AOSD '02: Proceedings of the 1st international conference on Aspect Oriented Software Development. New York, NY, USA: ACM Press, 2002, pp. 127/133. [20] Marin M., Van Deursen A. and Moonen L., "Identifying Crosscutting Concerns Using Fan-In Analysis". 2007. [21] Robillard M. and Murphy G., "Concern graphs: Finding and describing concerns using structural program dependencies". In: Proceedings of the 24th International Conference on Software Engineering (ICSE). ACM press, Boston, MA. 2002. [22] Griswold W. G., Yuan J. J. and Kato Y., "Exploiting the map metaphor in a tool for software evolution". In: ICSE 01: Proceedings of the 23rd International Conference on Software Engineering. IEEE Computer Society, Washington, DC, 265274. 2001. [23] Murphy G. C., Griswold W. G., Robillard M. P., Hannemann J. and Leong W., "Design recommendations for concern elaboration tools". In: Aspect-Oriented Software Development, R. E. Filman, T. Elrad, S. Clarke, and M. Ak sit, Eds. AddisonWesley, Boston, 507530. 2005.

183

Bibliografa
[24] Marin M., "An Integrated System to Manage Crosscutting Concerns in Source Code". 2007. [25] Breu S. and Krinke J., "Aspect mining using event traces". In: Proceedings of International Conference on Automated Software Engineering, pages 310315, 2004. [26] Marin M., Moonen L., van Deursen A., "A common framework for aspect mining based on crosscutting concern sorts". In: Proceedings of Working Conference on Reverse Engineering (WCRE), IEEE Computer Society Press (2006) 2938. [27] Gamma E., Helm R., Johnson R. and Vlissides J., "Desing Patterns". AddisonWesley, 1995. [28] Ceccato M., Marin, M., Mens, K., Moonen, L., Tonella, P., Tourw, T., "A qualitative comparison of three aspect mining techniques". In: International Workshop on Program Comprehension (IWPC 2005), IEEE Computer Society Press 1322. [29] http://www.gridgain.com/blog2007.html [30] http://www.gridgainsystems.com [31] Esteban S. Abait and Claudia A. Marcos., "Improving Effectiveness in the Identification of Crosscutting Concerns in Source Code". ISISTAN Research Institute Fac. de Ciencias Exactas - UNCPBA. Tandil, Bs. As., Argentina. CIC (Comisin de Investigaciones Cientficas). [32] Friedman-Hill E., "Jess in Action". Manning Publications, ISBN 1-930110-89-8. 2003. [33] Hawkins, D., "Identification of Outliers". Chapman and Hall. London. 1980. [34] John D. Emerson and Judith Strenio, "Boxplots and Batch Comparison". In: Understanding Robust and Exploratory Data Analysis, David C. Hoaglin, Fredrick Mosteller, and John W. Tukey, editors, (New York, John Wiley & Sons), 1983, pp.58-65. Tukeys original work can be found in, Exploratory Data Analysis, Addison-Wesley, 1977. [35] Jeffrey Dean and Sanjay Ghemawat, "Map/Reduce: Simplified Data Processing on Large Clusters".In: USENIX Association OSDI 04: 6th Symposium on Operating Systems Design and Implementation. [36] Rob V. van Nieuwpoort, Jason Maassen, Gosia Wrzesinska, Thilo Kielmann, and Henri E. Bal, "Adaptive load balancing for divide-and-conquer grid applications". Journal of Supercomputing, 2006.

184

Bibliografa
[37] M.H.J. Nijhuis, "Divide-and-conquer barnes-hut implementations". Master's thesis, Faculty of Sciences, Division of Computer Science, Vrije Universiteit, Amsterdam, The Netherlands, May 2004. [38] www.cesma.usb.ve/~npena/estadistica_1/BOXPLOT-ayudaenlinea4.htm#Cuartiles [39] www.hojamat.es/estadistica/tema3/teoria/teoria3.pdf [40] http://es.wikipedia.org/wiki/Teora_de_conjuntos [41] http://es.wikipedia.org/wiki/Unin_de_conjuntos [42] http://es.wikipedia.org/wiki/Interseccin_de_conjuntos [43] http://es.wikipedia.org/wiki/Diferencia_de_conjuntos [44] http://es.wikipedia.org/wiki/Diferencia_simtrica [45] Antonia Huertas Snchez y Mara Manzano Arjona, "Teora de Conjuntos". Febrero 2002. [46] Steven M. Beitzel, "On Understanding and Classifying Web Queries". 2006. [47] Murray R. Spiegel, John J. Schiller, R. Alu Srinivasan, "Teora y problemas de probabilidad y estadstica". McGraw-Hill, 2006. [48] A. S. Tanenbaum, "Sistemas Hispanoamericana, S.A., Mxico, 1996. Operativos Distribuidos". Prentice Hall

[49] Ben-Ari, M., "Principles of Concurrent and Distributed Programming". Prentice Hall, 1990. ISBN 0-13-711821-X. Ch16, Page 164. [50] W. Huffman, V. Pless, "Fundamentals of error-correcting codes". Cambridge University Press, ISBN 9780521782807, 2003. [51] Donald Knuth, "Fundamental Algorithms". Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Section 2.5: Dynamic Storage Allocation, pp. 435456. [52] Data Validation, Data Integrity, Designing Distributed Applications with Visual Studio .NET http://msdn.microsoft.com/en-us/library/aa291820%28VS.71%29.aspx [53] D. lvarez Gutirrez, M.A. Daz Fondn, F. lvarez Garca, L. Tajes Martnez, A.B. Martnez Prieto and R. Izquierdo Castanedo, "Persistencia en Sistemas Operativos Orientados a Objetos. Ventajas Para Los Sistemas de Gestin de Bases de Datos". Dpto. de Matemticas, Universidad de Oviedo, Espaa. http://www.di.uniovi.es/ioos/publications/oodbms/corunia96.pdf

185

Bibliografa
[54] Jim Gray and Andreas Reuter, "Transaction Processing - Concepts and Techniques". Morgan Kaufmann, ISBN 1-55860-190-2. 1993. [55] Gary McGraw, John Viega , Introduction to Software Security, 2001. http://www.awprofessional.com/articles/printerfriendly.asp?p=23950 [56] http://en.wikipedia.org/wiki/Data_logging [57] Henry, S. and Kafura, D., "Software Structure Metrics Based on Information Flow". IEEE Transactions on Software Engineering, SE-7, pp. 510-518. 1981. [58] McCabe T. J., "A Complexity Measure". IEEE Transaction on Software Engineering, SE-2, pp. 308-320. [59] http://eclipse-metrics.sourceforge.net/ [60] http://www.kclee.de/clemens/java/javancss/ [61] Kim Mens, Andy Kellens, Frederic Pluquet and Roel Wuyts, "The Intensional View Environment". 2005.

186

You might also like