Desarrollo de Software y Lenguajes
Desarrollo de Software y Lenguajes
Caso práctico
En BK Programación todos han vuelto ya de sus vacaciones.
Les espera un septiembre agitado, pues acaban de recibir una petición por parte de una cadena hotelera para desarrollar
un proyecto software.
Ada, la supervisora de proyectos de BK Programación, se reúne con Juan y María (trabajadores de la empresa) para
empezar a planificar el proyecto.
Ana, cuya especialidad es el diseño gráfico de páginas web, acaba de terminar el Ciclo de Grado Medio en Sistemas
Microinformáticos y Redes y realizó la FCT en BK Programación. Trabaja en la empresa ayudando en los diseños, y
aunque está contenta con su trabajo, le gustaría participar activamente en todas las fases en el proyecto. El problema es
que carece de los conocimientos necesarios.
Antonio se ha enterado de la posibilidad de estudiar el nuevo Ciclo de Grado Superior de Diseño de Aplicaciones
Multiplataforma a distancia, y está dispuesta a hacerlo. (No tendría que dejar el trabajo).
Le comenta sus planes a su amigo Antonio (que tiene conocimientos básicos de informática), y éste se une a ella.
El software es el conjunto de programas informáticos que actúan sobre el hardware para ejecutar lo que el usuario desee.
El sistema operativo es el software base que ha de estar instalado y configurado en nuestro ordenador para que las
aplicaciones puedan ejecutarse y funcionar. Son ejemplos de sistemas operativos: Windows, Linux, Mac OS X ...
El software de programación es el conjunto de herramientas que nos permiten desarrollar programas informáticos, y
las aplicaciones informáticas son un conjunto de programas que tienen una finalidad más o menos concreta. Son
ejemplos de aplicaciones: un procesador de textos, una hoja de cálculo, el software para reproducir música, un videojuego,
etc.
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.
El software de aplicación donde se incluyen aplicaciones de usuario final tales como procesadores de textos, hojas de cálculo o juegos.
El middleware controla y coordina los sistemas distribuidos.
Los lenguajes de programación definen la sintaxis de los programas de ordenador. Por ejemplo, muchas aplicaciones bancarias, o de
adultos, fueron escritos en el lenguaje COBOL, originalmente inventado en 1959. Las nuevas aplicaciones se escriben a menudo en
lenguajes de programación más modernos.
El software del sistema incluye los sistemas operativos, que rigen los recursos informáticos. Hoy en día hay grandes aplicaciones que
se ejecutan en equipos remotos como los sitios web se considera que el software del sistema, porque la interfaz del usuario final es
generalmente a través de una interfaz de usuario gráfica (GUI), como un navegador web.
Testware es un software para pruebas de hardware o un paquete de software.
Los controladores de dispositivos, tales como discos duros, impresoras, unidades de CD o monitores de ordenador.
Las herramientas de programación son tipos de software que ayudan a realizar tareas de computación en cualquier categoría
mencionada anteriormente.
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
Después de saber ya diferenciar los distintos tipos de software, Ana se le plantea otra cuestión: El software, sea del tipo
que sea, se ejecuta sobre los dispositivos físicos del ordenador. ¿Qué relación hay entre ellos?
Como sabemos, al conjunto de dispositivos físicos que conforman un ordenador se le denomina hardware.
Existe una relación indisoluble entre éste y el software, ya que necesitan estar instalados y configurados correctamente
para que el equipo funcione.
El sistema operativo es el encargado de coordinar al hardware durante el funcionamiento del ordenador, actuando como
intermediario entre éste y las aplicaciones que están corriendo en un momento dado.
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.
Hay multitud de lenguajes de programación diferentes (como ya veremos en su momento). Sin embargo, todos tienen algo
en común: estar escritos con sentencias de un idioma que el ser humano puede aprender y usar fácilmente. Por otra parte,
el hardware de un ordenador sólo es capaz de interpretar señales eléctricas (ausencias o presencias de tensión) que, en
informática, se traducen en secuencias de 0 y 1 (código binario).
Esto nos hace plantearnos una cuestión: ¿Cómo será capaz el ordenador de "entender" algo escrito en un lenguaje que no
es el suyo?.
Como veremos a lo largo de esta unidad, tendrá que pasar algo (un proceso de traducción de código) para que el
ordenador ejecute las instrucciones escritas en un lenguaje de programación.
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.
Sólo es necesario escribir el programa en algún lenguaje de programación y se ejecuta directamente.
Hay que escribir el programa en algún Lenguaje de Programación y contar con herramientas software que
lo traduzcan a código binario.
Los programas informáticos no se pueden escribir: forman parte de los sistemas operativos
3.- Desarrollo de software.
Caso práctico
En BK programación ya están manos a la obra. Ada reúne a toda su plantilla para desarrollar el nuevo proyecto.
Ella sabe mejor que nadie que no será sencillo y que habrá que pasar por una serie de etapas. Ana no quiere perderse
la reunión, quiere descubrir por qué hay que tomar tantas anotaciones y tantas molestias antes incluso de empezar.
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).
Como veremos con más detenimiento a lo largo de la unidad, el desarrollo de software es un proceso que conlleva una
serie de pasos. Genéricamente, estos pasos son los siguientes:
Como vamos a ver en el siguiente punto, según el orden y la forma en que se lleven a cabo las etapas hablaremos de
diferentes ciclos de vida del software.
La construcción de software es un proceso que puede llegar a ser muy complejo y que exige gran coordinación y
disciplina del grupo de trabajo que lo desarrolle.
Reflexiona
Según estimaciones, el 26% de los grandes proyectos de software fracasan, el 48% deben modificarse drásticamente y
sólo el 26% tienen rotundo éxito. La principal causa del fracaso de un proyecto es la falta de una buena planificación de
las etapas y mala gestión de los pasos a seguir. ¿Por qué el porcentaje de fracaso es tan grande? ¿Por qué piensas
que estas causas son tan determinantes?
. Porque los errores en la planificación inicial se propagarán en cascada al resto de etapas del desarrollo.
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:
Siempre se debe aplicar un modelo de ciclo de vida al desarrollo de cualquier proyecto software.
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.
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 el diseño del proyecto, en la codificación de nuestro diseño a partir de su apariencia visual, detección de errores…
El desarrollo rápido de aplicaciones o RAD es un proceso de desarrollo de software que comprende el desarrollo iterativo,
la construcción de prototipos y el uso de utilidades CASE. Hoy en día se suele utilizar para referirnos al desarrollo rápido de
interfaces gráficas de usuario o entornos de desarrollo integrado completos.
La tecnología CASE trata de automatizar las fases del desarrollo de software para que mejore la calidad del proceso y del
resultado final.
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:
En el siguiente enlace se presenta una ampliación de los tipos y ayudas concretas de la herramientas CASE.
Ayudas concretas de CASE.
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.
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:
o Sus instrucciones son combinaciones de unos y ceros.
o Es el único lenguaje que entiende directamente el ordenador. (No necesita traducción).
o Fue el primer lenguaje utilizado.
o Es único para cada procesador (no es portable de un equipo a otro).
o Hoy día nadie programa en este lenguaje.
Lenguaje ensamblador:
o Sustituyó al lenguaje máquina para facilitar la labor de programación.
o En lugar de unos y ceros se programa usando mnemotécnicos (instrucciones complejas).
o Necesita traducción al lenguaje máquina para poder ejecutarse.
o Sus instrucciones son sentencias que hacen referencia ala ubicación física de los archivos en el equipo.
o Es difícil de utilizar.
Lenguaje de alto nivel basados en código:
o Sustituyeron al lenguaje ensamblador para facilitar más la labor de programación.
o En lugar de mnemotécnicos, se utilizan sentencias y órdenes derivadas del idioma inglés. (Necesita
traducción al lenguaje máquina).
o Son más cercanos al razonamiento humano.
o Son utilizados hoy día, aunque la tendencia es que cada vez menos.
Lenguajes visuales:
o Están sustituyendo a los lenguajes de alto nivel basados en código.
o En lugar de sentencias escritas, se programa gráficamente usando el ratón y diseñando directamente la
apariencia del software.
o Su correspondiente código se genera automáticamente.
o Necesitan traducción al lenguaje máquina.
o Son completamente portables de un equipo a otro.
La elección del lenguaje de programación para codificar un programa dependerá de las características del
problema a resolver.
CONCEPTO
CARACTERÍSTICAS
Podemos clasificar los distintos tipos de Lenguajes de Programación en base a distintas 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.
La programación estructurada se define como una técnica para escribir lenguajes de programación que permite sólo el uso
de tres tipos de sentencias o estructuras de control:
Sentencias secuenciales.
Sentencias selectivas (condicionales).
Sentencias repetitivas (iteraciones o bucles).
Los lenguajes de programación que se basan en la programación estructurada reciben el nombre de lenguajes de
programación estructurados.
En el siguiente enlace encontrarás un breve documento donde se explica para qué sirve cada sentencia de control con
unos sencillos ejemplos escritos usando el lenguaje C.
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.
En la P.O.O. los programas se componen de objetos independientes entre sí que colaboran para realizar acciones.
A pesar de eso, alrededor del 55% del software que producen las empresas se hace usando esta técnica.
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 una colección 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.
En el siguiente enlace hay un documento muy interesante de introducción a la programación orientada a objetos, en
concreto, del lenguaje C++.
Ya hemos visto en puntos anteriores que debemos 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.
Autoevaluación
8. ¿Crees que debemos esperar a tener completamente cerrada una etapa para pasar a la siguiente?
Sí
No (Recuerda que hay que dejar siempre una "puerta abierta" para volver atrás e introducir modificaciones.)
5.1.- Análisis.
Esta es la primera fase del proyecto. Una vez finalizada, pasamos a la siguiente (diseño).
Es la fase de mayor importancia en el desarrollo del proyecto y todo lo demás dependerá de lo bien detallada que esté.
También es la más complicada, ya que no está automatizada y depende en gran medida del analista que la realice.
Es la primera etapa del proyecto, la más complicada y la que más depende de la capacidad del analista.
¿Qué se hace en esta fase?
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.
Como ejemplo de requisitos funcionales, en la aplicación para nuestros clientes de las tiendas de cosmética, habría que
considerar:
5.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.
Decide hablar con Ada. Su supervisora, amable como siempre, le sugiere que empiece a dividir el problema en las partes
implicadas.
—Vale, Ada, pero, ¿cómo lo divido?
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.
En definitiva, debemos crear un modelo funcional-estructural de los requerimientos del sistema global, para poder dividirlo y
afrontar las partes por separado.
Design is not just what it looks like and feels like. Design is how it works.Steve Jobs ("El diseño no es sólo lo que parece y
cómo parece. Diseño es cómo se trabaja").
Reflexiona
Según estimaciones, las organizaciones y empresas que crecen más son las que más dinero invierten en sus diseños.
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.
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.
Los programas interpretados no producen código objeto. El paso de fuente a ejecutable es directo.
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?
5.4.1.- Fuente.
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.
Un aspecto muy importante en esta fase es la elaboración previa de un algoritmo, que lo definimos como un conjunto de
pasos a seguir para obtener la solución del problema. El algoritmo lo diseñamos en pseudocódigo y con él, la codificación
posterior a algún Lenguaje de Programación determinado será más rápida y directa.
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.
Autoevaluación
Para obtener código fuente a partir de toda la información necesaria del problema:
Se elige el Lenguaje de Programación más adecuado y se codifica directamente.
Se codifica y después se elige el Lenguaje de Programación más adecuado.
Se elige el Lenguaje de Programación más adecuado, se diseña un algoritmo y se codifica.
Muy bien. El diseño del algoritmo (los pasos a seguir) nos ayudará a que la codificación posterior se realice más
rápidamente y tenga menos errores.
5.4.2.- Objeto.
El código objeto es un código intermedio.
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:
a. Compilación: El proceso de traducción se realiza sobre todo el código fuente, en un solo paso. Se crea código
objeto que habrá que enlazar. El software responsable se llama compilador.
b. Interpretación: El proceso de traducción del código fuente se realiza línea a línea y se ejecuta simultáneamente.
No existe código objeto intermedio. El softwareresponsable se llama intérprete. El proceso de traducción es más
lento que en el caso de la compilación, pero es recomendable cuando el programador es inexperto, ya que da la
detección de errores es más detallada.
El código objeto es código binario, pero no puede ser ejecutado por la computadora
5.4.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.
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. Ejercicio de relacionar
2
Código Fuente 1. Escrito en Lenguaje Máquina pero no ejecutable.
Código 3
3. Escrito en Lenguaje Máquina y directamente ejecutable.
Ejecutable
El código fuente escrito en algún lenguaje de programación de alto nivel, el objeto escrito en lenguaje máquina sin ser
ejecutable y el código ejecutable, escrito también en lenguaje máquina y ya sí ejecutable por el ordenador, son las distintas
fases por donde pasan nuestros programas.
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 ejecutarlo en cualquier máquina se requiere tener independencia respecto al hardware concreto que se vaya a utilizar.
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.6.- Pruebas.
Caso práctico
María reúne todos los códigos diseñados y los prepara para implementarlos en el equipo del cliente.
Juan se percata de ello, y le recuerda a su amiga que aún no los han sometido a pruebas. Juan se acuerda bien de la vez
que le pasó aquello: hace dos años, cuando fue a presentar una aplicación a sus clientes, no paraba de dar errores de todo
tipo… los clientes, por supuesto, no la aceptaron y Juan perdió un mes de duro trabajo y estuvo a punto de perder su
empleo…
Una vez obtenido el software, la siguiente fase del ciclo de vida es la realización de pruebas.
Normalmente, éstas se realizan sobre un conjunto de datos de prueba, que consisten en un conjunto seleccionado y
predefinido de datos límite a los que la aplicación es sometida.
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).
Autoevaluación
Si las pruebas unitarias se realizan con éxito, ¿es obligatorio realizar las de integración?
5.7.- 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?".
¿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.
Descripción de la funcionalidad de
la aplicación.
Forma de comenzar a ejecutar la
El diseño de la Toda la información necesaria para:
aplicación.
aplicación.
Ejemplos de uso del programa.
Quedan La codificación de los Puesta en marcha.
Requerimientos software de la
reflejados: programas.
aplicación. Explotación.
Las pruebas realizadas. Seguridad del sistema.
Solución de los posibles
problemas que se pueden
presentar.
5.8.- 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.
Ada no quiere que se le pase ni un detalle: lleva consigo la guía de uso y la guía de instalación.
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.
Aunque diversos autores consideran la explotación y el mantenimiento como la misma etapa, nosotros vamos a
diferenciarlas en base al momento en que se realizan.
La explotación es la fase en que los usuarios finales conocen la aplicación y comienzan a utilizarla.
La explotación es la instalación, puesta a punto y funcionamiento de la aplicación en el equipo final del cliente.
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.
En ella, asignamos los parámetros de funcionamiento normal de la empresa y probamos que la aplicación es operativa.
También puede ocurrir que la configuración la realicen los propios usuarios finales, siempre y cuando les hayamos dado
previamente la guía de instalación. Y también, si la aplicación es más sencilla, podemos programar la configuración de
manera que se realice automáticamente tras instalarla. (Si el software es "a medida", lo más aconsejable es que la hagan
aquellos que la han fabricado).
Una vez se ha configurado, el siguiente y último paso es la fase de producción normal. La aplicación pasa a manos de los
usuarios finales y se da comienzo a la explotación del software.
Es muy importante tenerlo todo preparado antes de presentarle el producto al cliente: será el momento crítico del proyecto.
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.
5.9.- 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.
—Esto aún no ha terminado —comenta Ada—, nos quedan muchas cosas por hacer. Esta tarde me reúno con los clientes.
¿Cómo vamos a gestionar el mantenimiento de la aplicación?
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.
En cualquier otro sector laboral esto es así, pero el caso de la construcción de software es muy diferente.
Por su naturaleza, el software es cambiante y deberá actualizarse y evolucionar con el tiempo. Deberá ir adaptándose de
forma paralela a las mejoras del hardware en el mercado y afrontar situaciones nuevas que no existían cuando
el software se construyó.
Además, siempre surgen errores que habrá que ir corrigiendo y nuevas versiones del producto mejores que las anteriores.
Por todo ello, se pacta con el cliente un servicio de mantenimiento de la aplicación (que también tendrá un coste temporal y
económico).
Su duración es la mayor en todo el ciclo de vida del software, ya que también comprende las actualizaciones y evoluciones
futuras del mismo.
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.
Las pruebas y documentación.
La explotación y el mantenimiento.
Obtención
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;
Son aquellas en las que se evalúa una condición. Si el resultado de la condición es verdad es ejecutan una serie de acción
o acciones y si es falso se ejecutan otras.
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).
while → marca el comienzo del bucle y va seguido de la condición de parada del mismo.
do → a partir de esta palabra reservada, se encontrarán todas las acciones a ejecutar mientras se ejecute el bucle (en C,
se omite esta palabra).
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;
};
La empresa BK recibe el encargo de realizar la aplicación necesaria para una pequeña tienda de ropa ,
situada en el centro de Santander.
La propietaria y los 4 empleados de la tienda no tienen grandes conocimientos de informática pero tienen
claro lo que esperan de la aplicación:
Proporcionar tickets y/o facturas de la venta a los clientes
Operar con lector de código de barra
Realizar operaciones al contado y con tarjeta de crédito
Poder modificar los datos de un proveedor
Controlar los precios de los prendas y poder operar con ellos
La interfaz de usuario ha de ser intuitiva y fácil de manejar
El manejo de la aplicación se realizará con el teclado y con el ratón
Utilizar tarjetas de fidelización para obtención de descuentos
De nuestros prendas nos interés almacenar el código, marca, precio, cantidad y fecha de adquisición
Controlar el stock de nuestras prendas en el almacén
Llevar la cuenta de lo que vende cada trabajador.
Almacenar los datos de nuestros proveedores: Nombre, NIF, domicilio, teléfono, e-mail, fax
Almacenar los datos de nuestros trabajadores: DNI, nombre, apellidos, número de la seguridad social, fecha
de nacimiento, teléfono, domicilio
Tendrás que diseñar una planificación del proyecto de desarrollo de ese software que cumpla con las
premisas estudiadas en la presente unidad de trabajo.
De acuerdo a los contenidos y lo consultado en internet escogerás en concreto (nombrándolas) que
técnicas, Herramientas de apoyo al desarrollo del software, etc., escogerías para esta aplicación.
Criterios de puntuación. Total 10 puntos.
Se pretende poner en práctica los conceptos aprendidos, de la forma más clara posible.
Para ello, se recomienda no extenderse mucho en las respuestas y dar prioridad en el orden de secuencia de
pasos indicando(el texto de cada punto del enunciado) siempre el objetivo que se persigue con cada uno de
ellos.