Sunteți pe pagina 1din 51

Introducción a la Ingeniería de Software

Productos y procesos
Contenido
1. Que es software?
2. Que es la Ingeniería de Software?
3. Cual es la diferencia entre Ingeniería de Software y
Ciencias de la Computación?
4. Cual es la diferencia entre Ingeniería de Software e
Ingeniería de Sistemas?
5. Que es un proceso de software?
6. Que es un modelo de proceso de software?
7. Que son los métodos de Ingeniería de Software?
Software (Pressman):

1. Instrucciones (programas de computadora) que


cuando se ejecutan proporcionan la función y
el rendimiento deseados.

2. Estructuras de datos que permiten a los


programas manipular adecuadamente la
información.

3. Documentos que describen la construcción y


uso de programas
Características del Software (Pressman)

1. El software se desarrolla, no se fabrica


a.Los costes se centran en ingeniería, no en
fabricación
b.Los proyectos software no se pueden gestionar
como procesos de fabricación

2. El software no se estropea: no es susceptible a males


del entorno.

3. El software se deteriora. Durante su vida sufre


cambios (mantenimiento), por lo que es posible de
La Crisis del Software
Los productos de software:

1. No cumplen con los requisitos del


usuario.
2. Son susceptible frecuentemente
actualizaciones.
3. Es caro.
4. Es difícil de modificar, depurar y
mejorar.
5. A menudo es entregado tarde.
Factores que contribuyen a la Crisis del Softwa

1. Problemas cada vez más


grandes,
2. La falta de una formación
adecuada en ingeniería de
software,
3. El aumento de la falta de
habilidades,
4. Baja productividad.
Programas vs Productos de Software
Programas Productos de Software
Usualmente pequeños en Tamaño grande
tamaño
El autor es su único usuario Gran número de usuarios
Un desarrollador Equipo de desarrolladores
Carece de interfaz de Interfaz bien diseñada
usuario adecuada
Pérdida de la Buena documentación /
documentación Manuales de usuario
Desarrollo Ad hoc Desarrollo sistemático
Evolución de la Ingeniería en el Tiempo

Ingeniería

Tecnología

Profesión / trabajo
Experiencia
Esotérica Uso sistemático de la
experiencia pasada y Bases
Científicas
Uso no organizado
de la experiencia

Arte
Tiempo
Ingeniería de Software: Una actividad
de resolver problemas
Ingeniería de Software
Colección de técnicas, metodologías y herramientas para
ayudar con la producción de:

1. Un software de alta calidad


2. Con un presupuesto dado
3. Antes del plazo determinado
4. Mientras el cambio se produce
Ingeniería de Software: Una actividad
de resolver problemas
Ingeniería de Software: Una actividad
de resolver problemas
Ingeniería de Software

“IEEE Standard Glossary of Software Engineering Terminology”


(Stad. 610.12-1990) ha desarrollado una definición más
completa para ingeniería del software:

“La aplicación de un enfoque sistemático, disciplinado y


cuantificable para el desarrollo, operación y mantenimiento
del software”.
¿Por qué estudiar Ingeniería de Software?

1. Adquirir habilidades para desarrollar


programas grandes.
2. El crecimiento exponencial del nivel
de complejidad y dificultad con el
tamaño.
3. El enfoque ad hoc se rompe cuando
el tamaño del software incrementa

Una espina de experiencia es mejor


que todo un desierto de advertencia.
Ingeniería de Software: Una actividad de
resolver problemas
Para resolver un problema se usa:

1. Técnicas (métodos): Procedimientos formales para producir


resultados usando alguna notación bien definida (ej.
técnicas de programación)

2. Metodologías (Proceso y Modelos): Colección de técnicas


aplicadas a través del desarrollo de software y unificado
bajo un enfoque filosófico (Iterativo, incremental, RAD, RUP,
XP, etc.)

3. Herramientas: instrumentos o sistemas automatizados para


llevar a cabo una técnica
Ingeniería de Software: Una actividad
de resolver problemas

Capas de la Ingeniería de Software. Pressman


CIENCIA VS INGENIERÍA

Ciencias de la Computación:

Demuestra teoremas sobre algoritmos,


diseños de lenguajes, define los esquemas
de representación del conocimiento.

Tiene tiempo infinito ...


CIENCIA VS INGENIERÍA
Ciencias de la Computación:
• Supone que las técnicas, metodologías y herramientas se
van a desarrollar.
• Investigan en los diseños de cada una de estas
componentes, y demuestra teoremas que especifican que
hacen lo que se pretende hacer.
• También diseñan lenguajes que nos permiten expresar las
técnicas.

Para hacer todo esto, un científico de la computación tiene a


su disposición una cantidad infinita de tiempo.
CIENCIA VS INGENIERÍA
Ingeniería de Software
Desarrolla una solución para un problema específico de
aplicación para un cliente. Utiliza computadores, lenguajes,
herramientas, técnicas y métodos

Ingeniero de Software: Trabaja en múltiples dominios de


aplicación, tiene sólo 3 meses ...

... Mientras los cambios se producen en los requisitos y la


tecnología disponible
CIENCIA VS INGENIERÍA
Ingeniería de Software

1. La única duda para el ingeniero de software es: cómo estas


herramientas, técnicas y metodologías se pueden utilizar
para resolver el problema en cuestión.

2. Lo que tienen que preocuparse es cómo hacerlo bajo la


presión del tiempo de una fecha límite.

3. Además tienen que preocuparse por un presupuesto que


podría limitar la solución y, a menudo, el uso de herramientas.

4. Las buenas herramientas de ingeniería de software pueden


costar muchos dólares
CIENCIAS VS INGENIERÍA

COMPUTER
CUSTOMER
SCIENCE

Computer Problem
Theories
Functions

SOFTWARE
ENGINEERING

Tools and
Techniques to
Solve Problem
INGENIERÍA DE SOFTWARE VS
INGENIERÍA DE SISTEMAS
Ingeniería de Sistemas

Se ocupa de todos los aspectos del desarrollo de sistemas


basados en computadores, incluyendo el hardware, software y
la ingeniería de procesos.

La Ingeniería de Software es parte de este proceso, en términos


de arquitectura, control, bases de datos en el sistema (Diseño,
integración y despliegue)
CIENCIA VS INGENIERÍA
Modelado: Modelar los objetos es
una tarea difícil

El buen modelado de objetos


implica el dominio de conceptos
complejos, la terminología y las
convenciones.

También requiere una experiencia


considerable y, a veces subjetiva
en un proceso fuertemente basado
en la experiencia.
CIENCIA VS INGENIERÍA
Modelado
Cuidado con la falsa creencia
de que:

1. La tecnología puede sustituir a


la habilidad y,

2. Esa habilidad es un reemplazo


para el pensamiento.
CIENCIA VS INGENIERÍA
Modelado
Muchas organizaciones se sienten frustrados con la
falta de calidad de sus sistemas.

Sin embargo, la causa de este problema es a menudo


la falsa creencia de que una herramienta puede ser un
sustituto para el conocimiento y la experiencia en la
comprensión y el uso de técnicas de desarrollo.
CIENCIA VS INGENIERÍA

Tenga en cuenta

Ser capaz de utilizar una herramienta no significa


que usted entiende las técnicas subyacentes, y
la comprensión de las técnicas no significa que
usted entiende el problema.
CIENCIA VS INGENIERÍA

Tenga en cuenta

En el análisis final, las organizaciones y los


profesionales deben reconocer que las
metodologías, herramientas y técnicas no
representan los valores añadidos del proceso de
modelado de objetos.
CIENCIA VS INGENIERÍA

Tenga en cuenta

Por el contrario, el valor real que se agrega,


es el pensamiento y la idea de que sólo el
analista puede proporcionar.
CIENCIA VS INGENIERÍA
Factores que afectan la Calidad del
Software
Algunas deficiencias comunes en el desarrollo de
software son:

1. Escasa o tardía validación con el cliente.


2. Inadecuada gestión de los requisitos.
3. No existe medición del proceso ni registro de datos
históricos.
4. Estimaciones imprevistas de plazos y costos.
5. Excesiva e irracional presión en los plazos.
6. Escaso o deficiente control en el progreso del
proceso de desarrollo.
7. No se hace gestión de riesgos formalmente.
8. No se realiza un proceso formal de pruebas.
9. No se realizan revisiones técnicas formales e
inspecciones de código.
Factores que afectan la Calidad del
Software

Complejidad
• El sistema es tan complejo que ningún programador puede entenderlo.
• La introducción de una solo corrección de error puede hacer que otro
se genere

Cambios
• La "Entropía" de un sistema de software se incrementa con cada
cambio: Cada cambio implementado erosiona la estructura del
sistema lo cual hace que el siguiente cambio sea aún más costoso
("Segunda Ley de la Dinámica de Software").
• Conforme pasa el tiempo, el costo de implementar un cambio será
demasiado alto, y el sistema entonces no podrá soportar la tarea
prevista.
Por que el software es tan complejo

El dominio del problema es difícil


El dominio del problema es a veces difícil, simplemente porque
no somos expertos en ello.

1. Es decir, puede que no sea un desafío intelectual, sino porque


usted no es un experto en ella, hay que aprenderlo.

2. Si unimos esto con el aprendizaje de varios dominios de


problemas, y eso es lo que usted tendrá que hacer como
ingeniero de software, y el problema se hace evidente.
Por que el software es tan complejo
El proceso de desarrollo es muy difícil de gestionar

Uno de los supuestos que los administradores han hecho en el pasado, es


que el desarrollo de software puede ser gestionado como un conjunto de
pasos en forma lineal, por ejemplo: Especificación de Requisitos, seguido de
Diseño de Sistemas seguido de Ejecución seguido de pruebas y de entrega.

En realidad esto no es tan fácil. Desarrollo de software no se sigue un


proceso lineal. Es altamente no lineal. Hay dependencias entre la forma en
que se diseña un sistema y la funcionalidad. Por otra parte, y eso hace que
sea muy difícil, algunas de estas dependencias no se pueden formular a
menos que pruebe el diseño.
Por que el software es tan complejo

El software ofrece una flexibilidad extrema

Podemos cambiar casi todo lo que hemos diseñado


en el software.

Si bien es difícil de cambiar el diseño de una


lavadora, es muy fácil de cambiar el programa antes
de ejecutarlo.
Por que el software es tan complejo

El software es un sistema discreto (formas particulares de


codificación)

Cuando usted está sentado en un avión en un asiento


de la ventana, y oprime un botón para llamar a la
azafata para tomar una bebida, no espera que el
sistema de un giro y usted termine en la tierra.
Por que el software es tan complejo
El software es un sistema discreto (formas particulares de
codificación)
Esto puede suceder con los sistemas digitales. Una de las
razones:

1. Si bien se puede descomponer el sistema en subsistemas


(Azafata, Control de Vuelo), si usted no sigue las buenas
reglas de diseño, que podrían haber utilizado alguna
variable global para cada uno de estos subsistemas.
2. Una de estas variables utilizadas por el subsistema de control
de vuelo podrían haber sido sobrescritos por el módulo de
Azafata.
El proceso de software
Propósito: producción eficaz y eficiente de un producto
software que reúna los requisitos del cliente.

Este proceso es intensamente intelectual, afectado por


la creatividad y juicio de las personas involucradas.
El proceso de software
El proceso de software
El proceso de software no es único. No existe un proceso
de software universal que sea efectivo para todos los
contextos de proyectos de desarrollo.

Debido a esta diversidad, es difícil automatizar todo un


proceso de desarrollo de software.
El proceso de software
A pesar de la variedad de propuestas de proceso de software, existe
un conjunto de actividades fundamentales que se encuentran
presentes en todos ellos:

1. Especificación de software: Se debe definir la funcionalidad y


restricciones operacionales que debe cumplir el software.

2. Diseño e Implementación: Se diseña y construye el software de


acuerdo a la especificación.

3. Validación: El software debe validarse, para asegurar que cumpla


con lo que quiere el cliente.

4. Evolución: El software debe evolucionar, para adaptarse a las


necesidades del cliente.
El proceso de software
Además de estas actividades fundamentales, Pressman
menciona un conjunto de “actividades protectoras”, que se
aplican a lo largo de todo el proceso del software. Ellas se
señalan a continuación:

1. Seguimiento y control de proyecto de software.


2. Revisiones técnicas formales.
3. Garantía de calidad del software.
4. Gestión de configuración del software.
5. Preparación y producción de documentos.
6. Gestión de reutilización.
7. Mediciones.
8. Gestión de riesgos.
El proceso de software
Pressman caracteriza un proceso de desarrollo de software con los
siguientes elementos:
Pressman caracteriza un proceso de desarrollo de software con los
siguientes elementos:

1. Un marco común del proceso: actividades que son aplicables a todos


los proyectos de software, con independencia del tamaño o
complejidad.

2. Un conjunto de tareas: colección de tareas de ingeniería del software,


hitos de proyectos, entregas y productos de trabajo del software, y
puntos de garantía de calidad, que permiten que las actividades del
marco de trabajo se adapten a las características del proyecto de
software y los requisitos del equipo del proyecto.

3. Las actividades de protección, tales como garantía de calidad del


software, gestión de configuración del software y medición, abarcan el
modelo del proceso. Las actividades de protección son independientes
de cualquier actividad del marco de trabajo y aparecen durante todo
el proceso.
Modelos de proceso software
Sommerville define el modelo de proceso de software como:

“Una representación simplificada de un proceso de software,


representada desde una perspectiva específica. Por su
naturaleza los modelos son simplificados, por lo tanto un
modelo de procesos del software es una abstracción de un
proceso real.”

Los modelos genéricos no son descripciones definitivas de


procesos de software; sin embargo, son abstracciones útiles
que pueden ser utilizadas para explicar diferentes enfoques
del desarrollo de software.
Modelos de proceso
software

Algunos modelos son:

1. Codificar y corregir
2. Modelo en cascada
3. Desarrollo evolutivo
4. Desarrollo formal de sistemas
5. Desarrollo basado en
reutilización
6. Desarrollo incremental
7. Desarrollo en espiral
Métodos de Ingeniería de software

Enfoques estructurados para el desarrollo de software


que incluyen modelos de sistema, notaciones, reglas,
consejos de diseño y orientación de procesos.

1. Descripción del Modelo


2. Reglas
3. Recomendaciones
4. Proceso de orientación
The evolution of the laws of software evolution

Software evolution deals with the process by


which programs are modified and adapted to
their changing environment.

Meir M. Lehman
Tipos de Software

Programas de tipo S
("determinable"):

1. Problema puede plantearse


formalmente y
completamente.
2. Aceptación: Es el programa
correcto de acuerdo a sus
especificaciones?
3. Este software no evoluciona.
4. Un cambio a la
especificación define un
nuevo problema, por lo
tanto, un nuevo programa
Programas de tipo P ("solución de
problemas")

1. Declaración imprecisa de un
problema del mundo real
2. Aceptación: Es el programa de
una solución aceptable al
problema?
3. Este software es probable que
evolucione continuamente
porque la solución no es nunca
perfecta, y se puede mejorar
debido a los cambios del mundo
real y por lo tanto los cambios de
problemas
Tipos de Software

Programas de tipo E
("Embedded")

1. Un sistema que se convierte


en parte del mundo que
modela
2. Aceptación: depende
totalmente de opinión y el
juicio
3. Este software es
inherentemente evolutivo
4. Cambios en el software y en
el mundo se afectan entre sí

S-ar putea să vă placă și