Especificación de módulos con
[email protected]
ejemplos y casos de prueba
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Agenda
• Reutilización
• Especificación
• Implementación
• Extracción de los ejemplos de uso
• Receta
Conclusiones
UCR
Epecificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Reutilización
Reutilizar significa no inventar de nuevo la rueda, sino aprovechar
lo que otros hicieron para construir nuevas soluciones
¿¿¿ CÓMO ???
• Reducir la distancia cognoscitiva a la implementación
• Es más rápido reutilizar que hacerlo nuevo
• Uso de la especificación de qué hace cada módulo
• Mecanismo para encontrar los módulos reutilizables
• http://google.com/search?as_qdr=all&num=100&as_q=c%2B%2B+map+iter
UCR
Especificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Especificación
Contrato en el que están definidos todos los
servicios del módulo implementado
¿¿¿ CÓMO ???
• Encabezado, firma o prototipo
• Descripción corta de la funcionalidad
• Descripción detallada
• Ejemplo de uso
UCR
{ 1 } template <class T>
void list<T>::insert( list<T>::iterator p, const value_type & v );
{ 2 } Agrega una copia del valor "v" al contenedor.
{ 3 }
● El valor agregado queda antes de la posición "p" en el contenedor.
● Si p==this->end() el valor queda al final de la lista.
●
Precondición: <<< no tiene >>>
Complejidad: O ( this->size() )
{ 4 } {{ // test::insert()
list<long> L = makeList_long( "(3)" );
L.push_front( 2 ); assertTrue( L == makeList_long( "(2 3)" ) );
L.push_front( 1 ); assertTrue( L == makeList_long( "(1 2 3)" ) );
L.push_back( 4 ); assertTrue( L == makeList_long( "(1 2 3 4)" ) );
L.push_back( 5 ); assertTrue( L == makeList_long( "(1 2 3 4 5)" ) );
L.insert( L.begin() , 0 );
L.insert( L.end() , 6 );
assertTrue( L == makeList_long( "(0 1 2 3 4 5 6)" ) );
typename list<long>::iterator it = L.begin();
while ( it != L.end() && (*it != 4) ) { ++it; }
L.insert(it,4);
assertTrue( L == makeList_long( "(0 1 2 3 4 4 5 6)" ) );
}}
Especificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Implementación
Instrucciones imperativas a ser ejecutadas por el
computador
¿¿¿ CÓMO ???
• En la especificación se define QUÉ hace el programa.
• En la implementación queda escrito CÓMO se hace.
• Existen muchas posibles implementaciones diferentes que
cumplen con la misma especificación.
UCR
[email protected]
[email protected]
Universidad de Costa Rica
Universidad de Costa Rica
Especificación de módulos con ejemplos y casos de prueba
Especificación de módulos con ejemplos y casos de prueba
Escuela de Ciencias de la Computación e Informática
Escuela de Ciencias de la Computación e Informática
¿Por qué los programadores no
escriben especificaciones?
• Los cantantes ... ¡cantan!
• Las bailarinas … ¡bailan!
• Los poetas … ¡escriben!
• Los programadores no somos poetas ...
• Los programadores … ¡programamos!
• Zapatero: ¡a tus zapatos!
UCR
Especificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Extracción de los ejemplos de uso
Una herramienta de extracción y generación de documentación produce la
especificación de cada módulo, organizada apropiadamente, con base a las
anotaciones y comentarios del código fuente en donde se define la funcionalidad
y forma de uso de cada parte de la implementación
¿¿¿ CÓMO ???
• Use [ http://Doxygen.org ]
• Marque el principio del ejemplo
• Marque el final del ejemplo
UCR
/// Datos de prueba para \c insert() \c push_front() y \c push_back().
template <class T>
void test_list<T>::test_insert() {
{{ // test::insert()
list<long> L = makeList_long( "(3)" );
L.push_front( 2 ); assertTrue( L == makeList_long( "(2 3)" ) );
L.push_front( 1 ); assertTrue( L == makeList_long( "(1 2 3)" ) );
L.push_back( 4 ); assertTrue( L == makeList_long( "(1 2 3 4)" ) );
L.push_back( 5 ); assertTrue( L == makeList_long( "(1 2 3 4 5)" ) );
L.insert( L.begin() , 0 );
L.insert( L.end() , 6 );
assertTrue( L == makeList_long( "(0 1 2 3 4 5 6)" ) );
typename list<long>::iterator it = L.begin();
while ( it != L.end() && (*it != 4) ) { ++it; }
L.insert(it,4);
assertTrue( L == makeList_long( "(0 1 2 3 4 4 5 6)" ) );
}}
{ // Resto de las pruebas
list<long> X = makeList_long( "(0 1)" );
typename list<long>::iterator it; int i = 4;
it = X.begin();
X.insert(it, i);
assertTrue( X.size() == 3 && ! X.empty() );
i = 6;
X.insert(it++, i);
assertTrue( *it != 6 );
assertTrue( X.size() == 4 );
}
}
http://www.di-mare.com/adolfo/p/str2list/es/
/** \fn template <class T> inline void
list<T>::insert( iterator p, const value_type &v )
\brief Agrega el valor \c "v" al contenedor.
- El valor agregado queda antes de la posición \c "p"
en el contenedor.
- Si <code>p==this->end()</code> el valor queda al
final de la lista.
\pre <<< no tiene >>>
\par Complejidad
- O ( \c 1 )
\dontinclude test_list.cpp
\skipline test::insert()
\until }}
\see test_list::test_insert()
*/
http://www.di-mare.com/adolfo/p/BUnit.htm
Especificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Receta
{ 1 } Encabezado, firma o prototipo.
{ 2 } Descripción corta de la funcionalidad.
{ 4 } Ejemplo de uso "{{" "}}".
UCR
Especificación de módulos con ejemplos y casos de prueba
[email protected]
Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
Conclusiones
• Use datos de prueba para completar cada especificación
• Use datos de prueba como ejemplos
• Enseñe a los jóvenes para que aprendan los viejos
• Use herramientas para generar documentación
• Use herramientas para indexación de documentos
[ http://www.di-mare.com/adolfo/p/BUnitXP.htm ]
[ http://www.di-mare.com/adolfo/p/BUnit.htm ]
¡¡¡ Muchas gracias !!!
http://www.viajesyfotos.net/fotos/costa_rica.htm
UCR
Comentarios de: Especificación de módulos con ejemplos y casos de prueba (0)
No hay comentarios