Logo Studenta

Prototipo_de_framework_para_pruebas_de_u

¡Este material tiene más páginas!

Vista previa del material en texto

UNIVERSIDAD CATÓLICA BOLIVIANA “SAN PABLO” 
UNIDAD ACADÉMICA REGIONAL COCHABAMBA 
Departamento de Ciencias Exactas e Ingeniería 
Carrera de Ingeniería de Sistemas 
 
 
 
 
Prototipo de framework para pruebas de unidad para 
desarrolladores de aplicaciones web 
 
 
Proyecto de Grado de Licenciatura en Ingeniería de Sistemas 
 
 
Jorge Rodrigo Leon Riguera 
Mauricio Derek Valdez Arratia 
 
Cochabamba – Bolivia 
Enero de 2013
 
TRIBUNAL EXAMINADOR 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
______________________ 
Ing. Omar Rodríguez 
Profesor Guía 
 
 
 
 
 
 
____________________ 
Mgr. Johnny Herrera 
Director de Carrera 
 
 
 
 
 
 
 
______________________ 
Ing. Carlos Canedo 
Profesor Relator 
 
 
 
 
 
 
______________________ 
Mgr. Alfonso Vía Reque 
Rector Regional 
 
 
 
 
 
 
 
Agradecimientos 
 
 
 
 
 
 
Agradecer a todas las personas que nos brindaron su apoyo 
 
Muchas gracias a todos 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Resumen 
 
 
El presente proyecto de grado es un prototipo de framework que presenta una 
abstracción de diferentes tipos de prueba de unidad que ayuda a desarrolladores de 
aplicaciones web a probar distintas funcionalidades de una aplicación web en un 
tiempo reducido, además de poder ver el rendimiento de dichas funcionalidades 
estresándolos y obtener el resultado del performance. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Palabras clave: Framework, pruebas de unidad, estrés, performance, interface. 
 
Abstract 
 
This graduation project is a prototype framework that presents an abstraction of different 
types of unit test that helps web developers to test different features of a web application 
in a short time, besides being able to see the performance of these functions stressing 
and get the result of the performance. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Keywords: Framework, unit tests, stress, performance, interfaces. 
 
ÍNDICE 
 
INTRODUCCIÓN ............................................................................................................. 1 
Antecedentes .................................................................................................................. 2 
Situación problemática ................................................................................................... 2 
Formulación del problema ............................................................................................. 3 
Objetivos ........................................................................................................................ 3 
Objetivo general ......................................................................................................... 3 
Objetivos específicos .................................................................................................. 3 
Justificación .................................................................................................................... 3 
Alcances ......................................................................................................................... 4 
Limitaciones ................................................................................................................... 4 
CAPÍTULO 1. MARCO TEÓRICO ................................................................................. 5 
1.1. Ingenieria del software ............................................................................................ 5 
1.2. Proceso de software ................................................................................................. 5 
1.2.1 Atributos de un buen software ........................................................................... 6 
1.3. Modelos del proceso del software ........................................................................... 6 
1.3.1 Modelo de desarrollo en cascada ....................................................................... 7 
1.3.2 Modelo de desarrollo evolutivo ......................................................................... 7 
1.3.3 Modelo de desarrollo basado en componentes .................................................. 8 
1.4 Actividades del proceso ......................................................................................... 10 
1.4.1 Especificación del software ............................................................................. 10 
1.5 Diseño e implementación del software .................................................................. 12 
1.5.1 Evolución del software .................................................................................... 14 
1.5.2 Verificación y validación ................................................................................ 15 
1.6 Desarrollo de aplicaciones web .............................................................................. 17 
1.7 Framework ............................................................................................................. 31 
1.7.1 Tipos de framework ......................................................................................... 32 
1.7.2 Propiedades de un framework ......................................................................... 33 
1.7.3 Arquitectura de un framework ......................................................................... 34 
 
1.7.4 Desarrollo de un framework ............................................................................ 35 
1.7.5 Diseño e implementación ................................................................................ 35 
1.7.6 Instanciación y testeo ...................................................................................... 36 
1.7.7 Documentación de un framework ................................................................... 36 
1.8 TPL ......................................................................................................................... 37 
1.9 Pruebas de unidad .................................................................................................. 39 
1.9.1 Pruebas de Unidad en desarrollo de aplicaciones web .................................... 40 
1.9.2 Pruebas de unidad en procesos agiles .............................................................. 40 
1.9.3 Tipos de prueba de unidad ............................................................................... 41 
1.9.4 Pruebas de unidad de Estrés/Performance ....................................................... 42 
1.10 Prototipo del framework ...................................................................................... 44 
CAPÍTULO 2. MARCO PRÁCTICO ............................................................................. 45 
2.1 Planificación de incrementos ................................................................................. 47 
2.1.1 Primer incremento ........................................................................................... 47 
2.1.2 Segundo incremento ........................................................................................ 47 
2.1.3 Tercer incremento ............................................................................................ 48 
2.1.4 Cuarto incremento ........................................................................................... 49 
2.2 Primer Incremento .................................................................................................. 49 
2.2.1 Análisis de requerimientos .............................................................................. 49 
2.2.2 Análisis ............................................................................................................ 53 
2.2.3 Implementación ............................................................................................... 55 
2.3 Segundo incremento ...............................................................................................57 
2.3.1 Análisis de requerimientos .............................................................................. 57 
2.3.2 Análisis ............................................................................................................ 62 
2.3.3 Desarrollo ........................................................................................................ 67 
2.4 Tercer incremento .................................................................................................. 76 
2.4.1 Análisis de requerimientos .............................................................................. 76 
2.4.2 Análisis ............................................................................................................ 82 
2.4.3 Implementación ............................................................................................... 86 
2.5 Cuarto incremento .................................................................................................. 91 
 
2.5.1 Análisis de requerimientos .............................................................................. 91 
2.5.2 Análisis ............................................................................................................ 95 
2.5.3 Implementación ............................................................................................... 97 
2.6 Caso de uso final .................................................................................................. 101 
CONCLUSIONES Y RECOMENDACIONES ............................................................ 102 
Conclusiones .............................................................................................................. 102 
Recomendaciones ....................................................................................................... 102 
BIBLIOGRAFÍA ........................................................................................................... 104 
Anexos ........................................................................................................................... 106 
Anexo A ..................................................................................................................... 106 
Anexo B ..................................................................................................................... 114 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ÍNDICE DE FIGURAS 
 
Modelo de desarrollo cascada ............................................................................................ 7 
Modelo de desarrollo evolutivo ......................................................................................... 8 
Modelo de desarrollo basado en componentes .................................................................. 9 
Proceso de la ingeniería de requerimientos ..................................................................... 12 
Etapas de proceso de prueba de validación ..................................................................... 14 
Las fases de prueba en le proceso del software ............................................................... 15 
Evolución del sistema ...................................................................................................... 15 
El proceso de depuración ................................................................................................. 17 
Ejemplo de documento HTML ........................................................................................ 19 
Configuración de una aplicación web .............................................................................. 20 
Generación dinámica por cada solicitud .......................................................................... 21 
DHTML DOM [Document Object Model] ..................................................................... 22 
Funcionamiento de las paginas ASP ................................................................................ 24 
Componentes cuando cliente solicita servicios a servidor ............................................... 24 
Ejemplo de código básico ASP ........................................................................................ 25 
Ejemplo de pagina ASP.NET .......................................................................................... 26 
Plataforma .NET .............................................................................................................. 27 
Eventos en ASP.NET ....................................................................................................... 28 
ASP.NET se encarga de mostrar formularios web de la plataforma que resulte mas 
adecuada para el navegador que utilice el usuario final de la aplicación ................ 29 
MVC ................................................................................................................................ 31 
 
Arquitectura de un framework ......................................................................................... 34 
Task Parallel Library ....................................................................................................... 37 
Ejemplo paralelismo de datos .......................................................................................... 38 
Ejemplo paralelismo de tareas ......................................................................................... 39 
Estructura del framework de pruebas de unidad para desarrolladores de aplicaciones web
 ................................................................................................................................. 45 
Flujo de creación de framework ...................................................................................... 46 
Crear plantilla .................................................................................................................. 50 
Obtener información de CPU y Memoria ........................................................................ 50 
Almacenar los datos de porcentaje de uso de CPU vs Tiempo y Memoria vs Tiempo ... 51 
Graficar datos almacenados ............................................................................................. 51 
Diagrama de clases (primer incremento) – Modulo de pruebas de unidad de 
estrés/performance ................................................................................................... 53 
Diagrama de secuencia: Obtener información de HW y graficar con los datos 
almacenados ............................................................................................................. 54 
Interacción con los componentes básicos ........................................................................ 57 
Validación de un componente individual ........................................................................ 57 
Ejecutar prueba de unidad por un intervalo de tiempo .................................................... 58 
Ejecutar prueba de unidad en múltiples sesiones ............................................................. 58 
Ejecutar una prueba de unidad en múltiples sesiones en un intervalo de tiempo ............ 59 
Diagrama de clases (segundo incremento) – Modulo de pruebas de unidad de interfaz de 
usuario ...................................................................................................................... 62 
Diagrama de clases (segundo incremento) – Modulo de pruebas de unidad de 
estrés/performance ................................................................................................... 64 
 
