Trabajo Software 7

140
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÒN SUPERIOR UNIVERSIDAD NACIONAL EXPERIMENTAL SIMÓN RODRÍGUEZ LICENCIATURA EN ADMINISTRACIÓN CÁTEDRA: INTRODUCCIÓN AL PROCESAMIENTO DE DATOS FACILITADOR (A): LIC. ZAIMA MARQUEZ SOFTWARE Participantes

Transcript of Trabajo Software 7

Page 1: Trabajo Software 7

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

Page 2: Trabajo Software 7

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

Page 3: Trabajo Software 7

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

Page 4: Trabajo Software 7

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

Page 5: Trabajo Software 7

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

Page 6: Trabajo Software 7

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

Page 7: Trabajo Software 7

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

Page 8: Trabajo Software 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

Page 9: Trabajo Software 7

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

Page 10: Trabajo Software 7

• 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

Page 11: Trabajo Software 7

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

Page 12: Trabajo Software 7

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

Page 13: Trabajo Software 7

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

Page 14: Trabajo Software 7

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

Page 15: Trabajo Software 7

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

Page 16: Trabajo Software 7

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

Page 17: Trabajo Software 7

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

Page 18: Trabajo Software 7

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

Page 19: Trabajo Software 7

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

Page 20: Trabajo Software 7

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

Page 21: Trabajo Software 7

• 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

Page 22: Trabajo Software 7

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

Page 23: Trabajo Software 7

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

Page 24: Trabajo Software 7

• 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

Page 25: Trabajo Software 7

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

Page 26: Trabajo Software 7

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

Page 27: Trabajo Software 7

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

Page 28: Trabajo Software 7

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

Page 29: Trabajo Software 7

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

Page 30: Trabajo Software 7

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

Page 31: Trabajo Software 7

• 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

Page 32: Trabajo Software 7

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

Page 33: Trabajo Software 7

• 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

Page 34: Trabajo Software 7

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

Page 35: Trabajo Software 7

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

Page 36: Trabajo Software 7

• 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

Page 37: Trabajo Software 7

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

Page 38: Trabajo Software 7

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

Page 39: Trabajo Software 7

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

Page 40: Trabajo Software 7

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

Page 41: Trabajo Software 7

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

Page 42: Trabajo Software 7

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

Page 43: Trabajo Software 7

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

Page 44: Trabajo Software 7

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

Page 45: Trabajo Software 7

• 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

Page 46: Trabajo Software 7

("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

Page 47: Trabajo Software 7

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

Page 48: Trabajo Software 7

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

Page 49: Trabajo Software 7

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

Page 50: Trabajo Software 7

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

Page 51: Trabajo Software 7

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

Page 52: Trabajo Software 7

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

Page 53: Trabajo Software 7

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

Page 54: Trabajo Software 7

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

Page 55: Trabajo Software 7

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

Page 56: Trabajo Software 7

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

Page 57: Trabajo Software 7

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

Page 58: Trabajo Software 7

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

Page 59: Trabajo Software 7

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

Page 60: Trabajo Software 7

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

Page 61: Trabajo Software 7

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

Page 62: Trabajo Software 7

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

Page 63: Trabajo Software 7

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

Page 64: Trabajo Software 7

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

Page 65: Trabajo Software 7

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

Page 66: Trabajo Software 7

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

Page 67: Trabajo Software 7

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

Page 68: Trabajo Software 7

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

Page 69: Trabajo Software 7

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

Page 70: Trabajo Software 7

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

Page 71: Trabajo Software 7

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

Page 72: Trabajo Software 7

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

Page 73: Trabajo Software 7

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

Page 74: Trabajo Software 7

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

Page 75: Trabajo Software 7

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

Page 76: Trabajo Software 7

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

Page 77: Trabajo Software 7

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

Page 78: Trabajo Software 7

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

Page 79: Trabajo Software 7

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

Page 80: Trabajo Software 7

• 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

Page 81: Trabajo Software 7

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

Page 82: Trabajo Software 7

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

Page 83: Trabajo Software 7

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

Page 84: Trabajo Software 7

• 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

Page 85: Trabajo Software 7

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

Page 86: Trabajo Software 7

"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

Page 87: Trabajo Software 7

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

Page 88: Trabajo Software 7

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

Page 89: Trabajo Software 7

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

Page 90: Trabajo Software 7

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

Page 91: Trabajo Software 7

ANEXOS

91

Page 92: Trabajo Software 7

Sistema Operativo

92

Page 93: Trabajo Software 7

Interacción entre el SO con el resto de las partes.

Componentes del Sistema Operativo

Mapa conceptual del software libre.

93

Page 94: Trabajo Software 7

Mapa conceptual del software libre y de código abierto.

Modelo cascada realimentado para el ciclo de vida.

94

Page 95: Trabajo Software 7

Diagrama genérico del desarrollo evolutivo incremental.

Modelo iterativo incremental para el ciclo de vida del software.

95

Page 96: Trabajo Software 7

Modelo espiral para el ciclo de vida del software.

Diagrama de tareas para captura y análisis de requisitos.

96