Fundamentos de la Ingienería del Software

Posted by Liber Siso on junio 24, 2022 with No comments

 


              


República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación

Instituto Universitario de Tecnología José Antonio Anzoátegui

El Tigre – Estado Anzoátegui

 

 

 

 

Fundamentos de la Ingeniería del Software

 

 

 

 

Docente:                                                                        Integrantes:

Yudelys Díaz                                                                  L. Siso CI 30.342.988 

                                                                                       E. Andrade CI 30.545.027

                                                                                       F. Bastidas CI 30.645.460

                                                                                       D. Rodríguez CI 30.856.988

                                                                                       T2 – F1 IF01

 

El Tigre, 27 de mayo del 2022










Software

 

     Son programas específicos que hacen posible la ejecución y realización de tareas específicas, en contraposición a los componentes físicos que son llamados hardware. Por ejemplo, los sistemas operativos, aplicaciones, navegadores web, juegos o programas.




Cualidades de Software

 

Ø ·   Correctitud: Un sistema es correcto si resuelve el problema real que causó su desarrollo. La correctitud es una propiedad matemática que establece la igualdad entre el software y su especificación, por lo que cuanto más específica haya sido en las instrucciones, más precisa y sistemática podrá ser su evaluación.

     La correctitud puede ser valorada mediante diversas técnicas, algunos de enfoque experimental como las pruebas, otros de enfoque analítico como verificación formal de la correctitud.

 

Ø ·   Confiabilidad: Es la calidad que se puede esperar de una aplicación que lleve a cabo las operaciones establecidas y con la claridad requerida. Pueden tenerse aplicaciones correctas diseñadas para requerimientos “incorrectos”, por lo que la correctitud del software puede no ser suficiente para garantizar al usuario que el software se comporta como “es esperado”.

 

Ø  ·   Robustez: Un programa es robusto si se comporta en forma razonable aún en situaciones que no fueron pronosticadas en la descripción de los requerimientos. La robustez es igual a la distancia del caos, es decir, mientras menor es la distancia al caos, mayor solidez posee el sistema.

 

Ø ·   Performance: Se puede medir la eficiencia del sistema de acuerdo a dos dimensiones: Los recursos necesarios que abarcan la construcción y desarrollo del software, y los recursos necesarios que comprende la ejecución de la aplicación.

     Cabe destacar, que un sistema es eficiente cuando se utilizan los equipos computacionales en forma económica. Por ejemplo, si es muy lento reduce el entendimiento de los usuarios, si usa demasiado espacio de disco puede ser muy costoso de ejecutar, si utiliza demasiada memoria puede afectar al resto de las aplicaciones que se están ejecutando mientras el sistema operativo intenta balancear el uso de la memoria.

 

Ø ·  Amigabilidad: Un sistema es amigable cuando el usuario encuentra la interfaz fácil de manejar, la amigabilidad está dada por la habilidad con que el sistema puede configurarse y ajustarse al ambiente de hardware.

     Un sistema que produce respuestas erróneas no es amigable sin importar lo “atractiva” que sea la interfaz de usuario, del mismo modo que un sistema que produce respuestas más tardías de lo que requiere el usuario no es amigable, aunque estas respuestas sean desplegadas en colores.

 

Ø · Verificabilidad: Un software es verificable si sus propiedades pueden ser verificadas sencillamente. Ejemplo, la correctitud o la performance de un sistema son propiedades que concierne comprobar.

     La verificabilidad es en general una cualidad interna, pero a veces puede ser externa, por ejemplo, en muchas aplicaciones de seguridad crítica, el cliente solicita la verificación de algunas propiedades.

 

Ø ·  Mantenimiento: Es la forma fácil de corregir y remediar fallas que pueda tener algún software. El mantenimiento también puede aplicarse a la reparación los problemas que surgen en la aplicación después de la liberación o agregarle al producto que no estaban en las especificaciones originales.

     El mantenimiento abarca un grupo amplio de actividades que tiene que ver con las modificaciones de un software existente la lograr una mejora. Existen tres tipos de mantenimiento:

 

·         El mantenimiento Correctivo: El mantenimiento correctivo es la eliminación de errores excedentes presentes en el producto al ser liberado, así como errores implantados al software durante su mantenimiento.

 

·         Mantenimiento Adaptativo: Involucra el ajuste de la aplicación a ajustes en el entorno, por ejemplo, la creación de hardware o del sistema operativo.

     En este asunto la necesidad de cambios al software no puede ser atribuida a una particularidad del software en sí mismo como la inhabilidad de prestar cierta funcionalidad demandada por el usuario o errores residuales, sino que se producen debido a cambios en su entorno.

 

·         El mantenimiento Perfectivo: Implica cambios en el software para perfeccionar sus cualidades, los cuales se deben a la necesidad de cambiar las funciones brindadas por el software, añadir nuevas funciones, renovar la performance, facilitar su manejo, entre otras.

 

     Estos cambios pueden ser producidos tanto por el ingeniero de software para perfeccionar el estatus del producto en el mercado, como por el cliente debido a nuevos requerimientos.

 

Ø  ·   La Reusabilidad: Se refiere a que una aplicación puede utilizarse en otras aplicaciones. Es complicado lograr reusabilidad, ya que se debe examinar el instante de desarrollar los componentes del software; un modo para conseguir reusabilidad es el manejo de diseño orientado a objetos.  

 

Ø  ·   Portabilidad: Se refiere a la manera en que los clientes pueden acceder a los productos ya que un software portable es mucho más fácil de obtener por los clientes dado que pueden acceder a dicho software. El software es portable si puede ser desarrollado en distintos ambientes, refiriéndose este último tanto a plataformas de hardware como a ambientes de software como puede ser determinado sistema operativo.

 

