Notas
Ingeniería de Software
Conteúdo das notas (3)
Página 1
Ingeniería de Software
La Ingeniería de software comprende todos los aspectos de la producción de software, desde las etapas iniciales de la especificación del sistema hasta su entrega y mantenimiento.
Los ingenieros son los encargados de hacer que los software funcionen, aplicando teorías, métodos y herramientas de forma selectiva, tratando de descubrir soluciones a los problemas existentes o futuros, aún cuando no existan teorías o métodos aplicables a la resolución de dichos problemas.
El trabajo del ingeniero debe ser sistémico y organizado si quiere obtener un software de alta calidad, pero a su vez necesita ser flexible a los cambios y tener un enfoque más informal y creativo para los casos que lo requieran
¿Qué es software?
Software es un conjunto de programas que se ejecutan en un ordenador y su documentación asociada, de este modo los “productos de software” pueden desarrollarse para un cliente en particular o para un mercado particular o general.
Existen tres tipos básicos de software:
System software
Utilitarios
Software de Aplicación
Características del Software
Su Naturaleza y Cualidades:
El software es fácilmente modificable, lo que implica que el código responde a una lógica y normalmente es de quien lo construye
No es tangible, como otros productos.
Cualidades Representativas:
Correctitud, confiabilidad y robustez
Performance: afecta la usabilidad de un sistema
Confiabilidad:El software no debería malgastar el uso de los recursos del sistema
Amigabilidad: los seres humanos deben encontrarlo fácil de usar
Verificabilidad: si sus propiedades pueden ser verificadas fácilmente
Mantenibilidad: Modificaciones que se le hacen al software después de su lanzamiento inicial para asegurar su evolución.
Reusabilidad: Software o componentes suyos que permitan evolucionar a otra versión con mínimas modificaciones
Portabilidad: posibilidad de correr en distintos ambientes y plataformas.
Comprensible: Fácil de entender por otros
Interoperabilidad: si es capaz de convivir con otros softwares
Productividad: la eficiencia puesta en el proceso
Entrega en fecha: entregar el producto en el tiempo previsto
Visibilidad: si todos los pasos y su actual estado están documentados claramente
Página 2
Ciclo de vida del Software
Proceso de Desarrollo de Software
Conjunto estructurado de actividades para desarrollar un sistema de software. Estas actividades varían dependiendo de la organización y el tipo de sistema que debe desarrollarse.

Actividades fundamentales:
Especificación del software: Se trata de definir las funcionalidades que deberá tener el software y las restricciones en su operación.
Diseño e Implementación: Primero se diseña la solución y luego se produce el software que cumpla con la especificación.
Validación del Software: Se valida con el cliente la funcionalidad del software asegurando realiza lo que el cliente desea y necesita.
Evolución del software: Debe evolucionar para cubrir las necesidades de cambio que plantea el cliente.
Todo proceso de construcción de software lleva un tiempo desde que es requerido por el cliente hasta que se finaliza y se entrega el producto final, luego viene el mantenimiento del mismo. Este tiempo es el "Ciclo de vida"
Modelos
Un modelo de procesos es una descripción simplificada de un proceso del software que presenta una visión de ese proceso. También puede interpretarse como: La serie de pasos a través de los cuales el producto progresa, teniendo en cuenta las personas involucradas en la ingeniería del software.
En todos los casos los modelos especifican:
Las fases del proceso
El orden en el cual se llevan a cabo
Ciclos de vida secuenciales
Modelo en Cascada
Fue el primer ciclo de vida de software. Es el más básico de todos, plantea una visión simple basada en el concepto que el desarrollo de software puede ser a través de una secuencia simple de fases.

