|
Adolfo Di Mare |
Doxygen es una herramienta que facilita inculcar el hábito de especificar antes de implementar en los programadores novatos. Tiene la cualidad de que funciona para muchos lenguajes y plataformas. Muestro que Doxygen es de uso fácil por lo que es la herramienta ideal para ser usada con principiantes. | Doxygen is a tool that facilitates training novice programmers to acquire the habit to especify before they implement. Doxygen works for many languajes and platforms. I show that Doxygen is easy to use which makes it ideal tool to be used by beginners. |
Es difícil que un estudiante comprenda por qué es necesario usar abstracción al construir programas. Debido a que los profesores debemos formular reglas para la entrega de los proyectos programados de los estudiantes, podemos aprovechar esa autoridad para acostumbrarles a construirlos de manera que adquieran buenas prácticas de programación, las que luego pueden ser reforzadas con la justificación que las debe acompañar, como explico en [DiM-2007]: "... el uso de abstracción es de primordial importancia para construir programas y sistemas grandes; esta es la mejor forma que conocemos para delegar en otros programadores la implementación de los módulos de un programa. Por eso, la especificación de artefactos de programación es la herramienta principal usada para diseñar programas construidos con componentes reutilizables". (La versión HTML de este documento incluye muchos enlaces a las definiciones de la mayor parte de los conceptos aquí discutidos).
Para la mayor parte de los programadores la codificación de algoritmos es la parte más interesante de la construcción de programas; los programadores trabajamos creando mundos virtuales, en donde todas las variables coexisten bajo nuestro perfecto control: esta es la parte más creativa del trabajo del programador. Para construir programas los programadores usamos muchos trucos, desde el uso de estructuras de datos y algoritmos avanzados, hasta la aplicación de convenciones como las descritas en [DiM-1988], que facilitan la labor de programación y mantenimiento del programa.
Es posible describir muchas reglas que resultan en una mejor implementación, como por ejemplo las convenciones descritas en:
Yo sigo un camino más sencillo pues les pido a mis estudiantes que al escribir su implementación, deben asegurarse de cumplir siempre con estas 3 políticas de programación, que considero las más importantes:
Mis asistentes saben cuál es la forma de calificar proyectos programados. Específicamente, se concentran en encontrar fallas que quiebren alguna de estas 5 reglas:
Doxygen es un sistema de documentación para C++, C, Java, Objective-C, Python, IDL (Corba y los sabores Microsoft) y, hasta cierto punto, para PHP, C# y D. La ventaja principal de usar Doxygen en los cursos universitarios es que le permite al estudiante obtener entrenamiento en el uso herramientas que ayudan a generar documentación con la ventaja adicional de que Doxygen es aplicable a un rango muy amplio de lenguajes, lo que no ocurre con herramientas de aplicación específica como Javadoc [KNDK-1997]. Cuando el estudiante termina sus estudios universitarios y pase a su carrera profesional, su entrenamiento Doxygen le permitirá usar con comodidad cualquier otra herramienta de documentación, inclusive Javadoc, cuyo formato es compatible con Doxygen.
En la
Figura 1 se muestra el archivo
"rat-tst.dxg
" que se puede usar de plantilla para
obtener el archivo de configuración para que Doxygen gener
la documentación de uno o más
módulos. Para
esto, basta modificar únicamente el renglón
"INPUT
"
que contiene la lista de archivos de donde Doxygen extraerá
la documentación. En este ejemplo, Doxygen generó
documentación usando como entrada los siguientes archivos:
"rational.h
",
"rational.cpp
",
"rat-calc.cpp
",
"rat-tst.cpp
" y
"ADH_port.h
".
/** Calcula el Máximo Común Divisor de los números \c "x" y \c "y". - <code> mcd(x,y) >= 1 </code> siempre. - MCD <==> GCD: <em> Greatest Common Divisor </em>. \pre <code> (y != 0) </code> \remark Se usa el algoritmo de Euclides para hacer el cálculo. \par Ejemplo: \code 2*3*5 == mcd( 2*2*2*2 * 3*3 * 5*5, 2*3*5 ) 30 == mcd( -3600, -30 ) \endcode */ long mcd(long x, long y) { long g = (x < 0 ? -x : x); // trabaja con valores positivos long r = (y < 0 ? -y : y); // "r" es el resto long temp; do { temp = r; r = g % r; g = temp; } while (0 != r); return g; } // mcd() |
El estilo Doxygen de documentación es bastante simple e intuitivo, como se muestra en la Figura 2. En resumen, lo más relevante que hay que saber para usar esta herramienta es lo siguiente:
/**
" y termina en
"*/
". Esto permite mezclar la documentación con el
código fuente lo que ayuda mucho a que la documentación quede
actualizada cuando se le da mantenimiento a un módulo.
.
" que no hay que olvidar y es
el que sale el la documentación general del módulo.
Por ejemplo, se puede consultar en Internet la página
descriptiva para las clases
"Matrix
"
descrita en
[DiM-2004]
y
"rational
",
que es la clase usada como ejemplo en este documento:
http://www.di-mare.com/adolfo/p/Matrix/classMx_1_1Matrix.html
http://www.di-mare.com/adolfo/p/rational/classADH_1_1rational.html
\pre
",
"\remarks
"
y
"\par
"
permiten agregar secciones de precondición, comentarios y
ejemplos a la documentación.<code>
"
y
"</code>
"
o con sus equivalentes, los comandos especiales
"\code
"
y
"\endcode
",
que sirven para incluir texto usando una fuente no proporcional,
similar a la fuente
"Courier" generalmente usada para el código de
programas.
long ADH::mcd( long x, long y )
Calcula el Máximo Común Divisor de los números " x " y "y ".
(y != 0)
Comentarios: Se usa el algoritmo de Euclides para hacer el cálculo.
Ejemplo:
rational.cpp .
|
En la
Figura 3 se muestra la
documentación que Doxygen genera para "mcd()
".
Debido a que el prototipo o encabezado de cualquier función
o método forma parte de su especificación, a los
novatos que me lo preguntan yo siempre les digo: "la
especificación comienza con el primer caracter de la
documentación Doxygen de cada método o
función, y termina donde está el corchete abierto
"{
" que marca la implementación del algoritmo
en el código fuente del programa".
Referencia de la Clase Viejillo
Almacena los datos de un Viejillo. Más... Métodos públicos
|
Algunos hábitos son más fáciles de inculcar
que otros. Por ejemplo, es mejor usar la codificación de
"pruebe primero y luego programe" (test first then code")
[Hunt-1998]. Como para construir un
programa de prueba hay que saber programar, esta estrategia no se
le puede enseñar a quien nunca ha programado. Debido a que
Doxygen genera una página sumaria para cada módulo
que procesa, es posible revisar esa página para determinar
si están completas todas las especificaciones de las
rutinas implementadas en el módulo (esta página es
la mencionada anteriormente para las clases
"Matrix
" y
"rational
").
Si falta la documentación de algún módulo, en
esa página aparecerá el vacío respectivo y
será muy sencillo pedirle al programador que corrija la
omisión. Luego es posible también afinar y mejorar
las especificaciones, que están incluidas junto con el
algoritmo de cada rutina. La
Figura 4 es un ejemplo en el que se nota
claramente que la documentación para el método
"Remingue()
" no existe, pues aparece en blanco su
descripción corta.
Muchos programadores no saben escribir la documentación de sus programas, pues nunca lo han hecho, y porque nunca les han dado una guía para hacerlo. El problema que tiene usar una guía es que las personas tienen la tendencia de seguirla a ciegas, como si fuera la única forma de hacer las cosas. La guía que aquí presento no debe ser usada de esa manera, pues en algunos casos no se aplican alguna de su partes, mientras que en otros casos esta guía se queda más bien corta.
Guía para Documentar Programas |
---|
|
La lista de ítems que incluye la guía para documentar programas que se muestra en la Figura 5 a veces confunde a mis estudiantes, pues no saben con qué "rellenar" la sección de "Abstracción" o la de "Planteo". Mi respuesta a sus inquietudes siempre incluye el siguiente principio: "La documentación se hace para otras personas, no es para uno mismo. Por eso, la documentación debe servir para que otra persona pueda conocer rápidamente lo que necesita para usar el programa y también para modificarlo".
A veces los estudiantes necesitan saber qué pierden y cuánto pierden al hacer sus trabajos y proyectos. Pare eso resulta muy útil definir una tabla de calificación, que muestre el puntaje que debe ser asignado a cada ítem.
Tabla de calificación | |
---|---|
Documentación interna | |
Tabulación y anidamiento correcto | (8 | 6 | 4 | 2 | 0) |
Identificadores significativos | (8 | 6 | 4 | 2 | 0) |
Usa comentarios para especificar identificadores | (8 | 6 | 4 | 2 | 0) |
Consistencia en uso de convenciones | (6 | 4 | 2 | 1 | 0) |
Lógica del código fuente | |
Claro | (15 | 12 | 9 | 6 | 3) |
Modular | (15 | 12 | 9 | 6 | 3) |
Ejecución | |
Compila y ejecuta sin errores de sintaxis | (10 | 7 | 4 | 2 | 0) |
Soluciona correctamente el problema | (15 | 12 | 9 | 6 | 3) |
Casos de prueba apropiados | (15 | 12 | 9 | 6 | 3) |
Factor de completitud (multiplique por) | (1.0 | .8 | .6 | .4 | .2) |
Gran Total |
El gran total
(8+8+8+6) + (15+15) + (10+15+15)
es 100%
, que es la suma del primer valor de
calificación para cada uno de los ítems en la tabla
de calificación de la
Figura 6, adaptado de
[Casa-2004]. La escala de
calificación usada va de mayor a menor: excelente, muy
bueno, bueno, regular y malo. El factor de completitud se usa para
modular el resultado global del trabajo porque si el programa no
produce los resultados correctos, la evaluación no puede
ser 100%
.
La entrega de cualquier proyecto programado debe contener 2
partes: un documento impreso y los archivos con el programa. El
documento impreso generalmente no contiene toda la
documentación Doxygen, pues es posible generarla basta con
base en el archivo de configuración similar al de la
Figura 1. Los archivos del programa
generalmente son entregados por correo electrónico a una
dirección predeterminada en el enunciado del proyecto, en
un único archivo empacado
".zip
"
cuyo nombre sea la identificación del estudiante y que
incluya en ese archivo lo siguiente:
.zip
).*.c
, *.cpp
, *.h
, etc.)..url
"
que permita abrir la página Internet en que
está la documentación completa de su
programa.
Por ejemplo, para entregar su proyecto
HerenciaOrdenada.cpp
el estudiante 952809 crea su
archivo 952809.zip
que contenga los siguientes
archivos:
HerenciaOrdenada.cpp
ADH_port.h
ADH_test.h
952809.doc
952809.htm
952809.dxg
952809.url
HerenciaOrdenada.dsp
HerenciaOrdenada.vcproj
Para construir programas es necesario seguir un conjunto de buenas prácticas que facilitan la labor, reducen el costo y hacen más fácil el mantenimiento de los módulos. El buen programador usa:
El uso de Doxygen permite inculcar con facilidad estas buenas prácticas en el programador novato. Tiene la ventaja adicional de ser un herramienta que sirve para muchos lenguajes, por lo que sirve de punto de partida para cualquier otra plataforma.
Alejandro Di Mare aportó varias observaciones y sugerencias importantes para mejorar este trabajo.
http://www.di-mare.com/adolfo/p/rational/index.html
|
|
[Casa-2004] | Casasola, Edgar E.:
Elaboración de material educativo para la formación de profesionales en desarrollo de software,
30ma Conferencia Latinoamericana de Informática,
(CLEI2004),
pp 1148-1157,
2004.
http://clei2004.spc.org.pe/es/html/pdfs/50.pdf
http://clei2004.spc.org.pe/es/html/clei-main.pdf
|
[DiM-1988] | Di Mare, Adolfo:
Convenciones de Programación para
Pascal,
Reporte Técnico ECCI-01-88, Proyecto
326-86-053,
Escuela de Ciencias de la Computación e Informática
(ECCI),
Universidad de Costa Rica
(UCR),
1988.
http://www.di-mare.com/adolfo/p/convpas.htm
|
[DiM-2004] | Di Mare, Adolfo:
Una Clase Matriz Chirrisquitica Escrita en C++,
Reporte Técnico ECCI-2004-02,
Escuela de Ciencias de la Computación e Informática,
Universidad de Costa Rica, 2004.
http://www.di-mare.com/adolfo/p/Matrix.htm
|
[DiM-2007] | Di Mare, Adolfo:
¡No se le meta al Rep!,
Reporte Técnico ECCI-2007-01,
Escuela de Ciencias de la Computación e Informática
(ECCI),
Universidad de Costa Rica
(UCR),
2007.
http://www.di-mare.com/adolfo/p/Rep.htm
|
[Hunt-1998] | Hunt, Lance:
C# Coding Standards for .NET,
2004.
http://weblogs.asp.net/lhunt/pages/CSharp-Coding-Standards-document.aspx
|
[KNDK-1997] |
King, Peter &
Naughton, Patrick &
DeMoney, Mike &
Kanerva, Jonni &
Walrath, Kathy &
Hommel, Scott:
Java Code Conventions,
Sun Microsystems, Inc, 1997.
http://java.sun.com/docs/codeconv/CodeConventions.pdf
|
[VANH-2004] |
Van Heesch, Dimitri:
Doxygen documentation system for C++,
2004.
http://www.doxygen.org/index.html
|
[-] | Resumen |
[1] | Configuración Doxygen |
[2] | Guía para documentar programas |
[3] | Tabla de calificación |
[4] | Formato de entrega |
[-] | Conclusión |
[-] | Agradecimientos |
[-] | Código fuente |
|
|
Bibliografía | |
Indice | |
Acerca del autor | |
Acerca de este documento | |
Principio Indice Final |
Adolfo Di Mare: Investigador costarricense en la Escuela de Ciencias de la Computación e Informática [ECCI] de la Universidad de Costa Rica [UCR], en donde ostenta el rango de Profesor Catedrático. Trabaja en las tecnologías de Programación e Internet. También es Catedrático de la Universidad Autónoma de Centro América [UACA]. Obtuvo la Licenciatura en la Universidad de Costa Rica, la Maestría en Ciencias en la Universidad de California, Los Angeles [UCLA], y el Doctorado (Ph.D.) en la Universidad Autónoma de Centro América. |
Adolfo Di Mare: Costarrican Researcher at the Escuela de Ciencias de la Computación e Informática [ECCI], Universidad de Costa Rica [UCR], where he is full professor and works on Internet and programming technologies. He is Cathedraticum at the Universidad Autónoma de Centro América [UACA]. Obtained the Licenciatura at UCR, and the Master of Science in Computer Science from the University of California, Los Angeles [UCLA], and the Ph.D. at the Universidad Autónoma de Centro América. |
Referencia: | Di Mare, Adolfo: Uso de Doxygen para especificar módulos y programas, I Congreso Internacional de Computación y Matemática, (CICMA-2008), celebrado del 21 al 23 de agosto en la Universidad Nacional (UNA), Costa Rica, I.S.B.N.: 978-9968-9961-1-5, 2008. |
Internet: |
http://www.di-mare.com/adolfo/p/Doxygen.htm
|
Autor: | Adolfo Di Mare
<adolfo@di-mare.com>
|
Contacto: | Apdo 4249-1000, San José Costa Rica Tel: (506) 207-4020 Fax: (506) 438-0139 |
Revisión: | ECCI-UCR, Enero 2007 |
Visitantes: |