trabajo software 7
TRANSCRIPT
REPÚBLICA BOLIVARIANA DE VENEZUELAMINISTERIO DEL PODER POPULAR PARA LA EDUCACIÒN
SUPERIORUNIVERSIDAD NACIONAL EXPERIMENTAL SIMÓN RODRÍGUEZ
LICENCIATURA EN ADMINISTRACIÓNCÁTEDRA: INTRODUCCIÓN AL PROCESAMIENTO DE DATOS
FACILITADOR (A): LIC. ZAIMA MARQUEZ
SOFTWARE
ParticipantesHidalgo, José C.I. 16.474.897Medina, Jorge C.I. 15.024.508
Omaña, Richard C.I. 16.555.725Puentes, Jackeline C.I. 14.667.599Volcanes, Marbelis C.I. 15.200.151
Caracas, mayo de 2010
INDICE
Contenido Pág.
Introducción……………………………………………………………… ….3
Etimologia……......................................................................................4
Definición de sotware...........................................................................4
Clasificación del software.....................................................................5
Software Libre .....................................................................................45
Software Libres actuales......................................................................52
Proceso de creación del Software........................................................58
Etapas de desarrollo del Software........................................................71
Conclusión ...........................................................................................88
Bibliografía............................................................................................90
Anexos..................................................................................................91
2
INTRODUCCIÓN
En el trabajo que presentamos a continuación estudiaremos que es
el Software, la etimología que lo define, como un conjunto de programas.
Los cuales son una secuencia de instrucciones que pueden ser
interpretadas por un computador, obteniendo un resultado que ha sido
predeterminadamente establecido por el ser humano.
Se explicara la clasificación del software, dividida en software de
sistemas, que incluyen los sistemas operativos, controles de dispositivos,
herramientas de diagnostico, servidores y las diferentes utilidades que lo
componen; el software de programación está compuesto por editores de
textos, copiladores, depuradores entre otros; el software de aplicación,
comprende los software educativos, software empresarial y diversas
bases de datos.
Se investigo sobre la definición del software libre, sus ventajas y
desventajas, los diferentes tipos de Licencias y los diferentes tipos de
Sotfware libres actuales (GNU/Linux, Mozilla Firefox).
También indagaremos sobre el proceso de creación del software,
los modelos de proceso o ciclo de vida que existen como por ejemplo el
modelo espiral, el modelo interactivo incremental, modelo Win Win, entre
otros. Igualmente se investigaran las diferentes etapas que intervienen en
el desarrollo del software, desarrollo del sistema, pruebas unitarias y de
integración, instalación y mantenimiento.
Este importante tema nos permitirá tener todos los conocimientos
necesarios para implementarlos en nuestra vida diaria. El Software ha
evolucionado con el pasar del tiempo trayendo como consecuencia
3
nuevos cambios, conocimientos, desarrollando cada vez más nuevas
plataformas tecnológicas.
1. ETIMOLOGÍA
Software (pronunciación AFI: [software]), es una palabra proveniente
del inglés (literalmente: partes blandas o suaves), que en español no
posee una traducción adecuada al contexto, por lo cual se la utiliza
asiduamente sin traducir y así fue admitida por la Real Academia
Española (RAE). Aunque no es estrictamente lo mismo, suele sustituirse
por expresiones tales como programas (informáticos) o aplicaciones
(informáticas). Software es lo que se denomina producto en Ingeniería de
Software.
2. DEFINICIÓN DE SOFTWARE
Probablemente la definición más formal de software sea la siguiente:
Es el conjunto de los programas de cómputo, procedimientos, reglas,
documentación y datos asociados que forman parte de las operaciones de
un sistema de computación.
Considerando esta definición, el concepto de software va más allá
de los programas de cómputo en sus distintos estados: código fuente,
binario o ejecutable; también su documentación, datos a procesar e
información de usuario forman parte del software: es decir, abarca todo lo
intangible, todo lo "no físico" relacionado.
Tal y como se ha definido el software, éste es un conjunto de
programas. Podemos decir que un programa es una secuencia de
instrucciones que pueden ser interpretadas por un computador,
obteniendo como fruto de esa interpretación un determinado resultado
que ha sido predeterminadamente establecido por el ser humano.
4
Los programas están divididos en rutinas. Una rutina es un
subconjunto del conjunto de instrucciones que conforman el programa.
Cada una de las rutinas de un programa realiza una determinada
función dentro del mismo.
El término «software» fue usado por primera vez en este sentido por
John W. Tukey en 1957. En las ciencias de la computación y la ingeniería
de software, el software es toda la información procesada por los
sistemas informáticos: programas y datos. El concepto de leer diferentes
secuencias de instrucciones desde la memoria de un dispositivo para
controlar los cálculos fue introducido por Charles Babbage como parte de
su máquina diferencial.
3. CLASIFICACIÓN DEL SOFTWARE
3.1 Software de Sistema:
En terminología informática el software de sistema, denominado
también software de base, consiste en programas informáticos que sirven
para controlar e interactuar con el sistema operativo, proporcionando
control sobre el hardware y dando soporte a otros programas; en
contraposición del llamado software de aplicación. Como ejemplos cabe
mencionar a las bibliotecas como por ejemplo OpenGL para la
aceleración gráfica, PNG para el sistema gráfico o demonios que
controlan la temperatura, la velocidad del disco duro, como hdparm, o la
frecuencia del procesador como cpudyn.
Uno de los más prominentes ejemplos de software de sistema se
encuentra en el proyecto GNU, cuyas herramientas de programación
permitieron combinarse con el núcleo informático basado en Unix
denominado Linux, formando entre ambos las conocidas como
distribuciones Linux.
5
Estos programas realizan diversas tareas, como la transferencia de
datos entre la memoria RAM y los dispositivos de almacenamiento (disco
rígido, unidades de discos ópticos, etc) entre otros.
Su objetivo es desvincular adecuadamente al usuario y al
programador de los detalles de la computadora en particular que se use,
aislándolo especialmente del procesamiento referido a las características
internas de: memoria, discos, puertos y dispositivos de comunicaciones,
impresoras, pantallas, teclados, etc. El software de sistema le procura al
usuario y programador adecuadas interfaces de alto nivel, herramientas y
utilidades de apoyo que permiten su mantenimiento. Incluye entre otros:
3.1.1 Sistemas operativos
Sistema operativo (SO) es un software que actúa de interfaz entre
los dispositivos de hardware y los programas usados por el usuario para
manejar un computador. Es responsable de gestionar, coordinar las
actividades y llevar a cabo el intercambio de los recursos y actúa como
estación para las aplicaciones que se ejecutan en la máquina.
Uno de los más prominentes ejemplos de sistema operativo, es el
núcleo Linux, el cual junto a las herramientas GNU, forman las llamadas
distribuciones Linux.
Uno de los propósitos de un sistema operativo como programa
estación principal, consiste en gestionar los recursos de localización y
protección de acceso del hardware, hecho que alivia a los programadores
de aplicaciones de tener que tratar con éstos detalles. Se encuentran en
la mayoría de los aparatos electrónicos que utilizan microprocesadores
para funcionar. (teléfonos móviles, reproductores de DVD, computadoras,
radios, etc.)
6
Parte de la infraestructura de la World Wide Web está compuesta
por el Sistema Operativo de Internet, creado por Cisco Systems para
gestionar equipos de interconexión como los conmutadores y los
enrutadores.
Componentes de un sistema operativo
Gestión de procesos: Un proceso es simplemente, un programa en
ejecución que necesita recursos para realizar su tarea: tiempo de CPU,
memoria, archivos y dispositivos de E/S. El SO es el responsable de:
• Crear y destruir los procesos.
• Parar y reanudar los procesos.
• Ofrecer mecanismos para que se comuniquen y sincronicen.
La gestión de procesos podría ser similar al trabajo de oficina. Se
puede tener una lista de tareas a realizar y a estas fijarles prioridades alta,
media, baja por ejemplo. Debemos comenzar haciendo las tareas de
prioridad alta primero y cuando se terminen seguir con las de prioridad
media y después las de baja. Una vez realizada la tarea se tacha. Esto
puede traer un problema que las tareas de baja prioridad pueden que
nunca lleguen a ejecutarse. y permanezcan en la lista para siempre. Para
solucionar esto, se puede asignar alta prioridad a las tareas más antiguas.
Gestión de la memoria principal: La Memoria (informática) es una
gran tabla de palabras o bytes que se referencian cada una mediante una
dirección única. Este almacén de datos de rápido accesos es compartido
por la CPU y los dispositivos de E/S, es volátil y pierde su contenido en
los fallos del sistema. El SO es el responsable de:
• Conocer qué partes de la memoria están utilizadas y por quién.
• Decidir qué procesos se cargarán en memoria cuando haya
espacio disponible.
• Asignar y reclamar espacio de memoria cuando sea necesario.
7
Gestión del almacenamiento secundario: Un sistema de
almacenamiento secundario es necesario, ya que la memoria principal
(almacenamiento primario) es volátil y además muy pequeña para
almacenar todos los programas y datos. También es necesario mantener
los datos que no convenga mantener en la memoria principal. El SO se
encarga de:
• Planificar los discos.
• Gestionar el espacio libre.
• Asignar el almacenamiento.
El sistema de E/S: Consiste en un sistema de almacenamiento
temporal (caché), una interfaz de manejadores de dispositivos y otra para
dispositivos concretos. El sistema operativo debe gestionar el
almacenamiento temporal de E/S y servir las interrupciones de los
dispositivos de E/S.
Sistema de archivos: Los archivos son colecciones de información
relacionada, definidas por sus creadores. Éstos almacenan programas (en
código fuente y objeto) y datos tales como imágenes, textos, información
de bases de datos, etc. El SO es responsable de:
• Construir y eliminar archivos y directorios.
• Ofrecer funciones para manipular archivos y directorios.
• Establecer la correspondencia entre archivos y unidades de
almacenamiento.
• Realizar copias de seguridad de archivos.
Existen diferentes Sistemas de Archivos, es decir, existen diferentes
formas de organizar la información que se almacena en las memorias
(normalmente discos) de los ordenadores. Por ejemplo, existen los
sistemas de archivos FAT, FAT32, EXT2, NTFS.
8
Sistemas de protección: Mecanismo que controla el acceso de los
programas o los usuarios a los recursos del sistema. El SO se encarga
de:
• Distinguir entre uso autorizado y no autorizado.
• Especificar los controles de seguridad a realizar.
• Forzar el uso de estos mecanismos de protección.
Sistema de comunicaciones: Para mantener las comunicaciones
con otros sistemas es necesario poder controlar el envío y recepción de
información a través de las interfaces de red. También hay que crear y
mantener puntos de comunicación que sirvan a las aplicaciones para
enviar y recibir información, y crear y mantener conexiones virtuales entre
aplicaciones que están ejecutándose localmente y otras que lo hacen
remotamente.
Programas de sistema: Son aplicaciones de utilidad que se
suministran con el SO pero no forman parte de él. Ofrecen un entorno útil
para el desarrollo y ejecución de programas, siendo algunas de las tareas
que realizan:
• Manipulación y modificación de archivos.
• Información del estado del sistema.
• Soporte a lenguajes de programación.
• Comunicaciones.
Gestor de recursos: Como gestor de recursos, el Sistema
Operativo administra:
• La CPU (Unidad Central de Proceso, donde está alojado el
microprocesador).
• Los dispositivos de E/S (entrada y salida)
• La memoria principal (o de acceso directo).
• Los discos (o memoria secundaria).
• Los procesos (o programas en ejecución).
9
• y en general todos los recursos del sistema.
Características
Administración de tareas
• Monotarea: Solamente puede ejecutar un proceso (aparte de
los procesos del propio S.O.) en un momento dado. Una vez que empieza
a ejecutar un proceso, continuará haciéndolo hasta su finalización y/o
interrupción.
• Multitarea: Es capaz de ejecutar varios procesos al mismo
tiempo. Este tipo de S.O. normalmente asigna los recursos disponibles
(CPU, memoria, periféricos) de forma alternada a los procesos que los
solicitan, de manera que el usuario percibe que todos funcionan a la vez,
de forma concurrente.
Administración de usuarios
• Monousuario: Si sólo permite ejecutar los programas de un
usuario al mismo tiempo.
• Multiusuario: Si permite que varios usuarios ejecuten
simultáneamente sus programas, accediendo a la vez a los recursos de la
computadora. Normalmente estos sistemas operativos utilizan métodos
de protección de datos, de manera que un programa no pueda usar o
cambiar los datos de otro usuario.
Manejo de recursos
• Centralizado: Si permite utilizar los recursos de una sola
computadora.
• Distribuido: Si permite utilizar los recursos (memoria, CPU,
disco, periféricos) de más de una computadora al mismo tiempo.
10
3.1.2 Controladores de dispositivos
Un controlador de dispositivo, llamado normalmente controlador (en
inglés, device driver) es un programa informático que permite al sistema
operativo interactuar con un periférico, haciendo una abstracción del
hardware y proporcionando una interfaz -posiblemente estandarizada-
para usarlo. Se puede esquematizar como un manual de instrucciones
que le indica al sistema operativo, cómo debe controlar y comunicarse
con un dispositivo en particular. Por tanto, es una pieza esencial, sin la
cual no se podría usar el hardware.
Existen tantos tipos de controladores como tipos de periféricos, y es
común encontrar más de un controlador posible para el mismo dispositivo,
cada uno ofreciendo un nivel distinto de funcionalidades. Por ejemplo,
aparte de los oficiales (normalmente disponibles en la página web del
fabricante), se pueden encontrar también los proporcionados por el
sistema operativo, o también versiones no oficiales hechas por terceros.
Debido a que el software de controladores de dispositivos se ejecuta
como parte del sistema operativo, con acceso sin restricciones a todo el
equipo, resulta esencial que sólo se permitan los controladores de
dispositivos autorizados. La firma y el almacenamiento provisional de los
paquetes de controladores de dispositivos en los equipos cliente,
mediante las técnicas descritas en esta guía, proporcionan muchas
ventajas
3.1.3 Herramientas de diagnóstico
Una herramienta de diagnóstico es un software que permite
monitorear y en algunos casos controlar la funcionalidad del hardware,
como: computadoras, servidores y periféricos, según el tipo y sus
funciones. Estos dispositivos pueden ser, la memoria RAM, el procesador,
los discos duros, ruteadores, tarjetas de red, entre muchos dispositivos
11
más. El software permite monitorear temperatura, rendimiento,
transferencia de datos, etc.
3.1.4 Servidores
En informática, un servidor es una computadora que, formando parte
de una red, provee servicios a otras computadoras denominadas clientes.
También se suele denominar con la palabra servidor a:
• Una aplicación informática o programa que realiza algunas
tareas en beneficio de otras aplicaciones llamadas clientes. Algunos
servicios habituales son los servicios de archivos, que permiten a los
usuarios almacenar y acceder a los archivos de una computadora y los
servicios de aplicaciones, que realizan tareas en beneficio directo del
usuario final. Este es el significado original del término. Es posible que un
ordenador cumpla simultáneamente las funciones de cliente y de servidor.
• Una computadora en la que se ejecuta un programa que realiza
alguna tarea en beneficio de otras aplicaciones llamadas clientes, tanto si
se trata de un ordenador central (mainframe), un miniordenador, un
ordenador personal, una PDA o un sistema integrado; sin embargo, hay
computadoras destinadas únicamente a proveer los servicios de estos
programas: estos son los servidores por antonomasia.
• Un servidor no es necesariamente una máquina de última
generación de grandes proporciones, no es necesariamente un
superordenador; un servidor puede ser desde una computadora vieja,
hasta una máquina sumamente potente. Todo esto depende del uso que
se le dé al servidor. Si usted lo desea, puede convertir al equipo desde el
cual usted está leyendo esto en un servidor instalando un programa que
12
trabaje por la red y a la que los usuarios de su red ingresen a través de un
programa de servidor web como Apache.
En las siguientes listas, hay algunos tipos comunes de servidores y
de su propósito.
• Servidor de archivo: es el que almacena varios tipos de
archivos y los distribuye a otros clientes en la red.
• Servidor de impresiones: controla una o más impresoras y
acepta trabajos de impresión de otros clientes de la red, poniendo en cola
los trabajos de impresión (aunque también puede cambiar la prioridad de
las diferentes impresiones), y realizando la mayoría o todas las otras
funciones que en un sitio de trabajo se realizaría para lograr una tarea de
impresión si la impresora fuera conectada directamente con el puerto de
impresora del sitio de trabajo.
• Servidor de correo: almacena, envía, recibe, enruta y realiza
otras operaciones relacionadas con email para los clientes de la red.
• Servidor de fax: almacena, envía, recibe, enruta y realiza otras
funciones necesarias para la transmisión, la recepción y la distribución
apropiadas de los fax.
• Servidor de la telefonía: realiza funciones relacionadas con la
telefonía, como es la de contestador automático, realizando las funciones
de un sistema interactivo para la respuesta de la voz, almacenando los
mensajes de voz, encaminando las llamadas y controlando también la red
o el Internet, por ejemplo la entrada excesiva de la voz sobre IP (VoIP).
• Servidor proxy: realiza un cierto tipo de funciones a nombre de
otros clientes en la red para aumentar el funcionamiento de ciertas
operaciones (p. ej., prefetching y depositar documentos u otros datos que
13
se soliciten muy frecuentemente), también proporciona servicios de
seguridad, o sea, incluye un cortafuegos. Permite administrar el acceso a
internet en una red de computadoras permitiendo o negando el acceso a
diferentes sitios Web.
• Servidor del acceso remoto (RAS): controla las líneas de
módem de los monitores u otros canales de comunicación de la red para
que las peticiones conecten con la red de una posición remota, responde
llamadas telefónicas entrantes o reconoce la petición de la red y realiza la
autentificación necesaria y otros procedimientos necesarios para registrar
a un usuario en la red.
• Servidor de uso: realiza la parte lógica de la informática o del
negocio de un uso del cliente, aceptando las instrucciones para que se
realicen las operaciones de un sitio de trabajo y sirviendo los resultados a
su vez al sitio de trabajo, mientras que el sitio de trabajo realiza el interfaz
operador o la porción del GUI del proceso (es decir, la lógica de la
presentación) que se requiere para trabajar correctamente.
• Servidor web: almacena documentos HTML, imágenes,
archivos de texto, escrituras, y demás material Web compuesto por datos
(conocidos colectivamente como contenido), y distribuye este contenido a
clientes que la piden en la red.
• Servidor de Base de Datos (database server): provee servicios
de base de datos a otros programas u otras computadoras, como es
definido por el modelo cliente-servidor. También puede hacer referencia a
aquellas computadoras (servidores) dedicadas a ejecutar esos
programas, prestando el servicio.
• Servidor de reserva: tiene el software de reserva de la red
instalado y tiene cantidades grandes de almacenamiento de la red en
14
discos duros u otras formas del almacenamiento (cinta, etc.) disponibles
para que se utilice con el fin de asegurarse de que la pérdida de un
servidor principal no afecte a la red. Esta técnica también es denominada
clustering.
• Impresoras: muchas impresoras son capaces de actuar como
parte de una red de ordenadores sin ningún otro dispositivo, tal como un
"print server" (servidor de impresión), a actuar como intermediario entre la
impresora y el dispositivo que está solicitando que se termine un trabajo
de impresión.
• Terminal tonto: muchas redes utilizan este tipo de equipo en
lugar de puestos de trabajo para la entrada de datos. En estos sólo se
exhiben datos o se introducen. Este tipo de terminal trabaja contra un
servidor, el cual realmente procesa los datos y envía pantallas de datos a
los terminales. Este tipo de máquina no es, por tanto, un servidor. Es un
cliente.
• Otros dispositivos: hay muchos otros tipos de dispositivos que
se puedan utilizar para construir una red, muchos de los cuales requieren
una comprensión de conceptos más avanzados del establecimiento de
una red de la computadora antes de que puedan ser entendidos
fácilmente. En las redes caseras y móviles, que conecta la electrónica de
consumidor, los dispositivos tales como consolas de videojuegos están
llegando a ser cada vez más comunes.
3.1.5 Utilidades
En informática, una utilidad es una herramienta que realiza:
• Tareas de mantenimiento
• Soporte para la construcción y ejecución de programas
• Las tareas en general.
15
En donde se incluyen las bibliotecas de sistema, middleware,
herramientas de desarrollo, etc. Entre ellas podemos nombrar cifrado,
descifrado de archivos, compresión de archivos, defragmentadores de
discos editores de texto, respaldo, etc.
3.2 Software de programación
Es el conjunto de herramientas que permiten al programador
desarrollar programas informáticos, usando diferentes alternativas y
lenguajes de programación, de una manera práctica. Incluye entre otros:
3.2.1 Editores de texto
Un editor de texto es un programa que permite crear y modificar
archivos digitales compuestos únicamente por texto sin formato,
conocidos comúnmente como archivos de texto o texto plano. El
programa lee el archivo e interpreta los bytes leídos según el código de
caracteres que usa el editor. Hoy en día es comúnmente de 7- ó 8-bits en
ASCII o UTF-8, rara vez EBCDIC.
Por ejemplo, un editor ASCII de 8 bits que lee el número binario
0110 0001 (decimal 97 ó hexadecimal 61) en el archivo lo representará en
la pantalla por la figura a, que el usuario reconoce como la letra "a" y
ofrecerá al usuario las funciones necesarias para cambiar el número
binario en el archivo.
Los editores de texto son incluidos en el sistema operativo o en
algún paquete de software instalado y se usan cuando se deben crear o
modificar archivos de texto como archivos de configuración, scripts o el
código fuente de algún programa. El archivo creado por un editor de texto
incluye por convención en DOS y Microsoft Windows la extensión .txt,
aunque pueda ser cambiada a cualquier otra con posterioridad. Tanto
16
Unix como Linux dan al usuario total libertad en la denominación de sus
archivos.
Algunas funciones especiales son:
• Editores diseñados para un lenguaje de programación
determinado, con coloreado de sintaxis, macros, completación de
palabras, etc.
• Editores con regiones plegables. A veces no todo el texto es
relevante para el usuario. Con este tipo de editores ciertas regiones con
texto irrelevante pueden ser plegadas, escondidas, mostrando al usuario
solo lo importante del texto.
• IDE es un editor más otras herramientas de trabajo,
compiladores, extractores de diferencias entre dos textos, repositorios,
etc, incluidos en un solo programa.
Funciones típicas de un editor de texto
Marcar región: Es la función que marca, visualmente o no, una parte
del texto para ser elaborada con otras funciones. La región puede
contener varias líneas del texto (región horizontal) o bien varias columnas
adyacentes del texto (región vertical).
Búsqueda y reemplazo: El proceso de búsqueda de una palabra o
una cadena de caracteres, en un texto plano y su reemplazo por otra.
Existen diferentes métodos: global, por región, reemplazo automático,
reemplazo con confirmación, búsqueda de texto o búsqueda de una
Expresión regular.
Copiar, cortar y pegar: Sirve para copiar, trasladar o borrar una
región marcada.
17
Formatear: Los editores de texto permiten automatizar las únicas
funciones de formateo que utilizan: quebrar la línea, indentar, formatear
comentarios o formatear listas.
Deshacer y rehacer: Consiste en que el programa editor va
almacenando cada una de las operaciones hechas por el usuario hasta un
número configurable. Si el usuario se arrepiente de algún cambio, por
muy anterior que sea, el editor le permite revertir todos los cambios
hechos hasta el número configurado. Rehacer es por consiguiente,
revertir algo revertido.
Importar: Agregar o insertar el contenido de un archivo en el archivo
que se está editando. Algunos editores permiten insertar la salida o
respuesta a un programa cualquiera ejecutado en la Línea de comandos
al archivo que se está editando.
Filtros: Algunos editores de texto permiten hacer pasar las líneas del
texto o de una región por algún programa para modificarlas u ordenarlas.
Por ejemplo, para ordenar alfabéticamente una lista de nombres o sacar
un promedio de una lista de números.
Acceso remoto: Un editor para trabajar en la administración de una
red de computadoras debe ofrecer la funcionalidad de editar archivos en
máquinas remotas, ya sea por medio de ftp, ssh o algún otro Protocolo de
red. Emacs lo puede hacer mediante el Plugin tramp (ampliamente
configurable con ssh, ftp, scp, sftp, etc), Ultraedit, del ambiente Windows,
lo hace mediante ftp.
3.2.2 Compiladores
Un compilador es un programa informático que traduce un programa
escrito en un lenguaje de programación a otro lenguaje de programación,
18
generando un programa equivalente que la máquina será capaz de
interpretar. Usualmente el segundo lenguaje es lenguaje de máquina,
pero también puede ser simplemente texto. Este proceso de traducción se
conoce como compilación.
Partes de un compilador
La construcción de un compilador involucra la división del proceso
en una serie de fases que variará con su complejidad. Generalmente
estas fases se agrupan en dos tareas: el análisis del programa fuente y la
síntesis del programa objeto.
• Análisis: Se trata de la comprobación de la corrección del
programa fuente, e incluye las fases correspondientes al Análisis Léxico
(que consiste en la descomposición del programa fuente en componentes
léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en
frases gramaticales ) y Análisis Semántico (comprobación de la validez
semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
• Síntesis: Su objetivo es la generación de la salida expresada
en el lenguaje objeto y suele estar formado por una o varias
combinaciones de fases de Generación de Código (normalmente se trata
de código intermedio o de código objeto) y de Optimización de Código (en
las que se busca obtener un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y
síntesis se pueden agrupar en Front-end y Back-end:
• Front-end: es la parte que analiza el código fuente, comprueba
su validez, genera el árbol de derivación y rellena los valores de la tabla
de símbolos. Esta parte suele ser independiente de la plataforma o
sistema para el cual se vaya a compilar, y está compuesta por las fases
19
comprendidas entre el Análisis Léxico y la Generación de Código
Intermedio.
• Back-end: es la parte que genera el código máquina, específico
de una plataforma, a partir de los resultados de la fase de análisis,
realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar
el código máquina de varios lenguajes de programación distintos y que el
mismo Front End que sirve para analizar el código fuente de un lenguaje
de programación concreto sirva para generar código máquina en varias
plataformas distintas. Suele incluir la generación y optimización del código
dependiente de la máquina.
El código que genera el Back End normalmente no se puede
ejecutar directamente, sino que necesita ser enlazado por un programa
enlazador (linker)
Tipos de compiladores
Esta taxonomía de los tipos de compiladores no es excluyente, por
lo que puede haber compiladores que se adscriban a varias categorías:
• Compiladores cruzados: generan código para un sistema
distinto del que están funcionando.
• Compiladores optimizadores: realizan cambios en el código
para mejorar su eficiencia, pero manteniendo la funcionalidad del
programa original.
• Compiladores de una sola pasada: generan el código máquina
a partir de una única lectura del código fuente.
• Compiladores de varias pasadas: necesitan leer el código
fuente varias veces antes de poder producir el código máquina.
20
• Compiladores JIT (Just In Time): forman parte de un intérprete
y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la
informática, el software de los compiladores era considerado como uno de
los más complejos existentes.
Los primeros compiladores se realizaron programándolos
directamente en lenguaje máquina o en ensamblador. Una vez que se
dispone de un compilador, se pueden escribir nuevas versiones del
compilador (u otros compiladores distintos) en el lenguaje que compila
ese compilador.
3.2.3 Intérpretes
En ciencias de la computación, intérprete o interpretador es un
programa informático capaz de analizar y ejecutar otros programas,
escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los
compiladores en que mientras estos traducen un programa desde su
descripción en un lenguaje de programación al código de máquina del
sistema, los primeros (los intérpretes) sólo realizan la traducción a medida
que sea necesaria, típicamente, instrucción por instrucción, y
normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir
resultados iguales incluso en sistemas sumamente diferentes (ej. una PC
y un PlayStation 3). Usando un compilador, un solo archivo fuente puede
producir resultados iguales solo si es compilado a distintos ejecutables
específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los
compilados debido a la necesidad de traducir el programa mientras se
21
ejecuta, pero a cambio son más flexibles como entornos de programación
y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para
reemplazar partes enteras del programa o añadir módulos completamente
nuevos), y permiten ofrecer al programa interpretado un entorno no
dependiente de la máquina donde se ejecuta el intérprete, sino del propio
intérprete (lo que se conoce comúnmente como máquina virtual).
Para mejorar el desempeño, algunas implementaciones de
programación de lenguajes de programación pueden interpretar o
compilar el código fuente original en una más compacta forma intermedia
y después traducir eso al código de máquina (ej. Perl, Python, MATLAB, y
Ruby). Algunos aceptan los archivos fuente guardados en esta
representación intermedia (ej. Python, UCSD Pascal y Java).
Comparando su actuación con la de un ser humano, un compilador
equivale a un traductor profesional que, a partir de un texto, prepara otro
independiente traducido a otra lengua, mientras que un intérprete
corresponde al intérprete humano, que traduce de viva voz las palabras
que oye, sin dejar constancia por escrito.
En la actualidad, uno de los entornos más comunes de uso de los
intérpretes informáticos es Internet, debido a la posibilidad que estos
tienen de ejecutarse independientemente de la plataforma.
3.2.4 Enlazadores
Enlazador (en inglés, linker) es un programa que toma los ficheros
de código objeto generado en los primeros pasos del proceso de
compilación, la información de todos los recursos necesarios (biblioteca),
quita aquellos recursos que no necesita, y enlaza el código objeto con
su(s) biblioteca(s) con lo que finalmente produce un fichero ejecutable o
una biblioteca. En el caso de los programas enlazados dinámicamente, el
22
enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo
de carga o ejecución del programa.
3.2.5 Depuradores
Un depurador (en inglés, debugger), es un programa que permite
depurar o limpiar los errores de otro programa informático.
Uso: Al iniciarse la depuración, el depurador lanza el programa a
depurar. Éste se ejecuta normalmente hasta que el depurador detiene su
ejecución, permitiendo al usuario examinar la situación.
El depurador permite detener el programa en:
• Un punto determinado mediante un punto de ruptura.
• Un punto determinado bajo ciertas condiciones mediante un
punto de ruptura condicional.
• Un momento determinado cuando se cumplan ciertas
condiciones.
• Un momento determinado a petición del usuario.
Durante esa interrupción, el usuario puede:
• Examinar y modificar la memoria y las variables del programa.
• Examinar el contenido de los registros del procesador.
• Examinar la pila de llamadas que han desembocado en la
situación actual.
• Cambiar el punto de ejecución, de manera que el programa
continúe su ejecución en un punto diferente al punto en el que fue
detenido.
• Ejecutar instrucción a instrucción.
23
• Ejecutar partes determinadas del código, como el interior de
una función, o el resto de código antes de salir de una función.
El depurador depende de la arquitectura y sistema en el que se
ejecute, por lo que sus funcionalidades cambian de un sistema a otro.
Aquí se han mostrado las más comunes.
3.2.6 Entornos de Desarrollo Integrados (IDE):
Agrupan las anteriores herramientas, usualmente en un entorno
visual, de forma tal que el programador no necesite introducir múltiples
comandos para compilar, interpretar, depurar, etc. Habitualmente cuentan
con una avanzada interfaz gráfica de usuario (GUI).
3.3 Software de aplicación:
Es aquel que permite a los usuarios llevar a cabo una o varias tareas
específicas, en cualquier campo de actividad susceptible de ser
automatizado o asistido, con especial énfasis en los negocios. Incluye
entre otros:
3.3.1 Aplicaciones para Control de sistemas y
automatización Industrial.
Los sistemas de control según la Teoría Cibernética se aplican en
esencia para los organismos vivos, las máquinas y las organizaciones.
Estos sistemas fueron relacionados por primera vez en 1948 por Norbert
Wiener en su obra Cibernética y Sociedad con aplicación en la teoría de
los mecanismos de control.
Un sistema de control está definido como un conjunto de
componentes que pueden regular su propia conducta o la de otro sistema
24
con el fin de lograr un funcionamiento predeterminado, de modo que se
reduzcan las probabilidades de fallos y se obtengan los resultados
buscados. Hoy en día los sistemas se usan típicamente en sustituir un
trabajador pasivo que controla una determinado sistema (ya sea eléctrico,
mecánico, etc.) con una posibilidad nula o casi nula de error, y un grado
de eficiencia mucho más grande que el de un trabajador. Los sistemas de
control más modernos en ingeniería automatizan procesos en base a
muchos parámetros y reciben el nombre de Controladores de
Automatización Programables (PAC).
Los sistemas de control deben conseguir los siguientes objetivos:
1. Ser estables y robustos frente a perturbaciones y errores en los
modelos.
2. Ser eficiente según un criterio preestablecido evitando
comportamientos bruscos e irreales.
Características de un Sistema de Control
1. Señal de Corriente de Entrada: Considerada como estímulo
aplicado a un sistema desde una fuente de energía externa con el
propósito de que el sistema produzca una respuesta específica.
2. Señal de Corriente de Salida: Respuesta obtenida por el
sistema que puede o no relacionarse con la respuesta que implicaba la
entrada.
3. Variable Manipulada: Es el elemento al cual se le modifica su
magnitud, para lograr la respuesta deseada. Es decir, se manipula la
entrada del proceso.
25
4. Variable Controlada: Es el elemento que se desea controlar. Se
puede decir que es la salida del proceso.
5. Conversión: Mediante receptores se generan las variaciones o
cambios que se producen en la variable.
6. Variaciones Externas: Son los factores que influyen en la
acción de producir un cambio de orden correctivo.
7. Fuente de Energía: Es la que entrega la energía necesaria para
generar cualquier tipo de actividad dentro del sistema.
8. Retroalimentación: La retroalimentación es una característica
importante de los sistemas de control de lazo cerrado. Es una relación
secuencial de causas y efectos entre las variables de estado.
Dependiendo de la acción correctiva que tome el sistema, este puede
apoyar o no una decisión, cuando en el sistema se produce un retorno se
dice que hay una retroalimentación negativa; si el sistema apoya la
decisión inicial se dice que hay una retroalimentación positiva.
Automatización industrial
Automatización Industrial (automatización; del griego antiguo auto:
guiado por uno mismo) es el uso de sistemas o elementos
computarizados para controlar maquinarias y/o procesos industriales
sustituyendo a operadores humanos.
El alcance va más allá que la simple mecanización de los procesos
ya que ésta provee a operadores humanos mecanismos para asistirlos en
los esfuerzos físicos del trabajo, la automatización reduce ampliamente la
necesidad sensorial y mental del humano. La automatización como una
disciplina de la ingeniería es más amplia que un mero sistema de control,
26
abarca la instrumentación industrial, que incluye los sensores y
transmisores de campo, los sistemas de control y supervisión, los sistema
de transmisión y recolección de datos y las aplicaciones de software en
tiempo real para supervisar y controlar las operaciones de plantas o
procesos industriales.
Las primeras máquinas simples sustituían una forma de esfuerzo en
otra forma que fueran manejadas por el ser humano, tal como levantar un
peso pesado con sistema de poleas o con una palanca. Posteriormente
las máquinas fueron capaces de sustituir formas naturales de energía
renovable, tales como el viento, mareas, o un flujo de agua por energía
humana.
En 1801, la patente de un telar automático utilizando tarjetas
perforadas fue dada a Joseph Marie Jacquard, quien revolucionó la
industria del textil.
La parte más visible de la automatización actual puede ser la
robótica industrial. Algunas ventajas son repetitividad, control de calidad
más estrecho, mayor eficiencia, integración con sistemas empresariales,
incremento de productividad y reducción de trabajo. Algunas desventajas
son requerimientos de un gran capital, decremento severo en la
flexibilidad, y un incremento en la dependencia del mantenimiento y
reparación.
Para mediados del siglo 20, la automatización había existido por
muchos años en una escala pequeña, utilizando mecanismos simples
para automatizar tareas sencillas de manufactura. Sin embargo el
concepto solamente llego a ser realmente práctico con la adición (y
evolución) de las computadoras digitales, cuya flexibilidad permitió
manejar cualquier clase de tarea. Las computadoras digitales con la
combinación requerida de velocidad, poder de computo, precio y tamaño
27
empezaron a aparecer en la década de 1960. Antes de ese tiempo, las
computadoras industriales eran exclusivamente computadoras analógicas
y computadoras híbridas. Desde entonces las computadoras digitales
tomaron el control de la mayoría de las tareas simples, repetitivas, tareas
semiespecializadas y especializadas, con algunas excepciones notables
en la producción e inspección de alimentos. Como un famoso dicho
anonimo dice, "para muchas y muy cambiantes tareas, es difícil remplazar
al ser humano, quienes son fácilmente vueltos a entrenar dentro de un
amplio rango de tareas, más aún, son producidos a bajo costo por
personal sin entrenamiento."
Existen muchos trabajos donde no existe riesgo inmediato de la
automatización. Ningún dispositivo ha sido inventado que pueda competir
contra el ojo humano para la precisión y certeza en muchas tareas;
tampoco el oído humano. El más inútil de los seres humanos puede
identificar y distinguir mayor cantidad de esencias que cualquier
dispositivo automático. Las habilidades para el patrón de reconocimiento
humano, reconocimiento de lenguaje y producción de lenguaje se
encuentran más allá de cualquier expectativa de los ingenieros de
automatización.
Computadoras especializadas, son utilizadas para leer entradas de
campo a través de sensores y en base a su programa, generar salidas
hacia el campo a través de actuadores. Esto conduce para controlar
acciones precisas que permitan un control estrecho de cualquier proceso
industrial. (Se temía que estos dispositivos fueran vulnerables al error del
año 2000, con consecuencias catastróficas, ya que son tan comunes
dentro del mundo de la industria).
Existen dos tipos distintos: DCS o Sistema de Control Distribuído, y
PLC o Controlador Lógico Programable. El primero era antiguamente
orientado a procesos de tipo análogos, mientras que el segundo se
28
utilizaba en procesos de tipo discreto (ceros y unos). Actualmente ambos
equipos se parecen cada vez más, y cualquiera de los dos puede ser
utilizado en todo tipo de procesos.
Las interfaces Hombre-Máquina (HMI) o interfaces Hombre-
Computadora (CHI), formalmente conocidas como interfaces Hombre-
Máquina, son comúnmente empleadas para comunicarse con los PLCs y
otras computadoras, para labores tales como introducir y monitorear
temperaturas o presiones para controles automáticos o respuesta a
mensajes de alarma. El personal de servicio que monitorea y controla
estas interfaces son conocidos como ingenieros de estación.
Otra forma de automatización que involucra computadoras es la
prueba de automatización, donde las computadoras controlan un equipo
de prueba automático que es programado para simular seres humanos
que prueban manualmente una aplicación. Esto es acompañado por lo
general de herramientas automáticas para generar instrucciones
especiales (escritas como programas de computadora) que direccionan al
equipo automático en prueba en la dirección exacta para terminar las
pruebas.
3.3.1 Aplicaciones ofimáticas
Una suite ofimática o suite de oficina es una recopilación de
programas, los cuales son utilizados en oficinas y sirve para diferentes
funciones como crear, modificar, organizar, escanear, imprimir, etc.
archivos y documentos. Son ampliamente usados en varios lugares, ya
que al ser eso (una recopilación), hace que sea asequible adquirir toda la
suite, que programa por programa, lo cual es más complejo, al tener que
conseguir programa por programa, y en caso del software pagado, más
caro.
29
Generalmente en las suites ofimáticas, al incluir los programas en
estas, no hay un estándar sobre los programas a incluir; pero la gran
mayoría incluyen al menos un procesador de textos y una hoja de cálculo.
Adicionalmente, la suite puede contener un Programa de presentación, un
sistema de gestión de base de datos, herramientas menores de gráficos y
comunicaciones, un gestor de información personal (agenda y cliente de
correo electrónico) y un navegador web.
En la actualidad las suites ofimáticas dominantes en el mercado son,
por parte del software pagado, Microsoft Office, la cual posee sus propios
formatos cerrados de documentos para cada uno de sus programas.
Respecto al software libre, está OpenOffice, desarrollado por Sun
Microsystems, también con un formato para cada programa, pero de
código abierto. Debido a esto y a la pobre compatibilidad entre las suites
de Microsoft con otros formatos abiertos (como OpenDocument), en cada
suite ofimática se hacen desarrollos que, generalmente, son poco
adaptables a los cambios que hace una y otra suite.
Suites ofimáticas populares
• OpenOffice.org: Suite libre y gratuita, utiliza el estándar
OpenDocument (Está conformada por los programas Writer, Calc,
Impress, Draw, Base).
• Gnome Office: Suite libre y gratuita del proyecto GNOME
(Conformada por Abiword, Gnumeric, GNOME-DB y GIMP).
• StarOffice: Suite libre (hasta la versión 5.2) de Sun basada en
OpenOffice.org, con algunos añadidos propietarios.
30
• Corel WordPerfect Office: Suite propietaria de Corel
(WordPerfect, Quattro Pro, Paradox, Corel Presentations, CorelCENTRAL
y Dragon NaturallySpeaking).
• Lotus: Lotus SmartSuite (Word Pro, Lotus 1-2-3, Lotus
Organizer, Lotus Word Pro, Lotus Approach y Freelance Graphics).
• Papyrus OFFICE: (Papyrus WORD, Papyrus BASE).
• IBM Lotus Symphony: Suite libre y gratuita, desarrollada bajo
OpenOffice (Documento, Presentación, Cálculo y Explorador Web).
3.3.2 Software educativo
Se denomina software educativo al destinado a la enseñanza y el
auto aprendizaje y además permite el desarrollo de ciertas habilidades
cognitivas. Así como existen profundas diferencias entre las filosofías
pedagógicas, así también existe una amplia gama de enfoques para la
creación de software educativo atendiendo a los diferentes tipos de
interacción que debería existir entre los actores del proceso de
enseñanza-aprendizaje: educador, aprendiz, conocimiento, computadora.
Como software educativo tenemos desde programas orientados al
aprendizaje hasta sistemas operativos completos destinados a la
educación, como por ejemplo las distribuciones GNU/Linux orientadas a la
enseñanza.
Instrucción asistida por computadora
El enfoque de la instrucción asistida por computadora pretende
facilitar la tarea del educador, sustituyéndole parcialmente en su labor. El
software educacional resultante generalmente presenta una secuencia (a
veces establecida con técnicas de inteligencia artificial) de lecciones, o
31
módulos de aprendizaje. También generalmente incluye métodos de
evaluación automática, utilizando preguntas cerradas. Las críticas más
comunes contra este tipo de software son:
• Los aprendices pierden el interés rápidamente e intentan
adivinar la respuesta al azar.
• La computadora es convertida en una simple máquina de
memorización costosa.
• El software desvaloriza, a los ojos del aprendiz, el conocimiento
que desea transmitir mediante la inclusión de artificiales premios visuales.
(ver enlace Punished by Rewards)
Ejemplos típicos de este tipo de software son: Clic, GCompris,
PLATO, Applets de Descartes.
Software educativo abierto
El enfoque del software educativo abierto por el contrario enfatiza
más el aprendizaje creativo que la enseñanza. El software resultante no
presenta una secuencia de contendidos a ser aprendida, sino un
ambiente de exploración y construcción virtual, también conocido como
micromundo. Con ellos los aprendices, luego de familiarizarse con el
software, pueden modificarlo y aumentarlo según su interés personal, o
crear proyectos nuevos teniendo como base las reglas del micromundo.
Las críticas más comunes contra este tipo de software son:
• En un ambiente donde se use software educacional abierto, no
todos los aprendices aprenderán la misma cosa, y por consiguiente los
métodos de evaluación tradicionales son poco adecuados.
32
• La dirección de tales ambientes de aprendizaje requiere mayor
habilidad por parte del educador. Ya que en este caso su papel no será el
de enseñar contenidos sino de hacer notar las estrategias de apredizaje
que el estudiante encuentra valiosas (al abordar un proyecto concreto) y
ayudarle a transferirlas a otros contextos.
Ejemplos típicos de este tipo de software son: Logo, Etoys, Scratch,
GeoGebra etc.
No se deben confundir los conceptos de apertura del código con el
que es escrito el software (código abierto), con el concepto de apertura
del enfoque educativo con el que el software es creado. Existe software
educativo cerrado (tutorial, instruccional, estrictamente pautado) que tiene
su código abierto
3.3.3 Software empresarial
Por software empresarial se entiende generalmente cualquier tipo de
software que está orientado a ayudar a una empresa a mejorar su
productividad o a medirla.
El término engloba una amplia variedad de aplicaciones informáticas
que incluyen desde programas de contabilidad y de ofimática, hasta
sistemas de planificación de recursos empresariales (ERP), pasando por
programas de gestión de clientes (CRM), de recursos humanos, etc.
3.3.4 Bases de datos
Una base de datos o banco de datos (en ocasiones abreviada
BB.DD.) es un conjunto de datos pertenecientes a un mismo contexto y
almacenados sistemáticamente para su posterior uso. En este sentido,
una biblioteca puede considerarse una base de datos compuesta en su
33
mayoría por documentos y textos impresos en papel e indexados para su
consulta. En la actualidad, y debido al desarrollo tecnológico de campos
como la informática y la electrónica, la mayoría de las bases de datos
están en formato digital (electrónico), que ofrece un amplio rango de
soluciones al problema de almacenar datos.
Existen programas denominados sistemas gestores de bases de
datos, abreviados SGBD, que permiten almacenar y posteriormente
acceder a los datos de forma rápida y estructurada. Las propiedades de
estos SGBD, así como su utilización y administración, se estudian dentro
del ámbito de la informática.
Las aplicaciones más usuales son para la gestión de empresas e
instituciones públicas. También son ampliamente utilizadas en entornos
científicos con el objeto de almacenar la información experimental.
Aunque las bases de datos pueden contener muchos tipos de datos,
algunos de ellos se encuentran protegidos por las leyes de varios países.
Por ejemplo, en España los datos personales se encuentran protegidos
por la Ley Orgánica de Protección de Datos de Carácter Personal
(LOPD).
Tipos de bases de datos
Las bases de datos pueden clasificarse de varias maneras, de
acuerdo al contexto que se este manejando, o la utilidad de la misma:
Según la variabilidad de los datos almacenados
Bases de datos estáticas: Éstas son bases de datos de sólo lectura,
utilizadas primordialmente para almacenar datos históricos que
posteriormente se pueden utilizar para estudiar el comportamiento de un
34
conjunto de datos a través del tiempo, realizar proyecciones y tomar
decisiones.
Bases de datos dinámicas: Éstas son bases de datos donde la
información almacenada se modifica con el tiempo, permitiendo
operaciones como actualización, borrado y adición de datos, además de
las operaciones fundamentales de consulta. Un ejemplo de esto puede
ser la base de datos utilizada en un sistema de información de una tienda
de abarrotes, una farmacia, un videoclub.
Según el contenido
Bases de datos bibliográficas: Solo contienen un surrogante
(representante) de la fuente primaria, que permite localizarla. Un registro
típico de una base de datos bibliográfica contiene información sobre el
autor, fecha de publicación, editorial, título, edición, de una determinada
publicación, etc. Puede contener un resumen o extracto de la publicación
original, pero nunca el texto completo, porque si no, estaríamos en
presencia de una base de datos a texto completo. Como su nombre lo
indica, el contenido son cifras o números. Por ejemplo, una colección de
resultados de análisis de laboratorio, entre otras.
Bases de datos de texto completo: Almacenan las fuentes primarias,
como por ejemplo, todo el contenido de todas las ediciones de una
colección de revistas científicas.
Directorios: Un ejemplo son las guías telefónicas en formato
electrónico.
Bases de datos o "bibliotecas" de información química o biológica:
Son bases de datos que almacenan diferentes tipos de información
proveniente de la química, las ciencias de la vida o médicas. Se pueden
considerar en varios subtipos:
35
• Las que almacenan secuencias de nucleótidos o proteínas.
• Las bases de datos de rutas metabólicas.
• Bases de datos de estructura, comprende los registros de
datos experimentales sobre estructuras 3D de biomoléculas-
• Bases de datos clínicas.
• Bases de datos bibliográficas (biológicas, químicas, médicas y
de otros campos): PubChem, Medline, EBSCOhost.
Modelos de bases de datos
Además de la clasificación por la función de las bases de datos,
éstas también se pueden clasificar de acuerdo a su modelo de
administración de datos.
Un modelo de datos es básicamente una "descripción" de algo
conocido como contenedor de datos (algo en donde se guarda la
información), así como de los métodos para almacenar y recuperar
información de esos contenedores. Algunos modelos con frecuencia
utilizados en las bases de datos:
Bases de datos jerárquicas: Éstas son bases de datos que, como
su nombre indica, almacenan su información en una estructura jerárquica.
En este modelo los datos se organizan en una forma similar a un árbol
(visto al revés), en donde un nodo padre de información puede tener
varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos
que no tienen hijos se los conoce como hojas.
Las bases de datos jerárquicas son especialmente útiles en el caso
de aplicaciones que manejan un gran volumen de información y datos
muy compartidos permitiendo crear estructuras estables y de gran
rendimiento.
36
Una de las principales limitaciones de este modelo es su
incapacidad de representar eficientemente la redundancia de datos.
Base de datos de red: Éste es un modelo ligeramente distinto del
jerárquico; su diferencia fundamental es la modificación del concepto de
nodo: se permite que un mismo nodo tenga varios padres (posibilidad no
permitida en el modelo jerárquico).
Fue una gran mejora con respecto al modelo jerárquico, ya que
ofrecía una solución eficiente al problema de redundancia de datos; pero,
aun así, la dificultad que significa administrar la información en una base
de datos de red ha significado que sea un modelo utilizado en su mayoría
por programadores más que por usuarios finales.
Bases de datos transaccionales: Son bases de datos cuyo único
fin es el envío y recepción de datos a grandes velocidades, estas bases
son muy poco comunes y están dirigidas por lo general al entorno de
análisis de calidad, datos de producción e industrial, es importante
entender que su fin único es recolectar y recuperar los datos a la mayor
velocidad posible, por lo tanto la redundancia y duplicación de información
no es un problema como con las demás bases de datos, por lo general
para poderlas aprovechar al máximo permiten algún tipo de conectividad
a bases de datos relacionales.
Bases de datos relacionales: Éste es el modelo utilizado en la
actualidad para modelar problemas reales y administrar datos
dinámicamente. Tras ser postulados sus fundamentos en 1970 por Edgar
Frank Codd, de los laboratorios IBM en San José (California), no tardó en
consolidarse como un nuevo paradigma en los modelos de base de datos.
Su idea fundamental es el uso de "relaciones". Estas relaciones podrían
considerarse en forma lógica como conjuntos de datos llamados "tuplas".
Esto es pensando en cada relación como si fuese una tabla que está
37
compuesta por registros (las filas de una tabla), que representarían las
tuplas, y campos (las columnas de una tabla).
En este modelo, el lugar y la forma en que se almacenen los datos
no tienen relevancia (a diferencia de otros modelos como el jerárquico y el
de red). Esto tiene la considerable ventaja de que es más fácil de
entender y de utilizar para un usuario esporádico de la base de datos. La
información puede ser recuperada o almacenada mediante "consultas"
que ofrecen una amplia flexibilidad y poder para administrar la
información.
El lenguaje más habitual para construir las consultas a bases de
datos relacionales es SQL, Structured Query Language o Lenguaje
Estructurado de Consultas, un estándar implementado por los principales
motores o sistemas de gestión de bases de datos relacionales.
Bases de datos multidimensionales: Son bases de datos ideadas
para desarrollar aplicaciones muy concretas, como creación de Cubos
OLAP. Básicamente no se diferencian demasiado de las bases de datos
relacionales (una tabla en una base de datos relacional podría serlo
también en una base de datos multidimensional), la diferencia está más
bien a nivel conceptual; en las bases de datos multidimensionales los
campos o atributos de una tabla pueden ser de dos tipos, o bien
representan dimensiones de la tabla, o bien representan métricas que se
desean estudiar.
Bases de datos orientadas a objetos: Este modelo, bastante
reciente, y propio de los modelos informáticos orientados a objetos, trata
de almacenar en la base de datos los objetos completos (estado y
comportamiento).
38
Una base de datos orientada a objetos es una base de datos que
incorpora todos los conceptos importantes del paradigma de objetos:
• Encapsulación - Propiedad que permite ocultar la información
al resto de los objetos, impidiendo así accesos incorrectos o conflictos.
• Herencia - Propiedad a través de la cual los objetos heredan
comportamiento dentro de una jerarquía de clases.
• Polimorfismo - Propiedad de una operación mediante la cual
puede ser aplicada a distintos tipos de objetos.
En bases de datos orientadas a objetos, los usuarios pueden definir
operaciones sobre los datos como parte de la definición de la base de
datos. Una operación (llamada función) se especifica en dos partes. La
interfaz (o signatura) de una operación incluye el nombre de la operación
y los tipos de datos de sus argumentos (o parámetros). La
implementación (o método) de la operación se especifica separadamente
y puede modificarse sin afectar la interfaz. Los programas de aplicación
de los usuarios pueden operar sobre los datos invocando a dichas
operaciones a través de sus nombres y argumentos, sea cual sea la
forma en la que se han implementado. Esto podría denominarse
independencia entre programas y operaciones.
Bases de datos documentales: Permiten la indexación a texto
completo, y en líneas generales realizar búsquedas más potentes.
Tesaurus es un sistema de índices optimizado para este tipo de bases de
datos.
Bases de datos deductivas: Un sistema de base de datos
deductiva, es un sistema de base de datos pero con la diferencia de que
permite hacer deducciones a través de inferencias. Se basa
principalmente en reglas y hechos que son almacenados en la base de
39
datos. Las bases de datos deductivas son también llamadas bases de
datos lógicas, a raíz de que se basa en lógica matemática.
3.3.5 Telecomunicaciones
La telecomunicación (del prefijo griego tele, "distancia" y del latín
communicare que significa comunicación, así que para nosotros significa
algo como, "comunicación a distancia") es una técnica consistente en
transmitir un mensaje desde un punto a otro, normalmente con el atributo
típico adicional de ser bidireccional. El término telecomunicación cubre
todas las formas de comunicación a distancia, incluyendo radio, telegrafía,
televisión, telefonía, transmisión de datos e interconexión de
computadoras a nivel de enlace. El Día Mundial de la Telecomunicación
se celebra el 17 de mayo. Telecomunicaciones, es toda transmisión,
emisión o recepción de signos, señales, datos, imágenes, voz, sonidos o
información de cualquier naturaleza que se efectúa a través de cables,
radioelectricidad, medios ópticos, físicos u otros sistemas
electromagnéticos.
3.3.6 Videojuegos
Un videojuego (del inglés video game) o juego de video es un
programa informático creado para el entretenimiento en general y basado
en la interacción entre una o varias personas y un aparato electrónico que
ejecuta dicho videojuego; este dispositivo electrónico puede ser una
computadora, un sistema arcade, una videoconsola, un dispositivo
handheld o un teléfono móvil, los cuales son conocidos como
"plataformas". Aunque, usualmente el término "video" en la palabra
"videojuego" se refiere en sí a un visualizador de gráficos rasterizados,
hoy en día se utiliza para hacer mención de cualquier tipo de visualizador.
40
Entendemos por videojuegos todo tipo de juego digital interactivo,
con independencia de su soporte.
Los jugadores interactúan con el videojuego a través de dispositivos
externos como pueden ser un teclado y ratón, un gamepad, un joystick, o
incluso dispositivos detectores de movimiento. La partida se juega entre
una persona y la máquina o CPU, entre dos o más personas en la misma
consola, por LAN o on-line vía Internet y pueden competir con la máquina,
contra la máquina o entre sí.
3.3.7 Software médico
Software médico se llama a aquellos programas informáticos que
son utilizados para fines médicos. Se utilizan muchos dispositivos
médicos para vigilar o controlar a los pacientes, en su mayoría
controlados por software. Estos programas son producto sanitario y deben
cumplir la normativa de los mismos. Nótese que no todos los programas
que se utilizan en el entorno médico son producto sanitario.
• Monitores: frecuencia cardíaca, la presión arterial, la tasa de
respiración, el uso de software para interpretar la información de sensores
y mostrarlo de una manera significativa en un monitor.
• Medicamentos bombas: estos dispositivos están programados
para el bombeo de una cierta cantidad de plasma, sangre, solución salina,
u otra medicación en un paciente en un determinado tipo. El software
proporciona la capacidad para controlar muchos aspectos de los
procedimientos de tratamiento.
• Análisis: muchos dispositivos, tales como escáneres CAT,
medida de los datos en bruto que es esencialmente de sentido a la gente.
41
Software reinterpreta estos datos para crear las imágenes que los
médicos pueden leer y entender.
• Sistemas expertos: una variedad de sistemas expertos que se
han creado para indicar lo que se debe hacer. Estos son menos utilizados
que las otras cosas que acabó de mencionar.
• Médico de la informática: software para la empresa y de
información aspecto de la medicina.
• Terapia de entrega: el software de marcapasos y
desfibriladores implantables proporciona tolerancia a fallos, en tiempo
real, críticos para la misión de vigilancia de los ritmos cardíacos y la
entrega de terapia asociada.
• Médico de la asistencia sanitaria y los programas informáticos
educativos: software utilizado como un centro de enseñanza o
herramienta de estudio para los profesionales de la salud.
• Software de gestión médica: herramienta a medida o enlatada
que permite a través de la actualización de datos llevar a cabo la gestión
de entidades dedicadas a la salud, tales como hospitales, sanatorios,
clínicas, consultorios, etc. Módulos: turnos, médicos, seguros, farmacia,
internación, compras, pagos, facturación, sistemas, pacientes, historia
clínica, etc.
3.3.8 Software de Cálculo Numérico y
simbólico
El análisis numérico o cálculo numérico es la rama de las
matemáticas que se encarga de diseñar algoritmos para, a través de
42
números y reglas matemáticas simples, simular procesos matemáticos
más complejos aplicados a procesos del mundo real.
El análisis numérico cobra especial importancia con la llegada de los
ordenadores. Los ordenadores son útiles para cálculos matemáticos
extremadamente complejos, pero en última instancia operan con números
binarios y operaciones matemáticas simples.
Desde este punto de vista, el análisis numérico proporcionará todo el
andamiaje necesario para llevar a cabo todos aquellos procedimientos
matemáticos susceptibles de expresarse algorítmicamente, basándose en
algoritmos que permitan su simulación o cálculo en procesos más
sencillos empleando números.
3.3.9 Software de Diseño Asistido (CAD)
El diseño asistido por computadora u ordenador, más conocido por
sus siglas inglesas CAD (computer-aided design), es el uso de un amplio
rango de herramientas computacionales que asisten a ingenieros,
arquitectos y a otros profesionales del diseño en sus respectivas
actividades. También se puede llegar a encontrar denotado con las siglas
CADD, es decir, dibujo y diseño asistido por computadora (computer
asisted drawing and design). El CAD es también utilizado en el marco de
procesos de administración del ciclo de vida de productos (en inglés
product lifecycle management).
Estas herramientas se pueden dividir básicamente en programas de
dibujo en dos dimensiones (2D) y modeladores en tres dimensiones (3D).
Las herramientas de dibujo en 2D se basan en entidades geométricas
vectoriales como puntos, líneas, arcos y polígonos, con las que se puede
operar a través de una interfaz gráfica. Los modeladores en 3D añaden
superficies y sólidos.
43
3.3.10 Software de Control Numérico (CAM)
La fabricación asistida por computadora (en Hispanoamérica) o
fabricación asistida por ordenador (en España), también conocida por las
siglas en inglés CAM (Computer Aided Manufacturing), implica el uso de
computadores y tecnología de cómputo para ayudar en todas las fases de
la manufactura de un producto, incluyendo la planificación del proceso y la
producción, mecanizado, calendarización, administración y control de
calidad, con una intervención del operario mínima.
Debido a sus ventajas, se suele combinar el diseño y la fabricación
asistidos por computadora en los sistemas CAD/CAM. Esta combinación
permite la transferencia de información desde la etapa de diseño a la
etapa de planificación para la fabricación de un producto, sin necesidad
de volver a capturar manualmente los datos geométricos de la pieza. La
base de datos que se desarrolla durante el CAD es procesada por el
CAM, para obtener los datos y las instrucciones necesarias para operar y
controlar la maquinaria de producción, el equipo de manejo de materiales
y las pruebas e inspecciones automatizadas para establecer la calidad del
producto.
Algunas aplicaciones características del CAD/CAM son las
siguientes:
• Calendarización para control numérico, control numérico
computarizado y robots industriales.
• Diseño de dados y moldes para fundición en los que, por
ejemplo, se reprograman tolerancias de contracción.
• Dados para operaciones de trabajo de metales, por ejemplo,
dados complicados para formado de láminas, y dados progresivos para
estampado.
44
• Diseño de herramientas y sopones, y electrodos para
electroerosión.
• Control de calidad e inspección; por ejemplo, máquinas de
medición
por coordenadas programadas en una estación de trabajo
CAD/CAM.
• Planeación y calendarización de proceso.
• Distribución de planta.
3.4 Software libre
El software libre (en inglés free software), esta denominación
también se confunde a veces con gratis por el doble sentido del inglés
free en castellano) es la denominación del software que respeta la libertad
de los usuarios sobre su producto adquirido y, por tanto, una vez obtenido
puede ser usado, copiado, estudiado, cambiado y redistribuido libremente.
Según la Free Software Foundation, el software libre se refiere a la
libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y
mejorar el software; de modo más preciso, se refiere a cuatro libertades
de los usuarios del software: La libertad de usar el programa, con
cualquier propósito, de estudiar el funcionamiento del programa, de
adaptarlo a las propias necesidades, de distribuir copias, con lo cual se
puede ayudar a otros y de mejorar el programa y hacer públicas las
mejoras, de modo que toda la comunidad se beneficie (para la segunda y
última libertad mencionadas, el acceso al código fuente es un requisito
previo).
El software libre suele estar disponible gratuitamente, o al precio de
costo de la distribución a través de otros medios; sin embargo no es
obligatorio que sea así, por lo tanto no hay que asociar software libre a
"software gratuito" (denominado usualmente freeware), ya que,
conservando su carácter de libre, puede ser distribuido comercialmente
45
("software comercial"). Análogamente, el "software gratis" o "gratuito"
incluye en ocasiones el código fuente; no obstante, este tipo de software
no es libre en el mismo sentido que el software libre, a menos que se
garanticen los derechos de modificación y redistribución de dichas
versiones modificadas del programa.
Tampoco debe confundirse software libre con "software de dominio
público". Éste último es aquel software que no requiere de licencia, pues
sus derechos de explotación son para toda la humanidad, porque
pertenece a todos por igual. Cualquiera puede hacer uso de él, siempre
con fines legales y consignando su autoría original. Este software sería
aquel cuyo autor lo dona a la humanidad o cuyos derechos de autor han
expirado, tras un plazo contado desde la muerte de este, habitualmente
70 años. Si un autor condiciona su uso bajo una licencia, por muy débil
que sea, ya no es del dominio público.
Ventajas del Software Libre
1) Escrutinio Público: Al ser muchos las personas que tienen
acceso al código fuente, eso lleva a un proceso de corrección de errores
muy dinámico, no hace falta esperar que el proveedor del software saque
una nueva versión.
2) Independencia del proveedor:
a) Al disponer del código fuente, cualquier persona puede
continuar ofreciendo soporte, desarrollo u otro tipo de servicios para el
software.
b) No estamos supeditados a las condiciones del mercado de
nuestro proveedor, es decir que si este se va del mercado porque no le
conviene y discontinua el soporte, nosotros podemos contratar a otra
persona.
46
3) Manejo de la Lengua:
a) Traducción: cualquier persona capacitada puede traducir y
adaptar un software libre a cualquier lengua.
b) Corrección ortográfica y gramatical: una vez traducido el
software libre puede presentar errores de este tipo, los cuales pueden ser
subsanados con mayor rapidez por una persona capacitada.
4) Mayor seguridad y privacidad:
a) Los sistemas de almacenamiento y recuperación de la
información son públicos. Cualquier persona puede ver y entender como
se almacenan los datos en un determinado formato o sistema.
b) Existe una mayor dificultad para introducir código malicioso
como ser: espía (p/ej. capturador de teclas), de control remoto (p/ej.
Troyano), de entrada al sistema (p/ej. puerta trasera), etc.
5) Garantía de continuidad: el software libre puede seguir siendo
usado aun después de que haya desaparecido la persona que lo elaboro,
dado que cualquier técnico informatico puede continuar desarrollándolo,
mejorándolo o adaptándolo.
6) Ahorro en costos: en cuanto a este tópico debemos distinguir
cuatro grandes costos: de adquisición, de implantación (este a su vez se
compone de costos de migración y de instalación), de soporte o
mantenimiento, y de interoperabilidad. El software libre principalmente
disminuye el costo de adquisición ya que al otorgar la libertad de distribuir
copias la puedo ejercer con la compra de una sola licencia y no con tantas
como computadoras posea (como sucede en la mayoría de los casos de
software propietario). Cabe aclarar que también hay una disminución
significativa en el costo de soporte, no ocurriendo lo mismo con los costos
de implantación y de interoperatividad.
47
Desventajas del software libre
Si observamos la situación actual, es decir la existencia mayoritaria
de Software Propietario, tenemos:
1) Dificultad en el intercambio de archivos: esto se da
mayormente en los documentos de texto (generalmente creados con
Microsoft Word), ya que si los queremos abrir con un Software Libre (p/ ej.
Open Office o LaTeX) nos da error o se pierden datos. Pero esta claro
que si Microsoft Word creara sus documentos con un formato abierto (o
publico) esto no sucedería.
2) Mayores costos de implantación e interoperabilidad: dado que
el software constituye “algo nuevo”, ello supone afrontar un costo de
aprendizaje, de instalación, de migración, de interoperabilidad, etc., cuya
cuantía puede verse disminuida por: mayor facilidad en las instalaciones
y/o en el uso, uso de emuladores (p/ej. Si el usuario utiliza Microsoft
Windows, la solución seria instalar alguna distribución de GNU/Linux y
luego un emulador de Windows, como Wine, VMWare. Terminal X,
Win4Lin). Vale aclarar que el costo de migración esta referido al software,
ya que en lo que hace a Hardware generalmente el Software Libre no
posee mayores requerimientos que el Software Propietario.
Libertades del software libre
De acuerdo con tal definición, el software es "libre" si garantiza las
siguientes libertades:
La libertad de usar el programa, con cualquier propósito.
La libertad de estudiar cómo funciona el programa y modificarlo,
adaptándolo a tus necesidades.
La libertad de distribuir copias del programa, con lo cual puedes
ayudar a tu prójimo.
48
La libertad de mejorar el programa y hacer públicas esas mejoras a
los demás, de modo que toda la comunidad se beneficie.
Tipos de licencias
Una licencia es aquella autorización formal con carácter contractual
que un autor de un software da a un interesado para ejercer "actos de
explotación legales". Pueden existir tantas licencias como acuerdos
concretos se den entre el autor y el licenciatario. Desde el punto de vista
del software libre, existen distintas variantes del concepto o grupos de
licencias:
Licencias GPL: Una de las más utilizadas es la Licencia Pública
General de GNU (GNU GPL). El autor conserva los derechos de autor
(copyright), y permite la redistribución y modificación bajo términos
diseñados para asegurarse de que todas las versiones modificadas del
software permanecen bajo los términos más restrictivos de la propia GNU
GPL. Esto hace que sea imposible crear un producto con partes no
licenciadas GPL: el conjunto tiene que ser GPL.
Es decir, la licencia GNU GPL posibilita la modificación y
redistribución del software, pero únicamente bajo esa misma licencia. Y
añade que si se reutiliza en un mismo programa código "A" licenciado
bajo licencia GNU GPL y código "B" licenciado bajo otro tipo de licencia
libre, el código final "C", independientemente de la cantidad y calidad de
cada uno de los códigos "A" y "B", debe estar bajo la licencia GNU GPL.
En la práctica esto hace que las licencias de software libre se dividan
en dos grandes grupos, aquellas que pueden ser mezcladas con código
licenciado bajo GNU GPL (y que inevitablemente desaparecerán en el
proceso, al ser el código resultante licenciado bajo GNU GPL) y las que
no lo permiten al incluir mayores u otros requisitos que no contemplan ni
49
admiten la GNU GPL y que por lo tanto no pueden ser enlazadas ni
mezcladas con código gobernado por la licencia GNU GPL.
Licencias estilo BSD: Llamadas así porque se utilizan en gran
cantidad de software distribuido junto a los sistemas operativos BSD. El
autor, bajo tales licencias, mantiene la protección de copyright únicamente
para la renuncia de garantía y para requerir la adecuada atribución de la
autoría en trabajos derivados, pero permite la libre redistribución y
modificación, incluso si dichos trabajos tienen propietario. Son muy
permisivas, tanto que son fácilmente absorbidas al ser mezcladas con la
licencia GNU GPL con quienes son compatibles. Puede argumentarse
que esta licencia asegura “verdadero” software libre, en el sentido que el
usuario tiene libertad ilimitada con respecto al software, y que puede
decidir incluso redistribuirlo como no libre. Otras opiniones están
orientadas a destacar que este tipo de licencia no contribuye al desarrollo
de más software libre.
Licencias estilo MPL y derivadas: Esta licencia es de Software
Libre y tiene un gran valor porque fue el instrumento que empleó
Netscape Communications Corp. para liberar su Netscape Communicator
4.0 y empezar ese proyecto tan importante para el mundo del Software
Libre: Mozilla. Se utilizan en gran cantidad de productos de software libre
de uso cotidiano en todo tipo de sistemas operativos. La MPL es Software
Libre y promueve eficazmente la colaboración evitando el efecto "viral" de
la GPL. Desde un punto de vista del desarrollador la GPL presenta un
inconveniente en este punto, y lamentablemente mucha gente se cierra
en banda ante el uso de dicho código. No obstante la MPL no es tan
excesivamente permisiva como las licencias tipo BSD. Estas licencias son
denominadas de copyleft débil. La NPL fue la primera licencia nueva
después de muchos años, que se encargaba de algunos puntos que no
fueron tenidos en cuenta por las licencias BSD y GNU. En el espectro de
50
las licencias de software libre se la puede considerar adyacente a la
licencia estilo BSD, pero perfeccionada.
Copyleft: Hay que hacer constar que el titular de los derechos de
autor (copyright) de un software bajo licencia copyleft puede también
realizar una versión modificada bajo su copyright original, y venderla bajo
cualquier licencia que desee, además de distribuir la versión original como
software libre. Esta técnica ha sido usada como un modelo de negocio por
una serie de empresas que realizan software libre (por ejemplo MySQL);
esta práctica no restringe ninguno de los derechos otorgados a los
usuarios de la versión copyleft. También podría retirar todas las licencias
de software libre anteriormente otorgadas, pero esto obligaría a una
indemnización a los titulares de las licencias en uso. En España, toda
obra derivada está tan protegida como una original, siempre que la obra
derivada parta de una autorización contractual con el autor. En el caso
genérico de que el autor retire las licencias "copyleft", no afectaría de
ningún modo a los productos derivados anteriores a esa retirada, ya que
no tiene efecto retroactivo. En términos legales, el autor no tiene derecho
a retirar el permiso de una licencia en vigencia. Si así sucediera, el
conflicto entre las partes se resolvería en un pleito convencional.
Seguridad relativa: Existe una cierta controversia sobre la
seguridad del software libre frente al software no libre. Un método usado
de forma habitual para determinar la seguridad relativa de los productos
es determinar cuántos fallos de seguridad no parcheados existen en cada
uno de los productos involucrados. Por lo general los usuarios de este
método recomiendan que cuando un producto no proporcione un método
de parchear los fallos de seguridad, no se use dicho producto, al menos
hasta que no esté disponible un arreglo.
51
Un ejemplo es GNU/Linux, del cual se cree que es más seguro que
Windows debido a la diferencia de usuarios,[cita requerida] sin embargo
otros argumentan que la seguridad de este sistema reside en su diseño.
3.5 Software Libres Actuales
GNU/Linux
Es uno de los términos empleados para referirse a la combinación
del núcleo o kernel libre similar a Unix denominado Linux, que es usado
con herramientas de sistema GNU. Su desarrollo es uno de los ejemplos
más prominentes de software libre; todo su código fuente puede ser
utilizado, modificado y redistribuido libremente por cualquiera bajo los
términos de la GPL (Licencia Pública General de GNU) y otra serie de
licencias libres.
A pesar de que Linux es, en sentido estricto, el sistema operativo,
parte fundamental de la interacción entre el núcleo y el usuario (o los
programas de aplicación) se maneja usualmente con las herramientas
GNU. Ejemplo de esto es el intérprete de comandos bash, que permite la
comunicación con el núcleo mediante un completo conjunto de órdenes e
instrucciones. Sin embargo, una parte significativa de la comunidad, así
como muchos medios generales y especializados, prefieren utilizar el
término Linux para referirse a la unión de ambos proyectos.
A las variantes de esta unión de programas y tecnologías, a las que
se les adicionan diversos programas de aplicación de propósitos
específicos o generales se las denomina distribuciones. Su objetivo
consiste en ofrecer ediciones que cumplan con las necesidades de
determinado grupo de usuarios. Algunas de ellas son especialmente
conocidas por su uso en servidores y supercomputadoras. No obstante,
52
es posible instalarlo en una amplia variedad de hardware como
computadoras de escritorio y portátiles.
En computadoras de bolsillo, teléfonos móviles, dispositivos
empotrados, videoconsolas y otros, puede darse el caso en que las partes
de GNU se reemplacen por alternativas más adecuadas.
Aplicaciones
Escritorio KDE 3.4.2 corriendo sobre la distribución Gentoo. Están
abiertos y funcionando un cliente IRC Konversation, un cliente p2p aMule
y un reproductor musical Amarok.
Distribución Ubuntu 8.04 con el escritorio GNOME 2.22 ejecutando
las aplicaciones Mozilla Firefox, navegador web; emesene, cliente libre de
la red WLM y gcalctool, programa de calculadora.En entornos de
escritorio, GNU/Linux ofrece una interfaz gráfica alternativa a la tradicional
interfaz de línea de comandos de Unix. Existen en la actualidad
numerosas aplicaciones gráficas que ofrecen la funcionalidad que está
permitiendo que GNU/Linux se adapte como herramienta de escritorio.
Muchas distribuciones permiten el arranque del sistema
directamente desde un CD/DVD (llamados LiveCD) sin modificar el disco
duro del ordenador en el que se ejecuta. Para este tipo de distribuciones,
en general, los archivos de imagen (archivos ISO) están disponibles en
Internet para su descarga.
Otras posibilidades incluyen iniciar el arranque desde una red, desde
un disco flexible o disquete o desde unidades de almacenamiento USB.
53
Ventajas
La creciente popularidad de GNU/Linux se debe, entre otras
razones, a su estabilidad, al acceso al código fuente (lo que permite
personalizar el funcionamiento y auditar la seguridad y privacidad de los
datos tratados), a la independencia de proveedor, a la seguridad, a la
rapidez con que incorpora los nuevos adelantos tecnológicos (IPv6,
microprocesadores de 64 bits), a la escalabilidad (se pueden crear
clusters de cientos de computadoras), a la activa comunidad de desarrollo
que hay a su alrededor, a su interoperatibilidad y a la abundancia de
documentación relativa a los procedimientos.
IBM Roadrunner, la supercomputadora más potente de 2008,
funciona bajo una distribución Gnu/LinuxHay varias empresas que
comercializan soluciones basadas en GNU/Linux: IBM, Novell (SuSE),
Red Hat (RHEL), Rxart, Canonical Ltd. (Ubuntu), así como miles de
PYMES que ofrecen productos o servicios basados en esta tecnología.
Supercomputadoras: Dentro del segmento de supercomputadoras,
a noviembre de 2009, el uso de este sistema ascendió al 89.2% de las
computadoras más potentes del mundo por su confiabilidad, seguridad y
libertad para modificar el código. De acuerdo con TOP500.org, que lleva
estadísticas sobre las 500 principales supercomputadoras del mundo, a
noviembre de 2009: 446 usaban una distribución basada en GNU/Linux,
25 Unix, 23 Mezclas, 1 BSD y solo el 1% (5) Windows.
GNU/Linux, además de liderar el mercado de servidores de Internet
debido, entre otras cosas, a la gran cantidad de soluciones que tiene para
este segmento, tiene un crecimiento progresivo en computadoras de
escritorio y portátiles. Además, es el sistema base que se ha elegido para
el proyecto OLPC: One Laptop Per Child.
54
Hay una serie de administraciones públicas que han mostrado su
apoyo al software libre, sea migrando total o parcialmente sus servidores
y sistemas de escritorio, sea subvencionándolo. Como ejemplos se tiene
a Alemania, Australia, Brasil, España, Chile, China, Cuba, México, Perú,
República Dominicana, Uruguay, Venezuela, El Salvador.
Fundación Mozilla
La Fundación Mozilla es una organización sin ánimo de lucro
dedicada a la creación de software libre. Tiene como misión "mantener la
elección y la innovación en Internet".
Cualquier persona o compañía puede colaborar en el proyecto
Mozilla, ya sea aportando código, probando los productos, escribiendo
documentación o de cualquier otra manera. El trabajo desinteresado de
los contribuidores de Mozilla hace que sea una organización sin fines de
lucro.
Características del software de Mozilla
Tres importantes características de los productos de Mozilla son: el
código abierto, el respeto por los estándares y la portabilidad o posibilidad
para la interacción del software en múltiples plataformas.
Código abierto: El código de los productos de Mozilla está liberado
bajo los términos de las licencias MPL, GPL o LGPL. Es software libre y
por lo tanto, eso implica que además de que los productos se pueden
descargar gratuitamente de Internet, el código fuente está a disposición
de todo el mundo y está permitida la libre redistribución con o sin
modificaciones de ese código fuente por parte de cualquiera, bajo los
términos de la licencia. El trabajo del proyecto Mozilla, al estar amparado
por una licencia libre, se entrega sin ningún tipo de garantía de
55
responsabilidad sobre el software. Existen algunas condiciones si se
desea redistribuir el software identificado con la marca de Mozilla y su
imagen.
Respeto por los estándares: El software de Mozilla es respetuoso
con la mayoría de los estándares establecidos y en desarrollo, de las
organizaciones destinadas a velar por un Internet abierto y equilibrado,
como el W3C, la ECMA, o la IETF, que favorecen la igualdad de
oportunidades y no el control de la red por unos pocos, dejando a los
usuarios la libertad de elegir entre más de una opción.
Característica multiplataforma
Una de las principales ventajas del software de Mozilla, es que
puede interactuar con una gran cantidad de plataformas, como Microsoft
Windows, MacOS, GNU/Linux, BSD, Solaris, y otras muchas más. Esa
característica multiplataforma del software de Mozilla, facilita la
interoperabilidad en caso de tener que trabajar con varios sistemas
operativos diferentes, una rápida adaptación en las migraciones a otros
sistemas, o sencillamente, la posibilidad de seguir con el mismo software
para aquellos que quieran probar un nuevo ambiente informático.
El software de Mozilla se traduce a una gran cantidad de idiomas,
gracias a los contribuidores del MLP, entre los cuales se encuentra el
español, en sus dialectos argentino y de España.
Productos
Algunos de los productos desarrollados por el proyecto Mozilla son
los navegadores Mozilla Application Suite, Mozilla Firefox, Camino, el
cliente de correo Mozilla Thunderbird o el calendario Mozilla Sunbird.
También se pueden contar proyectos como Bugzilla, un sistema de
56
notificación de fallos vía web, Minimo un navegador basado en Gecko
para pequeños dispositivos, GtkMozEmbed, tecnología destinada a
empotrar Mozilla en aplicaciones GTK, etc.
Mozilla Firefox
Es un navegador web libre descendiente de Mozilla Application
Suite, desarrollado por la Corporación Mozilla, la Fundación Mozilla y un
gran número de voluntarios externos.
Firefox es un navegador multiplataforma y está disponible en varias
versiones de Microsoft Windows, Mac OS X, GNU/Linux y algunos
sistemas basados en Unix. Su código fuente es software libre, publicado
bajo una triple licencia GPL/LGPL/MPL.
Incluye navegación por pestañas, corrector ortográfico, búsqueda
progresiva, marcadores dinámicos, un administrador de descargas y un
sistema de búsqueda integrado que utiliza el motor de búsqueda que
desee el usuario. Además se pueden añadir funciones a través de
complementos desarrolladas por terceros, entre las más populares están
Adblock Plus, Video DownloadHelper, NoScript, DownThemAll!, Cooliris,
Xmarks (antiguo Foxmarks Bookmark Synchronizer), Forecastfox, Boost a
Facebook, WOT, Tab Mix Plus y FoxyTunes.
Características de Mozilla Firefox
Las características que incluye Mozilla Firefox son la navegación por
pestañas, corrector ortográfico, marcadores, bloqueador de ventanas
emergentes, atajos del teclado, soporte para motores de búsqueda y un
gestor de descargas.
57
Los usuarios pueden personalizar Firefox con las extensiones y
temas. Mozilla mantiene los repositorios de extensiones en
addons.mozilla.org, con casi 2000 complementos a partir de septiembre
de 2007.
Firefox proporciona un entorno para los desarrolladores web, en el
que se puede utilizar herramientas incorporadas, como la Consola de
errores o el Inspector DOM, o extensiones, como Firebug.
Compatibilidad con estándares web
Mozilla Firefox es compatible con varios estándares web, incluyendo
HTML, XML, XHTML, SVG 1.1 (parcial), CSS 1, 2 y 3, ECMAScript
(JavaScript), DOM, MathML, DTD, XSLT, XPath, e imágenes PNG con
transparencia alfa. Firefox también incorpora las normas propuestas por el
WHATWG, y canvas element.
Seguridad
Firefox usa un sistema de seguridad sandbox. Utiliza el sistema
SSL/TLS para proteger la comunicación con los servidores web, utilizando
fuerte criptografía cuando se utiliza el protocolo Https. También
proporciona apoyo a las tarjetas inteligentes para fines de autenticación.
Cuenta con una protección antiphishing, antimalware e integración con el
antivirus.
4. Proceso de creación del software
Se define como Proceso al conjunto ordenado de pasos a seguir
para llegar a la solución de un problema u obtención de un producto, en
este caso particular, para lograr la obtención de un producto software que
resuelva un problema.
58
El proceso de creación de software puede llegar a ser muy complejo,
dependiendo de su porte, características y criticidad del mismo. Por
ejemplo la creación de un sistema operativo es una tarea que requiere
proyecto, gestión, numerosos recursos y todo un equipo disciplinado de
trabajo. En el otro extremo, si se trata de un sencillo programa (por
ejemplo, la resolución de una ecuación de segundo orden), éste puede
ser realizado por un solo programador (incluso aficionado) fácilmente. Es
así que normalmente se dividen en tres categorías según su tamaño
(líneas de código) y/o costo: de Pequeño, Mediano y Gran porte. Existen
varias metodologías para estimarlo, una de las más populares es el
sistema COCOMO que provee métodos y un software (programa) que
calcula y provee una estimación de todos los costos de producción en un
"proyecto software" (relación horas/hombre, costo monetario, cantidad de
líneas fuente de acuerdo a lenguaje usado, etc.).
Considerando los de gran porte, es necesario realizar tantas y tan
complejas tareas, tanto técnicas, de gerenciamiento, fuerte gestión y
análisis diversos (entre otras) que toda una ingeniería hace falta para su
estudio y realización: es la Ingeniería de Software.
En tanto que en los de mediano porte, pequeños equipos de trabajo
(incluso un avezado analista-programador solitario) pueden realizar la
tarea. Aunque, siempre en casos de mediano y gran porte (y a veces
también en algunos de pequeño porte, según su complejidad), se deben
seguir ciertas etapas que son necesarias para la construcción del
software. Tales etapas, si bien deben existir, son flexibles en su forma de
aplicación, de acuerdo a la metodología o Proceso de Desarrollo escogido
y utilizado por el equipo de desarrollo o por el analista-programador
solitario (si fuere el caso).
Los "procesos de desarrollo de software" poseen reglas
preestablecidas, y deben ser aplicados en la creación del software de
59
mediano y gran porte, ya que en caso contrario lo más seguro es que el
proyecto o no logre concluir o termine sin cumplir los objetivos previstos, y
con variedad de fallos inaceptables (fracasan, en pocas palabras). Entre
tales "procesos" los hay ágiles o livianos (ejemplo XP), pesados y lentos
(ejemplo RUP) y variantes intermedias; y normalmente se aplican de
acuerdo al tipo, porte y tipología del software a desarrollar, a criterio del
líder (si lo hay) del equipo de desarrollo. Algunos de esos procesos son
Extreme Programming (XP), Rational Unified Process (RUP), Feature
Driven Development (FDD), etc.
Cualquiera sea el "proceso" utilizado y aplicado al desarrollo del
software (RUP, FDD, etc), y casi independientemente de él, siempre se
debe aplicar un "Modelo de Ciclo de Vida".
Cuando un proyecto fracasa, rara vez es debido a fallas técnicas, la
principal causa de fallos y fracasos es la falta de aplicación de una buena
metodología o proceso de desarrollo. Entre otras, una fuerte tendencia,
desde hace pocas décadas, es mejorar las metodologías o procesos de
desarrollo, o crear nuevas y concientizar a los profesionales en su
utilización adecuada. Normalmente los especialistas en el estudio y
desarrollo de estas áreas (metodologías) y afines (tales como modelos y
hasta la gestión misma de los proyectos) son los Ingenieros en Software,
es su orientación. Los especialistas en cualquier otra área de desarrollo
informático (analista, programador, Lic. en Informática, Ingeniero en
Informática, Ingeniero de Sistemas, etc.) normalmente aplican sus
conocimientos especializados pero utilizando modelos, paradigmas y
procesos ya elaborados.
Es común para el desarrollo de software de mediano porte que los
equipos humanos involucrados apliquen sus propias metodologías,
normalmente un híbrido de los procesos anteriores y a veces con criterios
propios.
60
El proceso de desarrollo puede involucrar numerosas y variadas
tareas, desde lo administrativo, pasando por lo técnico y hasta la gestión y
el gerenciamiento. Pero casi rigurosamente siempre se cumplen ciertas
etapas mínimas; las que se pueden resumir como sigue:
Captura, Elicitación, Especificación y Análisis de requisitos (ERS)
Diseño
Codificación
Pruebas (unitarias y de integración)
Instalación y paso a Producción
Mantenimiento
4.1Modelos de proceso o ciclo de vida
Para cada una de las fases o etapas listadas en el ítem anterior,
existen sub-etapas (o tareas). El modelo de proceso o modelo de ciclo de
vida utilizado para el desarrollo define el orden para las tareas o
actividades involucradas también definen la coordinación entre ellas,
enlace y realimentación entre las mencionadas etapas. Entre los más
conocidos se puede mencionar: modelo en cascada o secuencial, modelo
espiral, modelo iterativo incremental. De los antedichos hay a su vez
algunas variantes o alternativas, más o menos atractivas según sea la
aplicación requerida y sus requisitos.
4.1.1 Modelo cascada
Este, aunque es más comúnmente conocido como modelo en
cascada es también llamado "modelo clásico", "modelo tradicional" o
"modelo lineal secuencial".
El modelo en cascada puro difícilmente se utilice tal cual, pues esto
implicaría un previo y absoluto conocimiento de los requisitos, la no
61
volatilidad de los mismos (o rigidez) y etapas subsiguientes libres de
errores; ello sólo podría ser aplicable a escasos y pequeños desarrollos
de sistemas. En estas circunstancias, el paso de una etapa a otra de las
mencionadas sería sin retorno, por ejemplo pasar del Diseño a la
Codificación implicaría un diseño exacto y sin errores ni probable
modificación o evolución: "codifique lo diseñado que no habrán en
absoluto variantes ni errores". Esto es utópico; ya que intrínsecamente el
software es de carácter evolutivo, cambiante y difícilmente libre de
errores, tanto durante su desarrollo como durante su vida operativa.
Algún cambio durante la ejecución de una cualquiera de las etapas
en este modelo secuencial implicaría reiniciar desde el principio todo el
ciclo completo, lo cual redundaría en altos costos de tiempo y desarrollo.
Sin embargo, el modelo cascada en algunas de sus variantes es uno de
los actualmente más utilizados, por su eficacia y simplicidad, más que
nada en software de pequeño y algunos de mediano porte; pero nunca (o
muy rara vez) se lo usa en su forma pura, como se dijo anteriormente. En
lugar de ello, siempre se produce alguna realimentación entre etapas, que
no es completamente predecible ni rígida; esto da oportunidad al
desarrollo de productos software en los cuales hay ciertas incertezas,
cambios o evoluciones durante el ciclo de vida. Así por ejemplo, una vez
capturados (elicitados) y especificados los requisitos (primera etapa) se
puede pasar al diseño del sistema, pero durante esta última fase lo más
probable es que se deban realizar ajustes en los requisitos (aunque sean
mínimos), ya sea por fallas detectadas, ambigüedades o bien por que los
propios requisitos han cambiado o evolucionado; con lo cual se debe
retornar a la primera o previa etapa, hacer los pertinentes reajustes y
luego continuar nuevamente con el diseño; esto último se conoce como
realimentación. Lo normal en el modelo cascada será entonces la
aplicación del mismo con sus etapas realimentadas de alguna forma,
permitiendo retroceder de una a la anterior (e incluso poder saltar a varias
anteriores) si es requerido.
62
Hay más variantes similares al modelo: refino de etapas (más
etapas, menores y más específicas) o incluso mostrar menos etapas de
las indicadas, aunque en tal caso la faltante estará dentro de alguna otra.
El orden de esas fases indicadas en el ítem previo es el lógico y
adecuado, pero adviértase, como se dijo, que normalmente habrá
realimentación hacia atrás.
El modelo lineal o en Cascada es el paradigma más antiguo y
extensamente utilizado, sin embargo las críticas a él (ver desventajas)
han puesto en duda su eficacia. Pese a todo tiene un lugar muy
importante en la Ingeniería de software y continúa siendo el más utilizado;
y siempre es mejor que un enfoque al azar.
Desventajas del modelo cascada:
• Los cambios introducidos durante el desarrollo pueden
confundir al equipo profesional en las etapas tempranas del proyecto. Si
los cambios se producen en etapa madura (codificación o prueba) pueden
ser catastróficos para un proyecto grande.
• No es frecuente que el cliente o usuario final explicite clara y
completamente los requisitos (etapa de inicio); y el modelo lineal lo
requiere. La incertidumbre natural en los comienzos es luego difícil de
acomodar.
• El cliente debe tener paciencia ya que el software no estará
disponible hasta muy avanzado el proyecto. Un error detectado por el
cliente (en fase de operación) puede ser desastroso, implicando reinicio
del proyecto, con altos costos.
63
4.1.2 Modelos evolutivos
El software evoluciona con el tiempo. Los requisitos del usuario y del
producto suelen cambiar conforme se desarrolla el mismo. Las fechas de
mercado y la competencia hacen que no sea posible esperar a poner en
el mercado un producto absolutamente completo, por lo que se debe
introducir una versión funcional limitada de alguna forma para aliviar las
presiones competitivas.
En esas u otras situaciones similares los desarrolladores necesitan
modelos de progreso que estén diseñados para acomodarse a una
evolución temporal o progresiva, donde los requisitos centrales son
conocidos de antemano, aunque no estén bien definidos a nivel detalle.
En el modelo Cascada y Cascada Realimentado no se tiene en
cuenta la naturaleza evolutiva del software, se plantea como estático con
requisitos bien conocidos y definidos desde el inicio.
Los evolutivos son modelos iterativos, permiten desarrollar versiones
cada vez más completas y complejas, hasta llegar al objetivo final
deseado; incluso evolucionar más allá, durante la fase de operación.
Los modelos “Iterativo Incremental” y “Espiral” (entre otros) son dos
de los más conocidos y utilizados del tipo evolutivo.
4.1.2.1 Modelo iterativo incremental
En términos generales, los pasos generales que sigue el proceso de
desarrollo de un producto software. En el modelo de ciclo de vida
seleccionado, se identifican claramente dichos pasos. La Descripción del
Sistema es esencial para especificar y confeccionar los distintos
incrementos hasta llegar al Producto global y final. Las actividades
64
concurrentes (Especificación, Desarrollo y Validación) sintetizan el
desarrollo pormenorizado de los incrementos, que se hará
posteriormente.
Ciclo iterativo incremental: Este permite la entrega de versiones
parciales a medida que se va construyendo el producto final. Es decir, a
medida que cada incremento definido llega a su etapa de operación y
mantenimiento. Cada versión emitida incorpora a los anteriores
incrementos las funcionalidades y requisitos que fueron analizados como
necesarios.
El incremental es un modelo de tipo evolutivo que está basado en
varios ciclos Cascada realimentados aplicados repetidamente, con una
filosofía iterativa.
Bajo este modelo se entrega software “por partes funcionales más
pequeñas”, pero reutilizables, llamadas incrementos. En general cada
incremento se construye sobre aquel que ya fue entregado.
El cliente utiliza inicialmente ese sistema básico intertanto, el
resultado de su uso y evaluación puede aportar al plan para el desarrollo
del/los siguientes incrementos (o versiones). Además también aportan a
ese plan otros factores, como lo es la priorización (mayor o menor
urgencia en la necesidad de cada incremento) y la dependencia entre
incrementos (o independencia).
Luego de cada integración se entrega un producto con mayor
funcionalidad que el previo. El proceso se repite hasta alcanzar el
software final completo.
Nota: Puede ser considerado y útil, en cualquier momento o
incremento incorporar temporalmente el paradigma MCP como
65
complemento, teniendo así una mixtura de modelos que mejoran el
esquema y desarrollo general.
Ejemplo: Un procesador de texto que sea desarrollado bajo el
paradigma Incremental podría aportar, en principio, funciones básicas de
edición de archivos y producción de documentos (algo como un editor
simple). En un segundo incremento se le podría agregar edición más
sofisticada, y de generación y mezcla de documentos. En un tercer
incremento podría considerarse el agregado de funciones de corrección
ortográfica, esquemas de paginado y plantillas; en un cuarto capacidades
de dibujo propias y ecuaciones matemáticas. Así sucesivamente hasta
llegar al procesador final requerido. Así, el producto va creciendo,
acercándose a su meta final, pero desde la entrega del primer incremento
ya es útil y funcional para el cliente, el cual observa una respuesta rápida
en cuanto a entrega temprana; sin notar que la fecha límite del proyecto
puede no estar acotada ni tan definida, lo que da margen de operación y
alivia presiones al equipo de desarrollo.
Como se dijo, el Iterativo Incremental es un modelo del tipo
evolutivo, es decir donde se permiten y esperan probables cambios en los
requisitos en tiempo de desarrollo; se admite cierto margen para que el
software pueda evolucionar. Aplicable cuando los requisitos son
medianamente bien conocidos pero no son completamente estáticos y
definidos, cuestión esa que si es indispensable para poder utilizar un
modelo Cascada.
El modelo es aconsejable para el desarrollo de software en el cual
se observe, en su etapa inicial de análisis, que posee áreas bastante bien
definidas a cubrir, con suficiente independencia como para ser
desarrolladas en etapas sucesivas. Tales áreas a cubrir suelen tener
distintos grados de apremio por lo cual las mismas se deben priorizar en
un análisis previo, es decir, definir cual será la primera, la segunda, y así
66
sucesivamente; esto se conoce como “definición de los incrementos” con
base en priorización. Pueden no existir prioridades funcionales por parte
del cliente, pero el desarrollador debe fijarlas de todos modos y con algún
criterio, ya que basándose en ellas se desarrollarán y entregarán los
distintos incrementos.
El hecho de que existan incrementos funcionales del software lleva
inmediatamente a pensar en un esquema de desarrollo modular, por tanto
este modelo facilita tal paradigma de diseño.
En resumen, un modelo incremental lleva a pensar en un desarrollo
modular, con entregas parciales del producto software denominados
“incrementos” del sistema, que son escogidos según prioridades
predefinidas de algún modo. El modelo permite una implementación con
refinamientos sucesivos (ampliación y/o mejora). Con cada incremento se
agrega nueva funcionalidad o se cubren nuevos requisitos o bien se
mejora la versión previamente implementada del producto software.
Este modelo brinda cierta flexibilidad para que durante el desarrollo
se incluyan cambios en los requisitos por parte del usuario, un cambio de
requisitos propuesto y aprobado puede analizarse e implementarse como
un nuevo incremento o, eventualmente, podrá constituir una
mejora/adecuación de uno ya planeado. Aunque si se produce un cambio
de requisitos por parte del cliente que afecte incrementos previos ya
terminados (detección/incorporación tardía) se debe evaluar la factibilidad
y realizar un acuerdo con el cliente, ya que puede impactar fuertemente
en los costos.
La selección de este modelo permite realizar entregas funcionales
tempranas al cliente (lo cual es beneficioso tanto para él como para el
grupo de desarrollo). Se priorizan las entregas de aquellos módulos o
incrementos en que surja la necesidad operativa de hacerlo, por ejemplo
67
para cargas previas de información, indispensable para los incrementos
siguientes.
El modelo iterativo incremental no obliga a especificar con precisión
y detalle absolutamente todo lo que el sistema debe hacer, (y cómo),
antes de ser construido (como el caso del cascada, con requisitos
congelados). Sólo se hace en el incremento en desarrollo. Esto torna más
manejable el proceso y reduce el impacto en los costos. Esto es así,
porque en caso de alterar o rehacer los requisitos, solo afecta una parte
del sistema. Aunque, lógicamente, esta situación se agrava si se presenta
en estado avanzado, es decir en los últimos incrementos. En definitiva, el
modelo facilita la incorporación de nuevos requisitos durante el desarrollo.
El modelo incremental no es recomendable para casos de sistemas
de tiempo real, de alto nivel de seguridad, de procesamiento distribuido,
y/o de alto índice de riesgos.
4.1.2.2 Modelo espiral
El modelo espiral fue propuesto inicialmente por Barry Boehm. Es un
modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con
los aspectos controlados y sistemáticos del Modelo Cascada. Proporciona
potencial para desarrollo rápido de versiones incrementales. En el modelo
Espiral el software se construye en una serie de versiones incrementales.
En las primeras iteraciones la versión incremental podría ser un modelo
en papel o bien un prototipo. En las últimas iteraciones se producen
versiones cada vez más completas del sistema diseñado.
Proyectos pequeños requieren baja cantidad de tareas y también de
formalidad. En proyectos mayores o críticos cada región de tareas
contiene labores de más alto nivel de formalidad. En cualquier caso se
68
aplican actividades de protección (por ejemplo, gestión de configuración
del software, garantía de calidad, etc.).
El modelo espiral puede ir adaptándose y aplicarse a lo largo de todo
el Ciclo de vida del software (en el modelo clásico, o cascada, el proceso
termina a la entrega del software).
Una visión alternativa del modelo puede observarse examinando el
"eje de punto de entrada de proyectos". Cada uno de los circulitos (๏)
fijados a lo largo del eje representan puntos de arranque de los distintos
proyectos (relacionados); a saber:
• Un proyecto de "Desarrollo de Conceptos" comienza al inicio de
la espiral, hace múltiples iteraciones hasta que se completa, es la zona
marcada con verde.
• Si lo anterior se va a desarrollar como producto real, se incia
otro proyecto: "Desarrollo de nuevo Producto". Que evolucionará con
iteraciones hasta culminar; es la zona marcada en color azul.
• Eventual y análogamente se generarán proyectos de "Mejoras
de Productos" y de "Mantenimiento de productos", con las iteraciones
necesarias en cada área (zonas roja y gris, respectivamente).
Cuando la espiral se caracteriza de esta forma, está operativa hasta
que el software se retira, eventualmente puede estar inactiva (el proceso),
pero cuando se produce un cambio el proceso arranca nuevamente en el
punto de entrada apropiado (por ejemplo, en "Mejora del Producto").
El modelo espiral da un enfoque realista, que evoluciona igual que el
software; se adapta muy bien para desarrollos a gran escala.
69
El Espiral utiliza el MCP para reducir riesgos y permite aplicarlo en
cualquier etapa de la evolución. Mantiene el enfoque clásico (cascada)
pero incorpora un marco de trabajo iterativo que refleja mejor la realidad.
Este modelo requiere considerar riesgos técnicos en todas las
etapas del proyecto; aplicado adecuadamente debe reducirlos antes de
que sean un verdadero problema.
El Modelo evolutivo como el Espiral es particularmente apto para el
desarrollo de Sistemas Operativos (complejos); también en sistemas de
altos riesgos o críticos (Ej. navegadores y controladores aeronáuticos) y
en todos aquellos en que sea necesaria una fuerte gestión del proyecto y
sus riesgos, técnicos o de gestión.
Desventajas importantes:
• Requiere mucha experiencia y habilidad para la evaluación de
los riesgos, lo cual es requisito para el éxito del proyecto.
• Es difícil convencer a los grandes clientes que se podrá
controlar este enfoque evolutivo.
Este modelo no se ha usado tanto, como el Cascada (Incremental) o
MCP, por lo que no se tiene bien medida su eficacia, es un paradigma
relativamente nuevo y difícil de implementar y controlar.
4.1.2.3 Modelo espiral Win & Win
Una variante interesante del Modelo Espiral previamente visto es el
"Modelo espiral Win-Win"8 (Barry Boehm). El Modelo Espiral previo
(clásico) sugiere la comunicación con el cliente para fijar los requisitos, en
que simplemente se pregunta al cliente qué necesita y él proporciona la
70
información para continuar; pero esto es en un contexto ideal que rara vez
ocurre. Normalmente cliente y desarrollador entran en una negociación,
se negocia coste frente a funcionalidad, rendimiento, calidad, etc.
"Es así que la obtención de requisitos requiere una negociación, que
tiene éxito cuando ambas partes ganan".
Las mejores negociaciones se fuerzan en obtener "Victoria &
Victoria" (Win & Win), es decir que el cliente gane obteniendo el producto
que lo satisfaga, y el desarrollador también gane consiguiendo
presupuesto y fecha de entrega realista. Evidentemente, este modelo
requiere fuertes habilidades de negociación.
El modelo Win-Win define un conjunto de actividades de negociación
al principio de cada paso alrededor de la espiral; se definen las siguientes
actividades:
1. Identificación del sistema o subsistemas clave de los directivos
(saber qué quieren).
2. Determinación de "condiciones de victoria" de los directivos
(saber qué necesitan y los satisface)
3. Negociación de las condiciones "victoria" de los directivos para
obtener condiciones "Victoria & Victoria" (negociar para que ambos
ganen).
5. Etapas en el desarrollo del software
5.1Captura, análisis y especificación de requisitos
Al inicio de un desarrollo (no de un proyecto), esta es la primera fase
que se realiza, y, según el modelo de proceso adoptado, puede casi
71
terminar para pasar a la próxima etapa (caso de Modelo Cascada
Realimentado) o puede hacerse parcialmente para luego retomarla (caso
Modelo Iterativo Incremental u otros de carácter evolutivo).
En simple palabras y básicamente, durante esta fase, se adquieren,
reúnen y especifican las características funcionales y no funcionales que
deberá cumplir el futuro programa o sistema a desarrollar.
Las bondades de las características, tanto del sistema o programa a
desarrollar, como de su entorno, parámetros no funcionales y arquitectura
dependen enormemente de lo bien lograda que esté esta etapa. Esta es,
probablemente, la de mayor importancia y una de las fases más difíciles
de lograr certeramente, pues no es automatizable, no es muy técnica y
depende en gran medida de la habilidad y experiencia del analista que la
realice.
Involucra fuertemente al usuario o cliente del sistema, por tanto tiene
matices muy subjetivos y es difícil de modelar con certeza y/o aplicar una
técnica que sea "la más cercana a la adecuada" (de hecho no existe "la
estrictamente adecuada"). Si bien se han ideado varias metodologías,
incluso software de apoyo, para captura, elicitación y registro de
requisitos, no existe una forma infalible o absolutamente confiable, y
deben aplicarse conjuntamente buenos criterios y mucho sentido común
por parte del o los analistas encargados de la tarea; es fundamental
también lograr una fluida y adecuada comunicación y comprensión con el
usuario final o cliente del sistema.
El artefacto más importante resultado de la culminación de esta
etapa es lo que se conoce como especificación de requisitos software o
simplemente documento ERS.
72
Como se dijo, la habilidad del analista para interactuar con el cliente
es fundamental; lo común es que el cliente tenga un objetivo general o
problema a resolver, no conoce en absoluto el área (informática), ni su
jerga, ni siquiera sabe con precisión qué debería hacer el producto
software (qué y cuantas funciones) ni, mucho menos, cómo debe operar.
En otros casos menos frecuentes, el cliente "piensa" que sabe
precisamente lo que el software tiene que hacer, y generalmente acierta
muy parcialmente, pero su empecinamiento entorpece la tarea de
licitación. El analista debe tener la capacidad para lidiar con este tipo de
problemas, que incluyen relaciones humanas; tiene que saber ponerse al
nivel del usuario para permitir una adecuada comunicación y
comprensión.
Escasas son las situaciones en que el cliente sabe con certeza e
incluso con completitud lo que requiere de su futuro sistema, este es el
caso más sencillo para el analista.
Las tareas relativas a captura, elicitación, modelado y registro de
requerimientos, además de ser sumamente importante, puede llegar a ser
dificultosa de lograr acertadamente y llevar bastante tiempo relativo al
proceso total del desarrollo; al proceso y metodologías para llevar a cabo
este conjunto de actividades normalmente se las asume parte propia de la
Ingeniería de Software.
Hay grupos de estudio e investigación, en todo el mundo, que están
exclusivamente abocados a la idear modelos, técnicas y procesos para
intentar lograr la correcta captura, análisis y registro de requerimientos.
Estos grupos son los que normalmente hablan de la Ingeniería en
Requisitos; es decir se plantea ésta como un área o disciplina pero no
como una carrera universitaria en si misma.
73
Algunos requisitos no necesitan la presencia del cliente, para ser
capturados y/o analizados; en ciertos casos los puede proponer el mismo
analista o, incluso, adoptar unilateralmente decisiones que considera
adecuadas (tanto en requerimientos funcionales como no funcionales).
Por citar ejemplos probables: Algunos requisitos sobre la
arquitectura del sistema, requisitos no funcionales tales como los relativos
al rendimiento, nivel de soporte a errores operativos, plataformas de
desarrollo, relaciones internas o ligas entre la información (entre registros
o tablas de datos) a almacenar en caso de bases o bancos de datos, etc.
Algunos funcionales tales como opciones secundarias o de soporte
necesarias para una mejor o más sencilla operatividad; etc.
La obtención de especificaciones a partir del cliente (u otros actores
intervinientes) es un proceso humano muy interactivo e iterativo;
normalmente a medida que se captura la información, se la analiza y
realimenta con el cliente, refinándola, puliéndola y corrigiendo si es
necesario; cualquiera sea el método de ERS utilizado. EL analista
siempre debe llegar a conocer la temática y el problema a resolver,
dominarlo, hasta cierto punto, hasta el ámbito que el futuro sistema a
desarrollar lo abarque. Por ello el analista debe tener alta capacidad para
comprender problemas de muy diversas áreas o disciplinas de trabajo
(que no son específicamente suyas); así por ejemplo, si el sistema a
desarrollar será para gestionar información de una aseguradora y sus
sucursales remotas, el analista se debe compenetrar en cómo ella trabaja
y maneja su información, desde niveles muy bajos e incluso llegando
hasta los gerenciales. Dada a gran diversidad de campos a cubrir, los
analistas suelen ser asistidos por especialistas, es decir gente que conoce
profundamente el área para la cual se desarrollará el software;
evidentemente una única persona (el analista) no puede abarcar tan vasta
cantidad de áreas del conocimiento. En empresas grandes de desarrollo
74
de productos software, es común tener analistas especializados en ciertas
áreas de trabajo.
Contrariamente, no es problema del cliente, es decir él no tiene por
qué saber nada de software, ni de diseños, ni otras cosas relacionadas;
sólo se debe limitar a aportar objetivos, datos e información (de mano
propia o de sus registros, equipos, empleados, etc) al analista, y guiado
por él, para que, en primera instancia, defina el "Universo de Discurso", y
con posterior trabajo logre confeccionar el adecuado documento ERS.
Es bien conocida la presión que sufren los desarrolladores de
sistemas informáticos para comprender y/o rescatar las necesidades de
los clientes/usuarios. Cuanto más complejo es el contexto del problema
más difícil es lograrlo, a veces se fuerza a los desarrolladores a tener que
convertirse en casi expertos de los dominios que analizan.
Cuando esto no sucede es muy probable que se genere un conjunto
de requisitos erróneos o incompletos y por lo tanto un producto de
software con alto grado de desaprobación por parte de los
clientes/usuarios y un altísimo costo de reingeniería y mantenimiento.
Todo aquello que no se detecte, o resulte mal entendido en la etapa inicial
provocará un fuerte impacto negativo en los requisitos, propagando esta
corriente degradante a lo largo de todo el proceso de desarrollo e
incrementando su perjuicio cuanto más tardía sea su detección.
5.1.1 Procesos, modelado y formas de licitación
de requisitos
Siendo que la captura, licitación y especificación de requisitos, es
una parte crucial en el proceso de desarrollo de software, ya que de esta
etapa depende el logro de los objetivos finales previstos, se han ideado
modelos y diversas metodologías de trabajo para estos fines. También
75
existen herramientas software que apoyan las tareas relativas realizadas
por el ingeniero en requisitos.
El estándar IEEE 830-1998 brinda una normalización de las
"Prácticas Recomendadas para la Especificación de Requisitos Software".
A medida que se obtienen los requisitos, normalmente se los va
analizando, el resultado de este análisis, con o sin el cliente, se plasma en
un documento, conocido como ERS o Especificación de Requisitos
Software, cuya estructura puede venir definida por varios estándares,
tales como CMM-I.
Un primer paso para realizar el relevamiento de información es el
conocimiento y definición acertada lo que se conoce como "Universo de
Discurso" del problema, que se define y entiende por:
Universo de Discurso (UdeD): es el contexto general en el cual el
software deberá ser desarrollado y deberá operar. El UdeD incluye todas
las fuentes de información y todas las personas relacionadas con el
software.
Esas personas son conocidas también como actores de ese
universo. El UdeD es la realidad circunstanciada por el conjunto de
objetivos definidos por quienes demandaron el software.
A partir de la extracción y análisis de información en su ámbito se
obtienen todas las especificaciones necesarias y tipos de requisitos para
el futuro producto software.
El objetivo de la Ingeniería de Requisitos (IR) es sistematizar el
proceso de definición de requisitos permitiendo elicitar, modelar y analizar
el problema, generando un compromiso entre los Ingenieros de
76
Requisitos y los clientes/usuarios, ya que ambos participan en la
generación y definición de los requisitos del sistema. La IR aporta un
conjunto de métodos, técnicas y herramientas que asisten a los
ingenieros de requisitos (analistas) para obtener requerimientos lo más
seguros, veraces, completos y oportunos posibles, permitiendo
básicamente:
• Comprender el problema
• Facilitar la obtención de las necesidades del cliente/usuario
• Validar con el cliente/usuario
• Garantizar las especificaciones de requisitos
Si bien existen diversas formas, modelos y metodologías para
elicitar, definir y documentar requerimientos, no se puede decir que
alguna de ellas sea mejor o peor que la otra, suelen tener muchísimo en
común, y todas cumplen el mismo objetivo. Sin embargo, lo que si se
puede decir sin dudas es que es indispensable utilizar alguna de ellas
para documentar las especificaciones del futuro producto software. Así
por ejemplo, hay un grupo de investigación argentino que desde hace
varios años ha propuesto y estudia el uso del LEL (Léxico Extendido del
Lenguaje) y Escenarios como metodología, aquí se presenta una de las
tantas referencias y bibliografía sobre ello.
Una posible lista, general y ordenada, de tareas recomendadas para
obtener la definición de lo que se debe realizar, los productos a obtener y
las técnicas a emplear durante la actividad de elicitación de requisitos, en
fase de Especificación de Requisitos Software es:
1. Obtener información sobre el dominio del problema y el sistema
actual (UdeD).
2. Preparar y realizar las reuniones para elicitación/negociación.
3. Identificar/revisar los objetivos del usuario.
77
4. Identificar/revisar los objetivos del sistema.
5. Identificar/revisar los requisitos de información.
6. Identificar/revisar los requisitos funcionales.
7. Identificar/revisar los requisitos no funcionales.
8. Priorizar objetivos y requisitos.
Algunos principios básicos a tener en cuenta:
• Presentar y entender cabalmente el dominio de la información
del problema.
• Definir correctamente las funciones que debe realizar el
Software.
• Representar el comportamiento del software a consecuencias
de acontecimientos externos, particulares, incluso inesperados.
• Reconocer requisitos incompletos, ambiguos o contradictorios.
• Dividir claramente los modelos que representan la información,
las funciones y comportamiento y características no funcionales.
5.1.2 Clasificación e identificación de
requerimientos
Se pueden identificar dos formas de requisitos:
• Requisitos de usuario: Los requisitos de usuario son frases en
lenguaje natural junto a diagramas con los servicios que el sistema debe
proporcionar, así como las restricciones bajo las que debe operar.
• Requisitos de sistema: Los requisitos de sistema determinan
los servicios del sistema y pero con las restricciones en detalle. Sirven
como contrato.
Es decir, ambos son lo mismo, pero con distinto nivel de detalle.
78
Ejemplo de requisito de usuario: El sistema debe hacer préstamos
Ejemplo de requisito de sistema: Función préstamo: entrada código socio,
código ejemplar; salida: fecha devolución; etc.
Se clasifican en tres los tipos de requisitos de sistema:
• Requisitos funcionales
Los requisitos funcionales describen:
• Los servicios que proporciona el sistema (funciones).
• La respuesta del sistema ante determinadas entradas.
• El comportamiento del sistema en situaciones particulares.
• Requisitos no funcionales
Los requisitos no funcionales son restricciones de los servicios o
funciones que ofrece el sistema (ej. cotas de tiempo, proceso de
desarrollo, rendimiento, etc.)
Ejemplo 1. La biblioteca Central debe ser capaz de atender
simultáneamente a todas las bibliotecas de la Universidad
Ejemplo 2. El tiempo de respuesta a una consulta remota no debe
ser superior a 1/2 s
A su vez, hay tres tipos de requisitos no funcionales:
• Requisitos del producto. Especifican el comportamiento del
producto (Ej. prestaciones, memoria, tasa de fallos, etc.)
• Requisitos organizativos. Se derivan de las políticas y
procedimientos de las organizaciones de los clientes y desarrolladores
(Ej. estándares de proceso, lenguajes de programación, etc.)
79
• Requisitos externos. Se derivan de factores externos al sistema
y al proceso de desarrollo (Ej. requisitos legislativos, éticos, etc.)
• Requisitos del dominio. Los requisitos del dominio se derivan
del dominio de la aplicación y reflejan características de dicho dominio.
Pueden ser funcionales o no funcionales.
Ej. El sistema de biblioteca de la Universidad debe ser capaz de
exportar datos mediante el Lenguaje de Intercomunicación de Bibliotecas
de España (LIBE). Ej. El sistema de biblioteca no podrá acceder a
bibliotecas con material censurado.
5.2Diseño del sistema
El Diseño de sistemas es el arte de definir la arquitectura de
hardware y software, componentes, módulos y datos de un sistema de
cómputo para satisfacer ciertos requerimientos. Es la etapa posterior al
análisis de sistemas.
El diseño de sistemas tiene un rol más respetado y crucial en la
industria de procesamiento de datos. La importancia del software
multiplataforma ha incrementado la ingeniería de software a costa de los
diseños de sistemas.
Los métodos de Análisis y diseño orientado a objetos se están
volviendo en los métodos más ampliamente utilizados para el diseño de
sistemas. El UML se ha vuelto un estandard en el Análisis y diseño
orientado a objetos. Es ampliamente utilizado para el modelado de
sistemas de software y se ha incrementado su uso para el diseño de
sistemas que no son software así como organizaciones.
80
5.3Codificación del software
Durante esta la etapa se realizan las tareas que comúnmente se
conocen como programación; que consiste, esencialmente, en llevar a
código fuente, en el lenguaje de programación elegido, todo lo diseñado
en la fase anterior. Esta tarea la realiza el programador, siguiendo por
completo los lineamientos impuestos en el diseño y en consideración
siempre a los requisitos funcionales y no funcionales (ERS) especificados
en la primera etapa.
Es común pensar que la etapa de programación o codificación
(algunos la llaman implementación) es la que insume la mayor parte del
trabajo de desarrollo del software; sin embargo, esto puede ser relativo (y
generalmente aplicable a sistemas de pequeño porte) ya que las etapas
previas son cruciales, críticas y pueden llevar bastante más tiempo. Se
suele hacer estimaciones de un 30% del tiempo total insumido en la
programación, pero esta cifra no es consistente ya que depende en gran
medida de las características del sistema, su criticidad y el lenguaje de
programación elegido.8 En tanto menor es el nivel del lenguaje mayor
será el tiempo de programación requerido, así por ejemplo se tardaría
más tiempo en codificar un algoritmo en lenguaje ensamblador que el
mismo programado en lenguaje C.
Mientras se programa la aplicación, sistema, o software en general,
se realizan también tareas de depuración, esto es la labor de ir liberando
al código de los errores factibles de ser hallados en esta fase (de
semántica, sintáctica y lógica). Hay una suerte de solapamiento con la
fase siguiente, ya que para depurar la lógica es necesario realizar
pruebas unitarias, normalmente con datos de prueba; claro es que no
todos los errores serán encontrados sólo en la etapa de programación,
habrán otros que se encontrarán durante las etapas subsiguientes. La
aparición de algún error funcional (mala respuesta a los requerimientos)
81
eventualmente puede llevar a retornar a la fase de diseño antes de
continuar la codificación.
Durante la fase de programación, el código puede adoptar varios
estados, dependiendo de la forma de trabajo y del lenguaje elegido, a
saber:
• Código fuente: es el escrito directamente por los
programadores en editores de texto, lo cual genera el programa. Contiene
el conjunto de instrucciones codificadas en algún lenguaje de alto nivel.
Puede estar distribuido en paquetes, procedimientos, bibliotecas fuente,
etc.
Código objeto: es el código binario o intermedio resultante de
procesar con un compilador el código fuente. Consiste en una
traducción completa y de una sola vez de éste último. El código
objeto no es inteligible por el ser humano (normalmente es formato
binario) pero tampoco es directamente ejecutable por la
computadora. Se trata de una representación intermedia entre el
código fuente y el código ejecutable, a los fines de un enlace final
con las rutinas de biblioteca y entre procedimientos o bien para su
uso con un pequeño intérprete intermedio.
El código objeto no existe si el programador trabaja con un
lenguaje a modo de intérprete puro, en este caso el mismo
intérprete se encarga de traducir y ejecutar línea por línea el código
fuente (de acuerdo al flujo del programa), en tiempo de ejecución.
En este caso tampoco existe el o los archivos de código ejecutable.
Una desventaja de esta modalidad es que la ejecución del
programa o sistema es un poco más lenta que si se hiciera con un
intérprete intermedio, y bastante más lenta que si existe el o los
archivos de código ejecutable. Es decir no favorece el rendimiento
en velocidad de ejecución. Pero una gran ventaja de la modalidad
82
intérprete puro, es que el esta forma de trabajo facilita
enormemente la tarea de depuración del código fuente (frente a la
alternativa de hacerlo con un compilador puro). Frecuentemente se
suele usar una forma mixta de trabajo (si el lenguaje de
programación elegido lo permite), es decir inicialmente trabajar a
modo de intérprete puro, y una vez depurado el código fuente
(liberado de errores) se utiliza un compilador del mismo lenguaje
para obtener el código ejecutable completo, con lo cual se agiliza la
depuración y la velocidad de ejecución se optimiza.
Código ejecutable: Es el código binario resultado de enlazar uno o
más fragmentos de código objeto con las rutinas y bibliotecas
necesarias. Constituye uno o más archivos binarios con un formato
tal que el sistema operativo es capaz de cargarlo en la memoria
RAM (eventualmente también parte en una memoria virtual), y
proceder a su ejecución directa. Por lo anterior se dice que el
código ejecutable es directamente "inteligible por la computadora".
El código ejecutable, también conocido como código máquina, no
existe si se programa con modalidad de "intérprete puro".
5.4 Pruebas (unitarias y de integración)
Entre las diversas pruebas que se le efectúan al software se pueden
distinguir principalmente:
• Prueba unitarias: Consisten en probar o testear piezas de
software pequeñas; a nivel de secciones, procedimientos, funciones y
módulos; aquellas que tengan funcionalidades específicas. Dichas
pruebas se utilizan para asegurar el correcto funcionamiento de secciones
de código, mucho más reducidas que el conjunto, y que tienen funciones
concretas con cierto grado de independencia.
83
• Pruebas de integración: Se realizan una vez que las pruebas
unitarias fueron concluidas exitosamente; con éstas se intenta asegurar
que el sistema completo, incluso los subsistemas que componen las
piezas individuales grandes del software funcionen correctamente al
operar e interoperar en conjunto.
Las pruebas normalmente se efectúan con los llamados datos de
prueba, que es un conjunto seleccionado de datos típicos a los que puede
verse sometido el sistema y/o módulos y/o bloques de código. También se
escogen: Datos que llevan a condiciones límites al software a fin de
probar su tolerancia y robustez; datos de utilidad para mediciones de
rendimiento; datos que propocan condiciones eventuales o particulares
poco comunes y a las que el software normalmente no estará sometido
pero pueden ocurrir; etc. Los "datos de prueba" no necesariamente son
ficticios o "creados", pero normalmente si lo son los de poca probabilidad
de ocurrencia.
Generalmente, existe una fase probatoria final y completa del
software, llamada Beta Test, durante la cual el sistema instalado en
condiciones normales de operación y trabajo es probado exhaustivamente
a fin de encontrar errores, inestabilidades, respuestas erróneas, etc. que
hayan pasado los previos controles. Estas son normalmente realizadas
por personal idóneo contratado o afectado específicamente a ello. Los
posibles errores encontrados se transmiten a los desarrolladores para su
depuración. En el caso de software de desarrollo "a pedido", el usuario
final (cliente) es el que realiza el Beta Test, teniendo para ello un período
de prueba pactado con el desarrollador.
5.5 Instalación y paso a producción
La instalación del software es el proceso por el cual los programas
desarrollados son transferidos apropiadamente al computador destino,
84
inicializados, y, eventualmente, configurados; todo ello con el propósito de
ser ya utilizados por el usuario final. Constituye la etapa final en el
desarrollo propiamente dicho del software. Luego de ésta el producto
entrará en la fase de funcionamiento y producción, para el que fuera
diseñado.
La instalación, dependiendo del sistema desarrollado, puede
consistir en una simple copia al disco rígido destino (casos raros
actualmente); o bien, más comúnmente, con una de complejidad
intermedia en la que los distintos archivos componentes del software
(ejecutables, bibliotecas, datos propios, etc.) son descomprimidos y
copiados a lugares específicos preestablecidos del disco; incluso se crean
vínculos con otros productos, además del propio sistema operativo. Este
último caso, comúnmente es un proceso bastante automático que es
creado y guiado con heramientas software específicas (empaquetado y
distribución, instaladores).
En productos de mayor complejidad, la segunda alternativa es la
utilizada, pero es realizada y/o guiada por especialistas; puede incluso
requerirse la instalación en varios y distintos computadores (instalación
distribuida).
También, en software de mediana y alta complejidad normalmente
es requerido un proceso de configuración y chequeo, por el cual se
asignan adecuados parámetros de funcionamiento y se testea la
operatividad funcional del producto.
En productos de venta masiva las instalaciones completas, si son
relativamente simples, suelen ser realizadas por los propios usuarios
finales (tales como sistemas operativos, paquetes de oficina, utilitarios,
etc.) con herramientas propias de instalación guiada; incluso la
configuración suele ser automática. En productos de diseño específico o
85
"a medida" la instalación queda restringida, normalmente, a personas
especialistas involucradas en el desarrollo del software en cuestión.
Una vez realizada exitosamente la instalación del software, el mismo
pasa a la fase de producción (operatividad), durante la cual cumple las
funciones para las que fue desarrollado, es decir, es finalmente utilizado
por el (o los) usuario final, produciendo los resultados esperados.
5.6 Mantenimiento
El mantenimiento de software es el proceso de control, mejora y
optimización del software ya desarrollado e instalado, que también incluye
depuración de errores y defectos que puedan haberse filtrado de la fase
de pruebas de control y beta test. Esta fase es la última (antes de iterar,
según el modelo empleado) que se aplica al ciclo de vida del desarrollo de
software. La fase de mantenimiento es la que viene después de que el
software está operativo y en producción.
De un buen diseño y documentación del desarrollo dependerá cómo
será la fase de mantenimiento, tanto en costo temporal como monetario.
Modificaciones realizadas a un software que fue elaborado con una
documentación indebida o pobre y mal diseño puede llegar a ser tan
costosa como el desarrollar el software desde el inicio. Por ello, es de
fundamental importancia respetar debidamente todas las tareas de las
fases del desarrollo y mantener adecuada y completa documentación.
El período de la fase de mantenimiento es normalmente el mayor en
todo el ciclo de vida. Esta fase puede involucrar actualizaciones y
evoluciones del software; no necesariamente implica que el sistema tuvo
errores. Uno o más cambios en el software, por ejemplo de adaptación o
evolutivos, puede llevar incluso a rever y adaptar desde parte de las
primeras fases del desarrollo inicial, alterando todas las demás;
86
dependiendo de cuán profundos sean los cambios. El modelo cascada
común es particularmente costoso en mantenimiento, ya que su rigidez
implica que cualquier cambio provoca regreso a fase inicial y fuertes
alteraciones en las demás fases del ciclo de vida.
Durante el período de mantenimiento, es común que surjan nuevas
revisiones y versiones del producto; que lo liberan más depurado, con
mayor y mejor funcionalidad, mejor rendimiento, etc. Varias son las
facetas que pueden ser alteradas para provocar cambios deseables,
evolutivos, adaptaciones o ampliaciones y mejoras.
Básicamente se tienen los siguientes tipos de cambios:
• Perfectivos: Aquellos que llevan a una mejora de la calidad
interna del software en cualquier aspecto: Reestructuración del código,
definición más clara del sistema y su documentación; optimización del
rendimiento y eficiencia.
• Evolutivos: Agregados, modificaciones, incluso eliminaciones,
necesarias en el software para cubrir su expansión o cambio según las
necesidades del usuario.
• Adaptivos: Modificaciones que afectan a los entornos en los
que el sistema opera, tales como: Cambios de configuración del hardware
(por actualización o mejora de componentes electrónicos), cambios en el
software de base, en gestores de base de datos, en comunicaciones, etc.
• Correctivos: Alteraciones necesarias para corregir errores de
cualquier tipo en el producto software desarrollado.
87
CONCLUSION
El software esta constituido por toda la parte intangible del computador,
es decir los programas, procesos y cómputos que los la conforman las
operaciones de un sistema de computación. Este esta compuesto por
programas, los cuales son una secuencia de instrucciones que el
computador puede interpretar, estos programas están divididos en rutinas
y estas cumplen una determinada función dentro del mismo.
Cabe señalar que el software se clasifica en: software de sistema el cual
es un programa que sirve para controlar e interactuar con el sistema
operativo, este proporciona control sobre el hardware y soporta los otros
programas, los software de programación son un conjunto de
herramientas que permiten el desarrollo de programas informáticos
usando diferentes alternativas y lenguajes de programación de manera
practica, existen otras clasificaciones como el software libre entre otros.
El software libre se refiere a la libertad de los usuarios para ejecutar,
copiar, distribuir, estudiar, cambiar y mejorar el software; se refiere a
cuatro libertades de los usuarios del software: la libertad de usar el
programa, con cualquier propósito; de estudiar el funcionamiento del
programa, y adaptarlo a las necesidades; de distribuir copias, con lo cual
se puede ayudar a otros y de mejorar el programa y hacer públicas las
mejoras, de modo que toda la comunidad se beneficie.
De igual manera el software puede estar constituido por diferentes
modelos como por ejemplo el modelo de procesos de ciclo de vida el cual
define el orden de las tareas o actividades involucradas, también crea la
coordinación, enlace y retroalimentación entre ellas para cada etapa, el
modelo cascada o modelo clásico requiere conocimientos de los
requisitos y este podría ser aplicable a pequeños o pocos desarrollos de
sistemas.
88
El modelo espiral se constituye en una serie de versiones incrementales
para crear un modelo o prototipo y a medida que este avanza se crean
versiones mas avanzadas del sistema, referente al modelo Win-Win la
idea de este modelo es que el cliente o usuario obtenga un producto que
satisfaga y que el que desarrolla el sistema gane contratos por la eficacia
del sistema.
El software en desarrollo requiere de algunas etapas que nos ayudara a
reunir y especificar las características funcionales y no funcionales que
debe cumplir el programa o sistema a desarrollar, así como también,
identificar los requerimientos por parte de los usuarios respecto a las
restricciones que encuentre en el sistema, el cual determina los servicios
del sistema.
El diseño del sistema es una arte ya que esta define la arquitectura del
hardware y el software, los componentes, los módulos, y datos del
sistema de cómputos para satisfacer ciertos requerimientos así como la
codificación, las pruebas, la instalación y el mantenimiento que hacen que
el sistema funcione de manera óptima y eficiente.
Durante nuestra carrera como estudiantes hemos sido testigos de los
grandes y sorprendentes avances que la tecnología ha desarrollado en
los últimos años. Estas nuevas tecnologías nos demuestran con hechos y
resultados lo importante que son para la actualidad; a su vez se van
convirtiendo en un estándar para poder competir en el mundo real.
Un factor que ha sido relevante en este desarrollo de tecnologías ha sido
el Software, ya que ha facilitado y agilizado varios procesos que ya se
manejaban con anterioridad. Además que se ha convertido en una
característica primordial que deben tener las Organizaciones para poder
convertirse en una de las mejores a nivel mundial.
89
B I B L I O G R A F I A
JACOBSON, Ivar; BOOCH, Grady; RUMBAUGH, James (2000). El
Proceso Unificado de Desarrollo de Software (en Español). Pearson
Addisson-Wesley.
Pressman, Roger S. (2003). Ingeniería del Software, un enfoque Práctico,
Quinta edición edición (en Español), Mc Graw Hill. ISBN 84-481-3214-9.
Gottesdiener, Ellen; P. Sawyer (2002). Requirements by Collaboration:
Workshops for Defining Needs (en Inglés). Addison-Wesley Professional,
pp. 368 p.
90
ANEXOS
91
Sistema Operativo
92
Interacción entre el SO con el resto de las partes.
Componentes del Sistema Operativo
Mapa conceptual del software libre.
93
Mapa conceptual del software libre y de código abierto.
Modelo cascada realimentado para el ciclo de vida.
94
Diagrama genérico del desarrollo evolutivo incremental.
Modelo iterativo incremental para el ciclo de vida del software.
95
Modelo espiral para el ciclo de vida del software.
Diagrama de tareas para captura y análisis de requisitos.
96
Diagrama a bloques de la operación de un buen compilador
97