Qué es el proceso de desarrollo de software El proceso de desarrollo de software es el método que usamos para crear aplicaciones informáticas de cualquier tipo, que indica qué etapas tendrá que hacer el equipo de desarrollo, qué disciplinas del desarrollo se realizarán en cada etapa y cómo se organizará el mantenimiento, una vez se haya desarrollado el software. A la vista de las aplicaciones existentes hoy en día... puedes pensar en juegos, procesadores de texto, programas de diseño... entenderás que los procesos de desarrollo pueden ser algo amplio y complejo, ya que incluye todo el flujo y actividades necesarias para crear el software, gestionar a los equipos de desarrolladores y las numerosas disciplinas que deben realizarse. Claro que todas las aplicaciones que se realizan no tienen la misma complejidad, pero lo cierto es que incluso en proyectos pequeños o medianos es importante el beneficio que se puede obtener al aplicar un proceso de desarrollo, ya que nos ayudará a aumentar sus posibilidades de éxito. Existen diversos procesos de desarrollo que se usan en la actualidad y otros procesos de desarrollo que se utilizaron en su época y que ya están un poco en desuso. Dentro de los procesos de desarrollo actuales encontramos RUP y el Desarrollo Ágil, siendo éste último usado mayoritariamente en la industria del software. Ambos procesos son iterativos y pensados para aplicaciones de tamaño mediano o grande. Pero existen otros procesos como "La Cascada", más usado hace décadas, pero que puede ser útil todavía en la actualidad para aplicaciones pequeñas. La complejidad de los sistemas de software Según Grady Booch, la complejidad de los sistemas de software se deriva de cuatro elementos: 1.- La complejidad del dominio del problema. Los problemas que se intentan resolver son inherentemente complejos, con una gran cantidad de requisitos que compiten entre sí. 2.- La dificultad de gestionar el proceso de desarrollo. Los desarrolladores de software enfrentan el reto de dar a los usuarios la impresión de simplicidad, esto es reducir al mínimo la complejidad externa. Este reto les obliga a incrementar el tamaño de los sistemas, a inventar mecanismos ingeniosos, o a reutilizar diseños y código ya existentes. 3.- La flexibilidad que se puede alcanzar a través del software. La elaboración de software es una actividad muy laboriosa porque empuja al desarrollador a construir por sí mismo prácticamente todos los bloques fundamentales sobre los que se apoyan las abstraccicones de más alto nivel. Esto es propiciado, en gran medida, por la existencia de pocos estándares para el control de calidad. 4.- Los problemas de caracterizar el comportamiento de sistemas discretos. Los comportamientos de la mayoría de los objetos se representan por sistemas analógicos en los que, a través de funciones contínuas, pequeños cambios en las entradas siempre producen pequeños cambios en las salidas. Por el contrario, puesto que el software se ejecuta en computadoras digitales, se tienen sistemas con un número finito de estados discretos. En sistemas grandes, este número puede crecer a cantidades enormes. Como no existen herramientas matemáticas para modelar el comportamiento completo de los grandes sistemas discretos, se debe aceptar la pérdida de cierto grado de confianza en cuanto a que las salidas sean correctas. EL PAPEL DE LOS RECURSOS SOFTWARE EN SISTEMAS COMPLEJOS Blanchard define un sistema como: una combinación de recursos (como seres humanos, materiales, equipos, software, instalaciones, datos, etc.) integrados de forma tal que cumplan una función específica en respuesta a una necesidad designada de un usuario Desde una perspectiva más amplia, un sistema se considerará como sistema de software cuando sus recursos software constituyan su elemento básico y la fuente de su funcionalidad básica. Dicho de otro modo, cuando en el proceso de desarrollo sean los recursos software los que determinan el proceso general de desarrollo de todo el sistema y cuando su ejecución pueda realizarse sobre una plataforma hardware genérica. Un sistema de software Implica una interacción con el contexto al que sirve que constituye el referente básico de su utilidad. Un sistema de software posee programas ejecutables pero también otros tipos de recursos (ficheros de datos, de documentación, etc.). Debemos tener claro lo que son recursos software y la definición de programas ya que estos están inmersos en lo sistemas de software. Llamamos recurso software a un programa o conjunto de programas ejecutables que proporcione algunas de las funciones requeridas por el sistema. Como definición de programa tenemos que un programa es un algoritmo codificado junto con unas estructuras de datos. Algunas veces se emplea el término paquete ejecutable para referirse a un conjunto de programas que se necesitan mutuamente durante la ejecución del sistema y que deben distribuirse conjuntamente al usuario final. La complejidad de un sistema depende no sólo de las múltiples interacciones entre los recursos de que consta sino también de la forma en la que puede evolucionar en respuesta a las necesidades del entorno. Pues bien, el control de la complejidad de un sistema depende generalmente de las funciones dependientes de sus recursos software y de como éstas se adapten al mundo externo. La ingeniería de sistemas de software pretende, justamente, incrementar la seguridad absoluta de que se han implementado fielmente los requisitos exigidos por el usuario y de que el sistema se ejecuta correctamente, esta seguridad debe existir durante el proceso de desarrollo hasta alcanzar un nivel de confianza similar al existente en otras ingenierías. Desde el punto de vista del diseñador y operador humano se conjugan, por tanto, dos propiedades que actúan como una espada de Damocles durante toda su vida útil: la incertidumbre de lo que realmente harán y la ignorancia en cómo lo consiguen. Reducirlas y dominarlas ha constituido la directriz básica en la evolución de la Ingeniería Software durante el último cuarto de siglo. Características del Software El software tiene tres características principales: 1) Características operativas 2) Características de transición 3) Características de revisión Características operativas del Software Son factores de funcionalidad, es como se presenta el software, es la “parte exterior” del mismo. Incluye aspectos como: Corrección: El software que estamos haciendo debe satisfacer todas las especificaciones establecidas por el cliente. Usabilidad / Facilidad de aprendizaje: Debe ser sencillo de aprender. Integridad: Un software de calidad no debe tener efectos secundarios. Fiabilidad: El producto de software no debería tener ningún defecto. No sólo esto, no debe fallar mientras la ejecución. Eficiencia: Forma en que el software utiliza los recursos disponibles. El software debe hacer un uso eficaz del espacio de almacenamiento y el comando ejecutar según los requisitos de tiempo deseados. Seguridad: Se deben tomar medidas apropiadas para mantener los datos a salvo de las amenazas externas Características de transición del Software Interoperabilidad: Es la capacidad para el intercambio de información con otras aplicaciones. Reutilización: Es poder utilizar el código de software con algunas modificaciones para diferentes propósitos. Portabilidad: Capacidad para llevar a cabo las mismas funciones en todos los entornos y plataformas. Características de revisión de Software Son los factores de ingeniería, la “calidad interior ‘del software como la eficiencia, la documentación y la estructura. Incluye aspectos como: Capacidad de mantenimiento: El mantenimiento del software debe ser fácil para cualquier tipo de usuario. Flexibilidad: Los cambios en el software debe ser fácil de hacer. Extensibilidad: Debe ser fácil de aumentar nuevas funciones. Escalabilidad: Debe ser muy fácil de actualizar para más trabajo. Capacidad de prueba: Prueba del software debe ser fácil. Modularidad: Debe estar compuesto por unidades y módulos independientes entre sí. INGENIERÍA DE SISTEMAS DE SOFTWARE La ingeniería de sistemas se define en Blanchard como la aplicación efectiva de esfuerzos científicos y de ingeniería para transformar una necesidad operativa en una configuración definida de un sistema mediante el proceso iterativo de análisis de requisitos, la selección del concepto, y asignación, síntesis, soluciones de compromiso y optimización del diseño, prueba y evaluación [1]. Entre sus características se incluye su estructura de arriba-abajo que ve el sistema como un todo; una orientación del ciclo de vida que considera todas las fases desde el diseño conceptual hasta la retirada del sistema; un enfoque interdisciplinar «en equipo>> que incluya todas las disciplinas adecuadas de diseño de forma oportuna y concurrente; Modelos del ciclo de vida del software Los modelos de ciclo de vida de software es una lista de actividades que ocurren durante el desarrollo de software, en el cual se intenta determinar el orden de las etapas involucradas y los criterios de transición asociadas entre estas etapas Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve un proyecto de desarrollo de software Es la forma mediante la cual se describen los diferentes pasos que se deben seguir para el desarrollo de un software, partiendo desde la necesidad hasta llegar a la puesta en marcha de una solución y su apropiado mantenimiento. El ciclo de vida para un software comienza cuando se tiene la necesidad de resolver un problema, y termina cuando el programa que se desarrollo para cumplir con los requerimientos, deja de ser utilizados. Existen varias versiones del ciclo de vida del software entre las cuales se destacan: el ciclo de vida clásico o en cascada, el modelo en espiral, el desarrollo de prototipos, el modelo por incrementos y el modelo extremo. · Modelo en cascada Las actividades de desarrollo se completan una tras otra. Las actividades de prueba solo ocurren después de que todas las actividades de desarrollo han sido completadas. Elementos: 1. Requisitos Si por algo se caracterizan las metodologías de desarrollo tradicionales, es por su robusto análisis de requisitos. El modelo de desarrollo en cascada no es la excepción a la regla. Si los requerimientos del proyecto no están bien definidos, las probabilidades de que este resulte en fracaso son bastante elevadas. Para definir los requerimientos, se toman en consideración diferentes aspectos. Las necesidades del cliente son sin duda los más relevantes. Así mismo, se toman en cuenta las expectativas, recursos, equipo, riesgos y limitaciones del proyecto 2. Diseño Con los requerimientos definidos en su totalidad, se procede con el diseño del proyecto. En esta etapa se definen elementos fundamentales como la arquitectura del software, la estructura de los datos, y por supuesto, las características de la interfaz que se desarrollará (1). 3. Implementación También conocida como etapa de codificación. Dentro de esta, se toman como base tanto el diseño, como los requisitos previamente trabajados. Con el propósito de generar el código del proyecto. No existe mucha ciencia tras esta etapa. Si el diseño o los requerimientos lo dicta, el código simplemente lo hace. 4. Verificación Para la etapa de verificación, se requiere de la participación de los expertos en el área de control de calidad. De manera que pueden probar todas y cada una de las instancias del proyecto. Con el objetivo de identificar potenciales incongruencias. 5. Mantenimiento Tras haber entregado el producto final al cliente, es posible que surjan nuevas peticiones por parte de este último. De forma que el equipo deberá de volver a reunirse para atender dichas solicitudes. Ya sea que se trate de una gestión estándar del sistema, o implementar alguna nueva característica. Para ser más específicos, la etapa de mantenimiento le garantiza al cliente una supervisión constante del proyecto. Pudiéndose actualizar, modificar, mejorar, corregir, o refinar el software como mejor le convenga al cliente (6). Características Especificación de requerimientos: Robusta e inalterable Flexibilidad a los cambios: Nula Vulnerabilidad a los riesgos: Alta Participación del cliente: Limitada Costo de implementación: Bajo Mantenimiento y retroalimentación: Tardío Documentacion: robusta · Modelo V En cada fase de desarrollo se incluye niveles de pruebas asociados. En este modelo las pruebas comienzan lo más pronto posible, para descubrir rápidamente los posibles errores y no esperar al final para mejorarlo · Modelo iterativo Consiste en la iteración de varios ciclos de vida entregando al cliente una versión mejorada al final de cada iteración. · Modelo de desarrollo incremental Está basado en la filosofía de construir incrementando las funcionalidades del programa. Los requisitos tienen asignada una prioridad y son entregados según el orden de prioridad en el incremento correspondiente. Modelos basados en Prototipos desechables e incremental El Modelo Incremental combina elementos del MLS con la filosofía interactiva de construcción de prototipos. En una visión genérica, el proceso se divide en 4 partes: Análisis, Diseño, Código y Prueba. Sin embargo, para la producción del Software, se usa el principio de trabajo en cadena o “Pipeline”, utilizado en muchas otras formas de programación. Con esto se mantiene al cliente en constante contacto con los resultados obtenidos en cada incremento. Es el mismo cliente el que incluye o desecha elementos al final de cada incremento a fin de que el software se adapte mejor a sus necesidades reales. El proceso se repite hasta que se elabore el producto completo. De esta forma el tiempo de entrega se reduce considerablemente. Al igual que los otros métodos de modelado, el Modelo Incremental es de naturaleza interactiva pero se diferencia de aquellos en que al final de cada incremento se entrega un producto completamente operacional. El Modelo Incremental es particularmente útil cuando no se cuenta con una dotación de personal suficiente. Los primeros pasos los pueden realizar un grupo reducido de personas y en cada incremento se añadir• personal, de ser necesario. Por otro lado los incrementos se pueden planear para gestionar riesgos técnicos. El Modelo Incremental se puede ver aquí en forma gráfica: *Se evitan proyectos largos y se entrega algo de valor a los usuarios con cierta frecuencia. *El usuario se involucra más. *Difícil de evaluar el coste total. *Difícil de aplicar a los sistemas transaccionales que tienden a ser integrados y a operar como un todo. *Requiere gestores experimentados. *Los errores en los requisitos se detectan tarde. *El resultado puede ser muy positivo. Modelo automatizado La automatización es un sistema donde se trasfieren tareas de producción, realizadas habitualmente por operadores humanos a un conjunto de elementos tecnológicos. Un sistema automatizado consta de dos partes principales: Parte de Mando Parte Operativa La Parte Operativa es la parte que actúa directamente sobre la máquina. Son los elementos que hacen que la máquina se mueva y realice la operación deseada. Los elementos que forman la parte operativa son los accionadores de las máquinas como motores, cilindros, compresores ..y los captadores como fotodiodos, finales de carrera ... La Parte de Mando suele ser un autómata programable (tecnología programada), aunque hasta hace bien poco se utilizaban relés electromagnéticos, tarjetas electrónicas o módulos lógicos neumáticos (tecnología cableada) . En un sistema de fabricación automatizado el autómata programable esta en el centro del sistema. Este debe ser capaz de comunicarse con todos los constituyentes de sistema automatizado. Objetivos de la automatización Mejorar la productividad de la empresa, reduciendo los costes de la producción y mejorando la calidad de la misma. Mejorar las condiciones de trabajo del personal, suprimiendo los trabajos penosos e incrementando la seguridad. Realizar las operaciones imposibles de controlar intelectual o manualmente. Mejorar la disponibilidad de los productos, pudiendo proveer las cantidades necesarias en el momento preciso. Simplificar el mantenimiento de forma que el operario no requiera grandes conocimientos para la manipulación del proceso productivo. Integrar la gestión y producción. · Modelo en espiral Se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas se eligen en función del análisis de riesgo, comenzando por el bucle interior. · Modelo de prototipos El prototipo debe ser construido en poco tiempo y el diseño rápido que se centra en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario final 4.2 Tecnología de Software: Concepto de Tecnología del software Es un conjunto integrado de notaciones, herramientas y métodos, basados en unos sólidos fundamentos, que permiten el desarrollo de un producto software en un contexto organizativo dado. Una tecnología de software puede considerarse constituida por los siguientes componentes Métodos de desarrollo Un método aporta una forma sistemática de refinar las especificaciones de un sistema haciendo que en cada paso se obtenga cierto nivel de confianza en que el refinamiento efectuado sea correcto. Es este incremento en el nivel de confianza, tanto a nivel individual como a nivel organizativo. La forma que un método tiene para lograr el objetivo de permitir incrementar la confianza del diseñador es imponer una disciplina en el proceso de desarrollo conjugando la utilización de una o varias notaciones y formas de razonar sobre el sistema en desarrollo con un conjunto de directrices que guían al diseñador en el proceso y generalmente apoyados por unas herramientas que soportan el método. Sus objetivos concretos son: Proponer un procedimiento para capturar los requisitos del usuario y relacionarlos entre sí para facilitar la comprobación de su consistencia. Distribuir el desarrollo entre un equipo de trabajo mediante la adecuada agrupación de funciones en estructuras de diseño (objetos, módulos multifuncionales, entre otros.). Identificar interfaces claras entre los componentes del sistema a diseñar (objetos, módulos, entre otros.) Proponer una serie de heurísticos para guiar el refinamiento en varias etapas asegurando la consistencia en cada uno de los pasos de refinamiento basados en la experiencia de los proponentes del método en diseñar sistemas reales con el mismo. Herramientas de soporte: entornos de desarrollo Un sistema de software cuya finalidad es la de ayudar a construir otros sistemas. Desde este punto de vista lo que permite es mejorar la capacidad del ingeniero de software en diversas fases del desarrollo. Las herramientas requeridas a lo largo del desarrollo son muy dispares. Históricamente, las primeras que aparecen son editores para generar las descripciones de los sistemas en algún lenguaje, compiladores para generar código, depuradores para analizar las posibles fuentes de error, entre otros. Todas ellas dedicadas a soportar la fase de implementación. Recientemente, han surgido otras para soportar las fases iniciales del ciclo de vida. Componentes reutilizables Son módulos genéricos que pueden componerse para construir un sistema. Un diseño basado en componentes de un catálogo conlleva, además, un problema de confianza en la corrección de los módulos a utilizar; de ellos dependerá la corrección del sistema final. Es interesante comentar en este caso la aparición en la ingeniería de sistemas de software de un fenómeno bien conocido en la ingeniería de sistemas: el control de calidad de las piezas es básico para obtener un producto de calidad. Cada vez será más importante disponer de bibliotecas de calidad porque de ellas se derivará la calidad del producto final. Algunos ejemplos de software: Microsoft Windows. Probablemente el más popular de los sistemas operativos empleados actualmente, es típico de los computadores IBM. Permite al usuario manejar y e interactuar con los distintos segmentos de un computador, mediante un entorno de usuario amigable, basado en ventanas y representación visual. Mozilla Firefox. Un navegador de Internet sumamente popular, disponible para descarga sin pago. Conecta al usuario con la World Wide Web, para realizar búsquedas de datos y otros tipos de operaciones virtuales. Microsoft Word. Parte del paquete de Microsoft Office, se trata de un procesador de texto de los más reconocidos que hay, e incluye herramientas para negocios, gestión de bases de datos, elaboración de presentaciones, entre otros. Google Chrome. Otro navegador de Internet, ofrecido por la empresa Google, cuya ligereza y velocidad lo hizo rápidamente popular entre los usuarios de Internet. Además, abrió la puerta a proyectos de un sistema operativo de Google. Adobe Photoshop. Una conocida aplicación de edición de imágenes y elaboración de contenido visual, útil para el diseño gráfico y el retocado fotográfico, producto de la empresa Adobe Inc. Fuente: https://concepto.de/hardware-y-software/#ixzz83y6PYsrX Desarrollo estructurado La programación estructurada se trata en lo que se requiere que haga el sistema o la aplicación, por la general se diferencia ya que se maneja de forma ordenada y que tenga lógica, se trata que permite que las personas observen los elementos lógicos (lo que hará el sistema) el analista puede desarrollar el sistema para la situación donde será utilizado. Los programas son más fáciles de entender. Un programa estructurado puede ser leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lógica, lo cual es típico de otros estilos de programación. La estructura del programa es más clara puesto que las instrucciones están más relacionadas entre sí, por lo que es más fácil comprender lo que hace cada función Programación orientada a objeto. La programación orientada a objetos no es un concepto nuevo, sus inicios y técnicas de programación se iniciaron a principios de los años 70. se puede definir programación orientada a objetos (oops) como una técnica de programación que utiliza objetos como bloque esencial de construcción. la oops, es un tipo de programación más cercana al razonamiento humano. La oops surge como una solución a la programación de grandes programas, y para solventar el mantenimiento de dichas aplicaciones, ya que en la programación estructura el más mínimo cambio supone la modificación de muchas funciones relacionadas, en cambio con la oops solo es cuestión de añadir o modificar métodos de una clase o mejor, crear una nueva clase a partir de otra (herencia). La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresariamos las cosas en la vida real que otros tipos de programación. Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.