viernes, 24 de julio de 2009

METODOLIA DE LA INVESTIGACIÓN PARA INGENIERIA DE SISTEMAS

Univ. Walter Alberto Mamani Nina
JULIO 2009



METODOLOGIA DE LA INVESTIGACION PARA LA INGENIERIA DE SISTEMAS
Monografía
Univ. Walter Alberto Mamani Nina
retlawkiss@hotmail.com
© Julio 2009 - Todos los derechos reservados
La Paz - Bolivia




























ÍNDICE DE CONTENIDOS
TEMA

1. introducción 1
2. la ingeniería de software 1
3 la ingeniería de sistemas 2
4 campos relacionados 3
5 objetivos de la ingeniería de software 3
6 competitividad 4
7. estrategia para su desarrollo 5
8 método de investigación 5
9 método de ciclo de vida clásico 5
10 proceso unificado y msf; complementos tecnológicos 7
11 método de desarrollo por análisis estructurado 9
12. métodos empíricos 10
13 diagrama estructurado de datos 11
14 grafica de estructura 11
15 etapas del método de prototipos 12
16 coordinación y gestión de proyectos 13
17 medición y estimaciones 14
18 reingeniería y ingeniería inversa 15
19 ingeniería software basada en agentes 16
20 comentario final para reflexionar 16
21 bibliografía 17



RESUMEN: Esta ingeniería 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 Intranet/Internet, abordando todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a infinidad de áreas (negocios, investigación científica, medicina, producción, logística, banca, control de tráfico, meteorología, derecho, Internet, Intranet, etc.)
Ingeniería de software es la disciplina o área de la informática que ofrece métodos y técnicas para desarrollar y mantener software de calidad.





















1. Introducción
Este término fue introducido a finales de los 60 a raíz de la crisis del software.
Esta crisis fue el resultado de la introducción de la tercera generación del hardware.
El hardware dejo de ser un impedimento para el desarrollo de la informática; redujo los costos y mejoro la calidad y eficiencia en el software producido
La crisis se caracterizo por los siguientes problemas:
• Imprecisión en la planificación del proyecto y estimación de los costos.
• Baja calidad del software.
• Dificultad de mantenimiento de programas con un diseño poco estructurado, etc.
Por otra parte se exige que el software sea eficaz y barato tanto en el desarrollo como en la compra.
También se requiere una serie de características como fiabilidad, facilidad de mantenimiento y de uso, eficiencia, etc.

2. La Ingeniería de Software
Según la definición del IEEE, citada por [Lewis 1994] " software es la suma total de los programas de computadora, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo". Según el mismo autor, "un producto de software es un producto diseñado para un usuario". En este contexto, la Ingeniería de Software (SE del inglés Software Engineering) es un enfoque sistemático del desarrollo, operación, mantenimiento y retiro del software", que en palabras más llanas, se considera que "la Ingeniería de Software es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas (eficaces en costo o económicas) a los problemas de desarrollo de software", es decir, "permite elaborar consistentemente productos correctos, utilizables y costo-efectivos" [Cota 1994].
El proceso de ingeniería de software se define como "un conjunto de etapas parcialmente ordenadas con la intención de logra un objetivo, en este caso, la obtención de un producto de software de calidad" [Jacobson 1998].El proceso de desarrollo de software "es aquel en que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseño y el diseño implementado en código, el código es probado, documentado y certificado para su uso operativo". Concretamente "define quién está haciendo qué, cuándo hacerlo y cómo alcanzar un cierto objetivo" [Jacobson 1998].

Una definición precisa aún no ha sido contemplada en los diccionarios, sin embargo se pueden citar las enunciadas por algunos de los más prestigiosos autores:
• Ingeniería de Software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978)
• Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como Desarrollo de Software o Producción de Software ( Bohem, 1976).
• 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 (Bauer, 1972).

3. la ingeniería de sistemas
Ingeniería de sistemas es un modo de enfoque interdisciplinario que permite estudiar y comprender la realidad, con el propósito de implementar u optimizar sistemas complejos. Puede verse como la aplicación tecnológica de la teoría de sistemas a los esfuerzos de la ingeniería, adoptando en todo este trabajo el paradigma sistémico. La ingeniería de sistemas integra otras disciplinas y grupos de especialidad en un esfuerzo de equipo, formando un proceso de desarrollo estructurado.
Una de las principales diferencias de la ingeniería de sistemas respecto a otras disciplinas de ingeniería tradicionales, consiste en que la ingeniería de sistemas no construye productos tangibles. Mientras que los ingenieros civiles podrían diseñar edificios o puentes, los ingenieros electrónicos podrían diseñar circuitos, los ingenieros de sistemas tratan con sistemas abstractos como software con ayuda de las metodologías de la ciencia de sistemas, y confían además en otras disciplinas para diseñar y entregar los productos tangibles que son la realización de esos sistemas.
4. Campos relacionados
Muchos de los campos relacionados podrían ser considerados con estrechas vinculaciones a la ingeniería de sistemas. Muchas de estas áreas han contribuido al desarrollo de la ingeniería de sistemas como área independiente.
Sistemas de Información
Un Sistema de Información o (SI) es un conjunto de elementos que interactúan entre sí con el fin de apoyar las actividades de una empresa o negocio. No siempre un Sistema de Información debe estar automatizado, y es válido hablar de Sistemas de Información Manuales. Normalmente se desarrollan siguiendo Metodologías de Desarrollo de Sistemas de Información.
Investigación de operaciones
La Investigación de Operaciones o (IO) se enseña a veces en los departamentos de ingeniería industrial o de matemática aplicada, pero las herramientas de la IO son enseñadas en un curso de estudio en Ingeniería de Sistemas. La IO trata de la optimización de un proceso arbitrario bajo múltiples restricciones.
Ingeniería de sistemas cognitivos
La ingeniería de sistemas cognitivos es una rama de la ingeniería de sistemas que trata los entes cognitivos, sean humanos o no, como un tipo de sistemas capaces de tratar información y de utilizar recursos cognitivos como la percepción, la memoria o el procesamiento de información.

5.Objetivos de la ingeniería de software

En la construcción y desarrollo de proyectos se aplican métodos y técnicas para resolver los problemas, la informática aporta herramientas y procedimientos sobre los que se apoya la ingeniería de software.

• mejorar la calidad de los productos de software
• aumentar la productividad y trabajo de los ingenieros del software.
• Facilitar el control del proceso de desarrollo de software.
• Suministrar a los desarrolladores las bases para construir software de alta calidad en una forma eficiente.
• Definir una disciplina que garantice la producción y el mantenimiento de los productos software desarrollados en el plazo fijado y dentro del costo estimado.

* Interconexión: (aumento en la comunicación)
Muchas empresas aumentan sus vías de comunicación por medio del desarrollo de redes para este fin, dichas vías abarcan todo el país y les permiten acelerar el flujo de información dentro de sus oficinas y otras instalaciones que no se encuentran en la misma localidad.
Una de las características más importantes de los sistemas de información para oficinas es la transmisión electrónica de información, como por ejemplo, los mensajes y los documentos.

6. Competitividad
Los sistemas de información computacionales son un arma estratégica, capaz de cambiar la forma en que la compañía compite en el mercado, en consecuencia éstos sistemas mejoran la organización y la ayudan a ganar “ventaja competitiva”, sin embargo, si los competidores de la compañía tienen capacidades mas avanzadas para el procesamiento de información, entonces los sistemas de información pueden convertirse en una “desventaja competitiva”.
Una organización puede ganar ventaja competitiva a través de sus sistemas de información de diferentes formas.

* Asegurar clientes:
Como los clientes son los más importantes para una organización, los directivos buscan diferentes formas para conseguir nuevos clientes y mantener los que tienen.

* Dejar fuera a los competidores:
Pasar sobre los competidores puede ser un inconveniente si ellos se encuentran la forma para duplicar los logros de la compañía, los sistemas de información pueden ser la base para dejar fuera del mercado a la competencia ya sea el disuadir sus intentos por ingresar al mercado o creándoles obstáculo para su entrada.

*Mejores acuerdos con los proveedores:
En los negocios, los proveedores también tienen importancia estratégica.
*Formar bases para nuevos productos
Los sistemas de información también forman la base de muchos productos y servicios nuevos.


7. Estrategias para su desarrollo

