ingenieria de software

17

Upload: miguel-tapia

Post on 30-Mar-2016

212 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ingenieria de software
Page 2: Ingenieria de software

La Ingeniería del Software es una disciplina o área de la Informática que ofrece

métodos y técnicas para desarrollar y mantener software de calidad que

resuelven problemas de todo tipo. Existen varias definiciones sobre esta

ciencia de la computación que permiten describir este proceso.

Estado del arte de la Ingeniería del Software

La Ingeniería del Software es una disciplina o área de la Informática o Ciencias

de la Computación, que ofrece métodos y técnicas para desarrollar y mantener

software de calidad que resuelven problemas de todo tipo. Hoy día es cada vez

más frecuente la consideración de la Ingeniería del Software como una nueva

área de la ingeniería, y el ingeniero del software comienza a ser una profesión

implantada en el mundo laboral internacional, con derechos, deberes y

responsabilidades que cumplir, junto a una, ya, reconocida consideración social

en el mundo empresarial y, por suerte, para esas personas con brillante futuro.

Page 3: Ingenieria de software

La Ingeniería del Software trata con áreas muy diversas de la Informática y de

las ciencias de la computación, tales como construcción de compiladores,

sistemas operativos o desarrollos de Intranet/Internet, abordando todas las

fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de

información y aplicables a una infinidad de áreas tales como: negocios,

investigación científica, medicina, producción, logística, banca, control de

tráfico, meteorología, el mundo del derecho, la red de redes Internet, redes

Intranet y Extranet, etc.

Definición del Término Ingeniería del Software

Según Diccionario de la Real Academia Española de la Lengua

El término Ingeniería se define en el Diccionario de la Real Academia Española

de la Lengua (DRAE) como: Conjunto de conocimientos y técnicas que

permiten aplicar el saber científico a la utilización de la materia y de las fuerzas

de energía.

Profesión y ejercicio del ingeniero, y el término ingeniero se define como:

Persona que profesa o ejerce la ingeniería.

Según la Real Academia de Ciencias Exactas, Físicas y Naturales

Ingeniería: Es el conjunto de conocimientos y técnicas cuya aplicación permite

la utilización racional de los materiales y de los recursos naturales, mediante

invenciones, construcciones u otras realizaciones provechosas para el hombre.

Evidentemente, si la Ingeniería del Software es una nueva ingeniería, parece

lógico que reúna las propiedades citadas en las definiciones anteriores. Sin

embargo, ni el DRAE ni la Real Academia Española de Ciencias han incluido

todavía el término es sus últimas ediciones; en consecuencia vamos a recurrir

para su definición más precisa a algunos de los autores más acreditados que

comenzaron en su momento a utilizar el término o bien en las definiciones

dadas por organismos internacionales profesionales de prestigio tales como

IEEE o ACM.

Page 4: Ingenieria de software

Definiciones de Ingeniería de Software

Definición 1: Ingeniería de Software es el estudio de los principios y

metodologías para desarrollo y mantenimiento de sistemas de software.

Definición 2: Ingeniería de Software es la aplicación práctica del conocimiento

científico en el diseño y construcción de programas de computadora y la

documentación asociada requerida para desarrollar, operar (funcionar) y

mantenerlos. Se conoce también como desarrollo de software o producción de

software.

Definición 3: Ingeniería de Software trata del establecimiento de los principios

y métodos de la Ingeniería a fin de obtener software de modo rentable que sea

fiable y trabaje en máquinas reales.

Definición 4: La aplicación de un enfoque sistemático, disciplinado y

cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del

software; es decir, la aplicación de ingeniería al software.

El producto y el proceso de la Ingeniería del Software

El producto

El software de computadora se ha convertido en el alma máter. Es la máquina

que conduce a la toma de decisiones comerciales. Sirve para la investigación

científica moderna y de resolución de problemas de ingeniería. Es el factor

clave que diferencia los productos y servicios modernos. Está inmerso en

sistemas de todo tipo: de transportes, médicos, de telecomunicaciones,

militares, procesos industriales, entretenimientos, productos de oficina, la lista

es casi interminable. El software es casi ineludible en un mundo moderno. A

medida que nos adentremos en el siglo XXI, será el que nos conduzca a

