martes, 17 de mayo de 2011

Métricas y Normas.

¿Qué es Métrica 3?
Es una metodología que ofrece a las organizaciones un instrumento útil para la sistematización de las actividades que dan soporte al ciclo de vida del software. Esta metodología fue promovida por el Ministerio de Administraciones Públicas del Gobierno de España con el fin de aplicarla en la Administración Pública de ese país y ésta se realizó basada en las normas ISO/IEC 12207 y ISO/IEC 15504.

Elementos de Métrica 3:
Esta métrica está conformada por una serie de elementos que son los siguientes:
· Procesos
· Interfaces
· Técnicas y Prácticas
· Roles o Perfiles

Procesos involucrados en la Métrica 3:
· Planificación de Sistemas de Información (PSI)
· Desarrollo de Sistemas de Información (DSI). Debido a su complejidad, está a su vez dividido en cinco procesos:   

Estudio de Viabilidad del Sistema (EVS)
Análisis del Sistema de Información (ASI).
      - Diseño del Sistema de Información (DSI).
      - Construcción del Sistema de Información (CSI).
      - Implantación y Aceptación del Sistema (IAS).
      -  Mantenimiento de Sistemas de Información (MSI).
Es importante señalar, que tanto la Métrica 3 como las normas ISO/IEC 12207 se encuentran orientadas establecer parámetros de calidad del proceso de desarrollo de un software determinado.

Interfaces de Métrica 3:
· Gestión de proyectos (GP).
· Seguridad (SEG).
· Aseguramiento de la Calidad (CAL).
· Gestión de la Configuración (GC).

Técnicas de Métrica 3:
· Técnicas de desarrollo (Casos de Uso, Diagramas de Clase, Diagramas de Flujo de Datos, etc).
· Técnicas de gestión de proyectos (Técnicas de estimación, Staffing Size, Planificación, etc)
· Prácticas (Análisis de impacto, Presentaciones, Prototipado, etc).

Perfiles o Roles en Métrica 3:
· Directivo (Comité de Dirección, Directores de Usuarios, etc).
· Jefe de Proyecto (Responsable de Implantación, Responsable de Seguridad, etc).
· Consultor (Consultor Informático, Técnico de Sistemas).
· Analista (Analista, Administrador de Bases de Datos, etc).
· Programador.

Por último, se destaca que MÉTRICA versión 3 puede ser utilizada libremente con la única restricción de citar la fuente de su propiedad intelectual, es decir, el Ministerio de Presidencia.


Norma ISO-9126
ISO 9126 es un estándar internacional para la evaluación del Software. Está supervisado por el proyecto SQuaRE, ISO 25000:2005, el cual sigue los mismos conceptos. El estándar está dividido en cuatro partes las cuales dirigen, respectivamente, lo siguiente: modelo de calidad, métricas externas, métricas internas y calidad en las métricas de uso.
El modelo de calidad establecido en la primera parte del estándar, ISO 9126-1. Dicho estándar ha sido desarrollado en un intento de identificar los atributos clave de calidad para el software. El estándar identifica 6 atributos clave de calidad:

Funcionalidad – El grado en que el software satisface las necesidades indicadas por los siguientes subatributos:
o Idoneidad
o Corrección
o Interoperabilidad
o Conformidad
o Seguridad

Fiabilidad – Cantidad de tiempo que el software está disponible para su uso. Está referido por los siguientes subatributos:
o Madurez
o Tolerancia a fallos
o Facilidad de recuperación

Usabilidad – Grado en que el software hace óptimo el uso de los recursos del sistema. Está indicado por los siguientes subatributos:
o Facilidad de comprensión
o Facilidad de aprendizaje
o Operatividad

Eficiencia – Grado en que el software hace óptimo el uso de los recursos del sistema. Está indicado por los siguientes subatributos:
o Tiempo de uso
o Recursos utilizados

Mantenibilidad – Facilidad con que una modificación puede ser realizada. Está indicada por los siguientes subatributos:
o Facilidad de análisis
o Facilidad de cambio
o Estabilidad
o Facilidad de prueba

Portabilidad – La facilidad con que el software puede ser llevado de un entorno a otro. Está referido por los siguientes subatributos:
o Facilidad de instalación
o Facilidad de ajuste
o Facilidad de adaptación al cambio