Ø  ·   Comprensibilidad: Algunos sistemas de software son más cómodos de comprender que otros, ciertas tareas son sustancialmente más complicadas que otras. La comprensibilidad es una cualidad interna del producto y ayuda a lograr muchas de las otras cualidades como evolucionabilidad y verificabilidad. La comprensibilidad no es más que ejecute su función de acuerdo a lo que el usuario predice.

 

Ø ·   Interoperabilidad: Es la destreza que posee un sistema para coexistir e interactuar con otros, por ejemplo, la habilidad de un procesador de texto de incluir gráficas producidas por un paquete de gráficos.

 

Ø  ·   La Productividad: Es una cualidad del proceso de producción de software, calcula la eficiencia del proceso. Un proceso eficiente resulta en una entrega más rápida del producto. Los ingenieros originan software individualmente a cierta tasa, la cual puede alterarse considerablemente entre individuos con habilidad distinta.

     Cuando los individuos forman un equipo, la productividad de éste es alguna función de las productividades individuales, y en general esta productividad combinada es menor que la suma de las partes.

 

Ø  ·   Oportunidad: La oportunidad es una cualidad del proceso que se refiere a la habilidad de liberar el software a tiempo. Esto puede ser un arma de doble filo ya que muchos procesos fracasan en alcanzar los resultados a tiempo. La oportunidad en sí misma no es una cualidad útil, aunque llegar tarde puede llevar a perder oportunidades en el mercado, entregar un producto a tiempo que carece de otras cualidades como confiabilidad o performance, no tiene sentido.

     Entregar un producto a tiempo requiere una agenda planeada cuidadosamente, con un trabajo de estimación acertado y puntos de revisión especificados claramente y verificables.

 



Factores de Calidad del Software

 

     La calidad de software es todo el conjunto de cualidades que determinan su eficacia y utilidad, cumpliendo con las necesidades tanto implícitas como explícitas del cliente.

     Los factores que determinan la calidad de un software se dividen en tres grupos:

 


Ø  Operaciones del producto: Características operativas

 

·         Corrección: Es el grado en que una aplicación satisface sus especificaciones y consigue los objetivos encomendados por el cliente.

 

·         Fiabilidad: Es el grado que se puede esperar de una aplicación lleve a cabo las operaciones especificadas y con la precisión requerida.

 

·         Eficiencia: Es la cantidad de recursos hardware y software que necesita una aplicación para realizar las operaciones con los tiempos de respuesta adecuados.

 

·         Integridad: Consiste en el grado con que puede controlarse el acceso al software o a los datos a personal no autorizado.

 

·         Facilidad de Uso: Es el esfuerzo requerido para aprender el manejo de una aplicación, trabajar con ella, introducir datos y conseguir resultados.

 




Ø  Revisión del producto: Capacidad para soportar cambios.

 

·         Facilidad de mantenimiento: Es el esfuerzo requerido para localizar y reparar errores.

 

·         Flexibilidad: Se basa en el esfuerzo requerido para modificar una aplicación en funcionamiento.

 

·         Facilidad de Prueba: Es el esfuerzo requerido para probar una aplicación de forma que cumpla con lo especificado en los requisitos.

 


Ø  Transición del producto: Adaptabilidad a nuevos entornos.

 

·         Portabilidad: Es el esfuerzo requerido para transferir la aplicación a otro hardware o sistema operativo.

 

·         Reusabilidad: Se basa en que partes de una aplicación pueden utilizarse en otras aplicaciones.

 

·         Interoperabilidad: Es el esfuerzo necesario para comunicar la aplicación con otras aplicaciones o sistemas informáticos.

 

Ingeniería del Software

 

     La Ingeniería de Software es la rama de la ingeniería que estudia todo lo relacionado con la informática o sistemas de computación, ya sea la creación de software confiable y de calidad, con una orientación metódica, ordenada y cuantificable al incremento, ejecución y conservación del software, y basándose en métodos y técnicas de ingeniería, y brindando soporte operacional y de mantenimiento.

     Sin embargo, la ingeniería de software se ha convertido en una de las áreas clave en el auge de la tecnología en empresas y sociedad.




Visión general del Proceso de desarrollo de Software

 

     En el desarrollo de software hay una serie de desafíos adicionales, relativos esencialmente a la naturaleza del producto obtenido. Un proceso de desarrollo de software tiene como propósito la producción eficaz y eficiente de un producto software que reúna los requisitos del cliente.

     Las actividades requeridas para desarrollar un sistema de software de alta calidad y proporciona el marco de trabajo desde el cual se puede establecer un plan detallado para el desarrollo del software. Actividades: Diseño, validación, evolución, especificación.

 



 

El papel del usuario dentro del proceso de desarrollo de software

 

     Todos sabemos que cuanto mayor sea la ayuda de los usuarios en un proyecto de desarrollo de software, mayores serán las probabilidades de éxito que tenga el mismo.

     No obstante, es importante hacer algunas matizaciones:

 

1)         El proyecto no se hace sólo, porque incluso existiendo una gran ayuda por parte de los usuarios, si no se consigue interpretar con precisión lo que quieren y no se dinamiza un feedback continuo de los mismos durante todo el proceso de desarrollo, se incrementarán las posibilidades de que algún requisito funcional no se haya recogido adecuadamente o de que se haya realizado un software con una usabilidad incómoda para los usuarios.

 

     Estas circunstancias son fuente de innumerables problemas en las fases finales del proyecto y provocan retrasos, sobrecostes y grandes dificultades para cerrar el proyecto, además de crear conflictos con el cliente que pueden perjudicar las relaciones futuras con el mismo. Esto hace que sea fundamental el papel que desempeñan tanto el jefe de proyectos, como el equipo de analistas funcionales y analistas programadores.

 

 

