Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3
Introducción .............................................................................................................................. 3
Software basado en el tipo de tarea que realiza ...................................................................... 3
Software basado en el método de distribución ........................................................................ 4
Desarrollo de software .............................................................................................................. 5
Ciclos de vida del software ........................................................................................................ 5
Modelo en cascada................................................................................................................ 5
Modelo en cascada con retroalimentación........................................................................... 6
Modelos evolutivos ............................................................................................................... 6
Modelo iterativo incremental ........................................................................................... 6
Modelo en espiral ............................................................................................................. 7
Fases de desarrollo.................................................................................................................... 8
Análisis................................................................................................................................... 8
Requisitos .......................................................................................................................... 9
Herramientas de apoyo al desarrollo del software......................................................... 10
Clasificación de las herramientas CASE ........................................................................... 10
Clasificación de las técnicas para representar requisitos ............................................... 10
1. Diagrama de flujo de datos, DFD............................................................................. 10
2. Diagrama de flujo de control, DFC .......................................................................... 13
3. Diagrama de transición de estados, DTE ................................................................. 13
4. Diagrama entidad-relación, DER ............................................................................. 13
5. Diccionario de datos, DD ......................................................................................... 13
Diseño.................................................................................................................................. 13
Diseño estructurado ........................................................................................................ 14
Diseño a nivel de componentes .................................................................................. 14
Construcción secuencial .......................................................................................... 14
Construcción condicional ........................................................................................ 15
Construcción repetitiva ........................................................................................... 15
Notaciones gráficas para el diseño ............................................................................. 16
Diagrama de flujo .................................................................................................... 16
Diagrama de cajas (Diagrama Nassi-Shneiderman) ................................................ 16
Tablas de decisión ................................................................................................... 17
Pseudocódigo .......................................................................................................... 18
Diseño orientado a objetos ............................................................................................. 19
Codificación ......................................................................................................................... 19
Código fuente .................................................................................................................. 19
Código objeto .................................................................................................................. 20
Código ejecutable ............................................................................................................ 20
Máquinas virtuales .......................................................................................................... 20
Frameworks ..................................................................................................................... 21
Entornos de ejecución ..................................................................................................... 21
Entornos de desarrollo .................................................................................................... 22
Pruebas................................................................................................................................ 22
Documentación ................................................................................................................... 24
Explotación .......................................................................................................................... 24
Mantenimiento ................................................................................................................... 25
Unidad 1. Desarrollo del software
El objetivo es aprender a reconocer los elementos y herramientas que intervienen en el
desarrollo de un programa informático, analizando sus características y las fases en las que
actúan hasta llegar a su puesta en funcionamiento.
Introducción
El ordenador se compone de dos partes:
Hardware: es la parte física del ordenador. Los componentes que se pueden ver y
tocar.
Software: es la parte lógica del ordenador. No se puede tocar. Está formada por el
conjunto de programas y aplicaciones que actúan sobre el hardware y facilitan la
realización de tareas.
Según el orden y la forma en que se lleven a cabo las etapas anteriores hablaremos de
diferentes ciclos de vida del software.
La construcción de software es un proceso que puede llegar a ser muy complejo y exige gran
coordinación y disciplina por parte de quienes lo desarrollen.
Los errores en la planificación inicial pueden propagarse en escala al resto de etapas del
desarrollo.
Para poder empezar una etapa en este modelo, habrá que finalizar la anterior. Después de
cada etapa se realiza una revisión para comprobar si se puede pasar a la etapa siguiente (1).
Si durante la etapa de mantenimiento, por ejemplo, el cliente quiere hacer una mejora, habrá
que modificar algo en el diseño, lo que
significa que habrá que volver a cambiar
la codificación y realizar las pruebas.
En conclusión, si se tiene que volver a
una de las etapas anteriores, habrá que
recorrer el resto de etapas de nuevo (2).
Modelo en cascada con retroalimentación
Es uno de los modelos más utilizados. Introduce realimentación entre etapas al modelo
anterior, de forma que podemos volver atrás para corregir, modificar o depurar. De todas
formas, si se prevén muchos cambios durante el desarrollo no es el modelo más idóneo.
Es el mejor modelo si el proyecto es rígido (pocos cambios) y los requisitos están claros.
Características:
Es uno de los modelos más utilizados.
Se puede retornar a etapas anteriores.
Idóneo para proyectos más o menos rígidos y con requisitos claros.
Los errores detectados una vez haya concluido el proyecto
pueden provocar que haya que empezar desde cero.
Requisitos
Dentro del análisis encontramos dos tipos de requisitos:
Requisitos funcionales: describen cómo funciona
el sistema: la función que realiza, cómo reacciona ante determinadas entradas, cómo
se comporta ante determinadas situaciones, etc.
Requisitos no funcionales: describen las características del sistema: fiabilidad,
mantenibilidad, sistema operativo, hardware, restricciones, limitaciones, etc.
Nota: al representar
estamos usando la notación
Yourdon.
Para representar un sistema se suelen usar varios DFDs siguiendo una estructura jerárquica. En
el nivel más alto de la jerarquía se suele representar un único proceso, identificado con un 0,
que representa el sistema completo. Se representan el proceso, los flujos de entrada y salida y
las entidades externas. Los almacenes no se representan en este nivel 0.
A continuación se descompone el proceso 0 en otro DFD en el que se representan las
funciones principales. El diagrama generado será un DFD de nivel 1. Los procesos de este DFD
se enumeran del 1 en adelante. En este nivel se representan los flujos de entrada y salida de
las entidades externas pero no las propias entidades externas. A partir de aquí, estas
entidades sólo se representarán si eso mejorara la comprensión del DFD.
Seguidamente se descompone cada uno de los procesos en nuevos procesos que representan
funciones más simples. Así podremos ver el sistema desde el ámbito general, pasando por
niveles intermedios, hasta el detalle.
El proceso enumerado como 1 se podría dividir en 3 subprocesos. Esto nos daría un DFD de
nivel 2. Al pasar de un nivel superior a uno inferior (nivel 1 a nivel 2) hay que asegurarse de
mostrar los flujos de entrada y salida del proceso de nivel anterior.
Se recomienda llegar como mucho al nivel 4 de descomposición de diagramas.
Los niveles de descomposición recomendados son:
Nivel 0: Diagrama de contexto
Nivel 1: Subsistemas
Nivel 2: Funciones de cada subsistema
Nivel 3: Subfunciones asociadas
Nivel 4: Procesos necesarios para el tratamiento de cada subfunción
Diseño estructurado
Es el diseño clásico. Produce un modelo de diseño con 4 elementos:
Diseño de datos: está basado en los datos y las relaciones definidos en el diagrama
entidad-relación y en la descripción detallada de los datos del diccionario de datos.
Diseño arquitectónico: usando el diagrama de flujo de datos establecemos una
estructura modular en el software. Entendemos que el programa está dividido en
componentes que pueden ser simples como un módulo o complicados como una base
de datos.
Diseño de la interfaz: describe cómo se comunica el software consigo mismo, con los
sistemas que interactúan con él y con las personas que lo usan. El resultado es la
creación de formatos de pantalla.
Diseño a nivel de componentes (diseño procedimental): se diseña cada componente
del software con un nivel de detalle tal que pueda usarse como guía a la hora de
generar código fuente. Para este diseño se usan representaciones gráficas.
Construcción repetitiva
Proporciona los bucles:
Diagrama de flujo
Herramienta muy usada para el diseño procedimental. Se utilizan los siguientes símbolos:
Para una condición se representa una caja para la parte SI y otra para la parte NO,
encima se indica la condición.
En las repetitivas, el proceso a repetir se encierra en una caja que está dentro de una
caja donde, en la parte superior (do-while) o inferior (repeat-until), se indica la
condición del bucle.
Tablas de decisión
A veces es necesario que un programa evalúe una condición compleja de condiciones y actúe
en consecuencia.
Las tablas de decisión permiten representar en forma de tabla las condiciones y las acciones
que se llevan a cabo dependiendo de esas condiciones.
Se dividen en 4 cuadrantes:
Ejemplo:
Pseudocódigo
Utiliza texto descriptivo para realizar el diseño de un algoritmo. Mezcla lenguaje natural con
estructuras sintácticas que incluyen algunas palabras clave (si, mientras, etc.) que permiten
construir las estructuras básicas de programación estructurada, declarar datos, definir
subprogramas y establecer características de modularidad.
Representación y ejemplo:
Diseño orientado a objetos
El diseño de software orientado a objetos (DOO) es complejo. Es necesario partir de un análisis
orientado a objetos (AOO).
En dicho análisis se definen todas las clases relevantes para el problema, las operaciones y los
atributos asociados, las relaciones y comportamientos y las comunicaciones entre clases.
Para el AOO y el DOO se utiliza UML. UML es un lenguaje de modelado basado en diagramas
que sirve para expresar modelos (representación de la realidad donde se ignoran detalles sin
importancia).
Codificación
Durante esta fase se realiza el proceso de programación.
Esto es tarea del programador, que tiene que cumplir con todos lo impuesto en las fases de
análisis y diseño.
Durante esta fase el código pasa por diferentes estados: fuente, objeto y ejecutable.
Código fuente
Conjunto de instrucciones necesarias para el funcionamiento de un programa escrito por los
programadores en algún editor de texto. Se escribe usando algún lenguaje de alto nivel.
Al completar los pasos anteriores tendremos un documento con la codificación de todos los
módulos, funciones, bibliotecas y procedimientos necesarios.
El código fuente tendrá que ser traducido a lenguaje máquina para que el ordenador lo pueda
entender y ejecutar.
Una característica del código fuente es que pueden dividirse por su licencia. Distinguimos dos
tipos:
Código objeto
Es un código intermedio entre el código fuente y el ejecutable, así que el ordenador no lo
puede leer.
Código ejecutable
Es el código binario resultante de enlazar el código objeto con ciertas rutinas y librerías
necesarias. Ese enlace lo realiza un software llamado linker (enlazador). Ese linker se
encuentra en una máquina virtual, que será la encargada de traducir el bytecode del
código objeto a código ejecutable.
Este código también se conoce como código máquina y es directamente legible por el
ordenador.
Máquinas virtuales
Es un tipo especial de software que separa el funcionamiento del ordenador del hardware.
Conseguir que las aplicaciones sean portables. Usando máquinas virtuales podremos
desarrollar y ejecutar una aplicación en cualquier equipo sin importar las
características del hardware.
Reservar memoria para los objetos que se crean y liberar la no utilizada.
Comunicarse con el sistema en el que se encuentra (huésped), para administrar el
control de los dispositivos hardware implicados en los procesos.
Cumplir las normas de seguridad de las aplicaciones.
Características de una máquina virtual:
Frameworks
Es una estructura de ayuda al programador que podemos usar para desarrollar proyectos sin
empezar desde cero.
Gracias a la ayuda que proporciona podemos estar más tiempo analizando los
requerimientos del sistema y las especificaciones de la aplicación, ya que la tarea
pesada de la programación la realiza el framework.
Ejemplos de frameworks:
Entornos de ejecución
Es un servicio de la máquina virtual o conjunto de utilidades que sirve como base software
para la ejecución de programas. En algunos casos se instala encima del sistema operativo o
viene integrado ya en él, en otros casos se instala como software independiente que funciona
por debajo de la aplicación.
El tiempo que tarda un programa en ejecutarse recibe el nombre de runtime.
El entorno está formado por la máquina virtual y las APIs. Se suelen distribuir en conjunto
porque tienen que ser compatibles.
El entorno hace de intermediario entre el código y el sistema operativo para poder ejecutar
aplicaciones. Si quisiéramos, además de ejecutar, desarrollar aplicaciones necesitaríamos
instalar un entorno de desarrollo ya que el entorno de ejecución no es suficiente.
Entornos de desarrollo
Vamos a explicarlos tomando como base el Java Runtime Environment.
Una máquina virtual Java (JVM), que interpretará el código de la aplicación escrito en
Java.
Bibliotecas de clase estándar que forman el API de Java.
Tanto la máquina virtual como las APIs de Java son consistentes entre sí, así que se
distribuyen conjuntamente.
Pruebas
Una vez obtenido el software tenemos que realizar pruebas.
Las pruebas se suelen realizar sobre un conjunto de datos de prueba, que consisten en un
conjunto seleccionado y predefinido de datos límite que queremos probar.
Pruebas unitarias: se prueban, una a una, las diferentes partes del software y se
comprueba su funcionamiento por separado. JUnit es el entorno de pruebas de Java.
Pruebas de integración: se realizan si tienen éxito las unitarias. Consisten en
comprobar el funcionamiento del sistema al completo.
La prueba final se suele llamar Beta Test y se realiza en el entorno de producción donde el
cliente utilizará el software.
Flujo de proceso para probar el software:
Para llevar a cabo el diseño de los casos de prueba se usan dos técnicas:
Explotación
Hay autores que consideran que explotación y mantenimiento son la misma etapa. Nosotros
vamos a diferenciarlas según el momento en que se realizan.
En la instalación los programas son transferidos al ordenador del cliente, donde son
configurados y verificados. Sería buena idea que los clientes estuvieran presentes durante la
instalación para que conozcan el planteamiento.
Es en este momento cuando se realizan las Beta Test, las últimas pruebas que se realizan en los
equipos finales bajo cargas normales de trabajo.
Una vez se ha realizado la configuración, la aplicación pasa a mano de los usuarios y comienza
la explotación del software en sí misma. Todo tiene que estar preparado antes de
presentárselo al cliente.
Mantenimiento
El software es cambiante y tendrá que actualizarse y evolucionar con el tiempo. Tendrá que
adaptarse a las mejoras de hardware del mercado y a situaciones nuevas que no existían
cuando el software se construyó.
También habrá que corregir los nuevos errores que vayan surgiendo para desarrollar nuevas
versiones mejores que las anteriores.
Debido a estas razones, se pacta con el cliente un servicio de mantenimiento (que supondrá un
coste temporal y económico).
Los tipos de cambios que hacen necesario el mantenimiento son los siguientes: