jueves, 21 de abril de 2011

Ingeniería de Software

En este espacio se presentará un breve recorrido por algunos temas de interés en el amplio mundo de la Ingeniería de software.

Es importante comenzar con la definición de Ingeniería de Software, y hacer una reflexión sobre cuál es la más cercana, según nuestro criterio, a lo que viven los ingenieros que día a día se desempeñan en esta área.

Ø Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978)
Ø Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos.
ØSe conoce también como Desarrollo de Software o Producción de Software (Bohem, 1976).
Ø Ingeniería de Software trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972).
Ø Es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software; es decir, la aplicación de la ingeniería al software (IEEE, 1993).

Las fases suelen ser:
1.-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.
2.-Diseño: requisitos generales y precisos de la arquitectura de la aplicación.
3.-Programación  o desarrollo (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.
4.-Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.
5.- 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.
6.- Implementación: es la puesta en marcha del sistema
7.-Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).

Entre los modelos de desarrollo de software más conocidos se encuentran:
Modelos tradicionales:
Cascada
De la fuente
Espiral
Enfoque CPM/SSM
Otros modelos evolutivos y/o incrementales

Modelos/métodos Agiles:
eXtreme Programming (XP)
Scrum
Evolutionary Project Management (Evo)
Crystal Methods (CM)
Feature Driven Development (FDD)
Rational Unified Process (RUP)
Dynamic Systems Development Method (DSDM)
Adaptive Software Development (ASD)
Agile Modeling (AM)
Lean Development (LD)
  
Mitos del software
Ø ¿Por qué cambiar nuestra forma de desarrollar software que utilizamos hace 10 años?
Ø Ya tenemos un libro lleno de estándares
Ø Si fallamos en la planificación podemos añadir más programadores y ganar el tiempo perdido?
Ø Una declaración general de objetivos es suficiente para empezar a hacer programas.
Ø Los requerimientos del proyecto cambian continuamente pero los cambios pueden acomodarse fácilmente ya que el software es flexible.
Ø No hay ningún método de análisis, diseño y programación que funcione bien; yo me voy a mi terminal y empiezo a escribir código.
Ø Cuando hacemos el programa y funciona ya ha terminado mi trabajo
Ø Hasta que no tengo un programa funcionando no se puede saber su calidad....

 http://www.cepeu.edu.py/LIBROS_ELECTRONICOS_3/lpcu097%20-%2001.pdf
Antonio J. Sucre S., Business Development & Consulting GeorgeTown University. 

lunes, 4 de abril de 2011

Historia, Ventajas y Desventajas del Software Libre

Su historia se remonta a los orígenes de la informática