Diagrama de secuencia: Validación de componentes ...................................................... 65 
Diagrama de secuencia: Validación de componentes ...................................................... 66 
Validación de un formulario completo ............................................................................ 76 
Navegación básica ...........................................................................................................76 
Reportes de interacciones de componentes ..................................................................... 77 
Ejecutar distintas pruebas de unidad ................................................................................ 77 
Ejecutar distintas pruebas de unidad en múltiples sesiones ............................................. 78 
Ejecutar distintas pruebas de unidad en múltiples sesiones en un intervalo de tiempo 
secuencialmente ....................................................................................................... 78 
Diagrama de clases (tercer incremento) – Modulo de pruebas de unidad de interfaz de 
usuario ...................................................................................................................... 82 
Diagrama de clases (tercer incremento) – Modulo de pruebas de unidad de 
estrés/performance ................................................................................................... 84 
Diagrama de secuencia: Navegación e interacciones con componentes ......................... 85 
Reporte de navegación ..................................................................................................... 91 
Ejecutar distintas pruebas de unidad en múltiples sesiones en un intervalo de tiempo 
paralelamente ........................................................................................................... 92 
Ejecutar una prueba de unidad hasta el porcentaje de uso de CPU llegue a un porcentaje 
de CPU definido por desarrollador .......................................................................... 93 
Diagrama de clases (cuarto incremento) – Modulo de pruebas de unidad de interfaz de 
usuario ...................................................................................................................... 95 
Diagrama de clases (cuarto incremento) – Modulo de pruebas de unidad de 
estrés/performance ................................................................................................... 96 
Caso de uso final ............................................................................................................ 101 
 
 
ÍNDICE DE TABLAS 
 
Descripción caso de uso: Crear plantilla....……………………………….………….…50 
Descripción caso de uso: Obtener información de CPU y Memoria……..……….……51
Descripción caso de uso: Graficar datos almacenados….….…………….…….………51 
Descripción caso de uso: Interacción con los componentes básico.……….….……..…56 
Descripción caso de uso: Validación de un componente individual….…..…………….57
Descripción caso de uso: Ejecutar prueba de unidad por un intervalo de tiempo…...…57 
Descripción caso de uso: Ejecutar prueba de unidad en múltiples sesiones……………58 
Descripción caso de uso: Ejecutar prueba de unidad en múltiples sesiones en un 
intervalo de tiempo……………………………………………………………………...58
Descripción caso de uso: Validación de formulario completo...………..………………69 
Descripción caso de uso: Navegación básica...…………………………………………69 
Descripción caso de uso: Reportes de interacciones de componentes….………………69
Descripción caso de uso: Ejecutar distintas pruebas de unidad.…..……………………70
Descripción de caso de uso: Ejecutar distintas pruebas de unidad en múltiples 
sesiones………………………………………………………………………………….80 
Descripción caso de uso: Ejecutar distintas pruebas de unidad en múltiples sesiones en 
un intervalo de tiempo secuencialmente...………...……………………………….……71
Descripción caso de uso: Validación de formulario completo……….…………………79 
Descripción caso de uso: Ejecutar distintas pruebas de unidad en múltiples sesiones en 
un intervalo de tiempo paralelamente…………..………..………………...……………80 
Descripción caso de uso: Ejecutar una prueba de unidad hasta que el porcentaje de uso 
de CPU llegue a un porcentaje definido por desarrollador………………………...……81 
 
1 
 
INTRODUCCIÓN 
Framework es una estructura de soporte definida, en la cual otro proyecto de software 
puede ser organizado y desarrollado, diseñado con la intención de facilitar el desarrollo 
de software, permitiendo a los diseñadores y programadores pasar más tiempo 
identificando requerimientos de software que tratando con los tediosos detalles de bajo 
nivel de proveer un sistema funcional. 
Prueba de unidad es un método de prueba que verifica qué componentes individuales del 
código fuente funcionan correctamente. Para ello, el desarrollador que crea las pruebas, 
implementa ejemplos de uso directamente en código fuente que es ejecutado durante el 
proceso de pruebas. Si la ejecución no obtiene los resultados esperados se dice que la 
prueba falla o no pasa, y por lo tanto se considera que el código probado es incorrecto. 
La prueba de unidad de interfaz de usuario se utilizar para evitar los pasos repetitivos al 
momento de validar el cambio desarrollado. Esta prueba de unidad sigue una serie de 
pasos definidos has re direccionar al componente o pantalla que desea validar, además 
que al tener pasos automatizados, estos ayudaran al desarrollador a posicionarse en el 
punto deseado de debug. 
La prueba de unidad de estrés se utiliza para probar la robustez de una unidad de código 
en la que se está trabajando. Se va doblando el número de usuarios que se agregan a la 
unidad de código y se ejecuta una prueba de carga. Este tipo de prueba se realiza para 
determinar la solidez de una unidad de código en los momentos de carga extrema. 
Además, ayuda a los desarrolladores para determinar si la unidad de código rendirá lo 
suficiente en caso de que la carga real supere a la carga esperada, en el ambiente del 
desarrollador. 
La prueba de unidad de performance son pruebas que se realizan, desde una perspectiva, 
para determinar lo rápido que ejecuta una unidad de código en condiciones particulares 
de trabajo. También puede servir para validar y verificar otros atributos de calidad de las 
unidades de código, en el ambiente del desarrollador. 
Los sistemas informáticos tiene un ciclo de vida cambiante en especial por los 
requerimientos que se van presentando ya sea al inicio o en el transcurso del proceso de 
desarrollo; Las pruebas de unidad se utilizan para garantizar que los cambios en los 
requerimientos no vayan a romper la integridad del sistema. Adicionalmente, cuando 
existen requerimientos para mejorar o corregir problemas de performance/estrés, se 
pueden crear pruebas de unidad que validen la estabilidad/integridad del sistema después 
de los cambios (Pruebas a pequeña escala). 
2 
 
Antecedentes 
Las pruebas unidad sobre interfaz de usuario no son agradables para los desarrolladores, 
por el hecho de que son más complejas y/o tediosas a la hora de crearlas, por esto los 
desarrolladores son más reacios a hacerlas. 
No es común entre los desarrolladores crear pruebas de unidad que ayuden a validar 
cambios o arreglos relacionados con requerimientos de performance/estrés. 
Si bien existen mecanismos, tecnologías para realizar pruebas de unidad estas no están 
diseñadas específicamente para realizar pruebas para interfaz de usuario y/o pruebas 
para performance/estrés. 
 
Situación problemática 
Actualmente, en nuestro medio existen empresas que se están dedicando al desarrollo de 
software para el exterior. Este tipo de software demanda mejores medidas de calidad que 
garanticen la calidad de la programación del software. Esto implica, que los 
desarrolladores prueben software intensa y extensamente de tal forma que garantice 
mantenibilidad del código. 
Cuando un desarrollador web esta implementado una interfaz de usuario, debe ir 
verificando sus cambios, para lo cual se realizan varios pasos repetitivos aunque el 
cambio sea muy pequeño, más aun si el cambio o implementación está relacionado con 
una corrección de error o con una nueva funcionalidad de extensión de un módulo. Los 
pasos repetitivos para una simple validación pueden ser tediosos. 
Las pruebas de unidad de estrés y/o performance generalmente son realizadas cuando el 
sistemadesarrollado entra en producción. Es en este punto cuando se detectan los 
módulos con problemas de estrés y performance y se reporta como errores (bugs) a los 
desarrolladores. 
 
 
 
 
3 
 
Formulación del problema 
- Las pruebas de unidad de interfaz de usuario son tediosas y complejas para 
desarrolladores web. 
- Cuando varias personas están involucradas en un mismo producto existe la 
posibilidad de ruptura de código. 
- Los mecanismos para hacer pruebas de unidad de interfaz de usuario y/o de 
performance/estrés son complejos. 
- En nuestro entorno los desarrolladores no están acostumbrados a realizar pruebas 
de unidad de performance/estrés. 
- Desarrollador que quiere realizar sus propias pruebas, las tienes que crear 
artesanalmente. 
 
