Que Es La Ingenieria de Software!

12
INGENIERIA DE SOFTWARE La ingeniería de software es una disciplina formada por un conjunto de métodos, herramientas y técnicas que se utilizan en el desarrollo de los programas informáticos (software). Esta disciplina trasciende la actividad de programación, que es el pilar fundamental a la hora de crear una aplicación. El ingeniero de software se encarga de toda la gestión del proyecto para que éste se pueda desarrollar en un plazo determinado y con el presupuesto previsto. La ingeniería de software, por lo tanto, incluye el análisis previo de la situación, el diseño del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto funcionamiento y la implementación del sistema. Importancia La ingeniería de software es muy importante ya que con ella se puede analizar, diseñar, programar y aplicar un software de manera correcta y organizada, cumpliendo con todas las especificaciones del cliente y el usuario final. PROCESO El proceso es un diálogo en el que se reúne el conocimiento y se incluye en el software. El proceso proporciona una interacción entre los usuarios y los diseñadores, entre los usuarios y las herramientas de desarrollo, y entre los diseñadores y las herramientas de desarrollo [tecnología]. Es un proceso interactivo donde la herramienta de desarrollo se usa como medio de comunicación, con cada iteración del diálogo se obtiene mayor conocimiento de las personas involucradas. Cuando se trabaja para construir un producto o un sistema, es importante seguir una serie de pasos predecibles, un mapa de carreteras que le ayude a obtener el resultado oportuno de calidad. El mapa de carreteras a seguir es llamado proceso del software. Lo construyen los ingenieros del software y sus gestores adaptan el proceso a sus necesidades y entonces lo siguen. Además las personas que han solicitado el software tienen un papel a desempeñar en el proceso del software. Es importante porque proporciona estabilidad, control y organización a una actividad que puede, si no se controla, volverse caótica.

description

He aqui el significado de ingenieria del software, con ejemplos.

Transcript of Que Es La Ingenieria de Software!

Page 1: Que Es La Ingenieria de Software!

INGENIERIA DE SOFTWARE

La ingeniería de software es una disciplina formada por un conjunto de métodos,

herramientas y técnicas que se utilizan en el desarrollo de los programas

informáticos (software).

Esta disciplina trasciende la actividad de programación, que es el pilar fundamental a la

hora de crear una aplicación. El ingeniero de software se encarga de toda la gestión del

proyecto para que éste se pueda desarrollar en un plazo determinado y con el

presupuesto previsto.

La ingeniería de software, por lo tanto, incluye el análisis previo de la situación, el diseño

del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto

funcionamiento y la implementación del sistema.

Importancia

La ingeniería de software es muy importante ya que con ella se puede analizar, diseñar,

programar y aplicar un software de manera correcta y organizada, cumpliendo con todas

las especificaciones del cliente y el usuario final.

PROCESO

El proceso es un diálogo en el que se reúne el conocimiento y se incluye en el software.

El proceso proporciona una interacción entre los usuarios y los diseñadores, entre los

usuarios y las herramientas de desarrollo, y entre los diseñadores y las herramientas de

desarrollo [tecnología]. Es un proceso interactivo donde la herramienta de desarrollo se

usa como medio de comunicación, con cada iteración del diálogo se obtiene mayor

conocimiento de las personas involucradas.

Cuando se trabaja para construir un producto o un sistema, es importante seguir una serie

de pasos predecibles, un mapa de carreteras que le ayude a obtener el resultado

oportuno de calidad. El mapa de carreteras a seguir es llamado proceso del software.

Lo construyen los ingenieros del software y sus gestores adaptan el proceso a sus

necesidades y entonces lo siguen. Además las personas que han solicitado el software

tienen un papel a desempeñar en el proceso del software. Es importante porque

proporciona estabilidad, control y organización a una actividad que puede, si no se

controla, volverse caótica.

Page 2: Que Es La Ingenieria de Software!

Los pasos son a un nivel detallado, el proceso que adoptemos depende del software que

estamos construyendo. Un proceso puede ser apropiado para crear software de

un sistema de aviación, mientras que un proceso diferente por completo puede ser

adecuado para la creación de un sitio web.