2)         Es importante que entre el grupo usuarios asignados al proyecto haya usuarios que vayan aestar implicados en el futuro uso del sistema de información, es decir, no es suficiente que el equipo de usuarios esté formado por “ideólogos” o “teóricos” que se nutrirán del resultado del trabajo de la herramienta, sino que es fundamental que participen usuarios que después se tengan que poner el mono de trabajo y vayan a trabajar con el software.

 

     Es importante conseguir la combinación de ambos tipos de usuarios (tampoco es positivo que en el grupo de usuarios no participen usuarios directores, ya que pueden existir conflictos entre usuarios que éstos deben solucionar y también es recomendable que el software no sólo se diseñe para el corto plazo, sino que sirva para tareas de gestión, planificación, etc… y esta visión la proporcionan principalmente los usuarios directores), por lo que el jefe de proyectos debe poner en conocimiento del cliente esta necesidad, como es lógico explicando los riesgos de que no se aplique esta estrategia.

 

 

3)         Los analistas están para ayudar y para colaborar con los usuarios en la especificación y diseño de la solución, pero no están para “dar lecciones” a los usuarios y enseñarle cómo deben hacer su trabajo. Si los usuarios hacen su trabajo de una determinada manera, aunque no sea la más ortodoxa, siempre tendrá una justificación que sólo se entendería si realmente estuviéramos haciendo su trabajo durante un tiempo y viéramos los problemas con los que se enfrentan cotidianamente.

 

     La clave por tanto está en la colaboración y en el diálogo, es decir, se pueden proponer cosas al usuario, se le pueden dar ideas, pero no se le puede dar una vuelta al calcetín de cómo hacen sus tareas, salvo que ellos mismos lo soliciten y procurando en estos casos y en consenso con los usuarios que los cambios sean tranquilos.

 

 

4)         Es fundamental documentar el proyecto, en primer lugar con la documentación que se especifique en las normativas de desarrollo de la organización para la que se realiza el servicio, con las matizaciones que indique el Director del Proyecto, en segundo lugar con la documentación que establezcan las normativas internas de calidad de tu organización (no requerirá un sobreesfuerzo, ya que en la mayor parte de los casos coincidirá) y a todo lo anterior sumarle toda la documentación de trabajo que sea necesaria para trabajar con los usuarios, que no tienen por qué entender de modelos de datos, de diagramas de casos de uso, etc…, es más, es un error trabajar con los usuarios utilizando dichas herramientas, ya que estas son de utilidad técnica y no hablan el mismo lenguaje de los usuarios.

 

     Este tipo documentación, por tanto, no tiene por qué tener los formalismos de la técnica y tiene como objetivo que el usuario capte lo que el analista está interpretando y se pueda ir perfilando a partir de esto, tantos requisitos, como casos de uso, interfaces, etc. Es muy importante trabajar todo esto, ya que comenzar demasiado pronto con la construcción, es algo muy arriesgado, ya que los costes de modificar algo en las distintas fases de la construcción pueden ser muy importantes y provocar que se tengan que reconstruir varias veces distintas funcionalidades de la aplicación.

 

Responsabilidad ética y profesional en ingeniería del software

 

     La ingeniería del software se lleva a cabo dentro de un marco legal y social que limita la libertad de los ingenieros. Los ISW deben aceptar que su trabajo comprende responsabilidades más amplias que simplemente la aplicación de habilidades técnicas.

     Deben comportarse de una forma ética y moral responsable, no basta con poseer estándares normales de honestidad e integridad. No debería utilizar su capacidad y sus habilidades para comportarse de forma deshonesta o de forma que deshonre la profesión de la ingeniería del software.

     Existen áreas donde los estándares de comportamiento aceptable no están acotados por las leyes, sino por la responsabilidad profesional, algunas de estas son:

 

Ø · Confidencialidad: Respetar la confidencialidad de sus empleadores o clientes, independientemente de que se haya firmado un acuerdo formal de confidencialidad.

 

Ø  ·   Competencia: No debe falsificar su nivel de competencia, ni aceptar conscientemente trabajos que están fuera de su capacidad.

 

Ø  · Derechos de propiedad intelectual: Debe ser consciente de las leyes locales que gobiernan el uso de la propiedad intelectual, como los patentes copyright. Debe asegurarse de que la propiedad intelectual de los empleadores y clientes esté protegida.

 

Ø  · Uso inapropiado de las computadoras: No debe emplear sus habilidades técnicas para utilizar de forma inapropiada las computadoras de otras personas. Desde los relativamente triviales (utilizar juegos en las máquinas de un empleado, por ejemplo) hasta los extremadamente serios (difusión de virus).

 



Ciclo de Vida del Software

 

     Es una secuencia estructurada y bien definida de las etapas de la ingeniería de software para desarrollar el software deseado.

     Lo describe desde el inicio hasta el final, con el objetivo de definir las distintas fases intermedias para validar el desarrollo de la aplicación y confirmar que cumpla con los requisitos de verificación.

 

Etapas del Ciclo de Vida del Software

 

     Las principales etapas que forman el ciclo de vida de desarrollo de software son:

 

Ø  · Planificación: Son tareas que influyen en el éxito del proyecto, por eso es necesaria una planificación inicial. En esta fase se incluyen tareas como la determinación del ámbito del proyecto, un estudio de viabilidad, análisis de riesgos, costes estimados, asignación de recursos en las distintas etapas, etc.

Ø  · Análisis: Es el proceso en el que se trata de descubrir lo que se necesita y cómo llegar a las características que el sistema debe poseer.

Ø  · Diseño: Es una etapa complicada, y si la solución inicial no es la más adecuada, habrá que redefinirla. Además, se estudian las posibles implementaciones que hay que construir y la estructura general del software.

Ø · Implementación: Se trata de elegir las herramientas adecuadas en un entorno de desarrollo que haga más sencillo el trabajo y el lenguaje de programación óptimo, esta decisión va a depender del diseño y el entorno elegido. Es importante tener en cuenta la adquisición de productos necesarios para que el software funcione.

