Principios de Ingenieria de Software

20
PRINCIPIOS DE LA INGENIERÍA DE SOFTWARE [Escriba el subtítulo del documento] [Escriba aquí una descripción breve del documento. Normalmente, una descripción breve es un resumen corto del contenido del documento. Escriba aquí una descripción breve del documento. Normalmente, una descripción breve es un resumen corto del contenido del documento.] 2015 - II Diego Trinidad [Escriba el nombre de la compañía] [Seleccione la fecha]

description

Curso Ingenieria de software

Transcript of Principios de Ingenieria de Software

Page 1: Principios de Ingenieria de Software

Diego Trinidad[Escriba el nombre de la compañía]

[Seleccione la fecha]2015 - II

PRINCIPIOS DE LA INGENIERÍA DE SOFTWARE[Escriba el subtítulo del documento]

[Escriba aquí una descripción breve del documento. Normalmente, una descripción breve es un resumen corto del contenido del documento. Escriba aquí una descripción breve del documento. Normalmente, una descripción breve es un resumen corto del contenido del documento.]

Page 2: Principios de Ingenieria de Software

1

INTRODUCCIÓN

En el siguiente informe les presentamos los principios del software que

tratan tanto del proceso de ingeniería de software como del producto

final. El proceso adecuado ayudará a desarrollar el producto deseado,

pero también el producto deseado afectará la elección del proceso a

utilizar. Un problema tradicional de la ingeniería de software es poner el

énfasis en el proceso o en el producto excluyendo al otro, sin embargo,

ambos son importantes.

Estos principios son suficientemente generales para ser aplicados a lo

largo del proceso de construcción y gestión del software, sin embargo no

son suficientes para guiar el desarrollo ya que describen propiedades

deseables de los procesos y productos de software; para aplicarlos es

necesario contar con métodos apropiados y técnicas específicas. Los

métodos son guías generales que gobiernan la ejecución de alguna

actividad, presentan enfoques rigurosos, sistemáticos y disciplinados,

por otro lado, las técnicas son más mecánicas y se refieren a aspectos

más “técnicos” que los métodos y tienen aplicación restringida.

Una metodología es un conjunto de métodos y técnicas cuyo propósito

es promover cierto enfoque para la resolución de un problema mediante

ese conjunto seleccionado. Las herramientas son desarrolladas para

apoyar la aplicación de técnicas, métodos y metodologías. Los

principios son la base de todos los métodos, técnicas, metodologías y

herramientas.

Page 3: Principios de Ingenieria de Software

2

PRINCIPIOS DE LA INGENIERÍA DE SOFTWARE

Los principios son afirmaciones abstractas que describen propiedades deseables

del proceso y del producto. Para aplicarlas, los ingenieros deben contar con

métodos y técnicas que incorporen dichos principios.

A continuación definiremos dos conceptos que se manejan para interpretar el

sentido de los principios de la ingeniería de software:

Métodos: guías para la ejecución de alguna actividad, aproximaciones

rigurosas, sistemáticas y disciplinadas.

Técnicas: son más mecánicas que los métodos y tienen aplicabilidad más

restringida.

Estos principios apuntan al proceso de ingeniería y el producto final: el proceso

correcto ayudará a obtener el producto correcto. Asimismo, el producto afectará la

elección de qué proceso usar.

Page 4: Principios de Ingenieria de Software

3

GRÁFICO:

HERRAMIENTAS

Las herramientas son desarrolladas para

apoyar la aplicación de los 3 niveles anteriores.

METODOLOGÍAS

Una metodología es un conjunto de métodos y técnicas cuyo propósito es promover cierto enfoque para la resolución de un problema mediante ese conjunto seleccionado

METODOS Y TÉCNICAS

Los métodos y técnicas se encapsulan para crear metodologías, que sirven para promover una aproximación a la solución de problemas, preseleccionando los métodos y técnicas a usar.

PRINCIPIO

Page 5: Principios de Ingenieria de Software

4

1. RIGOR Y FORMALIDAD

Definiendo:

El rigor es un complemento de la creatividad en la ingeniería. Con la

aproximación rigurosa podremos tener productos más confiables y mejores

controles (de tiempo, costos, etc.).

La formalidad aventaja al rigor en el sentido de que la primera puede ser la

base para mecanizar procesos.

APLICACIÓN:

La aplicación del principio de rigor y formalidad tiene influencia beneficiosa