El modelo de ciclo de vida cascada, captura algunos principios básicos:
Planear un proyecto antes de embarcarse en él
Definir el comportamiento externo deseado del sistema antes de diseñar su arquitectura interna.
Documentar los resultados de cada actividad.
Diseñar un sistema antes de codificarlo
Testear un sistema después de construirlo.
Se realizan relevamientos de los siguientes aspectos:
Técnicos: equipamiento, capacidad técnica de recursos
Funcionales: extracción completa de los Requerimientos, el 100%.
Del Negocio: los sectores involucrados
Ventajas
Provee información a través del ciclo de vida y la documentación de cada fase.
Favorece el seguimiento del proceso ordenándolo, con actividades bien comprendidas pero complejas.
Desventajas
Lleva mucho tiempo finalizarlo por ser tan secuencial
No se puede comenzar hasta tener el total de los requerimientos antes de comenzar con el diseño.
Es rígido, ya que no permite volver hacia etapas anteriores para corregir errores.
No es aconsejable para desarrollos cortos porque posee una excesiva cantidad de documentación
Desarrollo Evolutivo
El desarrollo evolutivo consiste en desarrollar una implementación inicial, entregada a los usuarios para sus comentarios y refinándola a través de la retroalimentación y las versiones hasta lograr el sistema adecuado.
Los requerimientos son cuidadosamente examinados y sólo aquellos que son bien comprendidos son seleccionados para el primer incremento.
Las actividades de especificación, de desarrollo y validación se entrelazan en vez de separarse, con una rápida retroalimentación entre éstas.
Existen 2 tipos de desarrollo evolutivo:
Desarrollo exploratorio: se trabaja con el cliente para explorar sus requerimientos y entregar un sistema final. El sistema crece con lo que el cliente va proponiendo.
Prototipos desechables: se centra en los requerimentos que no están muy claros, por lo que el objetivo es comprender los requerimientos del cliente para poder desarrollar una definición mejorada del sistema.
El modelo evolutivo tiene los siguientes problemas:
Carencia de Visibilidad del Proceso
Los sistemas frecuentemente son pobremente estructurados
Puede requerirse habilidades Especiales (Ej. En lenguajes de prototipación rápida)
Es factible su aplicación:
Para Sistemas interactivos de tamaño pequeño o mediano
Para partes de sistemas grandes (Ej. Interfaces de usuario).
Para sistemas de ciclo de vida corto.

Ingeniería de Software basada en Componentes
Este enfoque requiere de componentes de software reutilizables y de un marco de trabajo de integración de estos. Es posible que estos componentes sean sistemas por sí mismos, subsistemas o módulos que tienen una funcionalidad específica.

Análisis de Componentes: se buscan los componentes necesarios que cumplan con toda la funcionalidad o parte de ella.
Modificación de Requerimientos: si los componentes encontrados para los requerimientos no son modificables, se pueden buscar soluciones alternativas, modificando en parte el requerimiento, sin que deje de cumplir con la necesidad del cliente.
Diseño de sistemas con reutilización: son los diseñadores los que tienen en cuenta los componentes que se reutilizan para organizar el marco de trabajo.
Desarrollo e integración: se debe tener en cuenta los componentes que existen, los que se adquieren externamente y los que se desarrollan internamente para integrarlos en un todo.
Ventajas:
Se reduce la cantidad de software a desarrollar
Se reducen costos.
Se reducen riesgos.
Permite una entrega más rápida.
Riesgos
Si depende totalmente de los componentes a utilizar puede ser que el producto no cumpla con las necesidades del cliente.
Las nuevas versiones de los componentes pierden la especificidad de la organización, por lo que requiere de la necesidad de relevar las reglas de negocio de cada cliente.
Modelo Incremental
Una manera de reducir los riesgos del desarrollo de un sistema es construir sólo una parte, organizando por versiones lo que se incrementa.
En este modelo se requieren el 100% de los requerimientos al comienzo del ciclo de vida, se toman subconjuntos de requerimientos y se desarrollan versiones siempre incrementando el producto de software.
La diferencia con el desarrollo evolutivo se centra en que, mientras la aproximación incremental presupone que el conjunto completo de requerimientos es conocido al comenzar, el modelo evolutivo asume que los requerimientos no son completamente conocidos al inicio del proyecto.

Modelo de Prototipado de Requerimientos
El prototipado de requerimientos tiene el propósito explícito de aprender sobre los requerimientos del sistema, para ello se crea una implementación parcial del sistema.
Esta consiste en la entrega de prototipos de interfaz de usuario, que son dados a los usuarios, clientes o representantes, quienes serán los que provean la retroalimentación sobre lo que les gustó o no del prototipo proporcionado.

Modelo de entrega por etapas
Ventajas
Permite correcciones en el transcurso del proyecto
Permite colocar en producción las funcionalidades de mayor peso
Obtiene un producto en forma rápida
Desventajas:
Se debe trabajar con una planificación cuidadosa
Se debe tener mucho cuidado porque para implementar una fase se puede requerir de la finalización de otra.

Modelo Iterativo
Este modelo tiene como objetivo obtener un protocolo de desarrollo común para cualquier tipo de aplicación de software, en el modelo iterativo los prototipos son entregables y tienen versión.