nuevos avances en todo, desde la educación elemental a la ingeniería

genética.

El software de computadora es el producto que diseñan y construyen los

ingenieros del software. Esto abarca programas que se ejecutan dentro de una

Page 5: Ingenieria de software

computadora de cualquier tamaño y arquitectura, documentos que comprenden

formularios virtuales e impresos y datos que combinan números y texto y

también incluyen representaciones de información de audio, vídeo e imágenes.

Los ingenieros de software lo construyen, y virtualmente cualquier persona en

el mundo industrializado lo utiliza, bien directa o indirectamente. Es importante

porque afecta muy de cerca cualquier aspecto de la vida y está muy extendido

en el comercio y en las actividades cotidianas.

Los pasos son construir software de computadora como construimos cualquier

otro producto satisfactorio, aplicando un proceso que conduce a un resultado

de alta calidad, que satisface las necesidades de las personas que usarán el

producto. Debes aplicar un enfoque de ingeniería de software.

Desde el punto de vista de un ingeniero de software, el producto obtenido son

los programas, documentos y los datos que configuran el software de

computadora. Pero desde el punto de vista de los usuarios el producto obtenido

es la información resultante que de algún modo mejora el mundo de los

usuarios.

El proceso

Como el software, al igual que el capital, es el conocimiento incorporado, y

puesto que el conocimiento está inicialmente disperso, el desarrollo del

software implícito, latente e incompleto en gran medida, es un proceso social

de aprendizaje.

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.

Page 6: Ingenieria de software

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.

Desde el punto de vista de un ingeniero de software, los productos obtenidos

son programas, documentos y datos que se producen como consecuencia de

las actividades ingenieriles definidas por el proceso.

Hay una cantidad de mecanismos de evaluación del proceso de software que

permiten a las organizaciones determinar la madurez de su proceso. Sin

embargo, la calidad, oportunidad y viabilidad a largo plazo del producto que se

está construyendo, son los mejores indicadores de la eficiencia del proceso que

estamos utilizando.

Page 7: Ingenieria de software

Análisis de requerimientos: Se extraen los requisitos del producto de

software. En esta etapa la habilidad y experiencia en la ingeniería del software

es crítica para reconocer requisitos incompletos, ambiguos o contradictorios.

Usualmente el cliente/usuario tiene una visión incompleta/inexacta de lo que

necesita y es necesario ayudarle para obtener la visión completa de los

requerimientos. El contenido de comunicación en esta etapa es muy intenso ya

que el objetivo es eliminar la ambigüedad en la medida de lo posible.

Especificación: Es la tarea de describir detalladamente el software a ser

escrito, de una forma rigurosa. Se describe el comportamiento esperado del

software y su interacción con los usuarios y/o otros sistemas.

Diseño y arquitectura: Determinar cómo funcionará de forma general sin

entrar en detalles incorporando consideraciones de la implementación

tecnológica, como el hardware, la red, etc. Consiste en el diseño de los

componentes del sistema que dan respuesta a las funcionalidades descritas en

la segunda etapa también conocidas como las entidades de negocio.

Generalmente se realiza en base a diagramas que permitan describir las

interacciones entre las entidades y su secuenciado.

Page 8: Ingenieria de software

Programación: Se traduce el diseño a código. Es la parte más obvia del

trabajo de ingeniería de software y la primera en que se obtienen resultados

“tangibles”. No necesariamente es la etapa más larga ni la más compleja

aunque una especificación o diseño incompletos/ambiguos pueden exigir que,

tareas propias de las etapas anteriores se tengan que realizarse en esta.

Prueba: Consiste en comprobar que el software responda/realice

correctamente las tareas indicadas en la especificación. Es una buena praxis

realizar pruebas a distintos niveles (por ejemplo primero a nivel unitario y

después de forma integrada de cada componente) y por equipos diferenciados

del de desarrollo (pruebas cruzadas entre los programadores o realizadas por

un área de test independiente).

Documentación: Realización del manual de usuario, y posiblemente un

manual técnico con el propósito de mantenimiento futuro y ampliaciones al

sistema. Las tareas de esta etapa se inician ya en el primera fase pero sólo

finalizan una vez terminadas las pruebas.

Mantenimiento: En esta etapa se realizan un mantenimiento correctivo