Ø · Pruebas: Conseguiremos detectar los fallos que se hayan cometido en etapas anteriores, para que no repercuta en el usuario final. Esta fase del ciclo de vida del software hay que repetirla tantas veces como sea necesaria, ya que la calidad y estabilidad final del software dependerá de esta fase.

 

Ø  Instalación: En esta fase pondremos el software en funcionamiento.

 

Ø  Uso y mantenimiento: Este es un momento crucial dentro del ciclo de vida de un software.

 

     Dentro del mantenimiento se pueden distinguir tres puntos importantes:

 

·         Correctivo: Eliminar defectos que se van detectando.

 

·         Adaptativo: Adaptarlo a nuevas necesidades.

 

·         Perfectivo: Añadir nuevas funcionalidades.

 


 

Modelos del ciclo de vida de un software

     Entre los modelos de ciclo de vida del software podemos encontrar los siguientes:

 

Ø ·  Modelo en cascada: Es un proceso secuencial en el que el desarrollo va fluyendo de arriba hacia abajo. Aunque en ocasiones ha sido criticado debido a su rigidez, sigue siendo el más seguido a día de hoy. En este modelo del ciclo de vida de un software, se espera a finalizar una etapa para comenzar con la siguiente.

 

Ø ·  Modelo V: Como en el modelo en cascada los defectos solo se descubrían al final, cuando empezaba la fase de pruebas, se siguió con el modelo V, en el que 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 en cascada entregando al cliente una versión mejorada al final de cada iteración para que proponga mejoras, hasta que se satisfagan sus necesidades. Es ideal para proyectos en los que los requisitos no están claros.

 

Ø ·  Modelo de desarrollo incremental: Combina el modelo en cascada con el de prototipos y está basado en la filosofía de construir incrementando las funcionalidades del programa. Se sigue un proceso lineal y cada uno de ellos va incrementando funcionalidades del software hasta llegar al producto final.

 

Ø ·  Modelo en espiral: Las actividades de este modelo forman una espiral, y cada bucle representa un conjunto de actividades, cada actividad se va eligiendo en función del análisis de riesgos del bucle anterior.

 

     Se necesita un equipo con experiencia para detectar correctamente los riesgos.

 

     En cada bucle se siguen cuatro tareas:

 

·         Fijar objetivos

 

·         Análisis del riesgo

 

·         Desarrollar, verificar y probar

 

·         Planificar

 

Ø  ·  Modelo de prototipos: Comienza con la recolección de requisitos y definición de objetivos globales, llevando a un diseño rápido y a un prototipo.  El prototipo es evaluado por el cliente, y nos permite refinar los requisitos hasta llegar a lo que el cliente espera.

 

 

Principios, Modelos, Métodos, Metodología técnicas, actividades y herramientas en el proceso de desarrollo de Software.

 

Principios

 

Ø ·  Eliminar Desperdicios: Desperdicio es todo aquello en lo que invertimos recursos pero que no es traducido en valor para nuestro cliente. Este principio nos advierte que siempre hay que estar en la búsqueda de eliminar desperdicios en nuestro proceso, en cualquiera de las formas que este pueda presentar. Crear Conocimiento: El proceso debiera considerar en todas las áreas que sea posible, transmitir el conocimiento de una forma rápida y eficiente para que el equipo esté lo más nivelado en el entendimiento de lo que se produce, cómo se produce y para qué se produce. 

 

Ø ·  Calidad Intrínseca: Todas las pequeñas partes que conforman el producto final deben ser construidas con calidad desde el primer momento y no esperar que un proceso futuro sea el encargado de agregarla. Esto se traduce en integración continua, automatización de procesos repetitivos (testing, deploy, etc) y eliminación de código duplicado al momento de detectarlo; pero también en facilitar las discusiones cara a cara por sobre e-mail y en la disponibilidad de personas.   

 

Ø  ·  Tomar decisiones con toda la información (Diferir compromiso): Este principio advierte que no es buena idea tomar decisiones en base a estimados o adivinanzas. Las decisiones se deben postergar hasta el momento en que se tenga la mayor cantidad de información, sin caer en la irresponsabilidad.  

 

Ø ·  Entregar Rápido: Al entregar rápido se produce un ciclo de feedback óptimo y permite al equipo de desarrollo ajustar su modelo a la realidad con una mayor precisión y menor costo para el proyecto. Esto también se traduce en limitar la cola de tareas pendientes a un mínimo dado, para que siempre el alcance de lo que resta quepa dentro del contexto mental del equipo. Limita el trabajo en curso para cada persona de manera que puedan enfocarse en cada tarea a mano.  

 

Ø  ·  Respetar a las personas: Entrega el poder de tomar decisiones a quienes tienen el conocimiento y experiencia técnica para hacerlo, es decir, quienes implementarán finalmente las decisiones. Realiza entrenamientos internos o externos e incentiva la curiosidad intelectual. Alienta el espíritu por mejorar el oficio. 

 

Ø  ·  Optimizar el todo: Enfoca tus esfuerzos de optimización en el flujo de valor que sale hacia el usuario y no en cada una de las partes que conforman tu proceso, usa una mirada global para optimizar. Siempre ten en tu nómina los mejores profesionales, técnicos y empleados que puedas conseguir, finalmente es el equipo el que hace la diferencia.

 

Modelos de Proceso de Software

 

Ø  Codificar y corregir (Code-and-Fix): Este es el modelo básico utilizado en los inicios del desarrollo de software. Contiene dos pasos:

 

·      ·     Escribir código

 

·       ·    Corregir problemas en el código.

 

     Se trata de primero implementar algo de código y luego pensar acerca de requisitos, diseño, validación, y Mantenimiento.

 Este modelo tiene tres problemas principales:

 

·         Después de un número de correcciones el código puede tener una muy mala estructura, hace que los arreglos sean muy costosos.

 

·         Software no se ajusta a las necesidades del usuario, por lo que es rechazado o su reconstrucción es muy cara.

 