La garantía de calidad de software es una actividad de protección que se aplica a cada paso del proceso de software. La SQA comprende procedimientos para la aplicación efectiva de métodos y herramientas, revisiones técnicas formales, técnicas y estrategias de pruebas, dispositivos poku-Yoke, procedimientos de control de cambios, procedimientos de garantía de ajuste a los standares y mecanismos de medida e información. Las revisiones del software son una de las actividades más importantes del SQA. Las revisiones sirven como filtro durante las actividades de ingeniería del software, eliminando defectos mientras no son relativamente costosos de encontrar y corregir.

ISO/IEC 14598 
La ISO/IEC 14598 ofrece una visión general, explica la relación entre su serie y el modelo de calidad de la ISO/IEC 9126. Define los términos técnicos utilizados, contiene requisitos generales para la especificación y evaluación de la calidad del software, y clarifica los conceptos generales. Además, provee un marco de trabajo para evaluar la calidad de todos los tipos de productos de software y establece requisitos para métodos de medición y evaluación de los productos de software

Es importante señalar que, la serie de normas ISO/IEC 14598 proporciona un marco de trabajo para evaluar la calidad de todos los tipos de productos de software e indica los requisitos para los métodos de medición y para el proceso de evaluación.
Se verá enseguida que la ISO/IEC 14598 consta de seis partes que describen los requisitos del proceso de evaluación en tres situaciones diferentes:
* Requisitos para desarrolladores
* Requisitos para compradores
* Requisitos para evaluadores
Se puede decir que ISO/IEC 14598, proporciona métodos para medida, valoración y evaluación de calidad del producto de software, pero no describen los métodos para los procesos de evaluación de la producción del software o predicciones del costo.

Este propone las siguientes actividades para los procesos de evaluación:
- Revisión General (ISO/IEC 14598-1)
- Planificación y Administración (ISO/IEC 14598-2)
- Proceso para Desarrolladores (ISO/IEC 14598-3)
- Proceso para Adquisidores (ISO/IEC 14598-4)
- Proceso para Evaluadores (ISO/IEC 14598-5)
- Documentación de Módulos de Evaluación (ISO/IEC 14598-6)

Gestión de calidad y pruebas de software


Según Pressman, la calidad del software es “la concordancia con los requerimientos funcionales y de rendimiento explícitamente establecidos, con los estándares de desarrollo explícitamente documentados y con las características implícitas que se espera de todo software desarrollado profesionalmente”.

Aporte profesora María Esther “El modelo de desarrollo del Software Libre facilita el aseguramiento y control de la calidad, dado que el código abierto asegura la transparencia y la trazabilidad del software, el desarrollo colaborativo exige la generación de un código más claro y mejor documentado y los usuarios, al ser tratados como colegas, participan activamente en la especificación, desarrollo y validación del código”.

La calidad de software debe ser tenido en cuenta en cualquier proyecto de software que iniciemos. Debe incluirse un ciclo integral de desarrollo de procesos de control de calidad y pruebas desde el principio del proyecto, de lo contrario, el costo de desarrollo de este proceso posteriormente, será demasiado alto.
El software casi nunca es perfecto, todo proyecto de software tiene como objetivo, producir software con la menor cantidad de errores posible, que cumpla con las expectativas de los usuarios y los requerimientos exigidos.
"El software tiene una medida de 0,150 errores por cada 1000 líneas de código. Si tenemos en cuenta que un producto como OpenOffice.org 1.0 tiene aproximadamente 7 millones de líneas de código, la aritmética es sencilla"

Para asegurar la calidad del software en cualquier proyecto, es importante tener en cuenta los siguientes principios:

- Es imperativo disponer de unos requisitos que detallen el sistema
- Los procesos de calidad deben ser integrados desde  las primeras fases del proyecto
- Quien desarrolle un sistema no debe ser quien prueba su funcionalidad.

¿En qué consiste la gestión de calidad y pruebas del software?
Este proceso de la ingeniería de software consiste en someter al producto de software a un conjunto de pruebas, basadas en prestaciones, respuestas esperadas a determinadas acciones y bajo ciertas condiciones, con la finalidad de determinar la calidad del mismo.