(resolver errores) y un mantenimiento evolutivo (mejorar la funcionalidades y/o

dar respuesta a nuevos requisitos).

Modelos de desarrollo de software

Existen varios modelos, paradigmas y filosofías de desarrollo, en los cuales se

apoya la ingeniería de software para la construcción del software, entre ellos se

puede citar:

Modelo en cascada (modelo tradicional)

Modelo de prototipos

Modelo Espiral

Desarrollo por etapas

Desarrollo iterativo y creciente o Iterativo e Incremental

Page 9: Ingenieria de software

Modelo de desarrollo rápido de aplicaciones (Rapid Application

Development, RAD ó DRA)

Desarrollo concurrente

Proceso Unificado de Desarrollo RUP (Proceso Unificado de Rational)

CAPAS DE LA INGENIERÍA DE SOFTWARE

El enfoque de ingeniería del software cuenta con un compromiso

organizacional con la calidad porque no es posible incorporar la ingeniería del

software en una organización que no está centrada en conseguir calidad.

La ingeniería del software es una tecnología multicapa. Se puede ver como un

conjunto de componentes estratificados, que reposan sobre ese enfoque de

calidad.

Estos componentes que forman parte de la ingeniería del software son:

Procesos: un marco de trabajo que ayuda al jefe de proyecto a controlar

la gestión del proyecto y las actividades de ingeniería.

Métodos: las actividades técnicas requeridas para la creación de

productos de trabajo.

Herramientas: la ayuda automatizada para los procesos y métodos.

Procesos

Page 10: Ingenieria de software

El fundamento de la ingeniería del software es la capa de proceso. El proceso

define un marco de trabajo para un conjunto de áreas clave de proceso que se

deben establecer para la entrega efectiva de la tecnología de la ingeniería del

software.

La capa de proceso define el proceso que se usará para construir el software y

las actividades y tareas que un jefe de proyecto tiene que gestionar. Por lo

tanto, las áreas claves del proceso forman la base del control de gestión de

proyectos del software y establecen el contexto en el que se aplican los

métodos técnicos, se obtienen productos de trabajo (modelos, documentos,

datos, informes, formularios, etc.), se establecen hitos, se asegura la calidad y

el cambio se gestiona adecuadamente. El proceso de la ingeniería del software

es la unión que mantiene juntas las capas de tecnologías y que permite un

desarrollo racional y oportuno de la ingeniería del software.

La capa de proceso:

Permite al jefe de proyecto planificar una ejecución exitosa del proyecto. La

capa de proceso proporciona una hoja de ruta del trabajo de ingeniería del

software. Ayuda al jefe de proyecto en la creación de un plan de trabajo viable

que aísle tareas de trabajo, responsabilidades, los productos de trabajo

producidos, y los mecanismos usados para asegurar calidad en dichos

productos de trabajos. Permite la ejecución de proyectos software dentro de un

marco de tiempo razonable.

Proporciona a las personas involucradas el contexto de su trabajo. La capa de

proceso guía a las personas involucradas proporcionando el marco de trabajo

en el que entienden el contexto de las tareas a realizar.

Se pueden ver todas las actividades, incluyendo las actividades técnicas, como

parte del proceso. Además, cualquier recurso, incluyendo herramientas usadas

para construir el software también encajan en el proceso. La capa de proceso

es, por lo tanto, el fundamento de la ingeniería del software y da soporte a las

capas de métodos y herramientas.

Page 11: Ingenieria de software

Importancia de un proceso

Un proceso es útil porque proporciona claridad en cómo ha de realizarse el

trabajo. Cualquier conjunto de actividades humanas complejas se puede

convertir en caótico si no hay guías para que las personas puedan realizar las

actividades. Un proceso definido responde a las siguientes cuestiones:

¿Quién se comunica con quién?

¿Cómo se coordinan las actividades interdependientes?

¿Quién es responsable de qué trabajo?

¿Quién produce qué productos de trabajo, y cómo se evalúan?

Un proceso:

‐Identifica todas las actividades y tareas de la ingeniería del software

‐Define el flujo de trabajo entre las actividades y tareas

‐Identifica los productos de trabajo que se producen

‐Especifica los puntos de control de calidad requeridos

