2009-03-27 13 views
7

¿Cómo puedo asegurarme de que el código sigue funcionando después de la refactorización (es decir, después del cambio de nombre de variable)?Cómo asegurarse de que el código siga funcionando después de la refactorización (lenguaje dinámico)

En lenguaje estático, si una clase se renombra pero no hay otra clase de referencia, entonces obtendré un error de compilación.

Pero en lenguaje dinámico no existe tal red de seguridad, y su código puede romperse durante la refactorización si no tiene suficiente cuidado. Puedes usar la prueba unitaria, pero cuando usas los simulacros es bastante difícil saber que el nombre cambia y, como consecuencia, puede no ser de ayuda.

¿Cómo solucionar este problema?

Respuesta

17

Antes de comenzar a refactorizar, debe crear pruebas que puedan probar lo que va a cambiar; si usted dice que las pruebas unitarias no serán suficientes, o serán difíciles de crear, entonces, por supuesto, cree una mayor pruebas de nivel que posiblemente incluso excedan la totalidad de su producto.

Si tiene herramientas de cobertura de código para su idioma, utilícelas para medir la calidad de las pruebas que ha creado, después de que haya alcanzado un valor razonablemente alto y si las pruebas se mantienen actualizadas y ampliadas estará capaz de hacer cualquier cosa con su código de manera muy eficiente y estar bastante seguro de que las cosas no van en la dirección incorrecta.

+0

+1: Refactorización controlada por prueba. Hazlo todo el tiempo. –

1

Su código se puede romper durante la refactorización incluso con un lenguaje compilado. Confiando solo en eso te meterá en problemas. La prueba automatizada es la mejor manera de asegurarse de que el programa funcione como debería.

Si dices qué lenguaje dinámico estás utilizando, podemos ofrecerte algunos consejos sobre herramientas que pueden ayudarte con las pruebas. Todo puede ser probado.

EDIT:

Usted respondió y dijo que utiliza PHP y Python.

Si se trata de una aplicación web, use selenium para crear las pruebas en el navegador. Al principio solo necesitas Selenium IDE. Coloque todas sus pruebas en una única Suite de Pruebas para que pueda ejecutarlas fácilmente todas. A medida que la lista crece, puedes empezar a buscar Selenium RC y Selenium Grid.

10

He estado enseñando una clase sobre pruebas unitarias, refactorización y demás, y esto es probablemente lo que la mayoría de la gente se equivoca. La refabricación es no simplemente cambiando el código. Está cambiando el código sin cambiar el comportamiento funcional externo. Ese es un punto muy importante.

En otras palabras, debe tener alguna forma de verificar que el comportamiento funcional externo esté intacto después de la refactorización. Al carecer de la percepción divina, las pruebas unitarias son muy útiles para eso. En su libro sobre refactorización, Martin Fowler enfatiza el uso de pruebas automatizadas para esta verificación.

Si su código se desarrolló utilizando TDD, tendrá el conjunto de pruebas necesario ya que se desarrolló durante el desarrollo del código en sí. Si necesita refactorizar el código para el cual no hay pruebas disponibles, su mejor enfoque sería establecer pruebas automáticas antes de realizar cambios en el código. Me doy cuenta de que establecer pruebas para el código existente puede ser difícil, pero aprenderá mucho sobre el código mientras lo hace.

Es posible que también desee comprobar Bruce Eckel's essay on strong typing versus strong testing, ya que analiza los comentarios que obtiene del compilador frente a los comentarios que recibe de su conjunto de pruebas.

+0

+1: La unidad prueba mejor la omnisciencia. –

0

1) Para Python utilice PyUnit para PHP phpunit. 2) El enfoque TDD es bueno, pero también es aceptable realizar pruebas después de escribir el código. 3) También use herramientas de refactorización que están disponibles para su IDE, solo hacen refactorizaciones seguras. En Python Tienes cuerda (esta es la biblioteca pero tiene complementos para la mayoría de los IDE). 4) Los buenos libros son: 'desarrollo basado en pruebas con el ejemplo' Mejor 'Experto Python Programación' Tarek Ziade (explicar tanto TDD como refactorización)

Google TDD y base de datos para encontrar un buen libro sobre el enfoque TDD para el desarrollo bases de datos.

Agregue información para los simulacros que está utilizando. Los simulacros de AFAIK son necesarios solo cuando se trata de una base de datos o una red. Pero normalmente la prueba unitaria debe cubrir una pequeña porción de código (una sola clase) a veces dos clases, ¡así que no es necesario maqueta!

Cuestiones relacionadas