Objetivos 
Objetivo general 
- Desarrollar un prototipo de framework para pruebas de unidad de interfaz de 
usuario y de performance/estrés durante el desarrollo de aplicaciones web. 
Objetivos específicos 
1. Desarrollar una librería para pruebas de unidad de interfaz de usuario. 
2. Desarrollar una librería para pruebas de unidad de performance/estrés. 
3. Aportar a la mantenibilidad/portabilidad de las pruebas de unidad mediante la 
estandarización de su generación. 
4. Implementar demostración de la arquitectura del framework. 
 
Justificación 
El comportamiento, rendimiento y pruebas del código desarrollado son muy importantes 
para garantizar un software de calidad. La creación de un framework que integre los 
objetivos específicos mencionados, permitirá mejorar la tarea de los desarrolladores 
teniendo así un producto de mayor calidad y reduciendo la complejidad en la creación de 
pruebas de unidad de interfaz de usuario y performance/estrés. 
4 
 
Alcances 
Las pruebas de unidad contemplarán los siguientes puntos: 
- Reconocimiento de componentes 
- Generación de rutas de navegación automatizada 
- Validación de rutas de navegación(Completadas o No) 
- Validación de Componentes individuales en un formulario (ASP) 
- Validación de vistas completas 
- Generación de reportes sobre fallas, pruebas de unidad y reconocimiento de 
componentes. 
Las pruebas de performance/estrés contemplaran los siguientes puntos: 
- Se incluirá la carga de volumen de datos unitarios. 
- Se abordara la carga de volumen de datos paralelo. 
- Se proporcionara la carga de volumen de datos con tecnología TPL (Task 
Parallel Library). 
- Se proporcionara estadísticas de uso de recursos de hardware del sistema con 
tecnología WMI. 
- Generación de reportes sobre el rendimiento de la unidad de código. 
Reporte sobre componentes y utilizaremos la tecnología .net con el lenguaje C# con la 
versión de visual estudio 2012. 
 
Limitaciones 
- Las pruebas de unidad se realizaran sobre Interfaz de usuario a nivel de 
componentes. 
- Las pruebas de performance/estrés están enfocadas al entorno del desarrollador y 
no así a una aplicación en producción. 
- Trabajar con aplicaciones web específicamente con aplicaciones desarrolladas en 
ASP. 
- No se incluirá otro tipo de pruebas aparte de las mencionadas. 
 
 
5 
 
CAPÍTULO 1. MARCO TEÓRICO 
1.1. Ingenieria del software 
Disciplina de la ingeniería que comprende todos los aspectos de la producción de 
software desde las etapas iniciales de la especificación del sistema, hasta el 
mantenimiento de éste. 
(IanSommerville,2005) 
 
En esta definición, existen dos frases 
1. Disciplinas que involucran a la Ingeniería. Los involucrados hacen que las cosas 
funcionen. Aplican teorías, métodos y herramientas donde sean convenientes y cuando 
sean convenientes, pero las utilizan de forma selectiva y siempre tratando de descubrir 
soluciones a los problemas, aun cuando no existan teorías y métodos aplicables para 
resolverlos. 
2. Aspectos de producción de software. Actividades tales como la gestión de proyectos 
de software y el desarrollo de herramientas, métodos y teorías de apoyo a la producción 
de software. 
 
1.2. Proceso de software 
Son un conjunto de actividades y resultados asociados que generan un producto final de 
software. Estas actividades son llevadas a cabo por los ingenieros de software. Podemos 
resaltar cuatro actividades fundamentales. 
 
- Especificación del software, Clientes e ingenieros definen los alcances del 
software a producir y las limitaciones sobre su operación. 
 
- Desarrollo del software, El software se diseña y programa. 
 
- Validación del software, El software se valida para asegurar que es lo que el 
cliente requiere según los requerimientos previamente solicitados. 
 
- Evolución del software, El software se modifica para adaptarlo a los cambios 
requeridos por el cliente y/o el mercado. 
 
http://www.software-engin.com/
6 
 
Diferentes tipos de sistemas necesitan diferentes procesos de desarrollo. Estas 
actividades genéricas pueden organizarse de diferentes formas y describirse en 
diferentes niveles de detalle para diferentes tipos de software. Sin embargo, el uso de un 
proceso inadecuado del software puede reducir la calidad o la utilidad del producto de 
software que se va a desarrollar y/o incrementar los costes de desarrollo. 
(Ian Sommerville, 2005) 
1.2.1 Atributos de un buen software 
Los atributos de un buen software se reflejan su comportamiento durante su ejecución y 
en la estructura y organización del programa fuente y en la documentación asociada. 
Entre los atributos podemos resaltar los siguientes cuatro: 
Mantenibilidad: El Software debe escribirse de tal forma que pueda evolucionar y no 
sufra grandes impactos en las etapas de cambio. Este es un atributo crítico debido a que 
el cambio en el Software es una consecuencia inevitable de un cambio en el entorno de 
negocios 
Confiabilidad: El Software no debe causar daños económicos y/o físicos en caso de una 
falla del sistema. 
Eficiencia: No se deben malgastar recursos del sistema, como memoria y los ciclos de 
procesamiento. La eficiencia incluye tiempos de respuesta y de procesamiento. 
Usabilidad: Debe ser fácil e intuitivo al momento de su uso por el usuario. Esto 
significa que debe tener una interfaz apropiada y una adecuada documentación. 
 
1.3. Modelos del proceso del software 
Un modelo del proceso del software es una representación abstracta de un proceso del 
software. Cada modelo de proceso representa un proceso desde una perspectiva 
particular, y así proporciona sólo información parcial sobre ese proceso. 
(IanSommerville, 2005) 
 
http://www.software-engin.com/
http://www.software-engin.com/
7 
 
Los modelos generales no son descripciones finales ni definitivas de los procesos del 
Software. Más bien, son abstracciones de procesos del sistema que se pueden utilizar o 
servir para explicar diferentes enfoques para el desarrollo del mismo. Se puede decir que 
son marcos de trabajo del proceso que pueden ser extendidos y adaptados para crear 
procesos más específicos. 
Los más utilizados son los siguientes: 
1.3.1 Modelo de desarrollo en cascada 
Considera una de sus actividades como fases separadas, estas actividades son: 
desarrollo, validación y evolución. 
Figura 1 
Modelo de desarrollo cascada 
 
 
Fuente: 
http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Modelo_Cascada_Sec
uencial.jpg/350px-Modelo_Cascada_Secuencial.jpg 
 
1.3.2 Modelo de desarrollo evolutivo 
El sistema se desarrolla rápidamente a partir de especificaciones abstractas. Estas se 
refinan basándose en las peticiones del cliente generando un sistema que satisfaga sus 
necesidades. 
El software evoluciona con el tiempo. Los requisitos del usuario y del producto suelen 
cambiar conforme se desarrolla el mismo. Las fechas de mercado y la competencia 
http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Modelo_Cascada_Secuencial.jpg/350px-Modelo_Cascada_Secuencial.jpg
http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Modelo_Cascada_Secuencial.jpg/350px-Modelo_Cascada_Secuencial.jpg8 
 
hacen que no sea posible esperar a poner en el mercado un producto absolutamente 
completo, por lo que se debe introducir una versión funcional limitada de alguna forma 
para aliviar las presiones competitivas. 
En esas u otras situaciones similares los desarrolladores necesitan modelos de progreso 
que estén diseñados para acomodarse a una evolución temporal o progresiva, donde los 
requisitos centrales son conocidos de antemano, aunque no estén bien definidos a nivel 
detalle. 
Los evolutivos son modelos iterativos, permiten desarrollar versiones cada vez más 
completas y complejas, hasta llegar al objetivo final deseado; incluso evolucionar más 
allá, durante la fase de operación. Los modelos “Iterativo Incremental” y “Espiral” 
(entre otros) son dos de los más conocidos y utilizados del tipo evolutivo. 
Figura 2 
Modelo de desarrollo evolutivo 
 
Fuente: http://www.ecured.cu/images/7/71/Pds1.JPG 
 
1.3.3 Modelo de desarrollo basado en componentes 
 
Se enfoca en la existencia de componentes reutilizables. Se enfoca en integrar 
componentes y reutilizarlos más que desarrollarlos de cero. Esta cultura de reutilización 
es esencial en casi todas las organizaciones que desarrollan software. Sin embargo, la 
mayoría de los desarrolladores de software suelen utilizar métodos de desarrollo internos 
a la organización que conducen, en la mayoría de los casos, a aplicaciones mal 
construidas, retrasos en los plazos de finalización del proyecto, y un aumento en los 
costes finales del desarrollo. Esto se debe a la falta de procesos y técnicas bien definidas 
que guíen a los desarrolladores de software durante la construcción de la aplicación 
basada en reutilización. (Luis F. Iribarne Martínez, 2003) 
9 
 
Figura 3 
Modelo de desarrollo basado en componentes 
 
 
Fuente: 
http://www.itpuebla.edu.mx/Alumnos/Cursos_Tutoriales/Ana_Sosa_Pintle/SISTE
MAS/ARCHIVOS_FUNDAMENTOS/ARCHIVOS/U5_6_clip_image001.gif 
 