En la ingeniería de software se aplica el checklist, el cual consiste en un listado de procedimientos para la consecución de un objetivo, en este caso, la instalación y correcto funcionamiento de la aplicación a investigar. Además, sirve para ayudar a asegurar la consistencia e integridad en el desarrollo de la tarea, de tal modo, que sea reproducible siguiendo todos los pasos que constituyen el checklist. Es muy utilizado en el aseguramiento de la calidad en ingeniería de software, para comprobar la conformidad de procesos, estandarización de código, prevención de errores y otros.

La calidad de un software, debe ser medida en tres puntos:
a) Durante el proceso de desarrollo.
b) Al obtener el producto de software.
c) Durante el ciclo de vida del software (calidad del servicio).

Entre las normas que rigen la calidad, se encuentran:
a) Para el producto se encuentra la norma ISO-9126.
b) Para la calidad de desarrollo se encuentra la ISO-14598.
c) CMMI for Development (v1.2), está orientado a la mejora de procesos en diferentes niveles de madurez.
d) Moprosoft, programa de México para la Industria de Software, orientado a empresas pequeñas y medianas.

Por otra parte, algunas de las pruebas no funcionales son: las pruebas de rendimiento (performance) y pruebas de carga, pruebas de estabilidad, pruebas de usabilidad, pruebas de seguridad, pruebas de internacionalización y localización y pruebas destructivas.
MOSCA es otro modelo de especificación de la Calidad Sistémica del Software desarrollado en el Laboratorio de Investigación en Sistemas de Información LISI de la Universidad Simón Bolívar , se caracteriza por ser una herramienta que soporta la Administración de la Calidad del Software en sus tres actividades: Aseguramiento de la Calidad, Planeación de la Calidad y Control de la Calidad, al establecer un marco de referencia que permite ubicar en un “nivel establecido” la calidad sistémica de sus productos.

Para tener en cuenta…..
Ley de Linus (Torvalds):
"given enough eyeballs, all bugs are shallow" - Dados suficientes ojos, todos los errores son superficiales. Entre más desarrolladores puedan leer y analizar el código fuente y usuarios utilicen una aplicación, mayor es la probabilidad de que los errores sean encontrados, reportados y finalmente corregidos.

Los peores ‘bug’ (errores informáticos) de la historia:

1. Fallo en la sonda Mariner 1:Un "bug" en el software de vuelo de la sonda Mariner I provocó que, segundos después del lanzamiento de la nave, en julio de 1972, ésta se desviara de su curso preestablecido. Los responsables de la misión se vieron obligados a destruir el cohete cuando se encontraba sobrevolando el Atlántico. La investigación del accidente determinó que el problema estaba en una fórmula escrita a lápiz que luego fue "inadecuadamente" trasladada al lenguaje informático, lo que hizo que el cohete calculara mal la trayectoria que debía seguir.
2. Explosión en un gaseoducto soviético :La mayor explosión registrada en la Tierra por causas no nucleares tuvo su origen en un fallo de programación. Supuestamente, agentes de la CIA colocaron un "bug" en un sistema informático canadiense adquirido por los soviéticos para controlar el gaseoducto Transiberiano. Seguían órdenes de Reagan, que había mandado a sus agentes a sabotear toda la tecnología rusa, colocando "cosas" que permitían manipular a distancia todo tipo de maquinaria y tecnología. Así, en 1982 la CIA decidió sabotear este gaseoducto, pero al activar el "bug" las cosas salieron mucho peor de lo esperado y provocaron la gigantesca explosión.
3. Acelerador médico Therac-25 :El Therac-25 era un acelerador lineal empleado en los hospitales en la década de los 80 para tratar tumores. La máquina emitía radiación de alta energía sobre células cancerosas sin dañar el tejido circundante. Los operarios, con el tiempo y la práctica, conseguían gran velocidad tecleando la secuencia de comandos para iniciar un tratamiento. Pero debido a un fallo de programación, si durante este proceso efectuaban una corrección en menos de ocho segundos, la máquina podía emitir 100 veces más energía de la requerida. A consecuencia de este "bug" murieron al menos cinco pacientes y varias decenas sufrieron los efectos de verse expuestos a una elevada radiación.
4. El 'Gusano de Morris':El primer 'gusano' de Internet nació la tarde del 2 de noviembre de 1988, cuando un estudiante estadounidense, Tappan Morris, liberó un programa creado por él mismo que infectó entre 2.000 y 6.000 ordenadores sólo el primer día, antes de ser rastreado y eliminado. Para que su 'gusano' tuviera efecto, Morris descubrió dos errores en el sistema operativo UNIX, que le permitieron tener acceso no autorizado a miles de ordenadores.
Esto demuestra cuán difícil es el proceso de llevar a cabo una buena gestión de calidad y pruebas sobre el software, además de la importancia que tiene, por el impacto que puede tener a nivel social, pudiendo causar cualquier omisión o falla no detectada, pérdidas materiales y económicas, y peor aún, pérdidas humanas.
http://www.lisi.usb.ve/