Los sistemas de información basados en computadoras sirven para diversas finalidades que van desde el procesamiento de las transacciones de una empresa hasta proveer de la información necesaria para decidir sobre asuntos que se presentan con frecuencia.
En algunos casos los factores que deben considerarse en un proyecto de sistema de información, como el aspecto más apropiado de la computadora o la tecnología de comunicaciones que se va a utilizar, el impacto del nuevo sistema sobre los empleados de la empresa y las características específicas que el sistema debe tener se pueden determinar de manera secuencial. Todas estas situaciones están determinadas por tres métodos básicos:

8. método de investigación
Es una especie de brújula en la que no se produce automáticamente el saber, pero que evita perdernos en el caos aparente de los fenómenos, aunque solo sea porque nos indica como no plantear los problemas y como no sucumbir en el embrujo de nuestros prejuicios predilectos."
El método independiente del objeto al que se aplique, tiene como objetivo solucionar problemas.
9. Método del ciclo de vida clásico

El método del ciclo de vida para desarrollo de sistemas es el conjunto de actividades que los analistas, diseñadores y usuarios realizan para desarrollar e implantar un sistema de información.
El método del ciclo de vida para el desarrollo de sistemas consta de las siguientes actividades:

1) Investigación preliminar

La solicitud para recibir ayuda de un sistema de información pueden originarse por una persona, cuando se formula la solicitud comienza la primera actividad del sistema. Esta actividad tiene tres partes:

*Aclaración de la solicitud
Antes de considerar cualquier investigación de sistemas, la solicitud de proyecto debe examinarse para determinar con precisión lo que el solicitante desea; ya que muchas solicitudes que provienen de empleados y usuarios no están formuladas de manera clara.

*Estudio de factibilidad
En la investigación preliminar un punto importante es determinar que el sistema solicitado sea factible. Existen tres aspectos relacionados con el estudio de factibilidad, que son realizados por los general por analistas capacitados o directivos:

-Factibilidad técnica.
Estudia si el trabajo para el proyecto, puede desarrollarse con el software y el personal existente, y si en caso de necesitar nueva tecnología, cuales son las posibilidades de desarrollarla (no solo el hardware).

-Factibilidad económica.
Investiga si los costos se justifican con los beneficios que se obtienen, y si se ha invertido demasiado, como para no crear el sistema si se cree necesario.

-Factibilidad operacional:
Investiga si será utilizado el sistema, si los usuarios usaran el sistema, como para obtener beneficios.

* Aprobación de la solicitud
Hay proyectos que son deseables y factibles deben incorporarse en los planes y en algunos casos el desarrollo puede comenzar inmediatamente, aunque lo común es que los miembros del equipo de sistemas estén ocupados en otros proyectos.

2) Determinación de los requisitos del sistema.
Los analistas, al trabajar con los empleados y administradores, deben estudiar los procesos de una empresa para dar respuesta a ciertas preguntas claves.

3)Diseño del sistema.(diseño lógico)
El diseño de un sistema de información responde a la forma en la que el sistema cumplirá con los requerimientos identificados durante la fase de análisis.
Es común que los diseñadores hagan un esquema del formato o pantalla que esperan que aparezca cuando el sistema está terminado, se realiza en papel o en la pantalla de una terminal utilizando algunas de las herramientas automatizadas disponibles para el desarrollo de sistemas.

4) Desarrollo de software (diseño físico).
Los encargados de desarrollar software pueden instalar software comprado a terceros o escribir programas diseñados a la medida del solicitante. La elección depende del costo de cada alternativa, del tiempo disponible para escribir el software y de la disponibilidad de los programadores.

5) Prueba de sistemas.
Durante esta fase, el sistema se emplea de manera experimental para asegurarse que el software no tenga fallas, es decir, que funciona de acuerdo con las especificaciones y en la forma en que los usuarios esperan que lo haga.

6) Implantación y evaluación.
La implantación es el proceso de verificar e instalar nuevo equipo, entrenar a los usuarios, instalar la aplicación y construir todos los archivos de datos necesarios para utilizarla.
Los sistemas de información deben mantenerse siempre al día, la implantación es un proceso de constante evolución.

10. Proceso Unificado y msf complementos tecnológicos
Según [M&R 1998], "más que una metodología, Microsoft Solutions Framework (MSF) es una serie de modelos flexibles interrelacionados que guían a una organización sobre como ensamblar los recursos, el personal y las técnicas necesaria para asegurar que su infraestructura tecnológica y sus soluciones cumplan los objetivos de negocio. MSF mantiene una relación clara entre los objetivos de negocio y las implementaciones tecnológicas".
"MSF se puede utilizar por sí mismo o con otras herramientas y técnicas como el Proceso Rational [Proceso Unificado] para planear, construir y administrar el desarrollo de soluciones de negocio a la medida" [M&R 1998].
"El proceso Unificado es un proceso de desarrollo de software configurable que se adapta a proyectos que varían en tamaño y complejidad. Se basa en muchos años de experiencia en el uso de la tecnología de objetos en el desarrollo de software de misión crítica en una variedad de industrias. Uno de los componentes clave es el UML" [M&R 1998].
MSF proporciona las técnicas ligadas a la tecnología y el Proceso Unificado la guía detallada para el desarrollo de software minimizando los riesgos.
El Proceso Unificado ha adoptado un enfoque que se caracteriza por:
El Proceso Unificado y MSF se enfocan en la arquitectura como el centro del desarrollo para asegurar que el desarrollo basado en componentes sea clave para un alto nivel de reuso.
La concepción es definir el alcance del proyecto y definir el caso de uso. La elaboración es proyectar un plan, definir las características y cimentar la arquitectura. La construcción es crear el producto y la transición es transferir el producto a sus usuarios [Booch 1998].

Figura 1. Estructura del Proceso Unificado

Según [Microsoft 1997], el diseño de software se realiza a tres niveles: conceptual, lógico y físico.
Un ingeniero de software necesita de herramientas, entre ellas las herramientas de Rational son las más avanzadas, pero son muy costosas. También puede utilizar las herramientas de oficina como un editor de textos, un modelador de datos, etc., muchas de ellas son de código abierto y aún están de desarrollo. Utiliza las que más te sean de utilidad.

Diseño Conceptual
El diseño conceptual se considera como un análisis de actividades y consiste en la solución de negocios para el usuario y se expresa con los casos de uso.

Diseño Lógico
El diseño lógico es independiente de la tecnología. El diseño lógico refina, organiza y detalla la solución de negocios y define formalmente las reglas y políticas específicas de negocios.
11. Método de desarrollo por análisis estructurado
Muchos especialistas en sistemas de información reconocen la dificultad de comprender de manera completa sistemas grandes y complejos. El método de desarrollo del análisis estructurado tiene como finalidad superar esta dificultad por medio de:

El método incorpora elementos tanto de análisis como de diseño
El análisis estructurado se concentra en especificar lo que se requiere que haga el sistema o la aplicación. Permite que las personas observen los elementos lógicos (lo que hará el sistema) separados de los componentes físicos (computadora, terminales, sistemas de almacenamiento, etc.). Después de esto se puede desarrollar un diseño físico eficiente para la situación donde será utilizado.

El diseño Estructurado es otro elemento del Método de Desarrollo por Análisis Estructurado que emplea la descripción gráfica, se enfoca en el desarrollo de especificaciones del software.
El objetivo del Diseño Estructurado es programas formados por módulos independientes unos de otros desde el punto de vista funcional.
El Diseño Estructurado es una técnica específica para el diseño de programas.

La herramienta fundamental del Diseño Estructurado es el diagrama estructurado que es de naturaleza gráfica y evitan cualquier referencia relacionada con el hardware o detalles físicos. Su finalidad no es mostrar la lógica de los programas (que es la tarea de los diagramas de flujo). Los Diagramas Estructurados describen la interacción entre módulos independientes junto con los datos que un módulo pasa a otro cuando interacciona con él.



12. métodos empíricos
Definidos de esa manera por cuanto su fundamento radica en la percepción directa del objeto de investigación y del problema.
OBSERVACIÓN CIENTÍFICA
El investigador conoce el problema y el objeto de investigación, estudiando su curso natural, sin alteración de las condiciones naturales, es decir que la observación tiene un aspecto contemplativo.
LA EXPERIMENTACIÓN CIENTÍFICA
Implica alteración controlada de las condiciones naturales, de tal forma que el investigador creara modelos, reproducirá condiciones, abstraerá rasgos distintivos del objeto o del problema. La experimentación depende del grado de conocimiento del investigador, a la naturaleza, a las circunstancias del objeto y al problema de investigación, es decir no siempre se podrá realizar experimentación. La experimentación debe seguir ciertas reglas:
a. el fenómeno de que se trate debe aislarse para estudiarlo mejor
b. El experimento debe repetirse en las mismas circunstancias para comprobar si siempre es el mismo
c. Las condiciones del experimento deben alterarse para investigar en que grado modifican al fenómeno
d. El experimento debe durar el tiempo suficiente para que se produzca el fenómeno deseado.