Estos modelos se utilizan ampliamente en la práctica actual de la ingeniería del software. 
No se excluyen y a menudo se utilizan juntos, especialmente en proyectos de sistemas 
grandes. 
 
 
 
 
 
10 
 
1.3.3.1 Iteración de procesos 
Los cambios existen y son inevitables en cualquier proyecto de software. Los 
requerimientos cambian cuando el cliente lo solicite es por esto que las prioridades de 
gestión cambian. Cuando se tienen nuevas tecnologías, cambian los diseños y la 
implementación. Significa que el proceso de software no es un proceso único. Más bien, 
las actividades se repiten regularmente según el sistema sufra cambios. 
La esencia de los procesos iterativos es que la especificación se desarrolla junto con el 
software. 
Sin embargo, esto crea conflictos con el modelo de obtención de muchas organizaciones 
donde la especificación completa del sistema es parte del contrato de desarrollo del 
mismo. En el enfoque incremental, no existe una especificación completa del sistema 
hasta que el incremento final se especifica. 
(Ian Sommerville, 2005). 
 
1.4 Actividades del proceso 
Podemos identificar cuatro actividades básicas: especificación del software, desarrollo, 
validación y evolución se organizan de forma distinta en diferentes procesos del 
desarrollo. 
 
En la modelo de desarrollo en cascada están organizadas secuencialmente, mientras que 
en el modelo de desarrollo evolutivo se entrelazan. Estas pueden variar dependiendo del 
tipo de software final, las personas, la estructura organizativa implicada y el ambiente. 
No existe una forma correcta o incorrecta de organizar estas actividades. 
1.4.1 Especificación del software 
La especificación del software es el proceso de definición y comprensión de los 
servicios que necesita el cliente o el entorno para el sistema además que se identifican 
las limitaciones de funcionamiento. 
 
Es una etapa crítica en el proceso del software ya que si existen errores en esta etapa 
originan inevitablemente problemas posteriores en el diseño y la implementación del 
sistema. 
http://www.software-engin.com/
11 
 
En esta etapa se deben distinguir tres actores principales: 
Los usuarios finales y los clientes que necesitan de una declaración de alto nivel de los 
requerimientos. Los desarrolladores del sistema necesitan una especificación más 
detallada de éste, orientado al funcionamiento y lógica de negocio. 
Podemos distinguir cuatro fases principales en este proceso: 
1. Análisis de viabilidad. Se verifica que las necesidades del usuario se puedan 
satisfacer con las tecnologías existentes de hardware y software. Además de analizar si 
el sistema propuesto será rentable desde un punto de vista de negocios y si se puede 
desarrollar dentro de las restricciones planteadas. Este estudio debe ser relativamente 
económico y rápido. 
2. Captación y análisis de requerimientos. Es el proceso de obtener los requerimientos 
del sistema por medio de la observación de los sistemas existentes, discusiones con los 
usuarios potenciales y proveedores, el análisis de tareas, etcétera. Esto puede implicar el 
desarrollo de uno o más modelos y prototipos del sistema que ayudan al analista a 
comprender el sistema a especificar. 
3. Especificación de requerimientos. Se deben traducir todos los datos obtenidos 
durante el análisis en un documento que define un conjunto de requerimientos. 
4. Validación de requerimientos. Se comprueba la veracidad y completitud de 
requerimientos. Durante esta etapa se deben corregir problemas de malentendidos en la 
captación de datos y requerimientos. 
No se debe tomar estrictamente de forma secuencial estas etapas. El análisis de 
requerimientos puede ser una fase continua durante la definición y especificación del 
producto y a lo largo del proceso de este surgen nuevos requerimientos. 
Por lo tanto, las actividades de análisis, definición y especificación se entrelazan. En los 
métodos ágiles como la programación extrema, los requerimientos de desarrollan de 
forma incremental conforme a las prioridades del usuario, y la obtención de 
requerimientos viene de los usuarios que forman parte del equipo de desarrollo. 
(Ian Sommerville, 2005). 
 
 
 
 
http://www.software-engin.com/
12 
 
Figura 4 
Proceso de la ingeniería de requerimientos 
 
Fuente: (Ian Sommerville, 2005) 
 
1.5 Diseño e implementación del software 
En esta etapa se convierte una especificación en un sistema ejecutable. Implicando los 
procesos de diseño y desarrollo, también puede implicar un refinamiento de la 
especificación del software. 
 
Un diseño de software es una descripción de la estructura de este, los datos que son parte 
del sistema, interfaces, y algunas veces los algoritmos involucrados. Por lo general esto 
es realizado de manera iterativa a través de diversas versiones y/o entregables. 
 
Puede implicar el desarrollo de distintos modelos del sistema con diferentes niveles de 
abstracción. Mientras se van descomponiendo los diseños, se descubren errores y/o 
omisiones realizadas en etapas previas. Esto permite mejorar los diseños previos. 
 
La retroalimentación entre etapas y la consecuente repetición del trabajo es inevitable en 
todos los procesos de diseño. El resultado final del proceso contiene especificaciones 
detalladas de los algoritmos y las estructuras de datos implementadas. 
 
 
http://www.software-engin.com/
13 
 
Las actividades específicas del proceso de diseño son: 
1. Diseño arquitectónico. Se identifican y documentan todos los subsistemas o módulos 
que forman el sistema final. 
2. Especificación abstracta. Para cada subsistema se produce una especificación 
abstracta 
de sus servicios y las restricciones bajo las cuales debe funcionar. 
3. Diseño de la interfaz. Cada subsistema debe tener su diseño y documentación de las 
interfaces que lo componen. Esta debe ser clara y precisa ya que permite que el 
subsistema sea utilizado sin conocimiento de su funcionamiento.4. Diseño de componentes. Se diseñan las interfaces además de asignar los servicios a 
los componentes. 
5. Diseño de la estructura de datos. Se especifica y diseña la estructura de datos que va 
ser utilizada en el sistema. 
6. Diseño de algoritmos. Se especifican y se diseñan los algoritmos que serán utilizados 
en el sistema. 
Validación del software 
La validación de software es utilizado para mostrar que el sistema se ajusta a su 
especificación y que cumple las expectativas del usuario o usuarios que lo utilizaran. 
Esto implica que los procesos de comprobación y revisión sean constantes hasta el 
desarrollo del programa. La mayoría de los costos de validación aparecen después de la 
implementación, cuando se prueba el funcionamiento del sistema por completo. 
A excepción de los programas pequeños, los sistemas no se deben validar como una 
simple unidad de código, sino que, deben ser comprobados a un nivel más profundo. 
Existen tres etapas en la cual se prueban los componentes del sistema, la integración del 
sistema y, finalmente, el sistema con los datos del cliente. 
Las etapas del proceso de prueba son: 
1. Prueba de componentes o unidades. Se prueban los componentes individuales para 
asegurarse que funcionan correctamente. Cada uno se prueba de forma independiente, 
sin los otros componentes del sistema. Los componentes pueden ser entidades simples 
como funciones o clases de objetos. 
14 
 
2. Prueba del sistema. Este proceso comprende encontrar errores que son el resultado 
de interacciones no previstas entre los componentes y su interfaz. También comprende 
validar que el sistema cumpla sus requerimientos funcionales y no funcionales y probar 
las propiedades emergentes del sistema. 
3. Prueba de aceptación. Esta es la etapa final en el proceso de pruebas antes de que se 
acepte que el sistema entre a producción. Esta prueba con los datos proporcionados por 
el cliente más que con datos de prueba simulados. 
Figura 5 
Etapas de proceso de prueba de validación 
 
Fuente: (Ian Sommerville, 2005) 
 
1.5.1 Evolución del software 
La flexibilidad de los sistemas en el caso de cambios de requerimientos, es una de las 
principales razones por la cual este atributo es incorporado a los sistemas grandes y 
complejos. Realizar cambios en un hardware es muy costoso. Sin embargo, se pueden 
hacer cambios al software en cualquier momento durante o después de la etapa de 
desarrollo. 
Siempre ha existido una separación entre el proceso de desarrollo y el proceso de 
evolución de software. Muchos consideran el desarrollo de software como una actividad 
creativa en la cual un sistema de software se desarrolla desde un concepto inicial hasta 
que se pone en funcionamiento. A veces se consideran el mantenimiento del software 
como algo aburrido y sin interés, aunque los costos de mantenimiento son a menudo 
varias veces los costos iniciales de desarrollo. El proceso. Esta distinción entre el 
desarrollo y el mantenimiento es cada vas más irrelevante. Hoy en día, pocos sistemas 
de software son completamente nuevos, lo que implica que tiene más sentido ver el 
desarrollo y el mantenimiento como actividades continuas. Más que dos procesos 
separados, se considera a la ingeniería de software como un proceso evolutivo en la cual 
http://www.software-engin.com/
15 
 