Algunas personas ven el desarrollo de software con una perspectiva que

requiere habilidades artísticas y de artesanía y que es inherentemente caótico.

Se resisten a la idea de usar un proceso definido porque lo ven como incómodo

y burocrático y por lo tanto dificulta la creatividad.

Aunque no hay duda de que el desarrollo de software requiere creatividad, la

mayoría del software de calidad en la industria se desarrolla por el esfuerzo

coordinado de más de una persona. Para cualquier esfuerzo de equipo, el

control coordinado es mejor alternativa que la anarquía. La hoja de ruta

proporcionada por un proceso es útil para las personas que construyen

productos software o que gestionan proyectos.

Todos los enfoques de la construcción de software tienen un proceso, pero en

muchos casos, son ad hoc, invisibles y caóticos. Una buena ingeniería de

software hace que el proceso de software sea más visible, predecible y más útil

para aquellos que construyen software.

Page 12: Ingenieria de software

La capa de proceso abarca las siguientes cuestiones:

‐El marco de trabajo de proceso común (CPF)

‐Actividades y tareas de la ingeniería de software

‐Puntos de control de calidad

‐Definiciones de productos de trabajo

‐Gestión de proyectos

‐Aseguramiento de la calidad del software

‐Gestión de la configuración del software

‐Monitorización de proyectos

‐Medidas y métricas

Métodos

La capa de proceso identifica las tareas de ingeniería que se deben realizar

para construir software de alta calidad.

La siguiente capa, la capa de métodos se centra en las actividades técnicas

que se deben realizar para conseguir las tareas de ingeniería. Proporciona el

“cómo” y cubre las actividades de ingeniería fundamentales.

Los métodos abarcan una gran gama de tareas que incluyen análisis de

requisitos, diseño, construcción de programas, pruebas y mantenimiento. Los

métodos de la ingeniería del software dependen de un conjunto de principios

básicos que gobiernan cada una de las áreas de la tecnología e incluyen

actividades de modelado y otras técnicas descriptivas.

La construcción de software implica una amplia colección de actividades

técnicas. La capa de métodos contiene los métodos definidos para realizar

esas actividades de forma eficiente. Se centra en cómo se han de realizar las

actividades técnicas. Los personas involucradas usan los métodos para realizar

las actividades de ingeniería fundamentales necesarias para construir el

software.

Page 13: Ingenieria de software

Las actividades técnicas fundamentales para construir software son:

‐Análisis: el análisis es el fundamento de todos los trabajos de ingeniería que

siguen. Durante el análisis, se crea el modelo de lo que es requerido por el

software.

‐Diseño: las actividades de diseño siguen el análisis y traducen el modelo del

análisis en cómo el producto proporciona estas funciones por medio del

software.

‐Codificación: una vez que el diseño es completo, la codificación traduce el

modelo de diseño en una forma ejecutable.

‐Pruebas: el proceso de pruebas ayuda a destapar errores en el código y el

diseño subyacente.

También se realizan actividades de soporte: revisiones técnicas y soporte de

métricas.

Para varias actividades de proceso, la capa de métodos contiene el

correspondiente conjunto de métodos técnicos para usar. Esto abarca un

conjunto de reglas, los modos de representación gráficos o basados en texto, y

las guías relacionadas para la evaluación de la calidad de la información

representada.

Para definir la capa de métodos, es necesario seleccionar un método adecuado

de un amplio rango de métodos disponibles.

Consideramos las actividades de análisis y diseño. Hay una amplia variedad de

métodos disponibles. El equipo de proyecto debería seleccionar el método que

es más apropiado para el problema, el entorno de desarrollo y el conocimiento

y experiencia de los miembros del equipo.

Herramientas

La capa de herramientas proporciona soporte a las capas de proceso y

métodos centrándose en el significado de la automatización de algunas de las

Page 14: Ingenieria de software

actividades manuales. Las herramientas se pueden utilizar para automatizar las

siguientes actividades:

‐Actividades de gestión de proyectos

‐Métodos técnicos usados en la ingeniería del software

‐Soporte de sistemas general

‐Marcos de trabajo para otras herramientas

La automatización ayuda a eliminar el tedio del trabajo, reduce las posibilidades

de errores, y hace más fácil usar buenas prácticas de ingeniería del software.

