martes, 17 de agosto de 2010

QUE ES EL SOFTWARE

INTRODUCCION


Hasta el día de hoy las computadoras han sido la herramienta más usada por el hombre ya que nos ahorra tiempo en ejecuciones de cosas que nos podrían tardar hasta días hacerlas el software es un ayudante más, para que esto procesos se realizaran el software como lo verán más adelante no era algo que estuviera dentro de la computadora por q sus inicios están desde las maquinas sumadoras ya q en estas lo usaban bueno a través del tiempo este fue creciendo y se volvió algo material y con la ayuda de la ciencia este ha evolucionado pero el software es algo que es muy difícil de entender desde el punto de vista creativo él tiene o puede ejecutar muchas funciones dependiendo su creador y para lo que lo quiera hasta el día de hoy el software es una herramienta muy importante en las maquinas ya q las ayuda a ejecutar sus procesos sin él no funcionarían de la misma manera, en estos hay software libre en este es aquel q la gente hace sin ningún tipo de licencia es decir sin privatizarlo y esta el software normal q es privativo este tiene licencias y acuerdos para que nos puedan piratear y en el dependiendo el acuerdo dura un año dos años según el creador.



HISTORIA DEL SOFTWARE

La historia del software como se sabe no fue generado desde un equipo electrónico pero de ellos adopta el nombre, el software viene de más atrás y era utilizado en las sumadoras mecánicas pero como sabemos este no venía incorporado en el equipo, luego en los años 60 y 70 del siglo XX se convirtió en un añadido que los grandes vendedores de computadoras de esa época aportaban para sus clientes pudieran usarlos en esa época era muy común que los desarrolladores de software y programadores compartieran sus programas unos con otros pero a finales de los 70 las grandes compañías empezaron a colocar restricciones a los usuarios como acuerdos de licencia en el 80 cuando empiezan a llegar computadores modernos ya venían con sistemas operativos privativos, si los usuarios tenían algún problema con la aplicación tenían que llevarlo a la empresa para que lo corrigiera esto se daba ya que eran privativos nadie tenía lo mandos si no solo la empresa y si el programador lo quería arreglar así estuviera capacitado no lo podía hacer divido a que los términos de contrato se lo impedía, Durante los primeros años de la era de la computadora, el software se contemplaba como un añadido. La programación de computadoras era un arte ya que existían pocos métodos sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, hasta que los planes comenzaron a descalabrarse y los costes a correr. Los programadores trataban de hacer las cosas bien, y con un esfuerzo heroico, a menudo salían con éxito. El software se diseñaba a medida para cada aplicación y tenía una distribución relativamente pequeña. La mayoría del software se desarrollaba y era utilizado por la misma persona u organización. La misma persona lo escribía, lo ejecutaba y, si fallaba, lo depuraba. El diseño era un proceso implícito, realizado en la mente de alguien y, la documentación normalmente no existía. La segunda era en la evolución de los sistemas de computadora se extienden desde la mitad de la década de los sesenta hasta finales de los setenta. La multiprogramación y los sistemas multiusuario introdujeron nuevos conceptos de interacción hombre, maquina. También se caracterizó por el establecimiento del software como producto y la llegada de las "casas del software". Los patronos de la industria, del gobierno y de la universidad se aprestaban a desarrollar el mejor paquete de software y ganar así mucho dinero. La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años setenta y continúo más allá de una década. El sistema distribuido, múltiples computadoras, cada una ejecutando funciones concurrentes y comunicándose con alguna otra, incrementó notablemente la complejidad de los sistemas informáticos. Las redes de área local y de área global, las comunicaciones digitales de alto ancho de banda y la creciente demanda de acceso instantáneo a los datos, supusieron una fuerte presión sobre los desarrolladores del software. La conclusión de la tercera era se caracterizó por la llegada y amplio uso de los microprocesadores.

El microprocesador ha producido un extenso grupo de productos inteligentes, desde automóviles hasta hornos microondas, desde robots industriales a equipos de diagnósticos de suero sanguíneo.