lunes, 9 de mayo de 2011

UML: Unified Modeling Language. Lenguaje Unificado de Modelado.

Entre los lenguajes de modelado más utilizados se destaca UML, un estándar usado para describir sistemas lógicos, incluyendo procesos y funciones del sistema, así como esquemas de bases de datos y objetos reutilizables. Presenta un conjunto de notaciones y diagramas estandarizados para modelar sistemas, y describe la semántica esencial de lo que estos diagramas y símbolos significan. Anteriormente se manejaban diversas notaciones y métodos para el modelado, ahora se cuenta con una única notación.

Este estándar ofrece nueve diagramas en los cuales modelar sistemas.
• Diagramas de Casos de Uso para modelar los procesos.
• Diagramas de Secuencia para modelar el paso de mensajes entre objetos.
• Diagramas de Colaboración para modelar interacciones entre objetos.
• Diagramas de Estado para modelar el comportamiento de los objetos en el sistema.
• Diagramas de Actividad para modelar el comportamiento de los Casos de Uso, objetos    u operaciones.
• Diagramas de Clases para modelar la estructura estática de las clases en el sistema.
• Diagramas de Objetos para modelar la estructura estática de los objetos en el sistema.
• Diagramas de Componentes para modelar componentes.
• Diagramas de Implementación para modelar la distribución del sistema.

UML, sus vistas:
Vista Use-Case: Una vista que muestra la funcionalidad del sistema como la perciben los actores externos.
Vista Lógica: Muestra cómo se diseña la funcionalidad dentro del sistema, en términos de la estructura estática y la conducta dinámica del sistema.
Vista de Componentes: Muestra la organización de los componentes de código.
Vista Concurrente: Muestra la concurrencia en el sistema, direccionando los problemas con la comunicación y sincronización que están presentes en un sistema concurrente.
Vista de Distribución: muestra la distribución del sistema en la arquitectura física con computadoras y dispositivos llamados nodos.

Qué no es UML.
UML no es un método de desarrollo. Nos indica cómo pasar del análisis al diseño y de este al código. No son una serie de pasos que lleva a producir código a partir de unas especificaciones.

UML al no ser un método de desarrollo es independiente del ciclo de desarrollo que se vaya a seguir, puede encajar en un tradicional ciclo en cascada, o en un evolutivo ciclo en espiral o incluso en los métodos ágiles de desarrollo.

Un poco de historia.
UML Se ha convertido en el estándar de facto de la industria, debido a que ha sido concebido por los autores de los tres métodos más usados de orientación a objetos más populares: Grady Booch, Ivar Jacobson y Jim Rumbaugh.
Estos autores fueron contratados por la empresa Rational Software Co. para crear una notación unificada en la cual basar la construcción de sus herramientas CASE.
En el proceso de creación de UML han participado, no obstante, otras empresas de gran peso en la industria como Microsoft, Hewlett-Packard, Oracle o IBM, así como grupos de analistas y desarrolladores.

Esta notación ha sido ampliamente aceptada debido al prestigio de sus creadores y debido a que incorpora las principales ventajas de cada uno de los métodos particulares en los que se basa: Booch, OMT y OOSE. UML ha puesto fin a las llamadas “guerras de métodos” que se han mantenido a lo largo de los 90, en las que los principales métodos sacaban nuevas versiones que incorporaban las técnicas de los demás. Con UML se fusiona la notación de estas técnicas para formar una herramienta compartida entre todos los ingenieros software que trabajan en el desarrollo orientado a objetos.

Bibliografía
http://www.ingenierosoftware.com
Orallo Hernandez, E. (n.d.). El Lenguaje Unificado de Modelado (UML). Retrieved from http://www.disca.upv.es/enheror/pdf/ActaUML.PDF

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.