Es difícil escoger un método como el ideal y único camino para realizar una investigación, pues muchos de ellos se complementan y relacionan entre si. A mi consideración el método mas completo es el método HIPOTÉTICO-DEDUCTIVO ya que en él se plantea una hipótesis que se puede analizar deductiva o inductivamente y posteriormente comprobar experimentalmente, es decir que se busca que la parte teórica no pierda su sentido, por ello la teoría se relaciona posteriormente con la realidad. Como notamos una de las características de este método es que incluye otros métodos, el inductivo o el deductivo y el experimental, que también es opcional. Explicare brevemente la fortalezas que yo noto en cada uno de estos "submétodos", finalmente la reunión de todas estas fortalezas conformaran los argumentos de mi elección sobre el método hipotético deductivo.

La deducción, tiene a su favor que sigue pasos sencillos, lógicos y obvios que permiten el descubrimiento de algo que hemos pasado por alto.
La inducción, encontramos en ella aspectos importantes a tener en cuenta para realizar una investigación como por ejemplo la cantidad de elementos del objeto de estudio, que tanta información podemos extraer de estos elementos, las características comunes entre ellos, y si queremos ser más específicos como en el caso de la inducción científica, entonces tomaremos en cuenta las causas y caracteres necesarios que se relacionan con el objeto de estudio.

13. Diagrama de estructura de datos
Es una descripción de la relación entre entidades (personas, lugares, eventos y objetos) de un sistema y el conjunto de información relacionado con la entidad.
Finalidades:
1 Verificar los requerimientos de información.
2 Describir los datos asociados con las entidades.
3 Mostrar la relación entre entidades.
4 Comunicar los requerimientos de datos a un diseñador de archivos o administrador de la base de datos.

Notación

Una común se usa al preparar los diagramas de estructura de datos. Las entidades se representan mediante rectángulos, con el nombre de la entidad en la parte de arriba y una lista de atributos que describan la entidad. Cada entidad se puede identificar mediante un atributo llave.


14. Gráfica de estructura

Muestra con símbolos la relación entre los módulos de procesamiento y el software de la computadora. Describen la jerarquía de los módulos componentes y los datos que serán transmitidos entre ellos. Incluye el análisis de las transformaciones entrada-salida y el análisis de transacción.

Se pueden usar diagramas de flujos de datos para representar el sistema a cualquier nivel de abstracción. El diagrama de flujo de dato de nivel 0 se llama diagrama de contexto y en él el sistema está representado por un solo proceso, que identifica cual es la función principal del sistema, mostrando además, los flujos de información que lo relacionan con otros sistemas: las entidades externas.

Los sistemas pueden desarrollarse con métodos y lenguajes de programación convencionales, aunque no tengan todas las características y toques finales de un sistema terminado. Quizás los informes no tengan encabezados, logos, etc., falten controles de entradas y procesamiento. Lo importante es el ensayo, y hallar los requerimientos.

15. Etapas del método de prototipos

1- Identificación de requerimientos conocido.

La determinación de los requerimientos de una aplicación es tan importante para el método de desarrollo de prototipo como lo es para los métodos del ciclo clásico de desarrollo de sistemas o análisis estructurado (aunque las tácticas son diferentes.

2- Desarrollo de un modelo de trabajo
Es útil comenzar el proceso de construcción del prototipo con el desarrollo de un plan general que permita a las personas conocer lo que se espera de ellas y del proceso de desarrollo. Es difícil, y en ocasiones imposibles, fijar una fecha tentativa de terminación. La experiencia con el sistema es la que determina eventualmente cuando en sistema esta terminado.

3) El prototipo y el usuario
Es responsabilidad del usuario trabajar con prototipo y evaluar su característica y operación.

4) Revisión del prototipo
Información sobre los que les gusta y los que les desagrada a los usuarios. La información obtenida tendrá influencia sobre las características de la siguiente versión de la aplicación.

