Documentos de Académico
Documentos de Profesional
Documentos de Cultura
infeps
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Principales errores en el diseño 25
Documento final de diseño 25
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Pruebas basadas en ordenador: técnicas 28
Diseño de casos de prueba 30
Estrategia de pruebas 30
Pruebas de sistemas orientados a objetos 36
Depuración 36
Prevención de errores 36
Principales errores en la fase de pruebas 36
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Como mera curiosidad, se presenta en la siguiente imagen la evolución que ha ido teniendo el software
a lo largo de los años:
La ingeniería del software ha tenido una evolución similar al resto de ingenierías pero mucho más
rápidamente.
La crisis del Software surge cuando se ha establecido una mala planificación del producto desarrollado.
Las causas que pueden conllevar a esta crisis pueden ser:
1. La necesidad de un hardware más potente.
2. Una mayor demanda de lo previamente esperado.
3. La falta de metodologías y técnicas en el desarrollo del software.
4. El uso inadecuado de los recursos.
5. La implementación de sistemas más complejos.
6. La poca información de los desarrolladores.
Se puede decir que estamos entrando en una crisis de Software en el momento que notamos alguno de
estos síntomas:
Producto y proceso
Como hemos dicho ya, la producción de software antiguamente era realizada con un enfoque artístico,
a diferencia de hoy en día que tiene un enfoque industrial, más organizado. Ante la constante presencia
de proyectos fallidos, y con el objetivo de mejorar la calidad de sus productos, en los últimos años las
organizaciones han introducido los métodos de ingeniería del software para llevar a cabo este
desarrollo.
Definimos un proceso como una “serie de acciones que conducen a un final”. Un proceso de desarrollo
software es un conjunto de personas, estructuras de organización, reglas, componentes software,
metodologías y herramientas utilizadas o creadas específicamente para definir, desarrollar, ofrecer y
extender un producto software.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
INGENIERÍA DEL SOFTWARE
La Ingeniería del Software tiene como propósito/desafío reducir el coste y mejorar la calidad del
software explotando y aprovechando al máximo el potencial proporcionado por el hardware. Con ella
se pretende un desarrollo y un mantenimiento que aseguren la calidad, la fiabilidad, una facilidad de uso
y una imposibilidad de mal uso del software, de tal manera que sea el ser humano el que dirija el
ordenador y no al revés.
El objetivo de la ingeniería del software es conseguir un producto fiable, de alta calidad y a bajo coste.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Para ello se tendrá que llevar a cabo un proceso de desarrollo y mantenimiento de manera eficiente y
exitosa. Ya empezamos a ver que realizar un proyecto software no solo es programar.
El principal objetivo de la ingeniería del software, el cual es común a todas las ingenierías, es construir
elementos (en este caso tanto hardware como software) que ayuden o faciliten al ser humano en la
realización de tareas.
La ingeniería del software está compuesta por cinco grandes disciplinas, las cuales podemos ver en la
siguiente imagen:
Como podemos observar, la gestión hace de “pegamento” entre todas estas diciplinas. Sin una buena
gestión no se puede llevar a cabo nada.
Actividades de desarrollo.
- Decidir qué hacer (fase de análisis).
- Decidir cómo hacerlo (fase de diseño).
- Hacerlo (fase de codificación).
- Probar el producto (fase de pruebas).
- Usar el producto (fase de entrega /instalación).
- Mantener el producto (fase de mantenimiento).
Actividades de control. Se ocupan de evaluar y asegurar la calidad del software.
- Métricas.
- Aseguramiento de la calidad.
- Gestión de configuraciones.
Actividades de gestión.
- Planificación y estimación.
- Seguimiento de proyectos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
Imagen 3. Importancia de la comunicación en la IS
El proceso software es el proceso que transcurre desde que un cliente define lo que quiere hasta que al
final obtiene por lo que ha pagado.
Metodologías tradicionales
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Este modelo de desarrollo en cascada se originó en la industria y la construcción, donde los cambios a
posteriori son caros y difíciles de implementar. En el mundo del software, como no se habían implantado
otras metodologías de desarrollo, se adaptó el modelo en cascada que se utilizaba en estos sectores.
Para que el proyecto con esta metodología tenga éxito deben desarrollarse todas las fases, que no
terminan hasta que se han cumplido en su totalidad.
1. Análisis de requisitos. En esta fase se hace un análisis de las necesidades del cliente para
determinar las características software a desarrollar, y se especifica todo lo que debe hacer el
sistema sin entrar en detalles técnicos. Hay que tener cuidado en esta primera fase, ya que en
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
este modelo no se van a poder añadir nuevos requisitos en mitad del proceso de desarrollo.
2. Diseño. En esta etapa se describe la estructura interna del software y las relaciones entre las
entidades que lo componen. El sistema se descompone y se organiza en elementos que puedan
elaborarse por separado, aprovechando las ventajas del desarrollo en equipo.
Como resultado de esta etapa surge el SDD (Documento de Diseño del Software), que contiene
la descripción de la estructura del sistema y la especificación de lo que debe hacer cada una de
las partes.
3. Codificación. En esta fase se programan los requisitos especificados haciendo uso de las
estructuras de datos diseñadas en la fase anterior.
4. Pruebas e integración. Una vez se termina la fase de implementación, se verifica que todos los
componentes del sistema funcionen correctamente y cumplan con los requisitos. El objetivo de
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Imagen 5. Modelo de ciclo de vida en cascada con refinamiento
Estos dos modelos (incremental e iterativo) permiten construir una implementación parcial del sistema
global para posteriormente ir aumentando la funcionalidad. Tienen la ventaja de que lo que ya tenemos
hecho se le puede enseñar al cliente, por lo que habrá un feedback.
Modelo de ciclo de vida iterativo incremental
En este modelo de ciclo de vida se juntan el iterativo con el incremental. Del iterativo sacamos que en
Metodologías ágiles
El problema del ciclo de vida clásico es que no tiene flexibilidad. Una vez se tienen los requisitos, se
congelan y no se pueden cambiar. Es por esto por lo que surgieron las metodologías ágiles.
En el año 2001 un grupo de desarrolladores que no se sentían cómodos con el método tradicional de
desarrollo de software, se reunieron y firmaron el Manifiesto1 por el desarrollo Ágil de Software.
1 http://agilemanifesto.org/iso/es/manifesto.html
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
El equipo de desarrollo es el responsable de entregar las nuevas funcionalidades al final de cada sprint.
El conjunto de miembros del equipo posee todas las habilidades necesarias para desarrollar estos
avances de software.
El proceso de trabajo Scrum
Todos los sprints comienzan con la planificación de la iteración, que define la lista de tareas (backlog)
para esa iteración, y se estima la cantidad de trabajo para ese sprint. Cada día del sprint se realizan
reuniones cortas llamadas “stand-up meetings” o “daily meetings”. La iteración termina con una
revisión del sprint, en la que se verifica el progreso realizado para mostrar el resultado al cliente, y se
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
identifican posibles mejoras para futuros sprints. Una vez terminado, se comienza un nuevo sprint en el
que se implementarán nuevas funcionalidades. Veamos en detalle cada una de estas fases.
Planificación del sprint
Al comienzo de un sprint se mantiene una reunión que durará como máximo una hora por cada semana
de duración del sprint, fijándose un límite de 8 horas.
El cliente presenta al resto del equipo la lista de requisitos y la prioridad de cada elemento de la lista. Se
prepara la lista de tareas o requisitos del sprint y se analiza, con todo el equipo, el tiempo y el esfuerzo
que llevará hacer cada funcionalidad elegida.
Una vez el equipo ha preparado la lista de tareas, se estima y se vota qué tareas serán entregadas al final
del sprint. El equipo de desarrollo se asegura de entender bien todos los detalles de cada uno de los
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Imagen 9. Metodología Scrum
Ventajas
Metodología métrica
Es una metodología promovida por el Ministerio de Hacienda y Función Pública para la sistematización
de actividades del ciclo de vida de los proyectos software en el ámbito de las administraciones públicas.
Este modelo ofrece un marco de trabajo que define una división del proyecto en fases, junto a las
relaciones de estas fases. También ofrece responsabilidades y funciones de los miembros del equipo.
Esta metodología surge para paliar el problema de los Departamentos de Tecnología de la Información
que no utilizan ninguna metodología de desarrollo, que suelen tener escasa o nula documentación, un
mantenimiento difícil, una falta de comunicación con el cliente y productos no entregados a tiempo.
El Diseño Centrado en el Usuario (DCU) es una metodología o filosofía de diseño que se centra en crear
productos o plantearlos para que den solución a necesidades específicas de los usuarios. Se preocupa
por determinar soluciones concretas siempre, exigiendo un mayor esfuerzo y atención, pero obteniendo
un alto grado de satisfacción por parte de los consumidores.
El usuario juega un papel fundamental antes, durante y después de la construcción del software. El
objetivo principal de esta metodología es el aseguramiento de la usabilidad del sistema final. Existen
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
tres fases principales por las que hay que pasar para hacer un buen desarrollo de software centrado en
el usuario:
1. Conocer a fondo a los usuarios finales.
2. Diseñar un producto que resuelva sus necesidades y se ajuste a sus capacidades,
expectativas y motivaciones.
3. Poner a prueba lo diseñado, normalmente utilizando tests de usuario.
Usabilidad
El término usabilidad se refiere a la facilidad con que las personas pueden utilizar una herramienta
particular o cualquier otro objeto fabricado por humanos con el fin de alcanzar un objetivo concreto.
Para saber si un producto es usable o no, generalmente se utilizan las métricas de la Usabilidad:
Para definir el ciclo de vida hace falta definir las fases por las que va a pasar, el orden de estas fases y las
entradas y salidas que tendrá cada una de estas fases. Recordemos que no se puede pasar a otra fase sin
haber terminado previamente la anterior.
Todo esto se realiza de acuerdo a las características del proyecto en específico que se va a realizar.
En esta parte se definirá el proyecto, así como las entradas y salidas que debe tener, y las funciones
básicas también se definirán aquí.
Estos criterios se deben especificar de acuerdo con la especificación de requisitos, los resultados
esperados, el plan de validación, el plan de aseguramiento de calidad y los atributos de calidad.
Estos criterios de calidad y validación deben ser acordados por todos los participantes en el proyecto.
Definición de hitos
Se deben definir productos correspondientes a cada hito, es decir, productos intermedios que sean
“enseñables” a los clientes. Se debe definir qué, quién, cuándo y cómo se va a evaluar este hito. Se
conseguirá el hito cuando se haya revisado la calidad de uno o más productos y se hayan aceptado.
Tras cada hito, se debería generar un informe de progreso del proyecto, coincidiendo este informe con
el final de una fase (como mínimo).
En este punto se debe definir un jefe de proyecto, así como los miembros que conformarán el equipo y
el papel que desarrollará cada uno de estos miembros.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Definición de mecanismos de seguimiento y control
En todo proyecto software se tiene que especificar un seguimiento y control del mismo para ver su
desarrollo a lo largo del tiempo. Para ello, se definen varias tareas a realizar:
Se debe controlar un cumplimiento de tiempos en cuanto a entregas, además de evaluar objetivos por
parte del equipo y, sobre todo tiene que haber una coordinación del equipo para poder llevar a cabo el
proyecto. Además, también debe haber revisiones rutinarias para seguir el desarrollo.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Definición de requisitos
Los requisitos especifican lo que el sistema debe hacer (junto a sus funciones) y las propiedades
esenciales y deseables que debe tener. La captura de requisitos tiene como objetivo la comprensión de
lo que los clientes y usuarios espera que haga el sistema. Un requisito expresa el propósito del sistema
sin considerar cómo se va a implantar. En otras palabras, los requisitos especifican el qué del sistema,
sin saber el cómo, de lo que se encargará el diseño.
La captura y análisis de requisitos es una de las fases más importantes para que un proyecto tenga éxito.
Tenemos que diferenciar entre lo que son los requisitos para el usuario y lo que son los requisitos para
el equipo de desarrollo. Para el usuario los requisitos son las condiciones o capacidades necesarias para
que un usuario pueda resolver un problema o alcanzar un objetivo, mientras que para el equipo de
desarrollo los requisitos son las condiciones o capacidades que debe reunir un sistema para satisfacer
Lo primero que se debe de hacer en la fase de análisis es comprender el problema que se propone. Los
requisitos han de determinarse siguiendo una aproximación descendente: primero se analiza el
problema globalmente para después pasar al detalle.
Las tareas a realizar son entonces las siguientes:
1. Educción de requisitos. En esta etapa se deben identificar los requisitos que se obtienen de los
usuarios y clientes.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
2. Análisis de Usuarios y de las tareas. Se deben identificar potenciales usuarios del sistema, su
jerarquía y las tareas a realizar.
3. Análisis del problema y de los requisitos. Razonar sobre los requisitos educidos, combinar
requisitos relacionados, establecer prioridades entre ellos, determinar su viabilidad…
4. Representación (modelización). Registrar los requisitos de alguna forma, incluyendo lenguaje
natural, lenguajes formales, modelos, prototipos, maquetas, UML…
5. Validación. Examinar inconsistencias entre requisitos, determinar la corrección, ambigüedad…
Establecer criterios para asegurar que el software reúna los requisitos cuando se haya
producido. El cliente, usuario y desarrollador se deben poner de acuerdo.
Educción de requisitos
Tipos de requisitos
Requisitos funcionales
Son las acciones fundamentales que deben tener lugar en la ejecución del software. Son las acciones que
son necesarias para el correcto funcionamiento y comportamiento de nuestro sistema. Ejemplo: “El
usuario podrá dar de alta un elemento”.
Requisitos no funcionales
Representan las características o cualidades generales que se esperan del software para conseguir su
propósito. Existen requisitos funcionales de muchos tipos:
Requisitos de interfaz y usabilidad. Menús, ventanas, mensajes de error, formatos de
pantalla…
Requisitos operacionales. Modos de operación, back-ups, funciones de recuperación…
Requisitos de documentación. Idiomas, tipos de usuario, ayuda online, web, tutoriales…
Requisitos de seguridad. Diferentes niveles de acceso al sistema, protección, mantenimiento
de históricos, claves…
Requisitos de mantenibilidad y portabilidad. Grado en que debe de ser fácil cambiar el
software o portarlo.
Requisitos de recursos. Limitaciones de memoria, almacenamiento…
Requisitos de rendimiento. Tiempo de respuesta, número de usuarios, terminales soportadas,
consumo de memoria…
Requisitos de comportamiento.
Análisis de requisitos
El análisis de requisitos es el proceso a través del cual se determinan qué requisitos son aceptables y se
definen cuáles van a formar parte del producto. Este análisis se realiza mediante una evaluación de
viabilidad técnica y económica, además de realizar una valoración de riesgos. Los riesgos que
analicemos se podrán clasificar en categorías como obligatorios, deseables, accesorios…
La representación de requisitos sirve para registrar los requisitos de una o más formas y para especificar
aquellos requisitos que todavía no estén educidos. ¿Cómo podemos realizar esto? Hay varias formas de
hacerlo: mediante lenguaje natural, mediante lenguaje formal, o con modelos, diagramas, maquetas…
El cliente a veces puede no tener una idea clara de lo que quiere o no saber explicarlo bien. Por ello, el
responsable de desarrollo puede no estar seguro de la eficacia de un algoritmo o del enfoque que tiene
que tomar en la interacción hombre-máquina. Para ayudar a comprender y validar estos requisitos que
aún no están claros podemos desarrollar maquetas y/o prototipos.
Las maquetas se pueden realizar en varios casos. Cuando los requisitos no están claros, cuando el
alcance del proyecto no está bien definido, cuando los usuarios no se muestran colaboradores o cuando
las comunicaciones resultan difíciles. Una maqueta nos permite adaptar el modelo mental del usuario
con el del ingeniero del software. Nos ayuda a validar los requisitos del usuario, a comprobar su
aceptación y la integración que podría tener con el entorno.
Los prototipos se realizan cuando no se conoce la complejidad total del desarrollo. Son diferentes a las
maquetas. Un prototipo lo realiza un ingeniero de software cuando no tiene muy clara la solución
informática más adecuada.
El prototipado permite educir y verificar los requisitos principales del usuario, verificar la viabilidad del
diseño informático del sistema y facilitar el diseño de la interacción Persona-Ordenador y de las
interfaces de usuario.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Para resumir, la diferencia entre las maquetas y los prototipos es que las maquetas solamente tienen
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
una interfaz, no tienen ningún tipo de lógica. Sin embargo, un prototipo, además de presentar una
interfaz, también tiene un mínimo de funcionalidad. La ventaja que tienen los prototipos es que se puede
hacer un uso (aunque sea mínimo) del producto, mientras que en una maqueta solo se ve la parte gráfica,
sin ninguna funcionalidad.
El propósito del documento final de análisis de un proyecto software es el de proporcionar los medios
de comunicación entre todas las partes, tanto clientes como usuarios, analistas y diseñadores. Este
documento debe ser comprensible por todas las partes y debe servir como base para las actividades de
diseño, pruebas y verificación. A continuación vemos la estructura que más o menos debería quedar en
un documento ERS.
DISEÑO
En esta etapa del desarrollo del software, vamos a analizar cómo podemos hacer la transición del
análisis al diseño, es decir, cómo pasar del qué al cómo. El diseño es el proceso de definición de la
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
arquitectura, componentes, módulos, interfaces, procedimientos de prueba y datos de un sistema
software para satisfacer los requisitos especificados en la fase de análisis.
Niveles de diseño
Existen dos niveles de diseño diferentes, que se diferencian en el grado de exactitud en que se
implementan.
Por un lado tenemos el diseño de la arquitectura (diseño de alto nivel), que es el proceso de
definición de la colección de componentes del sistema y sus interfaces. Su objetivo es determinar el
marco de referencia que guiará a la construcción del sistema. En este tipo de diseño se llevan a cabo las
siguientes tareas:
- Definir los criterios de descomposición del proyecto.
Principios básicos
Se deben tener en cuenta algunos aspectos básicos a la hora de llevar a cabo la implementación del
diseño. El primero de ellos es que se debe procurar tener un nivel de abstracción bastante alto, de
manera que se manejen conceptos generales y no de instancias particulares. Otra característica que se
pide es seguir una estrategia de diseño descendente (refinamiento), es decir, empezar con el diseño de
las cosas más grandes e ir detallando poco a poco cada una de ellas. Además, la modularidad es muy
importante, pues dividir el software en diferentes unidades con entidad propia lo hace mucho más fácil
de utilizar. Esto nos lleva a la ocultación de información. Los detalles internos de cada módulo han de
ser transparentes a los demás módulos, de manera que cada módulo sea independiente de los demás.
Esta ocultación de información ayuda a reducir la complejidad, pues el problema se descompone en
piezas más pequeñas unas independientes de otras.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Diseño estructurado y diseño orientado a objetos
En el diseño estructurado se considera que el sistema es un conjunto de módulos o unidades, cada uno
con una función bien definida, que están organizados de forma jerárquica, mientras que en el diseño
Métricas de diseño
Cohesión y acoplamiento
Podríamos definir la cohesión como el grado en que los elementos de un módulo permanecen juntos.
Es decir, lo estrecha que es la relación entre esos elementos. Si hablamos de clases, una clase tendrá una
cohesión alta si sus métodos están relacionados entre sí, es decir, tienen una “temática” común, trabajan
A continuación vamos a ver una lista de los errores que se suelen cometer en la fase de diseño.
1. Se tiende a tener mucha prisa por empezar a programar. Sin embargo, está demostrado que
cuanto antes se empiece a escribir código, más tarde se acabará el programa.
2. Se tiende también a no detallar de forma exhaustiva las especificaciones del diseño.
3. A veces también falta documentación de la etapa de diseño. Aunque se crea que no, la
documentación siempre es tanto o más importante que lo que se implementa.
4. No tener en cuenta el entorno físico. El equipo de desarrollo debe saber dónde va a montar el
software que esta desarrollando. Por ejemplo, no es lo mismo montarlo en una arquitectura
RISC, con un tamaño de memoria grande o pequeño… Todas esas cosas hay que estudiarlas
también.
Vemos a continuación cuáles son los puntos que debe tener un documento de diseño bien realizado:
1. Introducción
1.1. Propósito del documento
1.2. Entorno hardware y software
1.3. Principales funciones del software
1.4. Bases de datos externas
1.5. Restricciones y limitaciones
1.6. Referencias
2. Descripción del diseño
2.1. Diagramas
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
2.2. Descripción de datos
2.3. Descripción de interfaces
2.4. Descripción de comunicaciones
3. Descripción de los módulos (para cada módulo)
3.1. Descripción
3.2. Descripción de la interfaz
3.3. Módulos relacionados
3.4. Organización de los datos
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
4. Descripción de archivos externos y datos globales
4.1. Descripción
4.2. Métodos de acceso
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
PRUEBAS
Un error de software se produce cuando el software no hace lo que el usuario espera que haga, acordado
previamente en la especificación de requisitos. Una prueba es el proceso de ejecutar un software con el
fin de encontrar errores. A veces se tiene una idea incorrecta de lo que es probar un sistema, como vemos
en las siguientes citas:
“Probar es demostrar que no hay errores en el programa”.
“Probar es demostrar que el programa funciona correctamente”.
El objetivo de las pruebas es descubrir errores cometidos durante las fases anteriores de desarrollo del
producto, no demostrar que el programa funciona. Los mejores casos de prueba son aquellos que tienen
una alta probabilidad de mostrar un error que no ha sido descubierto hasta entonces.
Principios
Cuando se realizan pruebas a un determinado software, se deben seguir una serie de pautas.
- Cada uno de los resultados de estas pruebas debe ser inspeccionado cuidadosamente.
- Todos los casos de prueba deben ser escritos tanto para entradas válidas y esperadas como para
entradas no válidas e inesperadas.
- El programador del software no debe ser el único que pruebe su propio programa, pues se suele
tender a no encontrar errores en el propio código de alguien. Es por esto por lo que es bueno
que las pruebas las realice un equipo distinto al que realizó la codificación.
- Además de que con las pruebas hay que verificar si un programa hace o no hace lo que debería
hacer, también hay que verificar que hace o no hace lo que no debería de hacer.
- Es importante documentar los casos de prueba. Esto permite reejecutarlos en el futuro (pruebas
de regresión).
- Hay que evitar las pruebas no reproducibles o “sobre la marcha”.
Las pruebas no solo se realizan sobre el código una vez implementado. Las pruebas se van realizando a
lo largo de todo el ciclo de vida de un proyecto software, tanto en el análisis de requisitos como en la
etapa de diseño.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Pruebas basadas en ordenador: técnicas
Para llevar a cabo las pruebas de caja negra primero se realiza una partición de equivalencia. Esto es, se
divide el dominio de entrada de un programa en un número finito de clases de equivalencia de las que
puedan derivar casos de prueba con el objetivo de reducirlos. Se hacen en dos pasos:
1. Identificar las clases de equivalencia. Conjunto de datos que definen las entradas validas y no
validas al sistema.
2. Identificar los casos de prueba.
En estas pruebas se deben hacer un Análisis de Valores Límite (AVL), en el cual se seleccionan casos de
prueba que ejerciten valores límite de cada clase de equivalencia.
Pruebas de caja blanca
Las pruebas de caja blanca se centran en probar el comportamiento interno y la estructura del programa
examinando la lógica interna de los módulos. Para ello es necesario ejecutar todas las sentencias al
menos una vez, recorrer todos los caminos independientes de cada módulo, comprobar todas las
decisiones lógicas y comprobar todos los bucles. Recordemos que el objetivo de las pruebas es encontrar
errores, por lo que se intenta provocar situaciones extremas que nos digan cómo de bien se comporta
el programa.
Idealmente, para examinar completamente la lógica de cada módulo habría que ejecutar todos los
posibles caminos, bucles, secuencias… Pero como esto es imposible, entonces hay que intentar, con el
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
En el caso de los bucles anidados extenderemos el enfoque de pruebas de los bucles simples a los
anidados. El número posible de pruebas aumentaría geométricamente a medida que crece el
nivel de alineamiento. Esto llevaría a un número impracticable de pruebas. Por ello, primero
comenzaremos con el bucle más interno, poniendo el resto a los valores mínimos. Llevaremos a
cabo las pruebas para bucles simples para el bucle más interno.
En el caso de bucles concatenados, se prueban empleando el enfoque definido para los bucles
simples si cada uno de los bucles fuera independiente. Sin embargo, si los bucles están
concatenados y el contador del bucle 1 se emplea como valor inicial para el bucle 2, entonces los
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
bucles no son independientes. Si sucede esto, se recomienda el enfoque aplicado a los bucles
anidados.
Los bucles no estructurados, siempre que sea posible, deben diseñarse de nuevo para soportar el
uso de estructuras de programación estructurada.
El objetivo del diseño de los casos de prueba es crear el subconjunto de todos los posibles casos de
prueba que tiene la mayor probabilidad de detectar el mayor número posible de errores. Esto se realiza
mediante técnicas de caja negra, y después se completa creando casos suplementarios que examinen la
lógica del programa (caja blanca).
Estrategia de pruebas
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
se utilizan módulos conductores. Las fases por las que se pasa son las siguientes:
1. Se combinan módulos del nivel más bajo en grupos.
2. Se construye un conductor para coordinar la entrada y la salida de los casos de prueba.
3. Se prueba el grupo.
4. Se eliminan los conductores y se combinan los grupos moviéndose hacia arriba por la estructura
del programa.
Veamos un ejemplo:
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Está dirigido a varios requisitos del software.
• Tiene un nivel de control alto.
• Es complejo o contiene un algoritmo nuevo.
• Es propenso a errores.
• Tiene unos requisitos de rendimiento muy definidos o estrictos.
Pruebas de validación
En estas pruebas se comprueba que se cumplen los requisitos. Los requisitos de validación se han
acordado antes de la fase de definición de requisitos. La técnica utilizada para este tipo de pruebas es la
de caja negra. Consta de dos partes:
1. La validación por parte del usuario para comprobar si los resultados producidos son correctos.
Para probar los sistemas orientados a objetos basta con que sigamos los siguientes pasos:
Depuración
Prevención de errores
Para prevenir errores, se puede introducir precisión en el proceso de desarrollo software, establecer
una verificación al final de cada fase antes de comenzar la siguiente o establecer diferentes procesos de
pruebas.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Unidad 06. Mantenimiento
El mantenimiento de un producto software comprende la modificación de dicho producto después de
haber sido entregado a los clientes con el fin de corregir defectos, mejorar el rendimiento u otros
atributos, añadir funcionalidades o adaptarlo a un cambio en su entorno.
Es el conjunto de actividades que se realizan sobre el software una vez que éste está operativo, es decir,
después de la entrega. Cubre la vida de un sistema software desde que se instala hasta que se reemplaza
o se da de baja.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
El mantenimiento tiene una serie de problemas que el desarrollo no tiene, y que dificultan su realización
y aumentan su coste. En un producto software hay que preocuparse por la “mantenibilidad” (facilidad
de mantenimiento) durante el proceso de desarrollo de software. Es decir, siempre hay que tener en
cuenta la claridad, la modularidad, la extensibilidad y flexibilidad del diseño y realizar una buena
documentación tanto interna como externa. El llevar a cabo el mantenimiento de forma planificada
facilita y reduce su coste.
Muchas veces damos poca importancia al mantenimiento. Sin embargo, también los costes intangibles
derivados de una inadecuada estrategia de mantenimiento nos pueden perjudicar mucho. Por ejemplo,
la disminución de la calidad global del software o de la satisfacción del cliente. Cuanto más nos hayamos
preocupado por la mantenibilidad durante el proceso de desarrollo, más fácil será hacer el
TIPOS DE MANTENIMIENTO
Se basa en modificar el sistema tras haber detectado algún defecto, ambigüedades o errores. Incluye el
diagnóstico y la corrección de errores. Puede ser de dos tipos: de emergencia o planificado.
En este tipo de mantenimiento se trata de modificar el sistema para acomodarlo a cambios físicos del
entorno. Incluye:
• Actividades para ajustar el software a un entorno nuevo.
• Actividades para añadir nuevos periféricos.
• Actividades para ajustar el software a cambios en fuentes externas.
En este tipo de mantenimiento se intenta mejorar el sistema para que cumpla con las nuevas
necesidades o requerimientos de los usuarios o del negocio. Incluye:
• Mejoras en el software para aumentar la eficiencia, el rendimiento…
• Las actividades necesarias para cumplir nuevos requisitos relativos a fuentes externas (como
por ejemplo un nuevo formato de informes).
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Mantenimiento preventivo (5%)
Con el mantenimiento preventivo se trata de modificar el sistema con los cambios necesarios para que
se mantenga la eficiencia y fiabilidad del software. Incluye:
• Revisión periódica de equipos, periféricos y protocolos asociados.
• Pruebas y revisiones periódicas del software.
• Aumentar el tamaño previsto de los ficheros o bases de datos.
Mantenimiento estructural (reingeniería)
El mantenimiento estructural es un tipo de mantenimiento preventivo. Se basa en modificar la
arquitectura interna del sistema con el objetivo de mejorar su mantenibilidad. Incluye:
• Mejorar la documentación existente.
REINGENIERÍA
Es el proceso de examinar un sistema software existente y modificarlo (reconstruirlo) con la ayuda de
herramientas automáticas para mejorar su mantenibilidad, incrementar su calidad y aumentar su vida.
Normalmente se cambia la forma del software, no la funcionalidad. Es decir, se suele, por ejemplo, hacer
el código más estructurado o un diseño más completo.
Los tipos de reingeniería son la reestructuración, la ingeniería inversa y la migración.
Ingeniería inversa
Es un proceso que incluye analizar un código o descripción física (análisis, diseño…) de un sistema
software, además de recuperar el nivel de abstracción anterior con la ayuda de herramientas
automáticas. La ingeniería inversa no cambia lo que hace el software sino que transforma la
representación de este software a una forma más fácil de entender, más clara y completa.
ESTRATEGIAS DE MANTENIMIENTO
Existen diversas estrategias de mantenimiento, entre las que podemos encontrar:
Mantenimiento estructurado/planificado
Mantenimiento no estructurado
Este tipo de estrategia de mantenimiento es bajo demanda. Cada vez que llega una petición, se resuelve
y se implementa.
Mantenimiento combinado
Costes intangibles
Estos costes son derivados de una mala planificación o estrategia de mantenimiento. Se pueden generar
por la pérdida de una oportunidad de un nuevo proyecto, por la insatisfacción del cliente o por una
disminución de la calidad global del software.
DOCUMENTOS
En el proceso de mantenimiento se han de realizar varios documentos. Antes de realizar cualquier
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
Unidad 07. Gestión de la Configuración del Software
La configuración del software es el estado actual del sistema software y las interrelaciones que existen
entre sus componentes constitutivos, es decir, entre el código fuente, los datos y la documentación.
La gestión de configuración del software (GCS) es una disciplina cuya misión es identificar, controlar
y organizar la evolución de un sistema software. Permite controlar formalmente la evolución y los
cambios del software, garantizando la visibilidad en el desarrollo y en el producto, y la trazabilidad en
el producto durante todo su ciclo de vida.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Los sistemas software tienen una “vida larga”, y todos ellos cambian a lo largo de esta vida. Pasan por
diferentes versiones, plataformas… Se tiene que asegurar que los cambios producidos ocasionen el
mínimo coste. La gestión de configuración del software asegura:
• La coherencia entre versiones.
• Seguridad ante pérdidas de software o de personal.
• Reutilización de software.
• Poder recuperar cualquier versión realizada por cualquier desarrollador en cualquier momento.
• Calidad, pues únicamente se aceptan los elementos formalmente revisados y aprobados.
El objetivo de la gestión de configuración del software es establecer y mantener la integridad de los
productos generados durante un proyecto de desarrollo de software y a lo largo de todo el ciclo de vida.
Líneas base
Una línea base es un punto de referencia en el proceso de desarrollo del software a partir del cual las
revisiones de los elementos de configuración del software se han de realizar de manera formal. Su
objetivo es controlar los cambios en el software sin impedir llevar a cabo aquellos que sean justificados.
Las líneas base se definen al comienzo del proyecto, y suelen coincidir con los hitos marcados.
Generalmente se corresponden con los resultados de las fases.
Los tipos de líneas base son:
• Línea base funcional. Después de la fase de análisis.
• Línea base de diseño. Después de la fase de diseño.
• Línea base de producto. Después de las pruebas, cuando tengamos un producto final estable.
• Línea base operativa. Después de entregar el sistema final.
Estas son las líneas base más habituales, pero pueden variar.
Las líneas base tienen como objetivo secundario:
• Identificar los resultados de las tareas realizadas en cada fase.
• Asegurar que se ha completado la fase.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
puedan hacer los cambios necesarios pero de manera controlada y con previa autorización.
Los cambios de un elemento de una línea base producen la creación de una nueva versión del elemento.
Estos son los pasos que hay que seguir cuando un elemento de configuración del software se convierte
en una línea base y se quieren controlar sus cambios:
1. Petición de cambio.
2. Evaluación del esfuerzo, efectos secundarios, alcance… del cambio.
3. Generación de un informe de cambios.
4. Autorización.
5. Emisión de una orden de cambio.
6. Baja en la Base de Datos de proyectos del elemento a cambiar.
7. Realización del cambio.
SVN
Es un software libre de código abierto desarrollado para la gestión de configuraciones. Sustituye a CVS.
Este software compara versiones anteriores, caza errores regresivos, mantiene ramas compatibles con
las versiones anteriores, produce registros de cambios…
Un repositorio Subversion se comporta como un sistema de ficheros que recuerda conjuntos de cambios
que se le han hecho. Esto lo hace almacenando ficheros en forma de árbol, llevando un control de su
evolución a lo largo del tiempo.
La diferencia entre SVN y Git es que Git modela sus datos más como un conjunto de instantáneas de un
mini sistema de archivos. Cada vez que se confirma un cambio, Git básicamente hace una foto del aspecto
de todos los archivos en ese momento, y guarda une referencia a esa instantánea. Para ser eficiente, si
los archivos no se han modificado, Git no almacena el archivo de nuevo, solo un enlace al archivo anterior
idéntico que ya tiene almacenado.
En la siguiente imagen vemos en la parte de arriba cómo SVN almacena los datos, mientras que en la
parte de abajo vemos cómo lo hace Git.
Medidas constructivas
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3170587
• Las medidas constructivas técnicas. Se basan en aplicar técnicas de ingeniería del software
para mejorar la calidad de los productos.
• Las medidas constructivas organizativas. Engloban la realización y el seguimiento de planes
para proporcionar una mejor calidad a los procesos software.
• Las medidas constructivas humanas. Establecen la formación que necesitan los
desarrolladores para realizar su trabajo con mayor calidad.
Medidas analíticas
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Estas medidas se dividen en dinámicas y estáticas.
Medidas dinámicas
Las medidas dinámicas requieren la ejecución del objeto que está siendo medido o probado. Es decir,
hace referencia a las pruebas de software. Aplicar medidas dinámicas significa hacer pruebas del código.
Medidas estáticas
Las medidas estáticas analizan el objeto sin necesidad de ejecutarlo, y principalmente son revisiones
y auditorías.
Las revisiones son reuniones formales donde se analizan de forma estructurada los resultados,
parciales o totales, de un proyecto software. Sirven para detectar acciones del producto o proceso
respecto a las especificaciones iniciales, y se pueden realizar en todas las fases del ciclo de vida, aunque
DOCUMENTACIÓN
El plan de aseguramiento de la calidad es una planificación de cómo se va a construir la calidad en el
software y cómo se va a evaluar. Este documento se debe producir en una fase muy temprana del
proceso de desarrollo. El contenido de este documento es:
• Un propósito.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Documentos de referencia.
• Gestión.
• Documentación.
• Estándares, prácticas y convenciones.
• Revisiones y auditorías.
• Gestión de configuraciones.
• Gestión de errores.
• Herramientas, técnicas y metodologías.
• Control del código.
• Control del almacenamiento.
• Control de proveedores.