miércoles, 27 de agosto de 2014

Software Libre: Aspectos Legales

Frente a la tendencia de las grandes empresas de informática de apropiarse del conocimiento científico y tecnológico se erige el movimiento de software  libre, un movimiento que quiere mantener y proteger la libertad en este  sector fundamental para la sociedad moderna. Se argumenta que la  tendencia “propietaria” corre el riesgo de dejarnos en una sociedad del  permiso que hay que pedir a los titulares del conocimiento, un permiso que  se otorgará bajo condiciones muy restrictivas. El software libre tambien se  desenvuelve en un mundo de aspectos legales, ya que estas restricciones y  prohibiciones se expresan en las licencias de uso, ya sea para instalar un  software, para ver una película, para escuchar una canción...

Por lo tanto, el software libre está íntimamente vinculado con los aspectos legales relevantes para el software. Es importante destacar, por ejemplo,  que:

• El software se protege por los derechos de autor, y los titulares y los  usuarios tienen que acatar el régimen legal de la propiedad intelectual para, por un lado, permitir su uso, y por el otro, poder usar, distribuir o modificar  cualquier obra (programa) protegida.
• El software se distribuye generalmente bajo licencia, y las licencias tienen  varias formas y clausulados para determinar los usos, derechos,  restricciones y prohibiciones.
• La mayoría de los usuarios más avanzados –y algunos menos– de aplicaciones informáticas requieren adaptar el software estándar a sus procesos. Por el contrario, el software libre lo permite bajo ciertas condiciones, sin pedir autorización suplementaria.

Las Licencias de Software

Una vez el software se encuentra protegido por los derechos de propiedad intelectual, las licencias de uso de software constituyen el instrumento legal habitual a partir del cual quien ha desarrollado un software permite que otros lo utilicen, distribuyendolo.

La licencia de software es un contrato por el que el titular de los derechos sobre el software permite su utilización a otra persona (el usuario), y determina las condiciones bajo las cuales dicho usuario puede utilizar el programa informático, así como las prohibiciones y los límites que debe respetar en tal uso. Cuando se instala un programa informático, o a veces incluso por el simple hecho de abrir el sobre que lo contiene, se dice que se aceptan las condiciones de su licencia de software, lo cual veremos que no siempre es una afirmación válida. Existen muchos tipos de licencias de software, se ilustran en el cuadro presentado.


Las licencias de uso se han revelado, para los titulares de software propietario, como un buen instrumento para distribuir software, asegurar la máxima protección a sus derechos exclusivos y permitir obtener el máximo rendimiento económico, en un tradicional modelo de comercialización del software basado en la venta de copias.

Sin embargo, las licencias de uso también han resultado ser apropiadas para la distribución de software libre. En este caso, y con un contenido distinto a las licencias de software propietario, permiten asegurar a los usuarios las libertades de uso, modificación y redistribución.

Una diferencia fundamental entre el software libre y el propietario es el modelo de desarrollo. Para las empresas de software propietario, el modelo generador de software más habitual se basa en el desarrollo interno por unos programadores asalariados. La existencia de conflictos de autoría son obvios, pero su solución no lo es.

En cambio, en el modelo del código abierto o libre, el software normalmente se genera de forma cooperativa por programadores, muchas veces voluntarios, que trabajan de forma coordinada desde Internet. Además, muchas veces los usuarios, al poder conocer el código fuente y poder modificarlo, en ocasiones pasan a ser autores de una versión mejorada o adaptada a sus necesidades. Este modelo de desarrollo de software tiene importantes consecuencias legales, especialmente en la teoría de derechos de autor.

Para sintetizar los conceptos mas relevantes en cuanto al ámbito legal, se entiende:
  • Por software libre entenderemos al software distribuido bajo un determinado tipo de licencia de uso que permite el acceso al código objeto y el código fuente del mismo, y por lo tanto su modificación y adaptación a las necesidades del usuario, y también la libre distribución y utilización de la aplicación. No debe asimilarse con software gratuito, la licencia con la que se distribuye y el uso de los derechos de autor que sus creadores realizan son su característica y diferencia principal, no su coste.
  • Por derechos de autor al sistema de protección de las creaciones humanas originales, literarias, artísticas o científicas, expresadas por cualquier medio o soporte, tangible o intangible, actualmente conocido o que se invente en el futuro, entre las que se incluye el software.
  • Por licencia de uso al instrumento legal (contrato) que se emplea por el titular de un software para otorgar permisos de uso del software a terceros, a cambio o no de una remuneración económica.





lunes, 25 de agosto de 2014

UML, Gestión de Calidad y Pruebas de Software



El desarrollo de un software se logra a partir de un enfoque sistemático y disciplinado. Es posible realizar software sin utilizar ninguna metodología, pero el resultado será evidentemente de una menor calidad. Es por eso que con el paso del tiempo ha venido evolucionando la ingeniería del software como parte de la búsqueda de la realización de software más robusto y estructurado.

Para lograr un producto de software coherente con la filosofía de la ingeniería de software se utilizan metodologías, cada equipo de desarrollo debe evaluar cual es la que mejor se adapta al proyecto que tiene asignado en su determinado momento. Siendo las metodologías un conjunto de procedimientos, técnicas, herramientas y soporte documental que ayuda a los desarrolladores a realizar nuevo software, es necesario tomar en cuenta la adaptabilidad de estas herramientas al equipo de trabajo y al proyecto.