·         El código es difícil de reparar por su pobre preparación para probar y modificar.

 

Ø  Modelo en cascada:

 

     El modelo en cascada consta de las siguientes fases:

 

·       ·    Definición de los requisitos: Los servicios, restricciones y objetivos son establecidos con los usuarios del sistema. Se busca hacer esta definición en detalle.

 

·      ·   Diseño de software: Se particiona el sistema en sistemas de software o hardware. Se establece la arquitectura total del sistema. Se identifican y describen las abstracciones y relaciones de los componentes del sistema.

 

·      · Implementación y pruebas unitarias: Construcción de los módulos y unidades de software. Se realizan pruebas de cada unidad. Departamento de Sistemas Informáticos y Computación.

 

·    ·  Integración y pruebas del sistema: Se integran todas las unidades. Se prueban en conjunto. Se entrega el conjunto probado al cliente.

 

·       ·    Operación y mantenimiento: Generalmente es la fase más larga. El sistema es puesto en marcha y se realiza la corrección de errores descubiertos. Se realizan mejoras de implementación. Se identifican nuevos requisitos.


     Algunos problemas que se observan en el modelo de cascada son:

 

·     ·   Las iteraciones son costosas e implican rehacer trabajo debido a la producción y aprobación de documentos.

 

·     ·   Aunque son pocas iteraciones, es normal congelar parte del desarrollo y continuar con las siguientes fases.

 

·   ·  Los problemas se dejan para su posterior resolución, lo que lleva a que estos sean ignorados o corregidos de una forma poco elegante.

 

·    ·       Existe una alta probabilidad de que el software no cumpla con los requisitos del usuario por el largo tiempo de entrega del producto.

 

·     ·      Es inflexible a la hora de evolucionar para incorporar nuevos requisitos. Es difícil responder a cambios en los requisitos.

 

·    ·    Este modelo sólo debe usarse si se entienden a plenitud los requisitos. Aún se utiliza como parte de proyectos grandes.

 

Ø  Desarrollo evolutivo

 

     Es el desarrollo de una implantación del sistema inicial, exponerla a los comentarios del usuario, refinarla en N versiones hasta que se desarrolle el sistema adecuado.

 

     Una ventaja de este modelo es que se obtiene una rápida realimentación del usuario, ya que las actividades de especificación, desarrollo y pruebas se ejecutan en cada iteración.

 

     Existen dos tipos de desarrollo evolutivo:

 

·         Desarrollo Exploratorio: El objetivo de este enfoque es explorar con el usuario los requisitos hasta llegar a un sistema final. El desarrollo comienza con las partes que se tiene más claras. El sistema evoluciona conforme se añaden nuevas características propuestas por el usuario.

 

·         Enfoque utilizando prototipos: El objetivo es entender los requisitos del usuario y trabajar para mejorar la calidad de los requisitos. A diferencia del desarrollo exploratorio, se comienza por definir los requisitos que no están claros para el usuario y se utiliza un prototipo para experimentar con ellos.

 

     El prototipo ayuda a terminar de definir estos requisitos.

 

     Entre los puntos favorables de este modelo están:

 

·     ·  La especificación puede desarrollarse de forma creciente.

 

·    ·     Los usuarios y desarrolladores logran un mejor entendimiento del sistema. Esto se refleja en una mejora de la calidad del software.

 

·      ·     Es más efectivo que el modelo de cascada, ya que cumple con las necesidades inmediatas del cliente.


     Desde una perspectiva de ingeniería y administración se identifican los siguientes problemas:

 

·   ·    Proceso no Visible: Los administradores necesitan entregas para medir el progreso. Si el sistema se necesita desarrollar rápido, no es efectivo producir documentos que reflejen cada versión del sistema.

 

·   · Sistemas pobremente estructurados: Los cambios continuos pueden ser perjudiciales para la estructura del software haciendo costoso el mantenimiento.

 

·   ·  Se requieren técnicas y herramientas: Para el rápido desarrollo se necesitan herramientas que pueden ser incompatibles con otras o que poca gente sabe utilizar.

 

Ø  Desarrollo formal de sistemas

 

     Este modelo se basa en transformaciones formales de los requisitos hasta llegar a un programa ejecutable.

 

Ø  Desarrollo formal de sistemas

 

     Este modelo se basa en transformaciones formales de los requisitos hasta llegar a un programa ejecutable.

 

     Observaciones sobre el desarrollo formal de sistemas:

·         Permite demostrar la corrección del sistema durante el proceso de transformación. Así, las pruebas que verifican la correspondencia con la especificación no son necesarias.

 

·         Es atractivo sobre todo para sistemas donde hay requisitos de seguridad y confiabilidad importantes.

 

·         Requiere desarrolladores especializados y experimentados en este proceso para llevarse a cabo.

 

Ø  Desarrollo basado en reutilización

 

     Como su nombre lo indica, es un modelo fuertemente orientado a la reutilización.

 

     Este modelo consta de 4 fases ilustradas en la A continuación se describe cada fase:

 

1)    Análisis de componentes: Se determina qué componentes pueden ser utilizados para el sistema en cuestión. Casi siempre hay que hacer ajustes para adecuarlos.

 

2)    Modificación de requisitos: Se adaptan (en lo posible) los requisitos para concordar con los componentes de la etapa anterior. Si no se puede realizar modificaciones en los requisitos, hay que seguir buscando componentes más adecuados (fase 1).

 

3)    Diseño del sistema con reutilización: Se diseña o reutiliza el marco de trabajo para el sistema. Se debe tener en cuenta los componentes localizados en la fase 2 para diseñar o determinar este marco.

 

4)    Desarrollo e integración: El software que no puede comprarse, se desarrolla. Se integran los componentes y subsistemas. La integración es parte del desarrollo en lugar de una actividad separada.

 

 

     Este modelo consta de 4 fases ilustradas en la Figura 9. A continuación se describe cada fase:

 