Modelo de Espiral
Cada proyecto es organizado y explotado en miniproyectos. Es un modelo incremental con versiones, en cada una se respetan las etapas, se documenta y va incluyendo a los productos anteriores.
Es utilizado en:
Sistemas de gran envergadura
Proyectos con un numeroso grupo de integrantes
Problemas de Performance
Existencia de requerimientos pobres, poco entendibles
Arquitectura pobremente detallada
Una vez entendido el problema, continua como un proyecto en cascada
Ventajas
Altos costos significan pocos riesgos
Para desarrollos rápidos
Provee más controles que los sistemas tradicionales
Se pueden "mostrar‟ avances del proyecto
Netamente confiable
Desventajas:
La administración de los riesgos
Requiere una administración rigurosa
Difícil de ser construidos con tiempos predeterminados

Modelo Iterativo e Incremental
Se toman las características de ambos modelos, del iterativo y del incremental para lograr un modelo con mejores aplicaciones.
Ventajas:
Se divide en fases, workflows centrales e iteraciones.
Resolución de problemas de alto riesgo en menores tiempos del proyecto.
Visión de avance en el desarrollo desde las primeras etapas del desarrollo.
Obtención del feedback del usuario
Menor porcentaje de fallo del proyecto
La complejidad del proyecto se maneja por partes.
Mejora exponencialmente el trabajo,
Aumenta la productividad y permite optimizar el proceso a corto plazo.
El trabajo iterativo permite ir ajustando y mejorando las planificaciones
Adoptar este modelo no presenta grandes inversiones
Desventajas
Su uso no garantiza por si solo el éxito del proyecto ni de su uso.
Existen costos ocultos en su implementación
El modelo iterativo e incremental es utilizado por metodologías modernas y es adoptado por UML (Lenguaje de modelado unificado)

Las fases son cuatro: Inicio, Elaboración, Construcción y Transición.
Los flujos de trabajo representan las actividades y son 7: Requerimientos, Análisis y Diseño, Implementación, Prueba, Administración de configuración, Administración del proyecto y Entorno.
Las tres últimas etapas se toman como acompañamiento de todo el proceso de desarrollo.
Página 3
Resumen
La Ingeniería en Software es una Ingeniería que abarca todos los aspectos de la producción de software.
Los productos de Software consisten en el desarrollo de programas y toda documentación asociada a ellos. Los atributos esenciales son la mantenibilidad, confiabilidad, eficiencia y usabilidad.
El proceso de software consiste en actividades que involucran el desarrollo de productos de software.
Las actividades básicas son especificación, desarrollo, validación y evolución.
Los métodos son formas organizadas de producir software. Incluyen sugerencias para el cumplimento del método, la notación a ser usada, las reglas de validación de modelos y guías de diseño.
Las herramientas CASE son sistemas de software los cuales son diseñados para auxiliar en actividades de rutina en el proceso de desarrollo de software. Tales como: edición de diagramas, verificar consistencia de diagramas, y mantener un registro de los testeos efectuados
Los ingenieros en Software tienen responsabilidades para con su profesión y para con la sociedad.
En cuanto a los sistemas y las Ingenierías se pueden destacar los siguientes puntos clave
Los sistemas socio-técnicos incluyen hardware, software, personas y procesos
Las propiedades emergentes de un sistema son las características que actúan como un todo no por partes o componentes del sistema
Incluyen propiedades como el rendimiento, fiabilidad, usabilidad, seguridad y protección
Factores humanos y organizacionales influyen en el funcionamiento de los sistemas socio-técnicos.
Dentro de una organización pueden existir más de un tipo de sistemas, los heredados, los propios y los adquiridos
Los sistemas heredados son sistemas socio-técnicos.
Proceso de Software
Un conjunto coherente de actividades para especificar, diseñar, implementar y testear un sistema de software.
Modelos de Ciclo de Vida
Cascada es demasiado inflexible
Orientado a documentos
Modelos evolutivos y prototipos
Dependen de las decisiones tomadas antes del entendimiento del problema
Una buena solución es integrar protipado rápido y cascada
Puntos Clave a tener en cuenta
Los procesos de software incluyen las actividades relacionadas con la producción de un sistema de software.
Todos los procesos del software incluyen las etapas de especificación, diseño, implementación, validación y evolución del software.
Los modelos genéricos del proceso describen la organización de los procesos del software, como son el modelo en cascada, los evolutivos y la Ingeniería basada en componentes.
Los modelos de iteración presentan el proceso de software como un ciclo de actividades.
El modelo en espiral, es uno de los más utilizados.
El modelo iterativo e incremental incluye las mejores prácticas del modelo iterativo y del modelo incremental.
Informações
- Descrição
- EFIP II EFIP II (Ingeniería de Software) Notas sobre Ingeniería de Software, criado por Giselle Craig em 24-02-2019.
- Criado por
- Giselle Craig · fev 2019
- Atualizado
- 3 mar 2019
- Visualizações
- 0
- Avaliação