miércoles, 18 de junio de 2008

Software


EL SOFTWARE

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 es quizá uno de los productos de la ingeniería que más ha evolucionado en muy poco tiempo, pasando del software empírico o artesanal hasta llegar al software desarrollado bajo los principios y herramientas de la ingeniería del software.

Bajo 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 es parte del software: es decir, abarca todo lo intangible, todo lo "no físico" relacionado.


HISTORIA

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. La teoría que forma la base de la mayor parte del software moderno fue propuesta por vez primera por Alan Turing en su ensayo de 1936, "Los números computables", con una aplicación al problema de decisión.

CLASIFICACIÒN


Si bien esta distinción es, en cierto modo, arbitraria, y a veces confusa, se puede clasificar al software de la siguiente forma:

Software de sistema: Es aquel que permite que el hardware funcione. Su objetivo es desvincular adecuadamente al programador de los detalles del computador 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 y utilidades de apoyo que permiten su mantenimiento. Incluye entre otros:
Sistemas operativos
Controladores de dispositivo
Herramientas de diagnóstico
Herramientas de Corrección y Optimización
Servidores
Utilidades

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:
Editores de texto
Compiladores
Intérpretes
Enlazadores
Depuradores

Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas, en entorno visual, de forma 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).

Software de aplicación: 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:
Aplicaciones de control y automatización industrial
Aplicaciones ofimáticas
Software educativo
Software médico
Software de Cálculo Numérico
Software de Diseño Asistido
Software de Control Numérico



· Software libre (free software) 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:
o La libertad de usar el programa, con cualquier propósito (libertad 0).
o La libertad de estudiar el funcionamiento del programa, y adaptarlo a las necesidades (libertad 1).
o La libertad de distribuir copias, con lo que puede ayudar a otros (libertad 2).
o La libertad de mejorar el programa y hacer publicas las mejoras, de modo que toda la comunidad se beneficie.
· El software gratis o gratuito (denominado usualmente freeware) incluye en algunas ocasiones el código fuente; sin embargo, 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.

· De acuerdo a la apertura de su código fuente:

De código fuente abierto: también llamado "de fuente abierta" u "open source". Es aquel software que permite tener acceso a su código fuente a través de". Es el software que no tiene disponible su código fuente disponible por ningún medio, ni siquiera pagando. Generalmente tiene esta característica cuando su creador desea proteger su propiedad intelectual.

· De acuerdo a su protección:
De dominio publico: es el software que no esta protegido por ningún tipo de licencia. Cualquiera puede tomarlo y luego de modificarlo, hacerlo propio.
Protegido por licencias: es el tipo de software protegido con una licencia de uso. Dentro de este grupo tenemos:

b.1) Protegido con copyright: es decir, con derechos de autor (o de copia). El usuario no puede adquirirlo para usarlo y luego vender copias (salvo con la autorización de su creador).
b.2) Protegido con copyleft: es aquel cuyos términos de distribución no permiten a los redistribuidores agregar ninguna restricción adicional. Quiere decir que cada copia del software, aun modificada, sigue siendo como era antes.

· De acuerdo a su "legalidad":
Legal: es aquel software que se posee o circula sin contravenir ninguna norma. Por ejemplo, si tengo un software con su respectiva licencia original y con su certificado de autenticidad, o si lo tengo instalado en una sola computadora (porque la licencia solo me permite hacer eso).
Ilegal: es el software que se posee o circula violando una norma determinada. Por ejemplo: tengo licencia para usarlo en una sola computadora pero lo instalo en más de una, no tengo la licencia pero lo puedo utilizar mediante artificios (cracks, patchs, loaders, key generators, números de serie duplicados, etc.)


· De acuerdo a su "filosofía":
Propietario: es aquel software que refleja el hecho de que su propiedad absoluta permanece en manos de quien tiene sus derechos y no del usuario, quien únicamente puede utilizarlo bajo ciertas condiciones. Su uso, redistribución y/o modificación están prohibidos o restringidos de modo tal que no es posible llevarlos a cabo. Es decir, este tipo de software le da al usuario derechos limitados sobre su funcionamiento, cuyo alcance establece el autor o quien posea ese derecho. Por ejemplo, ese derecho puede ser el de ejecutar el programa "tal como es" en una determinada computadora.


Libre: es el tipo de software que le da al usuario la libertad de usarlo, estudiarlo, modificarlo, mejorarlo, adaptarlo y redistribuirlo, con la única restricción de no agregar ninguna restricción adicional al software modificado, mejorado, adaptado o redistribuido. Vale aclarar que debe permitir el acceso al código fuente, debido a que ello es una condición imprescindible para ejercer las libertades de estudiarlo, modificarlo, mejorarlo y adaptarlo.


