Instituto Tecnológico Superior de Huatusco
Docente: MSC. Olivia Labastida Puertos Tema 1: Fundamentos de Ingeniería de Software E-mail: olabastidap@huatusco.tecnm.mx
Competencia Específica:
Identifica y comprende el entorno de aplicación de la ingeniería de software.
1.1 Conceptos Básicos
¿Qué es el software? Programas de cómputo y su documentación asociada: requerimientos, modelos de diseño y manuales de usuario. El software puede ser desarrollado para un cliente en particular o para un mercado general.
1.1 Conceptos Básicos
El software puede ser: Genérico: desarrollado para venderse múltiples clientes (Excel, Word, etc.).
a
A la medida: desarrollado bajo demanda del cliente a un desarrollador especifico. El software nuevo puede ser creado desarrollando nuevos programas, configurando sistemas de software genérico o reutilizando software existente.
1.1 Conceptos Básicos
¿Qué es la Ingeniería de Software? Una disciplina de la concierne a todos los producción de software.
Ingeniería que aspectos de la
1.1 Conceptos Básicos
Los ingenieros de Software deben: Adoptar un enfoque sistemático para llevar a cabo su trabajo.
Utilizar las herramientas y técnicas apropiadas para resolver el problema planteado, de acuerdo a las restricciones de desarrollo y a los recursos disponible.
1.1 Conceptos Básicos
¿Cuál es la diferencia entre Ingeniería de Software y Ciencias Computacionales? Las ciencias computacionales conciernen a la teoría y fundamentos de cualquier sistema de cómputo (hardware o software).
La ingeniería de software concierne a los aspectos prácticos del desarrollo y puesta en marcha de productos útiles de software.
1.1 Conceptos Básicos
¿Cuál es la diferencia entre Ingeniería de Software y Ciencias Computacionales? La Ingeniería de Software aún está lejos de ser considerada una ciencia como los son la química o la física. La ingeniería de sistemas concierne a todos los aspectos del desarrollo de sistemas basados en cómputo
incluyendo
ingeniería de procesos.
hardware,
software
y
la
1.1 Conceptos Básicos
¿Cuál es la diferencia entre Ingeniería de Software e Ingeniería de Sistemas? La ingeniería de software es una parte de este proceso que comprender el desarrollo de software, control, aplicaciones y bases de datos del sistema.
1.1 Conceptos Básicos
Los ingenieros de software son los encargados de la especificación del sistema, del diseño de la arquitectura, la integración y la puesta en marcha.
1.1 Conceptos Básicos ¿Qué es un proceso de software? Un conjunto estructurado de actividades cuya meta es el desarrollo o evolución de un software. Algunas actividades genéricas procesos de software son:
en
todos
los
• Especificación, qué debe hacer el software y cuáles son sus especificaciones de desarrollo.
1.1 Conceptos Básicos • Desarrollo, producción del sistema de software. • Validación, verificar que el software cumple con lo solicitado por el cliente. • Evolución, cambiar/adaptar el software a las nuevas demandas.
Estas actividades varían dependiendo de la organización y del tipo de sistema a desarrollarse.
1.1 Conceptos Básicos ¿Qué es un modelo de proceso de software? Representación formal y simplificada de un proceso de software, representada desde una perspectiva especifica. Ejemplos de perspectivas del proceso de software:
Flujo de trabajo, secuencia de actividades. Flujo de datos, flujo de la información. Rol/acción, quién realiza qué.
1.1 Conceptos Básicos
Modelos Genéricos: Cascada, separar en distintas faces de especificación y desarrollo.
Desarrollo Iterativo, la especificación, desarrollo y validación están interrelacionados.
1.1 Conceptos Básicos
Modelos Genéricos: Prototipado, un modelo sirve de prototipo para la construcción del sistema final.
Basado en componentes, asume que partes del sistema ya existen y se enfoca a su integración.
1.1 Conceptos Básicos
¿Cuáles son los costos de la Ingeniería de Software? El costo total de un software esta dividido aproximadamente de la siguiente forma: 60% costos de desarrollo.
40% costos de prueba. En el software a la medida los costos de evolución a menudo exceden los costos de desarrollo.
1.1 Conceptos Básicos
Los costos dependen del tipo de sistema que se desarrolla y de los requerimientos del mismo tales como el desempeño y confiabilidad. La distribución de los costos depende del modelo de desarrollo empleado.
1.1 Conceptos Básicos
¿Qué son los métodos de Ingeniería de Software? Enfoques estructurados para el desarrollo de software que incluye: • Descripciones del modelo, descripciones de modelos gráficos que deben ser producidos. • Reglas, restricciones modelos de sistemas.
aplicadas
a
los
1.1 Conceptos Básicos
• Recomendaciones, para realizar un diseño efectivo. • Administración del proceso, que actividades deben realizarse y en qué orden.
1.1 Conceptos Básicos
¿Qué es CASE? CASE es Engineering
Computer-Aided-Software
Programas que son usados para dar soporte automatizado a las actividades del proceso de software. Análisis de requerimientos, modelado del sistema, pruebas y depuración (debugging).
1.1 Conceptos Básicos
Las herramientas CASE son comúnmente usadas para dar soporte a los métodos de software. Editores para la notación del método. Módulos de análisis que verifican que las reglas del método se cumplan.
1.1 Conceptos Básicos
Generadores de reportes que facilitan la creación de la documentación de sistema. Generadores de código a partir del modelo del sistema.
1.1 Conceptos Básicos ¿Cuáles son los atributos del software de calidad? El software debe proveer la funcionalidad y desempeño requeridos por el usuario y debe ser mantenible, confiable y aceptable. •
Mantenible, el software debe poder evolucionar para
continuar cumpliendo con las especificaciones. •
Confiable, el software no debe causar daños físicos o económicos en el caso de que falle.
1.1 Conceptos Básicos •
Eficiente, el software no debe desperdiciar los recursos del sistema.
•
Aceptable, el software debe ser aceptado por los usuarios para los que fue diseñado. Debe ser entendible, utilizable y compatible con
otros sistemas.
1.1 Conceptos Básicos
¿Cuáles son los retos de la Ingeniería de Software? Heterogeneidad Desarrollar técnicas para software que pueda hacer plataformas y ambientes de heterogéneos (diferentes tipos Sw).
construir frente a ejecución de Hw y
1.1 Conceptos Básicos
¿Cuáles son los retos de la Ingeniería de Software? Tiempos de entrega Desarrollar técnicas que permitan reducir los tiempos de entrega del software sin comprometer la calidad.
1.1 Conceptos Básicos
¿Cuáles son los retos de la Ingeniería de Software? Confianza Desarrollar técnicas que permitan que los usuarios confíen plenamente en el software.
1.2 Fases de la Ingeniería de Software La ingeniería del software comparte el interés común con otras disciplinas de ingeniería. Al igual que otros dominios de ingeniería donde un problema determinado (por ejemplo, construir un puente) se puede resolver siguiendo una serie de pasos interrelacionados, el proceso de desarrollo de software también comprende una serie de pasos o fases.
Mantenimiento
Documentación
Pruebas
Programación
Diseño y Arquitectura
Análisis de Requisitos
1.2 Fases de la Ingeniería de Software
1.2 Fases de la Ingeniería de Software
Análisis de Requisitos Extraer los requisitos de un producto de software es la primera etapa para crearlo.
Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios.
1.2 Fases de la Ingeniería de Software
Diseño y Arquitectura Se refiere a determinar como funcionará de forma general sin entrar en detalles.
Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los Casos de Uso para cubrir las funciones que realizará el sistema.
1.2 Fases de la Ingeniería de Software
Programación Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la porción más larga.
La complejidad y la duración de esta etapa está íntimamente ligada al o a los lenguajes de programación utilizados.
1.2 Fases de la Ingeniería de Software
Pruebas Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación.
Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral, para así llegar al objetivo.
1.2 Fases de la Ingeniería de Software
Documentación Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.
1.2 Fases de la Ingeniería de Software
Mantenimiento Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos.
Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento.
1.3 Metodologías de Desarrollo de Software Lograr la construcción de un sistema informático eficiente, que cumpla con los requerimientos planteados, es una tarea realmente intensa y sobre todo difícil de cumplir. Las metodologías para el desarrollo del software imponen un proceso disciplinado sobre el desarrollo de software con el fin de hacerlo más predecible y eficiente.
1.3 Metodologías de Desarrollo de Software Una metodología de desarrollo de software tiene como principal objetivo aumentar la calidad del software que se produce en todas y cada una de sus fases de desarrollo. No existe una metodología de software universal, ya que toda metodología debe ser adaptada a las características de cada proyecto (equipo de desarrollo, recursos, etc.) exigiéndose así que el proceso sea configurable.
1.3 Metodologías de Desarrollo de Software 1.3.1 Clásicas
Cascada
Incremental
Evolutivo
1.3 Metodologías de Desarrollo de Software 1.3.1 Clásicas
Espiral
Prototipos
Desarrollo Basado en Componentes
1.3 Metodologías de Desarrollo de Software 1.3.2 Ágiles Se caracterizan por hacer énfasis en la comunicación cara a cara, es decir, se basan en una fuerte y constante interacción, donde clientes desarrolladores y desarrolladores trabajan constantemente juntos, estableciéndose así una estrecha comunicación. Estas metodologías están orientadas al resultado del producto y no a la documentación; exige que el proceso sea adaptable, permitiendo realizar cambios de último momento.
1.3 Metodologías de Desarrollo de Software 1.3.2 Ágiles
Extreme Programming (XP)
Es una metodología ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando un buen clima de trabajo.
1.3 Metodologías de Desarrollo de Software 1.3.2 Ágiles
Scrum
Desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle. Define un marco para la gestión de proyectos, que se ha utilizado con éxito durante los últimos 10 años. Está especialmente indicada para proyectos con un rápido cambio de requisitos.
1.3 Metodologías de Desarrollo de Software 1.3.2 Ágiles
Crystal Methodologies
Se trata de un conjunto de metodologías para el desarrollo de software caracterizadas por estar centradas en las personas que componen el equipo (de ellas depende el éxito del proyecto) y la reducción al máximo del número de artefactos producidos.
El Proceso Unificado de Desarrollo Software o simplemente Proceso Unificado es un marco de desarrollo de software que se caracteriza por estar dirigido por casos de uso, centrado en la arquitectura y por ser iterativo e incremental.
Ingeniería Web
Para la metodología del desarrollo del proyecto GA3 se utilizó principalmente el modelo reciente Ganar-ganar ya que con este existen ganancias para todas las partes implicadas .
Proceso Unificado (UP)
Ganar-ganar
1.3 Metodologías de Desarrollo de Software 1.3.3 Otras Filosofías La ingeniería web es la aplicación de metodologías sistemáticas, disciplinadas y cuantifica bles al desarrollo eficiente, operación y evolución de aplicaciones de alta calidad en la World Wide Web.
1.4 Importancia de las Herramientas CASE en la Ingeniería de Software Las herramientas CASE (Computer Aided Software Engineering, Ingeniería de Software Asistida por Computadora) son diversas aplicaciones informáticas o programas informáticos destinadas a aumentar la productividad en el desarrollo de software reduciendo el costo de las mismas en términos de tiempo y de dinero.
1.4 Importancia de las Herramientas CASE en la Ingeniería de Software Estas herramientas pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de realizar un diseño del proyecto, cálculo de costos, implementación de parte del código automáticamente con el diseño dado, compilación automática, documentación o detección de errores, entre otras.