Una de las herramientas más utilizadas para llevar a cabo lo que se considera el diseño de un sistema es el lenguaje unificado de modelado, de hecho, entra en sintonía con lo que son las metodologías agiles, que son las tendencias actuales en cuanto al desarrollo de software, ya que logra complementar la visión y comunicación existente con el cliente para lograr sistemas más comprendidos tanto por estos últimos como por los programadores. 

Los clientes en la actualidad deben estar en sintonía con el equipo de desarrollo (en el sentido de conocer que es lo que va a llevar a cabo), y debe estar atento y en capacidad de señalar cambios si no se han captado de manera correcta sus necesidades o cambia de opinión sobre la marcha. 

El UML pone a disposición una serie de diagramas que constituyen herramientas para el modelado de software. Cada diagrama se ajusta a una categoría referente a su utilidad, en la primera figura se ilustra la clasificación y en la siguiente, se explica por medio de un mapa conceptual cada uso.






Las metodologías para desarrollo de software por lo general incluyen una fase correspondiente a la calidad y otra a las pruebas. Estos elementos involucran en realidad una amplia cantidad de conceptos y normativas, así como sus propias etapas de diseño, planificación, ejecución y verificación. Inclusive existen herramientas de software dedicadas exclusivamente a esos ámbitos (por ejemplo, Daruma Software).

La gestión de calidad de software se basa en diferentes normativas: 


  •   ISO 9000
  •   MALCOM BALDRIGE NATIONAL QUALITY AWARD 
  •   Software Engineering Institute (SEI) Capatibility Maturity Model (CMM) for software.
De igual manera, involucra dos aspectos: el control de calidad y el aseguramiento de la calidad.

El aseguramiento de calidad del software está presente en:

  • Métodos y herramientas de análisis, diseño, programación y prueba.
  • Inspecciones técnicas formales en todos los pasos del proceso de desarrollo del software.
  • Estrategias de prueba multiescala.
  • Control de la documentación del software y de los cambios realizados.
  • Procedimientos para ajustarse a los estándares (y dejar claro cuando se está fuera de ellos).
  • Mecanismos de medida (métricas).
  • Registro de auditorías y realización de informes.
Por su parte, el control de calidad se rige por dos objetivos fundamentales: 

  • Mantener bajo control un proceso.
  • Eliminar las causas de los defectos en las diferentes fases del ciclo de vida.
Para el área de calidad de software, existen ciertos estándares que deben ser seguidos. Estos estándares de calidad son:

  •  ISO/IEC JTC1-SC7
        Ingeniería de Software y de Sistemas.
  •  IEEE – CS
        ISO 9126 – Calidad del producto.
        ISO 14598 – Evaluación de productos de software.
        ISO 12119 – Requerimientos de Calidad y Testing de COTS.
        ISO 15939 – Proceso de medición de software.

Para finalizar, comparto un mapa conceptual referente a las pruebas de software:



jueves, 21 de agosto de 2014

La Ingeniería de Software

La ingeniería de software involucra un conjunto de procesos que constituyen un objeto de estudio cambiante, que evoluciona y se transforma en sintonía con las necesidades actuales de las personas y las industrias. Por lo tanto, los profesionales que forman parte de ella deben tener en cuenta que deben ser proactivos, dinámicos, flexibles y abiertos de mente. Las utilidades de las que dispone para lograr su cometido son variables, se utilizan por lo general metodologías, técnicas y herramientas que en conjunto permiten disponer de un producto de calidad en un tiempo controlado, logrando una mayor interacción entre las personas que conforman el equipo de trabajo estableciendo así una mayor relación entre cada una de las tareas inherentes al desarrollo.

Las metodologías utilizadas pueden ser de dos tipos: tradicionales o ágiles. Las metodologías ágiles son la tendencia actual, puesto que poseen un alto grado de adaptabilidad y permiten lograr mejores resultados en un tiempo reducido. Por supuesto que ello dependerá de los conocimientos y habilidades que posean los integrantes del equipo de trabajo. Abajo se presenta un diagrama que identifica las tareas concernientes a cada metodología para cada una de las fases del proceso de software.



Por otra parte, la ingeniería de software libre es una visión relativamente reciente que esta tomando forma para lograr disponer de herramientas de planificación y diseño adaptadas a las libertades que otorga esta área en lo referente al desarrollo de sistemas. Es posible aplicar las mismas metodologías, pero surgen algunos conceptos diferentes que tienen su origen principalmente en los rasgos fundamentales que diferencian el software privativo del software libre.

A continuación se presenta un mapa mental en el que se identifican los aspectos fundamentales de la ingeniería de software.


Software Libre

El incremento en el uso del software libre en nuestro país ha sido tema importante en los ultimos años. La idea fundamental del conocimiento libre y por lo tanto compartido permite romper barreras existentes en los sistemas operativos y software privativo, en el que se presentan limitaciones no solo a nivel intelectual sino legal por el uso de licencias altamente restrictivas.

Software libre no es sinónimo de anarquia (de hecho se utilizan licencias también) es sinónimo de posibilidades de progreso tan finitas como la imaginación de los usuarios que toman parte, tanto en su desarrollo como en el feed back o aporte de ideas. Es una filosofía que forma parte no solo del mundo virtual, sino del mundo físico en el que nos desenvolvemos diariamente.

A continuación un mapa conceptual que identifica elementos destacados con respecto al tema: