Bienvenidos sean a este post, hoy veremos otra seccion de como desarrollar proyectos.
Esta es la parte de desarrollo de nuestro proyecto pero esta relacionada a todo lo que mencionamos en los posts anteriores. Si hicimos un buen desarrollo de todas las especificaciones nos facilitara mucho al momento de desarrollarlo. Algunos equipos practican Desarrollo conducidos por Test (TDD), este es una gran manera de desarrollar productos estables porque su principal concepto es la escritura de tests antes de la implementacion del proyecto. Esta es una buena manera para definir requerimientos del proyecto y contestar preguntas que puedan surgir en la implementacion.
Supongamos que vamos a implementar setter para la clase Usuario. El objeto de usuario contiene un campo para el email. por lo tanto debemos tener un metodo llamado set_email. Veamos como podria ser:
class Usuario
{
public:
// codigo omitido para brevedad
void set_email(const std::string&);
private:
// codigo omitido para brevedad
std::string email_;
};
TDD nos sugiere que hagamos una funcion de test para set_email antes de que lo implementaamos. Supongamos que tenemos la siguiente funcion de testing:
void test_set_email()
{
std::string email_valido = "valid@email.com";
std::string email_novalido = "112%$";
Usuario u;
u.set_email(email_valido);
if (u.get_email() == email_valido) {
std::cout << "Exitos: email valido ha sido establecido" << std::endl;
} else {
std::cout << "Falla: email valido no ha sido establecido" << std::endl;
}
try {
u.set_email(email_novalido);
std::cerr << "Falla: email no valido no ha sido rechazado" << std::endl;
} catch (std::exception& e) {
std::cout << "Exitos: email no valido rechazado" << std::endl;
}
}
Tenemos esta funcion para testear a set_email, para ello al inicio tenemos dos variables que representan a un email valido y otro no valido respectivamente. Creamos un objeto de tipo Usuario, con esto realizado pasamos a usar el metodo set_email y pasamos el usuario valido. Lo siguiente es un condicional donde evalua ese email con el metodo get_email. Si es verdadero mostrara un mensaje indicando que hubo exito al establecerlo. En caso contrario, mostrara un mensaje que no se establecio. Luego tenemos un try/catch donde verificamos a set_email pero le pasamos al email no valido. En este caso, mostramos un mensaje por error para indicar que no se pudo rechazar un email no valido. Pero en caso de que lancemos una excepcion para rechazarla, usaremos al catch y mostraremos el mensaje indicando el exito del rechazo. Con esto tenemos una idea basica de como reacciona ante una entrada valida o no de datos. A su vez, podemos agregar mas tipos de datos que seran verificados cuando la implementacion este completa. Veamos como es una implementacion inicial del metodo set_email:
void User::set_email(const std::string& email)
{
if (!std::regex_match(email, std::regex("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+")) {
throw std::invalid_argument("Invalid email");
}
this->email_ = email;
}
En este caso, tenemos un condicional donde el patron de expresiones regulares verifica que el email informado tenga texto, una arroba, y otro texto. Si bien, esto no verifica que el email sea valido o exista, si verifica que el formato sea valido. En caso de que no sea valido, lanzara una excepcion y este al momento de pasar por el test nos dara la notificacion de que fue rechazada con exito. En caso de no cumplirse esta condicion procede a asignar el email recibido al de la clase. Igualmente, se deberia correr nuevamente el test para verificar que todo sigue funcionando correctamente.
Como podran comprobar, la programacion es uno de los puntos mas caoticos del ciclo de vida del desarrollo del proyecto. Durante esta etapa es muy dificil estimar cuanto nos tomara implementar una clase o sus metodos porque van a surgir mas preguntas y dificultades durante la programacion. Pero recuerden que muchas de estas preguntas se pueden solucionar en los pasos previos que vimos en los posts anteriores si fueron bien implementados.
En resumen, hoy hemos visto otra parte del ciclo de vida del desarrollo del proyecto, en este caso la parte ded prograacion, donde es la unica parte de desarrollo asi como otros temas a tener en cuenta que pueden colaborar con un punto mencionado en el post anterior como es el testing. Espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