el software cambia continuamente durante su periodo de vida como respuesta a los 
requerimientos cambiantes y necesidades del usuario. 
Figura 6 
Las fases de prueba en le proceso del software 
 
Fuente: (Ian Sommerville, 2005) 
 
Figura 7 
Evolución del sistema 
 
Fuente: (Ian Sommerville, 2005) 
 
1.5.2 Verificación y validación 
El programa que se está desarrollando debe ser comprobado para asegurar que satisface 
su especificación y entrega la funcionalidad esperada por el cliente. La verificación y 
validación tiene un lugar en cada etapa del proceso de software, comienza por revisiones 
de los requerimientos y continúa con revisiones del diseño e inspecciones de código 
http://www.software-engin.com/
http://www.software-engin.com/
16 
 
hasta la prueba del producto. La verificación y la validación no son lo mismo, aunque a 
menudo se confunden. Validación: ¿Estamos construyendo el producto correcto?, 
Verificación: ¿Estamos construyendo el producto correctamente? 
Estas definiciones nos dicen que el papel de la verificación implica comprobar que el 
software está de acuerdo con su especificación. Debería comprobarse que satisface los 
requerimientos funcionales y no funcionales. La validación, es un proceso más general, 
su objetivo es asegurar que el sistema software satisface las expectativas del cliente. 
El último objetivo del proceso de verificación y validación es establecer la seguridad de 
que el sistema software está «hecho para un propósito. Lo que significa que el sistema 
debe ser lo suficientemente bueno para su uso. El nivel de confianza requerido depende 
del propósito del sistema, las expectativas de los usuarios del sistema y el entorno de 
mercado actual del sistema: 
Función del software, el nivel de confianza requerido depende de lo crítico que sea el 
software para una organización. Por ejemplo, el nivel de confianza requerido para el 
software que se utiliza para controlar un sistema de seguridad crítico es mucho más alto 
que el requerido para un prototipo de un sistema software que ha sido desarrollado para 
demostrar algunas ideas nuevas. 
Expectativas del usuario, una reflexión lamentable sobre la industria del software es 
que muchos usuarios tienen pocas expectativas sobre su software y no se sorprenden 
cuando éste falla durante su uso. Están dispuestos a aceptar estos fallos del sistema 
cuando los beneficios de su uso son mayores que sus desventajas. Actualmente es menos 
aceptable entregar sistemas no fiables, por lo que las compañías de software deben 
invertir más esfuerzo para verificar y validar. 
Entorno de mercado, Cuando un sistema se comercializa, los vendedores del sistema 
deben tener en cuenta los programas competidores, el precio que sus clientes están 
dispuestos a pagar por el sistema y la agenda requerida para entregar dicho sistema. 
Las pruebas de validación intentan demostrar que el software es el que el cliente quiere 
que satisfaga sus requerimientos. Como parte de la prueba de validación, se pueden 
utilizar pruebas estadísticas para probar el rendimiento y la fiabilidad de los programas, 
y para comprobar cómo trabaja en ciertas condiciones operacionales. Sin embargo, la 
verificación, validación y la depuración tienen diferentes objetivos: 
1. Los procesos de verificación y validación intentan establecer la existencia de 
defectos en el sistema software. 
2. La depuración es un proceso que localiza y corrige estos defectos. 
17 
 
 
Localizar los defectos en un programa no es un proceso sencillo, ya que el defecto puede 
no estar cerca del punto en el que falló el programa. Para localizar un defecto de un 
programa, se puede tener que diseñar pruebas adicionales que reproduzcan el defecto 
original y que determinen con precisión su localización en el programa. Se puede tener 
que hacer manualmente una traza del programa, línea por línea. Las herramientas de 
depuración que recopilan información sobre la ejecución del programa también pueden 
ayudar a localizar la fuente de un problema. 
Figura 8 
El proceso de depuración 
 
 
Fuente: (Ian Sommerville, 2005) 
 
1.6 Desarrollo de aplicaciones web 
Actualmente es común implementar la interfaz de una aplicación utilizando páginas web 
en vez de las ventanas y controles convencionales específicos de un sistema operativo 
como puede ser Windows, en muchas situaciones es preferible crear aplicaciones web a 
las que se accede a través de Internet. 
Se denominan aplicaciones web a aquellas aplicaciones cuya interfaz se construye a 
partir de páginas web. Las páginas web no solo son ficheros de textoplano en un 
formato estándar denominado HTML [HyperText Markup Language]. Estos ficheros se 
almacenan en un servidor web al cual se accede utilizando el protocolo HTTP 
[HyperText Transfer Protocol], es suficiente tener instalado un navegador web en esa 
máquina, Desde la máquina cliente, donde se ejecuta el navegador, se accede a través de 
http://www.software-engin.com/
18 
 