5) Repetición del proceso las veces que sea necesario.
El proceso finaliza cuando los usuarios y analistas están de acuerdo en que el sistema ha evolucionado lo suficiente como para incluir todas las características necesarias o cuando ya es evidente que no se obtendrá mayor beneficio.

6) El abandono o dejarlo como esta:
Cuando se verifica de que no es posible desarrollar el sistema para satisfacer los objetivos deseados, ya sea por la tecnología existente o por el factor económico.

16. Coordinación y Gestión del proyecto.

La gestión del proyecto presupone establecer condiciones para el desarrollo del mismo. Involucra actividades de: planificación, estimación de recursos, seguimiento y control y evaluación del proyecto.
• La planificación de proyectos se define como la predicción de la duración de las actividades y tareas a nivel individual.
• La estimación se define como la predicción de personal, esfuerzo y costo que se requerirá para terminar todas las actividades y productos conocidos asociados con el proyecto. El tamaño del producto a desarrollar es una de las primeras tareas en la gestión del proyecto.
• El seguimiento de proyectos es la recolección de datos y su acumulación sobre recursos consumidos, costos generados asociados con un proyecto. La medición en los proyectos de desarrollo de software es una actividad fundamental para la mejora de la productividad, el costo y la calidad del producto final.

Se estiman y asignan los recursos necesarios a fin de ejecutar las distintas tareas que demanda el proyecto. Se identifican y seleccionan estándares, metodologías y herramientas para la gestión y ejecución del mismo y, por último, se prepara y establece un plan para su implementación adecuada y oportuna. El plan de Gestión del Proyecto Software que conducirá el desarrollo se produce como culminación de este proceso.

17. Mediciones y estimaciones

El software al ser intangible, no tener peso, ni volumen, ni superficie, etc. se mide a través de diversos aspectos clave en el desarrollo. La medición determina cuales son los aspectos y proporcionan métodos para medirlos.
La medición y estimación atacan los tres problemas claves de la ingeniería del software:

1 Estimar costos y recursos en un proyecto software
2 Garantizar la calidad del producto final
3 Mejorar la productividad del ingeniero de software durante el desarrollo.
Teniendo en cuenta estos objetivos, las métricas se centran en cuatro aspectos:

Para estimar los recursos es necesario tener en cuenta una serie de factores de riesgo que influyen sustancialmente en la precisión de las estimaciones de los recursos humanos necesarios para la realización del proyecto.
Herramientas para análisis
Apoyan el proceso de formular las características que el sistema debe tener para satisfacer los requerimientos deseados durante las actividades de análisis. Incluye:

Los analistas utilizan las herramientas para el diseño de sistemas desde el inicio de la era de las computadoras. Ahora a las herramientas se le están dando un nuevo significado en el diseño de software.

Herramientas para ingeniería Software: apoyan el proceso de formular diseños de software, incluyendo procesamientos y controles.
Herramientas integrales
Proporcionan un ambiente que automatiza tareas claves a lo largo del proceso de desarrollo. Estas herramientas facilitan el diseño, administración y mantenimiento del código. Brinda un ambiente eficiente para crear, almacenar, manipular y documentar sistemas.
18. Reingeniería e ingeniería inversa

Los conceptos de reingeniería e ingeniería inversa están ligados al desarrollo de software a gran escala, donde una mejora en proceso de este desarrollo supone un aumento en la competitividad de la empresa.
Aunque hay que tener en cuenta que esta mejora es, en general a largo plazo (normalmente de uno a dos años) ambas actividades, están orientadas a automatizar el mantenimiento de aplicaciones. Esta es una tarea que consume gran cantidad de recursos, por lo que cualquier reducción en el tiempo y recursos empleados en ella supone una importante mejora en la productividad del proceso. Este es el principal objetivo de la reingeniería. Se trata, de analizar el código o el diseño actual y modificarlo con la ayuda de herramientas automáticas para traducirlos a códigos mas estructurados, y más eficientes.
Dentro de la reingeniería, el proceso de pasar del código a una descripción de mas alto nivel es lo que se denomina:
Ingeniería inversa.