Características del proceso

El software se desarrolla o construye; no se manufactura en el sentido clásico.

A pesar de que existen similitudes entre el desarrollo del software y la manufactura del

hardware, las dos actividades serian diferentes en lo fundamental. En ambas la alta

calidad se alcanza por medio del buen diseño, la fase de manufactura del hardware puede

incluir problemas de calidad existentes en el software.

El software no se desgasta.

El software es inmune a los males ambientales que desgasten el hardware. Por lo tanto la

curva de tasas de fallas para el software debería tener la forma de la “curva idealizada”.

Los defectos sin descubrir causan tasas de fallas altas en las primeras etapas de vida de

un programa. Sin embargo, los errores se corrigen y la curva se aplana: el software no se

desgasta, pero si se deteriora.

A pesar de que la industria tiene una tendencia hacia la construcción por

componentes, la mayoría del software aun se construye a la medida.

Un componente de software se debe diseñar e implementar de forma que puede utilizarse

en muchos programas diferentes.

Los componentes reutilizables modernos encapsulan tanto los datos como el proceso se

aplican a estos, lo que permite al ingeniero de software crear nuevas aplicaciones nuevas

a partir de partes reutilizables.

PRODUCTO

La expresión ingeniería de producto se refiere al proceso de diseño y desarrollo de un

equipo, sistema o aparato de forma tal que se obtiene un elemento apto para su

comercialización mediante algún proceso de fabricación. Por lo general la ingeniería de

producto comprende actividades relacionadas con optimizar el costo de producción, su

facilidad de fabricación, su calidad, funcionalidad, confiabilidad y otras características

importantes para el usuario. Por lo general se busca obtener un producto con estas

características de manera que el producto resulte más atractivo y competitivo en

el segmento del mercado que tiene por objetivo. De esta forma se aumentan las

posibilidades de éxito del negocio que posee el fabricante de dicho producto.

Page 3: Que Es La Ingenieria de Software!

Características

Comprensión: Este requiere claridad y declaración de la naturaleza explicita de la

definición del proceso.

Visibilidad: Se refiere a la capacidad de observar la salida de arias actividades del

proceso, de manera que se mida el proceso del progreso.

Confiabilidad: Se refiere a la capacidad del proceso para evadir errores o detectar

errores y manejarlos antes de que estos avancen en el producto.

Robustez: Se refiere a la capacidad del proceso de no detenerse a pesar de

problemas inesperados.

Facilidad de mantenimiento: Se refiere a la cantidad de modificaciones que pueden

hacerse al sistema de software sin introducir errores.

Facilidad de verificación: Un proceso es verificable si sus propiedades pueden ser

fácilmente verificadas.

Rapidez: Se refiere a la agilidad y rapidez del proceso para ser capaz de entregar un

producto final a partir de las especificaciones.

Facilidad de soporte: Se refiere a la posibilidad de que las actividades del proceso

sean soportadas por un conjunto de herramientas automatizadas.

Facilidad de aceptación: Se refiere a la capacidad del proceso a ser aceptado y

usado por el equipo de ingenieros.

Facilidad de adaptación: Se refiere a la capacidad del proceso a ser modificado para

satisfacer las necesidades de cambio en el ambiente de desarrollo.

Después de haber discutido las características del proceso de desarrollo de software, se

presenta a continuación las diferentes fases del proceso de desarrollo de software.

Fase de definición: Esta fase se concentra principalmente en que tiene que ser

completado por el proceso de software.

Fase de desarrollo: Esta fase enfoca en el cómo los requerimientos de un sistema y

el software serán completados.

Fase de mantenimiento: Esta fase se enfoca en cambio, el mantenimiento incluye la

corrección de errores y la adaptación, conforme evoluciona el entorno del software.

Page 4: Que Es La Ingenieria de Software!

MODELO DE PROCESOS DEL DESARROLLO DE SOFTWARE

Modelo en Cascada: También llamado Lineal secuencial, es el enfoque metodológico

que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal

forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior.

Análisis de requisitos: En esta fase se analizan las necesidades de los usuarios finales

del software para determinar qué objetivos debe cubrir. De esta fase surge una memoria

llamada SRD (documento de especificación de requisitos), que contiene la especificación

completa de lo que debe hacer el sistema sin entrar en detalles internos. Es importante

señalar que en esta etapa se debe consensuar todo lo que se requiere del sistema y será

aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir nuevos resultados

a mitad del proceso de elaboración del software.

Diseño del Sistema: Se descompone y organiza el sistema en elementos que puedan

elaborarse por separado, aprovechando las ventajas del desarrollo en equipo. Como

resultado surge el SDD (Documento de Diseño del Software), que contiene la descripción

de la estructura relacional global del sistema y la especificación de lo que debe hacer

cada una de sus partes, así como la manera en que se combinan unas con otras. Es

conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El

primero de ellos tiene como objetivo definir la estructura de la solución (una vez que la

fase de análisis ha descrito el problema) identificando grandes módulos (conjuntos de

funciones que van a estar asociadas) y sus relaciones. Con ello se define la arquitectura

de la solución elegida. El segundo define los algoritmos empleados y la organización del

código para comenzar la implementación.

Diseño del Programa: Es la fase en donde se realizan los algoritmos necesarios para el

cumplimiento de los requerimientos del usuario así como también los análisis necesarios

para saber que herramientas usar en la etapa de Codificación.

Codificación: Es la fase en donde se implementa el código fuente, haciendo uso de

prototipos así como de pruebas y ensayos para corregir errores. Dependiendo del

lenguaje de programación y su versión se crean las bibliotecas y componentes

reutilizables dentro del mismo proyecto para hacer que la programación sea un proceso

mucho más rápido.

Pruebas: Los elementos, ya programados, se ensamblan para componer el sistema y se

comprueba que funciona correctamente y que cumple con los requisitos, antes de ser

entregado al usuario final.

Verificación: Es la fase en donde el usuario final ejecuta el sistema, para ello el o los

programadores ya realizaron exhaustivas pruebas para comprobar que el sistema no falle.

Page 5: Que Es La Ingenieria de Software!

Mantenimiento: Una de las etapas más críticas, ya que se destina un 75% de los

recursos, es el mantenimiento del Software ya que al utilizarlo como usuario final puede

ser que no cumpla con todas nuestras expectativas.

Ventajas:

Modelo y planificación fácil y sencillos.

Sus fases son conocidas por los desarrolladores.

Los usuarios lo pueden comprender fácilmente.

Desventajas:

En la vida real, un proyecto rara vez sigue una secuencia lineal, esto crea una mala

implementación del modelo, lo cual hace que lo lleve al fracaso.

El proceso de creación del software tarda mucho tiempo ya que debe pasar por el

proceso de prueba y hasta que el software no esté completo no se opera. Esto es la

base para que funcione bien.

Cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al

rediseño y nueva programación del código afectado, aumentando los costos del

desarrollo.

Modelo de prototipos: Pertenece a los modelos de desarrollo evolutivo. El prototipo

debe ser construido en poco tiempo, usando los programas adecuados y no se debe

utilizar muchos recursos.

El diseño rápido se centra en una representación de aquellos aspectos del software que

serán visibles para el cliente o el usuario final. Este diseño conduce a la construcción de

un prototipo, el cual es evaluado por el cliente para una retroalimentación; gracias a ésta

se refinan los requisitos del software que se desarrollará. La interacción ocurre cuando el

prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo

tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a

corto plazo.

Etapas:

Recolección y refinamiento de requisitos

Modelado, diseño rápido

Construcción del Prototipo

Desarrollo, evaluación del prototipo por el cliente

Refinamiento del prototipo

Producto de Ingeniería

Page 6: Que Es La Ingenieria de Software!

Cómo se lleva a cabo:

Se comienza elaborando un prototipo del producto final: qué aspecto tendrá, cómo

funcionará. Para muchas interfaces de usuario, este modelo puede resultar tan simple

como unos dibujos con lápiz y papel o tan complejo como el propio código operativo final.

Para interfaces de hardware o estaciones de trabajo, el modelo puede consistir en

maquetas de espuma, caucho, cartón o cartulina. Cuanto más próximo se encuentre el

