Está en la página 1de 4

Sobre los mensajes de error de los compiladores

V. Javier Traver
Dep. Lenguajes y Sistemas Informticos Universitat Jaume I, Castelln, Spain vtraver@uji.es

Resumen. Pese a los esfuerzos que se realizan en proporcionar tcnicas y herramientas que faciliten el complejo proceso de desarrollo de software, existe un aspecto que parece olvidado: los mensajes de los compiladores. Sin embargo, dichos mensajes constituyen el ingrediente fundamental para una efectiva interaccin programador-compilador. Este artculo reflexiona sobre este descuidado tema, que afecta a todo tipo de programadores, pero de modo especial a programadores noveles (e.g., estudiantes de informtica), cuyo aprendizaje de la programacin puede verse obstaculizado por dichos mensajes. Analizamos algunos de estos mensajes para un compilador concreto, en el contexto de una asignatura de programacin de una universidad espaola, y proponemos algunas medidas dirigidas a solucionar o reducir este problema.

1 Introduccin
Desde la ingeniera del software se han propuesto principios, tcnicas, mtodos, estrategias, y herramientas para dar soporte al complejo proceso de desarrollo de software. Paradjicamente, la atencin se ha centrado en unas partes de este proceso, de modo que el programador sigue desasistido en la intelectualmente exigente tarea de la codificacin. Posiblemente, esta falta de atencin se deba al estereotipo, an vigente, del programador como un todo-terreno, que debe aparselas con su cdigo y lidiar como pueda con el compilador. Consideramos que esta situacin no es deseable: el proceso de desarrollo de software, as como el del aprendizaje de la programacin se pueden resentir seriamente. La disciplina HCI puede, sin duda, arrojar luz sobre este tema. Sin embargo, sus esfuerzos en el campo de la programacin han girado en torno a temas como programacin textual vs. visual; paradigmas procedimentales vs. orientadas a objetos; etc. [6]. Un trabajo con una preocupacin similar se remonta a 1982 [4]. Por aquel entonces, algunas voces reconocan el escaso inters prestado por la comunidad HCI hacia los mensajes de error [1]. Aunque estos primeros trabajos se centraban en el problema general de estos mensajes, Shneiderman [5] documenta experimentos en los que mensajes de error de COBOL se modificaron para evaluar su influencia en los programadores. Un trabajo anterior [2] trataba sobre la adecuada comunicacin compilador-programador. No deja de sorprender el hecho de que, a pesar de que han transcurrido tres dcadas desde estos estudios, los mensajes de error en general, y de los compiladores en particular, siguen siendo poco usables. Una mirada a los avances

344 Traver, V.J.

e investigacin en la tecnologa de los compiladores nos revela una falta de preocupacin, casi absoluta, hacia este tipo de cuestiones. Una interesante excepcin es el trabajo de Jeffery [3].

