Tema Uno Desarrollo
Tema Uno Desarrollo
Tema Uno Desarrollo
Es de sobra conocido que el ordenador se compone de dos partes bien diferenciadas: hardware y
software.
El software es el conjunto de programas informáticos que actúan sobre el hardware para ejecutar
lo que el usuario desee.
En este tema, nuestro interés se centra en las aplicaciones informáticas: cómo se desarrollan y
cuáles son las fases por las que necesariamente han de pasar.
A lo largo de esta primera unidad vas a aprender los conceptos fundamentales de software y las
fases del llamado ciclo de vida de una aplicación informática.
También aprenderás a distinguir los diferentes lenguajes de programación y los procesos que
ocurren hasta que el programa funciona y realiza la acción deseada.
Existe una relación indisoluble entre éste y el software, ya que necesitan estar instalados y
configurados correctamente para que el equipo funcione.
El software se ejecutará sobre los dispositivos físicos.
La primera arquitectura hardware con programa almacenado se estableció en 1946 por John Von
Neumann:
Esta relación software-hardware la podemos poner de manifiesto desde dos puntos de vista:
Todas las aplicaciones necesitan recursos hardware durante su ejecución (tiempo de CPU, espacio
en memoria RAM, tratamiento de interrupciones, gestión de los dispositivos de Entrada/Salida,
etc.). Será siempre el sistema operativo el encargado de controlar todos estos aspectos de manera
"oculta" para las aplicaciones (y para el usuario).
Ya hemos dicho que una aplicación no es otra cosa que un conjunto de programas, y que éstos
están escritos en algún lenguaje de programación que el hardware del equipo debe interpretar y
ejecutar.
3. Desarrollo de Software
Entendemos por Desarrollo de Software todo el proceso que ocurre desde que se concibe una idea
hasta que un programa está implementado en el ordenador y funcionando.
El proceso de desarrollo, que en un principio puede parecer una tarea simple, consta de una serie
de pasos de obligado cumplimiento, pues sólo así podremos garantizar que los programas creados
son eficientes, fiables, seguros y responden a las necesidades de los usuarios finales (aquellos que
van a utilizar el programa).
Ya hemos visto que la serie de pasos a seguir para desarrollar un programa es lo que se conoce
como Ciclo de Vida del Software.
Cada etapa vendrá explicada con más detalle en el punto de la presente unidad dedicado a las
fases del desarrollo y ejecución del software.
Diversos autores han planteado distintos modelos de ciclos de vida, pero los más conocidos y
utilizados son los que aparecen a continuación:
1. Modelo en Cascada
Es prácticamente imposible que se pueda utilizar, ya que requiere conocer de antemano todos los
requisitos del sistema. Sólo es aplicable a pequeños desarrollos, ya que las etapas pasan de una a
otra sin retorno posible. (se presupone que no habrá errores ni variaciones del software).
Es uno de los modelos más utilizados. Proviene del modelo anterior, pero se introduce una
realimentación entre etapas, de forma que podamos volver atrás en cualquier momento para
corregir, modificar o depurar algún aspecto. No obstante, si se prevén muchos cambios durante el
desarrollo no es el modelo más idóneo.
Es el modelo perfecto si el proyecto es rígido (pocos cambios, poco evolutivo) y los requisitos
están claros.
3. Modelos Evolutivos
Son más modernos que los anteriores. Tienen en cuenta la naturaleza cambiante y evolutiva del
software.
Está basado en el modelo en cascada con realimentación, donde las fases se repiten y refinan, y
van propagando su mejora a las fases siguientes.
Es una combinación del modelo anterior con el modelo en cascada. En él, el software se va
construyendo repetidamente en forma de versiones que son cada vez mejores, debido a que
incrementan la funcionalidad en cada versión. Es un modelo bastante complejo.
En la práctica, para llevar a cabo varias de las etapas vistas en el punto anterior contamos con
herramientas informáticas, cuya finalidad principal es automatizar las tareas y ganar fiabilidad y
tiempo.
Esto nos va a permitir centrarnos en los requerimientos del sistema y el análisis del mismo, que
son las causas principales de los fallos del software.
La tecnología CASE trata de automatizar las fases del desarrollo de software para que mejore la
calidad del proceso y del resultado final.
Normalmente, las herramientas CASE se clasifican en función de las fases del ciclo de vida del
software en la que ofrecen ayuda:
Ejemplos de herramientas CASE libres son: ArgoUML, Use Case Maker, ObjectBuilder…
4. Lenguajes de Programación
Ya dijimos anteriormente que los programas informáticos están escritos usando algún lenguaje de
programación. Por tanto, podemos definir un Lenguaje de Programación como un idioma creado
de forma artificial, formado por un conjunto de símbolos y normas que se aplican sobre un
alfabeto para obtener un código, que el hardware de la computadora pueda entender y ejecutar.
Los lenguajes de programación son los que nos permiten comunicarnos con el hardware del
ordenador.
En otras palabras, es muy importante tener muy clara la función de los lenguajes de
programación. Son los instrumentos que tenemos para que el ordenador realice las tareas que
necesitamos.
Hay multitud de lenguajes de programación, cada uno con unos símbolos y unas estructuras
diferentes. Además, cada lenguaje está enfocado a la programación de tareas o áreas
determinadas. Por ello, la elección del lenguaje a utilizar en un proyecto es una cuestión de
extrema importancia.
Los lenguajes de programación han sufrido su propia evolución, como se puede apreciar en la
figura siguiente:
● Lenguaje máquina:
○ Sus instrucciones son combinaciones de unos y ceros.
○ Es el único lenguaje que entiende directamente el ordenador. (No necesita
traducción).
○ Fue el primer lenguaje utilizado.
○ Es único para cada procesador (no es portable de un equipo a otro).
○ Hoy día nadie programa en este lenguaje.
● Lenguaje ensamblador:
○ Sustituyó al lenguaje máquina para facilitar la labor de programación.
○ En lugar de unos y ceros se programa usando mnemotécnicos (instrucciones
complejas).
○ Necesita traducción al lenguaje máquina para poder ejecutarse.
○ Sus instrucciones son sentencias que hacen referencia ala ubicación física de los
archivos en el equipo.
○ Es difícil de utilizar.
● Lenguaje de alto nivel basados en código:
○ Sustituyeron al lenguaje ensamblador para facilitar más la labor de programación.
○ En lugar de mnemotécnicos, se utilizan sentencias y órdenes derivadas del idioma
inglés. (Necesita traducción al lenguaje máquina).
○ Son más cercanos al razonamiento humano.
○ Son utilizados hoy día, aunque la tendencia es que cada vez menos.
● Lenguajes visuales:
○ Están sustituyendo a los lenguajes de alto nivel basados en código.
○ En lugar de sentencias escritas, se programa gráficamente usando el ratón y
diseñando directamente la apariencia del software.
○ Su correspondiente código se genera automáticamente.
○ Necesitan traducción al lenguaje máquina.
○ Son completamente portables de un equipo a otro.
Ya sabemos que los lenguajes de programación han evolucionado, y siguen haciéndolo, siempre
hacia la mayor usabilidad de los mismos (que el mayor número posible de usuarios lo utilicen y
exploten).
CARACTERÍSTICAS
Aunque los requerimientos actuales de software son bastante más complejos de lo que la técnica
de programación estructurada es capaz, es necesario por lo menos conocer las bases de los
Lenguajes de Programación estructurados, ya que a partir de ellos se evolucionó hasta otros
lenguajes y técnicas más completas (orientada a eventos u objetos) que son las que se usan
actualmente.
● Sentencias secuenciales.
● Sentencias selectivas (condicionales).
● Sentencias repetitivas (iteraciones o bucles).
La programación estructurada fue de gran éxito por su sencillez a la hora de construir y leer
programas. Fue sustituida por la programación modular, que permitía dividir los programas
grandes en trozos más pequeños (siguiendo la conocida técnica "divide y vencerás"). A su vez,
luego triunfaron los lenguajes orientados a objetos y de ahí a la programación visual (siempre es
más sencillo programar gráficamente que en código, ¿no crees? ).
INCONVENIENTES
● Todo el programa se concentra en un único bloque (si se hace demasiado grande es difícil
manejarlo).
● No permite reutilización eficaz de código, ya que todo va "en uno". Es por esto que a la
programación estructurada le sustituyó la programación modular, donde los programas se
codifican por módulos y bloques, permitiendo mayor funcionalidad.
Los lenguajes de programación orientados a objetos tratan a los programas no como un conjunto
ordenado de instrucciones (tal como sucedía en la programación estructurada) sino como un
conjunto de objetos que colaboran entre ellos para realizar acciones.
Razones:
● El código es reutilizable.
● Si hay algún error, es más fácil de localizar y depurar en un objeto que en un programa
entero.
Características:
● Los objetos del programa tendrán una serie de atributos que los diferencian unos de otros.
● Se define clase como el prototipo de objetos con características similares.
● Mediante los llamados métodos, los objetos se comunican con otros produciéndose un
cambio de estado de los mismos.
● Los objetos son, pues, como unidades individuales e indivisibles que forman la base de
este tipo de programación.
Principales lenguajes orientados a objetos: Ada, C++, VB.NET, Delphi, Java, PowerBuilder,
etc.
5.1 Análisis
Esta es la primera fase del proyecto. Una vez finalizada, pasamos a la siguiente (diseño).
Es la primera etapa del proyecto, la más complicada y la que más depende de la capacidad
del analista.
Requisitos:
● Funcionales: Qué funciones tendrá que realizar la aplicación. Qué respuesta dará la
aplicación ante todas las entradas. Cómo se comportará la aplicación en situaciones
inesperadas.
● No funcionales: Tiempos de respuesta del programa, legislación aplicable, tratamiento
ante la simultaneidad de peticiones, etc.
Lo fundamental es la buena comunicación entre el analista y el cliente para que la aplicación que
se va a desarrollar cumpla con sus expectativas.
Durante esta fase, donde ya sabemos lo que hay que hacer, el siguiente paso es ¿Cómo hacerlo?
Se debe dividir el sistema en partes y establecer qué relaciones habrá entre ellas.
Esta tarea la realiza el programador y tiene que cumplir exhaustivamente con todos los datos
impuestos en el análisis y en el diseño de la aplicación.
● Código Fuente: es el escrito por los programadores en algún editor de texto. Se escribe
usando algún lenguaje de programación de alto nivel y contiene el conjunto de
instrucciones necesarias.
● Código Objeto: es el código binario resultado de compilar el código fuente.
La compilación es la traducción de una sola vez del programa, y se realiza utilizando un
compilador. La interpretación es la traducción y ejecución simultánea del programa línea
a línea.
El código objeto no es directamente inteligible por el ser humano, pero tampoco por la
computadora. Es un código intermedio entre el código fuente y el ejecutable y sólo existe
si el programa se compila, ya que si se interpreta (traducción línea a línea del código) se
traduce y se ejecuta en un solo paso.
● Código Ejecutable: Es el código binario resultante de enlazar los archivos de código
objeto con ciertas rutinas y bibliotecas necesarias. El sistema operativo será el encargado
de cargar el código ejecutable en memoria RAM y proceder a ejecutarlo. También es
conocido como código máquina y ya sí es directamente inteligible por la computadora.
El código fuente es el conjunto de instrucciones que la computadora deberá realizar, escritas por
los programadores en algún lenguaje de alto nivel.
Este conjunto de instrucciones no es directamente ejecutable por la máquina, sino que deberá ser
traducido al lenguaje máquina, que la computadora será capaz de entender y ejecutar.
Puesto que, como hemos dicho antes, este código no es inteligible por la máquina, habrá que
TRADUCIRLO, obteniendo así un código equivalente pero ya traducido a código binario que se
llama código objeto. Que no será directamente ejecutable por la computadora si éste ha sido
compilado.
Un aspecto importante a tener en cuenta es su licencia. Así, en base a ella, podemos distinguir dos
tipos de código fuente:
● Código fuente abierto. Es aquel que está disponible para que cualquier usuario pueda
estudiarlo, modificarlo o reutilizarlo.
● Código fuente cerrado. Es aquel que no tenemos permiso para editarlo.
5.5.2 Objeto
Es el resultado de traducir código fuente a un código equivalente formado por unos y ceros que
aún no puede ser ejecutado directamente por la computadora.
Consiste en un bytecode (código binario) que está distribuido en varios archivos, cada uno de los
cuales corresponde a cada programa fuente compilado.
Sólo se genera código objeto una vez que el código fuente está libre de errores sintácticos y
semánticos.
El proceso de traducción de código fuente a código objeto puede realizarse de dos formas:
El código objeto es código binario, pero no puede ser ejecutado por la computadora
5.5.3 Ejecutable
El código ejecutable, resultado de enlazar los archivos de código objeto, consta de un único
archivo que puede ser directamente ejecutado por la computadora. No necesita ninguna
aplicación externa. Este archivo es ejecutado y controlado por el sistema operativo.
Para obtener un sólo archivo ejecutable, habrá que enlazar todos los archivos de código objeto, a
través de un software llamado linker (enlazador) y obtener así un único archivo que ya sí es
ejecutable directamente por la computadora.
En el esquema de generación de código ejecutable, vemos el proceso completo para la generación
de ejecutables.
A partir de un editor, escribimos el lenguaje fuente con algún Lenguaje de programación. (En el
ejemplo, se usa Java).
Ese bytecode, a través de la máquina virtual (se verá en el siguiente punto), pasa a código
máquina, ya directamente ejecutable por la computadora.
Una máquina virtual es un tipo especial de software cuya misión es separar el funcionamiento del
ordenador de los componentes hardware instalados. Existen dos tipos de máquinas virtuales
(puedes encontrar una explicación en detalle en el apartado “para saber más” de esta página). En
el resto del tema, nos referimos a máquinas virtuales de proceso, es decir, aquellas en las que es el
entorno de programación el que aísla del sistema operativo.
Esta capa de software desempeña un papel muy importante en el funcionamiento de los lenguajes
de programación, tanto compilados como interpretados.
Con el uso de máquinas virtuales podremos desarrollar y ejecutar una aplicación sobre cualquier
equipo, independientemente de las características concretas de los componentes físicos
instalados. Esto garantiza la portabilidad de las aplicaciones.
Cuando el código fuente se compila se obtiene código objeto (bytecode, código intermedio).
Para ello, la máquina virtual aísla la aplicación de los detalles físicos del equipo en cuestión.
Funciona como una capa de software de bajo nivel y actúa como puente entre el bytecode de la
aplicación y los dispositivos físicos del sistema.
La máquina virtual actúa de puente entre la aplicación y el hardware concreto del equipo
donde se instale.
5.5.1 Frameworks
Se trata de una plataforma software donde están definidos programas soporte, bibliotecas,
lenguaje interpretado, etc., que ayuda a desarrollar y unir los diferentes módulos o partes de un
proyecto.
Con el uso de framework podemos pasar más tiempo analizando los requerimientos del sistema y
las especificaciones técnicas de nuestra aplicación, ya que la tarea laboriosa de los detalles de
programación queda resuelta.
Ejemplos de Frameworks:
Un entorno de ejecución es un servicio de máquina virtual que sirve como base software para la
ejecución de programas. En ocasiones pertenece al propio sistema operativo, pero también se
puede instalar como software independiente que funcionará por debajo de la aplicación.
El Entorno de Ejecución está formado por la máquina virtual y los API's (bibliotecas de clases
estándar, necesarias para que la aplicación, escrita en algún Lenguaje de Programación pueda ser
ejecutada). Estos dos componentes se suelen distribuir conjuntamente, porque necesitan ser
compatibles entre sí.
Concepto.
Componentes.
● Una Máquina virtual Java (JMV o JVM si consideramos las siglas en inglés), que es el
programa que interpreta el código de la aplicación escrito en Java.
● Bibliotecas de clase estándar que implementan el API de Java.
● Las dos: JMV y API de Java son consistentes entre sí, por ello son distribuidas
conjuntamente.
Lo primero es descargarnos el programa JRE. (Java2 Runtime Environment JRE 1.6.0.21). Java
es software libre, por lo que podemos descargarnos la aplicación libremente.
Una vez descargado, comienza el proceso de instalación, siguiendo los pasos del asistente.
5.6 Pruebas
Una vez obtenido el software, la siguiente fase del ciclo de vida es la realización de pruebas.
Entre todas las pruebas que se efectúan sobre el software podemos distinguir básicamente:
PRUEBAS UNITARIAS
Consisten en probar, una a una, las diferentes partes de software y comprobar su funcionamiento
(por separado, de manera independiente). JUnit es el entorno de pruebas para Java.
PRUEBAS DE INTEGRACIÓN
Se realizan una vez que se han realizado con éxito las pruebas unitarias y consistirán en
comprobar el funcionamiento del sistema completo: con todas sus partes interrelacionadas.
La prueba final se denomina comúnmente Beta Test, ésta se realiza sobre el entorno de
producción donde el software va a ser utilizado por el cliente (a ser posible, en los equipos del
cliente y bajo un funcionamiento normal de su empresa).
5.7 Documentación
¿Por qué hay que documentar todas las fases del proyecto?
Para dar toda la información a los usuarios de nuestro software y poder acometer futuras
revisiones del proyecto.
Tenemos que ir documentando el proyecto en todas las fases del mismo, para pasar de una a otra
de forma clara y definida. Una correcta documentación permitirá la reutilización de parte de los
programas en otras aplicaciones, siempre y cuando se desarrollen con diseño modular.
En el proceso de instalación, los programas son transferidos al computador del usuario cliente y
posteriormente configurados y verificados.
Es recomendable que los futuros clientes estén presentes en este momento e irles comentando
cómo se va planteando la instalación.
En este momento, se suelen llevan a cabo las Beta Test, que son las últimas pruebas que se
realizan en los propios equipos del cliente y bajo cargas normales de trabajo.
Es muy importante tenerlo todo preparado antes de presentarle el producto al cliente: será el
momento crítico del proyecto.