1.1. Estructura de un proyecto Existen tres tipos de estructura orgánica para los proyectos de desarrollo de software, y son: 1) Formato de Proyecto. En este el grupo de trabajo está formado por desarrolladores que llevan a cabo el proyecto de principio a fin; realizan las tareas involucradas en las fases de: Definición de requerimientos. Diseño. Codificación. Prueba. Revisiones del producto. Documentación. Algunos miembros del equipo de desarrollo pueden permanecer durante la instalación y mantenimiento, mientras que otros participan en nuevos proyectos, sin dejar de lado la responsabilidad del mantenimiento del producto de software entregado. Es efectiva cuando los proyectos son pequeños y cada proyecto tiene una sola ubicación; por lo menos el 70 % de los recursos necesarios están bajo el control directo del Jefe de Proyecto, quien cumple los roles de Jefe Técnico y Jefe Administrativo. Figura 2: Organización por proyectos. Las ventajas de este tipo de estructura son: Las decisiones técnicas y administrativas se hacen en los niveles más bajos, permitiendo rapidez y control efectivo. Autoridad impersonal, que minimiza interfaces y define claramente responsabilidades. Motivación alta durante el período de desarrollo. Mientras que sus desventajas son: Alta gerencia no ve el desarrollo de los proyectos. No se logra economía de escala en los recursos críticos (personal especializado). Entrenamiento es alto. Desplazamiento de personal de un proyecto a otro es difícil. Inhibe la estandarización. 2) Formato Funcional. En este esquema, un grupo distinto de desarrolladores lleva a cabo cada fase del proyecto, los productos pasan de un equipo a otro conforme el software va evolucionando. De esta forma, un equipo de planificación y análisis desarrolla el “estudio de prefactibilidad” y el “plan del proyecto”, entregando la documentación correspondiente al equipo de definición del producto, quien realiza la “definición de requerimientos”, el producto de esta etapa es entregado al equipo de diseño, el cual se encarga de generar el “documento de diseño” que utilizará el grupo de codificación, este se encarga de “codificar y depurar” el software que luego debe ser revisado por el equipo de prueba; finalmente, el grupo de control de calidad “certifica” la calidad del producto; y se forma un equipo independiente de “mantenimiento” para el resto de la vida útil del producto. Una variación del formato funcional, comprende tres equipos: Análisis. Diseño y codificación. Prueba y mantenimiento. Los miembros de los equipos pueden rotar periódicamente para contribuir al desarrollo profesional y evitar la especialización. El formato funcional requiere una alta comunicación entre equipos, pero permite que la documentación sea más clara. Rara vez es usada en proyectos de software, su problema es que todas las decisiones que cruzan las fronteras funcionales dependen de un individuo. El principio fundamental de este tipo de organización es el staff. Este tipo de organización se sustituyó en la organización lineal por la funcional en la que cada operario pasa a reportar, no solo a su jefe superior, sino a varios, pero cada uno en su especialidad. El staff es el resultado de la organización lineal y funcional; en esta organización existen órganos de decisión en la asesoría. Los órganos de línea se caracterizan por la autoridad lineal y el principio escalar, mientras que los órganos staff prestan asesoría a servicios especializados. En la fusión de la estructura lineal con la funcional, predomina la estructura lineal; cada órgano reporta a un solo y único órgano superior (principio de autoridad), pero cada órgano recibe asesoría y servicio especializado de los diversos órganos de staff. Figura 3: Organización funcional. Las ventajas de este tipo de estructura son: Administración fuerte y control centralizado. Se pueden reforzar e implantar fácilmente estándares. Personal asociado a una unidad. Se adapta fácilmente a las decisiones de largo plazo. Mientras que sus desventajas son: La resolución de las decisiones la realiza una sola autoridad para todos los proyectos. Limita la creación de generalistas, tiende a la especialización. Control de los proyectos bajo. 3) Formato Matricial. En organizaciones matriciales, las funciones de desarrollo, soporte técnico, control de calidad y mantenimiento, tienen su propia administración y un equipo de gente que se dedica exclusivamente a dicha función. Cada grupo funcional participa en todo proyecto; por ejemplo los miembros del equipo de desarrollo pertenecen organizacionalmente a esa función, pero trabajan bajo la supervisión de un jefe de proyecto en particular, de la misma manera, el personal de control de calidad pertenece a esa función, pero trabaja en uno o más proyectos bajo la supervisión del jefe de proyecto correspondiente. En las organizaciones matriciales cada quien tiene por lo menos dos jefes, la ambigüedad provocada por esto es el costo de tener un proyecto más controlado. Por otra parte, el personal asignado a un proyecto, puede integrarse con facilidad cuando sea necesario y liberarse cuando se requiera; en una organización bien administrada, la carga de trabajo es balanceada de tal manera que los individuos que regresan a sus funciones se asignan a otros proyectos, o pueden permanecer en su unidad funcional, en entrenamiento o en la adquisición de nuevas habilidades. Esta estructura busca optimizar la organización. Su mayor desventaja es que no hay un responsable por el éxito de un proyecto. En este esquema el Gerente funcional decide cómo hacer el trabajo. Suministra los recursos para el desarrollo. El gerente de proyectos decide que hacer, contrata los recursos económicos. La esencia es la combinación de patrones funcionales y de proyectos o de productos en la misma organización. Esta clase de organización se encuentra con frecuencia en la organización, en la industria aeroespacial, en mercadotecnia, entre otros. La Organización Matricial se usa debido a que las compañías y los consumidores se han interesado en los resultados finales, han surgido presiones para establecer la responsabilidad de garantizar dichos resultados. Figura 4: Organización matricial. Las ventajas de este tipo de estructura son: Los trabajadores son elegidos por sus habilidades. La implicación de parte de todo el equipo es mucho mayor. La productividad aumenta de manera considerable. Se consigue la creación de equipos multidisciplinares. La comunicación interna entre empleados y departamentos fluye de manera más libre. Mientras que sus desventajas son: Si cada equipo goza de mucha independencia, es posible que el control de manera generalizada sea más complicado. Se puede entrar en conflicto de intereses entre responsables de funciones y de proyecto. Si se crean figuras adicionales para el control, es posible que aumenten los costos. Una plataforma de desarrollo es el ambiente o entorno de software común en el cual se desenvuelve la programación de un grupo definido de aplicaciones. Comúnmente se encuentra relacionada directamente a un sistema operativo; sin embargo, también es posible encontrarla ligada a una familia de lenguajes de programación o a una interfaz de programación de aplicaciones (API, por las siglas en inglés: Application Programming Interface). Entre las plataformas de desarrollo más utilizadas se encuentran: - Java. Es un entorno o plataforma de computación originaria de Sun Microsystems, capaz de ejecutar aplicaciones desarrolladas usando el lenguaje de programación Java u otros lenguajes que compilen a bytecode y un conjunto de herramientas de desarrollo. En este caso, la plataforma no es un hardware específico o un sistema operativo, sino más bien una máquina virtual encargada de la ejecución de las aplicaciones, y un conjunto de bibliotecas estándar que ofrecen una funcionalidad común. Figura 5: Logotipo de la plataforma Java. La plataforma es así llamada la plataforma Java e incluye: Plataforma Java, Edición Estándar (Java Platform, Standard Edition), o Java SE (antes J2SE). Es una colección de API del lenguaje de programación Java útiles para muchos programas de la Plataforma Java. La Plataforma Java 2, Enterprise Edition incluye todas las clases en el Java SE, además de algunas de las cuales son útiles para programas que se ejecutan en servidores sobre workstations. Comenzando con la versión J2SE 1.4 (Merlin), la plataforma Java SE ha sido desarrollada bajo la supervisión del Java Community Process. JSR 59 la especificación para J2SE 1.4 y JSR 176 especificó J2SE 5.0 (Tiger). En 2006, Java SE 6 (Mustang) está siendo desarrollada bajo el JSR 270. Plataforma Java, Edición Empresa (Java Platform, Enterprise Edition), o Java EE (antes J2EE). Sirve para desarrollar y ejecutar software de aplicaciones en el lenguaje de programación Java. Permite utilizar arquitecturas de N capas distribuidas y se apoya ampliamente en componentes de software modulares ejecutándose sobre un servidor de aplicaciones; la plataforma Java EE está definida por una especificación. Similar a otras especificaciones del Java Community Process (JCP), Java EE es también considerado informalmente como un estándar debido a que los proveedores deben de cumplir ciertos requisitos de conformidad para declarar que sus productos son “conformes a Java EE”; estandarizado por JCP. Java EE tiene varias especificaciones de API, tales como JDBC, RMI, e-mail, JMS, Servicios Web, XML, etc y define cómo coordinarlos. Java EE también configura algunas especificaciones únicas para Java EE para componentes. Estas incluyen Enterprise JavaBeans, servlets, portlets (siguiendo la especificación de Portlets Java), JavaServer Pages y varias tecnologías de servicios web. Ello permite al desarrollador crear una aplicación de empresa portable entre plataformas y escalable, a la vez que integrable con tecnologías anteriores. Otros beneficios añadidos son, por ejemplo, que el servidor de aplicaciones puede manejar transacciones, la seguridad, escalabilidad, concurrencia y gestión de los componentes desplegados, significando que los desarrolladores pueden concentrarse más en la lógica de negocio de los componentes en lugar de en tareas de mantenimiento del bajo nivel. Plataforma Java, Edición Micro (Java Platform, Micro Edition), o Java ME (antes J2ME). Es una especificación de un subconjunto de la plataforma Java orientada a proveer una colección certificada de API de desarrollo de software para dispositivos con recursos restringidos. Está orientado a productos de consumo como PDAs, teléfonos móviles o electrodomésticos. Java ME fue una buena opción para crear juegos en teléfonos móviles debido a que se puede emular en un PC durante la fase de desarrollo y luego subirlos fácilmente al teléfono. Al utilizar tecnologías Java el desarrollo de aplicaciones o videojuegos con estas API resulta bastante económico de portar a otros dispositivos. Sin embargo, pocos dispositivos actualmente utilizan la tecnología por la que poco a poco ésta ha ido quedando en desuso. Java ME fue desarrollado mediante el Java Community Process bajo la especificación JSR 68. La evolución de la plataforma ha propiciado el abandono de las Java Specification Request (peticiones de especificación para Java) en favor de JSRs separadas para las distintas versiones de Java ME. - Microsoft .NET. .NET es un framework de Microsoft que hace un énfasis en la transparencia de redes, con independencia de plataforma de hardware y que permite un rápido desarrollo de aplicaciones; basada en ella, la empresa intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el sistema operativo hasta las herramientas de mercado. .NET podría considerarse una respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java de Oracle Corporation y a los diversos framework de desarrollo web basados en PHP. Su propuesta es ofrecer una manera rápida y económica, a la vez que segura y robusta, de desarrollar aplicaciones –o como la misma plataforma las denomina, soluciones– permitiendo una integración más rápida y ágil entre empresas y un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo. Figura 6: Logotipo de la plataforma Microsoft .NET. La construcción de aplicaciones usando .NET trae consigo una serie de beneficios: Disminuir el tiempo de desarrollo de los proyectos. Simplificar el mantenimiento de las aplicaciones desarrolladas en esta plataforma. Reducción de costos producto de la disminución de los tiempos de desarrollo y de mantenimiento. Poder utilizar las numerosas funcionalidades ya diseñadas que permite a los diseñadores realizar un proyecto de importación y adaptación a las necesidades en lugar de un desarrollo desde cero. - PHP. PHP es un acrónimo recursivo que significa PHP Hypertext Pre-processor (inicialmente PHP Tools, o, Personal Home Page Tools). Fue creado originalmente por Rasmus Lerdorf en 1994; sin embargo la implementación principal de PHP es producida ahora por The PHP Group y sirve como el estándar de facto para PHP al no haber una especificación formal. Publicado bajo la PHP License, la Free Software Foundation considera esta licencia como software libre. El código PHP suele ser procesado en un servidor web por un intérprete PHP implementado como un módulo, un daemon o como un ejecutable de interfaz de entrada común (CGI). En un servidor web, el resultado del código PHP interpretado y ejecutado (que puede ser cualquier tipo de datos, como el HTML generado o datos de imágenes binarias) formaría la totalidad o parte de una respuesta HTTP. Existen diversos sistemas de plantillas, sistemas de gestión de contenidos y frameworks que pueden emplearse para organizar o facilitar la generación de esa respuesta. Por otra parte, PHP puede utilizarse para muchas tareas de programación fuera del contexto de la web, como aplicaciones gráficas autónomas y el control de drones. También se puede interpretar y ejecutar un código PHP cualquiera a través de una interfaz de línea de comandos (CLI). El intérprete estándar de PHP, impulsado por Motor Zend, es un software libre publicado bajo Licencia PHP. PHP ha sido ampliamente portado y puede ser desplegado en la mayoría de los servidores web en casi todos los sistemas operativos y plataformas, de forma gratuita. Para abril de 2020, más de la mitad de los sitios en la web que usan PHP siguen en la versión descontinuada 5.6 o anterior. y con la versión 7.0 y 7.1 más del 68%, que no están oficialmente soportadas por The PHP Development Team, mientras que el soporte de seguridad es proporcionado por terceros, como Debian (hasta junio de 2020 para PHP 5). Adicionalmente, la versión 7.2, la versión con soporte más popular, dejará de recibir actualizaciones de seguridad el 30 de noviembre de 2020. Figura 7: Logotipo de la plataforma PHP. Las ventajas de esta plataforma son: Lenguaje totalmente libre y abierto. Posee una curva de aprendizaje muy baja. Los entornos de desarrollo son de rápida y fácil configuración. Fácil de instalación (existen paquetes autoinstalables que integran PHP rápidamente). Fácil acceso e integración con la bases de datos. Posee una comunidad muy grande. Es el lenguaje con mayor usabilidad en el mundo. Es un lenguaje multiplataforma. Completamente orientado al desarrollo de aplicaciones web dinámicas y/o páginas web con acceso a una Base de Datos. El código escrito en PHP es invisible al navegador ya que se ejecuta al lado del servidor y los resultados en el navegador es HTML. Posee una versatilidad para la conexión con la mayoría de base de datos que existen en la actualidad. Mientras que entre sus desventajas se tienen: El código fuente no puede ser ocultado eficientemente. Si no se configura y/o protege correctamente es muy vulnerable. Solo se ejecuta en un servidor y se necesita un servidor web para que funcione. - Python. Fue creado por Guido van Rossum en el año 1991, la extensión de los creados en el es .py; su filosofía hace hincapié en la legibilidad de su código, soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, dinámico y multiplataforma. La última versión estable del lenguaje es la 3.2.2, es administrado por la Python Software Foundation y posee una licencia de código abierto, denominada Python Software Foundation License. Figura 8: Logotipo de la plataforma Python. Sus ventajas son: Estilo flexible. Ordenado y limpio. Comunidad activa. Open Source. Simplificado y rápido. Multiplataforma. Las desventajas de la plataforma se enlistan a continuación: Problemas con hosting. Librerías incorporadas. Lentitud al ejecutar múltiples hilos. No dispone de buena documentación. Curva de aprendizaje. No tiene identificadores protegidos. - C++. Fue diseñado en 1979 por Bjarne Stroustrup. La intención de su creación fue extender al lenguaje de programación C mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se sumaron a los paradigmas de programación estructurada y programación orientada a objetos. Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. El nombre “C++” fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre “C con clases”. En C++, la expresión “C++” significa “incremento de C” y se refiere a que C++ es una extensión de C. Figura 9: Logotipo de la plataforma C++. Sus principales ventajas son: Alto rendimiento. Lenguaje actualizado. Multiplataforma. Mientras que en sus desventajas se cuentan: Más difícil de usar que otras plataformas. Es difícil programar bases de datos. - C#. Pronunciado si sharp en inglés fue desarrollado y estandarizado por la empresa Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes. El nombre C Sharp fue inspirado por el signo #, el cual se lee como sharp en inglés para notación musical. Es un juego de palabras, pues “C#” significa, musicalmente hablando, “do sostenido”, donde el símbolo # indica que una nota (en este caso do, representada por C) debe ser un semitono más alta. Esto es una metáfora de la superioridad de C# sobre su antecesor C++ y a su vez hace alusión a la misma metáfora que se ideó para dar nombre a C++, además, el símbolo # puede ser imaginado como la unión de cuatro símbolos +, continuando así con el sentido de progresión de los lenguajes C. Aunque C# forma parte de la plataforma .NET, esta es una API, mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows Microsoft, Unix, Android, iOS, Windows Phone, Mac OS y GNU/Linux. Figura 10: Logotipo de la plataforma C# (si sharp). Entre sus ventajas se tienen: Tipos de datos. Atributos. Pase de parámetros. Métodos virtuales y redefiniciones. Inicializador. Control de versiones. Declaraciones en el espacio de nombres. Sus desventajas son: Curva de aprendizaje. Se debe conseguir una versión reciente de Visual Studio .NET. Se deben tener algunos requerimientos mínimos del sistema para poder trabajar de manera adecuada. - NetBeans. Fue hecho principalmente para el lenguaje de programación Java; por lo que soporta el desarrollo de todos sus tipos de aplicación (J2SE, web, EJB y aplicaciones móviles); existe además un número importante de módulos para extenderlo. Es un producto libre y gratuito sin restricciones de uso. Entre sus características se encuentra un sistema de proyectos basado en Ant, control de versiones y refactoring. Permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos, que son archivos java que contienen clases de java escritas para interactuar con las API de NetBeans y un archivo especial (manifest file) que los identifica como módulos. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos y debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software. NetBeans IDE 6.5.2, la cual fue publicada el 19 de noviembre de 2008, extiende las características existentes del Java EE (incluyendo Soporte a Persistencia, EJB 3 y JAX-WS); además, el NetBeans Enterprise Pack soporta el desarrollo de aplicaciones empresariales con Java EE 5, incluyendo herramientas de desarrollo visuales de SOA, herramientas de esquemas XML, orientación a web servicies (for BPEL), y modelado UML; el NetBeans C/C++ Pack soporta proyectos de C/C++, mientras el PHP Pack, soporta PHP 5. Desde julio de 2006, NetBeans IDE es licenciado bajo la Common Development and Distribution License (CDDL), una licencia basada en la Mozilla Public License (MPL); en octubre de 2007, Sun anunció que NetBeans desde entonces se ofrecerá bajo licenciamiento dual de Licencia CDDL y la GPL versión 2. Figura 11: Logotipo de la plataforma NetBeans. Las ventajas de esta plataforma son: Lenguaje Multi-plataforma. Manejo automático de la memoria. Libre y gratuito. Desarrolla aplicaciones web dinámicas. Desarrollar aplicaciones de servidor para foros en línea, almacenes, encuestas, procesamiento de formularios HTML y mucho más. Entre sus desventajas se tienen: Lentitud a la hora de ejecutar las aplicaciones. Requiere un intérprete. Algunas implementaciones y librerías pueden tener código rebuscado. Una mala implementación de un programa en java, puede resultar en algo muy lento. Algunas herramientas tienen un costo adicional Una plataforma de integración crea conexiones entre aplicaciones y sistemas diferentes, entre las principales plataformas de integración están: - ESB. Un Enterprise Service Bus (ESB) se trata de una infraestructura software que actúa como capa intermedia (middleware) para comunicar los diferentes sistemas de una empresa, tanto sistemas internos de la misma como otros fuera del ámbito de ésta. Para llevar a cabo estas comunicaciones se basa principalmente en el uso de tecnologías web para enlazar los distintos puntos. Figura 12: Enterprise Service Bus (ESB). El objetivo del ESB es mejorar y ayudar al crecimiento de un negocio, por lo tanto debe ser lo bastante robusto como para que permita administrar los cambios en los requerimientos sin que esto suponga en los servicios ya instalados incidencia alguna. Sistema de eventos e infraestructura deben ser capaces de conectar cualquier recurso de TI con independencia de qué tecnología emplee éste. Entre sus ventajas se encuentran: Estandarización del desarrollo. Centralización del control. Monitorización. Editor gráfico para la implementación del servicio. Es posible definir políticas como las de seguridad de manera desacoplada de los servicios. Soporte del fabricante. Mientras que posee las siguientes desventajas: Utiliza tecnología propietaria. Encontrar a personal calificado. Costo de las licencias. - iPaaS. Es una plataforma tecnológica en la nube que integra las distintas aplicaciones y los datos que se generan en una empresa. La importancia de esta tecnología radica en que permite superar realidades que se dan en el ecosistema empresarial, como la fragmentación de la información y la utilización de sistemas en la nube y en lo local. Hoy en día las organizaciones pueden usar productos iPaaS para diseñarlo todo (incluso su misma red) en la nube. Dada la creciente disponibilidad y fiabilidad de la nube, hay empresas que se construyen en su conjunto sobre la base de servicios de plataforma integrada. Algunas opciones de aprovechamiento de las tecnologías iPaaS por las que los líderes del sector están apostando son: Preparación de datos en autoservicio. Intercambios de datos B2B. Funciones de gestión de información sobre clientes potenciales. Productos de integración integrados. Las soluciones iPaaS completas combinan herramientas y servicios en una única arquitectura orientada a servicios (SOA) en la que infraestructura, software, datos y otras operaciones interactúan en un ecosistema reactivo, y todo aparece en una pantalla que simplifica el control. Esto aporta a las organizaciones la capacidad de compartir recursos e información en distintas aplicaciones, crear mejoras espontáneamente y entregar productos al mercado a un ritmo mucho más ágil que antes de las plataformas de integración. Las ventajas del iPaaS son: Integración. Conectividad. Accesibilidad. Actualización constante. Agilidad de la implementación. Acceso a la información en tiempo real. Si bien el mercado iPaaS es aún emergente o al menos nuevo en comparación con el software de integración tradicional, los grandes vendedores de software están adaptando rápidamente su propuesta de valor y productos. Todo indica que hay una visión unificada en el mercado de integración que va hacia soluciones iPaaS. No pasará mucho tiempo hasta que las empresas adopten esta nueva arquitectura. Es un buen momento para evaluar opciones iPaaS y validar si su propuesta de valor (mejor time-tomarket, menor costo de adquisición) se cumple. Tarea 1) Investigar acerca de la plataforma MATLAB. Incluyendo: - ¿Qué es? - ¿Para qué sirve? - ¿Qué aplicaciones ingenieriles tiene? - ¿Cómo se puede programar en esta plataforma? 2) Conseguir el programa MATLAB e instalarlo en su computadora personal, ya que será la plataforma a utilizar durante el semestre.