prototipo al producto real, mejor será la evaluación, si bien se pueden obtener magníficos

resultados con prototipos de baja fidelidad.

Ventajas:

No modifica el flujo del ciclo de vida

Reduce el riesgo de construir productos que no satisfagan las necesidades de los

usuarios

Reduce costo y aumenta la probabilidad de éxito

Exige disponer de las herramientas adecuadas

Este modelo es útil cuando el cliente conoce los objetivos generales para el software,

pero no identifica los requisitos detallados de entrada, procesamiento o salida.

También ofrece un mejor enfoque cuando el responsable del desarrollo del software

está inseguro de la eficacia de un algoritmo, de la adaptabilidad de un sistema

operativo o de la forma que debería tomar la interacción humano-máquina.

Desventajas:

Debido a que el usuario ve que el prototipo funciona piensa que este es el producto

terminado y no entienden que recién se va a desarrollar el software.

El desarrollador puede caer en la tentación de ampliar el prototipo para construir

el sistema final sin tener en cuenta los compromisos de calidad y mantenimiento que

tiene con el cliente

Modelo de espiral: Propuesto originalmente por Boehm, es un modelo de proceso de

software evolutivo que conjuga la naturaleza iterativa de construcción de prototipos con

los aspectos controlados y sistemáticos del modelo lineal secuencial. Proporciona el

potencial para el desarrollo rápido de versiones incrementales del software.

Funcionamiento del Modelo:

En el modelo espiral, el software se desarrolla en una serie de versiones incrementales.

Durante las primeras iteraciones, la versión incremental podría ser un modelo en papel o

un prototipo. Durante las últimas iteraciones, se producen versiones cada vez más

completas del sistema diseñado.

Page 7: Que Es La Ingenieria de Software!

Ventajas:

Puede adaptarse y aplicarse a lo largo de la vida del software de computadora.

Es un enfoque realista del desarrollo de sistemas y de software a gran escala.

Como el software evoluciona, a medida que progresa el proceso el desarrollador y el

cliente comprenden y reaccionan mejor ante riesgos en cada uno de los niveles

evolutivos.

Utiliza la construcción de prototipos como mecanismo de reducción de riesgos.

Permite a quien lo desarrolla aplicar el enfoque de construcción de prototipos en

cualquier etapa de evolución del producto.

Mantiene el enfoque sistemático de los pasos sugeridos por el ciclo de vida clásico,

pero lo incorpora al marco de trabajo iterativo que refleja de forma más realista el

mundo real.

Demanda una consideración directa de los riesgos técnicos en todas las etapas del

proyecto, y, si se aplica adecuadamente, debe reducir los riesgos antes de que se

conviertan en problemáticos.

Desventajas:

Puede resultar difícil convencer a grandes clientes (particularmente en situaciones

bajo contrato) de que el enfoque evolutivo es controlable.

Requiere una considerable habilidad para la evaluación del riesgo.

No se ha utilizado tanto como los paradigmas lineales secuenciales o de construcción

de prototipos.

Desarrollo por etapas: El modelo de desarrollo de software por etapas es similar al

Modelo de prototipos ya que se muestra al cliente el software en diferentes estados

sucesivos de desarrollo, se diferencia en que las especificaciones no son conocidas en

detalle al inicio del proyecto y por tanto se van desarrollando simultáneamente con las

diferentes versiones del código.

Este modelo estipula que el software será desarrollado en sucesivas etapas:

1. Plan operativo Etapa donde se define el problema a resolver, las metas del proyecto,

las metas de calidad y se identifica cualquier restricción aplicable al proyecto.

2. Especificación de requisitos Permite entregar una visión de alto nivel sobre el

proyecto, poniendo énfasis en la descripción del problema desde el punto de vista de los

clientes y desarrolladores. También se considera la posibilidad de una planificación de los

recursos sobre una escala de tiempos.

3. Especificación funcional Especifica la información sobre la cual el software a

desarrollar trabajará.

Page 8: Que Es La Ingenieria de Software!

4. Diseño Permite describir como el sistema va a satisfacer los requisitos. Esta etapa a

menudo tiene diferentes niveles de detalle. Los niveles más altos de detalle generalmente

