Un rotundo SÍ con TDD (y con algunas excepciones)
Muy controvertido, pero diría que a cualquiera que responda 'no' a esta pregunta le falta un concepto fundamental de TDD.
Para mí, la respuesta es un rotundo sí si sigues TDD. Si no lo eres, entonces no es una respuesta plausible.
El DDD en TDD
TDD es a menudo citado por tener los principales beneficios.
- Defensa
- Asegurar que el código puede cambiar pero no su comportamiento .
- Esto permite la práctica siempre tan importante de refactorización .
- Ganas este TDD o no.
- Diseño
- Usted especifica qué debe hacer algo, cómo debe comportarse antes de implementarlo .
- Esto a menudo significa decisiones de implementación más informadas .
- Documentación
- El conjunto de pruebas debe servir como la documentación de especificación (requisitos).
- El uso de pruebas para tal propósito significa que la documentación y la implementación siempre están en un estado consistente; un cambio en uno significa un cambio en otro. Compare con los requisitos de mantenimiento y el diseño en un documento de Word separado.
Separar la responsabilidad de la implementación
Como programadores, es terriblemente tentador pensar en los atributos como algo de importancia y captadores y establecedores como una especie de sobrecarga.
Pero los atributos son un detalle de implementación, mientras que los establecedores y captadores son la interfaz contractual que realmente hace que los programas funcionen.
Es mucho más importante deletrear que un objeto debe:
Permitir a sus clientes cambiar su estado.
y
Permitir a sus clientes consultar su estado
entonces cómo se almacena realmente este estado (para el cual un atributo es la forma más común, pero no la única).
Una prueba como
(The Painter class) should store the provided colour
es importante para la parte de documentación de TDD.
El hecho de que la implementación final es trivial (atributo) y no conlleva ningún beneficio de defensa debe ser desconocido para usted cuando escribe la prueba.
La falta de ingeniería de ida y vuelta ...
Uno de los problemas clave en el mundo del desarrollo del sistema es la falta de ingeniería de ida y vuelta 1 : el proceso de desarrollo de un sistema se fragmenta en subprocesos desarticulados cuyos artefactos (documentación, código) a menudo son inconsistentes.
1 Brodie, Michael L. "John Mylopoulos: cosiendo semillas del modelado conceptual". Modelado conceptual: fundamentos y aplicaciones. Springer Berlin Heidelberg, 2009. 1-9.
... y cómo lo resuelve TDD
Es la parte de documentación de TDD que asegura que las especificaciones del sistema y su código sean siempre consistentes.
Diseñe primero, implemente después
Dentro de TDD, primero escribimos la prueba de aceptación fallida, solo luego escribimos el código que les permitió pasar.
Dentro del BDD de nivel superior, primero escribimos escenarios y luego los hacemos pasar.
¿Por qué debería excluir setters y getter?
En teoría, es perfectamente posible dentro de TDD que una persona escriba la prueba y otra implemente el código que la hace pasar.
Entonces pregúntate a ti mismo:
En caso de que la persona que escribe las pruebas para una clase mencione captadores y colocadores.
Como getters y setters son una interfaz pública para una clase, la respuesta es obviamente sí , o no habrá forma de establecer o consultar el estado de un objeto.
Obviamente, si escribe el código primero, la respuesta puede no ser tan clara.
Excepciones
Hay algunas excepciones obvias a esta regla: funciones que son detalles de implementación claros y claramente no forman parte del diseño del sistema.
Por ejemplo, a el método local 'B ()':
function A() {
// B() will be called here
function B() {
...
}
}
O la función privada square()
aquí:
class Something {
private:
square() {...}
public:
addAndSquare() {...}
substractAndSquare() {...}
}
O cualquier otra función que no sea parte de una public
interfaz que necesite ortografía en el diseño del componente del sistema.