El proceso de creación de software


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 (ejemplo: resolución de una ecuación de segundo orden), ello puede ser realizado por un solo programador (incluso aficionado) fácilmente. Es así que normalmente se dividen en tres según su tamaño (líneas de código) y/o costo: de Pequeño, Mediano y Gran porte. Existen métodos para estimarlo, por ejemplo el sistema COCOMO.

Considerando los de gran porte, es necesario realizar tantas y 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: la Ingeniería de Software.


Considerando los de mediano porte, pequeños equipos de trabajo (incluso un avezado analista-programador solitario) puede realizar la tarea. Aunque deben seguir ciertas etapas que son necesarias para la construcción del software. Ellas, 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.


Los "procesos de desarrollo de software", que poseen reglas preestablecidas, deben ser aplicados en la creación del software de mediano y gran porte, caso contrario normalmente el proyecto o no logra concluir o termina sin cumplir los objetivos previstos y con variedad de fallos inaceptables. Hay procesos rápidos o livianos (XP), pesados y lentos (RUP) y variantes intermedias; y se aplican de acuerdo al tipo y porte del software a desarrollar. Algunos esos procesos son Extreme Programming (XP), Rational Unified Process (RUP), Feature Driven Development (FDD), etc.).

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.
El proceso de desarrollo puede involucrar numerosas y variadas tareas, desde lo administrativo, pasando por lo técnico y hasta la gestión y gerenciamiento. Pero casi rigurosamente siempre se cumplen ciertas etapas mínimas, las que se pueden resumir como sigue:

Captura (elicitación) y Especificación de requisitos (ERS)
Análisis
Codificación
Implementación
Pruebas (unitarias e integrales)
Paso a Producción
Mantenimiento

Para cada una de estas fases, existen sub.-etapas (o tareas). El Modelo de Proceso o Modelo de Ciclo de Vida utilizado define el orden para las tareas o actividades involucradas en el desarrollo, también definen su coordinación, enlace y realimentación entre las mencionadas etapas. Los más conocidos son: Modelo Cascada o secuencial.

Clasificación del Software de acuerdo al tipo de trabajo realizado

Feeware

Freeware es un software de computadora que se distribuye sin cargo. A veces se incluye el código fuente, pero no es lo usual. El Freeware suele incluir una licencia de uso, que permite su redistribución pero con algunas restricciones, como no modificar la aplicación en sí, ni venderla, y dar cuenta de su autor. Programa computacional cuyo costo económico para el usuario final es cero, independiente de las condiciones de distribución y uso que tenga. Este tipo de software la mayoría son utilerías para realizar cierta tarea como el programa Win Rar, el cual nos sirve para la compresión de un archivo.

Software multimedia

El software multimedia se refiere a los programas utilizados para presentar de una forma integrada textos, gráficos, sonidos y animaciones, este tipo de software es considerado como una nueva tecnología. Las ventajas que se le atribuyen al software multimedia es en la educación, especialmente en escuelas primarias, por que realizando presentaciones con software multimedia, los alumnos prestan mas intención a la presentación realizada.

Este tipo de software suele utilizarse para el desarrollo de proyectos específicos multimedios, utilizar software multimedia requiere de tiempo, capacidades, dedicación y recursos.

Software de uso general

El software de uso general son aquellos que nos sirven para resolver problemas muy variados del mismo tipo, de muy diferentes empresas o personas, con adaptaciones realizadas por un usuario, ejemplos: procesadores de texto, manejadores de bases de datos, hojas de cálculo, etc.

Software de uso especifico


Hablar de este tipo de software nos referimos al software desarrollado específicamente para un problema especifico de alguna organización o persona, utilizar este software requiere de un experto en informática para su creación o adaptación, son los programas que usan las escuelas para registrar las calificaciones de los alumnos y generar certificados, los que usan los bancos para el control de las cuentas, etc.

Características del Software

1. El software se desarrolla o construye; no se manufactura en el sentido clásico. A pesar de que existen similitudes entre el desarrollo del software y la manufactura del hardware, las dos actividades serian diferentes en lo fundamental. En ambas la alta calidad se alcanza por medio del buen diseño, la fase de manufactura del hardware puede incluir problemas de calidad existentes en el software.



2. El software no se desgasta. El software es inmune a los males ambientales que desgasten el hardware. Por lo tanto la curva de tasas de fallas para el software debería tener la forma de la “curva idealizada”. Los defectos sin descubrir causan tasas de fallas altas en las primeras etapas de vida de un programa. Sin embargo, los errores se corrigen y la curva se aplana: el software no se desgasta, pero si se deteriora.

3. A pesar de que la industria tiene una tendencia hacia la construcción por componentes, la mayoría del software aun se construye a la medida. Un componente de software se debe diseñar e implementar de forma que puede utilizarse en muchos programas diferentes.

Interrogantes

El proceso de desarrollo puede involucrar numerosas y variadas tareas. Pero casi rigurosamente siempre se cumplen ciertas etapas mínimas: ¿Podría decir cuales son las más relevantes?
¿Cuál es la importancia del software en la actualidad?