describen los componentes o módulos que formarán el software a ser producido. Los

niveles más bajos, describen, con mucho detalle, cada módulo que contendrá el sistema.

5. Implementación Aquí es donde el software a ser desarrollado se codifica.

Dependiendo del tamaño del proyecto, la programación puede ser distribuida entre

distintos programadores o grupos de programadores. Cada uno se concentrará en la

construcción y prueba de una parte del software, a menudo un subsistema. Las pruebas,

en general, tiene por objetivo asegurar que todas las funciones están correctamente

implementadas dentro del sistema.

6. Integración Es la fase donde todos los subsistemas codificados independientemente

se juntan. Cada sección es enlazada con otra y, entonces, probada. Este proceso se

repite hasta que se han agregado todos los módulos y el sistema se prueba como un

todo.

7. Validación y verificación Una vez que el sistema ha sido integrado, comienza esta

etapa. Es donde es probado para verificar que el sistema es consistente con la definición

de requisitos y la especificación funcional. Por otro lado, la verificación consiste en una

serie de actividades que aseguran que el software implementa correctamente una función

específica. Al finalizar esta etapa, el sistema ya puede ser instalado en ambiente de

explotación.

8. Mantenimiento El mantenimiento ocurre cuando existe algún problema dentro de un

sistema existente, e involucraría la corrección de errores que no fueron descubiertos en

las fases de prueba, mejoras en la implementación de las unidades del sistema y cambios

para que responda a los nuevos requisitos. Las mantenciones se puede clasificar en:

correctiva, adaptativa, perfectiva y preventiva.

Desarrollo iterativo y creciente: Es un proceso de desarrollo de software, creado en

respuesta a las debilidades del modelo tradicional de cascada. La idea principal detrás de

mejoramiento iterativo es desarrollar un sistema de programas de manera incremental,

permitiéndole al desarrollador sacar ventaja de lo que se ha aprendido a lo largo del

desarrollo anterior, incrementando, versiones entregables del sistema. El aprendizaje

viene de dos vertientes: el desarrollo del sistema, y su uso (mientras sea posible). Los

pasos claves en el proceso son comenzar con una implementación simple de los

requerimientos del sistema, e iterativamente mejorar la secuencia evolutiva de versiones

hasta que el sistema completo esté implementado. En cada iteración, se realizan cambios

en el diseño y se agregan nuevas funcionalidades y capacidades al sistema. El proceso

consiste en:

Page 9: Que Es La Ingenieria de Software!

Etapa de inicialización:

Se crea una versión del sistema. La meta de esta etapa es crear un producto con el que el

usuario pueda interactuar, y por ende retroalimentar el proceso. Debe ofrecer una muestra

de los aspectos claves del problema y proveer una solución lo suficientemente simple

para ser comprendida e implementada fácilmente. Para guiar el proceso de iteración se

crea una lista de control de proyecto, que contiene un historial de todas las tareas que

necesitan ser realizadas. Incluye cosas como nuevas funcionalidades para ser

implementadas, y áreas de rediseño de la solución ya existente. Esta lista de control se

revisa periódica y constantemente como resultado de la fase de análisis.

Etapa de iteración:

Esta etapa involucra el rediseño e implementación de una tarea de la lista de control de

proyecto, y el análisis de la versión más reciente del sistema. La meta del diseño e

implementación de cualquier iteración es ser simple, directa y modular, para poder

soportar el rediseño de la etapa o como una tarea añadida a la lista de control de

proyecto. El código puede, en ciertos casos, representar la mayor fuente de

documentación del sistema. El análisis de una iteración se basa en la retroalimentación

del usuario y en el análisis de las funcionalidades disponibles del programa. Involucra el

análisis de la estructura, modularidad, usabilidad, confiabilidad, eficiencia y eficacia

(alcanzar las metas). La lista de control del proyecto se modifica bajo la luz de los

resultados del análisis.

Desventajas:

Requiere de un cliente involucrado durante todo el curso del proyecto. Hay clientes

que simplemente no estarán dispuestos a invertir el tiempo necesario.

Infunde responsabilidad en el equipo de desarrollo al trabajar directamente con el