1)   ·  Análisis de componentes: Se determina qué componentes pueden ser utilizados para el sistema en cuestión. Casi siempre hay que hacer ajustes para adecuarlos.

 

2)   ·  Modificación de requisitos: Se adaptan (en lo posible) los requisitos para concordar con los componentes de la etapa anterior. Si no se puede realizar modificaciones en los requisitos, hay que seguir buscando componentes más adecuados (fase 1).

 

3)  ·  Diseño del sistema con reutilización: Se diseña o reutiliza el marco de trabajo para el sistema. Se debe tener en cuenta los componentes localizados en la fase 2 para diseñar o determinar este marco.

 

4)  ·    Desarrollo e integración: El software que no puede comprarse, se desarrolla. Se integran los componentes y subsistemas. La integración es parte del desarrollo en lugar de una actividad separada.

 

Desventajas de este modelo

 

·         Los “compromisos” en los requisitos son inevitables, por lo cual puede que el software no cumpla las expectativas del cliente.

 

·         Las actualizaciones de los componentes adquiridos no están en manos de los desarrolladores del sistema.

 

Procesos iterativos

     A continuación, se expondrán dos enfoques híbridos, especialmente diseñados para el soporte de las iteraciones:

 

·        ·  Desarrollo Incremental.

 

·        ·  Desarrollo en Espiral.

 


Ø  Desarrollo incremental

 

     Es una combinación del Modelo de Cascada y Modelo Evolutivo.

 

     Reduce el rehacer trabajo durante el proceso de desarrollo y da oportunidad para retrasar las decisiones hasta tener experiencia en el sistema.

 

     Durante el desarrollo de cada incremento se puede utilizar el modelo de cascada o evolutivo, dependiendo del conocimiento que se tenga sobre los requisitos a implementar. Si se tiene un buen conocimiento, se puede optar por cascada, si es dudoso, evolutivo.

 

     Entre las ventajas del modelo incremental se encuentran:

 

·         Los clientes no esperan hasta el fin del desarrollo para utilizar el sistema. Pueden empezar a usarlo desde el primer incremento.

 

·         Los clientes pueden aclarar los requisitos que no tengan claros conforme ven las entregas del sistema.

 

·         Se disminuye el riesgo de fracaso de todo el proyecto, ya que se puede distribuir en cada incremento.

 

·         Las partes más importantes del sistema son entregadas primero, por lo cual se realizan más pruebas en estos módulos y se disminuye el riesgo de fallos.

 

 

     Algunas de las desventajas identificadas para este modelo son:

 

·        ·  Cada incremento debe ser pequeño para limitar el riesgo (menos de 20.000 líneas).

 

·        ·  Cada incremento debe aumentar la funcionalidad.

 

·        ·  Es difícil establecer las correspondencias de los requisitos contra los incrementos.

 

·        ·  Es difícil detectar las unidades o servicios genéricos para todo el sistema.

 

Ø  Desarrollo en espiral

 

     Es actualmente uno de los más conocidos y fue propuesto por Boehm el ciclo de desarrollo se representa como una espiral, en lugar de una serie de actividades sucesivas con retrospectiva de una actividad a otra.

 

     Cada ciclo de desarrollo se divide en cuatro fases:

 

1)    Definición de objetivos: Se definen los objetivos. Se definen las restricciones del proceso y del producto. Se realiza un diseño detallado del plan administrativo. Se identifican los riesgos y se elaboran estrategias alternativas dependiendo de estos.

 

2)    Evaluación y reducción de riesgos: Se realiza un análisis detallado de cada riesgo identificado. Pueden desarrollarse prototipos para disminuir el riesgo de requisitos dudosos. Se llevan a cabo los pasos para reducir los riesgos.

 

3)    Desarrollo y validación: Se escoge el modelo de desarrollo después de la evaluación del riesgo. El modelo que se utilizará (cascada, sistemas formales, evolutivo, etc.) depende del riesgo identificado para esa fase.

 

4)    Planificación: Se determina si continuar con otro ciclo. Se planea la siguiente fase del proyecto.

 

     Este modelo a diferencia de los otros, toma en consideración explícitamente el riesgo, esta es una actividad importante en la administración del proyecto.

     El ciclo de vida inicia con la definición de los objetivos. De acuerdo a las restricciones se determinan distintas alternativas. Se identifican los riesgos al sopesar los objetivos contra las alternativas. Se evalúan los riesgos con actividades como análisis detallado, simulación, prototipos, etc. Se desarrolla un poco el sistema.

 


Métodos

 

     Los métodos abarcan una gran gama de tareas que incluyen análisis de requisitos, diseño, construcción de programas, pruebas y mantenimiento. Estos métodos dependen de un conjunto de principios básicos que gobiernan cada área de la tecnología e incluyen actividades de modelado y otras técnicas descriptivas.

 

Metodología

 

     Un proceso de software detallado y completo suele denominarse “Metodología”. Las metodologías se basan en una combinación de los modelos de proceso genéricos (cascada, evolutivo, incremental, etc.).

     Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades involucrados, junto con prácticas y técnicas recomendadas, guías de adaptación de la metodología al proyecto, guías para uso de herramientas de apoyo, etc. Habitualmente se utiliza el término “método” para referirse a técnicas, notaciones y guías asociadas, que son aplicables a una (o algunas) actividades del proceso de desarrollo, por ejemplo, suele hablarse de métodos de análisis y/o diseño.

     En actividades de análisis y diseño, podemos clasificar las metodologías en dos grupos:

 

Ø  Metodologías estructuradas

 

     Los métodos estructurados comenzaron a desarrollarse a fines de los 70 con la Programación Estructurada, luego a mediados de los 70’s aparecieron técnicas para el Diseño (por ejemplo: el diagrama de Estructura) primero y posteriormente para el Análisis (por ejemplo: Diagramas de Flujo de Datos). Estas metodologías son particularmente apropiadas en proyectos que utilizan para la implementación lenguajes de 3ra y 4ta generación.

 

Ø  Metodologías orientadas a objetos

 

     Su historia va unida a la evolución de los lenguajes de programación orientada a objeto, los más representativos: a fines de los 60’s SIMULA, a fines de los 70’s Smalltalk-80, la primera versión de C++ por Bjarne Stroustrup en 1981 y actualmente Java11 o C# de Microsoft. A fines de los 80’s comenzaron a consolidarse algunos métodos Orientadas a Objeto.

 

     En 1995 Booch y Rumbaugh proponen el Método Unificado con la ambiciosa idea de conseguir una unificación de sus métodos y notaciones, que posteriormente se reorienta a un objetivo más modesto, para dar lugar al Unified Modeling Language (UML)12, la notación OO más popular en la actualidad.

 

Ø  Metodologías tradicionales (no ágiles)

 

     Las metodologías no ágiles son aquellas que están guiadas por una fuerte planificación durante todo el proceso de desarrollo; llamadas también metodologías tradicionales o clásicas, donde se realiza una intensa etapa de análisis y diseño antes de la construcción del sistema.


     Todas las propuestas metodológicas antes indicadas pueden considerarse como metodologías tradicionales. Aunque en el caso particular de RUP, por el especial énfasis que presenta en cuanto a su adaptación a las condiciones del proyecto (mediante su configuración previa a aplicarse), realizando una configuración adecuada, podría considerarse Ágil.

 

Ø  Metodologías ágiles

 

     Un proceso es ágil cuando el desarrollo de software es incremental (entregas pequeñas de software, con ciclos rápidos), cooperativo (cliente y desarrolladores trabajan juntos constantemente con una cercana comunicación), sencillo (el método en sí mismo es fácil de aprender y modificar, bien documentado), y adaptable (permite realizar cambios de último momento).

 

 

Actividades

 

Ø    ·       Planificación

 

     La importante tarea a la hora de crear un producto de software es obtener los requisitos o el análisis de los requisitos. Los clientes suelen tener una idea más bien abstracta del resultado final, pero no sobre las funciones que debería cumplir el software.

 

     Una vez que se hayan recopilado los requisitos del cliente, se debe realizar un análisis del ámbito del desarrollo. Este documento se conoce como especificación funcional.

 

Ø  ·       Implementación, Pruebas y Documentación

 

     La implementación es parte del proceso en el que los ingenieros de software programan el código para el proyecto.

 

     Las pruebas de software son parte esencial del proceso de desarrollo del software. Esta parte del proceso tiene la función de detectar los errores de software lo antes posible.

 

     La documentación del diseño interno del software con el objetivo de facilitar su mejora y su mantenimiento se realiza a lo largo del proyecto. Esto puede incluir la documentación de un API, tanto interior como exterior.

 

Ø  ·       Despliegue y mantenimiento

 

     El despliegue comienza cuando el código ha sido suficientemente probado, ha sido aprobado para su liberación y ha sido distribuido en el entorno de producción.

 

     Entrenamiento y soporte para el software es de suma importancia y algo que muchos desarrolladores de software descuidan. Los usuarios, por naturaleza, se oponen al cambio porque conlleva una cierta inseguridad, es por ello que es fundamental instruir de forma adecuada a los futuros usuarios del software. El mantenimiento y mejora del software de un software con problemas recientemente desplegado puede requerir más tiempo que el desarrollo inicial del software. Es posible que haya que incorporar código que no se ajusta al diseño original con el objetivo de solucionar un problema o ampliar la funcionalidad para un cliente. Si los costes de mantenimiento son muy elevados puede que sea oportuno rediseñar el sistema para poder contener los costes de mantenimiento.

 


Técnicas y herramientas

 

     Son un conjunto de programas y ayudas que dan asistencia a los analistas, ingenieros de software y desarrolladores, durante todos los pasos del Ciclo de Vida de desarrollo de un Software.

 

 ·       Las Herramientas CASE son un conjunto de métodos, utilidades y técnicas que facilitan la automatización del ciclo de vida del desarrollo de sistemas de información, completamente o en alguna de sus fases.

 

·     ·        La sigla genérica para una serie de programas y una filosofía de desarrollo de software que ayuda a automatizar el ciclo de vida de desarrollo de los sistemas.

 

·      ·       Una innovación en la organización, un concepto avanzado en la evolución de tecnología con un potencial efecto profundo en la organización. Se puede ver al CASE como la unión de las herramientas automáticas de software y las metodologías de desarrollo de software formales.

 

·       ·      El empleo de herramientas Case permiten integrar el proceso de ciclo de vida:

 

·       ·      Análisis de datos y procesos integrados mediante un repositorio.

 

·        ·    Generación de interfaces entre el análisis y el diseño.

 

·        ·    Generación del código a partir del diseño.

 

·         ·    Control de mantenimiento.

 

Ø  Tipos de Herramientas CASE

 

     No existe una única clasificación de herramientas CASE, es difícil incluirlas en una clase determinada. Podrían clasificarse atendiendo a:

 

·         Las plataformas que soportan.

 

·         Las fases del ciclo de vida del desarrollo de sistemas que abarca.

 

·         La arquitectura de las aplicaciones que produce.

 