la red al servidor web donde está alojada la aplicación y de esa forma, se puede utilizar 
la aplicación web sin que el usuario tenga que instalarla previamente en su máquina. 
Si las páginas desarrolladas son realizadas exclusivamente en HTML estándar, podemos 
conseguir que esta funcione prácticamente sobre cualquier plataforma, siempre y cuando 
se disponga de un navegador web. Una interfaz construida de esta manera nos permite 
olvidarnos de los detalles específicos de los diferentes entornos gráficos existentes. 
Evolución de las aplicaciones web 
La característica más destacable de las páginas web es la de enlazar un texto con otro 
para crear un hipertexto. El éxito de este es relativamente reciente, se remontan al 
sistema Memex ideado por Vannevar Bush ("As we may think", Atlantic Monthly, julio 
de 1945). El término hipertexto como tal lo introdujo Ted Nelson en 1965 haciendo 
referencia a una colección de documentos (nodos) con referencias cruzadas (enlaces), 
esto se podía explorar con la ayuda de un navegador que nos permitiese movernos 
fácilmente entre documentos. 
La versión que conocemos actualmente del hipertexto proviene del interés de los 
científicos en compartir sus documentos y hacer referencias a otros documentos. Este 
interés propició la creación de la "tela de araña mundial" (World-Wide Web, WWW) en 
el Centro Europeo para la Investigación Nuclear (CERN). Tim Berners-Lee, uno de los 
científicos que trabajaba allí, ideó el formato HTML para representar documentos con 
enlaces a otros documentos. Dicho formato fue posteriormente establecido como 
estándar por el W3C (World-Wide Web Consortium, http://www.w3c.org/), el organismo 
creado por el MIT que fija los estándares utilizados en la web desde 1994. 
(Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
HTML 
El servicio de Internet sin duda es más utilizado hoy en día es la World Wide Web 
(WWW), esta es una aplicación que nos permite enlazar documentos fácilmente. Para 
generar estos documentos web, más conocidos como páginas web, se utiliza un formato 
conocido como HTML [HyperText Markup Language]. 
HTML es un fichero de texto normal plano y corriente (fichero ASCII, por lo general). 
Este fichero incluye una serie de marcas o etiquetas, estas indican al navegador cómo 
debe ser visualizado el documento. Las etiquetas llevan un formato similar a un 
documento XML, ya que por lo general van en parejas. 
 
19 
 
Cualquier documento en formato HTML, delimitado por la pareja de etiquetas <HTML> 
y </HTML>, tiene dos partes principales: 
1. La cabecera (entre <HEAD> y </HEAD>) contiene información general sobre el 
documento que no se muestra en pantalla: título, autor, descripción, etc. 
2. El cuerpo (entre <BODY> y </BODY>) donde se definen todo el cuerpo del 
documento 
Figura 9 
Ejemplo de documento HTML 
 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
El cuerpo en sí es la parte esencial ya que contiene toda la lógica y estructura que se 
mostrara al usuario final. 
 
HTML estático 
 
Al inicio, las páginas web se limitaban a tener ficheros almacenados en formato HTML 
[HyperText Markup Language]. Estos documentos no son más que ficheros de texto a 
los que se le añaden una serie de etiquetas. Estas etiquetas delimitan los fragmentos del 
texto que han de ser mostrados al usuario, en un formato determinado y también sirven 
para crear enlaces entre documentos. 
Hoy en día, una aplicación se encarga de generar los documentos HTML con el formato 
establecido más adecuado para nuestro sitio web. Dichos documentos HTML son 
almacenados de forma permanente en ficheros y el usuario accede a estos directamente. 
20 
 
Pero en realidad, el usuario no accede directamente a los ficheros que contienen los 
documentos HTML, utilizan un traductor (navegador) para visualizar cómodamente 
dichas páginas web. Un navegador es una aplicación cliente que utiliza el protocolo 
HTTP [HyperText Transfer Protocol] para acceder a la máquina que aloja nuestros 
ficheros en formato HTML. 
 
Para que los usuarios puedan acceder a nuestras páginas web, sólo necesitaremos un 
servidor web que atienda las peticiones HTTP generadas por el navegador web del 
usuario. Por el lado del servidor HTTP que utilicemos, este le enviará al navegador los 
documentos que haya solicitado. 
Figura 10 
Configuración de una aplicación web 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Aplicaciones web 
La creación de aplicaciones web, requiere la existencia de un software corriendo en la 
maquina servidor, que genere automáticamente los ficheros HTML que se visualizan en 
el navegador del usuario. De la misma forma que cuando utilizábamos páginas estáticas 
en formato HTML, la comunicación entre el cliente y el servidor se sigue realizando a 
través del protocolo HTTP. La única diferencia consiste en que, ahora, el servidor HTTP 
delega en otros módulos la generación dinámica de las páginas HTML que se envían al 
cliente. Aunque, desde la perspectiva del cliente, la conexión se realiza de la misma 
forma. 
Desde el punto de vista del programador, puede optar por desarrollar software que se 
ejecute en el servidor o, incluso, en la propia máquina del usuario. 
21 
 
Las páginas web que son mostradas por el navegador al usuario se generan 
dinámicamente en el lado del servidor, si bien también se puede introducir cierto 
comportamiento dinámico en el navegador del cliente, se puede llegar a perder 
independencia entre el navegador y nuestra aplicación web. 
Figura 11 
Generación dinámica por cada solicitud 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Desarrollo de aplicaciones Web 
Actualmente existe una tendencia marcada que fomenta la utilización de estándares de 
Internet para el desarrollo de aplicaciones. Si nos centramos en el desarrollo del interfaz 
de usuario de estas aplicaciones, nos encontramos es un uso extensivo de los estándares 
abiertos utilizados en la web, estos que son promovidos por el W3C. 
Las aplicaciones web comparten una característica la que es de centralizar el software, 
esto para facilitar las tareas de mantenimiento y actualización de grandes sistemas. Evita 
tener copias del sistema en todos los puestos de trabajo ya que esto nos garantiza que 
todos los usuarios estén con la última versión y que esta funcione correctamente. 
 
Podemos diferenciar dos tipos de aplicaciones, aplicaciones del lado del cliente, 
aplicaciones del lado del servidor. 
Toda aplicación web se puede desarrollar de tal forma que el trabajo lo realice el 
servidor y que el navegador se limite a mostrar páginas HTML. Sin embargo, esta 
opción no resulta atractiva del lado del cliente, hace difícil, sino imposible, construir 
interfaces de usuario amigables restringiéndose a esta opción. 
Es por esta razón que se debe diferenciar características que deben ser ejecutadas del 
22 
 
lado del cliente y las que serán ejecutadas y procesadas por el lado del servidor. 
Se debe tener cuidado en qué tipo de operaciones se realizarán en el lado del cliente, ya 
que si involucra criterios de acceso a información sensible, esta puede ser robada o 
utilizada de forma inadecuada. 
 
HTML dinámico y JavaScript 
La Herramienta más utilizada al momento de dar nuestras páginas HTML cierto 
comportamiento dinámico. El HTML dinámico (DHTML) se basa en construir un 
modelo final basado en objetos que son componentes de la estructura HTML. 
La modificaciónde estos se realiza a través de macros o scripts que por lo general son 
incluidos en el mismo fichero, lo mejor es separar estos scripts del HTML para no 
mezclar los detalles del HTML de la interfaz con la lógica de dichos scripts. 
Figura 12 
DHTML DOM [Document Object Model] 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
Cada etiqueta HTML se convierte en un objeto que cuenta con sus respectivas 
propiedades y eventos. Los scripts han de proporcionarle al navegador el código 
correspondiente para los distintos eventos que puedan surgir en la interacción con cada 
uno de los objetos que lo componen. 
23 
 
Por cuestiones de portabilidad, los scripts son usualmente realizados utilizando 
JavaScript, esto por cuestiones de portabilidad, aunque existe un estándar oficial de 
JavaScript ratificado por ECMA (por lo que se le suele llamar ECMAScript), cada 
navegador implementa versiones modificadas diferentes de JavaScript. 
 
ASP: Active Server Pages 
 
ASP es la tecnología de Microsoft que permite desarrollar aplicaciones web que ejecuten 
en el servidor HTTP de Microsoft. El desarrollo de aplicaciones utilizando páginas ASP 
consiste, básicamente, fragmentos de código dentro de los documentos HTML que 
sirven para crear las interfaces de usuario de las aplicaciones web. Los fragmentos de 
HTML proporcionan la parte estática de lo que ve el usuario mientras que los 
fragmentos de código generar la parte dinámica. Esto suele conducir a mezclar los 
detalles de la interfaz con la lógica de la aplicación, algo que, repetimos, no suele ser 
demasiado recomendable. 
 
Una página ASP no es más que un fichero HTML con extensión .asp (.aspx en el caso de 
ASP.NET) al que le añadimos algo de código. Este código se puede implementar 
utilizando distintos lenguajes interpretados. Por lo general, se emplea una variante de 
Visual Basic conocida como VBScript [Visual Basic Script]. Cuando alguien accede a la 
página, el Internet Information Server interpreta el código que incluye la página y 
combina el resultado de su ejecución con la parte estática de la página ASP (la parte 
escrita en HTML convencional). Una vez interpretada la página ASP, el resultado final 
es lo que se envía al navegador web instalado en la máquina del usuario que accede a la 
aplicación. (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006). 
 
 
 
 
 
 
 
24 
 
Figura 13 
Funcionamiento de las paginas ASP 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Podemos nombrar cinco componentes esenciales en la interacción cliente/servidor al 
momento en que un cliente solicita servicios a un servidor. 
Figura 14 
Componentes cuando cliente solicita servicios a servidor 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Solo basta con escribir una página ASP y guardarla en algún directorio que se pueda 
acceder a través del Internet Information Server, sin tener que compilarlas previamente. 
 
 
25 
 
Un ejemplo básico de código ASP es el siguiente: 
Figura 15 
Ejemplo de código básico ASP 
 
 
Fuente: Elaboración Propia 
 
El código que se encuentra entre los tags <% y %> contiene la parte de la página ASP, 
este es interpretado en el servidor antes de enviarle una respuesta al navegador del 
cliente. 
 
El código incluido en páginas ASP más complejas resulta más extenso y poco legible, 
esto hace que sea mucho más difícil de mantener ya que se encuentra mezclado con el 
código HTML de la interfaz de usuario. En ASP, el fragmento de código debe ser 
colocado en el sitio donde queremos que su salida aparezca, lo que hace imposible 
separar los detalles de la interfaz con la lógica de negocio. 
Esto dificulta la reutilización de código y su mantenimiento, también complica el 
soporte de nuestra aplicación para los distintos navegadores del mercado. 
 
ASP.NET: Aplicaciones web en la plataforma .NET 
ASP.NET es el nombre con el que se conoce la parte de la plataforma .NET que permite 
el desarrollo y ejecución tanto de aplicaciones web como de servicios web. Igual que 
sucedía en ASP, ASP.NET se ejecuta en el servidor. En ASP.NET, no obstante, las 
aplicaciones web se suelen desarrollar utilizando formularios web, que están diseñados 
para hacer la creación de aplicaciones web tan sencilla como la programación en Visual 
Basic (.NET, claro está). (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 
2006). 
 
26 
 
Figura 16 
Ejemplo de pagina ASP.NET 
 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Podemos apreciar ciertos puntos en el código anterior, las etiquetas HTML no se 
encuentran mezcladas con el código. 
 
ASP.NET es parte de la tecnología .NET, los formularios Windows y los formularios 
ASP.NET son las herramientas principales para construir interfaces de usuario en .NET. 
Pero esto no quiere decir que podamos mezclarlos. 
 
 
 
 
 
 
27 
 
Figura 17 
Plataforma .NET 
 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
La programación en ASP.NET se basa en el uso de eventos y controles, implementan su 
funcionalidad en fragmentos de código que son ejecutados como respuesta a eventos, 
estos eventos a su vez se encuentran asociados a controles de la interfaz. Esto 
proporciona un mayor nivel de abstracción, requiere menos código y permite crear 
aplicaciones más modulares, legibles y mantenibles. 
 
 
 
 
 
28 
 
Figura 18 
Eventos en ASP.NET 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
El código se ejecuta en el lado del servidor en función a los eventos que definamos para 
los controles y páginas que conforman la interfaz de nuestra aplicación web. 
ASP.NET es el encargado de convertir las etiquetas y tags en código HTML que resulte 
más adecuado para mostrar los controles dependiendo del navegador que sea utilizado 
por el cliente. De esta forma, ASP.NET garantiza la compatibilidad de los controles de 
nuestra aplicación web con distintos navegadores, sin que el programador tenga que 
preocuparse demasiado de las diferencias existentes entre los diferentes navegadores 
web que puede emplear el usuario final para acceder a nuestra aplicación. (Fernando 
Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006). 
 
 
 
 
 
 
29 
 
Figura 19 
ASP.NET se encarga de mostrar formularios web de la plataforma que resulte mas 
adecuada para el navegador que utilice el usuario final de la aplicación 
 
Fuente: (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006) 
 
Creación de páginas ASP.NET 
La biblioteca provista por la tecnología .NET incluye una amplia gama de controles que 
podremos utilizar en la construcción de interfaces web para nuestras aplicaciones, 
controles tales como botones, cajas de texto, listas o tablas. 
Una aplicación web está formada por varios formularios web. Cada uno de estos serán 
implementados como paginas ASP.NET, estas se construye creando clases derivadas de 
System.Web.UI.Page. Dicha clase proporciona la base sobre la que construiremos 
nuestras páginas ASP.NET, que implementaremos como subclases de 
System.Web.UI.Page en las que incluiremos la funcionalidad requerida por nuestras 
aplicaciones. 
Para mantener la independencia entre la interfaz de usuario y la lógica asociada a la 
aplicación, la página ASP.NET será divida en dos ficheros. El primero con extensión 
.aspx, donde especifica el aspecto de la interfaz, utilizando etiquetas HTML. En segundo 
un .cs, en el que utilizaremos código C#, donde implementaremos la lógica de la 
aplicación. 
 
30 
 
 
Organización de la interfaz de usuario 
La principal tentación de un programador de aplicaciones web es la de escribir todo el 
código en la propia página ASP.NET. El problema que lleva esta acción es más notorio 
cuando la aplicación empiezaa crecer y/o se agrega nueva funcionalidad, empiezan a 
aparecer ciertas redundancias, código duplicado. El mantenimiento de la aplicación y la 
realización de nuevas mejoras se convierten en un dolor de cabeza. 
 
Cuando estas situaciones se presentan, la mejor opción es la de encapsular la lógica en 
componentes independientes. Esto elimina la redundancia e incrementa la complejidad 
de la aplicación. Claro que introduciendo complejidad a la aplicación, esta será más 
difícil de entender por otros programadores. 
Para este caso existen soluciones que consiguen dotar a nuestras aplicaciones de cierta 
flexibilidad sin incrementar excesivamente la complejidad. Tal es el caso del modelo 
MVC [Model-View-Controller], en el que se distinguen tres componentes bien 
diferenciados: 
- Modelo. Encapsula los datos y el comportamiento de la aplicación. Este trabaja 
independientemente de cómo los datos van a ser mostrados. 
 
- Vista. Estas consultan el estado del modelo para mostrárselo al usuario. 
 
- Controlador. Encargado de permitir al usuario de realizar acciones, estas pueden 
involucrar solamente a la vista o incluir operaciones sobre el modelo. 
 
 
 
 
 
 
 
 
31 
 
 
Figura 20 
MVC 
 
 
Fuente: http://www.judavi.com/media/2011/10/image10.png 
 
En MVC, las vistas y los controladores dependen del modelo, pero el modelo no 
depende de la vista ni del controlador. Esto permite que el modelo sea totalmente 
independiente de la presentación visual, de tal forma que, el modelo pueda ser 
reutilizado en diferentes vistas. El modelo MVC ayuda a modularizar correctamente una 
aplicación en la cual el usuario manipula datos a través de una interfaz. Si el usuario 
puede trabajar con los mismos datos de distintas formas, lo habitual es encapsular el 
código compartido en un módulo aparte con el fin de evitar la existencia de código 
duplicado. (Fernando Berzal, Francisco J. Cortijo, Juan Carlos Cubero, 2006). 
 
1.7 Framework 
Nos referimos a framework a una estructura software compuesta de componentes 
personalizables e intercambiables para el desarrollo de una aplicación. Un framework, es 
la estructura de un software que debe ser adaptado a la medida por el programador de la 
aplicación. También incorpora las partes esenciales y comunes de una familia de 
aplicaciones de un dominio determinado. 
 
32 
 
La construcción de frameworks ha seguido un diseño orientado a objetos, aunque no 
necesariamente. Esta consiste de muchas clases que a diferencia de una librería de 
clases, colaboran según un orden o lógica prestablecida que por un lado la limita en 
cuanto al tipo de aplicación a desarrollar, al mismo tiempo que hace posible verla como 
una solución genérica a un conjunto de aplicaciones. 
 
Las ventajas de un framework, son que permiten desarrollar aplicaciones de calidad a un 
menor costo y menor tiempo, ya que se pueden reutilizar fácilmente los algoritmos, 
análisis de requerimientos, esquemas de base de datos o promover buenas prácticas de 
desarrollo. 
1.7.1 Tipos de framework 
Se pueden clasificar a los frameworks según la forma en que se construye, la forma en 
que se puede desarrollar aplicaciones a partir de él, podemos distinguir tres tipos de 
frameworks: 
Frameworks de Caja Blanca 
La instanciación del framework es posible a través de la creación de nuevas clases. Estas 
clases y el código correspondiente se pueden introducir por herencia o composición. Se 
agregan nuevas funcionalidades creando una subclase de una clase que ya existe en el 
framework. Para usar frameworks de caja blanca el desarrollador de aplicaciones debe 
conocer muy bien cómo funciona el framework. 
 
Frameworks de Caja Negra 
 
Este tipo producen instancias usando scripts de configuración del framework, con los 
que se configura la aplicación final. Tienen la ventaja que no se requiere que el 
desarrollador de aplicaciones conozca los detalles internos del framework, por lo cual 
son mucho más fáciles de utilizar. 
 
 
Frameworks de Caja Gris 
La mayoría de los frameworks son de Caja Gris, ya que son aquellos que contienen 
elementos de Caja Blanca y Caja Negra, algunas partes se implementan vía herencia o 
composición, y otras a través de configuración de parámetros. 
 
33 
 
1.7.2 Propiedades de un framework 
 
Los frameworks son hechos para ser utilizados en aplicaciones específicas, por lo cual lo 
más importante que debe cumplirse es la reusabilidad, en otras palabras, las ideas, el 
diseño y el código son desarrollados una vez, y luego usados para resolver muchos 
problemas, consiguiendo así productividad, confiabilidad y calidad. Las propiedades de 
un framework son: 
Fácil de Usar 
Se refiere a la capacidad que tiene el desarrollador de aplicaciones para usar el 
framework, el cual debe ser comprensible y debe facilitar el desarrollo de aplicaciones. 
Los frameworks son para ser reusados, pero aún uno muy bien diseñado, puede no ser 
usado si es difícil de entender. Para ayudar a la comprensión, el framework debe ser 
documentado con ejemplos de aplicaciones y ejemplos que el desarrollador pueda usar. 
Extensibilidad 
Si nuevos componentes o propiedades pueden ser agregados a un framework fácilmente, 
se dice que este es extensible. Un framework aunque sea fácil de usar, debe ser 
extensible. Puede contar con una lista definida y acotada de características, y puede ser 
muy fácil de comprender y usar, pero su reusabilidad es mayor si es fácilmente 
extensible para incluir nuevas operaciones. 
Flexibilidad 
Los frameworks que pueden ser usados en múltiples dominios, como por ejemplo un 
framework de interfaz de usuario, son especialmente flexibles. Si un framework es 
aplicable a un dominio amplio, o a varios dominios, entonces este será re-usado por más 
desarrolladores. Sin embargo, la flexibilidad debe ser balanceada con la facilidad de uso. 
Completitud 
La completitud se refiere a que el framework cubra todos los posibles problemas del 
dominio especificado. Aunque los frameworks generalmente sean incompletos, ya que 
no cubren todas las posibles variaciones de un dominio, cierta completitud es una 
propiedad deseable. 
 
 
34 
 
Consistencia 
Debe haber convenciones respecto a los conceptos y definiciones que se usan a lo largo 
del framework. Se debe usar nombres consistentemente en todo el framework, para 
facilitar la comprensión de los desarrolladores y ayudarlos a reducir errores en su uso. 
 
1.7.3 Arquitectura de un framework 
Se puede identificar partes en una aplicación desarrollada a partir de un framework. 
Figura 21 
Arquitectura de un framework 
 
Fuente: 
http://htmlimg4.scribdassets.com/8fk416n9q81eqmnl/images/21c58180dc0d.jpg 
 
- Core del framework, consiste de clases abstractas, que definen la estructura 
genérica, el diagrama de flujo y el comportamiento del framework. Este forma la 
base de la aplicación desarrollada a partir del framework. 
- Biblioteca del framework, consiste de componentes concretas que puedan ser 
usadas con pequeñas modificaciones por las aplicaciones desarrolladas del 
framework. 
- Extensiones de la aplicación, son extensiones específicas de la aplicación hechas 
al framework. 
- Aplicación, consiste del core del framework, de las partes usadas de la biblioteca 
del framework, y algunas extensiones específicas necesarias para la aplicación. 
- Clases no usadas de la librería, no todas las clases de un framework serán 
necesarias en una aplicación desarrollada a partir de un framework. 
35 
 
1.7.4 Desarrollo de un framework 
 
En general un desarrollo orientado a objeto, y en particular el desarrollo de un 
framework requiere un enfoque iterativo o cíclico, en el cual el framework es definido, 
testeado y refinado un número de veces. 
 
Las metodologías usuales de diseño orientado a objeto no son suficientes para los 
frameworks, ya que difieren al menos en dos aspectos. Primero el nivel deabstracción es 
distinto, ya que los frameworks proveen una solución para un dominio entero de 
problemas, mientras que las aplicaciones resuelven un problema concreto. Segundo, los 
frameworks son por naturaleza incompletos, a diferencia de una aplicación, lo que 
genera complicaciones, por ejemplo, en la etapa del testeo, ya que un framework no se 
puede probar directamente, sino que a través de aplicaciones que se derivan de él. 
 
1.7.5 Diseño e implementación 
 
El diseño e implementación del framework están relacionados. Las abstracciones pueden 
ser difíciles de diseñar apropiadamente la primera vez y partes del framework deben ser 
re-diseñadas y re-implementadas. Partes del framework pueden sufrir rediseño mientras 
otras partes están siendo implementadas. Existen técnicas específicas que ayudan a la 
etapa de diseño del desarrollo de los frameworks, teniendo en común algunos consejos: 
- Reducir el número de clases y métodos que el usuario debe sobrescribir. 
- Simplificar la interacción entre el framework y las extensiones que hace la 
aplicación. 
- Aislar el código dependiente de la plataforma. 
- Consolidar funcionalidades similares en una sola abstracción. 
- Romper grandes abstracciones en pequeñas con gran flexibilidad. 
- Usar composición más que herencia. 
 
 
36 
 
 
1.7.6 Instanciación y testeo 
La instanciación se refiere a desarrollar aplicaciones a partir del framework, por medio 
de la implementación de los métodos. Hay dos formas de testear un framework. Primero, 
testear aisladamente, sin alguna aplicación que lo instancie. Testear por sí mismo el 
framework ayuda a identificar defectos, ya que se pueden separar los defectos, de los 
errores que pueden ser causados por una aplicación. Es importante detectar los defectos 
en un framework, ya que estos serán traspasados a todas las aplicaciones desarrolladas 
utilizando este. Segundo, el verdadero test de un framework ocurre sólo cuando éste es 
usado para desarrollar o probar aplicaciones. Instanciar el framework ayuda a exponer 
áreas donde el framework está incompleto y ayuda a mostrar áreas donde el framework 
necesita ser más flexible y fácil de usar. Las aplicaciones producidas por este tipo de 
testeo pueden ser parte de la documentación del framework, ya que indican cómo este se 
usa. 
 
1.7.7 Documentación de un framework 
La documentación de un framework puede ayudar en todos los aspectos de su uso. Ya 
que los creadores del framework no estarán siempre disponibles, la documentación pasa 
a ser el elemento clave, a través del cual los usuarios (desarrolladores de aplicaciones 
específicas) pueden aprender sobre él. Los comentarios del código y la 
documentación son parte necesaria de cualquier proyecto de programación, pero estos 
son especialmente necesarios cuando se está desarrollando un framework. Si los 
desarrolladores de aplicaciones no comprenden el framework, simplemente no lo usarán. 
 
Por eso se debe proveer bastante información para que los desarrolladores comprendan 
cómo usarlo, y así puedan conseguir la solución que ellos buscan. Hay que dejar claro 
qué clases pueden ser usadas directamente, qué clases pueden ser instanciadas y qué 
clases deben ser sobrescritas. Los desarrolladores están interesados en resolver su 
problema particular, por lo que no son tan importantes los detalles de la implementación 
del framework. 
 
 
37 
 
1.8 TPL 
Muchos equipos de trabajo tienen dos o cuatro núcleos, que permiten ejecutar varios 
subprocesos simultáneamente. Se espera que los equipos en un futuro tengan 
significativamente más núcleos. Para aprovecharse del hardware de hoy y de un futuro, 
puede paralelizar el código para distribuir el trabajo entre varios procesadores. En el 
pasado, el paralelismo requería manipulación de bajo nivel de los subprocesos y 
bloqueos. Visual Studio 2010 y .NET Framework 4 mejoran la compatibilidad para la 
programación paralela proporcionando un nuevo runtime, nuevos tipos de biblioteca de 
clases y escalable, de forma natural sin tener que trabajar directamente con subprocesos 
ni el bloque de subprocesos. 
Figura 22 
Task Parallel Library 
 
 
Fuente: 
http://htmlimg1.scribdassets.com/97h89st4jk17paid/images/12340c1b159.png 
 
La biblioteca TPL (Task Parallel Library, biblioteca de procesamiento paralelo basado 
en tareas) es un conjunto de API y tipos públicos de los espacios de nombres 
38 
 
System.Threading.Task y System.Threading de .NET Framework 4. La biblioteca TPL se 
la creo con el propósito de aumentar la productividad de los desarrolladores al 
simplificar el proceso de agregar paralelismo y simultaneidad a las aplicaciones. 
Además, la biblioteca TPL se encarga de la división del trabajo, la programación de los 
subprocesos en ThreadPool, la compatibilidad con la cancelación, la administración de 
los estados y otros detalles de bajo nivel. Al utilizar TPL, el usuario puede optimizar el 
rendimiento del código mientras se centra en el trabajo del programa que está diseñado. 
Paralelismo de datos 
El paralelismo de datos hace referencia a los escenarios en los que la misma operación 
realiza simultáneamente en elementos de una colección o matriz de origen. Varias 
sobrecargas de los métodos Foreach y For admiten el paralelismo de los datos con 
sintaxis imperativa en la clase System.Threading.Task.Parallel. En las operaciones 
paralelas de datos, se crean particiones de la colección de origen para que varios 
subprocesos puedan funcionar simultáneamente en segmentos diferentes. 
TPL admite el paralelismo de datos a través de la clase System.Threading.Task.Parallel. 
Esta clase proporciona las implementaciones paralelas basadas en método de los bucles 
For y Foreach. Se escribe la lógica del bucle para un bucle Parallel.For y 
Parallel.Foreach, de forma muy similar a como se escribía en un bucle secuencial. Por 
ejemplo: 
Figura 23 
Ejemplo paralelismo de datos 
 
Fuente: Elaboración propia. 
Cuando un bucle paralelo se ejecuta, la TPL crea particiones del origen de datos para 
que el bucle pueda funcionar simultáneamente en varias partes. En segundo plano, el 
programador de tareas crea particiones de la tarea según los recursos del sistema y la 
carga de trabajo. 
39 
 
Paralelismo de tareas 
Esta hace referencia a la ejecución simultanea de una o varias tareas independientes. 
Una tarea es una operación asíncrona, esta se asemeja a la creación de un nuevo 
subproceso o elemento de trabajo ThreadPool, pero con un nivel de mayor abstracción. 
Estas tareas dan dos ventajas fundamentales: 
- El uso eficaz y mucho más escalable de los recursos de los sistemas. En segundo 
plano, las tareas se ponen en la cola del elemento ThreadPool, que se a mejorado 
con algoritmos que determinan y ajustan el número de subprocesos con el que se 
maximiza el rendimiento. Esto hace que las tareas resulten relativamente ligeras y 
que, por tanto, pueda crearse un gran número de ellas para habilitar un 
paralelismo por menor. 
- Un mayor control mediante programación donde se puede conseguir con un 
subproceso o un elemento de trabajo. 
Crear y ejecutar tareas implícitamente, el método Parallel.Invoke proporciona una mejor 
manera de ejecutar cualquier número de acciones arbitrarias simultáneamente. Pase a un 
delegado Action por cada elemento de trabajo. Por ejemplo: 
Figura 24 
Ejemplo paralelismo de tareas 
 
 
Fuente: Elaboración propia. 
 
 
1.9 Pruebas de unidad 
Las pruebas unitarias tienen como objetivo verificar la funcionalidad y estructura de 
cada componente individualmente una vez que ha sido codificado. Las pruebas de 
unidad son un proceso para probar los subprogramas, los procedimientos individuales o 
las clases en un programa. 
40 
 
Es decir, es mejor probar primero los bloques desarrollados más pequeños del programa, 
que inicialmente probar el software en su totalidad. Las motivaciones para hacer esto

Continuar navegando