Post on 21-Feb-2016
description
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.
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.
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.
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.
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
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.
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á.
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:
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.
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.
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
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