Tema 1 ED
Tema 1 ED
Tema 1 ED
- Software y
programa. Tipos de
software.
Caso práctico
Descripción de la imagen
Reflexiona
Hay varios sistemas operativos en el mercado: Linux, Windows, Mac OS X
etc. El más conocido es Windows. A pesar de eso, ¿por qué utilizamos
cada vez más Linux?
2.- Relación
hardware-software.
Caso práctico
Autoevaluación
Para fabricar un programa informático que se ejecuta en una
computadora:
Hay que escribir las instrucciones en código binario para que las entienda
el hardware.
En los puntos siguientes veremos como elegir un modelo de ciclo de vida para el
desarrollo de nuestro software.
Independientemente del modelo elegido, siempre hay una serie de etapas que
debemos seguir para construir software fiable y de calidad.
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.
Es muy importante dedicar los recursos necesarios en las primeras etapas del
desarrollo del software. Avanzar a las etapas finales sin un análisis y diseño libres
de errores, implicará que se propaguen durante toda la vida del proyecto y como
consecuencia el producto obtenido sea de mala calidad.
Autoevaluación
¿Crees que debemos esperar a tener completamente cerrada una
etapa para pasar a la siguiente?
Sí.
No.
3.1.- Análisis.
Caso práctico
En la reunión de BK acerca del nuevo proyecto Ada, la supervisora, dejó
bien claro que lo primero y más importante es tener claro qué queremos
que haga el software y con qué herramientas contamos: lo demás vendría
después, ya que si esto no está bien planteado, ese error se propagará a
todas las fases del proyecto.
Esta es la primera fase del proyecto. Una vez finalizada, pasamos a la siguiente
(diseño).
Funcionales No funcionales
..........
3.2.- Diseño.
Caso práctico
Juan está agobiado por el proyecto. Ya han mantenido comunicaciones con
el cliente y saben perfectamente qué debe hacer la aplicación. También
tiene una lista de las características hardware de los equipos de su cliente
y todos los requisitos. Tiene tanta información que no sabe por dónde
empezar.
En este punto, ya sabemos lo que hay que hacer, el análisis ya ha definido los
requisitos y el documento de análisis arquitectónico identifica cómo dividir el
programa para afrontar su desarrollo, pero ¿Cómo hacerlo?.
Se debe dividir el sistema en partes y establecer qué relaciones habrá entre ellas.
Nota: en ocasiones, el diseño de arquitectura, que aquí ha sido tratado como una
labor a realizar en la fase de análisis, es considerado como una primera tarea de la
fase de diseño
Reflexiona
Según estimaciones, las organizaciones y empresas que crecen más son
las que más dinero invierten en sus diseños.
3.3.- Codificación.
Caso práctico
En BK, ya tienen el proyecto dividido en partes.
Ahora llega una parte clave: codificar los pasos y acciones a seguir para
que el ordenador los ejecute. En otras palabras, programar la aplicación.
Saben que no será fácil, pero afortunadamente cuentan con herramientas
CASE que les van a ser de gran ayuda. A Ana el gustaría participar, pero
cuando se habla de "código fuente", "ejecutable", etc. sabe que no tiene ni
idea y que no tendrá más remedio que estudiarlo si quiere colaborar en
esta fase del proyecto.
En esta fase se hace una traducción de todo el código fuente con el objetivo de
pasarlo a lenguaje máquina. Esta traducción es absolutamente necesaria debido a
que es el lenguaje que entiende el ordenador.
3.5.- Pruebas.
Caso práctico
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
PRUEBAS DE INTEGRACIÓN
Autoevaluación
Si las pruebas unitarias se realizan con éxito, ¿es obligatorio realizar
las de integración?
3.6.- Explotación.
Caso práctico
Llega el día de la cita con la cadena hotelera. Ada y Juan se dirigen al hotel
sonde se va a instalar y configurar la aplicación. Si todo va bien, se irá
implementando en los demás hoteles de la cadena.
Después de todas las fases anteriores, una vez que las pruebas nos demuestran
que el software es fiable, carece de errores y hemos documentado todas las fases,
el siguiente paso es la explotación.
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.
Reflexiona
Realizas un proyecto software por vez primera y no te das cuenta de
documentarlo. Consigues venderlo a buen precio a una empresa. Al cabo
de un par de meses te piden que actualices algunas de las funciones, para
tener mayor funcionalidad. Estás contento o contenta porque eso significa
un ingreso extra. Te paras un momento...¿Dónde están los códigos? ¿Qué
hacía exactamente la aplicación? ¿Cómo se diseñó? No lo recuerdas...
Probablemente hayas perdido un ingreso extra y unos buenos clientes.
3.7.-
Mantenimiento.
Caso práctico
Ada reúne por última vez durante estas semanas a su equipo. Todos
celebran que el proyecto se ha implementado con éxito y que sus clientes
han quedado satisfechos.
Sería lógico pensar que con la entrega de nuestra aplicación (la instalación y
configuración de nuestro proyecto en los equipos del cliente) hemos terminado
nuestro trabajo.
Además, siempre surgen errores que habrá que ir corrigiendo y nuevas versiones
del producto mejores que las anteriores.
Los tipos de cambios que hacen necesario el mantenimiento del software son los
siguientes:
Autoevaluación
¿Cuál es, en tu opinión, la etapa más importante del desarrollo de
software?
El análisis de requisitos.
La codificación.
La explotación y el mantenimiento.
3.8.-
Documentación.
Caso práctico
Ada ha quedado dentro de dos días con su cliente. Pregunta a María por
todos los dossiers de documentación. La pálida expresión de la joven hace
que Ada arda en desesperación: "—¿No habéis documentado las etapas?
¿Cómo voy a explicarle al cliente y sus empleados el funcionamiento del
software? ¿Cómo vamos a realizar su mantenimiento?".
Una correcta documentación permitirá pasar de una etapa a otra de forma clara y
definida. También se hace imprescindible para la reutilización de parte de los
programas en otras aplicaciones, siempre y cuando se desarrollen con diseño
modular.
Diversos autores han planteado distintos modelos de ciclos de vida, pero los más
conocidos y utilizados son los citados a continuación:
1. Modelo en Cascada
Es el modelo de vida clásico del software.
Se pasa de unas etapas a otras sin retorno posible, cualquier error en las
fases iniciales ya no será subsanable aunque sea detectado más adelante.
Este escaso margen de error lo hace prácticamente imposible de utilizar. Sólo
es aplicable en pequeños desarrollos.
Todos los requisitos son planteados para hacer un único recorrido del
proyecto.
Características:
-Requiere conocimiento previo y absoluto de los requerimientos del sistema.
-No hay retornos en las etapas: si hay algún error durante el proceso hay que
empezar desde el principio.
-No permite modificaciones ni actualizaciones del software.
-Es un modelo utópico.
3. Modelos Evolutivos
Son más modernos que los anteriores. Tienen en cuenta la naturaleza
cambiante y evolutiva del software.
Distinguimos dos variantes:
1. Modelo Iterativo Incremental
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.
Cada iteración cubre una parte de los requisitos requeridos, generando
versiones parciales y crecientes para el producto software en
desarrollo. Cada versión obtenida será el punto de partida para la
siguiente iteración.
Los incrementos a considerar en cada vuelta ya vienen establecidos
desde las etapas iniciales.
Características:
-Actualmente, no se ponen en el mercado los productos completos,
sino versiones.
-Permite una evolución temporal.
-Vemos que se trata de varios ciclos en cascada que se repiten y se
refinan en cada incremento.
-Las sucesivas versiones del producto son cada vez más completas
hasta llegar al producto final.
2. Modelo en Espiral
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.
Características:
-Se divide en 6 zonas llamadas regiones de tareas: Comunicación con
el cliente, Planificación, Análisis de riesgos, Representación de la
aplicación, Codificación y explotación y Evaluación del cliente.
-Se adapta completamente a la naturaleza evolutiva del software.
-Reduce los riesgos antes de que sean problemáticos.
Autoevaluación
Si queremos construir una aplicación pequeña, y se prevé que no
sufrirá grandes cambios durante su vida, ¿sería el modelo de ciclo de
vida en espiral el más recomendable?
Sí.
No.
5.- Herramientas de
apoyo al desarrollo
del software.
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.
¿En qué fases del proceso nos pueden ayudar? En el diseño del proyecto, en la
codificación de nuestro diseño a partir de su apariencia visual, detección de
errores…
CLASIFICACIÓN
Normalmente, las herramientas CASE se clasifican en función de las fases del ciclo
de vida del software en la que ofrecen ayuda:
Pulsa este enlace para ver una ampliación de los tipos y ayudas concretas de la
herramientas CASE.
6.- Frameworks.
Un Framework es una estructura de ayuda al programador, en base a la cual
podemos desarrollar proyectos sin partir desde cero.
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:
7.- Lenguajes de
programación.
Caso práctico
Una de los aspectos del proyecto que más preocupa a Ada es la elección
del lenguaje de programación a utilizar.
Necesita tener muy claros los requerimientos del cliente para enfocar
correctamente la elección, pues según sean éstos unos lenguajes serán
más efectivos que otros.
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. Es decir, un lenguaje de
programación es el conjunto de:
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.
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.
7.1.-
Características de
los lenguajes de
programación
Características de los Lenguajes de Programación
● 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.
○ Necesita traducción al lenguaje máquina.
○ 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.
7.2.- Clasificación
de los lenguajes de
programación
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).
Si el programa no está escrito en dicho lenguaje habrá que hacer una traducción
para que el ordenador lo entienda.
Para obtener las ventajas de ambos tipos de lenguajes, algunos combinan estas
dos tareas:
Esto es lo que realiza, por ejemplo, Java. A estos lenguajes se les llama lenguajes
intermediarios.
javac java
Autoevaluación
Para obtener código fuente a partir de toda la información necesaria
del problema:
Autoevaluación
Relaciona los tipos de código con su característica más relevante,
escribiendo el número asociado a la característica en el hueco
correspondiente.
Tipo de Relación. Características.
código.
Caso práctico
Saben que el programa que realicen pasará por varias fases antes de ser
implementado en los equipos del cliente. Todas esas fases van a producir
transformaciones en el código. ¿Qué características irá adoptando el
código a medida que avanza por el proceso de codificación?
7.2.1.- Lenguajes
de programación
estructurados.
● Sentencias secuenciales.
● Sentencias selectivas (condicionales).
● Sentencias repetitivas (iteraciones o bucles).
INCONVENIENTES
7.2.2.- Lenguajes
de programación
orientados a
objetos.
Después de comprender que la programación estructurada no es útil cuando los
programas se hacen muy largos, es necesaria otra técnica de programación que
solucione este inconveniente. Nace así la Programación Orientada a Objetos (en
adelante, P.O.O.).
Clase
Objeto
Mensaje
Método
Evento (sistema)
Propiedad o atributo
Estado interno
Abstracción
Encapsulamiento
Poliformismo
Herencia
Algunos lenguajes orientados a objetos son: Ada, C++ (C plus plus), VB.NET, C#,
Java, PowerBuilder, etc.
8.- Máquinas
virtuales.
8.1.- Entornos de
ejecución.
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í.
Autoevaluación
Señala la afirmación falsa respecto de los entornos de ejecución:
Su principal utilidad es la de permitir el desarrollo rápido de aplicaciones.
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.
Una vez descargado, comienza el proceso de instalación, siguiendo los pasos del
asistente.
Debes conocer
El proceso de descarga, instalación y configuración del entorno de
ejecución de programas. En el siguiente enlace, se explican los pasos para
hacerlo bajo el sistema operativo Linux.
Anexo I.-
Sentencias de
control de la
programación
estructurada.
SENTENCIAS SECUENCIALES
Las sentencias secuenciales son aquellas que se ejecutan una detrás de la otra,
según el orden en que hayan sido escritas.
Ejemplo en lenguaje C:
int numero_entero;
espacio=espacio_inicio + veloc*tiempo;
then → Todas las acciones que se encuentren tras esta palabra reservada se
ejecutarán si la condición del if es cierta (en C, se omite esta palabra).
else → Todas las acciones que se encuentren tras esta otra palabra reservada se
ejecutarán si la condición de if es falsa.
Ejemplo en lenguaje C:
if (a >= b)
c= a-b;
else
c=a+b;
Un bucle iterativo de una serie de acciones harán que éstas se repitan mientras o
hasta que una determinada condición sea falsa (o verdadera).
done → marca el fin de las acciones que se van a repetir mientras estemos dentro
del bucle (en C, se omite esta palabra).
Ejemplo en lenguaje C:
int num;
num = 0;
num = num + 1;
};