·         Su funcionalidad.

 

     Las herramientas CASE, en función de las fases del ciclo de vida abarcadas, se pueden agrupar de la forma siguiente:

 

     Herramientas integradas, I-CASE (Integrated CASE, CASE integrado): abarcan todas las fases del ciclo de vida del desarrollo de sistemas. Son llamadas también CASE workbench.

 

     Las herramientas I-CASE se basan en una metodología. Tienen un repositorio y aportan técnicas estructuradas para todas las fases del ciclo de vida. Estas son las características que les confieren su mayor ventaja: una mejora de la calidad de los desarrollos. Sin embargo, no todas ellas son modernas en el sentido de aprovechar la potencia de las estaciones de trabajo o la utilización de lenguajes de alto nivel o técnicas de prototipo.

 

     Herramientas de alto nivel, U-CASE (Upper CASE - CASE superior) o front-end, orientadas a la automatización y soporte de las actividades desarrolladas durante las primeras fases del desarrollo: análisis y diseño.

 

     Una estrategia posible es utilizar una U-CASE para análisis y diseño, combinada con otras herramientas más modernas para las fases de construcción y pruebas. En este caso, habría que vigilar cuidadosamente la integración entre las distintas herramientas.




Selección del modelo apropiado según las características de los proyectos de software

     Cuando se gestiona un proyecto exitoso, es necesario entender que este puede llegar a fracasar. Según John Reel, existen 10 razones por las cuales un proyecto puede fracasar:

 

·        ·  El personal de software no entiende las necesidades de los clientes.

 

·        ·  El ámbito del producto está mal definido.

 

·        ·  Los cambios se gestionan mal.

 

·        ·  La tecnología elegida cambia.

 

·        ·  Las necesidades comerciales cambian.

 

·        ·  Los plazos de entrega no son realistas.

 

·       ·    Los usuarios se resisten a la utilización del software.

 

·        ·  Se pierde el patrocinio.

 

·        ·  El equipo del proyecto carece de personal con las habilidades apropiadas.

 

·         Los gestores evitan las mejores prácticas y las lecciones aprendidas.

 

     Para tener éxito en la consecución de un proyecto es necesario comenzar con pie derecho, esto se lo logra trabajando duro para entender el problema y dar una solución adecuada. Se debe rastrear el proyecto conforme se elabora el producto y se aprueba por parte del grupo de control de calidad.

     Es importante que el gestor del proyecto tome decisiones inteligentes para no poner en riesgo el desarrollo de la solución. Por último, se debe analizar los resultados obtenidos para obtener la experiencia necesaria en la construcción de otros proyectos.

 




 

Recomendaciones

 

 

ü       Los cambios radicales en hardware a partir de la última mitad del siglo anterior causaron una forzada evolución del software, lo cual ha generado el establecimiento de modelos, estándares y redefinición de conceptos que ratifican un establecimiento cada vez más fuerte de la ingeniería del software a nivel mundial.

 

ü       La gestión de proyectos de desarrollo de software es motor esencial para el éxito de cualquier proyecto de este tipo. La gestión debe fraccionarse en las etapas definidas claramente, manteniendo en cuenta los 4 requisitos indispensables: las personas, el producto, el proceso y el proyecto.

 

ü       La programación orientada a objetos es una extensión actual de la tecnología que, si bien ha evolucionado desde mediados del siglo pasado, presenta hoy día un enfoque y distinto al tradicional.

 

ü       El diseño de la arquitectura es parte fundamental de los principios de la ingeniería del software y es único en el sentido de que se organiza en función de los objetos y clases que se definirán. De hecho, probablemente la parte más difícil del desarrollo de software orientado a objetos es la identificación de clases necesarias y la forma como interactúan entre sí.

 

ü       Teniendo en cuenta los principios de ingeniería del software resumidos en este ensayo, profundizando en cada uno de ellos y llevando un trabajo juicioso y concienzudo, garantizará el éxito en cualquier proyecto de construcción de software y en proyectos de otro tipo.

 

 

Conclusión

 

 

     La Ingeniería del Software es la rama de la ingeniería que crea y mantiene las aplicaciones de software usando tecnologías y prácticas de las ciencias de la computación, manejo de proyectos, ingeniería, el ámbito de la aplicación, y otros campos. El Software es la suma total de los programas de ordenador, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo.

 

     Un paradigma de la programación es una propuesta tecnológica adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. Los métodos de desarrollo de software son una serie de operaciones usadas para lograr un objetivo y requiere un conjunto de tareas que tienen que ser realizadas para producir un producto de software de alta calidad.

 

     Hay que diferenciar modelo de metodología: el modelo de desarrollo de software es una representación simplificada del proceso para el desarrollo de software, presentada desde una perspectiva específica; y la metodología de desarrollo de software es un enfoque estructurado para el desarrollo de software que incluye modelos de sistemas, notaciones, reglas, sugerencias de diseño y guías de procesos. Un sistema se puede modelar mediante, ya sea, una construcción física o analógica, una representación gráfica o un mapa, un enunciado teórico o un planteamiento matemático; comúnmente se utiliza un lenguaje de modelado conocido como UML.

 

     El objetivo principal que busca la ingeniería de software es convertir el desarrollo de software en un proceso formal, con resultados predecibles. El individuo que desempeña profesionalmente en esta área se le conoce como ingeniero de software, y se desempeña en áreas como: Consultor en TIC’s, Administrador de Redes de Computadoras, Administrador de Bases de Datos, entre otros. El software en su desarrollo pasa por varias etapas que se pueden agrupar en estos cuatro grandes grupos: Concepción, desarrollo, prueba y explotación. Hoy en día vivimos en una sociedad digital, donde el software ha cobrado vital importancia en la vida de todas las personas, y la ingeniería del software permite mejorar la calidad de estos.

 


Referencias Bibliográficas

 

 

·           ·  https://es.m.wikipedia.org/wiki/Software


        ·  https://softwareblog03.wordpress.com/2017/04/23/cualidades-del-software/


·           ·  https://softwareblog03.wordpress.com/2017/04/24/factores-de-calidad-del-software/

 

·           ·  https://es.m.wikipedia.org/wiki/Ingenier%C3%ADa_de_software

 

··  · https://softwarelibre-informatica.blogspot.com/2013/04/principios-modelos-metodos-metodologias.html


   ·  ·  https://micarrerauniversitaria.com/c-ingenieria/ingenieria-de-software/