Ingeniería de Software I
Agenda Objetivo. Unidades de aprendizaje. Formas de evaluación. Bibliografía. 2
Datos del profesor Correo electrónico: egonzalez@upemor.edu.mx Asesorías Jueves de 11:00 a 13:00 Viernes 9:00 a 11:00 3
Objetivo de la materia El alumno será capaz de realizar proyectos de software implementado metodologías; herramientas de calidad para garantizar el desarrollo de aplicaciones que cumplan con los requerimientos del cliente. 4
Unidades de aprendizaje Unidad I. Desarrollo rápido de software. Unidad II. Documentación del software. Unidad III. Técnicas de verificación y validación. Unidad IV. Evolución del software.
Unidad I. Desarrollo rápido de aplicaciones. Introducción. Desarrollo de software profesional. Modelos de proceso de software. El proceso unificado racional. Métodos ágiles. Programación extrema. Administración de un proyecto ágil. Escalamiento de métodos ágiles.
Recomendaciones
Incógnitas Iniciales Qué es software? Cuáles son los atributos del buen software? Qué es la ingeniería de software? Cuáles son las actividades fundamentales de la ingeniería de software? Cuál es la diferencia entre la ingeniería de software y ciencias de la computación? Cuál es la diferencia entre la ingeniería de software e ingeniería de sistemas? Cuáles son los costos de la ingeniería de software? Cuáles son los mejores métodos y técnicas de la ingeniería de software? Qué diferencias ha marcado la Web a la ingeniería de software?
Ingeniería de Software I Unidad 1. Introducción a la ingeniería de software Mayo Agosto 2012
Contenido. Introducción. 1.Definición de software 2.Características del software según Pressman 3.Tipos de productos de software 4.Tipos de software 5.Mitos del software 6.Definición de Ingeniería de software 7.Fases genéricas del desarrollo de software 8.Características esenciales de un buen software 9.Modelos de proceso de software 10.Glosario 11.Bibliografía
1.Definición de software Conjunto de programas de computadora, documentos asociados y configuración de datos que se necesitan para hacer que los programas operen de manera correcta. En resumen,
Software y hardware El software es un elemento del sistema que es lógico, mientras que el hardware es físico. A continuación se muestran algunas características del software comparándolo con el hardware.
2. Características del software según Pressman El software se desarrolla, no se fábrica en un sentido clásico.
3. Tipos de productos de software 1.Productos genéricos Sistemas aislados producidos por una organización de desarrollo y que se venden al mercado abierto a cualquier cliente que le sea posible comprarlos. 2.
Diferencia entre los 2 tipos de productos de software En los productos genéricos, la organización que desarrolla el software controla su especificación. La especificación de los productos personalizados, por lo general es desarrollada y controlada por la organización que está comprando el software.
4. Tipos de software A.Software de sistemas B.. C.Software de gestión D.. E.Software empotrado F.. G.. H.Software de inteligencia artificial Anota en tu cuaderno la definición de cada una de ellas
4.A Software de sistemas Es un conjunto de programas que han sido escritos para servir a otros programas. Procesan estructuras de información complejas pero determinadas. Característica. Ejemplos.
4.B Software de tiempo real Software que coordina/analiza/controla sucesos del mundo real conforme ocurren, se denomina de tiempo real. Elementos.
4.C Software de gestión Acceden a una o más bases de datos que contienen información comercial. Reestructuran los datos existentes para facilitar las operaciones comerciales o gestionar la toma de decisiones. También realizan cálculo interactivo. Ejemplo El
4.D Software de ingeniería y científico Está caracterizado por los algoritmos de manejo de números. Ejemplos
4.E Software empotrado
4.F Software de computadoras personales El procesamiento de datos, las hojas de cálculo, los gráficos por computadora, multimedia, entretenimientos, gestión de bases de datos, aplicaciones financieras, de negocios y personales y redes o acceso a bases de datos externas.
4.G. Software basado en Web Software que incorpora instrucciones ejecutables (ejemplo: CGI, HTML, Perl o Java) y datos (ejemplo: hipertexto y una variedad de formatos de audio y visuales).
4. H Software de inteligencia artificial Hace uso de algoritmos no numéricos para resolver problemas complejos para los que no son adecuados el cálculo o el análisis directo. Ejemplos
5. Mitos y realidades del software según Pressman Mitos de Gestión Mitos del Cliente Mitos de los Desarrolladores
Mitos de gestión MITO REALIDAD Mi gente dispone de las herramientas de desarrollo de software más avanzadas, después de todo les compramos las computadoras más modernas. El desarrollo de software no es un proceso mecánico como la fabricación. Según Brooks: añadir gente a un proyecto de software retrasado lo retrasa aún más. Sin embargo, cuando se añaden nuevas personas, la necesidad de aprender y comunicarse con el equipo puede y hace que se reduzca la cantidad de tiempo gastado en el desarrollo productivo. Puede añadirse gente, pero sólo de manera planificada y bien coordinada.
Mitos del cliente MITO REALIDAD Una mala definición inicial es la principal causa del desarrollo de software que no cumple con los requerimientos del usuario. Es esencial una descripción formal y detallada del ámbito de la información, funciones, comportamiento, rendimiento, interfaces, ligaduras de diseño y criterios de validación. Estas características pueden determinarse sólo después de una exhaustiva comunicación entre el cliente y el analista. Los requisitos del proyecto cambian continuamente, pero los cambios pueden acomodarse fácilmente, ya que el software es flexible.
Mitos de los desarrolladores MITO REALIDAD Una vez que escribimos el programa y hacemos que funcione, nuestro trabajo ha terminado. Lo único que se entrega al terminar el proyecto es el programa funcionando. Desde el principio del proyecto se puede aplicar uno de los mecanismos más efectivos para garantizar la calidad del software: la revisión técnica formal.
6. Definición de Ingeniería de software Es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas a los problemas de desarrollo de software.
7. Fases genéricas del desarrollo de software Fase de definición Qué Fase de desarrollo Cómo Fase de mantenimiento Cambios
Fase de definición
Fase de desarrollo
Fase de mantenimiento
8. Características esenciales de un buen software Mantenibilidad El software debe escribirse de tal forma que pueda evolucionar para cumplir las necesidades de cambio de los clientes. Confiabilidad Usabilidad No debe hacer que se malgasten los recursos del sistema, como la memoria y los ciclos de procesamiento. Incluye tiempo de respuesta y de procesamiento, utilización de memoria, etc.
9. Modelos de proceso de software
Simples 1.Modelo en cascada (ciclo de vida del software) 1.Modelo de construcción de prototipos (modelo evolutivo) 3. Desarrollo formal del sistema (modelo de métodos formales) Clasificación de los modelos de proceso de software Híbridos 4. Desarrollo basado en componentes (desarrollo basado en la reutilización) 5. Desarrollo incremental 6. Desarrollo en espiral 7. Modelo de desarrollo concurrente 8. DRA, Desarrollo Rápido de Aplicaciones 9. Programación extrema 10. RUP: Proceso Racional Unificado (Rational Unified Process) 11. T4G: Técnicas de cuarta generación
Modelos para el desarrollo de software Modelo Descripción a. Modelo de cascada o de ciclo de vida de software Ordena rigurosamente las etapas, de tal forma que el inicio de cada etapa debe esperar a la finalización de la inmediatamente anterior. b. Modelo de construcción de prototipos (desarrollo evolutivo) c. Desarrollo formal de sistemas (modelo formal de sistemas) Se basa en la transformación matemática formal de una especificación del sistema a un programa ejecutable. Se basa en la existencia de un número significante de componentes reutilizables. Se enfoca en integrar estos componentes en el sistema más que en desarrollarlos.
Modelo Modelos para el desarrollo de software Descripción e. Desarrollo incremental f. Desarrollo en espiral Se puede representar en forma de esquema como una serie de actividades técnicas importantes, tareas y estados asociados a ellas. Todas las actividades existen concurrentemente, pero residen en estados diferentes. Es una adaptación a alta velocidad del modelo en cascada en el que se logra el desarrollo rápido utilizando una construcción basada en componentes.
Modelo Modelos para el desarrollo de software Descripción i. Programación extrema j. RUP: Proceso Unificado Racional (Rational Unified Process) k. T4G, Técnicas de 4 Generación Es una evolución del enfoque incremental. consiste en una programación rápida o extrema, cuya particularidad es tener como parte del equipo, al usuario final. Abarca un amplio espectro de herramientas de software que tienen algo en común: todas facilitan al ingeniero de software la especificación de algunas características del software a alto nível.
a. Modelo en cascada Principios del modelo en cascada
a.2 Desventajas del modelo en cascada Los cambios pueden causar confusión. Cualquier error detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costes de desarrollo..
b. Modelo de construcción de prototipos También llamado modelo de desarrollo evolutivo o desarrollo con prototipación. Se utiliza cuando el cliente define un conjunto de objetivos generales para el software, pero no identifica los requisitos detallados de entrada, proceso o salida.
b.1 Pasos para el modelo de prototipos Recolección de requisitos. Surge un diseño rápido Construcción de un prototipo
b.2 Modelo de prototipos
b.3 Desventajas del modelo de prototipos El cliente a veces no comprende que después de determinar los requisitos utilizando el prototipo se debe implementar el producto final.
c. Modelo de métodos formales Comprende un conjunto de actividades que conducen a la especificación matemática del software de la computadora. Características...
c.1 Inconvenientes del modelo de métodos formales Es bastante caro y lleva mucho tiempo. Requiere un estudio detallado porque pocos responsables del desarrollo del software tienen los antecedentes para aplicar métodos formales. Es difícil utilizar los modelos como mecanismos de comunicación con los clientes que no tienen conocimientos técnicos.
Se basa en: d. Desarrollo basado en componentes
d.1 Etapas del desarrollo basado en componentes
d.2 Características del desarrollo basado en componentes
e. Modelo incremental Combina el modelo en cascada y el modelo de prototipos.
e.2 Características del modelo incremental 1er. Incremento 2do. Incremento Características.
e.3 Ventajas del modelo incremental
e.4 Desventajas del modelo incremental Los incrementos deben ser relativamente pequeños (no más de 20,000 líneas de código) y cada uno debe entregar alguna funcionalidad del sistema. Por lo que puede ser difícil adaptar los requerimientos del cliente a incrementos de tamaño apropiado.
f. Modelo en espiral
f.1 Tareas del modelo en espiral Para cada actividad habrá cuatro tareas: Determinar o fijar objetivos. Análisis del riesgo Desarrollar, verificar y validar (probar) Planificar
f.2 Modelo en espiral
f.3 Características del modelo en espiral
f.4 Desventajas del modelo en espiral
g. Modelo de desarrollo concurrente
g.1 Modelo de desarrollo concurrente La concurrencia se logra de dos formas: Las actividades de sistemas y componentes ocurren simultáneamente y pueden modelarse con el enfoque orientado a objetos. Una aplicación cliente/servidor típica se implementa con muchos componentes, cada uno de los cuales se pueden diseñar y realizar concurrentemente.
g.2 Modelo de desarrollo concurrente Todas las actividades existen concurrentemente, pero residen en estados diferentes. Ejemplo Al principio del proyecto, la actividad de comunicación con el cliente ha finalizado su primera iteración y está en el estado de cambio de espera.
g.3 Ejemplo de un elemento del proceso concurrente
h. Desarrollo rápido de aplicaciones, DRA (RAD, Rapid Application Development) Adaptación del modelo de cascada en el que se logra un desarrollo rápido utilizando una construcción basada en componentes. La aplicación se divide en módulos de forma que permita completarse cada una de las funciones principales en menos de 3 meses. Cada una de las funciones pueden ser afrontadas por un equipo separado e integrarse en un solo conjunto al final.
h.2 Etapas de cada módulo en DRA Modelado de gestión Modela el flujo de información Qué información conduce el proceso de gestión? Qué información se genera? Quién la genera? A dónde va la información? Quién la procesa? Modelado de datos Se definen las características de cada uno de los objetos y las relaciones entre estos objetos. Modelado de proceso Descripción de los procesos para transformar los datos. Ejemplos de procesos: crear, añadir, modificar, suprimir, o recuperar objetos dañados. Generación de aplicaciones DRA trabaja para volver a utilizar componentes de programas ya existentes o a crear componentes reutilizables. Pruebas y entrega Se deben probar todos los componentes nuevos y y seden ejercitar todas las interfaces a fondo.
h.3 Desventajas de DRA Para proyectos grandes, requiere recursos humanos suficientes para crear el número correcto de equipos. Requiere clientes y desarrolladores comprometidos en las rápidas actividades necesarias para completar el sistema en un marco de tiempo abreviado. Si un sistema no se puede modularizar adecuadamente, la construcción de los componentes para DRA será problemático. No es adecuado cuando los riesgos técnicos son altos. Esto ocurre cuando una nueva aplicación hace uso de tecnologías nuevas, o cuando el software requiere de alto grado de interoperatividad con programas de computadora ya existentes.
i. Programación extrema, XP Se desarrolló como una evolución del desarrollo incremental. Se basa en: El desarrollo y la entrega de incrementos de funcionalidad muy pequeños En la participación del cliente en el proceso En el mejoramiento constante del código y E n la programación libre de ego. Utilizada para proyectos de corto plazo, corto equipo y cuyo plazo de entrega era ayer. Consiste en una programación rápida o extrema, cuya particularidad es tener como parte del equipo, al usuario final, pues es uno de los requisitos para llegar al éxito del proyecto.
i.1 Etapas de Programación extrema
i.2 Características de XP
i.3 Programación en equipos Se forman grupos pequeños de programación, que por lo general se organizan de una forma más informal.
i.4 Organización de los equipos
i.5 Equipo del trabajador en jefe (diagrama)
i.6 Pasos de XP Empieza en pequeño y añade funcionalidad con retroalimentación continua. El manejo del cambio se convierte en parte sustantiva del proceso. El costo del cambio no depende de la fase o etapa. No introduce funcionalidades antes que sean necesarias. El cliente o el usuario se convierte en miembro del equipo.
i.7 Ventajas y desventajas de XP Ventajas El análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos. Desventajas Genera mucho trabajo adicional. Cuando un sistema falla se pierde tiempo y coste dentro de la empresa. Exige una cierta habilidad en los analistas (es bastante difícil).
j. RUP Proceso de desarrollo de software para la ingeniería de software orientada a objetos también llamado Metodología formal.
k. T4G: Técnicas de cuarta generación Se orienta hacia la posibilidad de especificar el software usando formas de lenguaje especializado o notaciones gráficas que describan el problema que hay que resolver en términos que los entienda el cliente.
10. Glosario Software Término Ingeniería de software Diferencia entre ingeniería de software y ciencia de la computación Proceso del software Modelo de procesos del software Definición Programas de computadora y la documentación asociada. Los productos de software se pueden desarrollar para algún cliente en particular o para un mercado en general. Disciplina de ingeniería que comprende todos los aspectos de la producción de software. La ciencia de la computación comprende la teoría y los fundamentos; y la ingeniería de software comprende las formas prácticas para desarrollar y liberar un software útil. Conjunto de actividades cuya meta es el desarrollo o evolución de software. Es una representación simplificada de un proceso del software, presentada desde una perspectiva específica. Suministran el cómo construir técnicamente el software.
10. Glosario Término Métodos de la ingeniería de software Metodologías de desarrollo de software Técnicas Definición Enfoques estructurados para el desarrollo de software que incluyen modelos de sistemas, notaciones, reglas, sugerencias de diseño y guías de proceso. Los métodos abarcan un amplio espectro de tareas que incluyen: planificación y estimación de proyectos, análisis de los requerimientos del sistema y del software, diseño de procedimientos algorítmicos, codificación, prueba y mantenimiento. Son los distintos procesos que se pueden seguir para llegar a un desarrollo óptimo, varían dependiendo de los requerimientos y especificaciones de cada proyecto. Conjunto de procedimientos, técnicas y ayudas a la documentación para el desarrollo de productos de software. Indican cómo debe realizarse una actividad determinada identificada en la metodología. Combina el empleo de modelos o representaciones gráficos junto con el empleo de procedimientos detallados. Una técnica determinada puede ser utilizada en una o más actividades de la metodología de desarrollo de software.
10. Glosario Término Modelos Evolutivos Proceso iterativo Definición Evolucionan con el tiempo. Los modelos evolutivos son iterativos. Se caracterizan por la forma en que permiten a los ingenieros del software desarrollar versiones cada vez más completas del software. En el modelo evolutivo se asume que los requisitos pueden cambiar en cualquier momento del ciclo de vida y no solo en la etapa de análisis. Proceso en el cual en cada determinado punto se hace una mejora o implementación al código ya existente. Un proceso iterativo permite una comprensión creciente de los requerimientos a la vez que se va haciendo crecer el sistema. Al modelo iterativo no se le agrega funcionalidad sino que en cada iteración se mejora su funcionalidad. Un proceso de desarrollo de software iterativo es aquél al que se lo piensa, como una serie de tareas agrupadas en pequeñas etapas repetitivas. Estas pequeñas etapas repetitivas son las iteraciones.
10. Glosario Término Prototipos Definición Es una representación limitada del diseño de un producto que permite a las partes responsables de su creación experimentar, probarlo en situaciones reales y explorar su uso. Un prototipo puede ser cualquier cosa, desde un trozo de papel con sencillos dibujos a un complejo software.
Modelo iterativo
Modelo iterativo. Desventajas DESVENTAJAS Hasta el momento se podría decir que no existen grandes desventajas, pero sí hay puntos a manejar con sumo cuidado. El uso de un desarrollo iterativo e incremental no garantiza por sí solo el éxito de su uso. Hay costos ocultos en su implementación, ya que se incorporan varias actividades a realizar por el equipo, y hay que saber medir ese impacto para no fracasar en el intento.
11. Referencias bibliográficas 1.Roger S. Pressman, 2002. INGENIERÍA DE SOFTWARE. Un enfoque práctico. Ed. McGraw-Hill. Quinta edición. Madrid, España. 2.Ian Sommerville, 2002. INGENIERÍA DE SOFTWARE. 6a Edición. Ed. Addison Wesley. 3.Manual de la asignatura.