La cuarta era de la evolución de los sistemas informáticos se aleja de las computadoras individuales y de los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras y del software. Potentes máquinas personales controladas por sistemas operativos sofisticados, en redes globales y locales, acompañadas por aplicaciones de software avanzadas se han convertido en la norma.

La industria del software ya es la cuna de la economía del mundo. Las técnicas de la cuarta generación para el desarrollo del software están cambiando en la forma en que la comunidad del software construye programas informáticos. Las tecnologías orientadas a objetos están desplazando rápidamente los enfoques de desarrollo de software más convencionales en muchas áreas de aplicaciones.

                                     
SOFTWARE: son instrucciones dadas a la computadora para q lleve a cavo unas tareas especificas


SOFTWARE GRATIS


El software gratis es utilizado por cualquier persona para cualquier propósito Una breve historia acerca del Software Libre Hace ya bastantes años, durante otra forma de realidad tecnológica, la mayoría del software (que la verdad era muy poco) era desarrollado por los precursores de la llamada tercera revolución tecnológica, quienes tenían la libertad de cooperar entre ellos, y eventualmente así lo hacían. Sólo diez años después, alrededor de 1980, la gran mayoría del software gratis ya era propiedad intelectual de alguien.



Generalmente los dueños de estas tecnologías por seguridad decidieron bloquear los códigos y prohibir a los programadores hablar con gente externa acerca de ellos y así impedir la fuga de los secretos de sus creaciones. Evidentemente la toma de estas decisiones fue, paulatinamente, limitando la cooperación entre los programadores y cercando el desarrollo del software gratis dentro de las necesidades del mercado.

SOFTWARE LIBRE



El software libre se está convirtiendo poco a poco en algo cada vez más cotidiano y está dejando de ser asunto de técnicos, entusiastas o usuarios avanzados. Hoy en día la comunidad de software libre dispone de múltiples herramientas de altísima calidad

(Como alternativa al software protegido o software propietario) como el paquete ofimático Open Office, reproductores multimedia como Mplayer, navegadores de Internet como Mozilla o soluciones íntegras para la web como la que conforman el lenguaje de programación php, la base de datos MySql y el servidor Apache, con un rendimiento comparable o superior al de una solución no libre (el servidor Apache es líder mundial en servidores web1). Además, el uso del Sistema Operativo Linux ha crecido enormemente en la Administración y el Gobierno, se ha adoptado en escuelas y universidades y en la ciencia e industria. Aunque la asignatura pendiente del software libre sigue siendo la de llegar al mundo empresarial y a los usuarios domésticos, más que nada debido a la resistencia al cambio y al hecho de que existe ya una costumbre y una formación a favor del uso de productos no libres, además de que todavía algunas compañías de software no desarrollan versiones comerciales de sus programas para este sistema. Pero lo fundamental es explicar qué es realmente el software libre. Se suele asociar el concepto de software libre con el de software de código abierto (Open Source). El código abierto implica que disponemos del código fuente, esto es, el código escrito en lenguaje de programación, previo a su transformación a código binario, directamente ejecutable en los ordenadores.

 

 
LENGUAJE DE SOFTWARE:

 son mucho los lenguajes que existen ya que se crean también debido a las necesidades de que surjan. Los leguajes introducidos a las computadoras para crear un software se llaman lenguajes de programación están se pueden clasificar en tres grupo:

1) MAQUINA: Los lenguajes de la maquina son instrucciones directas entendibles en la computadora y que no necesitan de un traductor para poder comprender y ejecutar el programa este lenguaje es muy difícil porque los datos se introducen directamente y en un sistema binario (ceros y unos)

2) BAJO NIVEL: Este lenguaje depende de la estructura física del equipo y de unas instrucciones para la CPU, este lenguaje debe ser traducido al lenguaje de máquina para ser ejecutados un lenguaje de bajo nivel es el del ensamblador.

3) ALTO NIVEL: Este lenguaje es el más fácil de aprender por que están formados por elementos de lenguajes naturales como por ejemplo el ingles. El lenguaje de alto nivel más conocido es el BASIC.



LENGUAJES:

BASIC: Es un lenguaje de programación que fue desarrollado como herramienta de enseñanza fue expandido entre los hogares en la década de los 80`s.


ENSAMBLADOR: Es un lenguaje de bajo nivel utilizado para escribir programas informáticos, este fue usado principalmente en los inicios del desarrollo del software.
CLASIFICACIÓN DEL SOFTWARE
Si bien esta distinción es, en cierto modo, arbitraria, y a veces confusa, a los fines prácticos se puede clasificar al software en tres grandes tipos:
SOFTWARE DE SISTEMA: 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:
o Sistemas operativos
o Controladores de dispositivos
o Herramientas de diagnóstico
o Herramientas de Corrección y Optimización
o Servidores
o 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:
o Editores de texto
o Compiladores
o Intérpretes
o Enlazadores
o Depuradores
o 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).
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:
o Aplicaciones para Control de sistemas y automatización industrial
o Aplicaciones ofimáticas
o Software educativo
o Software empresarial
o Bases de datos
o Telecomunicaciones (p.ej. internet y toda su estructura lógica)
o Videojuegos
o Software médico
o Software de Cálculo Numérico y simbólico.
o Software de Diseño Asistido (CAD)
o Software de Control Numérico (CAM)
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.

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) 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 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".7

Se estima que, del total de proyectos software grandes emprendidos, un 28% fracasan, un 46% caen en severas modificaciones que lo retrasan y un 26% son totalmente exitosos. 8

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.



Ciclo de vida del software

El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El propósito de este programa es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación y verificación de los procedimientos de desarrollo: se asegura de que los métodos utilizados son apropiados.

Estos programas se originan en el hecho de que es muy costoso rectificar los errores que se detectan tarde dentro de la fase de implementación. El ciclo de vida permite que los errores se detecten lo antes posible y por lo tanto, permite a los desarrolladores concentrarse en la calidad del software, en los plazos de implementación y en los costos asociados.

El ciclo de vida básico de un software consta de los siguientes procedimientos:

• Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.

• Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.

• Diseño general: requisitos generales de la arquitectura de la aplicación.

• Diseño en detalle: definición precisa de cada subconjunto de la aplicación.

• Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.

• Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.

• Integración: para garantizar que los diferentes módulos se integren con la aplicación. Éste es el propósito de la prueba de integración que está cuidadosamente documentada.

• Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.

• Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.

• Implementación

• Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).

El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicación dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores.

Modelos de ciclo de vida

Para facilitar una metodología común entre el cliente y la compañía de software, los modelos de ciclo de vida se han actualizado para reflejar las etapas de desarrollo involucradas y la documentación requerida, de manera que cada etapa se valide antes de continuar con la siguiente etapa. Al final de cada etapa se arreglan las revisiones de manera que (texto faltante).

Modelo en cascada

El modelo de ciclo de vida en cascada comenzó a diseñarse en 1966 y se terminó alrededor de 1970. Se define como una secuencia de fases en la que al final de cada una de ellas se reúne la documentación para garantizar que cumple las especificaciones y los requisitos antes de pasar a la fase siguiente:



Modelo V

El modelo de ciclo de vida V proviene del principio que establece que los procedimientos utilizados para probar si la aplicación cumple las especificaciones ya deben haberse creado en la fase de diseño.



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.
LICENCIAS AGPL
La Licencia Pública General de Affero (en inglés Affero General Public License, también Affero GPL o AGPL ) es una licencia copyleft derivada de la Licencia Pública General de GNU diseñada específicamente para asegurar la cooperación con la comunidad en el caso de software que corra en servidores de red.
La Affero GPL es íntegramente una GNU GPL con una cláusula nueva que añade la obligación de distribuir el software si éste se ejecuta para ofrecer servicios a través de una red de ordenadores.
La Free Software Foundation recomienda que el uso de la GNU AGPLv3 sea considerado para cualquier software que usualmente corra sobre una red.<4>
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 (normalmente utilizando la siguiente analogía: "una licencia BSD es más libre que una GPL si y sólo si se opina también que un país que permita la esclavitud es más libre que otro que no la permite").
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 (si usas código licenciado GPL, tu desarrollo final tiene que estar licenciado 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 (luego la MPL) 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 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.