En las décadas de los 50 y 60
-Durante los años 1960 el software venía como acompañante del hardware, no se considera un elemento independiente.
- El software se distribuía con su código fuente: grupos de usuarios lo comparten, y lo mejoran.
-Código fuente a disposición de quien lo pide: los clientes generalmente no pagan por el software.
- Relación con el software muy parecida a la que hoy tenemos con el software libre.
-Todo cambia con el unbundling de hardware, software y servicios de IBM (1969)
En la década de los 70:
-1969: Ken Thompson inventó Unix (mismo año que Arpanet).
-Surge de los deshechos de Multics, en AT&T (Bell Labs).
- Dennis Ritchie inventa un nuevo lenguaje llamado C para usarlo en el Unix de Thompson.
-Primer sistema operativo portable y modular (KISS), frente a anteriores sistemas incompatibles y costosos.
-Se extiende rápidamente y de forma no oficial por AT&T. Y por Arpanet (hardware distinto, gracias a C).
-Acuerdo judicial (antitrust) de 1956 impide a AT&T comercializar Unix: debe licenciarlo (con fuentes) a quien se lo solicite
En la década de los 80:
- Se extienden los acuerdos de no-divulgación
-Comienza a despegar la gran industria del software privativo, basada en el secreto (binarios), en la venta de licencias y en la privatización de las fuentes.
-Unix e Internet: choca el modelo privativo (AT&T) contra el modelo abierto (BSD)
- Stallman abandona el MIT en 1984 para poder dedicarse al Proyecto GNU (GNU's Not UNIX!).
-1985: Stallman publica el Manifiesto GNU: sienta los fundamentos éticos del software libre
-Meta: construir un sistema completo libre, alternativo a Unix.
- Crea la infraestructura básica: editor (emacs), compilador (gcc), depurador (gdb), gmake...
-Crea la Fundación de Software Libre (1985) para apoyar el Proyecto GNU.
-Fundamentos legales: la GPL (1989)
-Trabajo muy estructurado y con metas claras.
-A principios de los 1990 GNU tenía su sistema casi completo, faltaba el núcleo.
En los años 90 nacimiento de Linux:
-Linux es un kernel
-Lo inicia Linus Torvalds, en 1991, y just for fun
-Existían ya sistemas operativos libres casi completos (GNU y Unix BSD)
-Desde que liberó la primera versión (0.01) se van uniendo cientos de desarrolladores
-Se adopta la licencia GPL
-Marzo 1994: versión 1.
Año 2000:
-El software libre empieza a estar listo para el escritorio (GNOME 2.x,KDE 3.x, OpenOffice), y es simple de instalar por el usuario final.
- El software libre se incorpora a la estrategia de grandes empresas (IBM, HP, Sun)
- Otras (como Microsoft) prefieren una estrategia de enfrentamiento parcial (FUD).
-Dificultades financieras como resultado de la crisis de las puntocom
-Comienza la penetración en Administraciones públicas y grandes empresas
-Aumento grande del número de desarrolladores, de la cantidad de software libre disponible, etc
Actualidad:
-Software libre es estratégico para muchas empresas (ej: Google)
-Conjuntos de aplicaciones muy completos para muchos entornos
-Empresas probando nuevos modelos de colaboración (ej: ObjectWeb, Morfeo)
- Software libre como propuesta para dominar mercados (ej: Android, Symbian, Maemo en móviles)
-Nuevos modelos de negocio, modelos para nuevos negocios
-Software libre parte del análisis de competencia en sectores (ej: MySQL en la compra de Sun por Oracle)
-El software libre se va convirtiendo en algo “normal”

Ventajas
 - Reducción de costos
- Al distribuir abiertamente el código fuente, se puede modificar o adaptar a necesidades específicas
- Es posible utilizar todo o parte de un software
- Los errores y defectos del software son, en la práctica, corregidos y documentados más rápidamente y de mejor manera que con el software propietario. Esto lo hace un software más seguro
- No es necesario el pago de licencias
- Hace un uso más eficiente de los recursos de hardware, tanto en computadores personales como en servidores. No necesita de máquinas poderosas para ser utilizado
- El conocimiento base necesario para utilizarlo, es el mismo en todas las mejoras subsecuentes del software. Por tanto, la inversión en capacitación se realiza una vez fuertemente al comienzo, pero es completamente reutilizable para otros software libres
- Se pueden hacer cambios con rapidez

Desventajas:
- No se encuentra aún suficientemente difundido. Por tanto, pocas personas están dispuestas a utilizarlo, lo que desmotiva su uso
- No existe aún una masa crítica de técnicos y expertos suficientemente grande como para satisfacer los requerimientos de servicio técnico y soporte que requiere este software. Por la misma razón, los servicios de soporte son en general más caros
- El software libre es más complejo de utilizar e implementar a nivel de servidores. Requiere de mayor entrenamiento y conocimientos
- Pocos profesionales en el mercado con conocimientos sólidos en software libre
- No existe soporte técnico propio (algunos terceros como  empresas o profesionales ofrecen este servicio, pero aun no es masivo)
- Su instalación, por tratarse de algo nuevo, resulta ser costosa.
- Desde el punto de vista empresarial, el software libre tiene una grave desventaja frente al software propietario: la garantía. Las licencias más usadas en el mundo del software libre agregan una clausula de "No Garantía", estas clausulas liberan de toda responsabilidad a los desarrolladores. Por esta razón muchas empresas prefieren utilizar software propietario que, en la mayoría de los casos, ofrecen esta garantía.

http://gsyc.es/~mvidal/docs/FLOSS_history.pdf
http://www.fundacite-anz.gob.ve/documentos/Software_libre_vs_software_propietario._Ventajas_y_desventajas.pdf
http://www.mundotech.net/ventajas-y-desventajas-de-usar-linux/

Definiciones asociadas al Software Libre

El primer foro de la materia Desarrollo de aplicaciones en software libre, se ha dedicado a hacer claridad en la definición de algunos términos que usamos con frecuencia, y que son de mucha importancia para entender este tema tan interesante que abordamos hoy.

A continuación, una introducción.

Open Source o como su traducción nos indica "Código Abierto", se refiere a productos de Software que permiten tener acceso al código fuente de los mismos, con la finalidad de que los usuarios (usuario del sofware y/o comunidad de desarrolladores) lo puedan leer, modificar según sea necesario y redistribuir las modificaciones realizadas.
Este tipo de Software, es de propiedad intelectual dividida entre los usuarios y desarrolladores que han compartido las modificaciones realizadas. Gracias a la colaboración que se llega a tener se logra un alto nivel de calidad en el Software producido.
Una de las principales ventajas que se obtiene de la "practica" Open Source, es que los usuarios, comunidades u organizaciones pueden añadir características propias sin tener que esperar que el vendedor del producto ponga en producción una versión posterior del producto.

Algunos consideran el Open Source como una filosofía y otros como una metodología pragmática de desarrollo.

Software libre y Open Source no son iguales, principalmente, porque los impulsores y defensores del software libre abordan el problema desde el punto de vista ético (atendiendo a las libertades de los usuarios) mientras que los defensores del software denominado Open Source atienden únicamente a cuestiones prácticas a la hora de proporcionar el código fuente a los usuarios (otorgando valor añadido al producto frente al software propietario).
Como es lógico, ambos tipos de software presentan muchísimas similitudes y conforman un frente común en comparación a otros tipos de software. Muchas empresas proveen software Open Source a sus clientes sin otorgarles las libertades del software libre.

El software libre es una cuestión de la libertad de los usuarios de ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software. Más precisamente, significa que los usuarios de programas tienen las cuatro libertades esenciales:

La libertad de ejecutar el programa, para cualquier propósito (libertad 0).
La libertad de estudiar cómo trabaja el programa, y cambiarlo para que haga lo que usted quiera (libertad 1). El acceso al código fuente es una condición necesaria para ello.
La libertad de redistribuir copias para que pueda ayudar al prójimo (libertad 2).
La libertad de distribuir copias de sus versiones modificadas a terceros (la 3ª libertad). Si lo hace, puede dar a toda la comunidad una oportunidad de beneficiarse de sus cambios. El acceso al código fuente es una condición necesaria para ello. http://www.gnu.org/philosophy/free-sw.es.html


DEFINICIONES 

Copyleft: grupo de licencias cuyo objetivo es garantizar que cada persona que recibe una copia de una obra pueda a su vez usar, modificar y redistribuir el propio trabajo y las versiones derivadas del mismo. Unas veces se permite el uso comercial de dichos trabajos y en otras ocasiones no, dependiendo que derechos quiera ceder el autor. 
Copyright: derecho que tiene un autor, incluido el autor de un programa informático, sobre todas y cada una de sus obras y que le permite decidir en qué condiciones han ser éstas reproducidas y distribuidas. 
Dominio público: Una obra pasa al dominio público cuando los derechos patrimoniales han expirado. Esto sucede habitualmente trascurrido un plazo desde la muerte del autor (post mortem auctoris). Por ejemplo, en el derecho europeo, 70 años desde la muerte del autor. Dicha obra entonces puede ser utilizada en forma libre, respetando los derechos morales.
Freeware (software gratis):  Es un software no libre que se distribuye sin costo. Suele incluir una licencia de uso, que permite su redistribución pero con algunas restricciones, como no modificar la aplicación.
Shareware: Es otra modalidad de comercialización todavía más extendida, el programa se distribuye con limitaciones, bien como versión de demostración o evaluación, con funciones o características limitadas o con un uso restringido a un límite de tiempo establecido (por ejemplo 30 días). Así, se le da al usuario la oportunidad de probar el producto antes de comprarlo y, más tarde, adquirir la versión completa del programa. 
Software libre (free software): Software que puede ser copiado, distribuido y modificado libremente. Ello lleva implícito la disponibilidad del código fuente, pero no implica en ningún momento que sea gratuito.


http://www.definicion.org/copyright
http://www.nursing-informatics.com/kwantlen/glossary4.html
http://www.aulaclic.es/articulos/licencias.html
http://www.directimaging.com/www/html/en/glossary/glossaryitems/O
http://www.networkdictionary.com/software/o.php
http://fundacioncopyleft.org/es/9/que-es-copyleft
González, Jesús; Seone Joaquín y Robles Gregorio. Introducción al Software Libre. Fundación de la Universidad de Oberta de Cataluña. Eureca Media SL. Barcelona. 2003.