La reingeniería e ingeniería inversa prolongan la vida del software.
Dado que es una labor estratégica, es conveniente conocer cuando conviene realizar la tarea de reingeniería para una aplicación y cuándo es más rentable sustituirla e implementar una nueva. Las aplicaciones para el primer paso, son aquellas en la que se produce las siguientes situaciones:
• Fallos frecuentes, que son difíciles de localizar
• Son poco eficientes, pero realizan la función esperada
• Dificultades en la integración con otros sistemas
• Calidad pobre del software final

El desarrollo de software con reúso consiste en desarrollar una aplicación usando software ya existente. Cualquier profesional lo utiliza
El desarrollo de software para reuso consiste en la construcción de un sistema con la intención de reutilizar partes de él en futuros desarrollos. Con software a gran escala, un buen profesional con experiencia puede desarrollarlo.
Sin embargo, la reutilización del software no cubre solo el reuso de códigos, abarca todo un amplio de posibilidades en los diferentes niveles, metodología, ciclos de vida, planes del proyecto, especificaciones de requisitos, diseños, arquitectura software, planes de validación, juegos de prueba y documentación.

19. Ingeniería software basada en agentes
Genesereth (1992) proponen los agentes como un medio de integración del software.
Los agentes encapsulan los programas y mediante la definición de unas primitivas,
Permiten el intercambio de órdenes y datos entre los programas. La principal diferencia del
enfoque de agentes es la flexibibilidad de la comunicación, que se basa en la existencia de
una ontología compartida por las aplicaciones definida en un lenguaje de representación del
conocimiento denominado KIF (Formato de Intercambio del Conocimiento; Knowledge Interchange Format)
y un lenguaje y protocolo para definir las primitivas de comunicación denominado KQML
(Lenguaje de manipulación y consulta de conocimiento; Knowledge Query and Manipulation Language).

20. Comentario final... para reflexionar

Todo lo que se expresó en este artículo, muestra tal como la teoría aconseja que se deben hacer las cosas. En la práctica, en la ingeniería de software comúnmente se menosprecia el valor de una metodología para crear el software. Esto, a mi juicio, está demeritando la incipiente profesión de Ingeniero de Software en particular, la del especialista en Tecnología de Información, en general y a las empresas de consultoría en software, ya que generalmente se cede al "chantaje" profesional del jefe o del cliente quien ordena la construcción del software, con argumentos como "no hay tiempo para eso, pónte a programar".
Sugiero que consultes, como referencia, el Código de Etica del Ingeniero en Software y de la Práctica Profesional en el site de la Association for Computing Machinery aquí: http://www.acm.org/serving/ethics.html.
21. Bibliografía

[Booch 1998] Booch G. 1998.
Software Architecture and the UML.
Presentación disponible en:
http://www.rational.com/uml como arch.zip.
[Conallen 1999B] Conallen, J. "UML Extension for Web Applications 0.91" Drafted Conallen, Inc. 22-Mar-1999 Disponible en: http://www.conallen.com/technologyCorner/webextension/WebExtension091.htm
[Cota 1994] Cota A. 1994 "Ingeniería de Software". Soluciones Avanzadas. Julio de 1994. pp. 5-13.
[Greiff 1994] Greiff W. R. Paradigma vs Metodología; El Caso de la POO (Parte II). Soluciones Avanzadas. Ene-Feb 1994. pp. 31-39.
[Jacobson 1998] Jacobson, I. 1998. "Applying UML in The Unified Process" Presentación. Rational Software. Presentación disponible en http://www.rational.com/uml como UMLconf.zip
[Lewis 1994] Lewis G. 1994. "What is Software Engineering?" DataPro (4015). Feb 1994. pp. 1-10.
[Microsoft 1997] Microsoft 1997. Microsoft Solutions Framework 1.0. Microsoft Corporation. USA.
[M&R 1998] Microsoft y Rational 1998. A White Paper on the Benefits of Integrating Microsoft Solutions Framework and The Rational Process. Rational Software Corporation y Microsoft Corporation. Documento msfratprocs.doc Disponible en http://www.rational.com/uml/papers.
Maestría en Ciencias de la Computación. Universidad Autónoma Metropolitana-Azcapotzalco. México, D.F. En prensa.

Sugiero que consultes, como referencia, el Código de Etica del Ingeniero en Software y de la Práctica Profesional en el site de la Association for Com puting Machinery aquí: http://www.acm.org/serving/ethics.html.