Cuando se usan herramientas, la documentación se convierte en una parte

integral del trabajo hecho, en vez de ser una actividad adicional. De ahí que la

documentación no se tenga que realizar como actividad adicional. Las

herramientas se pueden utilizar para realizar actividades de gestión de

proyecto así como para actividades técnicas.

Existen una gran variedad de herramientas para múltiples actividades. Entre

ellas se pueden destacar las siguientes:

‐Herramientas de gestión de proyectos

‐Herramientas de control de cambios

‐Herramientas de análisis y diseño

‐Herramientas de generación de código

‐Herramientas de pruebas

‐Herramientas de reingeniería

‐Herramientas de documentación

‐Herramientas de prototipos

Estas herramientas soportan las capas de proceso y de métodos en varias

actividades.

Responsabilidad profesional y ética

Page 15: Ingenieria de software

Como otras disciplinas de la ingeniería, la ingeniería del software se lleva a

cabo dentro de un marco legal y social que limita la libertad de los ingenieros.

Los ingenieros de software deben aceptar que su trabajo comprende

responsabilidades más amplias que simplemente la aplicación de habilidades

técnicas. Deben comportarse de una forma ética y moral responsable si es que

desean ser respetados como profesionales.

No basta con decir que usted siempre debe poseer estándares normales de

honestidad e integridad. No debería utilizar su capacidad y sus habilidades

para comportarse de forma deshonesta o de forma que deshonre la profesión

de la ingeniería del software. Sin embargo, existen áreas donde los estándares

de comportamiento aceptable no están acotados por las leyes, sino por la más

tenue noción de responsabilidad profesional. Algunas de éstas son:

1. Confidencialidad. Usted normalmente debe respetar la confidencialidad

de sus empleadores o clientes independientemente de que se haya

firmado un acuerdo formal de confidencialidad.

2. Competencia. No debe falsificar su nivel de competencia, ni aceptar

conscientemente trabajos que están fuera de su capacidad.

3. Derechos de propiedad intelectual. Debe ser consciente de las leyes

locales que gobiernan el uso de la propiedad intelectual, como las

patentes y el copyright. Debe asegurarse de que la propiedad intelectual

de los empleadores y clientes está protegida.

4. Uso inapropiado de las computadoras. No debe emplear sus

habilidades técnicas para utilizar de forma inapropiada las computadoras

de otras personas. El uso inapropiado de las computadoras va desde los

relativamente triviales (utilizar juegos en la máquina de un empleado, por

ejemplo) hasta los extremadamente serios (difusión de virus).

Las sociedades e instituciones profesionales tiene que desempeñar un papel

importante en el establecimiento de estándares éticos. Organizaciones como la

ACM, el IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) y la British

Computer Society publican un código de conducta profesional o de ética. Los

miembros de estas organizaciones se comprometen a cumplir ese código

cuando se inscriben en ellas. Estos códigos de conducta generalmente se

refieren al comportamiento ético fundamental.

Page 16: Ingenieria de software

CONCLUSIONES

La ingeniería de software es una disciplina que nos ayuda a desarrollar

sistemas de software a tiempo y a la vez que se cumplan con las expectativas

de calidad y que permanezca dentro del presupuesto. Sus tres elementos

importantes son: algoritmo, estructura de datos y documentos.

El proyecto de software cumple con un ciclo de vida, para todo proyecto de

software se debe elegir el modelo en el que se trabajara, es muy importante

realizar prototipos de los productos de software para el mejor diseño y

entendimiento de lo que requiere el cliente.

Para esto necesitamos información adecuada, podemos utilizar cualquier

técnica de recopilación de información siempre y cuando se haga de la forma

correcta y constante comunicación con el cliente

Page 17: Ingenieria de software

LINKOGRAFIA

http://www.ecured.cu/index.php/Ingenier%C3%ADa_de_software

http://proyectosguerrilla.com/blog/2013/02/las-cinco-etapas-en-la-ingenieria-del-software/

http://sosagas.blogspot.com/2011/09/capas-de-la-ingenieria-de-software.html

BIBLIOGRAFÍA

Ian Somerville: Ingeniería de Software. Editorial Pearson Educación. S.A.

Séptima Edición. Madrid, 2005.