en la obtención de cualidades del software como la confiabilidad,

verificabilidad, mantenibilidad, reusabilidad, portabilidad, comprensibilidad e

interoperabilidad. Por ejemplo, una documentación del software rigurosa o

incluso formal puede mejorar todas estas cualidades sobre una

documentación informal que puede ser ambigua, inconsistente e

incompleta.

Page 6: Principios de Ingenieria de Software

5

2. SEPARACIÓN DE INTERESES

Este principio permite enfrentarse a los distintos aspectos individuales de

un problema de forma de concentrarse en cada uno por separado.

La única forma de enfrentar la complejidad de un proyecto es separar los

distintos intereses.

Separación por intereses:

La primera forma en la que se pueden separar los distintos intereses es

SEGÚN EL TIEMPO, lo que permite planificar las distintas actividades y

eliminar el trabajo extra que implica cambiar de una a otra en forma no

restringida.

Otra forma de separación de intereses es EN TÉRMINOS DE LAS

CUALIDADES que deberían tratarse por separado, por ejemplo podrían

enfrentarse separadamente la eficiencia y correctitud de un programa,

primero diseñándolo cuidadosa y estructuradamente para garantizar su

correctitud a priori y luego reestructurarlo para mejorar su eficiencia.

Otro tipo importante de separación de intereses permite que DISTINTAS

VISIONES DEL SOFTWARE sean analizadas en forma separada, por ejemplo

al analizar los requerimientos de una aplicación podría ser de ayuda

concentrarse por un lado en los datos que fluyen de una actividad a otra y

por otro lado en el flujo de control que gobierna la sincronización de dichas

actividades. Ambas ayudan a entender el sistema y ninguna de las dos

provee una visión completa del mismo.

Otra forma más de aplicación de este principio es enfrentar partes del

mismo sistema en forma separada, esto es EN TÉRMINOS DE TAMAÑO.

Este es un concepto fundamental que debe dominarse para enfrentar la

complejidad de la producción de software, y es tan importante que se trata

como un punto aparte bajo el principio de modularidad.

Page 7: Principios de Ingenieria de Software

6

Por tanto la separación de intereses podría resultar en la separación de

responsabilidades al enfrentarse a los distintos aspectos a tener en cuenta,

por lo tanto es la base para dividir el trabajo en un problema complejo en

asignaciones de trabajo específicas posiblemente a personas distintas con

distintas habilidades.

Ejemplo 01:

Para conocer los costos reales de las actividades económicas de una

empresa, es necesario recurrir o analizar aspectos de manera

individual que influyen en los costos de manera directa y/o

indirectamente, como los descuentos o recargos, entre otros: estos

nos dan los datos precisos, lo más cercano a la realidad, que no

sería posible si analizáramos los costos de forma directa sin ver los

diferentes aspectos que influyen en los costos.

Ejemplo 02:

Otro caso es para un sistema de almacén, se podría decir que

simplemente es la entrada y salida de productos, este análisis sería

muy genérico y no estaríamos separando adecuadamente los

intereses del sistema, por lo tanto no podríamos implementar un

software adecuado, para ello necesitamos identificar los intereses

más relevantes como el producto, registro del producto, clasificación,

etc.

Page 8: Principios de Ingenieria de Software

7

3. MODULARIDAD

El principal beneficio de la modularidad es que permite la aplicación del

principio de separación de intereses en dos fases: al enfrentar los detalles

de cada módulo por separado ignorando detalles de los otros módulos, y al

enfrentar las características globales de todos los módulos y sus relaciones

para integrarlos en un único sistema coherente. Si estas fases son

ejecutadas en ese orden se dice que el sistema es diseñado de abajo

hacia arriba (bottom up), en el orden inverso se dice que el sistema es

diseñado de arriba hacia abajo (top down).

El principio de modularidad se basa en 3 objetivos principales los cuales

son:

Capacidad de descomponer un sistema complejo

Capacidad de componer el sistema a partir de módulos existentes

Comprensión del sistema en piezas (o pedazos)

Podemos encontrar una forma de componer y descomponer sistemas,

según lo referenciado anteriormente podemos describir cómo:

o Para descomponer: Se basa en dividir el problema original en

subproblemas y luego aplicar el principio a cada subproblema de

forma recursiva.

o Para componer: La posibilidad de componer un sistema está

basada en obtener el sistema final de forma bottom up a partir de

componentes elementales.

Debido a la naturaleza evolutiva del software muchas veces se debe volver

hacia atrás al trabajo previo y modificarlo. Si el sistema solo puede ser

Page 9: Principios de Ingenieria de Software

8

comprendido como un todo las modificaciones serán difíciles de aplicar y el

resultado será poco confiable.

Una estructura modular con alta cohesión y bajo acoplamiento permite ver

los módulos como cajas negras cuando se describe la estructura global del

sistema y luego encarar cada módulo por separado cuando se analiza o

describe la funcionalidad del módulo.

Ejemplo 01:

Modularidad de MySQL:

Paso 1: Crear base de datos.

Paso 2:

Page 10: Principios de Ingenieria de Software

9

Paso 3:

Paso 4:

Page 11: Principios de Ingenieria de Software

10

Ejemplo 02:

Paso 1: Renombrar la base de datos.

Page 12: Principios de Ingenieria de Software

11

Paso 2:

4.

Page 13: Principios de Ingenieria de Software

12

5. ANTICIPACIÓN AL CAMBIO.

Es la predicción de los cambios y poder trabajar para que los cambios que

puedan necesitarse en algún momento futuro sean fáciles de aplicar. Es

importante en el software, debido a que los productos están en ambientes

donde permanentemente surgen nuevos requerimientos y esto lleva a hacer

cambios constantemente, esto está relacionado con el mantenimiento y es

necesario poder anticiparlos para que no haya ningún problema al aplicar

estos nuevos requerimientos. Para anticiparse al cambio debemos contar

con herramientas de administración de versiones y revisiones de software

donde podamos almacenar y recuperar información, módulos fuente y

objetos, todo desde una base de datos central.

Page 14: Principios de Ingenieria de Software

13

La reusabilidad también se ve afectada por esto, ya que un componente se

puede emplear para generar un nuevo producto, en ciertos casos se

requerirá hacer pequeños cambios para esto, cuando se aplique, el

componente tendrá la capacidad de evolucionar y así poder ser reutilizado.

Generalidad.

Establece que al tener que resolver un problema se debe buscar un

problema más general, al descubrir un problema más general, este puede

ser menos complejo y posiblemente la solución al problema general tenga

potencial de reúso. Puede surgir de un paquete ya existente o lo podemos

crear nosotros. Este principio es fundamental si se busca desarrollar

herramientas software para uso amplio en el mercado.

Sin embargo, puede ser más costoso en términos de velocidad de

ejecución, requerimientos de memoria o tiempos de desarrollo.

Page 15: Principios de Ingenieria de Software

14

Si el problema puntual se puede reformular como una instancia de un

problema general, es conveniente adoptar el paquete en vez de una

solución específica.

7. Incrementalidad.

La incrementalidad caracteriza un proceso que se desarrolla en forma de

pasos, en incrementos, alcanzando el objetivo deseado mediante

aproximaciones sucesivas al mismo, esto nos da un proceso evolutivo,

donde cada aproximación es alcanzada a través de un incremento de la

previa.

Debemos identificar subconjuntos primarios útiles para desarrollar y

distribuir a los clientes, de manera de obtener realimentación temprana.

Esto nos permite que la aplicación evolucione de manera controlada, en

casos donde los requerimientos iniciales no se comprendieron bien.

Page 16: Principios de Ingenieria de Software

15

Muchas veces no es posible obtener todos los requerimientos antes de

comenzar el desarrollo de una aplicación sino que éstos van emergiendo a

partir de la experimentación con la aplicación o partes de ésta. Por lo tanto,

lo antes que se pueda contar con feedback del usuario sobre la utilidad de

la aplicación, más fácil será incorporar los cambios requeridos la producto.

Este principio está ligado al principio de anticipación al cambio y es otro de

los principios en los que se basa la evolucionabilidad.

Las etapas intermedias son prototipos del producto final, lo cual beneficia el

entendimiento de los requerimientos y permite usar un modelo de desarrollo

iterativo más flexible.

Debemos tener mucho cuidado en la manipulación de documentos,

programas, datos de prueba y todo lo que usemos en las distintas

versiones. Si no se realiza con cuidado, un intento de desarrollo evolutivo

podría rápidamente transformarse en un desarrollo de software

indisciplinado y perderse todas las ventajas potenciales de la

evolucionabilidad.