Detectando y corrigiendo bugs en Zope3
Anoche Mikel y yo no fuimos al RockFest del Camp5. Fatigados de actos sociales en lengua extranjera, nos quedamos programando tan panchos en el hotel.
Probando el SetIndex que Zope Corporation ha publicado para el catalogo de Zope3, detectamos un comportamiento que no nos gustaba.
Me pongo a contaros esto con la emoción de quien descubre y corrige su primer bug. Absteneos, pues, de juzgar el mérito y la vanidad de este humilde escritor de código y blog.
En Zope3, el comportamiento esperado de los programas se documenta con DocTests. Los primero que hemos hecho ha sido modificar el DocTest para que refleje el comportamiento que, creemos, es el correcto.:
# diff -u zc.catalog-1.1-py2.4.egg/zc/catalog/setindex.txt zc.catalog-1.1-py2.4.egg/zc/catalog/setindex.txt.new > setindex.txt.patch
Después hemos modificado el código para que realice lo que queremos:
# diff -u zc.catalog-1.1-py2.4.egg/zc/catalog/index.py zc.catalog-1.1-py2.4.egg/zc/catalog/index.py.new > index.py.patch
¿Cómo sabemos que el código hace lo documentado en el DocTest? Ejecutamos el DocTest correspondiente:
# export PYTHONPATH=/opt/Zope-3.3.0/lib/python# /opt/Python-2.4.3/bin/python zc/catalog/tests.py
¿Cómo se aplican los ficheros patch? descargatelos en el directorio donde tengas ‘zc.catalog-1.1-py2.4.egg’, posiblemente el directorio ’site-packages’ de tu instalación de Python y ejecutar el parche:
# patch -p0 < setindex.txt.patch# patch -p0 < index.py.patch
Share your source code
Tagging the planet
Marzo 17, 2007 - 5:52 pm
Pero ¿cúal es el problema que teníamos?
Al buscar en un SetIndex con la query ‘all_of’ y pasándole un conjunto de valores, se supone que hace una intersección de los resultodos para todas los valores: resultados para un valor interseccionados con los resultados para otro valor, interseccionados con …
El problema es que si un valor no arroja resultados, devolvía todos los demás anteriores.
Matemáticamente, la intersección con un conjunto vacío es el conjunto vacío. Eso es lo que esperabamos y eso es lo que hemos conseguido.
Marzo 18, 2007 - 2:44 am
Una respuesta ultrarápida de Gary Poster me confirma que ha incluido la corrección del bug en la nueva release 1.1.1 y en el trunk.