2 Un caso de estudio
En el curso 2.00203 prestamos atencin a y recopilamos algunos de los mensajes de error que nuestros estudiantes de la asignatura Programacin Avanzada (2 curso de Ingeniera Informtica, Universidad Jaume I), se encontraron al elaborar sus programas en C++ con el compilador g++. Un anlisis de las dificultades que supone comprender un mensaje y diagnosticar el correspondiente error del cdigo fuente, nos sugiere clasificar los mensajes en varios tipos: Mensajes poco claros y poco especficos. Un ejemplo de este tipo de mensaje es: ANSI C++ forbids declaration 'ostream' with no type 'ostream' is neither function nor method; cannot be declared friend parse error before '&' El diagnstico, no trivial para un programador novel, es que falta incluir el fichero de cabecera iostream. Pensamos que el compilador, idealmente, debera afinar ms, siendo su mensaje ms cercano al posible diagnstico, de modo que el programador pueda rpidamente entender y arreglar el problema. De lo contrario, los mensajes suponen una importante distraccin de la principal tarea. Mensajes confusos o engaosos. Aqu can't initialize friend function '<<' friend declaration not in class definition el problema estaba en que la palabra clave friend apareca al definir la funcin, cuando slo hay que ponerla al declararla. Sin embargo, la indicacin del mensaje no sugiere para nada que ste sea el problema. Se habla de inicializar, lo que puede despistar ms que ayudar, y de declaracin, trmino que todava no terminan de entender los estudiantes (lo confunden con definicin). Mismo error lgico, diferentes mensajes. El diagnstico de este otro mensaje: In method 'float SavingAccount::getInterestRate()': parse error before '{' era que faltaba cerrar con } el cuerpo de la funcin precedente. Sin embargo, dependiendo de dnde falte este carcter (}), los mensajes del compilador difieren sustancialmente. Esta falta de consistencia dificulta el que un programador novel elabore un buen modelo mental y le permita, en el futuro, dado un mensaje de error, predecir su diagnstico. Otro problema es la falta de precisin en la localizacin del error. El compilador indica una lnea del cdigo, y los programadores tienden a mirar el cdigo localmente,

Sobre los mensajes de error de los compiladores 345

en busca del error sintctico/semntico. Sin embargo, en este caso el problema est bastante antes que la lnea marcada como errnea, y como excepcin, el texto de este mensaje poda ayudar, puesto que indicaba el nombre de la funcin. Desafortunadamente, el programador, sobre todo el novel, acostumbrado a la poca ayuda ofrecida por los mensajes de error, se habita a fijarse ms en la posicin del error que en el texto del mensaje. Mismo mensaje, muchos posibles errores lgicos. Un contexto concreto en que apareca este mensaje parse error before , era debido a que se pona el tipo de los argumentos que se pasaban al constructor de la clase base, en la lista de inicializacin del constructor de la clase derivada, cuando, al tratarse de una llamada a una funcin, deba pasarse slo los parmetros (no se trataba de una declaracin). Adems de la nula ayuda que ofrece el mensaje en este contexto, el agravante est en que multitud de errores lgicos pueden estar asociados al mismo mensaje. Ello dificulta el aprendizaje, porque no es posible generalizar y aprovechar el diagnstico hecho en un caso para reutilizarlo cuando vuelva a ocurrir este mismo mensaje.

3 Posibles soluciones
La solucin ideal es que los mensajes de error de los compiladores sigan los criterios de usabilidad comunmente establecidos. Ello beneficiar a todos los programadores, no slo a los noveles. A partir del anlisis de estos y otros errores (ms detalles en [6]), sugerimos como criterios de diseo de mensajes de error de los compiladores: (i) claridad y brevedad; (ii) univocidad entre mensajes y diagnsticos; (iii) localidad del error; (iv) adecuada redaccin y tono; (v) ayuda extensible; (vi) consistencia; y (vii) apropiado diseo visual. No es difcil apreciar cules y cuntas de estas deseables propiedades se incumplen en los ejemplos vistos arriba. No obstante, las dificultades tecnolgicas pueden hacer difcil, hoy en da, que los mensajes de los compiladores se acerquen al diagnstico que necesita el programador. Si bien esta dificultad no debe hacer desistir del intento, y esfuerzos como [3] son muy loables, de momento slo parecen viables soluciones alternativas que, en [6], denominamos Computer-Aided Compiler Errors Diagnostic (CACED). Sugerimos dos posibles enfoques CACED [6]: Programmer Driven (PD) y Compiler-Writer Driven (CWD), que se resumen y comparan, respecto a diferentes criterios, en la Tabla 1. Obviamente, la mejor herramienta CACED tendra los mejores aspectos de cada enfoque. En tales condiciones, el autor de la herramienta podra proporcionar un conjunto bsico de diagnsticos en el momento de su construccin pero, adems, durante el uso, cada usuario (programador) podra cambiar los mensajes de los diagnsticos para adaptarlos a sus peculiaridades, necesidades y conocimientos, as como editar el conjunto de diagnsticos, de modo que ste se vaya enriqueciendo progresivamente, al ritmo que el programador aprende y adquiere experiencia.

346 Traver, V.J.

Tabla 1: Caractersticas de las herramientas PD (Programmer Driven) y CWD (CompilerWriter Driven) CACED (Computer-Aided Compiler Error Diagnostic)
Criterio Momento de creacin Esfuerzo de crear los diagnsticos Significatividad de los diagnsticos Relacin beneficio/coste Crecimiento del sistema Adaptacin del sistema CWD Construccin Autor Comprometido Alta No posible No posible PD Uso Programador Garantizado Baja (se reinventa la rueda) Cuando se necesita Personalizable/adaptable

4 Conclusiones
Los mensajes de error de los compiladores afectan al aprendizaje de la programacin y al proceso de desarrollo de software a nivel profesional. Sin embargo, poco se ha investigado en intentar mejorar este fundamental aspecto de la interaccin programador-compilador. Hemos analizado brevemente unos mensajes de error de un compilador concreto en un contexto especfico de enseanza-aprendizaje de la programacin. Se han sugerido posibles soluciones, a corto y largo plazo, ante esta falta de apoyo a programadores noveles y avanzados. En el informe tcnico [6] se expone con mayor nivel de detalle el contenido de este artculo. Este trabajo, hasta ahora de carcter ms terico, puede completarse mediante estudios de usabilidad con estudiantes y/o programadores, as como diseando, implementando y evaluando herramientas que repercutan en una interaccin programador-compilador ms efectiva, productiva y agradable.

Referencias
1. P. J. Brown. Error messages: the neglected area of the man/machine interface. Communications of the ACM, 26(4):246249, Apr. 1983. 2. J. J. Horning. What the compiler should tell the user. In F. L. Bauer and J. Eickel, editors, Compiler construction: an advanced course, volume 21 of Lecture Notes in Computer Science, pages 525548. Springer, 1976. 3. C. L. Jeffery. Generating LR syntax error messages from examples. ACM Trans. on Programming Languages and Systems, 25(5):631640, Sept. 2003. 4. B. Shneiderman. Designing computer system messages. Communications of the ACM, 25(9):610611, Sept. 1982. 5. B. Shneiderman. Designing the User Interface: Strategies for Effective Human-Computer Interaction. Addison Wesley, 1992. 6. V. J. Traver. On compiler error messages: what they say and what they mean. Technical report, Universitat Jaume I, Castelln, Spain, 2005.

También podría gustarte