Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 28 — #66<br />
✐<br />
Capítulo 1. Introducción a los Objetos<br />
prácticas mejorará s<strong>en</strong>siblem<strong>en</strong>te su productividad y fiabilidad.<br />
1.10.1. Escriba primero las pruebas<br />
El proceso de prueba se ha relegado tradicionalm<strong>en</strong>te a la parte final del proyecto,<br />
después de que «consiga t<strong>en</strong>er todo funcionando, pero necesite estar seguro». Implícitam<strong>en</strong>te<br />
ha t<strong>en</strong>ido una prioridad baja, y la g<strong>en</strong>te que se especializa <strong>en</strong> ello nunca ha<br />
t<strong>en</strong>ido estatus y suele trabajar <strong>en</strong> el sótano, lejos de los «programadores reales». Los<br />
equipos de pruebas han respondido al estereotipo, visti<strong>en</strong>do trajes negros y hablando<br />
con regocijo siempre que <strong>en</strong>contraban algo (para ser honesto, yo t<strong>en</strong>ía esa misma<br />
s<strong>en</strong>sación cuando <strong>en</strong>contraba fallos <strong>en</strong> los compiladores de <strong>C++</strong>).<br />
XP revoluciona completam<strong>en</strong>te el concepto del proceso de prueba dándole la<br />
misma (o incluso mayor) prioridad que al código. De hecho, se escrib<strong>en</strong> las pruebas<br />
antes de escribir el código que está probando, y las pruebas permanec<strong>en</strong> con el<br />
código siempre. Las pruebas se deb<strong>en</strong> ejecutar con éxito cada vez que hace una integración<br />
del proyecto (algo que ocurre a m<strong>en</strong>udo, a veces más de una vez al día).<br />
Escribir primero las pruebas ti<strong>en</strong>e dos efectos extremadam<strong>en</strong>te importantes.<br />
Primero, fuerza una definición clara de la interfaz de la clase. A m<strong>en</strong>udo sugiero<br />
que la g<strong>en</strong>te «imagine la clase perfecta para resolver un problema particular» como<br />
una herrami<strong>en</strong>ta cuando int<strong>en</strong>ta diseñar el sistema. La estrategia del proceso de<br />
prueba de XP va más lejos que eso - especifica exactam<strong>en</strong>te cual es el aspecto de<br />
la clase, para el consumidor de esa clase, y exactam<strong>en</strong>te cómo debe comportarse la<br />
clase. En ciertos términos. Puede escribir toda la prosa, o crear todos los diagramas<br />
donde quiera describir cómo debe comportarse una clase y qué aspecto debe t<strong>en</strong>er,<br />
pero nada es tan real como un conjunto de pruebas. Lo primero es una lista de deseos,<br />
pero las pruebas son un contrato forzado por el compilador y el programa. Es<br />
difícil imaginar una descripción más concreta de una clase que las pruebas.<br />
Mi<strong>en</strong>tras se crean las pruebas, el programador está completam<strong>en</strong>te forzado a elaborar<br />
la clase y a m<strong>en</strong>udo descubrirá necesidades de funcionalidad que habrían sido<br />
omitidas durante los experim<strong>en</strong>tos de diagramas UML, tarjetas CRC, casos de uso,<br />
etc.<br />
El segundo efecto importante de escribir las pruebas primero procede de la propia<br />
ejecución de las pruebas cada vez que hace una construcción del software. Esta<br />
actividad le ofrece la otra mitad del proceso de prueba que es efectuado por el compilador.<br />
Si mira la evolución de los l<strong>en</strong>guajes de programación desde esta perspectiva,<br />
verá que las mejoras reales <strong>en</strong> la tecnología giran realm<strong>en</strong>te alrededor del proceso<br />
de prueba. El l<strong>en</strong>guaje <strong>en</strong>samblador sólo se fija <strong>en</strong> la sintaxis, pero C impone algunas<br />
restricciones de semántica, y éstas le impid<strong>en</strong> cometer ciertos tipos de errores.<br />
Los l<strong>en</strong>guajes POO impon<strong>en</strong> incluso más restricciones semánticas, si lo pi<strong>en</strong>sa son<br />
realm<strong>en</strong>te formas del proceso de prueba. «¿Se utiliza apropiadam<strong>en</strong>te este tipo de<br />
datos ¿Se invoca esta función del modo correcto» son el tipo de pruebas que se<br />
llevan a cabo por el compilador <strong>en</strong> tiempo de ejecución del sistema. Se han visto los<br />
resultados de t<strong>en</strong>er estas pruebas incorporadas <strong>en</strong> el l<strong>en</strong>guaje: la g<strong>en</strong>te ha sido capaz<br />
de escribir sistemas más complejos, y han funcionado, con mucho m<strong>en</strong>os tiempo y<br />
esfuerzo. He tratado de compr<strong>en</strong>der porqué ocurre eso, pero ahora me doy cu<strong>en</strong>ta<br />
de que son las pruebas: el programador hace algo mal, y la red de seguridad de las<br />
pruebas incorporadas le dice que hay un problema y le indica dónde.<br />
Pero las pruebas incorporadas que proporciona el diseño del l<strong>en</strong>guaje no pued<strong>en</strong><br />
ir más lejos. En este punto, el programador debe interv<strong>en</strong>ir y añadir el resto de las<br />
pruebas que produc<strong>en</strong> un juego completo (<strong>en</strong> cooperación con el compilador y el<br />
28<br />
✐<br />
✐<br />
✐<br />
✐