13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!