Está en la página 1de 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 introducir nuevos
defectos
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.
6. Tiene a utilizar recursos no óptimos.
Factores que contribuyen a la Crisis del Software

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 Tamaño grande
El autor es su único usuario Gran número de usuarios
Un desarrollador Equipo de desarrolladores
Carece de interfaz de usuario Interfaz bien diseñada
adecuada
Pérdida de la documentación Buena 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:
El proceso de software
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
Tipos de Software

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í

También podría gustarte