cliente, requiriendo de profesionales sobre el promedio.

Sufre fuertes penalizaciones en proyectos en los cuales los requerimientos están

previamente definidos, o para proyectos "todo/nada" en los cuales se requiere que se

completen en un 100% el producto para ser implementado (por ejemplo,

licitaciones)otro punto muy importante es asegurarnos de que el trabajo se pueda

cumplir tomando en cuenta los costos que podamos usar en nuestros propios recursos

Modelo DRA: (Desarrollo Rápido de Aplicaciones), Modelo de proceso del desarrollo del

software lineal secuencial que enfatiza un ciclo de desarrollo extremadamente corto. Es

una adaptación a “Alta velocidad” en el que se logra el desarrollo rápido utilizando un

enfoque de construcción basado en componentes. Si se comprenden bien los requisitos y

se limita el ámbito del proyecto, el proceso DRA permite al equipo de desarrollo crear un

“sistema completamente funcional” dentro de periodos cortos de tiempo.

Page 10: Que Es La Ingenieria de Software!

Ventajas del Modelo DRA:

Es muy rápido.

Permite trabajar en él a varias personas a la vez

Desventajas del Modelo DRA:

Para proyectos grandes aunque por escalas, el DRA requiere recursos humanos

suficientes como para crear el número correcto de equipos DRA.

Requiere clientes y desarrolladores comprometidos en las rápidas actividades

necesarias para completar un sistema en un marco de tiempo abreviado. Si no hay

compromiso, por ninguna de las partes constituyentes, los proyectos DRA

fracasaran.

No todos los tipos de aplicaciones son apropiados para DRA. Si un sistema no se

puede modular adecuadamente. La construcción de los componentes necesarios

para DRA será problemático. Si está en juego el alto rendimiento, y se va a

conseguir el rendimiento convirtiendo interfaces en componentes de sistema, el

enfoque DRA puede que no funcione.

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 nuevo software

requiere un alto grado de interoperabilidad con programas de computadora ya

existentes.

Enfatiza el desarrollo de componentes de programas reutilizables. La reutilización

es la piedra angular de las tecnologías de objetos, y se encuentra en el modelo de

proceso de ensamblaje.

Modelo de desarrollo concurrente: Conocido además como Ingeniería Concurrente

dado por Davis Sitaram, se puede representar en forma de esquema como una serie de

actividades técnicas importantes, tareas y estados asociados a ellas.

Este modelo se utiliza a menudo como el paradigma de desarrollo de aplicaciones

cliente/servidor.

Provee una meta-descripción del proceso del software. El modelo concurrente tiene la

capacidad de describir las múltiples actividades del software ocurriendo simultáneamente.

La mayoría de los modelos de procesos de desarrollo del software son dirigidos por el

tiempo; cuanto más tarde sea, más atrás se encontrará en el proceso de desarrollo. Un

modelo de proceso concurrente está dirigido por las necesidades del usuario, las

decisiones de la gestión y los resultados de las revisiones.

El modelo de proceso concurrente define una serie de acontecimientos que dispararán

transiciones de estado a estado para cada una de las actividades de la ingeniería del

software. Durante las primeras etapas del diseño, no se contempla una inconsistencia del

modelo de análisis. Esto genera la corrección del modelo de análisis de sucesos, que

disparará la actividad de análisis del estado hecho al estado cambios en espera.

Page 11: Que Es La Ingenieria de Software!

Esto genera la corrección del modelo de análisis de sucesos, que disparará la actividad

de análisis del estado hecho al estado cambios en espera. Es un modelo de tipo de red

donde todas las personas actúan simultáneamente o al mismo tiempo.

Ventajas

• Excelente para proyectos en los que se conforman grupos de trabajo independientes.

• Proporciona una imagen exacta del estado actual de un proyecto.

Desventajas

• Si no se dan las condiciones señaladas no es aplicable.

• Si no existen grupos de trabajo no se puede trabajar en este método

Page 12: Que Es La Ingenieria de Software!

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN

UNIVERSIDAD ALEJANDRO DE HUMBOLDT

Ingeniería del Software

Elaborado por:

Miguel Artigas. C.I 24.553.549