DIIS U3 Contenido
DIIS U3 Contenido
DIIS U3 Contenido
Programa de la asignatura
Introducción a la ingeniería de software
Unidad 3.
Diseño, codificación, pruebas y mantenimiento
Clave:
Ingeniería: TSU:
15142318 16142318
Ciudad de México, enero del 2023
1
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 1
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Índice
Unidad 3. Diseño, codificación, pruebas y mantenimiento .................................................... 3
Presentación de la unidad ...................................................................................................... 3
Logros………………………………………………………………………………………………..4
Competencia específica ......................................................................................................... 4
3.1. Diseño.............................................................................................................................. 4
3.1.1. Diseño del sistema ..................................................................................................... 10
3.1.2. Tipos de Arquitecturas ............................................................................................... 12
3.1.3. La interacción Hombre-Máquina ................................................................................ 18
3.1.4. Diseño de la interacción ............................................................................................. 21
3.2. Codificación ................................................................................................................... 23
3.2.1. Traducción de diseño a código .................................................................................. 23
3.2.2. Codificación de la interfaz .......................................................................................... 25
3.2.3. Herramientas de desarrollo: gestión de la configuración .......................................... 28
3.3. Pruebas y mantenimiento ............................................................................................. 31
3.3.1. Tipos de pruebas y herramientas .............................................................................. 32
3.3.2. Mantenimiento ............................................................................................................ 36
Cierre de la unidad ............................................................................................................... 37
Para saber más .................................................................................................................... 37
Fuentes de consulta ............................................................................................................. 38
2
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 2
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Presentación de la unidad
Logros
3
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 3
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Competencia específica
3.1. Diseño
Es importante puntualizar que este tema abarca el diseño de sistemas –considerando que
un sistema es un conjunto de partes o elementos organizados y relacionados que
interactúan entre sí con objetivo específico–. Éstos reciben principalmente datos de entrada
y proveen información de salida. Los sistemas de software son abstractos y cada uno puede
contener subsistemas que pueden ser parte de uno más grande. A continuación, se
explicará cómo se diseña un sistema de software con diferentes vistas, iniciando con el
diseño del contexto.
4
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 4
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Diseño de contexto
Además de diseñar el sistema se identifican las fronteras de este y de otros sistemas con
los que esté vinculado. Para realizar esto, los modelos de contexto y de interacción cuentan
con diferentes vistas para el diseño del sistema en su entorno. Por lo tanto, se puede definir
un modelo de contexto del sistema como: un modelo estructural que incluye a los otros
sistemas con los que se relaciona y, un modelo de interacción es un modelo dinámico que
muestra el comportamiento del sistema con su entorno.
En el diagrama anterior podemos ver al actor Usuario interactuando con varios casos de
uso y con el actor Sistema. El Usuario puede registrar los datos del artículo y solicitar
información. Por otro lado, el actor Sistema muestra la información solicitada. Vemos
5
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 5
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
también a los casos de uso interactuando entre ellos, tal situación del caso de uso registra
datos del artículo y envía datos del artículo.
Diseño arquitectónico
Presentación
Aplicación
Lógica del negocio
Datos
Datos Servicios
6
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 6
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Capa de datos: es la que contiene todos los datos los cuales son almacenados y
administrados en uno o más gestores de bases de datos. Mantiene comunicación con la
capa de negocio atendiendo las peticiones almacenamiento o recuperación de datos que
ésta le demande.
A continuación, se presenta otra vista del diseño con un enfoque orientado a objetos.
7
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 7
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Los sistemas orientados a objetos se deben diseñar considerando las 4 capas siguientes:
La capa del subsistema: en esta capa se describen los subsistemas en que fue dividido
el software y la solución técnica que los soporta.
La capa de mensajes: contiene los detalles que le permiten a cada objeto comunicarse
con sus colaboradores. Esta capa establece las interfaces externas e internas para el
sistema.
Para iniciar todo proyecto es necesario conocer los diferentes métodos para el diseño de
sistemas, tales como los métodos: Booch, Coad y Yourdon, los cuales son los métodos de
mayor importancia en el ámbito del análisis y el diseño orientado a objetos. El método fue
realizado por Grady Booch –quien además es reconocido por participar en la creación del
lenguaje unificado de modelado (UML) –. El enfoque de este método es la representación
8
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 8
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
de la vista lógica del software. Existen otros métodos con diferentes enfoques, tal es el caso
del método de Coad y Yourdon cuyo énfasis es en la aplicación e infraestructura. A
continuación, veremos en qué consisten:
• Componente del dominio del problema, que consiste en agrupar las clases y su
jerarquía, simplificar la herencia, refinar diseño para mejorar rendimiento, desarrollo
de la interfaz, generación de los objetos necesarios y revisión del diseño.
• Componente de interacción humana, abarca la definición de actores humanos,
desarrollo de escenarios, diseño de la jerarquía de órdenes, refinar la secuencia de
interacciones, diseño de clases y su respectiva jerarquía.
• Componente para gestión de tareas, para identificar tipos de tareas, las prioridades,
identificar la tarea coordinadora, diseño de objetos para cada tarea.
• Componentes para la gestión de datos, nos permite diseñar la estructura de datos,
los servicios, seleccionar herramientas para la gestión de datos y diseño de clases
y jerarquías.
9
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 9
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Éstos y otros métodos nos ayudan para el análisis y diseño orientado a objetos con el
enfoque que cada uno propone. A continuación, veremos un modelo genérico del diseño
orientado a objetos.
El diseño es un proceso iterativo (que se repite) que aplica diversas técnicas y principios
para definir un dispositivo, proceso o sistema detalladamente para permitir su realización
física. A continuación, se presentan las principales actividades involucradas en este
proceso de acuerdo con Pressman (2010, pp. 413-412).
10
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 10
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
- Elegir una de las dos estrategias para la gestión de datos: (1) la gestión de datos para
la aplicación, y (2) la creación de infraestructura para el almacenamiento y recuperación
de objetos.
- Identificar recursos y mecanismos para acceder a ellos.
Los recursos globales del sistema pueden ser unidades externas por ejemplo torres de
discos, procesadores, líneas de comunicación, etc.
- Diseño de control apropiado para el sistema.
Definir el componente interfaz hombre-máquina (IHM), se pueden aplicar los casos de
uso como datos de entrada. Ya que se definió el actor y su escenario de uso, se
11
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 11
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Ya que has conocido el proceso del diseño del sistema, es importante conocer los aspectos
importantes de la arquitectura de un software, subtema que verás a continuación.
12
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 12
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Estos sistemas son más complejos que los sistemas que se ejecutan en un solo procesador.
Algunos de los problemas de diseño más importantes que se deben considerar son:
• Transparencia: el reto que se tiene en este atributo es lograr que cada nodo trabaje
como si fuese independiente, unificando todos los recursos y sistemas para la
aplicación y por lo tanto para el usuario.
• Apertura: en los sistemas distribuidos se debe dar la apertura a los nuevos servicios
pero sin perjudicar a los ya existentes.
• Escalabilidad: poder incrementar las capacidades de trabajo sin perder las
capacidades y usos anteriores.
• Seguridad: el reto de la seguridad es mantener la confidencialidad por medio de la
protección contra individuos no autorizados. Integridad, con la protección contra la
alteración o corrupción y la disponibilidad protegerse ante la posibilidad de
interferencia.
• Calidad en el servicio: identificar la configuración que mejor se adapte y sea
aceptable por los usuarios.
• Gestión de fallas: Tiene el reto de que el sistema continúe funcionando ante fallos
de algún componente de manera independiente, para lo cual debe existir un plan de
mitigación ante cualquier riesgo latente.
Modelos de interacción
El modelo de interacción tiene que ver con el rendimiento y la dificultad de poner límites
temporales en un sistema distribuido, hay varios tipos de interacción.
13
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 13
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
• Paso de mensajes.
• Radiado (multicast).
• Llamada a procedimiento remoto (RPC).
• Cita multiflujo (multithreaded).
• Publicación/subscripción (publish/subscribe)
Y pueden ser representados con los diagramas de interacción como el que se muestra a
continuación:
1:IntroduceNip()
2: Ingresar al sistema()
3: Envía Saldo()
4: Cobro al cliente ()
Diagrama de interacción
Middleware
Los sistemas de información se construyen con
diferentes lenguajes de programación, la base de
datos se genera en algún software gestor
específico, además pueden ser ejecutados en
distintos procesadores, por lo tanto un sistema
distribuido necesita software para gestionar todas
14
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 14
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Los sistemas cliente-servidor dependen de que esté bien estructurada la información que
solicitan y que aparte se ejecuten los cálculos o procesos para generar esa información.
Para esto se deben diseñar de manera lógica las diferentes capas lógicas:
15
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 15
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
2. Arquitecturas cliente – servidor de dos niveles: es la forma más simple de este tipo
de arquitecturas. El sistema se implementa como un solo servidor lógico más un
número indefinido de clientes que usan dicho servidor.
16
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 16
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
El modelo cliente – servidor de tres niveles puede extenderse a una variante multinivel,
donde se agregan servidores adicionales al sistema. Haciendo uso del servidor Web para
los datos y servidores separados para la aplicación y servicios de base de datos. O bien
cuando se requiere tener acceso a datos de diferentes bases de datos, en este caso
conviene agregar un servidor de integración al sistema, para recolectar los datos
distribuidos y presentarlos al servidor de aplicación como si fuera una sola base de datos.
Observa la siguiente tabla que se contiene el tipo de aplicaciones que soporta cada tipo
de arquitectura.
Arquitectura Aplicación
Cliente – servidor de Aplicaciones de cómputo intensivo, como compiladores
dos niveles con con poca o ninguna gestión de datos y aplicaciones web
clientes ligeros con gestión de datos.
Cliente – servidor de Aplicaciones con software comercial por ejemplo
dos niveles con Microsoft Excel en el cliente, aplicaciones que requieran
clientes pesados procesamiento de datos intensivo y aplicaciones
móviles con aplicaciones por Internet o red local.
Cliente – servidor Aplicaciones con miles de clientes, con datos y
multinivel aplicaciones volátiles. Se integran los datos
provenientes de diferentes fuentes.
Tabla de tipos de patrones de arquitecturas
Existen otros tipos de arquitecturas que no se basan en capas, por ejemplo las arquitecturas
de componentes distribuidos y arquitecturas entre pares (peer – to – peer)
(Sommerville, 2011, pp. 485-495).
17
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 17
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
18
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 18
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
19
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 19
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
• Manipulación directa: sistemas con acciones rápidas que provocan efectos visibles y
claramente identificables en el objeto seleccionado. Por ejemplo ventanas, iconos,
cursores, menús, etc.
• Interacción asistida: con asistentes o programas tipo agente que ayudan, leen la
entrada que el usuario presenta en la interface y pueden hacer cambios en los objetos
que el usuario ve en la pantalla. Los agentes son autónomos porque pueden trabajar
en un segundo plano, si así se les configura. Tienen inteligencia por tener iniciativa y
capacidad de adaptación a múltiples situaciones. Son de uso personal, ya que aprenden
del usuario, sugieren sin imponer soluciones.
20
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 20
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
• Las aplicaciones deben anticiparse a las necesidades del usuario, no esperar a que el
usuario busque o recuerde información, la aplicación debe ofrecer todas las
herramientas necesarias para cada etapa de su trabajo.
• Se debe evitar llenar de restricciones al usuario, dejarle cierto nivel de autonomía para
que trabaje con confianza y logre el control del sistema. Pero es importante mantenerle
informado del estado del sistema y tenerlo siempre visible y actualizado.
• Considerar a las personas que padecen el defecto genético del daltonismo, por lo cual
no debe diseñar la transmisión de la información basada únicamente en el color.
• Diseñar una aplicación que funcione como lo espera el usuario, por ejemplo, sí un icono
muestra cierta imagen, se espera que la acción realice algo relacionado con la imagen.
La única manera de comprobar la consistencia es revisar las expectativas del usuario y
hacer pruebas de interfaz con ellos.
• Considerar el diseño de campos de texto que contengan valores por defecto o
sugeridos, éstos deben mostrarse seleccionados para que el usuario sólo tenga que
teclear, borrar o escribir. Los valores que aparezcan por defecto deben tener sentido
con el dominio del campo.
• Buscar la productividad del usuario y no de la máquina. El gasto más alto de un negocio
es el trabajo humano. Cada vez que el usuario tiene que esperar la respuesta del
sistema, es dinero perdido. Escribe mensajes de ayuda concisos y que ayuden a
resolver el problema: un buen texto ayuda mucho en comprensión y eficacia. Los menús
y etiquetas deben comenzar con la palabra más importante.
21
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 21
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
• No se debe encerrar a usuario en una sola ruta, dejar varias posibilidades para que ellos
elijan como realizar su tarea. Permitir y facilitar que siempre pueda regresar al inicio.
Diseñar las acciones reversibles para que el usuario pueda experimentar, en otras
palabras, permitir siempre la opción “deshacer”.
• Reducir el tiempo de espera con acciones como: efectos visuales al dar clic al botón,
mostrar reloj de arena animado para acciones entre medio y dos segundos, mostrar
mensaje o barra de estado en procesos que tarden más de dos segundos, indicar con
alarmas o pitidos cuando termine el proceso y el usuario pueda volver a tomar el control
del sistema.
• Realizar diseños intuitivos cuyo tiempo de aprendizaje por parte del usuario sea mínimo
aproximándose al ideal de que los usuarios se sentaran frente al software y supieran
como utilizarlo. La usabilidad y facilidad de uso no son excluyentes, debes decidir cuál
es la más importante y luego implementa ambas.
• El uso de metáforas que evoquen lo familiar, pero con un nuevo punto de vista.
• Utilizar texto con alto contraste. Por ejemplo, negro sobre blanco o amarillo pálido. Evitar
fondos grises cuando haya texto. El tamaño de letra que sea legible en los monitores
más comunes tomando en cuenta a los usuarios mayores, cuya visión suele ser peor
que la de los jóvenes.
• Administrar y mostrar los estados del sistema, por ejemplo, cuando el usuario es la
primera vez que entra, ubicación de la navegación del usuario, a donde quiere ir,
histórico de navegación en el sistema, cuando abandonó la sesión el usuario.
Después de haber conocido los principios relevantes para el diseño de interfaces conocerás
la fase de codificación, la cual lleva el peso de la construcción del software, pues es donde
se deben aplicar todos los modelos y principios generados en el análisis y diseño que
hemos visto hasta este punto. Cualquier inconsistencia en las etapas previas a la
codificación, se verán reflejadas en ésta y cualquier cambio o nuevo requerimiento
identificado en esta fase involucrará modificar o añadir a lo ya previamente generado
(Requerimientos definidos, diagramas de análisis, diseño, etcétera).
22
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 22
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
3.2. Codificación
Ahora veremos la fase de codificación como parte del desarrollo de software. Esta etapa
implica desarrollar los programas que integrarán el software para resolver los
requerimientos que el cliente nos solicitó. La manera de realizarlo normalmente es a través
de módulos que al término serán integrados en una sola unidad, el principal entregable del
proceso de desarrollo del software.
En esta etapa las acciones del algoritmo tienen que convertirse en instrucciones. Para
codificar un algoritmo tiene que conocerse la sintaxis del lenguaje al que se va a traducir la
lógica del programa que indique las acciones y el orden en que se debe ejecutar. Por lo
tanto, es conveniente que todo programador aprenda a diseñar algoritmos antes de pasar
a la fase de codificación.
23
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 23
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
El lenguaje máquina es el que está basado en ceros y unos (binario) es el lenguaje natural
de la computadora. El lenguaje de bajo nivel está basado en palabras reservada llamadas
mnemotécnicos que ayudan a generar operaciones que serán ejecutadas por el
procesador. A este tipo de lenguajes se les llama ensambladores y necesita un traductor
para convertirlo al lenguaje máquina. Y por último, los lenguajes de alto nivel son los que
se basan en un conjunto de palabras, sintaxis y reglas muy parecidas al lenguaje natural
del ser humano, más fácil de programar, sin embargo también necesitará ser traducido al
lenguaje máquina. De los lenguajes de alto nivel se desprenden una gran variedad de
lenguajes de programación que nos llevaría otro curso comentar sus características, por lo
tanto sólo se mencionan algunos: C, Java, C++, Lisp, Python, Ruby, html, javascript, prolog,
etc. Para escoger seleccionar el lenguaje de programación es necesario considerar los
siguientes principios (Álvarez y Arias, 2002. p. 1):
• Respecto a los aspectos generales debemos buscar un lenguaje que: sea de alto
nivel, permita el uso de nombres significativos y creación de módulos y funciones,
utilice estructuras de control, se puedan declarar variables y tenga métodos de
manejo de error.
• Respecto a la funcionalidad, evaluar: el tamaño del proyecto, conocimiento del
lenguaje por parte de los programadores, disponibilidad del software y
documentación de ayuda, que funcione en varios sistemas operativos (en el caso
de que el cliente lo solicite), el tipo de aplicación a desarrollar, complejidad de la
lógica y estructuras de datos necesarias.
24
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 24
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Una buena práctica de programación es aquella que utiliza los recursos críticos de forma
eficiente. La eficiencia es un requisito de todo sistema y se debe planear considerando los
siguientes aspectos: hacer expresiones lógicas y aritméticas más simples, revisar si las
sentencias que están repitiéndose en los ciclos están correctas y deben repetirse. Evitar el
uso excesivo de arreglos multidimensionales, de apuntadores y listas complejas. No
mezclar tipos de datos, aunque el lenguaje lo permita, evitar declarar variables que no sean
utilizadas, minimizar el uso de peticiones de entrada / salida (E/S) y considerar si algunos
de los dispositivos de E/S puede afectar la calidad o velocidad.
25
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 25
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Generalmente se realizan formularios para introducir datos provenientes del usuario y por
ello es importante definir de una manera más precisa a las validaciones. Éstas se refieren
a la comparación de un valor esperado con el conjunto de valores que son permitidos para
cada campo. Por ejemplo la validación de tipo revisará que el valor sea numérico, cadena
o fecha, según el que se haya asignado para el dato.
Otra validación puede ser la longitud, no deberá permitir valores que sean menores o
mayores a los esperados. Y por último la validación de caracteres especiales no permitir
que se capturen caracteres que no sean los esperados. Si no activamos este proceso de
validación estaremos permitiendo que el usuario introduzca datos imprecisos que se verán
reflejados en la salida de información poco confiable.
26
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 26
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Y en el tema de información, ésta deberá ser presentada sólo para los usuarios que tengan
la facultad para tenerla. Lo cual implica que deberá programarse niveles de seguridad en el
software, habilitando y limitando funciones de acuerdo a cada tipo de usuario definido.
Y por último la manera de navegar a través del software generado, ésta y todos los
elementos anteriores deben planearse estratégicamente en la etapa de diseño. En esta
etapa de codificación únicamente se encargará de implementarlo con código añadiendo la
funcionalidad previamente indicada.
27
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 27
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Como podrás darte cuenta es necesario implementar un estándar para facilitar el proceso
de codificación, tanto en el diseño de interfaces como en la forma de escribir el código. A
continuación, veremos estrategias para administrar los estándares dentro de la
organización del desarrollo del software.
28
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 28
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
1. Administración del cambio: cuando se encuentra un cambio ya sea por parte del equipo
o del cliente es necesario realizar el análisis de su impacto, estimar costos, tiempos y
decidir si se implementan o no.
2. Gestión de versiones: se refiere al seguimiento de las versiones de los elementos del
sistema y garantizar que los cambios o actualizaciones realizadas por diferentes
miembros del equipo no interfieran entre sí.
3. Construcción del sistema: consiste en ensamblar los componentes del sistema, datos y
librerías y luego compilarlos para generar el ejecutable.
4. Gestión de entregas: Implica preparar el software para la entrega y hacer un control de
versiones de lo que se entregó al cliente.
Las herramientas de software que existen en el mercado para administrar versiones son:
CVS: es una herramienta famosa por ser de uso libre, permite generar repositorios para
administrar los documentos que se generen en los proyectos. Favorece la administración
de versiones, por ejemplo, cuando se ha creado un archivo no podrá renombrarse ni
sobreescribirse, cualquier cambio se guarda en una nueva versión, conservando las
versiones anteriores.
• Subversión: es una herramienta de uso libre, fue creada para reemplazar al CVS, y
también funciona para llevar el control de las versiones de los documentos. Genera una
versión a nivel proyecto.
• ClearCase: ayuda a facilitar el proceso del cambio, permite administrar los documentos
de manera confiable, flexible, es óptimo para equipos de desarrollo grandes. Funciona
en sistemas operativos Linux, Windows, Unix.
• Darcs: es una herramienta de control de versiones para ambientes distribuidos. Permite
la generación de puntos de restauración para restablecer documentos con versiones
anteriores. Es muy útil para los archivos que generan los desarrolladores de software,
29
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 29
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
mantienen las versiones y se registran a los autores de los cambios. Tiene una interfaz
muy sencilla de usar.
• Plastic SCM: es una herramienta de control de versiones para desarrollo distribuido,
funciona para sistemas operativos Windows, GNU/Linux Solaris, Mac OS X, .Net/Mono.
Es útil para equipos grandes y ayudan a comprender el estado del proyecto. Su principal
característica es que simplifica la ramificación y fusión.
Establecer una adecuada estructura de trabajo con los estándares, políticas y herramientas
de gestión es muy importante para el logro del buen desempeño del equipo de desarrollo.
Facilitar a los desarrolladores herramientas que hagan su trabajo más sencillo y les agilice
su labor, permitirá que se puedan organizar la producción generada evitando pérdidas de
información, duplicidad de archivos y otros errores.
Las etapas que faltan por abarcar son la
de pruebas y las de mantenimiento. Es
importante marcar la diferencia entre las
etapas de codificación y de pruebas, cada
etapa implica el desarrollo de código sin
embargo se corre el riesgo de que la etapa de codificación se extienda absorbiendo el
tiempo de pruebas, lo cual se convertirá un problema si se lanza un producto que no fue
probado adecuadamente.
30
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 30
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Las pruebas tienen el objetivo de demostrar que un programa hace lo que se espera que
haga y descubrir los defectos que el programa tenga antes de usarlo. Al probar el programa,
éste se ejecuta con datos de ejemplo para verificar los resultados y revisar errores en la
información que arroje el programa. El proceso de prueba tiene 2 metas:
Las pruebas no pueden demostrar que el software esté exento de defectos o que se
comportará de alguna manera específica en un momento dado. No es posible dejar con
cero defectos ya que es posible que el software no sea probado en todas las situaciones
probables. Dentro del proceso de pruebas existen dos procesos que normalmente se
confunden: verificación y validación. La validación contesta la pregunta de ¿construimos
el producto correcto? Y la verificación responde a la pregunta ¿construimos bien el
producto?
31
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 31
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
A continuación, verás una clasificación de los tipos de pruebas, así como las herramientas
que se utilizan para administrarlas e incluso probar código, principalmente tenemos pruebas
enfocadas a los componentes que conforman al software y pruebas enfocadas al software
integrado.
Las características del software nos indicarán que pruebas y cuando deberán aplicarse.
Sommerville (2011, pp. 210-230) lo define de la siguiente manera:
Tipos de prueba
32
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 32
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
asociadas, establecer y verificar el valor de todos los atributos y poner el objeto en todos
los estados posibles.
Pruebas del sistema: incluyen la integración de los componentes y luego probar el sistema
completamente integrado. La prueba del sistema es un proceso colectivo más que
individual. En algunas compañías, las pruebas del sistema implican un equipo de prueba
independiente, sin incluir diseñadores ni programadores.
Pruebas de versión: sirven para poner a prueba una versión particular de un sistema que
se pretende usar fuera del equipo de desarrollo. Generalmente esta versión es para clientes
y usuarios, sin embargo en proyectos muy grandes, una versión podría ser para otros
equipos que desarrollan sistemas relacionados. La principal meta de este tipo de pruebas
es convencer al proveedor del sistema de que: éste es suficientemente apto para su uso.
Si es así puede liberarse como producto o entregarse al cliente.
Pruebas basadas en requerimientos: Estas pruebas son de validación más que defectos,
se intenta demostrar que el sistema implementó adecuadamente sus requerimientos. Para
esto es necesario escribir muchas pruebas para garantizar que cubrió los requerimientos.
Pruebas de escenario: son similares a las de versión, donde se crean escenarios que
generalmente suceden y se les utiliza en el desarrollo de casos de prueba para el sistema.
Un escenario es una historia que describe cómo puede utilizarse el sistema. Éstos deben
ser realistas con usuarios reales. Si los escenarios fueron parte de los elementos de tus
requerimientos, entonces podría utilizarlos como escenarios de prueba.
33
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 33
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Pruebas de usuario: Este tipo de pruebas son necesarias por la influencia del entorno de
trabajo que tiene gran efecto sobre la fiabilidad, el rendimiento, el uso y la robustez de un
sistema. En la práctica existen tres tipos de pruebas de usuario:
• Pruebas alfa: las realiza el usuario en presencia de personal de desarrollo del proyecto
haciendo uso de una máquina preparada para tal fin.
• Pruebas beta: las realiza el usuario después de que el equipo de desarrollo les
entregue una versión casi definitiva del producto.
• Pruebas de aceptación: son las únicas pruebas que son realizadas por los usuarios,
deciden si está o no listo para ser aceptado.
Dependiendo del tipo de prueba que se aplique, será la dificultad o sencillez (para lograr
que las pruebas sean más sencillas se pueden utilizar herramientas para probar código). Si
utilizas software para administrar las pruebas podrás llevar un control más preciso sobre
ellas, pues existen herramientas para desarrollar pruebas de software en todas las etapas
del desarrollo del sistema, éstas soportan las pruebas y el desarrollo a lo largo del ciclo de
vida, desde la validación de requerimientos hasta el soporte del funcionamiento del sistema.
Otras herramientas se enfocan en una sola parte del ciclo de vida. Por ejemplo a
continuación veremos herramientas de software cuya función va orientada al tipo de
aplicación (Fernández, 2012, p. 1).
HP Unified Functional Testing es útil para probar la interfaz gráfica de las aplicaciones de
Java, Sap, Siebel, Visual Basic, .Net, Oracle, etc. Ayuda a la generación de las pruebas y
su administración. Además de ser útil para probar interfaz gráfica, sirve para otros módulos.
Se pueden crear escenarios de prueba. Ofrece un entorno de trabajo sencillo de utilizar.
34
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 34
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Selenium es una herramienta útil para probar aplicaciones web, desarrolladas en C#, Java,
Groovy, Perl, PHP, Python y Ruby. Es multiplataforma ya que se puede usar en Windows,
Linux y MacOS, es gratis y opensource (código fuente abierto). Además, se puede
encontrar mucha documentación en Internet sobre cómo utilizarla.
TestComplete es una herramienta muy completa para hacer pruebas de software, pero
únicamente para la plataforma Windows. Los tipos de pruebas que se pueden gestionar
son de regresión, de cargas web, unitarias, etc. Su interfaz de desarrollo es muy completa
y se integra con las herramientas de Microsoft Visual Studio. Se pueden probar las
tecnologías de Visual Basic, Delphi, C++ y otras.
35
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 35
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
3.3.2. Mantenimiento
Como puedes darte cuenta, la adaptación es una palabra clave en el proceso del
mantenimiento al software; ya que lo que se busca es hacer que éste se adapte cada vez
más a la solución de las necesidades del ser humano, por ello desde la reparación de fallas,
los ajustes al contexto ambiental en el que se encuentra o simplemente agregarle mayor
funcionalidad, son actividades que convertirán al software en una verdadera herramienta
de trabajo para la humanidad.
36
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 36
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Cierre de la unidad
http://www.interfacemindbraincomputer.wikifoundry.com.htmlserialize.co/
Visita la siguiente página, encontrarás una plantilla de uso libre para realizar casos de
prueba. Se explica detalladamente cómo se realiza su llenado:
http://www.pmoinformatica.com/2014/06/plantilla-de-casos-de-prueba.html
37
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 37
Introducción a la ingeniería de software
Unidad 3. Diseño, codificación, pruebas y mantenimiento
Fuentes de consulta
Bibliografía básica
Bibliografía complementaria
38
Ciencias Exactas, Ingenierías y Tecnología | Desarrollo de Software 38