Metodología para la asimilación de ingeniería de software ...

128
INSTITUTO TECNOLOGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY CAMPUS ESTADO DE MEXICO METODOLOGIA PARA LA ASIMILACION DE INGENIERIA DE SOFTWARE EN MEXICO TESIS QUE PRESENTA LUIS HUMBERTO CRUZ AGUILAR MAESTRIA EN SISTEMAS DE INFORMACION ENERO, 1999

Transcript of Metodología para la asimilación de ingeniería de software ...

Page 1: Metodología para la asimilación de ingeniería de software ...

INSTITUTO TECNOLOGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY

CAMPUS ESTADO DE MEXICO

METODOLOGIA PARA LA ASIMILACION DE INGENIERIA DE SOFTWARE EN MEXICO

TESIS QUE PRESENTA

LUIS HUMBERTO CRUZ AGUILAR

MAESTRIA EN SISTEMAS DE INFORMACION

ENERO, 1999

Page 2: Metodología para la asimilación de ingeniería de software ...

INSTITUTO TECNOLOGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY

CAMPUS ESTADO DE MEXICO

METODOLOGIA PARA LA ASIMILACION DE INGENIERIA DE SOFTWARE EN MEXICO

TESIS QUE PRESENTA

LUIS HUMBERTO CRUZ AGUILAR

MAESTRIA EN SISTEMAS DE INFORMACION

ENERO, 1999

Page 3: Metodología para la asimilación de ingeniería de software ...

INDICE

INTRODUCCION 7

CAPITULO l. INGENIERIADE SOFTWARE 13 l ¿ QUE ES INGENIERIADE SOFTWARE? 15 1.1.1 DEFINICIÓN DE SOFTWARE 15 1.1.2 DEFINICIÓN DE INGENIBRÍA DE SOFTWARE 17 1.1.3 SOFTW ~~ DE CALIDAD 18

1.2 APLICACIONES DE LA INGENIBRÍA DE SOFTWARE 21 1.3 TECNICAS DE INGENIERIA DE SOFTWARE 22

1.3.1 TÉCNICAS DE LA FASE DE PLANEACIÓN 23 1.3 .2 TÉCNICAS DE LA FASE DE ANÁLISIS 24 1.3.3 TÉCNICAS DE LA FASE DE DISEÑO 24 1.3.4 TÉCNICAS DE LA FASE DE PROGRAMACIÓN 25 1.3.5 TÉCNICAS DE LA FASE DE PRUEBAS 26 1.3.6 TÉCNICAS DE LA FASE DE MANTENIMIENTO 27

1.4 HERRAMIENTAS DE INGENIBRIA DE SOFTWARE 27 1.4.1 HERRAMIENTAS PARA AD:MINISTRACIÓN DE PROYECTOS 27 1.4.2 HERRAMIENTAS PARA ANÁLISIS DE SISTEMAS 28 1.4.3 HERRAMIENTAS CASE 29 1.4.4 HERRAMIENTAS PARA PROGRAMACIÓN, PRUEBAS 29 1.4.5 HERRAMIENTAS PARA CONSTRUCCIÓN DE PROTOTIPOS 30

CAPITULO 2. LA INGENIERIA DE SOFTWARE EN MÉXICO 33 2.1 ANTECEDENTES DE APLICACION EN MÉXICO 34

2.1.1 ANTECEDENTES DE LA INGENIBRÍA DE SOFTWARE 34 2.1.2 :MERCADO NACIONAL DE BIENES Y SERV. INFORMÁTICOS 36 2.1.3 :MERCADO DE PROGRAMACIÓN (SOFTWARE) 37 2.1.4 DEMANDA DE BIENES Y SERVICIOS 39 2.1.5 FORMACIÓN DE RECURSOS HUMANOS 40

2.2 CARACTERISTICAS DE LAS EMPRESAS QUE USAN INGENIBRIA DE SOFTWARE

2.3 TECNICAS Y HERRAMIENTAS MAS UTILIZADAS 2.4 PROBLEMATICADE ASIMILACION

CAPITULO 3 :METODOLOGIA PARA LA ASIMILACION DE INGENIERIA DE SOFTWARE

3 .1 ESTUDIO DEL AREA DE SISTEMAS 3 .1.1 INVENTARIO DE HARDWARE Y SOFTWARE

43 46 48

53 54 55

Page 4: Metodología para la asimilación de ingeniería de software ...

3.1.2 NIVEL DE PREPARACIÓN Y EXPERIENCIA DEL PERSONAL 56 3.1.3 TÉCNICAS YHERRAMIENfAS UTILIZADAS ACTUALMENTE 57 3 .1.4 ORGANIZACIÓN DEL ÁREA DE SISTEMAS 59

3.2 PLANEACION DEL PROYECTO DE ASIMILACION 62 3.2.1 DEFINICIÓN DEL OBJETIVO DEL PROYECTO 63 3.2.2 ACTIVIDADES Y TIEMPO 64 3.2.3 EQUIPO DE TRABAJO 64 3.2.4 COSTO DEL PROYECTO 65 3 .2.5 HARDWARE A UTILIZAR 66 3.2.6 METODOLOGÍA SELECCIONADA 67 3.2.7 SELECCIÓN DE HERRAMIENTAS Y TÉCNICAS 68 3.2.8 APROBACIÓN DEL PROYECTO DE ASIMILACIÓN 70

3.3 DESARROLLO DEL PROYECTO 71 3.3.1 CAPACITACIÓN DEL PERSONAL 71 3.3.2 DESARROLLO DE UNA PRUEBA PILOTO 72 3.3.3 EJEMPLO DE UNA METODOLOGÍA PARA PRUEBA PILOTO 73

3.3.3.1 Requerimientos del sistema 75 3.3.3.2 Diseño 78 3 .3 .3 .3 Construcción 79 3 .3 .3 .4 Aceptación 81 3.3.3.5 Soporte 82

3.3.4 REGISTRO DE ESTADÍSTICAS DEL PROYECTO 83 3.4 EV ALUACION DE RESULTADOS 84

3.4.1 PROCESAMIENTO DE DATOS Y ESTADÍSTICAS 84 3.4.2 COSTO DEL PRODUCTO 85 3.4.3 CALIDAD DEL PRODUCTO OBTENIDO 86 3.4.4 OBJETIVOS INICIALES 86 3.4.5 PRESENTACIÓN DE RESULTADOS DEL PROYECTO 87

3.5 IMPLANTACIÓN DE INGENIERÍA DE SOFTWARE 87 3.5.1 ESTRATEGIA DE IMPLANTACIÓN 88 3.5.2 CAPACITACIÓN DE TODO EL PERSONAL 89 3.5.3 COSTO DE LA IMPLANTACIÓN 89

3.6 SEGUIMIENTO 90 3.6.1 CONSIDERACIONES TÉCNICAS 90 3.6.2 CONSIDERACIONES ECONÓMICAS 91 3.6.3 CONSIDERACIONES DE ORGANIZACIÓN 91

3.7 CONCLUSION 92

CAPITULO 4. FUTURO DE LA INGENIERIA DE SOFTWARE EN MÉXICO 95 4.1 CASE (COMPUTER AIDED SOFTWARE ENGINEERING) 97

4.1.1 DEFINICIÓN DE CASE 98 4.1.2 HISTORIA DE CASE 98 4.1.3 OBJETIVOS DE CASE 99 4.1.4 BENEFICIOS DE CASE 99

Page 5: Metodología para la asimilación de ingeniería de software ...

4.1.5 CASE WORKBENCH 4.1.6 INTEGRACIÓN DE CASE EN EMPRESAS

4.2 LENGUAJES DE CUARTA GENERACION (4GL) 4.2.1 MÓDULOS QUE FORMAN UN 4GL 4.2.3 USOS DE LOS 4GL

4.3 REINGENIERIA

100 100 101 102 102 103

4.3.1 USODEREINGENIERÍAPARARECONSTRUIRSOFTWARE 104 4.3.2 SERVICIOS DE REINGENIERÍA 105

4.4 NUEVAS TÉCNICAS DE INGENIERIA DE SOFTWARE 107 4.5 EL FUTURO DE LA INTEGRACION 107

CONCLUSIONES Y RECOMENDACIONES 11 O

ANEXO A. GLOSARIO DE TÉRMINOS 117

ANEXO B. HERRAMIENTAS CASE 129

BIBLIOGRAFIA 136

Page 6: Metodología para la asimilación de ingeniería de software ...

INTRODUCCION

Son las cuatro de la tarde en la oficina principal de McMaster Carr Supply Company, con sede en Chicago. Una de las cincuenta y dos operadoras con ayuda de una terminal de computadora, atiende un pedido por teléfono de un cliente en Pittsburgh, mientras tanto en otra estación de trabajo se proporciona información de donde se encuentra el embarque enviado ayer a Denver. Otro operador verifica que las órdenes de compra depositadas por una empresa automotriz de Detroit en el sistema a través de modem, estén correctas. Al mismo tiempo, en otra terminal, el operador atiende a un cliente que define las políticas de recibo y pago a las que se debe ajustar McMaster al venderle mercancía. Todo esto se realiza en el mismo instante gracias a una red local de computadoras conectadas en algunos casos a las de los clientes principales y un poderoso sistema o programa de software desarrollado exclusivamente para cumplir con el más mínimo requerimiento.

Es muy compleja la operación y así es el software por medio del cual se maneja todo. Este sistema es una de las armas estratégicas con la que se vale esta comercializadora de productos que vende a plantas de manufactura, para ganar más clientes, no sólo en Estados Unidos, sino en todo el mundo. Sin las facilidades y flexibilidad que proporciona dicho sistema, la operación cotidiana seria un caos.

Las computadoras rivalizan con la invención de la escritura como una de las más profundas innovaciones de la historia humana y están "rehaciendo el mundo a velocidad fenomenal", según apuntó el connotado astrónomo y autor, doctor Carl Sagan. [23]

Por otra parte, la información es una parte importante en la vida de todo ser humano, es necesaria en todos los aspectos, tanto en los cotidianos como en los laborales. Si la información es oportuna, completa y exacta, mejora la toma de decisiones y proporciona el poder para enfrentar cualquier tipo de situación.

Los sistemas de información existen desde hace siglos, algunos entregaban información inexacta, incompleta y sin actualizar. La informática provee nuevos conceptos para mejorar el funcionamiento de dichos sistemas, dando respuestas más rápidas y cubriendo mayor número de aspectos que los sistemas tradicionales.

Los datos proporcionan una base de la cual se deriva la información y que sirve para el análisis cuantitativo. La información ensamblada por la recopilación y el manejo de los datos, da las bases para tomar decisiones.

Page 7: Metodología para la asimilación de ingeniería de software ...

8 Los recursos de la administración, frecuentemente son mencionados como las tres M

(Manpower, Money y Materials) fuerza laboral, dinero y materiales. La infonnación puede ser considerada un cuarto recurso, porque tiene los atributos de un recurso fisico:

• Tiene valor como el dinero, las materias primas o la mano de obra.

• Tiene características que penniten su medición, en ténninos de uso, duración y efecto sobre otros recursos.

• Puede ser valorada en términos de recolección, almacenamiento y recuperación.

• Puede ser presupuestada y controlada.

• Puede evaluarse en ténninos de costo y valor de uso con fines de administración.

Uno de los principales problemas que en la actualidad enfrenta el gobierno, la industria y el público, es la constante aceleración de la demanda de datos e infonnación. Las nuevas tecnologías de computación y comunicaciones penniten la rápida manipulación y almacenamiento masivo de datos.

Se han publicado numerosos artículos técnicos que pronostican con seguridad el curso del desarrollo del hardware en los próximos diez años, sin embargo, sobre el desarrollo de software no se encontrará ese tono de confianza en los escasos artículos que lo mencionan. Y tal vez esto se debe al hecho de que el desarrollo de software continuará siendo más lento, mucho más costoso y dificil que el hardware, debido a que ahora son más complejas las funciones del software (y continuarán siéndolo) que las del hardware.

El software es una parte muy delicada que en ocasiones no se le da la importancia adecuada, debido a la proliferación de equipos de cómputo personales y programas que atacan áreas generales (paquetes de productividad como hojas de cálculo y procesadores de texto) y que relativamente pueden resolver casi todo problema.

Pero en un mundo tan cambiante debido a la cantidad infinita de infonnación que se maneja actualmente, una empresa del mismo giro que otra, tiene necesidades de sistemas de información diametralmente diferentes, porque cada una ataca sus problemas desde distintos puntos de vista. En estos casos los paquetes de software ayudan un poco pero no son la solución completa, es necesario entonces crear programas que satisfagan las necesidades complejas de operación de cada organización.

El desarrollo de complejos sistemas especializados es una tarea que requiere de bastantes recursos, que no se ejecuta con los mismos procedimientos de veinte años atrás. La evolución tecnológica del hardware y el avance en materia de comunicaciones, ha hecho aún más compleja la tarea de desarrollar software. Y la tendencia a crear computadoras más poderosas continua, no así por parte del software. Por esto se han comenzado a difundir los principios de la Ingeniería de Software con ayuda de técnicas y herramientas, que poco a poco se vuelven estándares, para la creación de productos de software.

Page 8: Metodología para la asimilación de ingeniería de software ...

9 Desde el inicio de los sistemas de infonnación basados en computadoras, ha surgido gran

variedad de problemas que con el paso del tiempo se han solucionado. En el presente, algunas dificultades se manifiestan en el desarrollo de este tipo de sistemas van desde el usuario confundido que no sabe como definir los requerimientos de su sistema hasta la completa carencia de documentación de dichos sistemas que impide la labor de mantenimiento.

Tantos cambios han sacudido la nación en los últimos años que las ondas de choque de los temblores de 1985 parecen haberse continuado en el ámbito social, económico, político e industrial, hasta 1995 con la peor crisis económica del país. Planes y enfoques visualizados desde hace años, y otros más de nueva elaboración, han sido puestos en marcha por la presente administración gubernamental.

La informática ha ganado importancia en México porque se aprecia su utilidad como palanca de desarrollo. La denominada Reconversión Industrial incluye en gran medida la modernización a través de la computación o los microprocesadores; no hay equipo moderno que no incorpore componentes electrónicos en su diseño. La modernización va de la mano de las computadoras y el ejecutivo debe tener una actitud de cambio. La información es el combustible de la modernización y el activo más valioso de las empresas, sin embargo, el principal factor negativo, es la falta de cultura informática en una gran parte de los actuales ejecutivos y funcionarios de las organizaciones.

Las nuevas generaciones aún en las aulas o en los niveles bajos de las organizaciones habrá de vencer esta barrera, sin embargo, cada institución debe pugnar por culturiz.ar a sus ejecutivos y hacerles comprender que sin la tecnología informática la modernización no se puede dar.

La tendencia a la modernización en los negocios descansa en la infonnática y el proceso de culturiz.ación es el mayor agente de cambio. En la aurora de la apertura comercial, la empresa que no ha logrado ser eficiente actualmente es posible que sea avasallada por la competencia global. La eficiencia empieza con el flujo de la información.

En muchas empresas del país hay islas de automatización, la parte administrativa automatiza sus aplicaciones desde hace tiempo, pero aún tiene que reunir la información del resto de la planta por medios manuales.

El piso de manufactura se automatiza a medida que sus equipos se modernizan, éstos cuentan ya con componentes electrónicos que controlan los procesos y generan información valiosa, que se reúne también manualmente.

Esto requiere de la elaboración de sistemas de información eficientes y de calidad, desarrollados en corto tiempo para inmediatamente ponerlos a disposición de los usuarios, además deben integrarse dentro de todos los niveles de la organización.

La tendencia es hacia un sistema de información global abarcando interfases para permitir aprovechar de manera automatizada la información resultante de cada área, de manera que fluya junto con el producto sin interrumpir los procesos por la espera de la infonnación manual. F onnar un todo con las aplicaciones administrativas, dará al directivo los parámetros necesarios y oportunos para la toma de decisiones.

Page 9: Metodología para la asimilación de ingeniería de software ...

10

Ante esto, el profesional de infonnática habrá de convertirse en un hombre de negocios que entienda de administración, finanzas, producción y comercialización, por otra parte deberá estar a la vanguardia en la evolución tecnológica en hardware con el propósito de contar con los más recientes adelantos en la materia, y en cuanto a técnicas de Ingeniería de Software, se requiere que domine y maneje las que le permitan hacer desarrollos de sistemas en menor tiempo; todo esto para armar la estructura computacional que soporte el esquema descrito.

Pero aún así, existe rez.ago en el ámbito de desarrollo de programas si este se compara con el progreso del equipo de cómputo, aunque en países como Estados Unidos, este atraso es menor comparado con el nuestro, debido a que constantemente se generan nuevas técnicas para elaborar software. Aquí en México se tienen diferentes formas de atacar el problema, tal vez sin el apoyo de instituciones y empresas dedicadas a la investigación que se ofrece en aquel país, pero sí en ocasiones con las núsmas herranúentas usadas por los vecinos del norte.

Los comentarios de personas que ingresan a laborar a áreas de desarrollo o manteninúento de sistemas, es casi siempre los núsmos en referencia a la falta de documentación de los programas en operación, la carencia de estándares de desarrollo, la poca productividad dentro del medio y sobre todo, el nulo interés de utilizar nuevas metodologías que normen la actividad de desarrollo y manteninúento de software. El cuadro lo completan los usuarios insatisfechos con sistemas ineficientes, directivos molestos por el derroche de recursos y personal del área de sistemas que trabajan como lo apuntó el Prof R. M. Graham en la División Científica de la OTAN en 1989: "Hacemos sistemas como los hermanos Wright construían aviones. Se arman, se lanzan, se estrellan y empezamos otra vez ". [ 15]

Estos y otros problemas graves se mantienen desde hace tiempo en empresas mexicanas, que no desempeñan correctamente sus actividades por no contar con sistemas y software que proporcionen los elementos adecuados para la toma de decisiones.

Si en todas las empresas de México se realiza un esfuerzo para incorporar a sus organizaciones no solo los más avanzado en tecnología sino también los procedinúentos, técnicas y metodologías para su explotación, entonces si será nuestro país un protagonista del progreso mundial. Una de las principales alternativas de solución para resolver los problemas citados anteriormente, es el uso de técnicas y herranúentas de Ingeniería de Software en cualquier tipo de sistema de información para su desarrollo y manteninúento, de manera que se aumente la productividad en este aspecto dentro de las organizaciones. El profesor Vicente López Trueba en su clase de Tópicos de Computación apuntó: "Las empresas mexicanas no podrán estar a la par en cuanto a desarrollo de hardware con sus similares americanas, pero en software es diferente, con el ingenio del mexicano y las herranúentas adecuadas se puede crear software inclusive que pueda comercializarse a nivel mundial".

Por todo lo anterior se desarrolló el presente trabajo, con el objetivo de proporcionar a los profesionales del área de sistemas que están preocupados por aumentar la productividad en el desarrollo y manteninúento de software a la medida de sus empresas, buscando eliminar vicios y problemas relacionados con tal actividad, fomentando el cambio de mentalidad, disciplinando al personal para que use técnicas modernas y herranúentas poderosas.

Page 10: Metodología para la asimilación de ingeniería de software ...

11 Para efectuar este trabajo se emplearon técnicas de investigación documental ( detallada en la

bibliografia proporcionada al final), entrevistas a personal de diferentes empresas y la observación directa.

El desarrollo del presente estudio se inicia en el capítulo 1, con la definición del término Ingeniería de Software, además de sus aplicaciones en el campo del desarrollo de sistemas. También se proporciona un resumen de las más importantes técnicas para desarrollo de software conocidas aplicables en el ciclo de vida de un sistema, dando ejemplos de algunas, así como una lista y breve descripción de las principales herramientas que existen para apoyarlas.

El capítulo 2 denominado "La Ingeniería de Software en México" trata de la importancia de contar con técnicas para desarrollo de sistemas, presenta una breve sembla.nz.a estadística de como ha evolucionado el mercado de bienes y servicios informáticos en nuestro país, así como el crecimiento de los recursos humanos especializados. Se dan las características administrativas, organiz.acionales y ambientales que deben tener las empresas que deseen integrar Ingeniería de Software en sus operaciones. Se incluye además los resultados de un estudio llevado a cabo en diez empresas para conocer la problemática actual en el área.

Posteriormente, en el capítulo 3, se cita la situación actual de muchas áreas de sistemas dentro de las compañías, dando ejemplos de problemas cotidianos. También se propone una metodología que permite, mediante un proyecto piloto, demostrar a la gerencia las ventajas de utilizar técnicas y herramientas de Ingeniería de Software para que en este nivel precisamente, se impulse y apoye su uso.

Enseguida, en el capítulo 4, se describen tres de las más importantes estrategias que impactarán decididamente en el uso de Ingeniería de Software en los próximos años, estas son:

• . CASE ( Computer Aided Software Engineering) o Ingeniería de Software Asistida por computadora.

• 4GL (F ourth Generation Language) o lenguajes de cuarta generación.

• Reingeniería.

De cada una se proporcionan dentro de este trabajo, algunas definiciones y formas de operar de manera que se conozca un poco más a detalle que son y para que se usan.

Por último, se incluyen dos anexos. El primero se refiere a un glosario de términos técnicos dentro de este trabajo, que permita una mejor referencia de lo tratado en todos los capítulos. El segundo anexo contiene una lista de las principales herramientas CASE mencionadas en el capítulo 4, así como una breve descripción y nombre de la empresa que las desarrolló.

Este trabajo es una buena oportunidad para reconocer que se ha comenzado a impulsar la Ingeniería de Software en México y que con ayuda de quienes participan día a día en las labores propias de desarrollo y mantenimiento de software para las empresas, se asimilará y aplicará mayormente para beneficio del país.

Page 11: Metodología para la asimilación de ingeniería de software ...

CAPITULO 1

INGENIERIA DE SOFTWARE

Durante las tres primeras décadas de la informática, el principal desafio era desarrollar el hardware de las computadoras de manera que se redujera el costo de procesamiento y almacenamiento de datos. A lo largo de la década de los 80, los avances en microelectrónica han dado como resultado una mayor potencia en el cálculo a la vez que una reducción de costos.

Hoy el problema es diferente. El principal desafio es reducir el costo y mejorar la calidad de las soluciones basadas en computadoras, soluciones que se implementan con el software.

La disciplina de Ingenieria de Software se caracteriza por su habilidad de repetirse y la aplicación de herramientas y técnicas para la producción de software de alta calidad.

Para beneficiarse al utilizar un enfoque formal de desarrollo de software, se debe ser claro al desarrollar un sistema. La habilidad de repetición implica que se puede usar el mismo método para construir varios sistemas y que otras personas pueden entender y utilizar ese método. La habilidad de medición significa que al seguir una serie de pasos se puede medir el mejoramiento mediante productividad y calidad. En el libro "Control de proyectos de Software", Tom DeMarco indica: ''No se puede controlar lo que no se puede medir". En muchas empresas en México actuaJrnente no se tiene un control al 100°/o del desarrollo de productos de software.

Si se desea una discusión entre quienes trabajan dentro de un área de desarrollo de sistemas, profesionales en computación, solo es necesario pedir que definan calidad. Seguro que nadie va estar de acuerdo con los demás. Desde tres puntos de vista, se puede definir calidad. Para el directivo o gerente de la empresa, el software debe ser económico y permitir que se logren los objetivos institucionales en un futuro. El usuario requiere software fácil de usar, eficiente y libre de errores. El encargado de dar mantenimiento demanda un producto sencillo de modificar.

Page 12: Metodología para la asimilación de ingeniería de software ...

14 Aunque muchos piensan que siempre han desarrollado productos de software de alta calidad

para sus usuarios, el hecho es que existen muchos elementos en el mundo real que se deben considerar y que requiere que se cambie la forma de construir software.

Gracias a las actuales computadoras de escritorio, el poder disponible solo en grandes macrocomputadoras se ha distribuido a los usuarios del área de sistemas. Pero la experiencia en desarrollo de sistemas no ha acompañado al hardware que ha migrado del centro de cómputo. Como consecuencia, los departamentos de usuarios que crean y mantienen sus propias aplicaciones están en peligro de repetir los mismos errores del pasado. Características como documentación del sistema, mantenimiento y confiabilidad deben ser comunes en todo sistema computacional, sin importar si fue desarrollado por programadores experimentados o por novatos.

La pobre calidad no es resultado de falta de información. Los consultores y educadores como Larry Constantine, Edward Yourdon y Tom DeMarco, han escrito y enseñado desde hace 15 años sobre los problemas resultantes del desarrollo de software. Las organizaciones que han adoptado métodos formales han producido software de alta calidad. Pero no fue facil. Las presiones de directivos de niveles medios más preocupados por la fecha de entrega, continuamente obstaculizaron los mejores esfuerzos de aquellos que trataron de adoptar control de calidad. Los problemas no desaparecieron al pasar las aplicaciones de las macrocomputadoras a computadoras de escritorio. El mayor problema es que la mayoría de los desarrolladores de software, no importando en el ambiente en que trabajen, no han considerado los conceptos de Ingeniería de Software.

Otro problema que se enfrenta al migrar aplicaciones hacia los usuarios es que se han sofisticado y demandan soluciones de software que hagan más. La interfase gráfica de usuario es la más visible manifestación del incremento de complejidad. La información se está convirtiendo en un recurso estratégico para muchas corporaciones. El acceso oportuno a la información para utiliz.arla posteriormente es crucial para las organizaciones que intentan responder rápidamente a los cambios en el mercado global. Esta flexibilidad y adaptabilidad no se logra facilrnente sin el conocimiento total de la empresa. Frecuentemente los requerimientos de las compañías son tantos y tan diversos que se necesita dividir los esfuerzos de desarrollo de sistemas entre varios programadores. La comunicación de los requerimientos del usuario y el desarrollo de las interfases del sistema se puede convertir en un importante elemento para cumplir con las metas del proyecto.

Las aplicaciones basadas en computadoras personales se están volviendo más complejas en la medida que sustituyen a sus predecesoras que operaban en macrocomputadoras. Consecuentemente, los proyectos de multiprogramación se convertirán en estándar para los desarrolladores de aplicaciones en computadoras personales. Y como apuntó Fred Brooks en "El Mítico Hombre-Mes", el agregar personal al proyecto puede ser menos productivo, debido al tiempo en que las personas que dominan el problema pasan más tiempo explicando a los otros como funciona, en lugar de trabajar en la solución. Los principios de Ingeniería de Software, particularmente las herramientas de análisis, pueden ayudar a los equipos de programación a minimizar los conflictos de comunicación que existen al llevar a cabo un proyecto.

Page 13: Metodología para la asimilación de ingeniería de software ...

15

La potencia de las grandes computadoras de ayer está hoy disponible en un simple circuito integrado. Las imponentes capacidades de procesamiento y almacenamiento del hardware moderno representan un gran potencial de cálculo. El software es el mecanismo que nos facilita utiliz.ar y explotar ese potencial.

1.1 ¿ QUÉ ES INGENIERÍA DE SOFTWARE?

En los primeros días de la informática, los sistemas basados en computadoras se desarrollaban usando técnicas orientadas al hardware. Los encargados de proyectos se centraban en el hardware, debido a que era el factor principal del presupuesto en el desarrollo del sistema. Para controlar los costos del hardware se instituyeron controles formales y estándares técnicos. Se exigía un análisis y diseño completo antes de que algo se construyera. Se media el proceso para determinar donde podían hacerse mejoras. Dicho sencillamente, se aplicaban los controles, métodos y herramientas que reconocemos como ingenieria al hardware. Desgraciadamente, el software era solo un añadido.

En esos días, la programación se veía como un arte. Existían pocos métodos formales y pocas personas los usaban. El programador aprendía normalmente su oficio mediante prueba y error. Los desafios de la construcción del software de computadoras crearon una mística que pocos ejecutivos se preocuparon por penetrar. El mundo del software era virtualmente indisciplinado.

Hoy, la distribución de costos para el desarrollo de sistemas de información ha cambiado dramáticamente. El software, en vez del hardware, es el elemento principal del costo. Los problemas como la determinación del tiempo de terminación del software, el alto costo, los errores en el producto terminado y la medición del progreso del desarrollo del software, son una manifestación del porque se ha adoptado la práctica de la Ingenieria de Software.

Para definir lo que es lngenieria de Software, es necesario describir que se entiende por software.

1.1.1 DEFINICIÓN DE SOFTWARE.

Para propósitos del presente trabajo, software son las instrucciones dentro de un programa de computadora que cuando se ejecutan realizan cierta función y proporcionan un resultado deseado.

Para entender mejor lo que es el software (y finalmente la Ingenieria de Software), es importante examinar las caracteristicas del software que lo hacen diferente de otras cosas que los hombres pueden construir. Cuando se construye el hardware, el proceso creativo humano (análisis, diseño, construcción, prueba) se traduce finalmente en una forma fisica. Si se construye una nueva computadora, el boceto inicial, diseño formal y prototipo de prueba, evolucionan a un producto fisico integrado por circuitos, tarjetas, cables, etc.

Page 14: Metodología para la asimilación de ingeniería de software ...

16

Para comprender mejor como se clasifica el software, es necesario definir en que se utiliz.a. El software puede aplicarse en cualquier situación en la que se haya definido previamente un conjunto específico de pasos (un algoritmo). La determinación y contenido de la información son factores importantes para determinar la naturale:za de una aplicación de software. El contenido se refiere al significado y la forma de la información de entrada y salida. Por ejemplo, muchas aplicaciones comerciales hacen uso de datos de entrada muy estructurados ( una base de datos) y producen reportes en cierto formato. El software que controla una máquina automática (por ejemplo, un control numérico) actúa sobre elementos de datos discretos con una estructura limitada y produce órdenes individuales de la máquina en rápida sucesión.

La determinación de la información se refiere a la necesidad de predecir el orden y tiempo de llegada de los datos. Un programa de ingeniería acepta datos que están en un orden predefinido, ejecuta el algoritmo sin interrupción y produce los datos resultantes en un informe o gráfica. Tales aplicaciones están determinadas. Un sistema operativo multiusuario, por otra parte, acepta entradas que tienen un contenido variado y se producen en un tiempo arbitrario, ejecuta algoritmos que pueden ser interrumpidos por condiciones externas y produce una salida que depende de la función que se solicita y del tiempo. Las aplicaciones con estas caracteristicas son indeterminadas.

Algunas veces es dificil desarrollar una clase específica de software. Conforme crece la complejidad, es más dificil establecer de que tipo de software se trata. En este sentido, la Ingenieria de Software debe usarse para desarrollar software de cualquier clase. Existen distintas clasificaciones de software a saber:

• SOF1W ARE DE SISTEMAS. Es una colección de programas escritos para servir a otros programas. Algún software de sistemas ( como compiladores, editores, utilerias y manejadores de archivos) procesa estructuras complejas de la información, aunque determinadas. Otras aplicaciones de sistemas (por ejemplo, componentes del sistema operativo, utilerías de manejo de periféricos, procesadores de comunicaciones) manejan datos en gran medida indeterminados.

• SOFTWARE DE TIEMPO REAL. Es el software que mide, analiz.a y controla sucesos del mundo real conforme ocurren. El término tiempo real significa que debe responder en un tiempo muy corto ( en el rango de 1 milisegundo a 1 minuto) y es diferente al tiempo compartido, donde se pueden esperar respuestas en más tiempo sin que ocurran desastres.

• SOFTWARE DE APLICACIONES. El procesamiento de información comercial constituye la mayor de las áreas de uso de software. Los sistemas "discretos" (por ejemplo, nómina, cuentas por pagar/cobrar, inventario, etc.) han evolucionado hacia software de sistemas de información de aplicaciones, que tiene acceso a una o más bases de datos grandes que contienen información comercial.

Page 15: Metodología para la asimilación de ingeniería de software ...

17 • SOFTWARE DE INGENIERIA Y CIENTIFICO. Se ha caracterizado por los algoritmos de

"manejo de números". Las aplicaciones van desde la astrononúa y la vulcanología, desde el análisis de presión de motores hasta la dinámica orbital de las naves espaciales.

• SOFTWARE INSTALADO DE FABRICA. El software instalado reside en memoria de sólo lectura (ROM - Read Only Memory) y se utiliza para controlar productos y sistemas de los mercados industriales y de consumidores. El software instalado puede ejecutar funciones muy limitadas (por ejemplo, el control de un horno de microondas) o suministrar una función significativa y capacidad de control ( tal como funciones digitales de un automóvil, tales como control de gasolina, sistema de frenado, etc.).

• SOFTWARE DE COMPUTADORAS PERSONALES. El mercado del software de las computadoras personales ha crecido en la década de los 80. El procesamiento de palabras, las hojas de cálculo, las gráficas por computadora, juegos, manejo de bases de datos y redes de comunicación son solo unos cuantos de los cientos de aplicaciones. De hecho el software de computadoras personales continúa representando uno de las áreas más creativas en el campo del software.

• SOFTWARE DE INTELIGENCIA ARTIFICIAL. El software de inteligencia artificial (IA) hace uso de algoritmos no numéricos para resolver problemas complejos que no son adecuados para el cálculo o análisis directo. Actualmente, el área más activa de la IA es la de sistemas expertos. Otras áreas de aplicación son el reconocimiento de patrones (imágenes y voz), prueba de teoremas y Juegos.

1.1.2 DEFINICIÓN DE INGENIERÍA DE SOFTWARE.

La primera definición de lngenieria de Software fue propuesta por Fritz Bauer en 1969 en la primera conferencia dedicada al tema por la OTAN. Para Bauer, Ingenieria de Software es el establecimiento y uso de principios de ingenieria robustos, orientados a obtener económicamente software que sea fiable y funcione eficientemente sobre máquinas reales. [21]

Para Fairley, la Ingenieria de Software se define como la disciplina tecnológica preocupada de la producción sistemática y mantenimiento de los productos de software que son desarrollados y modificados en tiempo y dentro de un presupuesto definido. [8]

Otra definición más reciente, de Jalote, indica que Ingenieria de Software es el diseño y desarrollo de software de alta calidad. [14]

El diccionario Newton Telecom define a la lngenieria de Software como una disciplina ampliamente definida que integra muchos aspectos de programación, desde la elaboración de código hasta el ajustarse a un presupuesto, con el objetivo de producir software adecuado que funcione. [ 18]

Page 16: Metodología para la asimilación de ingeniería de software ...

18 Sybil P. Parker define la Ingeniería de Software como la aplicación sistemática del

conocimiento científico y tecnológico por medio de sólidos conocimientos de ingeniería, a la producción de programas informáticos y a la definición de requerimientos, especificación funcional, descripción de diseños, implementación de programas y métodos de prueba que conducen al código. [21]

Y como las anteriores, se pueden obtener varias definiciones más, en donde se mencionan elementos como disciplina, ingeniería, diseño, desarrollo, elaboración de código, etc., que implican la integración de distintos campos del conocimiento para poder lograr software de calidad.

Para el presente trabajo, la definición de Ingeniería de Software que propongo y que se adoptará es la siguiente:

Ingeniería de Software es la disciplina que comprende un conjunto de metodologías y técnicas multidisciplinarias, que se utilizan para desarrollar software de alta calidad, libre de errores, que cumpla con las expectativas del usuario, que se elabore bajo un presupuesto y un tiempo definidos.

Para entender como la Ingeniería de Software se integra al mundo real, es necesario usar un ejemplo de otra ciencia. Considérese el estudio de la química y su uso para resolver problemas. El ingeniero químico investiga compuestos químicos, su estructura, interacción y la teoría respecto a su comportamiento. El ingeniero aplica los resultados de los estudios sobre química a una infinidad de problemas. La química es vista por los ingenieros químicos como un objeto de estudio. Por otra parte, la química es usada como herramienta para solucionar problemas generales.

La computación se puede ver de manera similar. Se pueden usar las computadoras y los lenguajes de programación como herramientas útiles para diseñar y resolver problemas. La Ingeniería de Software en lugar de investigar el diseño de hardware o probar teoremas acerca de como trabaja un algoritmo, se enfoca en la computadora como una herramienta para solucionar problemas. El ingeniero de software trabaja con las funciones de una computadora como parte de la solución general del problema, en vez de usar la estructura o la teoría de la computadora misma.

Igual que un fabricante busca formas de asegurar la calidad de los productos que elabora, el ingeniero de software cuenta con métodos que aseguran que sus productos son útiles y de calidad.

1.1.3 SOFTWARE DE CALIDAD.

La Ingeniería de Software es una estrategia para desarrollar software de calidad. Es importante entonces, entender que significa software de calidad, y que distingue el buen software del malo.

Las características del software de calidad dependen de quien analice el software. Los usuarios buscan que el software haga lo que ellos quieren, que sea facil de aprender y usar. Para quienes diseñan

Page 17: Metodología para la asimilación de ingeniería de software ...

19 y escriben el código y para quienes deben mantener los programas, el software de calidad es entendible, sencillo en su fonna y mantenible, además debe estar documentado.

El software de calidad para Boehm debe tener ciertas caracteristicas. Estas no solo se enfocan al buen rendimiento de hardware y software, sino que deben cumplir con las expectativas del usuario. [8] Estas caracteristicas son:

• UTILIDAD. El software debe ser útil. Si no lo es, entonces su desarrollo ha sido una pérdida de tiempo, dinero y esfuerzo. La utilidad es la medida de éxito del software para quienes se suponen van a usarlo. La utilidad del software se puede considerar en tres formas, correspondiendo a los tres tipos de usuarios que se involucran una vez que el software es entregado. El usuario original es el primero que estará complacido si el software hace lo que él quiere.

• PORTABILIDAD. Pueden existir otras personas que quieran usar el sistema en otras computadoras o en otro lugar. En este caso, el sistema debe ser portátil, de manera que pueda utiliz.arse en otra computadora funcionando apropiadamente. El software también debe permitir usarse en diferentes modelos y versiones de hardware sin perder su funcionabilidad. De igual forma, si se cambia el compilador por otro para el mismo lenguaje de programación, las funciones del software no deben degradarse. Así, el segundo tipo de usuario de un sistema es quien está involucrado con las actualiz.aciones y cambios del sistema.

• MANTENIBILIDAD. Es el programador quien mantiene el sistema, haciendo cambios que se requieren conforme se van modificando los requerimientos de quien usará el software o cuando se detectan errores. Un buen programa permite a otras personas distintas a los creadores, entender la lógica y encontrar los problemas. Los programadores con un sistema mantenible deben ser capaces de localiz.ar el error, encontrar los módulos que ejecutan cierta función, entender el código y modificarlo.

• CONFIABILIDAD. Por confiabilidad se entiende que el software proporcione el resultado correcto con un apropiado grado de exactitud. En este caso se dice que el software tiene integridad. Más aún, si el mismo conjunto de datos es alimentado al software varias veces bajo las mismas condiciones, los resultados deben ser iguales. Esto es llamado consistencia de función.

• EFICIENCIA. El software debe ser eficiente, esto es, debe producir los resultados o realizar su función en un tiempo adecuado, determinado por las necesidades del usuario. De tal forma, los datos deben estar disponibles cuando se necesiten, y el software debe responder al usuario en un tiempo razonable.

• EXACTITUD. El software necesita cumplir con el requisito de exactitud, esto es, la especificación de ausencia de error. La medida cuantitativa de la magnitud del error se debe expresar como una función de error relativo. En otras palabras, es la diferencia entre la condición o valor calculado y la condición real, especificada, o valor correcto teórico.

Page 18: Metodología para la asimilación de ingeniería de software ...

20 • SOLIDEZ. El software debe ser sólido, donde la solidez significa el grado con el que un producto

puede continuar operando correctamente, a pesar de la introducción de datos no válidos.

• CORRECCION. Esta se refiere al grado en que un producto está libre de defectos de diseño y programación. Es también el grado con que cumple con los requisitos especificados, o también con las expectativas del usuario.

• FACILIDAD DE ENTENDIMIENTO. El software debe ser facil de entender y usar para los usuarios y los programadores. Este aspecto también es llamado ingenieria humana y puede ser en ocasiones el más crítico. El software debe ejecutar perfectamente la función por la que fue creado, pero si los usuarios no entienden como usarlo, el software no sirve.

Las metas y los requisitos de alto nivel se pueden expresar en ténninos de atributos de calidad que el sistema deberá poseer. Estos atributos de calidad de alto nivel pueden, a su vez, expresarse en términos de atributos que se pueden obtener en los productos finales. Por ejemplo, la confiabilidad puede expresarse en términos de exactitud, solidez, integridad y consistencia del código fuente. Cada uno de estos parámetros debe definirse con cuidado en ténninos de atributos más específicos del código fuente. Por ejemplo, la precisión puede describirse como la proporción con la que los resultados producidos por el código son suficientemente precisos para satisfacer el uso que de ellos se pretende. Esto se puede traducir en requisitos específicos para cualquier problema en particular.

De esta manera, software de calidad es aquel que satisface las necesidades de los usuarios y de los programadores que lo utilizan. En resumen, la alta calidad se consigue sí el software:

• Hace lo que debe hacer. • Hace uso de los recursos de la computadora de manera eficiente. • Es facil de usar y aprender. • Los desarrolladores del software lo pueden diseñar, codificar, probar y mantener con relativa

facilidad.

Para producir software de calidad, no es necesario conocer los principios involucrados al construir una computadora o al desarrollar un lenguaje de programación, más bien se deben aprender conceptos, técnicas y herramientas qué ayuden a diseñar y desarrollar software de calidad. La Ingeniería de Software provee todos los elementos para construir exitosamente software de calidad.

qqo:ft

,11~v--

- .,. ... ~!,:·,¡¡ ¡..

"'-· ..... ,. _ _.

Page 19: Metodología para la asimilación de ingeniería de software ...

21

1.2 APLICACIONES DE LA INGENIERÍA DE SOFTWARE.

Como se ha definido anteriormente, la Ingeniería de Software es una disciplina para desarrollar software para sistemas basados en computadora. Por lo tanto, la Ingeniería de Software se aplica primordialmente a la elaboración de software de calidad.

Para desarrollar un software es necesario seguir una serie de pasos, en cada uno se pueden emplear técnicas y herramientas de Ingeniería de Software para asegurar el óptimo uso de recursos y tiempo.

Específicamente, las aplicaciones más comunes de la Ingeniería de Software son las siguientes:

En la planeación del proyecto de desarrollo de software, con metodologías que permiten estimar, organizar y controlar todos los aspectos relevantes de manera que exista un camino bien definido a seguir, para conocer de antemano la cantidad de recursos y tiempo requeridos para la puesta en marcha del proyecto. Se puede decir entonces que la Ingeniería de Software se aplica para:

• Estimar el tiempo empleado para desarrollar software con la ayuda de técnicas de administración de proyectos que permiten dividir el tiempo en etapas, establecer actividades criticas, y fijar fechas de revisión y entrega.

• Analiz.ar el esfuerzo de recursos humanos, es decir, cuantas personas deben trabajar en el proyecto considerando la complejidad, tamaño y tipo del software a desarrollar.

• Calcular los costos involucrados en la producción de software, costos fijos y variables involucrados, consideraciones de costo de lineas de código según complejidad y costo de documentación.

• Definir las funciones del sistema estableciendo requisitos y proporcionando guías para describir claramente los limites y objetivos del software que se desarrollará.

• Organizar el proyecto mediante lineamientos que permiten estructurar la forma en que trabajará el personal encargado de desarrollar el software de manera que exista mayor interrelación y comunicación entre ellos, el usuario y la gerencia.

• Seleccionar la metodología de desarrollo del software al definir las diferencias de enfoque que existen en cada una, de tal forma que los encargados de la elaboración del sistema puedan utilizar la más adecuada según sus necesidades.

Page 20: Metodología para la asimilación de ingeniería de software ...

22 En la actividad propiamente dicha de desarrollo del sistema, se aplican las técnicas y

herramientas de Ingeniería de Software para asegurar que el usuario y el personal de sistemas encargados de desarrollar el software tienen la misma percepción del sistema.

También se aplica para especificar claramente que y cómo se va a elaborar el software al proporcionar metodologías precisas que se pueden utiliz.ar en todos los pasos de su realiz.ación. La Ingeniería de Software se aplica entonces para:

• Analiz.ar el sistema o el software que se va a desarrollar, mediante técnicas que permiten especificar concretamente los objetivos y requisitos que debe tener.

• Diseñar el sistema de tal forma que cumpla oon los objetivos propuestos en el análisis. En esta fase la Ingeniería de Software permite definir el modelo que se va a utilizar para desarrollar fisicamente el sistema y proporciona lineamientos a seguir para asegurar que el sistema funcionará antes de programarlo.

• En la fase de programación se aplica la Ingeniería de Software suministrando guías generales aplicables con diferentes lenguajes de programación que lleven a desarrollar programas de computadora eficientes y óptimos.

• Al probar y revisar el software ya programado, la Ingeniería de Software provee diferentes tipos de enfoques de pruebas que sirven para comprobar si funciona adecuadamente y que se seleccionan según su tamaño y tipo.

• Para mantener el software después de que ha sido liberado para su uso, la Ingeniería de Software proporciona estándares y directrices que se deben seguir para que esta actividad de mejoramiento de los programas se lleve a cabo en forma organizada.

En resumen, la Ingeniería de Software se debe aplicar en forma primaria en todos los aspectos de la actividad de desarrollo de software, porque proporciona los lineamientos necesarios para que se pueda realizar adecuadamente garantiz.ando que el sistema que finalmente se va a entregar será de alta calidad.

1.3 TECNICAS DE INGENIERIA DE SOFTWARE.

El ingeniero de sistemas utiliza el conocimiento que tiene de las computadoras y de la computación para resolver problemas. Algunas veces el problema que resuelve se relacionado a una computadora o a un sistema de computadoras, pero algunas veces los problemas no tienen nada que ver con su uso. Por lo tanto, es importante entender que para resolver un problema primero es necesario entender la naturalez.a del mismo. En particular, se debe tener cuidado en imponer la tecnología de la computación a todo tipo de problemas. Es necesario primero resolver el problema, y

Page 21: Metodología para la asimilación de ingeniería de software ...

23 luego, si se estima conveniente, utiliz.ar la computadora como herranúenta para lograr una solución automatizada.

Para resolver un problema es necesario primero analizarlo, esto es, descomponer el problema en partes manejables que puedan entenderse y tratarse. Después se ataca cada problema por separado para después construir una solución total.

Para resolver un problema, es necesario utiliz.ar técnicas y herranúentas. Se le llama técnica al procedinúento formal o método que se usa para producir cierto resultado. Por ejemplo, un chef de cocina puede preparar una ensalada usando una secuencia de ingredientes combinándolos cuidadosamente, dándoles tiempo para que se mezclen apropiadamente y acomodándolos en cierto orden de manera que tienen un sabor y consister,cia especial. El procedinúento de elaboración de la ensalada involucra tiempo e ingredientes pero no depende del tipo de equipo de cocina usado. Lo que hace a la ensalada más sabrosa es la técnica, no el recipiente o la cuchara usada por el chef

El ingeniero de sistemas busca utiliz.ar técnicas de forma eficiente y productiva para crear soluciones efectivas a sus problemas.

A continuación se mencionan las principales técnicas de Ingeniería de Software y la fase de desarrollo donde se utilizan.

1.3.1 TÉCNICAS DE LA FASE DE PLANEACIÓN.

La falta de planeación es la causa principal de los retrasos en programación, incremento de costos y altos costos de mantenimiento en los desarrollos de productos de programación. Para evitar estos problemas se requiere de una planeación cuidadosa, tanto en el proceso de desarrollo como en la operación del producto. Con frecuencia, se dice que es imposible una planeación inicial, porque la información precisa sobre las metas del proyecto, necesidades del usuario y restricciones del producto no se conocen al comenz.ar el proyecto de desarrollo, sin embargo, uno de los principales propósitos de esta fase es aclarar los objetivos, necesidades y restricciones. Se debe reconocer también que los planes prelinúnares se modificarán según vayan evolucionando los productos, la planeación para el cambio es uno de los aspectos clave con la que se logra el éxito.

Las técnicas para planear desarrollo de software nacieron como parte de otras disciplinas de administración e ingeniería, no son fundamentalmente del área de computación, pero son muy útiles debido a las actividades propias de la fase de planeación. A continuación se mencionan algunas de las más importantes:

• Administración por objetivos. [8]

• Organización de grupos de trabajo. [8]

Page 22: Metodología para la asimilación de ingeniería de software ...

24

• Administración de proyectos. [21]

• Ingeniería económica. [7]

• Estimación del nivel de contratación. [8]

• Métricas para la productividad y la calidad del software. [21]

1.3.2 TÉCNICAS DE LA FASE DE ANÁLISIS.

Esta fase es la especificación de requisitos para la producción de software. Se basa en la definición clara y correcta del sistema. Los requisitos de alto nive~ los cuales se especifican durante la planeación inici~ se detallan y se hacen más específicos para definir las características que el producto de programación debe tener. En teoría, el análisis del sistema o producto de software establecerá "que" es el producto sin implicar "como" es éste. El diseño del producto se refiere a como va a proporcionar las características deseadas. Las técnicas de Ingeniería de Software relacionados con el análisis del software proporcionan lineamientos y permiten que el analista del sistema tenga una idea más clara de todos los elementos necesarios y sus interrelaciones que sirven para que comprenda el funcionamiento y así se establezcan las especificaciones que debe cumplir para convertirse más tarde en un software de calidad. Algunas técnicas que se utiliz.an en esta fase son:

• Análisis estructurado (Y ourdon, De Marco, Constantine ). [21]

• SADT-Structured Analysis and Design Technique (Ross). [8]

• SSA-Structured System Analysis (Gane & Sarson). [8]

• Análisis orientado a objetos. [21]

• Construcción de prototipos. [ 1]

• Factores críticos de éxito (Rockart). [21]

• Diagramas definidos por usuario. [17]

1.3.3 TÉCNICAS DE LA FASE DE DISEÑO.

El diseño es el primer paso en el desarrollo de cualquier producto o software. El objetivo del diseñador es producir un modelo o representación de una entidad que será construida más adelante. El proceso por el cual se desarrolla el modelo combina: intuición y criterios basándose en la experiencia de construir entidades similares, un conjunto de principios y/o heurísticas que guían la forma en que se

Page 23: Metodología para la asimilación de ingeniería de software ...

25 desarrolla el modelo, un conjunto de criterios que facilitan discernir sobre la calidad y un proceso de iteración que conduce finalmente a una representación del diseño final.

El diseño de software para computadoras, como los métodos de diseño de ingeniería de otras disciplinas, cambia continuamente, conforme aparecen nuevos métodos, mejores análisis y un más amplio conocimiento. A diferencia del diseño mecánico o electrónico, el diseño de software está en una etapa relativamente temprana de su evolución. El diseño de software apartado a la programación, se ha tomado en serio desde hace dos décadas. Por tanto, a las metodologías de diseño de software les falta profundidad, flexibilidad y la naturaleza cuantitativa asociada normalmente con las disciplinas de diseño de ingeniería más clásicas. Sin embargo, las técnicas existentes de diseño proveen criterios para lograr productos de alta calidad. Algunas son:

• Diagramas Warnier-Orr. [21]

• Desarrollo de sistemas (Jackson). [21]

• Diagramas de entidad-relación (Chen & Martin). [21]

• Diseño estructurado (Yourdon). [21]

• Tablas y árboles de decisión. [8]

• Diseño orientado a objetos (DOO). [21]

• Diseño tiempo real. [21]

• Diseño de bases de datos. [21]

1.3.4 TÉCNICAS DE LA FASE DE PROGRAMACIÓN.

El objetivo de todo el esfuerzo del análisis y diseño de software se verá reflejado en la programación, la codificación de las especificaciones en instrucciones de computadora. Es importante entonces, que esta actividad se ejecute con un apego estricto a lo definido en las fases anteriores.

Sin técnicas para auxiliarse, la programación se puede convertir en una fase sola de mera traducción, es necesario no solo traducir todo a lenguaje de programación, sino hacerlo de una forma que el código resultante sea eficiente, esté en la medida libre de errores y listo para integrarse en forma completa para formar un sistema completo.

Aunque hoy en día se comienza a difundir el uso de herramientas y lenguajes de cuarta generación ( 4GL }, que no requieren de la especificación del procedimiento, todavía existe un gran nümero de aplicaciones que se desarrollan en lenguajes de tercera generación, COBOL, Pascal, ADA,

Page 24: Metodología para la asimilación de ingeniería de software ...

26 Basic e inclusive FORTRAN. Por esto es conveniente tener en cuenta técnicas que fomenten la disciplina de la planeación, verificación y desarrollo de programas que funcionen bien desde su creación. Algunas técnicas que son útiles:

• Programación estructurada. [21]

• Diagramas de flujo de programas.[8]

• Diagramas Nassi-Schneiderman (N-S) o Chapin. [21]

• Pseudocódigo. [8]

• Refinamiento sucesivo de programas (Wirth). [8]

• Top down, bottom up y sandwich. [8]

• Diagramas tipo HIPO. [8]

1.3.5 TÉCNICAS DE LA FASE DE PRUEBAS.

La importancia de la prueba de software y sus implicaciones con la calidad del producto no se pueden sobre valorar. La prueba es un elemento crítico para la garantía del software y representa un último paso para las especificaciones.

La prueba representa una interesante anomalía para el ingeniero de software. Durante las fases anteriores de definición y desarrollo, el ingeniero intenta construir software partiendo de un control abstracto y llegando a una implantación tangible. A continuación llega la prueba que intenta "demoler" el software que ya ha sido construido. De hecho, la prueba es uno de los pasos de la lngenieria de Software que se puede ver como destructivo en lugar de constructivo.

A continuación se presentan algunas de las técnicas para pruebas de software y diseño de casos de prueba.

• Recorridos estructurados e inspecciones. [8]

• Pruebas de caja blanca. [21]

• Pruebas de caja negra. [21]

• Pruebas de Sistema y de unidad. [8]

• Depuración. [8]

Page 25: Metodología para la asimilación de ingeniería de software ...

27

1.3.6 TÉCNICAS DE LA FASE DE MANTENIMIENTO.

El mantenimiento, la última fase del proceso de ingeniería del software, se lleva la mayor parte de todo el dinero gastado en el software de computadora. A medida que se desarrollan más programas, surge una tendencia problemática debido a la cantidad de esfuerzo y de recursos gastados en el mantenimiento de software que siempre crece y crece. Finalmente, algunas organiz.aciones de desarrollo de software pueden llegar a la barrera del mantenimiento, incapaces de embarcarse en nuevos proyectos debido a que tienen todos sus recursos dedicados al mantenimiento de antiguos programas.

El mantenimiento ordenado, bajo ciertos lineamientos y usando técnicas adecuadas, permite que esta actividad sea ejecutada en el mínimo de tiempo y sin la derrama de recursos tan importante que usualmente se realiz.a. Las técnicas más importantes son:

• Mantenimiento de Software. [21]

• Administración de la configuración. [21]

1.4 HERRAMIENTAS DE INGENIERIA DE SOFTWARE.

Algunas veces el uso de un procedimiento o método (pero no necesariamente una herramienta) puede ser similar a utilizar un instrumento. Una herramienta es un instrumento o un sistema automatizado que permite realiz.ar con una considerable mejoría cierta actividad. Esta mejoria significa que la herramienta permite que la actividad se realice de manera más precisa, más eficiente, más productiva o que resalte la calidad del producto resultante. Por ejemplo, se usa una máquina de escribir para hacer cartas porque las letras que pone en el papel son más fáciles de leer que la escritura a mano. También se usan tijeras como herramienta porque se puede cortar más rápido y con mayor precisión el papel que sí sé troz.a con las manos.

El ingeniero en sistemas utiliz.a herramientas para resaltar la calidad del software que produce. Ejemplos de este tipo de herramientas son:

1.4.1 HERRAMIENTAS PARA ADMINISTRACIÓN DE PROYECTOS.

Estas herramientas automáticas de estimación permiten al planificador estimar costos y esfuerzos así como llevar a cabo análisis del tipo "que pasa si" con importantes variables del proyecto tales como la fecha de entrega o la selección de personal. Algunos ejemplos son:

• Programas para la administración de proyectos para computadoras personales como Timeline, MS Project y Mac Project entre otros.

Page 26: Metodología para la asimilación de ingeniería de software ...

28

• Programas elaborados especialmente para resolver problemas de programación lineal que pueden usarse conjuntamente con los anteriores.

1.4.2 HERRAMIENTAS PARA ANÁLISIS DE SISTEMAS.

Se han desarrollado varios lenguajes de aplicación especial y paquetes para permitir el establecimiento conciso y el análisis automático de las especificaciones de los productos de programación. Algunos lenguajes de especificación eran de naturaleza gráfica, mientras que otros emplean texto; todos eran de naturaleza relacional, además se usaban en forma manual y otros tenían paquetes de programación para su uso.

Las herramientas para el análisis automatizado de requerimientos, hacían uso de una notación especial ( en la mayoría de los casos esto es un lenguaje de especificación de requerimientos) que era procesada de una manera automática. Los requerimientos se describían con un lenguaje de especificación, que combinaba indicadores de palabras clave con explicaciones en lenguaje natural como el inglés. El lenguaje se mandaba a un procesador que producía una especificación de requerimientos y, más importante, un conjunto de informes de diagnósticos sobre la consistencia y organización de la especificación.

En la actualidad y gracias a la tecnología computacional, existen una serie de paquetes y programas que ayudan al analista de sistemas a efectuar su trabajo de una manera más sencilla, permitiéndole además obtener productos como diagramas, diccionario de datos, lista de procesos, almacenamientos de información y diversas especificaciones, que le serán de utilidad para las fases posteriores del desarrollo de un producto de software.

A continuación se presentan ejemplos de algunas herramientas y su área de aplicación:

• APPLICATION ANAL YSIS&DESIGN: Análisis y diseño estructurado de sistemas. • CASFJ4/0: Reingeniería de procesos de negocios, análisis de sistemas, diseño e

implementación. • OBJECT IF: Análisis y diseño de sistemas, técnicas orientadas a objetos. • ORCIDS: Herramientas para análisis funcional usando la técnica SADT. • PAC DESIGN: Análisis y diseño mediante el modelamiento de negocios, metodología de

Yourdon. • P ARADIGM PLUS: Análisis y diseño orientado a objetos en tiempo real. • PROMOD-PLUS: Herramientas CASE para análisis y diseño estructurado. • TEAMWORK: Conjunto de herramientas para análisis y diseño estructurado.

Page 27: Metodología para la asimilación de ingeniería de software ...

29

1.4.3 HERRAMIENTAS CASE.

Estas herramientas han sido diseñadas para automatizar la generación y mantenimiento de lo que era originalmente un método manual. Normalmente hacen uso de una ayuda a la subdivisión del problema, mantiene una jerarquía de información sobre el sistema y aplica heuristicas para descubrir problemas con la especificación. Más importante, las herramientas facilitan al analista actualizar la información y anotar las conexiones entre las nuevas y antiguas representaciones del sistema. Por ejemplo, el sistema CASE 2000 de Nastec, ayuda al analista la generación de diagramas de flujo y de diccionario de datos, además mantiene a éstos en una base de datos que puede ser analiz.ada para comprobar la corrección, consistencia y no redundancia. De hecho, el verdadero beneficio de esto, y de la mayoría de las herramientas de requerimientos automatizados, está en el procesamiento inteligente que estas herramientas aplican a la especificación del problema.

De las herramientas CASE más conocidas, se tienen las siguientes:

• ANAL YST/DESIGNER TOOLKIT: CASE que utiliz.a la metodología de Yourdon. • CASE 2000: Generación de diagramas de flujo y diccionario de datos. • CRADLE: Herramienta para aplicar en el ciclo completo de vida de los sistemas. • DISCOVER: Conjunto de herramientas para desarrollo de sistemas de información. • EIFFEL CASE: Ingeniería de Software interactiva. • ERWIN: Modelamiento de datos, creación de aplicaciones cliente-servidor. • EXCELERA TOR 11: Análisis y diseño de sistemas, diagramas y definición de programas. • IEF: CASE de Texas Instruments para macrocomputadoras. • MAC A&D: Manejo de varias metodologías, para computadoras Macintosh. • MAGEC: Aplicable en todo el ciclo de vida del sistema, genera código en COBOL. • MEGA Juego de herramientas CASE para todo el ciclo de vida de un sistema. • OBJECT WORKS \ C++: CASE orientado a objetos con interfase para lenguaje C++. • P ACBASE: Generación de código, útil para todo el ciclo de vida del sistema.

1.4.4 HERRAMIENTAS PARA PROGRAMACIÓN, PRUEBAS Y MANTENIMIENTO.

Las herramientas de esta categoria son a menudo las únicas disponibles para el desarrollo de software ( una situación que no es ideal), están orientadas al código e incluyen compiladores de lenguajes de programación, editores, enlazadores y cargadores, ayudas para la depuración y una amplia serie de utilerias específicas del lenguaje de programación que se esté utilizando.

Actualmente muchos lenguajes de programación comerciales integran herramientas para programación y pruebas al proveer depuradores de código (debuggers) y rastreadores (tracers).

Page 28: Metodología para la asimilación de ingeniería de software ...

30 Es conveniente resaltar que la documentación del software es una parte muy importante. Todo

lo realizado en el análisis, diseño, programación, pruebas y mantenimiento debe estar claramente definido. Por esto es importante contar con herramientas que permitan la modificación de la documentación de manera sencilla., es recomendable usar para tal efecto: procesadores de texto, diagramadores, programas para graficación, para presentación y hojas de cálculo. Actualmente, existen herramientas que permiten realizar la labor de documentación casi automáticamente a través del código del programa., también existen probadores y generadores de casos de prueba, el único inconveniente es que muchos de estos son específicos para ciertos lenguajes de programación y su costo es elevado. Algunos ejemplos de herramientas para documentación y pruebas de sistemas son:

• DOC EXPRESS: Automatización de documentación y publicación. • DOC/SW: (parte de DISCO VER) documentación de código y de objetos. • IMAGIX 40: Ingeniería reversa y documentación para lenguaje C y C++. • OEW FOR C++: Diagramas de relaciones, explorador de código y documentación. • PROCEDURE DESIGN: Editor de diagramas de flujo, generador de documentación. • TESTDESIGNER Conjunto de herramientas para hacer pruebas en sistemas. • TESTPLAN: Administración de las pruebas del sistema como un proyecto. • VISUAL TESTING TOOLSET: Cobertura de las pruebas al código.

1.4.5 HERRAMIENTAS PARA CONSTRUCCIÓN DE PROTOTIPOS.

Para conseguir una construcción rápida de prototipo, existen tres clases genéricas de métodos y herramientas: técnicas de cuarta generación, componentes de software reusables y entornos de construcción de prototipos.

Las técnicas de la cuarta generación o 4GT comprenden un amplio repertorio de lenguajes de informes (Report Generator) y consultas de base de datos (Query), generadores de programas y aplicaciones y otros lenguajes no procedimentales de muy alto nivel. Debido a que las 4GT facilitan a quién las usa, la programación general y código ejecutable rápidamente, son ideales para la construcción rápida de prototipos. Desafortunadamente, el dominio de aplicación de las 4GT está actualmente limitado a sistemas de información comerciales.

Otro método para la construcción rápida de prototipos es ensamblar, en vez de construir, el prototipo usando un conjunto de componentes de software existente. Un componente de software puede ser una estructura de datos ( o base de datos) o una componente arquitectónica de software (por ejemplo un programa) o una componente procedimental (es decir, un módulo). En cada caso, la componente de software debe ser diseñada de forma que facilite el ser reusada sin conocer los detalles de su funcionamiento interno. Debe observarse que un producto de software existente puede ser utilizado como un prototipo más adelante, para crear un nuevo sistema mejorado y competitivo. De alguna manera, esto es una forma de reutilización para la construcción de prototipos de software en la cual se requieren herramientas como bases de datos para llevar un control de las bibliotecas de módulos reusables.

Page 29: Metodología para la asimilación de ingeniería de software ...

31

Por otra parte, en las pasadas dos décadas se desarrollaron varios lenguajes de especificación fonnal para reemplaz.ar las técnicas de especificación en lenguaje natural. Los lenguajes de especificación como PSL, RSL, IORL, GYPSY, OBJ y muchos otros, eran acompañados de entornos interactivos en un esfuerzo por conseguir un paradigma de Ingenieria de Software automatizada. Estas y otras herramientas fueron mejorando para hacer el desarrollo de prototipos una labor más eficiente. En la actualidad, se ha buscado el llamado desarrollo rápido de aplicaciones (RAD) mediante lenguajes orientados a objetos, mediante el uso de prototipos que puedan irse mejorando paulatinamente. A continuación se dan ejemplos de algunas herramientas que son útiles para el desarrollo sistemas manejando prototipos:

• OBJECT PROTOTYPE: Generación de objetos mediante prototipos. • PRINCIPIAIRAD: Creación de prototipos mediante el lenguaje Visual Basic. • PERTS: Ambiente para la elaboración de sistemas en tiempo real mediante prototipos. • GLG TOOLKIT: Animación y simulación de sistemas de misión critica, usando prototipos en

C++y Java. • LOCANA Herramienta CASE para generación de prototipos orientados a objetos.

En el anexo B del presente trabajo, se presenta una lista más detallada de las herramientas CASE que se manejan en el mercado hoy en día y que se utilizan en diferentes fases del desarrollo de un sistema o producto de software.

Page 30: Metodología para la asimilación de ingeniería de software ...

CAPITUL02

LA INGENIERIA DE SOFTWARE EN MÉXICO

El desarrollo de software está lentamente convirtiéndose en un proceso estructurado, altamente controlado e incrementando su estandarización. Las empresas que no entienden como administrar el desarrollo y mantenimiento de grandes sistemas de software que se requieren para aplicaciones actuales y futuras se verán rezagadas en este cambio.

La solución a este problema tiene tres componentes: primero, un gran compromiso en la educación; segundo, los sistemas deberían diseñarse para mantenerlos, extenderlos y reusarlos~ y

tercero, utilizar un enfoque orientado a objetos para desarrollar sistemas.

Un estudio del Instituto de Ingeniería de Software (SEI) de la Universidad Camegie Mellon en 1988 de 200 empresas en EUA mostró que el 86% considera su esfuerzo de Ingeniería de Software en un nivel 1, el inicial, donde la programación se realiza utilizando algunas técnicas; 13. 5% se manifestaron en el nivel 2, el nivel de repetición, en que los esfuerzos de una o dos personas permite que los proyectos se concluyan exitosamente; una empresa mencionó estar en nivel 3, el nivel de maduración, donde la Ingeniería de Software está bien definida e institucionalizada. Ninguna empresa está en nivel 4, el de administración, donde se maneja y se mide la lngenieria de Software. En el nivel 5,

el de optimización, no se encontró ninguna empresa, en este punto se tiene un conocimiento profundo y

experiencia en la Ingenieria de Software que se aplica a nuevos proyectos. [20]

En México no existe información actualizada de la utilización de lngenieria de Software dentro de las empresas, no existen estudios que indiquen el grado en que se han asimilado las técnicas desde su aparición e inicios de los años 70. En general, las empresas mexicanas utilizan métodos y procedimientos que distan mucho de aumentar la productividad en el medio de desarrollo de software, donde la falta de comunicación entre quienes desarrollan sistemas y los usuarios, la baja cultura informática entre los ejecutivos de alto rango, el desarrollo de las telecomunicaciones, la inadecuada elaboración de planes de estudio en las universidades con respecto a lo que se requiere en las empresas y otras, son causas que han detenido el progreso de la informática como herramienta para el avance del país.

Page 31: Metodología para la asimilación de ingeniería de software ...

34

Es necesario reconocer que la asimilación de las técnicas y herramientas de lngenieria de Software aunado con una buena organiz.ación y administración tanto de la empresa en general como del área encargada del desarrollo de software dentro de la misma, permitirá que exista el ambiente adecuado para crear software y sistemas de alta calidad.

2.1 ANTECEDENTES DE APLICACION EN MÉXICO.

La lngenieria de Software en nuestro país depende mucho de la evolución que tiene en el vecino EUA, debido a la relación que existe de comercio y además que la mayoria de los equipos de cómputo provienen de esa nación, de igual manera las metodologías y técnicas que se usan son traídas por los proveedores de computación.

En México no existen antecedentes de creación de una técnica de lngenieria de Software propia, las pocas que son utiliz:adas fueron desarrolladas en las universidades o empresas norteamericanas, y después de cierto tiempo, son divulgadas a través de seminarios, cursos, conferencias u otro tipo de eventos a las personas que lo solicitan, de tal manera que algunos las conocen y en ocasiones las llegan a aplicar. Por otra parte, muchas empresas transnacionales asentadas en nuestro país, envían sistemas desarrollados para ser explotados en sus instalaciones y otras manejan metodologías propias que les permiten tener un control sobre la operación del área de desarrollo de sistemas.

No importando la situación, es notable el poco uso que se le da a la lngenieria de Software en la mayoria de las empresas, sin embargo, este enfoque va cambiando paulatinamente según el avance que tienen en un grupo selecto de compañías que están a la cabeza en este punto en nuestro país.

2.1.1 ANTECEDENTES DE LA INGENIERÍA DE SOFTWARE.

La necesidad de enfoques sistemáticos para el desarrollo y mantenimiento de productos de software se patentizó en la década de los años 60. Durante ésta, aparecieron las computadoras de la tercera generación y se desarrollaron técnicas de programación como la multiprogramación y el tiempo compartido. Estas nuevas capacidades aportaron la tecnología necesaria para el establecimiento de sistemas computacionales interactivos, de multiusuario, en linea y en tiempo real; así surgieron nuevas aplicaciones para la computación, como las reservaciones aéreas, bancos de información, tiempo compartido para diversas aplicaciones, control de procesos y otras.

Aunque mucho de estos sistemas fueron desarrollados y producidos adecuadamente, gran parte de los sistemas intentados nunca se produjeron; de los producidos muchos quedaron sujetos a sobrecosto, entrega tardía, poca confiabilidad, ineficiencia y ante todo, a poca aceptación por parte de

Page 32: Metodología para la asimilación de ingeniería de software ...

35

los usuarios. Confonne las computadoras crecieron haciéndose más complejas, resultó obvio que la demanda por los productos de software creció en mayor cantidad que la capacidad de producir y mantener dichos productos.

Para considerar el creciente problema de la tecnología de software, se convocó en 1968 a una reunión de trabajo en Garmisch, Alemania Oriental~ en esa junta así como la siguiente, celebrada en Roma, Italia en 1969, se estimuló el interés general hacia los aspectos técnicos y adnúnistrativos utilizados en el desarrollo y mantenimiento de software. El ténnino lngenieria de Software en inglés "Software Engineering" fue utiliz.ado por primera vez en esas reuniones. [8]

La siguiente evolución de los sistemas computacionales comenzó a mediados de los años 70 y continúa hoy. Los sistemas distribuidos donde se comunican unas computadoras con otras, incrementaron notablemente la complejidad de los sistemas informáticos. Las redes de área local y global, comunicaciones digitales de alto ancho de banda y creciente demanda de acceso en linea a los datos, supusieron una fuerte presión sobre los desarrolladores de software. Esta etapa también se caracteriza por la llegada y amplio uso de los microprocesadores.

La computadora personal apareció a principios de los años 80 y ha sido el agente de crecimiento de muchas compañías de software. El hardware de este tipo de computadoras se ha convertido rápidamente en un producto estándar, mientras que el software marca la gran diferencia. De hecho, mientras las ventas de computadoras personales se estabiliz.aron a mediados de los años 80, las ventas de software continuaron creciendo. Mucha gente de la industria y también en forma particular gasta más dinero en software (sin tomar en cuenta el problema de la piratería) de lo que gastaron en la computadora sobre la cual se utiliz.a.

La nueva era en el software de computadoras está ahora comenzando. Autores tales como Feigenbaum y McCorduck en su obra "La quinta generación", predijeron que las computadoras y su correspondiente software tendrán un profundo impacto en el equilibrio de la potencia política e industrial de todo el mundo. Las técnicas para el desarrollo de software que se están usando actualmente han cambiando la forma en que algunos segmentos de la comunidad informática construyen los programas para computadora. Los sistemas expertos y el software de inteligencia artificial se han trasladado finalmente del laboratorio a aplicaciones prácticas, en un amplio rango de problemas del mundo real. [21] ·

Page 33: Metodología para la asimilación de ingeniería de software ...

36

2.1.2 MERCADO NACIONAL DE BIENES Y SERVICIOS INFORMÁTICOS.

Para tener una idea clara de como han incursionado la lngenieria de Software en México, es necesario conocer la evolución del mercado general de la infonnática. Los datos que aparecen a continuación provienen de una publicación del INEGI (Instituto Nacional de Estadística Geografia e Infonnática) elaborado en 1993 (el único y más reciente) llamado ''La situación de la Infonnática en México". [13]

El tamaño del mercado de bienes y servicios infonnáticos constituye un indicador del nivel alcanz.ado por la actividad infonnática, ya que permite detectar, en cierta medida, la evolución que ha presentado el sector en los últimos años. En 1986, el valor del mercado de cómputo en México fue de 498 millones de dólares, que correspondió al 0.35% del valor del mercado internacional, valor calculado con base a cifras la revista Datamation 100 de junio de 1987. Durante el periodo 1973 a 1986 la dinámica fue acelerada, multiplicando su valor casi cinco veces desde 1973 y creciendo a una tasa promedio anual de 22.9%. La tasa promedio de crecimiento anual entre 1989 y 1990 fue del 33.1% y se estima que permanecerá así hasta 1993, para 1995 el mercado se estimó alcamaria aproximadamente 3 mil 227.4 millones de dólares. La estructura pronosticada para 1995 en el mercado de cómputo es la siguiente:

• Sistemas multiusuario (Minis/Macros) 32% • Sistemas Personales (PC's/Otros) 64% • Comunicaciones 4%

Conforme a datos de 1991, el valor del mercado computacional mexicano representó aproximadamente el 0.53% del PIB y la densidad de computadoras corresponde a 12 computadoras por cada mil habitantes. Para fines de 1992 se espera que este último indicador corresponda a 15 computadoras por cada mil habitantes.

A pesar de la dinámica mostrada por el mercado interno, sus dimensiones con respecto a las de los países industrializ.ados, son aún pequeñas. Por ejemplo, en 1987 el valor del mercado de equipo de procesamiento y periférico en México, representó sólo el O .11 % del que había en EUA; 3 .5%, respecto al de Japón; 3.7, al de Alemania; 4.8%, al de Gran Bretaña; 5.3% al de Francia; y 8.6%, al de Italia.

En la industria de hardware, el segmento de microcomputadoras fue el que mostró mayor crecimiento en los últimos años, al representar el 68% del mercado total. Una de las principales tendencias observadas en este mercado es, precisamente, la migración hacia sistemas abiertos y el uso de redes de computadoras. En este punto, las redes de tipo Ethernet son las que cuentan con mayor participación en el mercado de redes (66%) comparado con Token Ring (13%) y Arcnet (21%) en

Page 34: Metodología para la asimilación de ingeniería de software ...

37

1991. Los sistemas operativos como UNIX y OS/2 se pronosticó que para 1995 tendrían en México una participación del 75% del mercado de sistemas abiertos.

En México, la banca comercial es el usuario más importante de computadoras, equipos y servicios asociados, con una cantidad estimada en 1989, de 302.90 millones de dólares, correspondiente al 35% del mercado infonnático nacional, seguido por el gobierno. Otros usuarios importantes en el país son las casas de bolsa, cadenas comerciales, tiendas departamentales, supermercados, industria automotriz, química y de la construcción, así como el sector servicios y educativo.

Al parecer, existe cierto grado de asimilación tecnológica ya que algunos productos que se comercializ.an en el extranjero, sobre todo en EUA, son lanzados en México sin que existan rez.agos importantes. Dentro de este grupo de productos, que se difundieron rápidamente, cabe considerar a las microcomputadoras que utiliz.aban microprocesadores del tipo Intel 80286 o similares, y trabajaban con sistema operativo MS DOS o UNIX, que aparecieron en aquel país en 1984 y en el mercado nacional en 1985.

2.1.3 MERCADO DE PROGRAMACIÓN (SOFTWARE O SOPORTE LÓGICO).

En 1991 el mercado de software en México fue de 180.2 millones de dólares. Se estima que para 1995 el mercado nacional alcance la cifra de 496.4 millones de dólares. Entre 1989 y 1990, la venta de software se incrementó aproximadamente en un 18% anual, y se esperaba que de 1990 a 1995 creciera a una tasa promedio anual de 28.8% como se muestra en la figura 2.1

u "D III III U u .. e • ..2 :o = "D :E

500

400

300

200

Mercado de Software en México

1989 1990 1991 1992 1993 1994 1995

Afio

Figura 2.1 Crecimiento del Mercado de Software en México

De acuerdo con datos de 1991 de la Asociación Nacional de la Industria de Programas para Computadoras (ANIPCO), se estima que alrededor del 700/o de los productos son de origen extranjero,

Page 35: Metodología para la asimilación de ingeniería de software ...

38

principalmente norteamericanos. De este porcentaje se calcula que la mitad es por importación directa y la otra parte por la venta de las representaciones locales de los productos.

La producción local de software se ha incrementado en los últimos años, principalmente en el nivel de aplicaciones y dentro de estas las especializ.adas o verticales.

En la actualidad existen diversos tipos de distribuidores de software en México, que van desde las pequeñas compañías locales que desarrollan software y ofrecen productos de manufactura casera hasta compañías transnacionales que ofrecen paquetes de software, manufactura de equipo y venta de servICIOS.

En relación con empresas de software, ANIPCO contaba con 160 casas registradas; sin embargo, se estima que existen alrededor de 500, de las cuales la mayoria son casas pequeñas de aproximadamente 1 O empleados. Actualmente, ANIPCO ha desaparecido y ha dado su lugar a AMITI (Asociación Mexicana de la Industria de Tecnología de Información) formada en 1997. Entre las empresas que desarrollan software actualmente que se encuentran más consolidadas destacan, por su importancia, las siguientes:

• Asesoft • Aspel • Cibertec • Computación en Acción • Desarrollo Creativo • Digital México • DIPROS Systems • Fourth Shift de México • Grupo Ddemesis • Hbsoftware • Iranon • Kernel Corporativo • Ludens S.A de C. V. • Oracle de México • Progress Software de México • SAPMéxico • SerproDatos • Servicios de Procesamiento Electrónico y Efectivo de Datos (SPEED) • Sistemas de Automatiz.ación Integral (SAISA) • SoftTek • Software de Alta Calidad (SAC)

En México, alrededor del 500/o del valor en pesos del software vendido está destinado a microcomputadoras; aproximadamente 300/o a minicomputadoras y cerca de 200/o a

Page 36: Metodología para la asimilación de ingeniería de software ...

39 macrocomputadoras. En el mercado actual, la demanda va en aumento, especialmente en el segmento de computadoras personales.

El uso de software en paquete está ampliamente difundido, de tal manera que prácticamente cualquier empresa, industria, comercio, escuela, centro de investigación u oficina gubernamental es usuario activo de paquetes.

Distribución de Ventas por tipo de Software

Software de Infraestructura o básico ¡;~~~- . Software de utilería ------------- ·-·-- --·-·····--------- ----- ··--- -

Software de Comunicaciones [3%

Software de Aplicaciones l ss.4 % 1

Aplicaciones horizontales 1 38.4 %

1

1

Aplicaciones verticales 1 17.0%

Software educativo -l 2J % -- - ---1 -~- -----------------------------~ - --- ------------

Otros ¡7.8% 1

Fuente: Seminario de Apoyo y Fomento a la Exportación de Cómputo 1990 y Wallace Asocs.

Uno de los problemas más graves que afronta la industria de software en todo el mundo es el de la copia ilegal de programas (piratería). México no se encuentra al margen del fenómeno, ANIPCO en 1993 declaró que por cada software original existían de 7 a 9 copias. Por otra parte, en 1997, AMITI asentó en un informe sobre el impacto de la industria de software en las economías latinoamericanas, que la alta incidencia de la piratería impidió la generación de tres mil 616 empleos adicionales y alrededor de 43 millones en contribuciones al erario público.

2.1.4 DEMANDA DE BIENES Y SERVICIOS.

El sector bancario es el principal consumidor de bienes y servicios informáticos. Dentro de este sector, la estructura de la demanda informática muestra una notable concentración, ya que en 1989 solamente 2 bancos sumaron 52% del total de las erogaciones.

Las dependencias gubernamentales adquieren el 28% del software comercializ.ado anualmente; seguidas por las instituciones financieras, 18%; las empresas manufactureras, 18%; y por los establecimientos de ventas al menudeo y al mayoreo, 18% como aparece en la figura 2.2.

Page 37: Metodología para la asimilación de ingeniería de software ...

40

Compradores de Software en México

Otros 18% Gobierno

28%

Ventas 18%

Manufactura 18% 18%

Figura 2.2 Principales compradores de Software en México

Entre los profesionistas, los principales compradores son los contadores y auditores (35%), seguidos por los consultores de gestión e ingenieria (300/o) y los médicos y abogados (200/o en conjunto).

2.1.5 FORMACIÓN DE RECURSOS HUMANOS.

Los recursos humanos son una parte fundamental para lograr el éxito de la industria de programación. En México debe estimularse la formación de éstos, con el fin de impulsar en fonna definitiva esta importante industria.

La capacitación de especialistas tiene una importancia decisiva para el impulso que requiere la infonnática mexicana, constituye además, una tare.a fundamental ante la necesidad de consolidar una industria más competitiva, con tecnología propia y, por lo tanto, menos dependiente del extranjero.

Durante el año escolar 1990 - 1991 se impartieron alrededor de 412 programas de formación en informática.

En la categoria de educación media superior, existían 117 opciones de estudio en toda la República, las que eran impartidas en 108 planteles educativos y consistían en 1 O planes de estudio diferentes en las modalidades de estudios terminales y bachillerato tecnológico, cuya duración normal es de 6 semestres.

Page 38: Metodología para la asimilación de ingeniería de software ...

41

, A nivel licenciatura, se ofrecieron 226 programas con duración de 8 a 1 O semestres, los cuales fueron impartidos por 84 instituciones públicas y 87 privadas. Aunque los títulos de las carreras corresponden a una gran diversidad de denominaciones, el 57% de los programas corresponden a licenciaturas orientadas principalmente a administración de sistemas de computación, sistemas computacionales e informática, y el 43% restante a ingenieria de sistemas, ciencias computacionales, electrónica y cibernética/En este nivel, la matrícula para el año escolar 1990 - 1991 fue de 63,974 estudiantes, la que ascendió el 5.9°/o de la matricula nacional en este nivel, de los cuales 14,742 fueron de primer ingreso, lo que representaba el 23%.

En lo que se refiere a nivel posgrado, se impartieron en el país 32 programas, los cuales muestran una orientación hacia 4 áreas fundamentales: ciencias de la computación, computación aplicada, diseño e ingenieria y administración. La matrícula correspondiente fue de 1, 172 alumnos, la cual correspondió al 2.7% de la matrícula nacional en dicho nivel y, de ellos, 357 eran de primer ingreso, es decir el 30.5%.

Según apreciaciones de destacados profesionales en el ramo, la demanda de recursos humanos -en informática varia de 7,000 a 8,000 egresados anualmente. Si se considera, únicamente, a los egresados de educación superior, es decir 3,698 en 1990, parecerla que existe un déficit, pero este es cubierto por egresados de educación media superior, los cuales ascendieron a 3,975 en 1990. En este mismo año, la oferta de egresados de informática en total fue de 7,673. La tendencia de alumnos inscritos aparece en la figura 2.3 y 2.4.

UI

j rom ... o .e 4CXXX) UI

~ 2CXXX) E :::,

Matricula de Educación Superior en lnformitica

e O+-~~~,-------,c-----,~~~__,.~---.-~---.~---.--~---.--~~

1~ 1~ 1~ 1~ 1~1~ 1~ 1~ 1~ 1~ 1~ 1~

Afto

Figura 2.3 Crecimiento de matrícula en Informática

Page 39: Metodología para la asimilación de ingeniería de software ...

1600 1400

111 o 1200 -·;:: 100) C)

111 .5 800 11)

600 o e E 400 :::,

200 ci: o 1980

Matricula de Posgrado

1~ 1~ 1~ 1~ 1~ 1~ 1~ 1~ 1~ 1~ 1~

Afio

Figura 2. 4 Matricula de Posgrado en Infonnática

42

Otro punto a considerar en la preparación de los futuros profesionistas en infonnática, es el personal docente. Del análisis derivado de encuestas con respecto al profesorado de nivel superior, el 59"/o corresponde a personal contratado por horas, el 32% por tiempo completo y el 9"/o por medio tiempo. De lo anterior, se deduce que existen 27 alumnos por cada profesor de tiempo completo.

La distribución del profesorado de acuerdo a su formación académica, según la información de la misma encuesta, señala que solamente el 43% tiene formación en infonnática y el 57% restante en otras disciplinas.

En lo que corresponde al nivel académico, el 24% de los docentes de educación superior en infonnática cuenta con maestría y el 4% con doctorado. Cabe destacar que en lo referente al total del ·. sistema nacional de educación superior, un 20% del personal docente tiene grado de maestría y un 5% de doctorado.

En cuanto a equipo de cómputo e instalaciones de las instituciones que ofrecen programas educativos en infonnática, la encuesta aplicada por el INEGI en 1991 muestra que en promedio, por plantel de educación superior existían 13 aulas para enseñanz.a de infonnática, 3 laboratorios y 78 microcomputadoras, mientras que hay 396 alumnos; esto da como resultado una relación de 5 alumnos por microcomputadora. Cabe destacar que solo la mitad de las instituciones de educación superior reportó contar con biblioteca especializ.ada en infonnática.

En resumen, las anteriores cifras nos permiten por un lado destacar el incremento en la adquisición de hardware y la actualiz.ación, por otra parte, el escaso desarrollo de software que existe en México, sobre todo en otras áreas distintas a la administrativa, y por último, el creciente número de

Page 40: Metodología para la asimilación de ingeniería de software ...

43

egresados de escuelas con especialidades en infonnática que se integran a la vida productiva, aunque cuantos de ellos realmente se aplican al área de desarrollo de software y por otra parte, cuantos utilizan alguna técnica o herramienta de Ingeniería de Software.

Entonces, un aspecto importante para que sea posible introducir y asimilar Ingeniería de Software en México es la educación que reciben los futuros desarrolladores en la escuela, pero otro más importante es el apoyo que se les otorga en las empresas este tipo de disciplinas en la práctica. Aunque un egresado conozca lo último en herramientas CASE y en lenguajes de cuarta generación, ¿De qué le sirve si llega a una empresa donde siguen usando lenguaje de programación COBOL o DBASE simplemente sentándose frente a al computadora a programar?

2.2 CARACTERISTICAS DE LAS EMPRESAS QUE USAN INGENIERIA DE SOFTWARE.

Con el propósito de obtener información actualiz.ada sobre las empresas que utilizan Ingeniería de Software, en 1996 se elaboró un cuestionario que fue contestado por personal relacionado al área de sistemas. Se realizaron también entrevistas a gerentes de área, lideres de proyecto y jefes de desarrollo de sistemas para conocer su punto de vista sobre como se llevan a cabo las actividades de producción de software dentro de las empresas donde trabajan.

Debido a que son demasiadas las empresas mexicanas que actualmente se sirven de sistemas computacionales para su operación, se seleccionó una muestra representativa de distintas ramas de la industria y servicios. Las empresas con las que se estableció contacto fueron:

• ASEMEX (Aseguradora) • BANAMEX (Banca y finanz.as) • BANCOMER (Banca y finanz.as) • CONDUMEX (Autopartes y cables) • ERICSSON (Comunicaciones y telefonía) • GRUPO CIFRA (Tiendas de autoservicio) • ICI FARMA (Laboratorios farmacéuticos) • INEGI (Censos y estadísticas del gobierno) • PEMEX (Petróleo) • SIEMENS (Equipo electrónico) • TELMEX (Telefonía) • XEROX (Copiadoras y equipo de cómputo)

Con la información proporcionada en la encuesta mencionada aplicada al personal descrito anteriormente, se puede decir que las más importantes características que tienen las empresas que

Page 41: Metodología para la asimilación de ingeniería de software ...

44 utiliz.an técnicas y herramientas de lngenieria de Software para desarrollar sus aplicaciones de software son las siguientes:

• NIVEL DE INTEGRACION. Según la hipótesis de las etapas de computariz.ación de Nolan, [8] existen algunas empresas que se encuentran en etapa 4, la de integración, caracterizada por un intento de tomar ventaja de la nueva tecnología, integrándola a los sistemas existentes. Existe también una tendencia a cambiar rápidamente hacia la etapa 5, la de administración de datos, donde los sistemas ya integrados y la información que generan son compartidos por todas las áreas que comprenden la empresa.

• ESTADO DE ESTRATEGIA Y SERVICIO. En la teoría de los estados de la administración de cómputo, que contemplan la fase de destrez.a., servicio y estrategia, las empresas se encuentran en una mezcla entre la segunda y tercera. El estado de servicio la administración departamental controla los intereses operacionales y de computación de los departamentos a los que sirve. En el estado de estrategia, la alta gerencia controla la computariz.ación para servir a sus intereses, dirige la localiz.ación de los sistemas donde los orga.niz.acionales tienen la más alta prioridad.

• DEPENDENCIA DEL AREA DE SISTEMAS. El posicionamiento estratégico de la función del área de sistemas, según las operaciones que ésta realiz.a, es de importancia tal que la empresa a la cual sirve depende totalmente de su eficiencia.

• EXPERIENCIA EN PROCESAMIENTO DE DATOS. Empresas con más de 20 años de experiencia en el uso de computación para la operación del negocio.

• OBJETIVOS Y METAS CLAROS. Los objetivos de la empresa están bien definidos, son claros y conocidos por todo el personal. Las metas a corto plazo están diseñadas para cumplir con planes operacionales que se traduzcan en una estrategia.

• PLANEACION ESTRATEGICA Existe una planeación estratégica de los sistemas que deben realizarse para cumplir con los objetivos de la empresa.

• ORGANIZACIÓN FORMAL. La empresa está de tal forma estructurada que ayuda al personal a ejecutar sus actividades de acuerdo a la estrategia, filosofia y políticas.

• RECLUTAMIENTO DE PERSONAL. Existe reclutamiento y selección de personal con nivel de estudios adecuado a la función que desempeñan, existen planes de capacitación para que los empleados sigan creciendo junto con la empresa.

• PROCEDIMIENTOS ESTABLECIDOS. Las empresas tienen definidos los procedimientos y guías para que el personal desarrolle sus actividades de forma adecuada.

Page 42: Metodología para la asimilación de ingeniería de software ...

45 • FACILIDADES E INFRAESTRUCTURA. Existen las instalaciones adecuadas, equipo necesario y

otras facilidades técnicas requeridas por el personal de la empresa.

• DISPONIBILIDAD DE CAPITAL. Las empresas cuentan con dinero y crédito suficiente para obtener las facilidades fisicas y los recursos humanos adecuados.

• CONTROL DE PROCESOS. Existen estándares de ejecución que se miden para controlar y mantener el trabajo dentro y fuera de la empresa.

• COMUNICACION. Las lineas de comunicación entre los niveles superiores e inferiores, entre las áreas y los departamentos, y entre personal de una misma sección es adecuada, de tal manera que las inquietudes y opiniones son escuchadas y la dirección del negocio es colectiva.

• LODERAZGO EN EL MERCADO. Las empresas tienen una posición competitiva dentro del mercado al que sirven, además cuentan con prestigio a nivel nacional.

Las empresas que cuentan con las características anteriores tienen un marco normativo u organizacional adecuado, donde existe el ambiente propicio para que las técnicas y herramientas de lngenieria de Software, y de otras áreas inclusive que no se refieran a la computación, se divulguen, enseñen y utilicen.

Algunas empresas están comenz.ando a orga.niurse y dirigen sus esfuerzos para convertirse en negocios de primer plano. Aún cuentan con métodos para desarrollo de software basados en las capacidades de una o dos personas de las que se depende completamente. No existe una normatividad y las actividades se realiz.an de forma desordenada, fomentando la ineficiencia y falta de calidad en los productos de software que se realiz.an.

A continuación en la figura 2. 5 se da una lista de las empresas que se manifestaron usuarias de Ingenieria de Software y de las que hasta cierto punto utilizan alguna técnica o herramienta, pero no están organizadas de tal forma que se ha institucionaliz.a.do su utiliz.ación.

V

Page 43: Metodología para la asimilación de ingeniería de software ...

! ¡ SIEMENS TELMEX

Figura 2.5 Empresas que manifestaron usar lngerúeria de Software en 1996.

2.3 TECNICAS Y HERRAMIENTAS MAS UTILIZADAS.

46

Con las entrevistas realiz.adas a personal que labora en las empresas antes mencionadas, se obtuvo la información acerca de cuáles son las técnicas y herramientas de Ingenieria de Software más utiliz.adas.

Las empresas que aparecen en la lista que no utiliz.an Ingerúeria de Software coincidieron en que algunas de las técnicas descritas en el capítulo 1 de este trabajo, son empleadas por algunas personas del área de desarrollo de sistemas, pero su uso no está formalizadas. Las técnicas más empleadas son los diagramas de flujo, análisis y diseño estructurado, diagramas de estructura, programación estructurada, lista de requerimientos y especificación con pseudocódigo de módulos de programación. La depuración y herramientas propias de los lenguajes que se utiliz.an tales como rastreadores y depuradores también se aplican aunque muy poco.

Las empresas que si utiliz.an lngerúeria de Software según aparece en el cuadro de la figura 2.6 mencionaron en su mayoria que tienen metodologías propias que fueron instituidas de dos a cinco años atrás. Estas metodologías contienen algunos términos y puntos de vista comunes comparadas con las técnicas tratadas en el capítulo 1.

Por ejemplo, la técnica sueca llamada PROPS utilizada en la empresa Ericsson requiere que se elabore una petición formal por parte del usuario del producto de software que se pretende desarrollar. Luego, se determinan actividades criticas y recursos por actividad. Después, se elaboran diagramas donde se especifica el flujo de datos, los procedimientos y las entidades que se relacionan en cierta actividad. Se realizan también listas de datos de entradas y salidas, relacionándose unas con otras dentro de todo el sistema y se normalizan los datos. Existen también diagramas donde se especifican los programas y como se integrarán para obtener el resultado deseado. Se describen exactamente los

Page 44: Metodología para la asimilación de ingeniería de software ...

47 fonnatos de entrada por pantalla, salida impresa y otros donde se plasmarán la información procesada. Por último, se elaboran listas de verificación que permiten saber si algún paso ha sido omitido. Se puede decir que esta metodología propia de la empresa es una mezcla con modificaciones de algunas de las técnicas que se describieron anteriormente en este trabajo.

EMPRESA 1 TECNICA lITILIZADA BANAMEX 1 CASE y Prototipos

t BANCO:MER ¡

Control de Proyectos 1

!

ERICSSON 1 Metodología PROPS 1

XEROX 1 Metodología ELF ' ' !

Figura 2.6 Herramientas usadas por las empresas que manejan Ingeniería de Software.

Las herramientas más utilizadas para análisis, diseño y desarrollo de sistemas fueron: • Herramientas para administración de proyectos:

* Schedule +. * Timeline. * MS Project.

• Herramientas CASE. * EXCELERATOR. * IEW * LOA * ORACLE CASE. * PACBASE. * SQL LINK-PLUS

• Herramientas para programación, pruebas y mantenimiento. * Depuradores de código (según el lenguaje de programación). * Editores de texto. * Rastreadores de errores.

• Herramientas para construcción de prototipos. • Bases de datos interactivas. * Lenguajes de cuarta generación. * Lenguajes de programación orientados a objetos. * Librerías de programas. * Paquetes para diseño de pantallas.

Nota: El orden en que aparecen no implica mayor utilización.

Page 45: Metodología para la asimilación de ingeniería de software ...

48

Una lista completa de las herramientas CASE con una breve descripción aparece al final del presente trabajo en el Anexo B.

En los últimos dos puntos es conveniente destacar que los lenguajes de programación en que están desarrollados la mayoría de las aplicaciones son de los llamados de tercera generación, por ejemplo COBOL, RPG, DBASE y ENSAMBLADOR

Las bases de datos interactivas y los lenguajes para manejo de objetos que se mencionaron anteriormente comprenden las que acompañan a ciertas marcas de computadoras personales y otras que son muy populares. Ejemplos de las más utilizadas son:

• Adabas • C++ • Clipper • DbaseIV • DMS II • Foxbase Pro • Informix • MSAccess • Natural • Oracle • Progress

El sistema operativo de las computadoras es también un elemento que influye en las técnicas y herramientas de Ingeniería de Software que se pueden usar para desarrollar sistemas. Los sistemas operativos dependen también de la marca de computadora que se utiliza, los más empleados fueron: MVS, OS, MS-DOS y WINDOWS en computadoras IBM; UNIX en computadoras UNISYS, HP y HONEYWELL, NOS-VE en CYBER CDC.

2.4 PROBLEMATICA DE ASIMILACION.

Con ayuda de las entrevistas y las respuestas del personal que labora para las áreas de sistemas de las empresas que se definieron arriba, se obtuvieron algunas estadísticas que muestran cuales eran los principales problemas que se presentaban dentro de sus áreas de desarrollo de sistemas.

• PRESUPUESTO PARA EL AREA DE SISTEMAS. El porcentaje de presupuesto asignado al área de desarrollo de sistemas está entre 6 y 100/o del total de la empresa.

Page 46: Metodología para la asimilación de ingeniería de software ...

49 • NIVEL DE ESTUDIOS DEL PERSONAL. El nivel de estudios del personal dentro del área es de

licenciatura, el problema es que existen muchas personas ajenas a carreras relacionadas con infonnática, de tal manera que se ha aprendido esta disciplina a través de los años.\ Aunque el 90% de las personas que laboran dentro del área de desarrollo de software tienen estudios universitarios a nivel licenciatura, la mayoóa son pasantes y pocos titulados, se indicó un problema muy particular. Existen pocas personas con carrera relacionada a la informática o sistemas, y por la necesidad de la operación, se encuentran en el medio contadores, administradores, matemáticos, ingenieros en diversas disciplinas, economistas e inclusive médicos.

• EXPERIENCIA EN AREA DE SISTEMAS. Un 60%, de los entrevistados manifestaron tener entre 3 a 5 años de experiencia en desarrollo de software, el restante 400/o tiene entre 6 y 1 O años. En este punto el problema no es tanto la experiencia, sino el acelerado avance de la computación que no permite asimilar las últimas novedades tecnológicas en hardware y software.

• ROTACION DE PERSONAL. En general según los entrevistados existe poca o regular rotación de personal, pero lo que sí expresaron es que existe la tendencia en permanecer de 2 a 4 años en promedio dentro de una misma empresa hasta antes de ingresar a otra.

• CONOCIMIENTO DE COMPUT ACION. La opinión del 600/o de los entrevistados es en el sentido que los usuarios de sistemas tienen poco conocimiento de lo que es en general la computación y el desarrollo de productos de software, lo que provoca malos entendidos al pretenderse obtener más de lo posible por parte del usuario. El restante 400/o se inclinó porque sus usuarios tienen un conocimiento medio o alto.

• ENFOQUE DE LA CAPACITACION. La capacitación no es un problema ya que la mayoóa de los entrevistados reciben de 4 a 7 cursos anuales, sin embargo, muchos de éstos no están enfocados completamente a las actividades que realizan.

• PROCEDIMIENTOS NO ESTANDARIZADOS. El 700/o de los entrevistados indicaron que existen dentro de las empresas donde laboran manuales de procedimientos que indican como se debe desarrollar software, el problema es que no son actualizados o fueron elaborados con lineamientos ógidos que no van de acuerdo con la evolución del medio.

• REQUERIMIENTOS POBRES. La especificación de los requerimientos dada por los usuarios de los productos de software es en la mitad de los casos formal y completa. Según los entrevistados, el problema estriba más en el conocimiento que tiene el usuario del área que pretende automatizar que en como se especifican dichos requerimientos.

• ESTIMACION Y CONTROL DE COSTOS. En el 700/o de las empresas contactadas se realizan estudios de costo-beneficio antes de desarrollar un nuevo sistema, lo interesante es que regularmente esta estimación no se controla teniendo casi siempre más costos de los calculados. Por

Page 47: Metodología para la asimilación de ingeniería de software ...

50 otra parte, existen beneficios intangibles que no pueden medirse y por lo tanto establecerse con claridad.

• CALENDARIZACION DE PROYECTOS. En todos los casos se realiza una calendariz.ación de actividades, utiliz.ando diversas técnicas y herramientas, según manifestaron los entrevistados. En general también existe suficiente control de las actividades realizadas, pero siempre se implantan los sistemas más allá del tiempo límite por encontrarse errores.

• COMUNICACION. Entre el personal que labora dentro del área de desarrollo de sistemas existe suficiente comunicación lo que permite que no exista duplicidad de esfuerzos. Por otro lado, entre el área de desarrollo y los usuarios existe una comunicación calificada como regular tendiendo a suficiente, lo que permite que se establezcan compromisos y se cumpla con los requerimientos establecidos.

• ERRORES DE LOS SISTEMAS EN OPERACION. El 80%, de los entrevistados manifestaron que casi nunca se encuentran errores (pero si existen) y que éstos van desde los que son sin consecuencias hasta los que tienen algunos efectos. Sin embargo, no existe empresa que logre cero errores o calidad total.

• MANfENIMIENTO A APLICACIONES. Casi todas las empresas informantes hacen mantenimiento considerable a sus sistemas en operación, pocas son las que realizan mayormente desarrollo de software. Los dos tipos de mantenimiento realizado generalmente son correctivo y adaptativo. Pocos hacen mantenimiento preventivo o perfectivo.

• AUDITORIAS. Un 600/o de los entrevistados indicaron que dentro de la empresa se realiz.an auditorias de sistemas existentes para verificar que se siguen cumpliendo con los objetivos para los que se desarrollaron. En el 400/o no existe forma de conocer el estado de los sistemas sino hasta que fallan.

• TECNICAS NO ESTANDARES. En las empresas donde se señaló anteriormente que no se emplea una técnica en especial para desarrollar productos de software, se indicó que más bien cada persona trabaja con algún método particular en la medida que se va elaborando un sistema, según convenga. En otros casos existen estándares dictados por la empresa que son seguidos solo si son requisito formal pedidos por la organización, en todo caso y por considerarse obsoletos o no prácticos, se opta por hacer las cosas "como sea que salgan bien".

• FALTA DE HERRAMIENTAS. Solo tres empresas de las diez contactadas utiliz.an herramientas CASE para análisis y diseño de sistemas, en dos de las cuales tienen muy poca experiencia y no se ha explotado el potencial que estas ofrecen. La tercera está rediseñando muchos de sus sistemas actuales con ayuda de CASE que está comenzando a dominarse por parte de su personal. En las demás compañías, se utiliz.an apenas herramientas de computadoras personales para elaborar

Page 48: Metodología para la asimilación de ingeniería de software ...

51

manuales de usuario, diagramas de procesos, calendarios de actividades, control de costos incurridos y otras tareas de control.

• MALA ORGANIZACION. A continuación se expresan algunas opiniones que reflejan que la problemática de la organización adecuada de la empresa depende significativamente la operación del área de desarrollo de sistemas.

* "Falta involucranúento de la empresa, no hay visión de los objetivos ni relación entre las entidades que la conforman".

* "Existe deficiente organización de la empresa, no se da importancia y apoyo al área de sistemas, no existen recursos humanos calificados".

* "Existe poca comunicación entre todas las áreas de sistemas, no hay una metodología bien definida, no están bien delimitadas las funciones de cada departamento".

* "Desorganización del área de sistemas, no existe estándares, no hay una descripción de puestos".

En síntesis, la problemática que se tiene en México para la asimilación de la lngenieria de Software es compleja y variada que pasarán varios años antes de que las empresas den importancia relevante a la función de informática como puntal de su progreso.

Por lo tanto, será importante observar como se van integrando nuevas técnicas y herranúentas al quehacer cotidiano del desarrollo de productos de software, según se vaya probando su potencialidad de uso para incrementar la productividad de un área, que a pesar de contar con uno de los inventos más revolucionarios de este siglo, aún tiene poco tiempo de haber concebido metodologías eficientes para generación de software.

Page 49: Metodología para la asimilación de ingeniería de software ...

CAPITUL03

METODOLOGIA PARA LA ASIMILACION

DE INGENIERIA DE SOFTWARE

En el capítulo 1 se ha tratado el marco teórico de la Ingeniería de Software, presentando su definición, utilidad y algunas técnicas y herramientas que la conforman. En el capítulo 2 se menciono la tendencia del mercado de hardware y software en México, además la estadística de la formación de recursos humanos en informática. También se dieron los detalles de un estudio elaborado en algunas empresas, que muestra que no todos utiliz.an Ingeniería de Software.

A continuación se propone una metodología que ayuda primero a detectar los elementos que se deben tomar en cuenta al hacer un estudio del área de desarrollo de sistemas, para posteriormente hacer una planeación del proyecto de asimilación tomando en cuenta consideraciones técnicas, económicas y organiz.acionales para seleccionar los métodos y las herramientas de Ingeniería de Software adecuadas a cada empresa.

Antes de hacer cualquier esfuerzo por adoptar nuevas herramientas y técnicas de Ingeniería de Software, se requiere saber el estado actual del área de desarrollo de sistemas, con el fin de conocer que se utiliz.a para desarrollar sistemas y en que grado se elaboran productos de software de calidad.

Al hacer un estudio se conoce la problemática alrededor del desarrollo de productos de software, se obtiene información que indica en que grado se ha integrado la Ingeniería de Software en las empresas. En el presente trabajo se proporcionarán guías generales para desarrollar un estudio de sistemas que junto con la voluntad de la organización de cambiar, dará como resultado un aumento en la productividad en el desarrollo de sistemas.

Page 50: Metodología para la asimilación de ingeniería de software ...

54

Para adoptar técnicas y herramientas de lngenieria de Software para crear nuevos sistemas y dar mantenimiento a los actuales, se deben seguir los siguientes pasos:

• Estudio del área de sistemas • Planeación del proyecto de asimilación • Desarrollo de la estrategia • Evaluación de resultados • Implantación • Seguimiento

3.1 ESTUDIO DEL AREA DE SISTEMAS.

Si se menciona el término "Ingeniería de Software" a un programador o a un analista de sistemas promedio, la respuesta que seguramente se obtendría es "Ah s~ eso que se utiliz.a para hacer sistemas muy sofisticados como para el proyecto Guerra de las Galaxias, pero, eso no se aplica a mi trabajo".

Un análisis detallado y honesto de la función que desempeña actualmente el área de desarrollo de sistemas es fundamental para conocer que actividades se realiz.an y sobre todo, de lo que utilizan para desarrollar y mantener programas de computadora, con el objeto de encontrar los aspectos que afectan principalmente el buen desempeño del trabajo. Esta investigación es recomendable que se realice con la opinión del personal que trabaja en el área y de ser posible lo debe realiz.ar un asesor que conozca de Ingeniería de Software. Aquí cabe mencionar que es recomendable que esta actividad sea realiz.ada por personal externo al área de sistemas, ya sea un consultor externo o alguna persona ajena a ésta área que pertenezca a la empresa (auditor), los resultados se darían sin tanta influencia de las percepciones que pueda tener alguien que si pertenece al área mencionada.

El objetivo de este estudio es tener un inventario del hardware y software con el que se trabaja dentro del área de desarrollo de productos de programación, además se debe conocer la preparación y experiencia de quienes trabajan en ésta y lo más importante, que técnicas y herramientas son utilizadas para producir sistemas dentro de la empresa.

Idealmente, se debiera elaborar otro estudio, pero no del área de sistemas, sino de la orga.niz.ación a la cual sirve, para conocer problemas como la asignación insuficiente de presupuesto, el deficiente reclutamiento y selección de personal, la poca importancia que en ocasiones se da a dicha área, la nula comunicación con los usuarios, y en fin, toda la problemática que de alguna fonna afecta el buen desempeño del área referida. Regularmente, este tipo de estudios no se puede realiz.ar porque se pueden encontrar anomalías que expongan errores cometidos en otros niveles y secciones que a la larga podrían detener la marcha del proyecto de asimilación.

Page 51: Metodología para la asimilación de ingeniería de software ...

55

En resumen, el estudio del área de sistemas se puede subdividir en las actividades:

• Inventario de Hardware y Software • Nivel de preparación y experiencia del personal • Técnicas y herramientas utiliz.adas actualmente • Organiz.ación del área de sistemas

3.1.1 INVENTARIO DE HARDWARE Y SOFTWARE.

El inventario de equipo de cómputo puede ya tenerse dentro de la empresa y se requiere para hacer la adecuada selección de herramientas según el ambiente de cómputo en el que se trabaja, esto es, tipo de computadoras, capacidades, velocidades, etc. Si la información es detallada., es posible elegir con mayor seguridad herramientas poderosas que aumenten la productividad significativamente al hacer desarrollos de software.

La información relevante que se debe obtener es:

• Tipo de computadora (Micro, mini o macrocomputadora) y marca. • Capacidad de memoria principal. • Velocidad de procesamiento. • Capacidad de almacenamiento secundario. • Ambiente de presentación (gráfico, tipo caracter, etc.). • Dispositivos conectados a la computadora ( o red).

Esta información servirá en el momento de elegir una herramienta automática que pennita trabajar más rápidamente. En ocasiones es necesario contar con gran capacidad de memoria, una buena velocidad de procesamiento, ambiente gráfico e inclusive capacidad de almacenamiento secundario considerable para correr paquetes CASE. Si la herramienta seleccionada rebasa la capacidad del equipo con el que se cuenta, entonces no servirá de nada. Es como tener un piloto de Fórmula 1 manejando un auto compacto.

Al igual que el punto anterior, y muy ligado con el conocimiento de técnicas y herramientas utilizadas actualmente en el área de desarrollo de sistemas, es muy importante conocer el software de apoyo que se tiene. En este punto la información que es necesario obtener sobre software es:

• Sistemas operativos que se manejan (MS-DOS, UNIX, Wmdows) • Lenguajes de programación, editores, (Visual Basic, Delphi, C++) • Diagramadores, paquetes de dibujo (Flow, Freelance, ABC Snapgraphics) • Paquetes de productividad (Hojas de cálculo, procesadores de texto, manejo de proyectos) • Herramientas automáticas (CASE, documentador automático de programas)

Page 52: Metodología para la asimilación de ingeniería de software ...

56

Esta información nos servirá para verificar qué se usa actualmente como apoyo para el desarrollo de sistemas. Aquí existen algunas consideraciones importantes:

• SOFTWARE NO UTILIZADO. En ocasiones hay áreas de desarrollo de sistemas que elaboran programas digamos en Turbo C, usando el editor propio, pero son pocas personas que conocen el manejo al 100%, de todas las opciones, como son las del compilador, del rastreador de errores y otros aspectos, por considerarlos conocimientos de experto. Por lo tanto se limitan a hacer programas y compilarlos, nada más.

• SOFTWARE ESCONDIDO. En otras empresas, se adquieren por ejemplo editores para diversos paquetes, utilerías de aplicación general y otros, que solo quién lo compró o conoce, los usa. Por eso, es necesario que todas las áreas incluyendo las de usuarios, den a conocer lo que utiliz.an y maneJan.

• SOFTWARE NUEVO. También es conveniente consultar publicaciones y libros donde aparezcan las nuevas versiones de productos y los nuevos paquetes que han salido al mercado. Debido a la competencia que existe en la industria de software y a los adelantos de la tecnología, es común encontrar que el paquete o programa que actualmente es utilizado dentro de la empresa, ya tiene una nueva versión o existe uno mejor, que se puede adquirir. El tener infonnación al día es muy importante.

Con esta información se puede saber que existe actualmente y en muchas ocasiones no se utiliza, de tal manera que la adquisición de nuevo software no sea muy costosa.

3.1.2 NIVEL DE PREPARACIÓN Y EXPERIENCIA DEL PERSONAL DEL ÁREA DE SISTEMAS.

Con la información proporcionada mediante entrevistas con el personal del área de desarrollo de software, se establecen estrategias individuales de capacitación con el fin de que conozcan y usen las técnicas y herramientas de Ingeniería de Software que se elegirán.

La experiencia es un factor importante, ya que el conocimiento de ciertas personas acerca de la operación del área, ayuda a seleccionar mejor el tipo de técnicas de Ingeniería de Software más adecuadas que posteriormente se usará.

La preparación o nivel de estudios del personal supone que tan actualizado y capacitado es el individuo, debido a que los cambios tan dramáticos que existen en el área de computación, hacen que existan marcadas diferencias en quienes terminaron su carrera hace varios años respecto a quienes recientemente han egresado. Esta información, en un momento dado, puede servir para asignar a

Page 53: Metodología para la asimilación de ingeniería de software ...

57

personal clave la tarea de capacitación de sus otros compañeros. Igualmente, se puede utiliz.ar para redefinir los perfiles de los puestos dentro del área de desarrollo de sistemas.

Los aspectos que se deben considerar en este estudio del personal del área de sistemas son:

• Grado de escolaridad (Técnico, licenciatura, posgrado). • Enfoque de estudios (Carrera en el área de computación u otra). • Capacitación (Cursos tomados sobre computación y áreas afines). • Experiencia en computación (Tiempo trabajando en el área). • Conocimiento de lngenieria de Software (Número de técnicas y herramientas conocidas).

Este estudio puede arrojar consideraciones muy importantes como la existencia de personal que ha aprendido a trabajar de manera práctica, sin los estudios de una escuela, o personal que conoce ciertas técnicas o herramientas pero que no las usa por que el área no lo exige. Estas personas inclusive podrian involucrarse más en el plan de implantación de Ingenieria de Software y seria una motivación para ellos poder transmitir sus conocimientos.

También esta información del nivel de preparación y experiencia ayudará a obtener el perfil de conocimientos del área de desarrollo de sistemas respecto a las aptitudes y carencias, de manera que se elabore más adelante un buen plan de capacitación que permita obtener un buen nivel de conocimientos y que además que se compense con las vivencias y experiencia de los elementos con más años en el área.

3.1.3 TÉCNICAS Y HERRAMIENTAS UTILIZADAS ACTUALMENTE.

Esta investigación se realiz.a con el objeto de conocer las técnicas empleadas por el personal del área de sistemas. En ocasiones, un analista o un programador dibuja un diagrama de proceso o define un programa en su propio "pseudocódigo". Esto es útil para más tarde establecer cuáles son las técnicas y herramientas más apropiadas al ambiente propio del área, la preparación del personal y el uso que han tenido e inclusive para en un momento dado, detectar desviaciones o malas interpretaciones del manejo de las mismas.

Si el encargado del proyecto de asimilación sabe con que recursos cuenta, es más sencillo obtener información de lo que requiere teniendo en mente los objetivos que se ha planteado. No es dificil encontrar organiz.aciones que tienen los recursos o facilidades para adquirir software comercial para desarrollo de sistemas y aún siguen usando herramientas que fueron modernas años atrás. Pero en ocasiones, las restricciones de presupuesto no permiten comprar herramientas sofisticadas, es entonces cuando es conveniente tomar lo que se tiene, seleccionar lo que permita mejorar la operación y utiliz.arlo dando capacitación.

Page 54: Metodología para la asimilación de ingeniería de software ...

58

Al obtener una relación de las técnicas que actualmente se usan, se puede inclusive llegar a proponer un estándar que sea seguido por quienes desarrollan programas, también existe la posibilidad de hacer comparaciones con técnicas modernas de forma tal que se busque la capacitación para que sean del dominio general.

En este punto, es conveniente conocer mediante entrevistas o utilizando una encuesta:

• FASES AL DESARROLLAR UN PROGRAMA Algunas personas comienzan con la programación, luego hacen algo de diseño y si algo sale mal, un poco de análisis. Inclusive hacen un poco de prototipos y pruebas generales. Es bueno saber ¿cómo le hace cada quién? Esto podria servir para saber que todo se hace, pero no en el orden adecuado.

• METODOLOGÍA APLICADA EN LA SOLUCIÓN DE PROBLEMAS. Algunos hablan de técnicas estructuradas, otros de objetos, algunos más de aplicaciones gráficas. La definición de la metodología que cada quién use es importante, porque ayuda a conocer la tendencia y preferencia, de manera que la implantación de Ingeniería de Software sea más sencilla.

• PROCEDIMIENTOS GENERALES. En algunas áreas de sistemas es frecuente ver que los procedimientos los hace cada cual o que todo mundo quebranta las normas esperando que sean atendidos sus problemas primero. El caso es que en muchas veces no se exige que el personal que desarrolla o da mantenimiento a sistemas elabore documentación, tampoco que siga un estándar cuando programa, mucho menos que utilice cierta técnica. El establecer un procedimiento y reglas generales permite que exista una disciplina que es un factor importante implantar Ingeniería de Software.

• TÉCNICAS UTILIZADAS EN CADA FASE. Aunque muchas personas solo programan sin hacer análisis o diseño, es frecuente que usen alguna técnica en particular aunque sea propia. El conocimiento de que técnica es usada para desarrollar un programa en cada fase, permitirá saber que da resultado o que se debe perfeccionar a fin de que todos la utilicen con ventajas.

• HERRAMIENTAS USADAS. Un simple programa para hacer diagramas o un procesador de texto donde almacenar un diccionario de datos se convierte en una herramienta, cuando se generan cambios que primero se deben visualiz.ar antes de implantar. Además ayudan a hacer correcciones sin tener que generar documentación nueva. El hecho de usar simples paquetes disponibles en lugar de sofisticadas herramientas automáticas, ayudará a obtener más provecho de los recursos instalados. El saber qué herramientas se usan ayudará a complementar la idea que se genere más adelante de lo que se debe usar para implantar Ingeniería de Software.

En resumen, el realiz.ar un estudio de las técnicas y herramientas que actualmente son utilizadas en el área de desarrollo de software, pennite establecer un punto de partida hacia la selección de las más adecuadas según su operación.

Page 55: Metodología para la asimilación de ingeniería de software ...

59

3.1.4 ORGANIZACIÓN DEL ÁREA DE SISTEMAS.

Además del equipo, el personal y el presupuesto con que se cuente para mantener en operación un área de desarrollo de sistemas, es importante revisar cómo está organizado el departamento, cuáles son los procedimientos que en este se realizan, la jerarquía del personal y las atribuciones de los mismos, con el objetivo de preveer posibles obstáculos en la implantación de Ingeniería de Software dentro de la empresa.

Las dos consideraciones que se deben tomar en cuenta para crear un buen ambiente organizacional que ayude y fomente el uso en este caso de nuevas metodologías y herramientas de Ingeniería de Software son:

• Administración de la tecnología de información. • Reingeniería de negocios.

La administración de la tecnología de información, se refiere a los procedimientos que se deben establecer y seguir para apoyar un proceso de negocios, para lograr que este sea más eficiente y se puedan disminuir costos.

Existen algunos lineamientos que se deben seguir con el propósito de administrar y organizar mejor el uso de las tecnologías de información, y en este caso en particular, la introducción de Ingeniería de Software al área. Estos lineamientos son:

• NO ASIGNAR PRESUPUESTO SIN CONOCER EN QUE SERA UTILIZADO. Muchas organizaciones destinan un porcentaje de sus ganancias en tecnología para tratamiento de información, sin embargo, este presupuesto puede resultar insuficiente o elevado dependiendo de que se pretende hacer con este. En otras palabras, se debe analizar con profundidad los requerimientos de información en la organización antes de destinar un presupuesto para adquirir herramientas que sirvan para procesar y obtener información.

• IDENTIFICAR EL PAPEL DE LA TECNOLOGIA DE INFORMACION EN LA EMPRESA. Es importante evaluar el impacto de las aplicaciones existentes dentro de la organización y evaluar la importancia estratégica (por ejemplo, que el uso de Ingeniería de Software permita generar sistemas más flexibles que ayuden a otorgar ventaja competitiva a la empresa o que modifique las fuerzas del mercado) de nuevas aplicaciones.

• IDENTIFICAR OPORTUNIDADES PARA EL USO DE TECNOLOGIA DE INFORMACION. Los procesos de una organización, si bien pueden reinventarse, están presentes y es necesario identificarlos. La tecnología y el uso de Ingeniería de Software deben estar ligados a estos procesos como uno de los insumos de control de los mismos. Asimismo,

Page 56: Metodología para la asimilación de ingeniería de software ...

60 se deben identificar oportunidades con base en la creación de ventajas compet1t1vas, modificaciones a la base de la competencia, cambios en las fuerzas del mercado y apoyo a la Reingenieria en la organización.

• SELECCIONAR PROYECTOS CON BASE A SU IMPACTO Y UTILIDAD. Una vez identificados los procesos que pueden apoyarse con tecnología de información, es necesario evaluar qué tan mal están funcionando, que tan factible es el uso de nuevas tecnologías y metodologías en los mismos y qué impacto tienen. Un balance adecuado entre la necesidad, la factibilidad y el impacto de un proyecto es importante para ayudar a definir el plan de asimilación de tecnología dentro de la empresa.

• PASAR DE UNA POLITICA CENTRALIZADA A UNA DE ADMiriISTRACION DE REDES. De acuerdo a Donovan [5], existen tres dimensiones para descentralizar la función informática en una organización: Equipo, desarrollo y toma de decisiones. Considerando estas dimensiones, existe diferentes políticas que pueden utilizarse para administrar la función de informática en la organización y que ayudan a tomar decisiones como por ejemplo, el de un proyecto de asimilación de Ingenieria de Software. Estas son:

* La de "Centralización Total", en la cual, todo el equipo, el desarrollo y la toma de decisiones están centralizadas, y que representa la política que muchas organizaciones siguieron en décadas pasadas.

* La de "Hermano Mayor", en la cual lo único que se descentraliza es el equipo, pero la toma de decisiones con respecto a tecnología de información y el desarrollo de aplicaciones sigue estando centralizado.

* La de "Perro Guardián", en la cual se descentraliza el equipo y el desarrollo de aplicaciones, pero la toma de decisiones sigue estando centralizada.

* La de la "Mano que Ayuda", en la cual se involucra a los usuarios en decisiones sobre el uso de tecnología de información en sus procesos, y se descentraliza el equipo, pero el desarrollo de aplicaciones sigue siendo en forma centralizada.

* La del "Administrador de Redes", en la cual se descentralizan las tres dimensiones señaladas, y la función de informática se concentra más en facilitar la comunicación entre procesos, en establecer estándares y en apoyar a los usuarios en la toma de decisiones, en lugar de desarrollar y controlar centralmente el uso de tecnología de información.

• OBTENER EL COMPROMISO DE LA AL TA GERENCIA. Es fundamental que el uso de tecnología de información en la organización cuente directamente con el apoyo comprometido

Page 57: Metodología para la asimilación de ingeniería de software ...

61

de la alta gerencia. Gran parte de los fracasos de los proyectos se debe precisamente a la falta de apoyo por parte de los tomadores de decisiones.

• RECONOCER EL PAPEL DE DIFERENTES AGENTES. Es común encontrar que los responsables de administrar y organizar el uso de tecnología de información en las organizaciones se consideran los dueños de éstas y su interacción con los usuarios es limitada. Es necesario formar equipos de trabajo interdisciplinarios, donde participen tanto usuarios como tecnólogos, donde la tecnología de información se vea como parte integral de los procesos.

• EVALUAR LA POSIBILIDAD DE APOYOS EXTERNOS. Otra fuente de fracaso en la administración de las tecnologías de información en las organizaciones se debe a que muchas de ellas pretenden ser totalmente autosuficientes en el desarrollo y operación de la tecnología de información. Recientemente, el recurrir a apoyos externos para capacitación, desarrollo u operación ha demostrado que puede ser una buena estrategia.

La Reingenieria de negocios es otra opción que se recomienda usar si existen problemas en el área de desarrollo de sistemas en cuanto a cómo se realizan sus actividades y procesos, entonces es posible aplicar la Reingenieria para obtener una organización eficiente.

Un proyecto de Reingenieria es la mejor oportunidad para definir la necesidad de información y de apoyo en tecnologías de información. Un experto en administración de computadoras será la persona adecuada para analizar dichas necesidades y aplicar las tecnologías correspondientes.

El conocimiento de administración de computadoras abarca las siguientes áreas de conocimiento:

• CAPACIDADES. Qué puede hacer por la empresa cada tipo de tecnología de información.

• LIMITACIONES. Que constituyen las fronteras de las capacidades de las tecnologías, así como las dificultades que pueda experimentar el personal que las opera.

• COSTOS. Lo que cuesta comprar, instalar, aprender, utilizar, manejar y apoyar las tecnologías.

• MÉTODOS. Incluyendo metodologías de desarrollo de sistemas, enfoques de administración de centros de datos, métodos de administración de servicios y métodos de administración de redes de área local, por ejemplo.

El trabajo conjunto de la administración de computadoras y la Reingeniería aplicada a los procesos de negocios, es el comienzo del uso eficaz y controlado de la tecnología de información.

Page 58: Metodología para la asimilación de ingeniería de software ...

62

El análisis que se hace en un proyecto de Reingeniería de negocios debe abarcar diferentes etapas:

• Valorar el apoyo de los servicios de infonnación actuales relacionados con los procesos que se estudian.

• Encontrar las tareas y subprocesos que tengan un requerimiento crítico de infonnación.

• Determinar la fonna de mejorar los procesos utilizando las tecnologías de infonnación.

• Definir la arquitectura de la tecnología de infonnación que se empleará.

• Implantar las tecnologías de infonnación necesarias utilizando los métodos de Reingeniería como una base.

• Utilizar modelos de Reingeniería sobre una base rutinaria para controlar el flujo de infonnación dentro de la empresa.

• Usar Reingeniería de negocios para rediseñar los métodos y procedimientos que se llevan a cabo dentro del área de desarrollo de sistemas con el objeto de implantar tecnologías como la Ingeniería de Software para aumentar su productividad.

En el capítulo 4 se tocará mas a fondo el tema de Reingeniería que es de vital importancia para asegurar el buen funcionamiento del área de desarrollo de sistemas.

3.2 PLANEACION DEL PROYECTO DE ASIMILACION.

De manera similar que se planea un proyecto de desarrollo de software se debe definir un camino a seguir para implantar Ingeniería de Software dentro de una empresa. El establecer objetivos, definir estrategias, llevar un calendario de actividades, hacer mediciones y evaluaciones nos pennite conocer los resultados y compararlos contra los que se obtenían antes de la implantación.

En general y no importando el tipo de empresa, existen actividades que se deben realizar para obtener, entre otras, la aprobación de la gerencia, los recursos tanto económicos, de personal y de software, al igual que la capacitación adecuada para entender y dominar las técnicas necesarias para aplicar Ingeniería de Software.

En este punto también es conveniente conocer lo que en otras empresas se utiliza, porque el conocimiento de otras experiencias que en ocasiones son similares a la propia o según el tipo de

Page 59: Metodología para la asimilación de ingeniería de software ...

63 aplicaciones que se desarrolla según la actividad a la que se dedique la empresa (por ejemplo, una herramienta utilizada por un Banco tal vez no sea tan eficiente en un ambiente de Tiendas departamentales), ya que nos pennite conocer problemas y experiencias en otros lugares, de manera que sirvan para evaluar lo que se pretende elegir.

Aquí es muy importante tener en claro que es lo que se persigue para seleccionar lo que nos llevará a ello. Es importante tener en cuenta que para incrustar un clavo en la madera se requiere un martillo, y no un cuchillo. Aunque a veces existen técnicas y herramientas recientes, que nadie ha usado ni conoce, es bueno evaluarlas objetivamente antes de usarlas, tampoco no dejarse llevar por la moda o lo que dice el vecino, sino realmente buscar lo más adecuado para resolver la problemática.

A continuación se presentan las principales actividades que deben tomarse en cuenta para arrancar un proyecto de asimilación de lngenieria de Software.

3.2.1 DEFINICIÓN DEL OBJETIVO DEL PROYECTO.

Esta es la primera actividad a realiz.ar. Es muy importante definir los alcances y limitaciones del proyecto para implantación de lngenieria de Software dentro de una empresa. Si no se plantea adecuadamente el objetivo general y los específicos, es muy posible que se pierda el sentido de lo que se pretende realizar por plantear un proyecto muy ambicioso.

Los objetivos deben ser claros, concisos, cuantificables y factibles, además, deben darse a conocer al personal encargado de realiz.ar el proyecto. En la medida de lo posible, se deben formular metas que su consecución permita llegar al objetivo deseado.

Un ejemplo de objetivo general seria el siguiente:

• Utiliz.ar la técnica de prototipos y herramientas CASE en el departamento de sistemas para desarrollo de todos los nuevos sistemas en un plazo de 3 meses.

Ejemplos de objetivos específicos:

• Reducir el tiempo de desarrollo de un sistema de control de inventarios a 4 meses aplicando las técnicas estructuradas de Gane y Sarson.

• Difundir los principios de técnicas estructuradas sobre todo los conceptos de pseudocódigo, acoplamiento y cohesión de diseño a todos los programadores junior para que los apliquen al programar.

• Establecer que en todos los proyectos de desarrollo de nuevos sistemas se deben usar el paquete Microsoft Project para Wmdows para definir recursos, costos y tiempos.

Page 60: Metodología para la asimilación de ingeniería de software ...

64

• Reducir un 50%, los costos actuales de elaboración de documentación de los sistemas posterior a su implantación al utilizar los paquetes gráfico FlowChart para diagramas y procesador de texto Microsoft Word para manuales.

Esta es la primera actividad y a la vez la más importante, porque de esto dependen el éxito del proyecto, debido a que los objetivos servirán para la revisión y evaluación de resultados al final del proyecto de asimilación de Ingeniería de Software. Si los objetivos son ambiguos, confusos y no cuantificables, será dificil hacer una evaluación objetiva.

3.2.2 ACTIVIDADES Y TIEMPO.

Todo proyecto de desarrollo de productos de software requiere una planeación adecuada de las actividades a realiz.ar. De igual fonna, definiendo acciones, recursos humanos, económicos y tiempos, se puede tener un control más preciso sobre todo el proyecto de asimilación. El gerente de sistemas es la persona más adecuada para realiz.ar esta tarea, debido al conocimiento que tiene del área. No obstante, obtener apoyo y asesoría externa, es en ocasiones muy conveniente.

El empleo de las herramientas como Microsoft Project que son los paquetes que permiten administrar los proyectos, descritas en el Capítulo 1 de este trabajo, ayuda a manejar rutas criticas, recursos y tiempos de manera que se puedan asignar las actividades más importantes a las personas adecuadas. Además, el control del proyecto es clave para obtener los resultados a tiempo y cumplir con todos los objetivos planteados.

3.2.3 EQUIPO DE TRABAJO.

Es necesario especificar en este punto el personal que se hará cargo del proyecto de asimilación, que de preferencia pertenezca una parte al área de desarrollo de sistemas y otra parte que sea personal externo, con la ventaja de que los primeros pueden ayudar con su conocimiento del lugar donde trabajan, y los segundos que pueden dedicar tiempo completo al proyecto, tomando en cuenta que el personal del área de sistemas seguramente seguirá desempeñando sus funciones mientras se lleva a cabo el proceso.

Es importante involucrar también a alguna persona del área gerencial que pueda aportar ideas, solicitar recursos (personal, equipo o dinero) para resolver problemas mientras el proyecto avanz.a y además verificar que todo se hace dentro del costo y tiempo asignados. Además estará al tanto de los pormenores del mismo. El contar con el apoyo de una persona de la gerencia motiva a los integrantes del equipo a dar lo mejor de sí en la consecución de los objetivos.

Por otra parte, se debe considerar también a otro elemento importante que debe estar incluído en el equipo: El usuario. Su contribución servirá para que se seleccionen técnicas y herramientas en las

Page 61: Metodología para la asimilación de ingeniería de software ...

65

que él y sus colaboradores puedan participar, ya que uno de los problemas más importantes a resolver es la comunicación entre el área de desarrollo de sistemas y sus "clientes" los usuarios. Si se elige una herramienta en donde el usuario no entienda su funcionamiento, puede dar como consecuencia sistemas desarrollados para los programadores, no para el usuario. Inclusive se puede pensar en algo que usen los usuarios para definir sus requerimientos y que luego pasen a los analistas y programadores. En resumen, su opinión también es importante.

El equipo debe de conformarlo tantas personas como sea necesario, pero cuidando que no sean demasiados ni muy pocos ( esto dependerá del tamaño del proyecto y de los recursos humanos y económicos con los que se cuente), que comprendan el compromiso adquirido y en donde se conjunte experiencia con conocimientos, inclusive buscar formar equipos multidisciplinarios donde las personas con diferentes carreras profesionales ayuden a buscar técnicas tanto de Ingeniería como de Administración, además de las propias de Ingenieria de Software, que en conjunto permitan que se forme un ambiente propicio para el desarrollo de sistemas de calidad.

3.2.4 COSTO DEL PROYECTO.

Antes de comenzar a sumar y restar costos, es necesario conocer el presupuesto asignado al proyecto, que además del hardware, software y personal con que se cuenta, es muy importante. Conociendo el monto que se puede gastar, que es muy dificil de deducir dado que proyectos de este tipo pueden incurrir en muchos gastos no planeados, es posible manejar tanto el tiempo de terminación dependiendo de los recursos disponibles.

El calcular el costo del proyecto está muy ligado con la planeación del proyecto. Si se sigue la recomendación de utilizar un paquete de administración de proyectos para colocar recursos, tiempos y costos en las actividades, se obtendrá el tiempo que se llevará el desarrollo de todo el proyecto además de los costos, tanto por actividad como el total.

Esta información es importante, pero además se puede hacer un estudio de costo-beneficio donde se indique cuánto se va a gastar en el proyecto y cuáles son los beneficios que se van a obtener. Algunos de estos costos surgirán hasta la siguiente fase de Diseño de la estrategia de asimilación, pero en general los costos en que puede incurrir un proyecto de esta clase son:

• Costo de software adquirido • Costo de capacitación o entrenamiento • Costo de equipo de cómputo o ampliación de capacidad del mismo • Costo de asesoria para la realización del estudio • Costos propios del desarrollo del proyecto

Page 62: Metodología para la asimilación de ingeniería de software ...

66

Para los beneficios, el problema consiste en considerar como tal el ahorro al desarrollar sistemas en menor tiempo o al liberarse sistemas que funcionen correctamente desde la primera vez, como por ejemplo:

• Ahorro de tiempo y por lo tanto costo, en el desarrollo y mantenimiento de programas • Ahorro en la elaboración de documentación de los sistemas • Ahorro de los costos de corregir errores después de la implantación de sistemas que se

atribuye a la falta de calidad • Ahorro por la reducción de personal asignado a proyectos de desarrollo y

mantenimiento • Ahorro de tiempo y costo de desarrollo al reutiliz.a.r programas ya liberados y probados • Ahorro de costo por la revisión y comprensión de programas para darles mantenimiento • Etcétera

La mayoria de los costos atribuidos al proyecto se obtendrán de la siguiente fase, es decir, de la elaboración de la estrategia de asimilación. El costo del proyecto es el punto más importante a observar por parte de los directivos encargados de aprobar el mismo, así que es necesario justificarlo adecuadamente mostrando todas las ventajas que se pueden obtener al utilizar adecuadamente técnicas y herramientas de Ingenieria de Software.

3.2.5 HARDWARE A UTILIZAR.

Para definir específicamente las técnicas de Ingenieria de Software a utilizar, es necesario primero establecer cuál será la computadora o equipo que se usará en una primera instancia, llevar a cabo el proyecto y después usarlo como base para extender el uso de todo lo aprendido en la empresa.

La pregunta ¿ Qué selecciono primero, el software ( en este caso la herramienta de lngenieria de Software) o el hardware? Es muy interesante. Ambos están muy relacionados, no es común adquirir un automóvil por el tipo de llantas o el motor que tiene. Ambos elementos son importantes y deben valorarse al mismo tiempo. Existen compañías que venden software (a un precio muy elevado) y regalan el hardware para su uso, en otros casos una computadora se debe desechar porque el software que se desea adquirir no funciona en la misma. Por lo tanto, es bueno tener en cuenta al hardware y software juntos, para compararlos contra otras opciones. Toda decisión implica tener buena información de lo que se pretende comprar, un buen sentido común ayuda a hacer una elección inteligente.

Las consideraciones que se deben tomar en cuenta respecto al equipo son:

• MARCA Y MODELO. En ocasiones una marca de computadora que no es tan "compatible" con las demás no ayuda a usar todo el tipo de software conocido. Ejemplo de esto son las computadoras Macintosh que algunas veces sólo pueden usar software especial hecho para e!j8,

Page 63: Metodología para la asimilación de ingeniería de software ...

67

marca. El mismo programa en ocasiones no se puede utilizar en computadoras compatibles con sistema Windows porque las computadoras no tienen una arquitectura similar. Otro caso especial para macrocomputadoras es el estándar de Hewlett Packard y el de IBM, que hace que el usuario solo adquiera equipo del mismo fabricante porque el software así lo requiere.

• CAPACIDAD. La mayoría de los programas que utilizan herramientas CASE son gráficos, lo que significa que al almacenar la información de un sistema, sus relaciones, la definición de datos y en sí todo lo que involucra, requiere de grandes cantidades de megabytes para hacerlo. Y eso no es todo, la recuperación de la información requiere de discos duros más eficientes e inclusive pensar en tecnologías como el CD-ROM para almacenar gran volumen de información. Una computadora que no cuente con recursos de almacenamiento suficientes, tiene el riesgo de perder valiosa información lo que seguramente fiustrará el intento de manejar tal o cual herramienta de Ingeniería de Software.

• VELOCIDAD. Además de la cantidad de almacenamiento necesaria para la información que genera una herramienta CASE por ejemplo, la velocidad en que muestre un resultado o en que haga una actualización de los datos es muy importante para el usuario. Una computadora con velocidad ( considerar el caso de las computadoras personales) de 60 Mhz. es muy lenta comparada con los nuevos estándares de 200 Mhz. o más de un equipo tipo Pentium 11. Si un usuario debe esperar varios minutos frente al monitor para ver los resultados, esto lo desalienta y además retrasa el proyecto. Un equipo con buena velocidad de procesamiento es muy importante para trabajar.

• ESCALABILIDAD. Debido por una parte a que el desarrollo de hardware va evolucionando rápidamente y en menor escala el software, el usuario de herramientas de Ingeniería de Software debe seleccionar una computadora que no se haga obsoleta a corto plazo, que tenga la posibilidad de aumentar su capacidad de almacenamiento y velocidad si así lo requiere el software que se utiliza. Existen fabricantes de equipo de cómputo que facilitan la labor de mantenerse actualizado y creciendo según las necesidades que se van presentando a través del tiempo.

3.2.6 METODOLOGÍA SELECCIONADA.

La técnica y la herramienta que se utilice están completamente relacionadas con la metodología de Ingeniería de Software en que están basadas. Las primeras herramientas CASE se basaron en la metodología de Análisis, Diseño y Programación estructurada definida por Edward Y ourdon, Larry Constantine y otros.

Para las personas que conocen el uso de la metodología, por ejemplo, saben lo que es un diagrama de flujo de datos, un diccionario de datos, una miniespecificación, etc. es fácil poder utilizar una herramienta CASE como el caso de EXCELERA TOR 11 (más información de esta

Page 64: Metodología para la asimilación de ingeniería de software ...

68 aparece en el Anexo B, porque sólo requieren aplicar sus conocimientos un problema específico con la herramienta adecuada.

En otras circunstancias, una persona al adquirir una nueva herramienta requiere primero capacitarse en el funcionamiento de la metodología en la cual se basa. Es así como existen herramientas de Ingeniería de Software que están ligadas a la programación orientada a objetos, a la metodología de cierto autor, al lenguaje de programación en que da los resultados o al equipo de cómputo en que se utiliza.

Por lo tanto, si el personal del área de sistemas, que en la fase de estudio que se planteó en un principio en este capítulo, se ha investigado y manifiesta tener conocimientos en cierta o cual metodología, esto sirve de mucho en seleccionar la que más se apegue a este conocimiento. De esa forma no será necesaria una capacitación en todos los aspectos que la metodología involucra y puede darse el caso que la herramienta pueda ser utilizada en primera instancia.

Sin embargo, cuando el personal del área de sistemas no tiene conocimientos de una metodología en especial ( es el caso de la programación orientada a objetos), entonces se debe tener cuidado de seleccionar la más apropiada según los conocimientos y preparación anterior que tengan los posibles usuarios. Una buena elección de la metodología a utilizar es la base para elegir una buena herramienta y por supuesto mejores técnicas de Ingeniería de Software

3.2. 7 SELECCIÓN DE HERRAMIENTAS Y TÉCNICAS.

La elección de las herramientas adecuadas depende del hardware que se tenga instalado, el cual debe conocerse al realizar el inventario discutido en la fase anterior. En algunas marcas de equipo existen infinidad de productos que ofrecen ciertas ventajas a comparación de los demás.

Antes de hacer la selección, es conveniente hacer una prueba en las instalaciones de cómputo en donde se va trabajar, comparando facilidades de uso, amigabilidad, ayudas en linea, desempeño y otras. En este punto es conveniente consultar revistas especializadas como Byte, PC World, Computer World y otras que ya han realizado pruebas semejantes.

Otro aspecto a considerar es el parque instalado de cierta herramienta. Es necesario preguntar quién más ha comprado tal o cual software e indagar con la persona los problemas que ha tenido al manejar cierto producto.

En cuanto a técnicas para desarrollo adecuadas, existen herramientas CASE que generalmente tienen una técnica implícita, que corresponde a un autor en especial (por ejemplo la herramienta EXCELERATOR II maneja conceptos de programación estructurada y de Ingeniería de Información), de tal forma que solo se requiere capacitarse en tal técnica para conocerla mejor y utiliz.arla inteligentemente. Existen libros de Ingeniería de Software que explican los fundamentos de cierta técnica incluida dentro de un producto de software e inclusive las herramientas dan una explicación

Page 65: Metodología para la asimilación de ingeniería de software ...

69 teórica fundamental en que se basan para desarrollo de sistemas. Por eso es conveniente preguntar en el caso de las herramientas CASE, ¿cuál es la técnica en que se basan o el autor que apoyan? De fonna que pueda investigarse primero la complejidad de la misma antes de comprar el paquete.

Para poder aplicar la Ingeniería de Software es necesario conocer las herramientas disponibles y saber seleccionar cuáles son las apropiadas para cierto tipo de empresas. Quiz.ás el primer intento de utilizar tales herramientas sea fiustrante. Tal vez el jefe o el usuario exhorte al desarrollador de software a no gastar tiempo en diseño y comenzar la programación. Puede ser que la Ingeniería de Software sólo sea aplicable a un 10%, del proyecto. Pero la próxima vez, se puede mostrar al jefe o al usuario que la inversión en un análisis y diseño formal ayuda a evitar algunos de los problemas de anteriores proyectos. Inclusive, se pueden entender los conceptos suficientemente para emplearlos en un 15% del próximo proyecto.

Una herramienta, no es necesariamente un producto de software. Los conceptos, disciplinas y técnicas de notación gráficas son ejemplos de herramientas no elaboradas como software. Algunos productos, como las herramientas CASE, emplean las técnicas que muestran un modelo tangible de los métodos abstractos. Para usar efectivamente una herramienta CASE se debe entender primero que es Ingeniería de Software y luego como ayuda el producto a aplicarla.

La primera herramienta útil es el modelo del ciclo de vida del desarrollo de software. Todo sistema pasa por varios estados, conocidos como análisis de requerimientos, diseño del sistema, codificación, prueba y mantenimiento. Pero en la práctica, el desarrollo de un sistema se hace como sigue:

• O% DE ANALISIS. El experto en sistemas no necesita hacer análisis, sabe exactamente que desea el usuario. Después de todo, ha desarrollado sistemas iguales docenas de veces.

• 10% DE DISEÑO. El experto en sistemas entrevista en 15 minutos al usuario durante la hora de comida y dibuja algunos formatos de pantallas en el reverso de una servilleta.

• 20% DE CODIFICACION. Un poco de inspiración, "si se siente bien entonces hazlo" es el lema del experto en sistemas.

• 20% DE PRUEBAS. El experto en sistemas encuentra la mayoría de los errores, el sistema funciona "a todo dar".

• 50% DE MANTENIMIENTO. El experto en sistemas pasa el resto del tiempo del proyecto en reconstruir el programa para convertirlo en lo que el usuario realmente quería desde el principio. El experto nunca hizo las preguntas correctas y el usuario supuso que el experto sabía lo que hacía.

Page 66: Metodología para la asimilación de ingeniería de software ...

70

Esto es una aplicación ineficiente e inservible, consumidora del tiempo y esfuerzo del desarrollador de software. El costo de enmendar un error se incrementa dramáticamente según donde se descubra dentro del ciclo de vida del software.

Bany Boehm en su libro "Economía de la Ingeniería de Software" [4] sugiere que el costo de arreglar un error es cero si se encuentra durante la fase de análisis del sistema. Pero si no se descubre después, el costo rápidamente se incrementa a medida que se pasa de una fase a otra del ciclo de vida del software. Un error cuya reparación cuesta $1 O en la fase de diseño, costará $100 si no se identifica y arregla en la fase de operación (y mantenimiento) del ciclo. Este es el propósito real de la Ingeniería de Software, proporcionar técnicas y herramientas para encontrar y erradicar errores lo más tempranamente posible en el ciclo de vida del software, donde se incurre en un costo mínimo de reparación. La Ingeniería de Software no es la panacea. Los err 0res siempre aparecerán, a pesar del método de desarrollo del sistema. Pero un enfoque disciplinado, usando técnicas estructuradas, ayuda a reducir la necesidad de un "reparador de software".

La adecuada selección de herramientas según el tipo de hardware con el que se cuenta y la complejidad de las aplicaciones que se pretenden automatiz.ar es muy importante, aunque en ocasiones existe software que cuesta más que una computadora o tal vez ambientes de hardware en donde no exista ninguna herramienta automática de Ingeniería de Software que se pueda usar.

En resumen, no sólo es conveniente elegir una herramienta automática y sofisticada, el último adelanto de la tecnología, sino más bien se debe adoptar a la Ingeniería de Software como una filosofia de trabajo, que permita un cambio de actitud, más que como la solución que se compra y automáticamente funciona. Una técnica que sea sencilla de aprender y emplear, que se institucionalice dentro del área de sistemas es mucho mejor que la más sofisticada herramienta automática que no se entiende ni se usa.

3.2.8 APROBACIÓN DEL PROYECTO DE AS™ILACIÓN.

Después de obtener toda la información de los pasos anteriores, se debe hacer una cita con el personal involucrado normalmente con el desarrollo de sistemas dentro de la empresa (gerentes, usuarios, personal de sistemas) para dar a conocer el proyecto de asimilación de Ingeniería de Software. Además de preparar la presentación ante un grupo de personas, se deben elaborar documentos e

información que avalen todos la idea que se pretende exponer de manera que no exista ninguna confusión.

Si la presentación es lo suficientemente convincente y quién la presenta realmente sabe "vender" la idea a los demás, seguramente obtendrá no sólo la aprobación, sino el apoyo incondicional para llevar a buen término el proyecto, debido a que beneficiará a todos en su trabajo. El objetivo de este paso es dar a conocer el proyecto por un lado y obtener el respaldo de la alta gerencia por el otro, para seguir adelante.

Page 67: Metodología para la asimilación de ingeniería de software ...

71

3.3 DESARROLLO DEL PROYECTO.

Después de haber establecido el plan de trabajo para el proyecto de asimilación de lngenieria de Software, el siguiente paso es llevar a cabo lo que se pretende con el propósito de lograr los objetivos planteados en un principio.

Es muy importante tomar en cuenta que lo que se va a probar es que el uso de una metodología mediante herramientas y técnicas de Ingenieria de Software permitirá obtener productos ( en este caso un sistema o un programa) en menor tiempo, con menor costo y sobre todo con mayor calidad que mediante los métodos convencionales que se venían utiliz.ando dentro de la empresa.

Una vez conocidos los alcances del proyecto de asimilación, los objetivos y sobre todo los recursos disponibles, es posible preparar la estrategia a seguir para lograrlo. En este punto es conveniente tomar en cuenta todos los aspectos investigados durante la planeación del proyecto de manera que se usen ventajosamente para crear alternativas de solución. Es importante recalcar que la elección de técnicas y herramientas adecuadas para el uso no solo dentro del área de desarrollo de sistemas, sino en general por todos los involucrados en la elaboración de programas, permitirá que los costos y el tiempo de asimilación sean óptimos. El preferir una técnica que sea dificil de comprender e implantar, o una herramienta automática que se lleve años comprenderla para utilizarla, son factores que se deben de analizar antes de elegir qué se hará.

Dentro de las actividades a realizar dentro de la fase de desarrollo del proyecto, tenemos las siguientes:

• Capacitación y entrenamiento del personal. • Desarrollo de una prueba piloto. • Registro y documentación.

3.3.1 CAPACITACIÓN DEL PERSONAL.

El primer paso es preparar al personal o el equipo de personas seleccionadas que utilizará las nuevas herramientas y técnicas para desarrollar software. Esto se logra dando capacitación que puede ser externa o interna.

En el caso de capacitación externa, la mayoria de las veces el fabricante o el vendedor de la herramienta de software ofrece dar por un tiempo establecido capacitación al personal que sea asignado. Esto es una ventaja que debe tomarse en cuenta al momento de adquirir el programa o paquete, ya que no serviría de nada si cada cual debe aprender por su cuenta. También se ofrece el servicio de asesoría o consultas ya sea mediante una persona asignada por el fabricante de la herramienta o por teléfono, durante un periodo acordado. Esto es otra ventaja que permite a los usuarios de la herramienta el estar continuamente respaldados en caso de dudas técnicas.

Page 68: Metodología para la asimilación de ingeniería de software ...

72

Otra opción en la capacitación externa es la contratación de alguna empresa que se dedique a esa actividad. En este caso es necesario tener cuidado de elegir instituciones reconocidas como es el caso de los fabricantes de equipo ( centros de capacitación de IBM por ejemplo) o de los vendedores de la herramienta que cuentan con instalaciones especiales para el caso y con una serie de cursos que pueden ser elegidos dependiendo de la preparación previa que tenga el personal.

La alternativa de capacitación interna se recomienda siempre y cuando la empresa cuente con las instalaciones adecuadas o preparadas para el efecto de un curso, que además cuente con equipo de cómputo conectado y que el curso sea siempre práctico más que teórico. En este punto es bueno considerar el costo de acondicionamiento del lugar en donde se dará el curso, los gastos en ocasiones del instructor y otros detalles que existen cuando se hace una escuela dentro de una oficina.

Cualquiera que sea la opción elegida, es imperativo contar con personal bien capacitado y entrenado en el uso de la herramienta que se ha seleccionado con el propósito de que utilice de la mejor forma las técnicas de Ingeniería de Software mediante una metodología.

3.3.2 DESARROLLO DE UNA PRUEBA PILOTO.

Después de haber seleccionado las técnicas y herramientas más adecuadas según el hardware, el software y el personal que las manejará, el siguiente paso es elegir un proyecto para desarrollarse completamente usando este nuevo enfoque de Ingeniería de Software.

Es recomendable elegir un proyecto de desarrollo real, que no sea muy complejo y además que sea bien conocido por el usuario y el personal de desarrollo de sistemas. Si no es as~ al hacer el análisis se obtendrá información clave que ayudará a conocerlo mejor.

También se debe especificar qué modelo de desarrollo se va a utiliz.ar, puede ser el ciclo clásico de desarrollo ( análisis, diseño, programación, pruebas, implantación y mantenimiento) o el uso de prototipos para la construcción, de la cual se hace referencia en el Capítulo 1 en construcción de prototipos o incluso una mezcla de ambos.

Una prueba piloto se debe hacer porque los compromisos adquiridos por el área de desarrollo de sistemas y el trabajo que ya esté asignado impiden en todo caso que se detenga toda la operación para implantar tal tipo de herramienta o técnica. Además el hecho de trabajar en un proyecto que puede ser elegido de uno ya existente o desarrollado, ayudará a hacer comparaciones en cuanto a tiempo, costo, calidad y operación, que seguramente será favorable que sea realizado mediante una metodología y un plan específico.

Por otra parte, cualquier anomalía o problema grave en la prueba piloto servirá para obtener mayor conocimiento de la forma de usar Ingeniería de Software, sin que cause efectos

Page 69: Metodología para la asimilación de ingeniería de software ...

73 directamente en aplicaciones o sistemas que se estén desarrollando en ese momento como parte del trabajo normal de un área de sistemas.

Con el fin de hacer una buena prueba piloto, se da el siguiente ejemplo en el cual se utiliza el modelo espiral recomendado por Boehm [2] y que es aplicable en forma general en desarrollo de software usando diversas técnicas de Ingeniería de Software.

3.3.3 EJEMPLO DEL USO DE UNA METODOLOGÍA PARA LA PRUEBA PILOTO.

Los enfoques tradicionales de desarrollo de software tienen problemas. En algunas empresas, entidades separadas llevan a cabo cada fase, por ejemplo, quienes hacen el diseño deben esperar hasta que terminen quienes efectúan el análisis. Después, si el equipo de implantación encuentra errores en el análisis, se puede llegar a la situación de que este equipo tenga que rehacer todo el trabajo previo del equipo de análisis, que inclusive puede estar trabajando en un nuevo proyecto.

Otro tipo de problema se presenta cuando el trabajo del analista de sistemas lo presenta a la gerencia para aprobación antes de entregar el proyecto a los programadores. Si el gerente considera terminado el trabajo del analista al entregarse las especificaciones, luego los programadores tendrán que trabajar alrededor de los defectos en el análisis. Por estas razones, el enfoque de "cascada" ha sido desacreditado, y el actual énfasis es en la formación de equipos de analistas y programadores que cambien rápidamente del análisis al diseño, que la misma persona desarrolle ambas funciones al igual de cambio de un papel a otro. Por eso es importante separar el análisis de la implantación, el primero se refiere a la tarea de definir el "que" se debe hacer, el diseño se enfoca al "cómo" hacerlo. Si el desarrollador de software no define que hace e inmediatamente ataca el cómo hacerlo, se pueden dar problemas como el resolver el problema en términos específicos de un lenguaje de programación conocido en lugar de hacer un análisis para tomar en cuenta requerimientos esenciales o desconocer otras herramientas que proporcionen más funcionalidad a menor costo.

Los ingenieros de software no se refieren a los errores como falla, sino más bien les llaman "defectos", porque falla implica que fue ocasionado por ellos. El ciclo clásico de desarrollo de software se conoce también como de "cascada", porque se debe completar cada fase del ciclo antes de trabajar en la siguiente. Si se encuentran problemas en una fase posterior, la fase actual se detiene mientras se revisa y corrige el sistema hasta satisfacer los requerimientos correctamente.

Aún cuando un lenguaje de programación o ambiente de operación es apropiado, el análisis permite que el desarrollador de software tome en cuenta consideraciones como las actividades que deben automatiz.arse y cuales deben realiz.arse en fonna manual, o identificar todas las interfases y flujos de datos entre distintas entidades.

Existen otros modelos para desarrollo de software. El modelo espiral sugiere que los recursos se deben enfocar a las áreas de mayor riesgo. El enfoque de prototipos involucra la construcción de

Page 70: Metodología para la asimilación de ingeniería de software ...

74 diferentes versiones del sistema desde el inicio de su construcción, modificándolo con ayuda del usuario hasta entregar el producto que solicitó.

Dependiendo de la empresa y del producto que se desea generar, además tomando en cuenta el equipo de cómputo que se tenga y las demás consideraciones de las que se ha tratado el presente capítulo, se debe seleccionar una o varias herramientas de Ingeniería de Software que sea posible utilizar en alguna etapa en particular. Si se adquiere una herramienta CASE que contemple todo el ciclo de desarrollo de sistemas ( comunmente desde el análisis hasta la generación de código) entonces tal vez el uso del modelo espiral cambiaría un poco o seria sustituido por el que esté integrado dentro de la herramienta.

El proceso de Ingeniería de Softwar(" concierne a las actividades de requerimientos, diseño, implantación, validación y soporte indispensables para obtener y sostener un producto de software que cumpla tanto con los requerimientos como con las metas de la buena ingeniería. Existen varios modelos potenciales para planear este proceso, entre ellos el modelo espiral, que se trata de un modelo incremental e iterativo determinado finalmente por las particularidades del producto y por las necesidades y capacidades de la organización de Ingeniería de Software encargada de elaborarlo. La figura 3.1 muestra el desarrollo de sistemas utilizando este modelo.

Co.to •cun,ul•do

Detennln•cl6n de olljtltlv-

Avance por etapas EveluKl6n de Mematlvae Ae90lucl6n de r--sio•

Anlll•l•de Rleegoe

Anlllslsde Riesgos

""'"... Prototipo t Prototipo 2 Prototipo 3 ototlpo de rleego •clon•I

Pl•n Ciclo Conceplu .. lz•cl6n Slmul9Clonee

Plen de De_.rollo

....,. de lnlegrKl6n de Pruebe•

Plen-'6nd• pr611in­ectlvld•dee

Vell--.S.. del Dl•ello

Pruebe de lntegrecl6n Pruebe ln••IKión Acepl9dón Pruebe• Unlterül

Deeerro• y-rlflcecl6n del produdo

Figura 3 .1 Modelo espiral de desarrollo de Software

En este modelo se definen todas las actividades a realizar cuando se desarrolla software, tomando en cuenta los principios dictados por la Ingeniería de Software. Según se vaya avanzando por la espiral es necesario generar prototipos del sistema que se está desarrollando, esto proporciona la ventaja de manejar y recibir la aceptación de una parte del sistema que se desarrolla, además que aumenta la confianza en las personas integrantes del proyecto al ver la evolución de subproductos. Otra ventaja estriba en que cada vez se hacen análisis de riesgos, que

Page 71: Metodología para la asimilación de ingeniería de software ...

75

permiten revisar la situación que se desea, evaluando alternativas, identificando caminos a seguir y tomando en cuenta posibles problemas, antes de comenzar propiamente con el siguiente paso.

Este modelo es muy recomendable seguirlo porque integra las diferentes estrategias de desarrollo de sistemas, incorporando actividades tanto de administración como de planeación. Para proyectos de alto riesgo es muy razonable su uso.

Las fases que contempla el modelo espiral son:

3.3.3.1 Requerimientos del sistema.

La correcta especificación de programas es de gran importancia. Se considera que toma 100 veces más esfuerzo corregir errores en especificaciones y requerimientos cuando se ha llegado a la etapa de codificación que el esfuerzo que toma corregir esos mismos errores s1 son descubiertos cuando se están produciendo esas especificaciones o requerimientos. [3]

Esta parte de la metodología comprende tres fases: la definición de requerimientos del sistema, la planeación y la especificación de requerimiento de software.

Es bueno recordar que generalmente el software forma parte de un entorno más amplio conocido como "sistema". En un sistema, el hardware y el software se integran a un entorno técnico para realizar un conjunto de funciones sujetas a un conjunto de condiciones. Este entorno, junto con el contenido funcional global del subsistema de software a desarrollar se define en un documento dirigido a los usuarios, denominado Especificación del sistema.

En la fase de planeación se produce un documento dirigido a la gerencia, quien toma decisiones, en este se plantea la Propuesta de Solución que debe ser evaluada y aceptada antes de proceder a la especificación de requerimientos del software.

Al planear el desarrollo de un sistema, es necesario tomar en cuenta que pueden existir cambios en requerimientos y restricciones. Por esto, es importante que las herramientas de Ingeniería de Software que se usarán sean flexibles. En el pasado, un analista de sistemas asunúa que el usuario sabía perfectamente lo que quería, pero esto ya no es común hoy día. En las distintas etapas en que se desarrolla un sistema, nuevas restricciones surgen que no se tomaron en cuenta desde el inicio. Por ejemplo, después de haber elegido Hardware y Software para determinado proyecto, se da el caso que el usuario tiene ciertos requerimientos que hacen dificil el uso de un manejador de base de datos en particular y que el resultado final será diferente al que el usuario requería. O puede darse el caso que la interfase entre nuestro sistema y otro ha cambiado y que es necesario cambiar el formato en que la información es enviada electrónicamente. Entonces, es bueno recordar que cada proyecto es único y que las herramientas a usar deben ser elegidas para solucionar todos los problemas del proyecto en particular.

Page 72: Metodología para la asimilación de ingeniería de software ...

76

En la tercera fase, se produce el documento especificación de requerimientos de software, que describe la estructura, el comportamiento y la funcionalidad, así como las restricciones que deberá satisfacer el producto de software resultante.

Para esta fase de planeación existen muchas y muy diversas herramientas que se podrían utilizar, desde los paquetes de administración de proyectos que se mencionaron en el capítulo 1 hasta poderosos programas que permiten establecer relaciones entre los objetivos de la empresa y las diversas aplicaciones que se deben generar para llegar a dichos objetivos. Inclusive existe software que permite obtener requerimientos del sistema y diagramas donde se planea el producto final como es el caso de algunos CASE como EXCELERATOR II y también IEF, que proporcionan asistencia al usuario desde la fase de planeación.

El siguiente paso después de la definición y validación de requerimientos es el establecer métricas. No aparece explícitamente en el diagrama del modelo espiral, pero es una actividad muy importante que en ocasiones se integra al análisis o al diseño de software.

El área de métricas de software se preocupa por la medición y predicción en Ingeniería de Software. Las medidas de software indican el grado de calidad de procesos y productos de software. Las métricas de software son indispensables para la administración de las tareas de desarrollo de software, y el mejoramiento de productos y procesos. Boehm describió muchas de las métricas que se pueden usar actualmente [ 4]. Existen varias guías que aconsejan a los administradores de proyectos de desarrollo sobre que métricas usar. [12]

Existen dos tipos de métricas: métricas de proceso y métricas de producto. Las métricas de producto son usadas para cuantificar las características del producto a ser desarrollado, en este caso, software. Las métricas de proceso miden características como productividad, costo, recursos requeridos y el efecto de las herramientas y técnicas de desarrollo.

Las métricas están relacionadas con las mediciones. Las métricas proveen la escala para cuantificar las cualidades. Se deben hacer mediciones del software con el propósito de cuantificar sus características. Una analogía es el centímetro que se usa como un métrico de longitud, pero para determinar la longitud de cierto objeto, es necesario usar una cinta métrica. Algunas características pueden medirse directamente, otras deben deducirse mediante otras mediciones (un ejemplo es la distancia entre dos puntos que puede ser deducida dada la velocidad de un vehículo y el tiempo medido que tarda en recorrer tal distancia). En cualquier caso, las mediciones se necesitan para emplear métricas.

Si la métrica no es directa, se llamará una métrica indirecta. Algunos factores, como la calidad del software, no pueden ser medidos directamente, ya sea por que no existe una medida que la indique explícitamente o porque el software no está completamente terminado. Por ejemplo, es deseable predecir la calidad del software en las primeras etapas de su desarrollo, como por ejemplo, después de diseñarse. Como el software no está terminado aún, la métrica deberá predecirse mediante los factores que puedan ser medidos. Para este efecto, se debe usar un

Page 73: Metodología para la asimilación de ingeniería de software ...

77 modelo, en el cual se establezca la relación de la variable a predecir con las otras variables que pueden medirse. El modelo puede elaborarse ya sea con datos empíricos o mediante datos obtenidos en un estudio.

Las métricas son necesarias para administrar el desarrollo del proyecto de software. Para un control efectivo, el gerente o responsable debe tener información acerca del desarrollo, cuál es el progreso, que porcentaje del producto está listo, que tan atrasado se encuentra el proyecto, cual es la calidad hasta el momento, etc. Basado en esto, se pueden tomar decisiones. Si no existen métricos, la decisión se puede basar en aspectos subjetivos, que al final de cuentas son no confiables, y esto está en contra de los principios de la Ingeniería de Software.

Algunos ejemplos de métricos definidos [8] que se han definido para cuantificar las propiedades del software y del proceso de desarrollar software son ya conocidos, algunos de éstos tal vez sean no aplicables actualmente, pero una base se debe tomar. Los más comunes son las líneas de código (LDC) para especificar el tamaño del software, el número de personas por mes requeridas para medir el esfuerzo en cierto proyecto, etc. Un ejemplo que se podría usar para definir que se considera un proyecto "pequeño" uno "grande" y uno "muy grande" es el siguiente:

TAMAÑO Pequeño Mediano Grande Muy grande LDC Menos de 2,000 Entre 2,000 y 8,000 De 8,000 a 32,000 Más de 32,000

La investigación en esta área continua en forma muy rápida, principalmente tratando de validar teorías en la práctica e implantando métodos y herramientas que apoyan la recolección y presentación de resultados. El uso de métricas se comienza a llevar a cabo desde las primeras etapas del ciclo de vida del software hasta su mantenimiento.

En este punto es importante resaltar que la información estadística relacionada con un proyecto de software no es totalmente registrada, seguramente datos como la fecha de inicio y fin del proyecto así como los costos, es registrados, pero datos que indiquen la cantidad de código necesaria, el número de personas directa e indirectamente involucradas, la velocidad y capacidad del equipo que permitan establecer relaciones y medidas para proyectos futuros, no son tomados. Por lo tanto, se recomienda llevar una bitácora con información concerniente al proyecto que ayude en cierta medida a hacer métricas en la empresa y tal vez predecir futuros proyectos.

En este sentido existen también algunas herramientas que permiten hacer predicciones mediante métricas establecidas mediante investigaciones por los fabricantes de la herramienta o por instituciones serias. En este caso solo se necesita usar una herramienta que ayude a obtener resultados para sistemas o productos similares al que se planea desarrollar, de manera que la predicción sea efectiva. No es lo mismo usar una métrica para el desarrollo de un software administrativo ( una nómina por ejemplo) que se usa para obtener mediciones del esfuerzo requerido para elaborar un programa que guíe misiles.

Page 74: Metodología para la asimilación de ingeniería de software ...

78

3.3.3.2 Diseño.

Esta actividad se realiza en dos pasos: diseño general y diseño detallado.

El diseño general es el establecinúento de la arquitectura global del sistema mediante la especificación de sus componentes organizados por niveles de abstracción, así como de las interfases entre cada uno de estos componentes y niveles.

Generalmente el software forma parte de un sistema más amplio que debe ser diseñado y particionado en sus elementos esenciales. El diseño de este sistema hace coincidir a la Ingeniería de Software con la Ingeniería de sistemas tomando como ejemplo la construcción de una computadora porque en ?,mbas es necesario un proceso intensivo de negociaciones, requerimientos múltiples e iteraciones de diseño. De este modo, el principio de la Ingeniería de Software que se refiere a que en la medida que esta forma parte del proceso de diseño de un sistema más grande, debe reconocerse la naturaleza cambiante de los requerimientos y tomar las providencias necesarias para asegurarse de que los productos resultantes satisfagan las verdaderas necesidades de los usuarios.

El diseño detallado de cada unidad de software o módulo se elabora como base de su implementación. Las siguientes son consideraciones [22] que deben tomarse en cuenta según Ross y que son contempladas por varias metodologías de diseño de las que se trato en el capítulo 1:

• La modularidad define el modo como se estructurarán los sistemas de software.

• La abstracción identifica las propiedades esenciales comunes a entidades superficialmente diferentes y hace inaccesible la información no necesaria.

• La localización permite que el diseño del software refleje las entidades y relaciones a las que concierne. El poder de las metodologías orientadas a objetos se deriva esencialmente de su conformidad con esta consideración, pues amplifican la modificabilidad por la alta localización de los efectos de los cambios.

• La uniformidad garantiza la consistencia del software.

• La conformidad asegura que la información necesaria para verificar la corrección ha sido establecida explícitamente.

Cualquiera que sea entonces la técnica o herramienta que se utilice para construir software debe cumplir con estas consideraciones. El empleo de métodos efectivos de diseño facilita grandemente el desarrollo de software que cumpla con las metas de Ingeniería de Software.

Page 75: Metodología para la asimilación de ingeniería de software ...

79

Se puede decir que las fases de análisis y diseño son en las que se ha generado más herramientas de software para su uso. Desde los primeros programas que solo permitían hacer diagramas de flujo con símbolos y líneas de interconexión hasta las complejas herramientas que revisan diccionarios de datos y relaciones al mismo tiempo que se genera por ejemplo una gráfica de flujo de datos con las reglas dictadas por la metodología de análisis y diseño estructurados.

En cualquier caso, el uso de diagramadores y verificadores de gráficas ayuda bastante en el logro de un buen diseño, debido a que esta es una actividad muy detallada y cambiante que exige una perfecta especificación de cada elemento que formará parte del producto final y que desde esta fase se empieza a formar. Es por esto muy importante la elección de una buena herramienta que permita visualmente revisar el diseño elaborado, un ejemplo muy claro de esto es el diagrama de entidad-relación que la base de_ datos Access de Microsoft requiere para relacionar las tablas. Mediante una gráfica se van estableciendo las relaciones y a la vez revisando que los campos en las tablas que se ligan sean del mismo tipo para que no existan contradicciones.

3.3.3.3 Construcción.

Un principio de la Ingeniería de Software establece que la calidad y la economía de un proyecto dependen directamente de la calidad y efectividad de las herramientas provistas a los ingenieros de software. Por lo tanto, si las herramientas utilizadas para construir software son automáticas y han probado su eficiencia, entonces la construcción de software mediante prototipos será seguramente un éxito.

La fase de construcción consiste en la transformación de las especificaciones de diseño en un producto en operación. Esta transformación incluye la producción de código y su prueba e integración progresiva en agregaciones mayores hasta que el producto esté completado. También produce el Manual de instalación y la Guía del usuario.

Un buen ambiente para desarrollo de aplicaciones de software es aquel que apoya y coordina las interacciones entre los miembros del proyecto y permite el uso de herramientas de programación como editores dirigidos por sintáxis, depuradores "debuggers", intérpretes, generadores de código, etc. y revisores de la evolución del proyecto y documentos asociados. Un ambiente puede ser diseñado para que sea posible coordinar y modelar un proceso dado.

El alto costo de desarrollo de software determina que los componentes de software y productos como los requerimientos, diseños y planes de prueba deben ser reutilizados siempre que sea posible. La reutilización puede hacer que el software sea desarrollado más rápidamente, más económicamente y con mejor confiabilidad.

Los individuos que forman parte del equipo de desarrollo son humanos y como tales cometen errores en las especificaciones, conclusiones e implementaciones. Es perdonable que se cometan errores, pero es imperativo darse cuenta de su existencia.

Page 76: Metodología para la asimilación de ingeniería de software ...

80

Evidencia empírica ha mostrado que los métodos de revisión de software basados en el exámen de copia impresas en papel de los productos de software ( código, especificaciones, manuales, etc.) pueden traer beneficios considerables [19] descubriendo errores que dificilmente serian detectados por pruebas, a un costo menor. El estudio del software escrito por otros miembros del proyecto permite un mejor entendimiento del proyecto completo así como un entrenamiento para posible mantenimiento o colaboración en otras áreas del sistema.

El área de las pruebas de software se ha desarrollado con el fin de proporcionar un nivel de confianza adecuado que el software es correcto. La meta de las pruebas es detectar errores en los programas. Se detecta un error cuando al ejecutar un programa los resultados obtenidos no corresponden a los resultados especificados.

Para la fase de pruebas de los prototipos que se crean, se deben hacer pruebas como lo muestra el siguiente ejemplo:

Se genera un conjunto de prueba ( datos de entrada del programa y datos de salida esperados). Los datos de entrada pueden obtenerse usando casos límite o simplemente generándolos en forma aleatoria.

El programa se ejecuta usando un conjunto de pruebas y las salidas se comparan con las salidas esperadas. También se hace una revisión para determinar si el conjunto de pruebas es adecuado, esto es, que sean factibles.

Si al menos hay un caso de prueba que detecta un error, el programa se debe corregir y se deben hacer nuevamente pruebas. Si no se detecta ningún error, se deben incluir mas casos de prueba que en un momento no sean tan probables o factibles, pero que son posibles.

El proceso continúa hasta que el programa se ha ejecutado usando el conjunto de pruebas completo y que no exista ningún error.

En este sentido cabe resaltar la importancia de la fase de requerimientos del sistema y objetivos, ya que no es posible hacer pruebas cuando las especificaciones no son claras o son ambiguas. Es importante entonces escribir en forma precisa lo que el usuario desea.

En esta fase existen también diversas herramientas que permiten que la construcción y pruebas de un producto se hagan fácilmente. Algunas de las herramientas vienen incluidas con el lenguaje de programación ( editores, depuradores, rastreadores, etc.) como es el caso de lenguajes como C++, Delphi, Visual Basic etc.

Por otra parte, un sinnúmero de generadores de código, es decir, programas que mediante un diagrama detallado del diseño del sistema dan como resultado las instrucciones de un programa en un lenguaje de programación específico. Los ejemplos más conocidos son los generadores de

Page 77: Metodología para la asimilación de ingeniería de software ...

81

código en Ada, C, Cobol, Visual Basic y otros. Inclusive existen herramientas que ayudan a hacer refinamiento de programas ya creados, como es el caso de las herramientas que aparecen en el Anexo B de este trabajo y que trata de CASE.

Finalmente, para la prueba del software ya sea de manera unitaria o integral, también hay herranúentas que generan casos de prueba de manera aleatoria y que aplicando las bases de Reingeniería mejoran código de programas ya creados. Aunque el costo de estos es elevado, tiende a abaratarse por la necesidad del cambio de sistemas a lenguajes más poderosos, como es el caso de actualización en algunas ocasiones de aplicaciones hechas en Cobol a lenguaje de programación C.

3.3.3.4 Aceptación.

Es el aseguramiento de que el producto completado satisface las necesidades del usuario, antes de ponerlo en operación. Involucra la prueba del sistema con datos provistos por el usuario más que con datos simulados como parte de la construcción.

Uno de las ventajas más importante de la utilización de prototipos, otra técnica de Ingeniería de Software, en el desarrollo de aplicaciones es poder obtener partes del producto final ya elaboradas antes de finalizar el proyecto, esto es, el usuario tiene la posibilidad de ver el sistema antes de su finalización.

El uso de prototipos antes de la conceptualización tomando como base el ejemplo del modelo espiral tratado anteriormente, permite a los encargados del desarrollo obtener más información del producto que pretenden crear, de igual manera en la fase de diseño detallado sirve un prototipo tanto a quienes desarrollan como a los usuarios para validar el producto hasta ese momento, dar opiniones y proponer mejoras.

Si este enfoque de crear prototipos durante todo el desarrollo de un producto de software se utiliza eficazmente, en cada etapa el usuario estará participando más activamente en la aceptación del producto, a la vez que ve el avance del proyecto paulatinamente. De esta manera, al final del desarrollo, el producto ya fue preaceptado cuando se le presentó al usuario y seguramente al final no habrá ningún contratiempo cuando se pretenda instalarlo definitivamente.

En esta fase existen también herramientas que permiten generar reportes automáticamente, pantallas de captura y algunas otras ayudas visuales que permiten visualizar productos parcialmente acabados. En muchos casos, las bases de datos que contemplan ventajas de los llamados lenguajes de 4ta. generación (4GL) permiten mediante la construcción de un reporte en la pantalla de la computadora, generar especificaciones y código para que un programa trabaje. Con estas ayudas, es sencillo elaborar aplicaciones que tengan que ver con captura y generación de información. Un caso de este tipo de herramientas es el Generador de pantallas (Screen builder) y el generador de reportes (Report Generator) de Informix.

Page 78: Metodología para la asimilación de ingeniería de software ...

82

3.3.3.5 Soporte.

Esta parte consiste en la reparación de los defectos de diseño e implementación del producto de software e incorporación de mejoras subsecuentes. En muchos casos este soporte se extiende por varios años y cuesta sustancialmente más que el desarrollo inicial del producto.

Las actividades de mantenimiento tienden a degradar la estructura de un sistema de software, haciendo que el mantenimiento sea cada vez más costoso.

El software se ha considerado como una panacea para el ingeniero ya que se considera más maleable que los medios de construcción fisicos como el concreto, el acero o el silicio. Sin embargo, esa flexibilidad aparente no se ha podido explotar en forma exitosa. El mantenimiento del software (mejoramiento y reparación) continúa siendo desproporcionadamente costoso con respecto al costo esperado de los cambios requeridos y la calidad de software resultante. [16]

Diversos estudios han demostrado que la mayor parte de las tareas de mantenimiento están relacionadas con mejoras requeridas por los usuarios o adaptaciones para un ambiente que cambia, más que tareas relacionadas con la corrección de errores.

El diseño orientado a objetos, que modela el software como un conjunto de objetos, el comportamiento de dichos objetos y las relaciones entre ellos, es una de las estrategias que se usan con más éxito hoy para el diseño de programas que necesitan evolucionar continuamente. Muchas empresas que se dedican a desarrollar software usan las técnicas de orientación a objetos para el análisis, diseño, programación y mantenimiento de sus sistemas.

Estos cambios se hacen con la esperanza de producir software de mayor calidad basados en que los métodos de orientación a objetos proporcionan una mejor abstracción de los datos y mejor "ocultamiento de la información", permiten concurrencia más directamente y responden mejor a los cambios del mundo real modelado.

En esta fase es posible usar herramientas que permiten hacer refinamiento de sistemas ya creados mediante el análisis del código fuente y una conversión de las instrucciones de manera que cumplan con nuevos requerimientos. Estas herramientas usan técnicas de Reingeniería para analizar y documentar nuevamente programas, convertir software a nuevos lenguajes de programación, bases de datos y plataformas de hardware, revisar el código fuente contra estándares de programación y generar casos de prueba a partir de las instrucciones del programa revisado.

Además de estas ventajas, ya empiezan a usarse herramientas que documentan programas, uno de los dolores de cabeza de los desarrolladores, y aunque en ocasiones la documentación es

Page 79: Metodología para la asimilación de ingeniería de software ...

83 un poco burda y no tan detallada, pennite utilizarla para analizar el impacto de modificaciones futuras que se requieren en las aplicaciones.

3.3.4 REGISTRO DE ESTADÍSTICAS DEL PROYECTO.

Este paso es de suma importancia porque al llevar una bitácora de los pasos realiz.ados y el tiempo en que se finaliz.aron, ayuda a comparar contra lo que se venía haciendo al desarrollar programas sin la utiliz.ación de técnicas y herramientas de Ingenieria de Software.

En este punto de pueden tomar tiempos y compararlos por una parte con el plan del proyecto y por otra con los tiempos normales C:e construcción de sistemas similares con los anteriores procedimientos.

La información más importante que se debe recabar durante el tiempo en que se desarrolle la prueba piloto elaborando un sistema mediante técnicas y herramientas de Ingenieria de Software es:

• Costos directos e indirectos en que se incurre. • Personal involucrado directa e indirectamente. • Tiempo en que se lleva a cabo cada actividad. • Comportamiento del equipo de cómputo y el software. • Procedimientos y métodos nuevos relacionados. • Problemas durante la prueba piloto. • Cualquier otra información a juicio del equipo de trabajo que consideren

importante.

Es recomendable llevar una bitácora en donde se apunte todos las actividades realizadas diariamente, quién y cómo, de manera que al finalizar la prueba piloto sirva como referencia para futuros proyectos.

Además de los registros y estadísticas que se puedan llevar, es importante mantener un archivo con todos aquéllos documentos, comunicados, diagramas, etc. que se utilizaron antes, durante y después de la prueba piloto, que servirán como evidencia para al final evaluar aspectos como la comunicación entre los integrantes del equipo de trabajo además de cómo se desarrollaron las actividades y las necesidades que se tuvieron.

Page 80: Metodología para la asimilación de ingeniería de software ...

84 También es necesario recalcar que se deben hacer registros de todos las actividades

realizadas a fin de:

• Controlar el avance del proyecto. • Registrar los resultados parciales. • Ejecutar todas las actividades planeadas. • Obtener una relación de problemas encontrados.

3.4 EVALUACION DE RESULTADOS.

Una vez terminada la prueba piloto y registrada toda la información pertinente al mismo, la siguiente etapa es la evaluación del proyecto, la verificación de los resultados, conocimientos y experiencias que se obtuvieron al usar técnicas y herramientas de Ingeniería de Software para desarrollar un sistema o una aplicación.

Se deben tomar los datos registrados para analiz.ar hasta que punto se cumplió con los objetivos planteados al principio del proyecto, lo mismo se debe hacer con el tiempo empleado y los costos en que se incurrió.

Es recomendable también evaluar los beneficios que se obtuvieron ( aunque algunos sean intangibles) y dar a conocer los resultados en la presentación final. Esta parte de la metodología permite revisar que los objetivos planteados para utiliz.ar técnicas y herramientas de Ingeniería de Software son importantes para conocer en que medida se obtuvieron los resultados planteados desde el principio.

Verificar los objetivos tratados en la planeación del proyecto es una parte muy importante que sirve para obtener experiencias valiosas que se pueden utiliz.ar en proyectos posteriores.

3.4.1 PROCESAMIENTO DE DATOS Y ESTADÍSTICAS.

Toda la información obtenida del desarrollo del proyecto se debe analizar detalladamente. En este punto es necesario obtener estadísticas en cuanto a:

• Costo de la prueba. • Cantidad de personal involucrado. • Tiempo en que se llevo a cabo la prueba. • Horas/hombre empleadas. • Cantidad de personal capacitado. • Líneas de código generadas. • Grado de satisfacción del usuario y personal involucrado.

Page 81: Metodología para la asimilación de ingeniería de software ...

85 • Número de errores detectados. • Cantidad de pruebas efectuadas. • Recursos de cómputo utilizados. • Grado de confiabilidad del producto. • Velocidad de respuesta del producto. • Etc.

Con esta información y la que acuerde el equipo de desarrollo de la prueba en conjunto con los usuarios, se obtendrán estadísticas que permitirán comparar el desarrollo de este proyecto contra los métodos y calidad de aplicaciones que se elaboraban anteriormente.

3.4.2 COSTO DEL PRODUCTO.

Dentro de la mayor parte de las organizaciones, la estimación de los costos de la programación se basa en las experiencias pasadas. Los datos históricos se usan para identificar los factores de costo y determinar la importancia relativa de los diversos factores dentro de la organización. Lo anterior, significa que los datos de costos y productividad de los proyectos actuales deben ser centralizados y almacenados para un empleo posterior.

La estimación de costos puede llevarse a cabo de forma jerárquica hacia abajo o hacia arriba. La primera se enfoca al inicio a los costos en el ámbito de sistema, así como los costos de manejo de configuración, control de calidad, integración del sistema, entrenamiento y documentación. Los costos del personal relacionado se estiman mediante la revisión del costo de proyectos anteriores que resulten similares.

En la estimación jerárquica hacia arriba, primero se calcula el costo del desarrollo de cada módulo o subsistema, tales costos se integran para obtener un costo total. Esta técnica tiene la ventaja de enfocarse directamente a los costos del sistema, pero se corre el riesgo de despreciar diversos factores técnicos relacionados con algunos módulos que se desarrollaron. Esta técnica subraya los costos asociados con el desarrollo independiente de cada módulo o componente del sistema, aunque puede fallar al no considerar los costos de manejo de la configuración o de control de calidad.

Pero la técnica más utilizada para la estimación de costos es el juicio experto, que se basa en el conocimiento anterior y el sentido comercial de uno o más individuos dentro de la organización.

Un experto podría llegar a una estimación de costos de la siguiente forma: El sistema desarrollado es similar al que se elaboró el año pasado en un periodo de 1 O meses, con un costo de $600,000. El nuevo proyecto tiene funciones parecidas y otras mejoradas, pero requirió de un 25% más de tiempo para su desarrollo y el costo fue mayor en un 18%.

Page 82: Metodología para la asimilación de ingeniería de software ...

86

Una vez que se ha obtenido el costo del producto, será más fácil comprender para la alta gerencia en impacto del uso de técnicas y herramientas de Ingeniería de Software. A primera vista parecerá que el costo fue muy elevado por contemplar la adquisición de software y tal vez hardware, pero haciendo un estudio económico, por ejemplo, de tasa de retomo o de valor futuro, entonces se podrá justificar la compra inicial y se señalará que la herramienta se pagará con los beneficios económicos que se tendrán al elaborar productos de software más rápidamente y a menor costo.

3.4.3 CALIDAD DEL PRODUCTO OBTENIDO.

El producto obtenido se debe evaluar contra los atributos de calidad que se trataron en el capítulo 1, algunos de estos son:

• Utilidad • Portabilidad • Mantenibilidad • Confiabilidad • Eficiencia • Exactitud • Solidez • Corrección • Facilidad de entendimiento

3.4.4 OBJETIVOS INICIALES.

Finalmente, se deben revisar todos los objetivos que se trataron en la fase de planeación del proyecto con el fin de conocer en qué porcentaje se lograron.

Para este efecto se puede hacer una lista de verificación que en una columna tenga los objetivos y metas especificadas al principio del sistema, en otra columna un porcentaje que indique con qué grado se cumplió con estos. Una calificación de 100% significa que el objetivo se logró cabalmente.

Los miembros del equipo que llevó a cabo la prueba piloto invitando a algunos usuarios, deben calificar los objetivos, de manera que exista un concenso y que la nota sea lo más justa y clara que sea posible, con el propósito de que no se subestimen los logros obtenidos ni tampoco se sobrevaloren. Esta práctica ayudará a que todos los miembros del grupo reconozcan la labor de los demás y permitirá hacer una autocrítica del trabajo llevado a cabo.

Page 83: Metodología para la asimilación de ingeniería de software ...

87

3.4.5 PRESENTACIÓN DE RESULTADOS DEL PROYECTO.

La mejor fonna de convencer a la gerencia y al usuario de la efectividad de las técnicas y herramientas de Ingeniería de Software es presentando la aplicación o el sistema funcionando dentro del tiempo establecido durante la planeación del proyecto.

Eso demostrará que lo mismo se puede hacer con los siguientes proyectos de desarrollo que se asignen al área de sistematización. Además aumenta la confianza en quienes llevaron a cabo la tarea de manera que los siguientes retos serán tomados con mayor optimismo.

Se debe subrayar en esta presentación cuáles fueron los factores clave para desarrollar el sistema mediante la prueba piloto, sobre todo se debe dar énfasis a la disciplina que se tiene al formaliz.ar los procedimientos con ayuda de la Ingeniería de Software.

3.5 IMPLANTACION DE INGENIERIA DE SOFTWARE.

La Ingeniería de Software permite reducir problemas de comunicación para producir software de alta calidad. La principal función de la Ingeniería de Software es proveer herramientas y técnicas que ayuden a los usuarios encontrar y eliminar errores en las primeras fases del desarrollo de sistemas. El uso de un enfoque disciplinado y métodos estructurados ayuda a reducir errores. El uso de métodos de Ingeniería de Software es crucial porque permite que se desarrollen nuevas aplicaciones sin errores desde la primera vez.

La fase de implantación de las técnicas y herramientas de Ingeniería de Software, para que se empleen en toda el área de desarrollo de sistemas, se puede realizar de muchas formas. La que en este trabajo se recomienda comienza primero con el proyecto de prueba piloto, descrita anteriormente en el presente capítulo, que sirve también para obtener la aprobación y apoyo de gerencia y usuarios.

El siguiente paso consistiría en realizar una conversión en paralelo. En medida de las posibilidades y limitaciones se pueden ir integrando técnicas y herramientas de Ingeniería de Software a los proyectos que se estime conveniente, mientras al mismo tiempo, se siguen utilizando los métodos tradicionales para desarrollo de software.

Paulatinamente, se cambiará la fonna de trabajar en los demás proyectos, según se haya establecido en la estrategia para desarrollo y sustitución definida anteriormente en el proyecto piloto de asimilación. Finalmente con este procedimiento se emplearán las técnicas y herramientas seleccionadas en todo el área de desarrollo de sistemas.

Si el proyecto tuvo éxito, las experiencias obtenidas en el proyecto piloto serán muy útiles al considerarse en nuevos desarrollos. De esta forma, se puede establecer la estrategia a seguir para

Page 84: Metodología para la asimilación de ingeniería de software ...

88 elaborar nuevos productos de software para la empresa, es decir, se define de qué manera se harán, desde ese momento, los nuevos sistemas. El emplear técnicas y herramientas de Ingeniería de Software desde el principio, asegura que la asimilación ha comenzado.

3.5.1 ESTRATEGIA DE IMPLANTACIÓN.

Tomando en cuenta los resultados de la prueba piloto, y ejecutando la conversión piloto, la estrategia de implantación de Ingeniería de Software en el área de desarrollo de sistemas se puede llevar a cabo de la siguiente forma:

• POR AREA. En este caso, se pueden subdividir el ámbito en que se desempeña el área de desarrollo de sistemas, para implantar el nuevo sistema paulatinamente. Por ejemplo, se puede tomar primero el área administrativa (Contabilidad, Finanzas, Recursos Humanos) con el fin de desarrollar las nuevas aplicaciones usando técnicas y herramientas de Ingeniería de Software. Inclusive es posible generar un plan para convertir los antiguos sistemas en Cobol o en alguna base de datos a sistemas y ambientes más modernos y eficientes.

• POR PROYECTO. Para este efecto, todos los proyectos que estén en lista de espera a desarrollarse, se pueden generar utilizando las nuevas metodologías. Además se puede reducir la cantidad de proyectos pendientes desarrollándolos rápidamente con técnicas y herramientas poderosas. Una vez terminada la carga de proyectos pendientes se puede elaborar una estrategia para convertir los sistemas existentes.

• POR TIEMPO. A partir de una fecha específica se planea el uso de las nuevas herramientas y técnicas, claro con una previa preparación de manera que a partir de ese momento se empiecen a desechar poco a poco los antiguos métodos y prácticas.

Cualquiera de los métodos de conversión que se decida emplear, deben de planearse con anticipación y deben comunicarse a todo el personal involucrado mencionando los objetivos y el propósito del movimiento. Una estrategia bien planeada permitirá que el cambio sea transparente y se lleve a cabo sin problemas. Aunque existen personas que en ocasiones se resisten al cambio, el hecho de ver los progresos y la nueva actitud del personal que trabaja en el área de sistemas, los invitará a formar parte en el esfuerzo.

El tiempo de la conversión total dependerá de la estrategia utilizada, el grado de aceptación por parte del personal, la capacidad de asimilación y el esfuerzo que se emplea para efectuarla.

Page 85: Metodología para la asimilación de ingeniería de software ...

89

3.5.2 CAPACITACIÓN DE TODO EL PERSONAL.

Otro aspecto importante dentro de la implantación es la capacitación. Tanto quienes desarrollan software como los usuarios, deben entender el nuevo papel que desempeñarán cuando finalmente se use lngenieria de Software dentro de la empresa. Quiz.á será necesario cambiar la forma de trabajar y pensar de ambas partes, para trabajar en adelante más estrechamente en la elaboración de sistemas.

Las personas involucradas en el proyecto piloto pueden ayudar a capacitar a todo el personal involucrado que tomará parte en el empleo de nuevas técnicas y herramientas de Ingenieria de Software.

Es muy importante que todas las personas que estén relacionadas con la asimilación de la Ingenieria de Software, estén involucradas y tengan los conocimientos necesarios para trabajar con ella. Tanto usuarios como personal que trabaje directamente en el área de desarrollo, deben conocer como funcionan las nuevas herramientas, como trabajan las técnicas y que beneficios aportan a su trabajo personal el hecho de utilizarlas adecuadamente.

3.5.3 COSTO DE LA IMPLANTACIÓN.

Este punto es de importancia vital, puesto que una cosa es hacer un proyecto piloto y otra muy diferente el instalar herramientas automáticas en todos los lugares donde se requieran. El costo de la adquisición de licencias de las herramientas de software, es uno de los más altos de todo el proyecto, debido a la naturaleza compleja del desarrollo de las herramientas CASE. Además, el mejoramiento del equipo instalado o la adquisición de uno nuevo junto con la capacitación del personal, son los aspectos más importantes en el cálculo de presupuesto.

Por otra parte, los beneficios económicos que se obtendrán al generar productos de software para la empresa que estén libres de errores, a un costo menor y en poco tiempo, se deben enfatizar para justificar el costo de la implantación que se realizará.

El aspecto económico es uno de los más importantes y delicados para la alta gerencia. Una vez más, un proyecto bien planeado ayuda a establecer un buen presupuesto que se utilice para implantar Ingenieria de Software en toda la empresa.

Page 86: Metodología para la asimilación de ingeniería de software ...

90

3.6 SEGUIMIENTO.

En el caso de mantenimiento de aplicaciones en operación se puede llegar a dos extremos. El primero se refiere a la conveniencia de actualiz.a.r o mantener sólo partes de los sistemas actuales empleando las técnicas y herramientas usadas en el proyecto piloto.

La segunda tiene que ver con reconvertir todos los sistemas en operación a nuevas versiones, utiliz.ando lo necesario desde el enfoque de Ingeniería de Software.

Cualquiera de las dos decisiones tiene sus ventajas y desventajas que se deben analiz.a.r a fondo.

Existen muchas consideraciones extras que se deben tener en cuenta para decidir utiliz.a.r Ingeniería de Software. El departamento de desarrollo de sistemas y la empresa a la que sirve, deben tomar en cuenta estos puntos para generar un ambiente adecuado para emplear la Ingeniería de Software para desarrollar sistemas de calidad. A continuación se describen estos elementos:

3.6.1 CONSIDERACIONES TÉCNICAS.

Para conseguir el éxito en la empresa de aplicar la Ingeniería de Software en el desarrollo de sistemas dentro de la organización, es necesario contar con los siguientes elementos:

• RECURSOS HUMANOS. Se deben tener los recursos humanos adecuados con la preparación en computación adecuada, con una carrera universitaria, sólidas bases y experiencia requerida para obtener resultados. Deben ser personas que busquen su desarrollo constante a través de los conocimientos adquiridos. Además deben ser personas abiertas a los cambios, que a su vez tengan vocación de servicio y aporten su mayor esfuerzo al grupo de trabajo.

• HARDWARE. Un buen equipo, moderno, con capacidad suficiente para ejecutar software sofisticado, es un requisito primordial si se desea obtener lo mejor al manejar herramientas automatizadas de Ingeniería de Software. Computadoras o redes de éstas que funcionen y tengan buen desempeño, son esenciales para trabajar en equipo y así optimizar el uso de este importante recurso.

• SOFTWARE. Teniendo programas adecuados y disponibles, que contemplen todos los adelantos en materia de Ingeniería de Software, como pueden ser herramientas CASE, lenguajes de cuarta

generación ( 4GL) entre los más sobresalientes, es posible generar soluciones a problemas de desarrollo de sistemas en menor tiempo y costo que usando software convencional. La capacidad de actualización que permite este tipo de herramientas automatizadas, ayuda a generar varias versiones de la solución de un problema sin la necesidad de cambiar radicalmente o comenz.ar de

Page 87: Metodología para la asimilación de ingeniería de software ...

91

nuevo. Tan solo se corrige la parte que se considera conveniente y en poco tiempo se obtiene el nuevo modelo.

El contar con estos tres elementos dentro de la empresa y lo más importante, continuar mejorándolos, es la clave para tener una ventaja estratégica que realmente permita lograr que la productividad esperada en el desarrollo de software se obtenga.

3.6.2 CONSIDERACIONES ECONÓMICAS.

Las empresas que cuentan con dinero y crédito suficiente para obtener las facilidades físicas y los recursos humanos adecuados, son las que se colocarán a la vanguardia en el empleo de Ingenieria de Software. Si no existe el apoyo económico, es seguro que el área de desarrollo de sistemas no obtenga los elementos necesarios para ser productiva y servir adecuadamente a la empresa. Incluso, si las instalaciones donde se encuentra el equipo de cómputo y el personal son funcionales, esto genera un ambiente apropiado para trabajar.

El control de los costos en que incurre el desarrollo de software debe vigilarse con el propósito de ahorrar lo posible y encausar recursos hacia otros proyectos. Los sistemas deben a su vez aportar un beneficio en cuanto a agilización de actividades y toma de decisiones adecuada, que más adelante se traduzca en ganancias para la empresa.

Es conveniente señalar también que el contar con un buen control presupuestario y con el financiamiento adecuado, permitirá en gran medida el adquirir los elementos técnicos y el personal idóneo para lograr los mayores beneficios.

3.6.3 CONSIDERACIONES DE ORGANIZACIÓN.

El dinero y la tecnología no es todo. Se debe convencer a la gerencia que aspectos como la buena organización, la delimitación de responsabilidades, la voluntad de cambiar hacia nuevas formas de trabajo y la comunicación entre los distintos niveles en que se divide la empresa, es crucial para lograr no sólo que aportaciones como la Ingenieria de Software funcionen, sino que cualquier innovación sea bien recibida y asimilada.

En el capítulo 2 de este trabajo se describen las caracteristicas que las empresas que usan Ingeniería de Software actualmente en México, de manera que sólo es conveniente mencionar a grandes razgos las más importantes.

• FUNCION DE SISTEMAS. La importancia estratégica de la función de desarrollo de sistemas dentro de la empresa.

Page 88: Metodología para la asimilación de ingeniería de software ...

92 • OBJETNOS. La definición clara y precisa de los objetivos y metas de la empresa a corto y largo

plazo.

• PLANEACION. La planeación estratégica de la empresa y del área de desarrollo de software.

• ORGANIZACION. Una empresa bien organizada y estructurada funciona mejor.

• PROCEDIMIENTOS. Los manuales de procedimientos y los perfiles de puestos son importantes para evitar duplicidad de funciones.

• CONTROL. Deben existir estándares que se contemplen para controlar todas las operaciones de la empresa.

• COMUNICACION. Al existir buena comunicación entre todos los niveles, se fomenta el trabajo en grupo y un genera un ambiente de confianza entre todo el personal.

Una buena coordinación entre la gerencia, el área de desarrollo de sistemas y los usuarios es conveniente para llevar a cabo cualquier esfuerzo. La voluntad de las partes por cooperar y participar activamente en el proyecto de asimilación es clave fundamental para obtener los resultados esperados.

3. 7 CONCLUSION.

Esta metodología es aplicable a cualquier proyecto de asimilación puesto que sus bases fueron obtenidas por experiencias en las empresas donde se utiliz.a lngenieria de Software descritas en el Capítulo 2 y además por sustentarse en distintos conocimientos que se plasman en muchos libros que en algunos casos no se utiliz.an y que han probado su funcionalidad.

Algunas de las etapas consideradas fueron tomadas exactamente de proyectos llevados a cabo por ejemplo en instituciones bancarias, que como se muestra en la información estadística del capítulo 2, son quienes adquieren la mayor parte de software comercial y además son los principales usuarios de la tecnología en informática más moderna que existe.

En caso particular, el autor de este trabajo ha participado en proyectos y ha usado algunas herramientas de Ingeniería de Software, notando su utilidad, eficiencia y facilidad de uso, esto ayuda a obtener mejores productos ( en este caso programas y aplicaciones) en menor tiempo y libres de errores. El único problema de implantar una solución global en una empresa es el cambio de mentalidad de quienes se involucran y un apoyo de la alta gerencia, que se debe transformar en fuente de todo tipo de recursos para lograr la tarea de usar técnicas y herramientas de Ingeniería de Software para trabajar mejor. Sin lo anterior, es muy dificil poder crear un ambiente que lleve al mejoramiento del área de desarrollo de sistemas de cualquier empresa.

Page 89: Metodología para la asimilación de ingeniería de software ...

93 Para concluir, este trabajo pretende sembrar una semilla de inquietud en las personas que lo lean

para que puedan probar la metodología presentada, de manera que logren una ventaja mayor comparada con el uso de métodos y técnicas tradicionales.

Page 90: Metodología para la asimilación de ingeniería de software ...

CAPITUL04

FUTURO DE LA INGENIERIA DE SOFTWARE EN MÉXICO

No obstante que se han derrivado importantes barreras para la importación de equipos de cómputo y en la actualidad empresas mexicanas cuentan en cuestión de hardware con los adelantos tecnológicos actuales, existe notable atraso en lo que se refiere a desarrollo de software. Este problema no es causado por el alto costo en ocasiones de algunos productos o herramientas computacionales que permiten generar aplicaciones ágilmente, sino más bien por el poco o nulo conocimiento de técnicas de Ingenieria de Software adecuadas que además se utilicen efectivamente por quienes están encargados de desarrollar sistemas dentro de numerosas organizaciones.

Las empresas que dependen vitalmente del buen desempeño de sus sistemas, como son los grandes bancos, casas de bolsa, cadenas de tiendas de autoservicio, compañías manufactureras y

muchas otras más, son las que comienz.a.n a conocer las bases de Ingeniería de Software y poco a poco están asimilando las metodologías relacionadas con la materia. Para este tipo de empresas el tiempo de desarrollo de aplicaciones es crucial para llevar un buen control de las operaciones del negocio. Al no contar con instrumentos que faciliten las labores de desarrollo y mantenimiento, el proceso de automatización se vuelve complejo y no factible.

A corto plazo se vislumbran adelantos significativos, por una parte las empresas están concientizando a sus directivos para que inviertan en el esfuerzo de capacitar a su personal para aprender y manejar nuevas tecnologías para desarrollo de sistemas. Cada día es más común encontrar no solo al personal del área de sistemas, sino a gerentes y usuarios, en cursos y actualizaciones sobre técnicas y herramientas que se ajusten a sus operaciones. También existe la tendencia a convertir al área de sistemas en un departamento más de asesoría hacia usuarios que en un área de operación, por lo que es importante que se divulgue adecuadamente la metodología seleccionada.

En otro ámbito, las instituciones de educación superior preparan a los futuros profesionistas del área de computación para que conozcan los conceptos de Ingeniería de Software y los apliquen en forma adecuada desde la escuela, por otra parte, a los estudiantes de otras carreras no relacionadas, se

Page 91: Metodología para la asimilación de ingeniería de software ...

96 les provee de las bases en la materia para que posteriormente participen activamente en el proceso de desarrollo de productos de software ya sea como usuarios o inclusive como constructores.

Las compañías comercializ.adoras de software están atentas a la liberación de productos que sean faciles de usar y aprender, que puedan utiliz.arse en la mayor cantidad de centros de cómputo de las empresas, que se adapten al tipo de operación individual y que por supuesto, proporcionen las ganancias adecuadas. Cada día se desarrollan nuevas versiones de herramientas automatiz.adas para desarrollo de sistemas, más poderosas que las anteriores y que pueden funcionar en equipos de diferente plataforma y proveedor, al igual se crean nuevas empresas, sobre todo en E.U., creadoras de dicho software mientras otras unen sus esfuerzos para producir nuevos adelantos.

El camino hacia la completa automatiz.ación de las actividades relacionadas con el desarrollo de software es largo y existen por el momento miles de aplicaciones desarrolladas en lenguajes de programación que tuvieron éxito hace dos décadas, que requieren de mucho esfuerzo y dedicación para mantener, pero que a la vez, se van desechando para abrir paso a nuevos desarrollos.

Según Wtllmott, vicepresidente de grupo Aberdeen de consultoría con sede en Boston Ma. y autor del reporte llamado "oportunidades en CASE y desarrollo de software", es el software y no el hardware el cuello de botella al crear nuevos sistemas de infonnación. La gente no sabe cómo integrar las nuevas herramientas y técnicas a sus ambientes de trabajo para utiliz.ar todo el poder de las nuevas computadoras personales. [24]

Para :Mike Laginski, director de mercadotecnia de la compañía desarrolladora de software Cognos Inc., con sede en Ottawa, el problema no es poner una terminal enfrente de un desarrollador con una herramienta poderosa, sino el problema es la capacitación que debe tenerse para usar las herramientas. [24]

El tan esperado producto de IBM, AD/Cycle, que se liberaría para 1996, creó expectación, pero cuando al fin se pudo usar, se debía cambiar significativamente el proceso de desarrollo de sistemas. Muchos usuarios potenciales de este producto esperaron que se convirtiera en un estándar por la gran cantidad de equipos instalados por IBM, aunque no cumplía completamente con sus requerimientos.

El ciclo de desarrollo de aplicaciones de IBM (AD/Cycle) ha legitimiz.ado a CASE, pero la arquitectura de software ha incrementado la competencia y la consolidación de la industria. El mercado de CASE se ha comprimido a 150 proveedores, sin embargo, algunos clientes de las 500 empresas más importantes de E. U. siguen considerando el producto de IBM para sus ambientes CASE, que anteriormente estaban ganando muchas de las ventas corporativas.

Page 92: Metodología para la asimilación de ingeniería de software ...

97

Por otra parte, la compañía KnowledgeWare se benefició del surgimiento de AD/Cycle, ya que tuvo un papel clave en el desarrollo de repositorio central. Esta empresa reportó ventas de 20,000 unidades en 1990 de su nuevo producto ADW (ApplicationDevelopment Workbench).

A principios de la década de los años 90, se pensaba que las tecnologías orientadas a objetos, la reusabilidad y la Reingeniería serían claves, así como los sistemas administradores de bases de datos relacionales. Pero las empresas necesitan bastante capacitación y experiencia antes de aplicar las anteriores tecnologías, debido a que se requiere de una fonna muy diferente de pensar y hacer las cosas.

Willmott predijo que para 1994 o 1995 se podrían ver aplicaciones orientadas a objetos en el mercado comercial. En bases de datos relacionales y lenguajes de cuarta generación, algunos vendedores ya comenzaron a introducir CASE y herramientas de usuario final, como son los reporteadores (Report Generator). [20]

Al pertenecer al mercado potencialmente más grande del mundo gracias al Tratado de Libre Comercio con Estados Unidos y Canadá, México junto con sus empresas deben responder a los nuevos retos con productividad en todos los sentidos, desde la elaboración de una simple tortilla, hasta la creación de sofisticados sistemas computarizados que manejen operaciones complejas dentro de las empresas.

El futuro de la Ingeniería de Software en nuestro país comenzó hace algunos años con el reconocimiento que se le empiez.a a dar a esta disciplina como un agente de cambio de la mentalidad de trabajo de quienes intervienen en el desarrollo de software, y depende de todos el emplear con el mayor provecho sus técnicas y herramientas.

A continuación se presentan algunos conceptos recomendables que pueden adoptarse a medida que se aplique más profundamente la Ingeniería de Software dentro de empresas mexicanas.

4.1 CASE (COMPUTER AIDED SOFTWARE ENGINEERING).

La Ingeniería de Software asistida por computadora, conocida generalmente como CASE es una tecnología que puede convertirse en piez.a clave de la automatiz.ación rápida de todo tipo de aplicaciones dentro de las empresas. Su uso institucionaliz.ado permitirá que se abatan costos de desarrollo y se elaboren productos de software de alta calidad, cumpliendo así con los objetivos de la Ingeniería de Software.

Hoy en día se llevan a cabo cambios importantes en las herramientas de software diseñadas para la automatiz.ación del ciclo de vida de sistemas. Con estas herramientas los desarrolladores pueden crear software interactivamente. Algunos ejemplos aparecen en el anexo B de este trabajo.

Page 93: Metodología para la asimilación de ingeniería de software ...

98 CASE es una combinación de herramientas y metodologías bien integradas, las cuales

automatizan el ciclo de vida del software. CASE ataca los principales problemas de productividad tanto en el análisis y el diseño así como la implantación y el mantenimiento de software.

En México son pocas las empresas que utiliz.an CASE para desarrollo y mantenimiento de sus sistemas, la gran mayoría de las que no lo hacen debe considerar este punto si buscan aumentar la productividad en la construcción de sus sistemas de información.

4.1.1 DEFINICIÓN DE CASE.

Para Harry Newton [18] CASE es un método nuevo, rápido y más eficiente para desarrollar software. La idea en que se basa CASE es obtener las relaciones de las bases de datos, eventos y opciones para que la computadora genere el código del programa.

Alan Freedman [10] define a CASE como el software que es usado en cualquier fase del desarrollo de sistemas de información, incluyendo análisis, diseño y programación. Por ejemplo, se pueden utiliz.ar diccionarios de datos y herramientas de programación durante el análisis y diseño de los sistemas, también un generador de aplicaciones para agilinr la fase de programación.

Las herramientas CASE proporcionan métodos automatizados para diseñar y documentar usando técnicas estructuradas tradicionales. El objetivo final de CASE es proveer un lenguaje para describir suficientemente un sistema completo para generar automáticamente el código de los programas necesanos.

4.1.2 HISTORIA DE CASE.

CASE comenzó su auge en 1980, con la aparición de herramientas de diagramación y documentación asistida por computadora, las cuales fueron los primeros intentos para automatiz.ar las tareas de análisis y desarrollo de sistemas. Estas herramientas se usaron para crear diagramas estructurados, diagramas de flujo y diagramas de entidad-relación, así como un intento de producir en forma automática la documentación requerida sobre la base de varias metodologías (Y ourdon, Jackson y Martin).

A mediados de los años 80 CASE introdujo la verificación automática de diagramas estructurados y el almacenamiento de la información en librerías llamadas diccionarios. Los diagramas son verificados para asegurar que sean completos y correctos antes de que sean usados como especificaciones de diseño para la implantación del programa. Posteriormente los diagramas son verificados, para almacenarlos en bases de datos llamadas CASE Repository, de manera que puedan ser actualiz.ados, compartidos y reusados en otros proyectos de desarrollo.

Page 94: Metodología para la asimilación de ingeniería de software ...

99 Con el tiempo el enfoque de CASE fue en diseño automatiz.ado porque el análisis y el diseño

son vistos como el punto más critico en el ciclo de vida del desarrollo de sistemas, ya que al realiz.arse un buen trabajo en las primeras fases de este ciclo, tanto la calidad como el costo sufren de grandes efectos. Con la asistencia automatiz.ada de CASE, el tiempo de diseño puede ser reducido sustancialmente, mientras se producen las especificaciones del sistema con alta calidad y libres de errores.

El siguiente paso de la evolución de CASE es la liga del diseño automatizado y la generación de código automática, significando esto que el 800/o o 90% de un sistema completo de software puede generarse a partir del diseño estructurado de los diagramas.

4.1.3 OBJETIVOS DE CASE.

El principal objetivo de CASE es proveer un ambiente interactivo para el desarrollo de software, que permite que el tiempo de elaboración sea corto, utilizando recursos dedicados y verificando errores desde las primeras etapas del proceso.

De esta forma se automatizan las principales tareas del desarrollo y mantenimiento de sistemas, gracias a que se trabaja con interfases gráficas, ayudando a que la programación se realice en forma gráfica.

4.1.4 BENEFICIOS DE CASE.

Los principales beneficios que CASE provee son: • Hacen prácticas a las técnicas estructuradas para el análisis, diseño e implantación de

sistemas. • Por medio de la automatización, se provee de Ingenieria de Software de calidad. • Hace que los prototipos sean útiles. • Simplifica el mantenimiento de software. • Hace que el desarrollo de sistemas sea más rápido. • Da la libertad al desarrollador para ser más creativo. • Permite el reuso de los componentes de software.

Además, CASE permite a los desarrolladores el compartir información del sistema en una secuencia ordenada y segura, haciendo uso del administrador de la información, el cual provee de controles de seguridad por medio de claves de acceso, control de versiones del sistema, acceso multiusuario y control de modificaciones del diccionario o repositorio.

Por medio del uso de metodologías estructuradas, CASE produce la documentación requerida guiando al usuario en el correcto uso de las mismas.

Page 95: Metodología para la asimilación de ingeniería de software ...

100 Otro beneficio de CASE es la creación de prototipos usados para detenninar los requerimientos

del sistema, mediante formatos de pantalla, generadores de reportes y constructores de menus.

4.1.5 CASE WORKBENCH.

Es un conjunto de herramientas diseñadas para automatizar el ciclo de vida de sistemas. Este software de propósito general proporciona las siguientes funciones:

• Creación gráfica de los requerimientos del sistema y el diseño de las especificaciones.

• Verificación, análisis y referencia a la información del sistema. • Almacenamiento, manejo y reporte de la información del sistema y proyección de

la información administrativa. • Construcción de prototipos y simulación de sistemas. • Generación de código acompañado de su documentación. • Establecimiento de estándares y procedimientos. • Prueba, validación y análisis del programa.

En el anexo B de este trabajo se da una lista de las principales empresas proveedoras de herramientas CASE.

4.1.6 INTEGRACIÓN DE CASE EN EMPRESAS.

Los desarrolladores de software en la actualidad están confundidos acerca de como usar CASE, no están seguros como integrarlo.

1990 fue el año en que las computadoras personales y las estaciones de trabajo lograron bajar sus precios y elevar desempeño, las aplicaciones de software se hicieron más demandantes y el software para desarrollarlos se volvió más confuso.

Comparado con los dramáticos avances en hardware, el desarrollo de software se ha hecho improductivo e ineficiente, muchos culpan a los usuarios por la confusión. La mayoria de los directivos de empresas consideran el desarrollo de software como un arte mágico.

El grupo Aberdeen de Boston realizó un estudio llamado "Oportunidades de CASE en el desarrollo de Software". Uno de sus autores, Willmott, indicó que era un error afirmar que 1990 fue el año en que todo mundo adoptó CASE. Además, predijo que en los siguientes dos años 50 % de los centros de cómputo continuarian experimentando y evaluando las herramientas CASE, 300/o no harian absolutamente nada y el restante 200/o "estaban tan casados con IBM que esperarian, aunque eso los mate", hasta que se liberara AD/Cycle (Application Development/Cycle). [20]

Page 96: Metodología para la asimilación de ingeniería de software ...

101

No importando si los gerentes de desarrollo de sistemas son adeptos de CASE o no, deben aceptar la idea de que la automatiz.ación no como algo deseable, sino posiblemente esencial para el éxito de su empresa. Frases tales como "ventaja competitiva" y "grandes logros de productividad" están introduciéndose en el vocabulario computacional de los usuarios.

En la mayoria de las empresas, el desarrollo de software no puede seguirse realizando "a mano". La adopción de tecnologías de automatización como CASE es impedida por qwenes desarrollan actualmente sistemas, debido a que no saben exactamente que es CASE.

En resumen, muchas empresas medianas y grandes buscan formas de construir aplicaciones y reducir sus cargas de trabajos pendientes, utilizando menos recursos.

4.2 LENGUAJES DE CUARTA GENERACION (4GL).

Aparecieron al igual que CASE en los años 80 como una respuesta a los lenguajes de procedimiento conocidos como de tercera generación, donde se encuentran los populares COBOL, BASIC, FORTRAN, PIJI y otros. Los 4GL son lenguajes sin procedimientos, es decir, donde solamente se especifica qué se desea y no cómo obtenerlo. Ejemplos de este tipo de lenguajes son SPEEDW ARE, MS ACCESS y otros.

Los 4GL tienen como objetivo acelerar el proceso de construcción de aplicaciones, permitiendo que se realicen modificaciones faciles y rápidas que dan como resultado la reducción de costos.

Con lenguajes más amigables para el usuario, los 4GL generan código de programas sin errores, minimizando los problemas de depuración. Otra caracteristica importante consecuencia de que se utiliza lo menos posible lenguaje de procedimiento ( de tercera generación) es que personal ajeno al área de sistemas inclusive sin tanta experiencia en la materia, pueden aprender y mantener sistemas creados con 4GL.

En pocas instalaciones dentro de empresas mexicanas actualmente se emplean 4GL, consecuencia en muchas ocasiones del proveedor de equipo de cómputo, y en otras, del alto costo de las herramientas propiamente dicho. No obstante, este tipo de lenguajes se está poniendo cada día más al alcance de las organizaciones para su utilización, el problema es encontrar la más adecuada de acuerdo al hardware con que se cuente.

Page 97: Metodología para la asimilación de ingeniería de software ...

102

4.2.1 MÓDULOS QUE FORMAN UN 4GL.

Los elementos que integran a un 4GL se adquieren por separado en el mercado y dependen de cada proveedor. Regularmente contienen:

• Base de datos. • Diccionario de datos, modelación de datos o enciclopedia. • Lenguaje de consulta rápida (Query). • Generador de reportes. • Generador de gráficas. • Diseñador de pantallas. • Creador de diálogo. • Herramientas para expresar reglas. • Herramientas para diseño de aplicaciones. • Entrenamiento por computadora (Tutorial).

4.2.3 USOS DE LOS 4GL.

Las principales ventajas de un 4GL, además de ayudar a producir software sin necesidad de especificar como debe funcionar, pueden ser:

• Generación de prototipos. • Generación de rutinas de aplicación. • Construcción de sistemas de información más flexibles. • Elaboración de paquetes de aplicación más prácticos. • Programas extractores de datos para uso posterior en otros paquetes de aplicación. • Apoyo al concepto de centros de información. • Construcción de sistemas de soporte a decisiones. • Ayuda en el diseño de aplicaciones. • Elaboración de prototipos de lógica compleja. • Generación de información para gráficas y presentaciones.

Para lograr lo anterior un 4GL debe contar con los siguientes factores de alta productividad:

• Funciones con el máximo uso de parámetros por omisión (defaults) y funciones de no procedimiento.

• Herramientas gráficas para el diseño automatiz.ado. • Editor para código. • Diccionario de datos en linea. • Modelo de datos normaliz.ado.

Page 98: Metodología para la asimilación de ingeniería de software ...

103

• Estaciones de trabajo dedicadas para programadores ligadas al diccionario de datos o enciclopedia.

• Herramientas para rápida creación de prototipos. • Utilerías para conversión de prototipos en código. • Documentación automática. • Librería de módulos reusables. • Entrenamientos completos y prácticas en las herramientas. • División de grandes programas en pequeños módulos autónomos vía modelación

de datos. • Uso de funciones preprogramadas. • Técnicas de administración adaptadas a lo anterior.

En resumen, un 4GL es recomendable usarlo si se pretenden desarrollar aplicaciones en menor tiempo que utilizando lenguajes de tercera generación, también cuando se buscan programas libres de errores al existir demasiados problemas de comunicación entre usuarios y desarrolladores de software, o cuando se pretenda disminuir los costos de mantenimiento y elaboración de sistemas.

Al usar 4GL se obtienen beneficios significativos que cumplen con los objetivos básicos de la Ingeniería de Software.

4.3 REINGENIERIA.

Según los autores Hammer y Champy [ 11] la Reingeniería es la revisión fundamental y el rediseño radical de procesos para alcanz.ar mejoras espectaculares en medidas criticas y contemporáneas de rendimiento, tales como costos, calidad, servicio y rapidez.

Esta definición contempla cuatro elementos fundamentales:

• FUNDAMENTAL. La Reingeniería determina primero qué debe hacer una empresa; luego cómo debe hacerlo. No da nada por sentado, Se olvida por completo de lo que es y se centra en lo que debe ser.

• RADICAL. Rediseñar radicalmente significa llegar hasta la raíz de las cosas: no efectuar cambios superficiales ni tratar de arreglar lo que ya está instalado, sino abandonar lo viejo. Rediseñar es reinventar el negocio, mejorarlo o modificarlo.

• ESPECTACULAR La Reingeniería no es cuestión de hacer mejoras marginales o incrementales, sino de dar saltos gigantescos en rendimiento. La mejora marginal requiere afinación cuidadosa, la mejora espectacular exige eliminar lo viejo y cambiarlo por algo nuevo.

• PROCESOS. Es la palabra más importante de las cuatro. Se define un proceso de negocios como un conjunto de actividades (tareas) que recibe uno o más insumos y crea un producto

Page 99: Metodología para la asimilación de ingeniería de software ...

104 de valor para el cliente. Las tareas individuales dentro de un proceso son importantes, pero ninguna de ellas tiene interés para el cliente si el proceso global no funciona.

Por lo anterior, se puede concebir al concepto de Reingeniería como una innovación en la forma de administrar todos aquellos recursos de los que dispone una empresa u organización. Estos recursos deberán ser sometidos a procesos de integración en una forma tal, que los resultados de los proyectos de Reingenieria que sean emprendidos proporcionen a la organización ventajas con respecto a sus competidores en aspectos clave tales como costos, productividad, calidad y aprovechamiento de tecnología.

Respecto al área de sistemas de información, la Reingenieria debe ser concebida como el conjunto de prácticas que tiene como objetivo administrar y apoyar los procesos de la empresa mediante el empleo de todos aquellos elementos tecnológicos que están relacionados con el manejo de información como un medio para apoyar los objetivos globales de una empresa, tal como mejoras de tiempo, calidad y eficiencia.

La Reingenieria de Software ofrece oportunidades a la administración de sistemas de información de ampliar aplicaciones existentes haciendo más manejable al código en que está programado. La Reingenieria estructura y documenta el código fuente, además obtiene el diseño del sistema. Los diseños generados son colocados en un repositorio de manera que pueden ser utiliz.ados para reconstruir y migrar hacia nuevas tecnologías. Las ventajas de la Reingenieria incluyen la reducción de los costos de mantenimiento, la preservación de la inversión en el código, el aumento en la productividad al hacer el mantenimiento, la facilidad para conversión y migración y el reciclado de componentes del sistema. Con la implantación de metodologías de para el ciclo completo de vida de sistemas que incorporen la Reingenieria, las empresas pueden diseñar procedimientos que permitan crear un conjunto de herramientas útiles para desarrollar y mantener productos de software.

4.3.1 USO DE REINGENIERÍA PARA RECONSTRUIR SOFIWARE.

Existen empresas con equipos de cómputo antiguos, que no pueden adquirir la computadora moderna que desean porque su costo sobrepasa sus posibilidades, lo que provoca que se busque cambiar algunas partes para cubrir las necesidades actuales.

De manera similar, en el área de desarrollo de sistemas, existen aún actualmente empresas que buscan cambiar sus aplicaciones elaboradas en lenguaje COBOL a sofisticados sistemas realizados en ambiente CASE. Esta modificación ha sido detenida por los productos incipientes existentes en el mercado. Las aplicaciones desarrolladas en COBOL, aunque di:ficiles de mantener, siguen dando resultados. El costo de .cambiar todo al ambiente CASE, incluyendo tiempo, capacitación y adaptación de procedimientos, hA intlinado a muchas empresas a continuar con sus viejos sistemas y formas de desarrollo.

Page 100: Metodología para la asimilación de ingeniería de software ...

105

El dilema del mantenimiento contra el nuevo desarrollo creó un amplio mercado para empresas de renombre en la rama de consultoría que trabajan ahora como remodeladores de sistemas. Estas compañías ofrecen sus seIVicios para reconstruir viejos programas en un ambiente CASE. Llevados por esta tendencia, y por la migración a bases de datos relacionales, el mercado de los seIVicios de Reingeniería se esperaba crecería cinco veces más que el mercado de productos de Reingenieria de Software para 1995. Importantes empresas norteaméricanas como Emst & Young, Price Waterhouse y CAP Gemini America (todas en Nueva York) esperaban acaparar gran parte de dicho mercado de sefVl.ClOS.

4.3.2 SERVICIOS DE REINGENIERÍA.

La empresa Emst & Y oung integró sus seIVicios de Reingeniería como parte de un seIVicio completo en ambiente CASE, llamado "Ingeniería de Redesarrollo". Según Richard W. Phelps, gerente y director de mercadotecnia, el objetivo de su trabajo era obtener el diseño original de una aplicación de sistemas, y pasarlo a CASE. No se arreglaba solamente el código, sino todo en conjunto.

Los seIVicios de Ingeniería de Redesarrollo contienen cuatro elementos. El seIVicio de Ingeniería Reversa produce un repositorio del diseño y la documentación del sistema de un sistema existente. El seIVicio de Resistematización convierte un sistema a formato CASE para transferirlo a un ambiente nuevo de hardware y base de datos. El seIVicio de Reingeniería genera una aplicación basada en CASE utiliz.ando el sistema actual como base. Y finalmente, el seIVicio de Análisis de Redesarrollo evalúa las aplicaciones futuras planeadas de la empresa para determinar su factibilidad de elaboración. La idea principal que apoya a los cuatro seIVicios es conservar las inversiones en el desarrollo de los sistemas en operación extrayendo y explotando los diseños para luego documentarlos y hacerlos más sencillos de mantener.

Las herramientas utiliz.adas por los consultores de Ernst & Y oung fueron desarrolladas por tres compañías: Adpac Corp. de San Francisco, Ca.; Language Technology Inc. de Salem, Mass.; y Viasoft Inc. de Phoenix, Az.. Pero la herramienta principal es propiedad de esta empresa de consultoría y se llama RF/Toolset. Para trabajar, utilizaba un analizador de software que lee los diferentes tipos de código del sistema tratado, por ejemplo, el código fuente, las definiciones de bases de datos, el código para generación de pantallas y el lenguaje de control (JCL ). Luego, el analizador producía la documentación y los elementos de diseño más importantes que almacenaba en el repositorio.

La información resultante del repositorio de RF!foolset podía accesarse por medio de diferentes productos CASE. Utilizando herramientas de proveedores como Bachman Information Systems Inc., KnowledgeWare Inc. Synon lnc. y Texas Instruments Inc. (que aparecen en el anexo B de este trabajo), se generaba nuevo código usando la información del diseño extraída del sistema analizado.

Actualmente RF/foolset lee código en lenguaje COBOL, algunos tipos de bases de datos y

formatos de pantalla, pero puede configurarse para leer, analiz.ar y documentar casi cualquier tipo de

Page 101: Metodología para la asimilación de ingeniería de software ...

106

lenguaje de programación. Otras partes de esta herramienta pueden adaptarse a las necesidades de cada cliente, por ejemplo, se puede configurar al repositorio para que utilice cierto tipo de convenciones. Este tipo de servicios es mejor que adquirir herramientas de Reingenieria y capacitar al personal de la empresa para que las utilice.

Para reforzar el anterior argumento, en 1995 el director de mercadotecnia de Ernst & Y oung afinnó que el costo de un producto de Reingenieria se encontraba en el rango de los $150,000 USO. Mas el tiempo y costo de la capacitación al personal de una empresa que no se compara con un trabajo de entre 3 a 6 semanas efectuado por su empresa para un sistema de gran magnitud por el cual se cobraba de $50,000 a $400,000 USO. Pero ese costo tiende a crecer cuando se agregan nuevas herramientas para continuar utiliz.ando CASE en nuevas aplicaciones.

Uno de los ejemplos de los servicios de redesarrollo se efectuó para migrar un sistema manejador de base de datos 082 de IBM en la empresa Southern Electric International Inc. (SEi). En este caso el sistema original estaba desarrollado en la base de datos IDMS y se buscaba cambiarlo a otro ambiente para responder a la fuerte demanda de los usuarios de aplicaciones para 082.

Otro caso similar se realizó en una compañía de luz en Atlanta Ga. donde se cambió un sistema de información bastante grande a un manejador de bases de datos, y una vez concluida la tarea, la empresa Ernst & Y oung capacitó al personal de la planta para continuar usando herramientas CASE para el mantenimiento de la aplicación resultante. Este paso es esencial en un proyecto de Reingenieria, porque de esa forma la gente continúa documentando y manteniendo el código resultante, que por lo regular es un trabajo más sencillo que anteriomente no se hacía.

Ernst & Y oung no es la única empresa que ofrece servicios de Reingenieria con herramientas CASE acudiendo a la empresa que lo solicita. Tampoco es la única que ofrece servicios de Reingeniería en forma separada de manera que el cliente seleccione.

Price Waterhouse, por ejemplo, proporcionaba cinco servicios de Reingeniería. Existe el servicio llamado de ''Replacement" para reempl87N completamente las aplicaciones existentes, pero también había el servicio llamado ''Enhancement" para mejora sin tener que sustituir lo ya existente. Otro servicio era ''Endurance" que dejaba las aplicaciones funcionando tal como estaban, pero las hacía más sencillas de mantener. El servicio "Salvage" reusaba los elementos útiles del sistema actual cambiando el resto. Y por último, el servicio "Readiness" planeaba y capacitaba al personal del área de sistemas para que trabajasen en ambiente CASE. Para realizar todo el trabajo, Price Waterhouse empleaba la herramienta de procesamiento de código llamada AR-RAE, que era respaldada por 11 proveedores que incluyen Bachman, KnowledgeWare y Texas lnstruments.

La empresa CAP Gemini America usaba el migrador de inteligencia artificial (Artificial Intelligence Migrator - AIM) para proyectos de Reingenieria o para migración de bases de bases de datos, utilizando el sistema de Reingenieria de aplicaciones computariz.adas (Computer Applications Reengineering System - CARS) para rastrear y analizar las aplicaciones futuras de la empresa.

Page 102: Metodología para la asimilación de ingeniería de software ...

107

Para Geoffrey Barnes, director de desarrollo de soluciones de negocios de CAP, el negocio de la Reingeniería crecería al doble para 1994. Aún si su empresa y las otras tenían éxito y aumentaban al doble el número de clientes en los próximos años, todavía existía mucho espacio para que otras compañías encontraran una porción del mercado.

Para entender el crecimiento potencial de este mercado, considérese los 100 billones de lineas de código fuente que, de acuerdo con el experto en CASE Carma McClure, existía en los $2.3 trillones de dólares de inversión en aplicaciones comerciales para el año 1995. Esto, sin tomar en cuenta las miles de horas necesarias que los consultores de Reingenieria usaron para migrar todo ese código a un ambiente CASE y a manejadores de bases de datos relacionales.

4.4 NUEVAS TECNICAS DE INGENIERIA DE SOFTWARE.

Para el director de la división de investigación computacional de la Fundación Nacional de la Ciencia de E.U., Richard DeMillo, es importante encontrar nuevas técnicas para desarrollo de software. El costo de desarrollar software sé decrementa si el número de pasos involucrados se reduce. Las nuevas técnicas de desarrollo, tales como el reuso y automatización, pueden lograr lo anterior. La cooperación entre quienes intervienen en el desarrollo de un sistema es una parte importante del proceso de Ingenieria de Software, la investigación de tecnologías que la fomenten, así como los sistemas electrónicos de conferencias, pueden mejorarla.

4.5 EL FUTURO DE LA INTEGRACION.

El contar con CASE, 4GL, Reingenieria o cualquier otro concepto para desarrollo de software en forma aislada no es garantía de que funcione. Nmguna metodología trabaja independientemente, no obstante los proveedores han tratado de incluír elementos de unas en otras para ofrecer un producto más completo. No es posible pensar tampoco en tener partes de una herramienta, por ejemplo, solo el analizador y diseñador de aplicaciones, sin el generador de código, porque significarla dejar de obtener los beneficios completos que proporciona.

Lo más recomendable es contar con un buen CASE apoyado por un 4GL poderoso para generar rápidamente código de aplicaciones, y para aquellos sistemas que se encuentren en operación, buenas herramientas de Reingenieria que reconstruyan todo para migrarlo a un ambiente más productivo de mantenimiento.

Otros conceptos no tratados dentro de este trabajo, como son los centros de información dentro de las empresas, que ofrezcan asesoria al usuario para que pueda desarrollar sus propias aplicaciones, serian cada día más factibles con ayuda de las técnicas y herramientas de Ingeniería de Software tratadas en este capítulo.

Page 103: Metodología para la asimilación de ingeniería de software ...

108

Si desde hoy se comienz.a a utiliz.ar y difundir más ampliamente todo este tipo de conceptos, no solo en el ámbito de instituciones educativas, sino más bien con el ejemplo que pueden dar aquellas empresas pioneras en el empleo de Ingeniería de Software en el desarrollo de su propio software, el futuro de esta disciplina en México entonces tendrá buenas prespectivas.

Es importante señalar que el contar con una herramienta CASE o de cualquier otro tipo, no es señal que se ha asimilado la Ingeniería de Software. Esta disciplina es una filosofia de trabajo, es una manera de pensar, y no sólo es la adquisición de productos automatiz.ados solo por el hecho de ser recomendables. Sin un esfuerzo por cambiar la administración, control y organización de la gerencia de las empresas, del área de desarrollo de sistemas y de los usuarios de dichos sistemas, para fomentar el uso de los conceptos, técnicas y herramientas tratadas en este trabajo, no se logrará asimilar adecuadamente la Ingeniería de Software en las empresas mexicanas.

Page 104: Metodología para la asimilación de ingeniería de software ...

CONCLUSIONES Y RECOMENDACIONES

En la década de los 60 's, se hacían predicciones acerca de lo que sucedería el año 2000 en todos los ámbitos, especialmente en la tecnología. Se pensaba en un mundo de robots, de procesos automatizados, de confort y despreocupación. En el ámbito del desarrollo de sistemas, se tenía la idea en esos días, las personas hablarían con las computadoras, los programas se elaborarían casi automáticamente, sin el problema de crear algoritmos ni usar complejos lenguajes de programación. Es este y otros casos, existe una gran brecha entre la realidad y los pronósticos que se hicieron casi cuarenta años atrás. Pero lo principal es que ese sueño, ese ideal está un poco más cerca, el camino se ha empezado a recorrer, de alguna forma ya no es una meta inalcanzable, sino que se va convirtiendo poco a poco en una realidad palpable. El tiempo lo dirá.

Para el caso que ocupa el presente trabajo, acerca de la Asimilación de la Ingeniería de Software en las empresas mexicanas, el futuro se ve alentador. Con bases firmes y la tecnología evolucionando a diario, es seguro que nuestros hijos próximamente utilicen herramientas automáticas que les permitan crear de una manera amigable y sencilla el software necesario para la industria, el comercio e inclusive el hogar. En la actualidad un gran número de familias mexicanas cuentan con una computadora en su hogar y los niños de hoy están aprendiendo a manejar el teclado y el "mouse" en ocasiones antes de saber escribir. La sociedad está cambiando rápidamente su manera de aprender, conocer, registrar y administrar la información a su alcance. Nuestros abuelos leían el periódico y oían las noticias por radio. Hoy nos conectamos a la red de redes (Internet) para saber el estado del tiempo y nos comunicamos con personas que no conocemos a miles de kilómetros de distancia mediante el correo electrónico.

En el capítulo 2 del presente trabajo, se trató el crecimiento que han tenido la industria de los bienes y servicios informáticos en nuestro país. Actualmente, no es posible concebir una institución bancaria, una tienda de autoservicio o una oficina de gobierno que no utilice una computadora y por supuesto, un programa, sistema o software. También se tocó el tema del mercado de software, en donde si existe atraso significante, al haber pocas compañías que se dediquen a desarrollar soluciones y aplicaciones que satisfagan la creciente demanda en la industria, el comercio y las empresas prestadoras de servicios nacionales. Al final del capítulo de referencia, se mencionó la problemática que existe para la asimilación de Ingeniería de Software mediante una encuesta que se realizó a diferentes empresas reconocidas tanto en el plano privado como gubernamental, donde menos de la mitad manifestó usar algo de Ingeniería de Software. Aunque existen problemas tanto de organización interna de las mismas empresas como de alcance de recursos para adoptar una tecnología de vanguardia, es evidente que aún existen varios obstáculos por salvar. La pregunta que surge después de analizar un poco la problemática es: ¿Qué se requiere para llevar la asimilación de la Ingeniería de Software en las empresas nacionales a la práctica?

Page 105: Metodología para la asimilación de ingeniería de software ...

111

A continuación se describen algunas de las líneas de trabajo que deben seguir tanto quiénes decidan adoptar la Ingeniería de Software como parte de su área de desarrollo de sistemas, así como aquéllos que ofrezcan las herramientas necesarias para que el proceso sea realizado satisfactoriamente:

• HERRAMIENTAS AL ALCANCE DE TODOS. Como fue establecido en el capítulo 3 de este trabajo, bajo la selección de herramientas y técnicas, es necesario definir que es lo que el personal del departamento de desarrollo de sistemas necesita. No es el paquete o el programa de moda, sino aquello que va a dar en realidad los resultados que se esperan. Aún contando con un amplio catálogo de herramientas, como aparece en el anexo B, la mayoría sólo puede usarse en ciertas plataformas de cómputo (macrocomputadoras), para equipo de cierto fabricante o requieren de una capacidad de almacenamiento y memoria considerable; por lo que una empresa que cuente con lo más común, una red de computadoras compatibles, no podrá hacer uso de poderosas herramientas, simplemente porque no están disponibles o no funcionarán. El esperar a que en un futuro cercano sean desarrolladas para equipos compatibles, tampoco es la solución, ya que muchas herramientas que no son adquiridas, pronto se welven obsoletas o sucumben ante la fuerza de mejores productos. Sin embargo, existen en la actualidad ejemplos de sistemas que permiten trabajar con las fases como el análisis y diseño de sistemas, mediante diagramas y diccionarios de datos, ayudando al analista a crear mejores modelos con bases sólidas. También mediante Internet, se ofrecen catálogos de herramientas CASE que pueden ser útiles para necesidades específicas, muchas de estas a nivel experimentación, están disponibles para el uso de quién así lo desee.

• COSTO DE LAS HERRAMIENTAS. Este punto es el más importante a la hora de tomar la decisión por parte de muchos gerentes de niveles altos, acerca de adquirir cualquier tipo de software. No importa que cumpla con las expectativas y requerimientos, si el programa o herramienta tiene un precio elevado, no es comprada. Más aún si no existe un beneficio tangible y a corto plazo. Debido a la complejidad para el desarrollo de este tipo de programas, el costo de la mayoría se encuentra muy por encima de lo que cualquier gerente de sistemas está dispuesto a pagar. La mayoría de los sistemas están cotizados en dólares, lo que hace aún más dificil su adquisición. Una estrategia efectiva para las empresas dentro de México que busquen la comercialización o la distribución de este tipo de software, seria el ofrecer planes de financiamiento, para que las empresas fueran pagando en un tiempo razonable el costo total. Opciones como el autofinanciamiento, planes de arrendamiento, descuentos por compra de varias licencias y muchas más, harían posible que un gran número de empresas adquirieran cualquier herramienta CASE, por citar un ejemplo.

• RELACIONES ESCUELA-INDUSTRIA. Aunque muchas instituciones de educación superior tienen programas donde se trata de aplicar los conocimientos adquiridos directamente en problemas relacionados con las empresas, todavía existe bastante camino por recorrer. El poder aplicar Ingeniería de Software por medio de herramientas y técnicas al desarrollo de sistemas dentro de las compañías con practicantes o alumnos a punto de graduarse, tendría varios beneficios: Primero, los estudiantes próximos a egresar, estarían en contacto directo con las situaciones reales, obteniendo experiencia y bases sólidas para su carrera. En segundo lugar, permitiría a las empresas tener una fuente fresca de conocimientos,

Page 106: Metodología para la asimilación de ingeniería de software ...

112

el entusiasmo de los jóvenes en busca del conocimiento y sobre todo a un .cost-0 oo elevado. El hecho de plantear proyectos, que formarán parte de otros mayores, en donde un prospecto de ingeniero en sistemas pudiera tener acceso a herramientas para la elaboración de software de calidad, generaría una relación ganar - ganar para ambas partes: la empresa y el estudiante. Y que decir de los profesores que supervisarían los proyectos, la oportunidad de actualizarse en el vertiginoso mundo de la computación y una forma de lograr la meta de llevar la teoría a la práctica.

• EDUCACION DE NIVELES GERENCIALES. Como fue planteado en el capítulo 3 dentro de la planeación de un proyecto de asimilación de Ingeniería de Software dentro de una empresa, la aprobación y decidido apoyo por parte de los niveles altos de la organización es un paso muy importante. Pero, ¿cómo puede un gerente o director aprobar la compra de una herramienta CASE si no conoce su funcionamiento y mucho menos sus beneficios? Pues bien, la forma más adecuada de obtener ese conocimiento es mediante un curso de sensibilización acerca de lo que significa CASE y como puede traducirse su uso en productividad hacia el área de desarrollo de sistemas. Respuestas tan simples como el hecho de que el gerente obtendrá el sistema que requería desde hace meses y que será elaborado en un tercio del tiempo que tardaba normalmente el área de desarrollo de sistemas, sin ningún error. Además, el conocimiento de herramientas para modelación de negocios, para análisis de sistemas desde el punto de vista procesos, el manejo de reingeniería que es tratado en el capítulo 4, para definir mejor el funcionamiento de la organización y otros temas adicionales, serán de gran interés para quiénes dirigen las empresas hoy en día.

En lo que se refiere a la educación que debe tener tanto los egresados de las distintas carreras relacionadas con la computación, así como los usuarios de sistemas y los desarrolladores de éstos, en donde la Ingeniería de Software es tratada, también es conveniente plantear algunas recomendaciones que serían de gran utilidad cuando el estudiante se convierta en la fuerza de trabajo que mueva a las compañías en donde sea contratado. Estas sugerencias tratan principalmente los puntos que deberían mejorarse dentro de las instituciones encargadas de la educación de las nuevas generaciones así como de la capacitación y actualización que deberían tener todas aquellas personas que se encuentran trabajando en el medio del desarrollo de software.

• ENTRENAMIENTO A PERSONAL DE SISTEMAS. Así como existen escuelas en donde se imparten cursos básicos de computación, que están dirigidos regularmente a personas que en ocasiones no se dedican totalmente al desarrollo de sistemas, también deberían existir centros de entrenamiento y capacitación que permitan al personal que actualmente trabaja en ese campo, mantenerse al día en lo que respecta al manejo de todo tipo de herramientas y técnicas de Ingeniería de Software.

• CERTIFICACIÓN. En instituciones que se dedican a la capacitación como los Centros de Educación de IBM, los negocios afiliados a Microsoft o Novell en lo que respecta a redes, existen algunos cursos acerca de algún tema relacionado con Ingeniería de Software, pero a nivel básico. De la misma forma que hoy existen personas certificadas en Office 97 o como Administradores de redes Netware, es conveniente también, y esta es una idea para quién

Page 107: Metodología para la asimilación de ingeniería de software ...

113

desee establecer un negocio así, tener centros de certificación en alguna herramienta CASE por ejemplo, un ingeniero certificado en Excelerator, ERWin o alguna otra, le daría ventaja competitiva a quién obtuviera su certificado.

• CURSOS EN WEB. La red Internet también puede ser explotada para hacer grupos de discusión acerca de tópicos relacionados con la Ingeniería de Software o alguna herramienta relacionada. Aunque los fabricantes de software para desarrollo de sistemas dan información detallada de sus productos, referencias de las empresas que los usan, de las versiones en el mercado, de la actualización, etc. , deben adicionar, como sugerencia de los interesados, todo tipo de cursos, tutoriales, ejemplos de aplicaciones y programas de demostración, que ayuden por una parte, a interesar más a quien tenga acceso a éstos y por otra, a fincar la relación con un cliente potencial. Más adelante se pueden organizar clubes de usuarios de cierta herramienta o de tal programa, para compartir experiencias y conocimientos.

Por otra parte, en el capítulo 2 del presente trabajo se describió la evolución de la formación de recursos humanos en las universidades en México. En los últimos años ha existido un incremento tanto en número de carreras afines a la computación como en alumnos inscritos a los diferentes grados, ya sea técnico, licenciatura o posgrado. Aunque no se tiene una cifra más actualizada para nuestro país, es indudable que poco a poco la cultura en computación y la formación de recursos humanos altamente capacitado se está llevando a cabo. Muchas instituciones a nivel superior tienen programas especializados para la enseñanza de la tecnología de información y actualmente existen grupos de entusiastas estudiantes de diferentes escuelas que forman agrupaciones como la Sociedad Mexicana de Ciencias de la Computación A.C. (SMCC) que su objetivo primordial es la difusión y uso de Inteligencia Artificial, Robótica, Redes Neuronales y lo que es de interés para este trabajo, Ingeniería de Software. A continuación se plantean algunos puntos de importancia para impulsar y apoyar el esfuerzo realizado por las instituciones educativas en nuestro país:

• CAMBIOS DE PLANES DE ESTUDIO. Como todo en computación, lo único constante es el cambio. La velocidad en que avanza la tecnología permite que nuevo software pueda ser utilizado en computadoras cada día más poderosas. Esto implica que son requeridos nuevos conocimientos, nuevas estrategias para el manejo y administración de las nuevas herramientas en el mercado. Por esto, los planes de estudio en las escuelas de educación superior deben revisarse constantemente, para que no queden en el olvido o en la obsolescencia. Es poco motivante para un alumno saber que lo aprendido en su curso de Ingeniería de Software nadie lo usa y menos lo conoce. Algunos libros sobre Ingeniería de Software tratan con herramientas que estaban de moda en la década de los 70's y 80's. Por consiguiente, un buen plan de estudio, enfocado a algunas herramientas en especial, con el apoyo del proveedor o fabricante de la misma, alentaría al alumno a aprender sobre el entendido que el sistema que está manejando pronto lo verá funcionando en una empresa.

• APRENDER DESDE LA ESCUELA. Como se sugirió en un punto anterior, la educación a niveles gerenciales, la certificación en Ingeniería de Software y el entrenamiento al personal de sistemas sería conveniente para las personas que actualmente laboran en para una empresa. En el caso de los estudiantes de una carrera que tenga relación con el desarrollo de software,

Page 108: Metodología para la asimilación de ingeniería de software ...

114

es de suma importancia que estén capacitados para desempeñar un cargo dentro del organigrama de un área de sistemas dentro de una empresa, desde el momento que se convierten en egresados de una institución de educación superior. Seria ilógico capacitar a alguien que acaba de salir de la escuela, además de costoso para la empresa que lo contrata. Para el egresado será más fácil integrarse a un área de desarrollo de sistemas con conocimientos al día, listos para aplicar. Para la empresa, la integración significará contar con un elemento calificado y un ahorro en capacitación.

• EGRESADOS DE ESCUELAS, AGENTES DE CAMBIO. Este es un objetivo ambicioso pero no inalcanzable. Toda institución de educación superior, tiene la misión de entregar personas útiles a la sociedad, preparadas y con deseos de superación. Sin embargo, muchos recién egresados encuentran un área de trabajo diferente a la que esperaban, en donde la tecnología no es la más avanzada, la desorganización es una forma de trabajo y el progreso es algo olvidado. En muchos casos existe resistencia por parte de los integrantes de un área de sistemas para recibir al recién egresado, ya sea por temor a verse reemplazado por él o simplemente porque tiene menos años de experiencia y no sabe lo que es desarrollar un sistema. Debido a esto, muchos jóvenes son relegados a tareas poco interesantes y que no le aportan nada. Las ideas revolucionarias traídas de la escuela son en ocasiones, consideradas descabelladas y que sólo suceden en los laboratorios. Por lo tanto, el llevar a cabo recomendaciones que hace el nuevo elemento, es indebido, dando como resultado que como los demás, se apegue a los viejos procedimientos y formas de desarrollar sistemas. Pero, que sucedería si el nuevo integrante del área demostrara con hechos las ventajas de usar por ejemplo, una herramienta CASE o una nueva técnica para la elaboración de programas, claro, con el apoyo tanto de la escuela como del nivel gerencial de la empresa. Los demás miembros del departamento, al ver los resultados, cambiarían su forma de pensar y ver las cosas. Esto convertiría al nuevo compañero del área en un agente de cambio, punto de referencia para una modificación en la actitud y la forma de trabajar en el futuro. Es entonces conveniente, concientizar a los actuales alumnos acerca del papel que desempeñarán dentro de las empresas en que laboren.

• CLASES VIRTUALES DE INGENIERÍA DE SOFTWARE. Otro método innovador y gracias al avance de las comunicaciones actuales, es el tomar clases sin asistir fisicamente al aula. Esto es, las llamadas "clases virtuales". Con esta forma de trabajar, las personas interesadas en tomar un curso acerca de Ingeniería de Software o alguna herramienta en especial, no tendrían que abandonar su centro de trabajo o su hogar, además de la ventaja en ciertas situaciones, de tomar la clase en la hora y el día que más se ajuste a sus actividades. Esta es una forma más de acercar la fuente de conocimientos a los involucrados directamente, permitiendo que más gente pueda adquirir lo que requiere con la mayor comodidad.

Para concluir, existen aún bastante trabajo por realizar para ver cristalizado el sueño de contar con las herramientas tan necesarias actualmente, para desarrollar productivamente y con alta calidad, los sistemas de información, programas y en general el software que demanda la oficina, la fábrica e inclusive el hogar. Estamos dentro de la sociedad de la información y el contar con los programas adecuados, oportunos y correctos para manejarla en todos sentidos, nos permitirán tomar mejores decisiones que beneficien a todos. Tal vez sea posible hablar en pocos

Page 109: Metodología para la asimilación de ingeniería de software ...

115

años que la asimilación de la Ingeniería de Software en las empresas mexicanas, fue una realidad a principios del siglo XXI.

Page 110: Metodología para la asimilación de ingeniería de software ...

ANEXO A

GLOSARIO DE TERMINOS

Análisis estructurado (structured analysis) Técnicas desarrolladas a finales de los años 70 por Y ourdon, DeMarco, Gane y Sarson para aplicar un método sistemático al análisis de sistemas. Incluía la utilización de diagramas de flujo de datos y modelo de datos y fomentaba la utilización de notas gráficas independientes de implementación para la documentación.

Análisis orientado a objetos (object-oriented analysis) Examen de un problema modelándolo como un grupo de objetos interactivos. Un objeto se define por su clase, elementos de datos y comportamiento. Por ejemplo; en un sistema de procesamiento de pedidos, una factura de una clase, e impresión, visión y totalización son ejemplos de este comportamiento. Los objetos (facturas individuales) heredan este comportamiento y los combinan con sus propios

Ancho de banda (bandwidth) La capacidad de transmisión de una computadora de un canal de comunicaciones. La transmisión digital pura se mide en bits o bytes por segundo. Cuando los datos digitales son convertidos a frecuencias para transmisión por redes basadas en ondas portadoras, el ancho de banda todavía se expresa en bits o bytes por segundo. Sin embargo, cuando se utilizan frecuencias como la señal de transmisión en vez de pulsos on/off (sí/no), el ancho de banda puede también medirse en ciclos por segundo, o Hertz. El ancho de banda es la diferencia existente entre la mínima y la máxima frecuencia transmitida. En este caso, la frecuencia será igual a mayor que la cantidad de bits por segundo.

Aplicación (application) (1) Un uso específico de la computadora. Por ejemplo, sueldos, inventarios y cuentas a cobrar, son aplicaciones típicas de negocios. (2) Sinónimo de programa de aplicación o paquete de software. Por ejemplo, los procesadores de texto, las hojas de cálculo y los gráficos comerciales son aplicaciones. A menudo se refiere al programa que se está ejecutando y a los archivos y bases de datos con los que trabaja.

Base de datos (database) (1) Un conjunto de archivos interrelacionados que es creado y manejado por un sistema de gestión o de administración de bases de datos (DBMS). (2) Cualquier conjunto de datos almacenado electrónicamente.

Base de datos orientada a objetos (object-oriented database) Base de datos que contienen tipos de datos abstractos (objetos). Puede almacenar objetos directamente desde un lenguaje de programación orientado a objetos. Como no se puede almacenar ningún tipo de objeto (las reglas

Page 111: Metodología para la asimilación de ingeniería de software ...

118 para almacenar los datos forman parte de un objeto), las bases de datos orientadas a objetos promete bases de datos completamente integradas que contendrán datos, textos, imágenes y voz; esencialmente una variedad infinita de formatos en continuo cambio.

CASE (Computer-Aided Software Engineering o Computer-Aided Systems Engineering) Ingeniería de Software Asistida por Computadora o Ingeniería de Sistemas Asistida por Computadora Software que se utiliza en una cualquiera o en todas las fases del desarrollo de un sistema de información, incluyendo análisis, diseño y programación. Por ejemplo, los diccionarios de datos y herramientas de diagramación ayudan en las fases de análisis y diseño, mientras que los generadores de aplicaciones aceleran la fase de programación. Las herramientas CASE proporcionan métodos automáticos para diseñar y documentar las técnicas tradicionales de programación estructurada. La meta última de CASE es proveer un lenguaje para describir el sistema completo, que sea suficiente para generar todos los programas necesarios.

CD ROM Memoria de Solo Lectura en Disco Compacto (Compact Disc Read Only Memory) Un formato de disco compacto que se utiliza para almacenar texto, gráficos y sonido estereofónico de alta fidelidad. Es prácticamente el mismo disco que un CD de música, pero usa pistas distintas para los datos. Un reproductor musical de CD no puede reproducir discos CD ROM, pero un reproductor de CD ROM puede reproducir discos CD, y tiene enchufes para conectarlo a un amplificador y/o auriculares. Un lector de CD ROM está cableado y controlado por una tarjeta que se enchufa en una de las ranuras de expansión de la computadora. Los CD ROM pueden almacenar más de 600 MB de datos, lo que equivale a aproximadamente 250.000 páginas de texto o 20.000 imágenes de resolución media. Los CD ROM se están haciendo imprescindibles para grandes catálogos y obras de referencia. El audio y los datos residen en pistas separadas y no pueden ser oídos y vistos simultáneamente. Con un estándar ampliado, llamado CD ROM XA, varios grados de audio de baja fidelidad pueden oírse mientras se visualizan simultáneamente los datos.

Compilador (compiler) Software que traduce lenguajes de programación de alto nivel, como COBOL y C, en lenguaje máquina. Un compilador habitualmente genera en primer lugar lenguaje ensamblador y a continuación traduce este lenguaje a lenguaje máquina.

Computadora de tercera generación (third-generation computer) Computadora que utiliza circuitos integrados, almacenamiento en disco y terminales en línea. La tercera generación se inició aproximadamente en 1964, con el advenimiento de la IBM System/360.

Computadora personal (personal computer) Sinónimo de microcomputadora, una computadora que funcionalmente es similar a computadoras más grandes, pero sirve solamente a un usuario. Es usada en el hogar y en la oficina para casi todas las aplicaciones que tradicionalmente se ejecutan en computadoras más grandes. Con la adición de un modem, una computadora personal se convierte en una terminal para el mundo externo, capaz de recuperar información de otras computadoras y utilidades de información. Hay una amplia variedad de computadoras personales en el mercado, con precios desde $ 300 hasta más de $ 10.000. El tamaño de la computadora está basado en su memoria y capacidad de disco. Su velocidad está basada en la CPU que la comanda, y su calidad visual está basada en la resolución de la pantalla y

Page 112: Metodología para la asimilación de ingeniería de software ...

119 de la impresora. La mayoría de las computadoras personales ejecutan un programa cada vez, pero las máquinas multitarea, las cuales ejecutan más de un programa simultáneamente, van a volverse más comunes en los años 90. Las computadoras personales nuevas y rápidas (Intel 386, 486, Motorola 68020, 68030, etc.) están cambiando el mercado para siempre. No sólo comienzan a competir con las estaciones de trabajo minicomputadoras, sino que en los 90, las redes de estas máquinas van a ser instaladas para aplicaciones que previamente eran relegadas a mini y macrocomputadoras. Estas máquinas de escritorio de alta potencia van a fomentar el desarrollo de más aplicaciones de inteligencia artificial que son el fundamento de la próxima generación informática. Cuando cambie el siglo, se va a poder hablarle a la computadora tan fácilmente como escribir en ella. Como máquinas independientes, las computadoras personales han puesto en las manos de un individuo una capacidad creativa que cuesta millones de dólares menos que hace 20 años. Su uso, en forma paulatina pero segura, va desplazando el balance de poder de la compañía grande a la pequeña, de la élite a las masas, de los ricos a los individuos de recursos modestos. En un poco más de una década, la computadora personal ha revolucionado la industria de informática y el mundo.

Configuración (Configuration) Un sistema particular de componentes interrelacionados, tal como un sistema informático o una red de comunicaciones. Configurar un sistema es escoger componentes de entre una variedad de opciones para crear un sistema particularizado.

Construcción de prototipos (prototyping) La creación de un sistema con carácter de prueba, para su verificación y aprobación. Con respecto al desarrollo de sistemas de información, la construcción de prototipos se ha vuelto esencial para clarificar los requerimientos de información. En el enfoque tradicional, las especificaciones funcionales, que son los planos y el diseño del sistema de información, deben concluirse y "congelarse" antes de que el sistema pueda ser construido. Mientras que la persona con orientación analítica puede tener una imagen clara de los requerimientos de información, puede no suceder lo mismo con otras. Empleando las capacidades de cuarta generación de un sistema de administración de bases de datos como herramienta de construcción de prototipos, los analistas de sistemas y los usuarios pueden desarrollar el nuevo sistema de forma conjunta. Se pueden crear y manipular las bases de datos de una terminal de macrocomputadora, o en una computadora personal, mientras el usuario asiste al progreso. Cuando los usuarios ven salidas tangibles en una pantalla de presentación o en un informe impreso, pueden imaginar qué es lo que está faltando o cuál seria la próxima pregunta si este fuera un sistema de producción. Si la construcción de prototipos se lleva a cabo cuidadosamente, el resultado final puede ser un sistema en marcha. Aun si el sistema final debe ser reprogramado en otros lenguajes con motivos de estandarización o de eficiencia de máquina, el prototipo sirvió para proveer especificaciones para un sistema real en lugar de uno teórico.

Datos (data) (1) Técnicamente, los datos son hechos y cifras en bruto, tales como órdenes y pagos, los cuáles son procesados para constituir información, tal como saldo deudor y cantidad disponible. Sin embargo, en el uso corriente, datos e información se toman como sinónimos. Hay una compensación entre la cantidad de datos que se guardan en una computadora y la cantidad de información. Los datos pueden procesarse para producir diferentes formatos de información, pero toma tiempo clasificar y sumar transacciones. La información actualizada puede proporcionar respuestas inmediatas. Un error frecuente es creer que el software es también datos.

Page 113: Metodología para la asimilación de ingeniería de software ...

120 Los programas de software contienen instrucciones que se ejecutan o corren en una computadora y no son procesadas por la computadora. Los datos se procesan, el software se ejecuta. (2) Cualquier forma de información ya sea en forma electrónica o sobre papel. En forma electrónica, "dato" hace referencia a campos de datos, registros, archivos y bases de datos, documentos de procesamiento de textos, imágenes de gráficos de trama y vectoriales y voz y video codificados en forma digital. (3) Elementos (items) de datos en los archivos de datos y bases de datos, en contraste con los archivos de texto, gráficos, voz y video. (4) Forma plural de datum (dato); sin embargo la palabra "datum" es raramente usada.

Depurador (debugger) Un programa que asiste en la depuración de un programa. Proporciona formas de detener un programa o capturar diversos datos de sistema en momentos prescritos. El depurador puede ser capaz de saltar directamente a la línea del programa fuente que originó el problema.

Diagrama de flujo de datos (data flow diagram) Descripción de los datos y el procesamiento manual y ejecutado con los datos por la máquina.

Diccionario de datos (data dictionary) Base de datos acerca de datos y bases de datos. Contiene el nombre, tipo, rango de valores, fuente y autorización para el acceso a cada elemento de datos en los archivos y bases de datos de la organización. Indica asimismo qué programas de aplicación utilizan dichos datos de tal manera que cuando se contempla un cambio en una estructura de datos, puede generarse una lista de los programas afectados. El diccionario de datos puede ser un sistema de información independiente empleado con propósitos administrativos y de documentación, o puede ser una parte integrante del sistema de administración de la base de datos, en donde se le utiliza para realmente controlar su operación. La integridad de los datos y la exactitud de los mismos está más asegurada en el último de los casos.

Diseño descendente (topdown desing) Técnica de diseño que comienza con el nivel más alto de una idea, y se abre camino descendiendo hacia el nivel más bajo de detalle.

Diseño estructurado (structured design) Método sistemático para programar diseños desarrollado a mitad de los años 70 por Constantine, Y ourdon, que incluía la utilización de notas gráficas para la documentación efectiva y comunicaciones, guía de diseños y recetas para ayudar a los programadores a iniciarse.

DOS (Disk Operating System) sistema operativo en disco (1) La denominación genérica de un sistema operativo. (2) Un sistema operativo monousuario para las series PC, PS/1 y PS/2 de IBM. Desarrollado por Microsoft, el desarrollo del DOS es compartido con IBM de tanto en tanto. El DOS es a veces denominado PC-DOS, para diferenciarlo del MS-DOS, la versión de Microsoft para las PC no IBM. Ambos productos son prácticamente idénticos y a ambos se los llama DOS.

Editor de enlaces (linkage editor) Un programa utilitario que adapta un programa que ha sido ensamblado o compilado a un entorno particular de computadora. Formalmente engancha las referencias cruzadas entre módulos separados de programa, y vincula el programa a varias

Page 114: Metodología para la asimilación de ingeniería de software ...

121

bibliotecas que contienen subrutinas ya escritas. Su salida es un módulo de carga, un programa listo para ejecutarse en la computadora.

Editor de texto (text editor) Software empleado para crear y manipular archivos de texto, tales como programas en lenguaje fuente y listas de nombres y direcciones. A diferencia de los procesadores de texto, los editores no disponen de características elaboradas de formateado e impresión, tales como alineado automático, subrayado y negrita. Los editores de textos diseñados para programación poseen características especiales tales como sangrado automático y ventanas múltiples.

Hardware Toda la maquinaria y el equipamiento. Distinto al software, el cual es un conjunto de instrucciones que le dicen a la computadora qué hacer. También contrástese con data, que son los hechos y cifras que se almacenan en el hardware y son controlados por el software. Hardware Contra Software En operación, una computadora es a la vez hardware y software. Uno es inútil sin el otro, y cada uno regula al otro. El diseño del hardware especifica qué instrucciones puede seguir, y luego las instrucciones le dicen qué hacer. Tan inseparables como son el hardware y el software en operación, ellos son completamente diferentes cuando están siendo evaluados. El hardware es el mundo del almacenamiento y la transmisión. El software es el mundo de la lógica y del lenguaje. Cuanto más memoria y almacenamiento en disco tiene un sistema informático, más trabajo puede hacer.

Información (information) El resumen de los datos. Técnicamente, los datos son hechos y cifras en bruto que son procesados para obtener información, tal como resúmenes y totales. Pero, dado que la información puede constituir también datos en bruto para el siguiente trabajo o persona, es imposible definir precisamente ambos términos. Los dos pueden utilizarse indistintamente. Cuando se fusionen la automatización de oficina y el procesamiento de datos, será de gran ayuda visualizar la información de la misma manera que los datos se definen y utilizan, a saber: datos, texto, hojas de cálculo, imágenes, voz y video. Los datos son campos definidos en forma discreta. El texto es una colección de palabras. Las hojas de cálculo son datos en forma matricial (filas y

Ingeniería revena (revene engineer) aplicar ingeniería inversa para analizar un sistema ya terminado a fin de aislar sus bloques constructivos individuales. Por ejemplo, cuando se aplica ingeniería inversa a un chip, todos los circuitos separados que lo componen son aislados e identificados.

Interactivo (interactive) Un diálogo bilateral entre el usuario y una computadora.

LAN (1) (Local Area Network) (Red de Area Local) Red de comunicaciones fue sirve a usuarios dentro de un área geográficamente limitada. (2) Red de computadoras personales dentro de un área geográficamente confinado que se compone de servidores, estaciones de trabajo, sistemas operativos de redes y un enlace de comunicaciones. Los servidores son máquinas de alta velocidad que pueden contener programas y datos que todos los usuarios de redes puedan compartir. Una estación de trabajo es una máquina de usuario, que puede funcionar como una computadora personal autónoma. Las estaciones de trabajo sin disquete o las estaciones de trabajo sólo disco flexible recuperan todo el software y todos los datos del servidor. Como con cualquier

Page 115: Metodología para la asimilación de ingeniería de software ...

122 computadora personal, una impresora se puede unir a una estación de trabajo o a un servidor y puede ser compartida por los usuarios de redes. Las LANs pequeñas pueden permitir que cada estación de trabajo funcione como un servidor y que todos los usuarios accedan a los datos en todas las máquinas. Estas redes par a par generalmente son más simples de instalar y de dirigir, pero un servidor dedicado siempre podrá manejar más transacciones por segundo. En redes de alto volumen de transacciones se utiliza muchos servidores. Para conectar redes iguales se utilizan puentes y gateways conectan un tipo de red u otro, permitiendo que una red de computadoras personales, por ejemplo, se interconecte una red de minicomputadoras o con una computadora de gran tamaño. El software de control en una LAN es el sistema operativo de la red, como NetWare, Lantastic y Appletalk, que reside en el servidor. En cada estación de trabajo reside un componente del software y permite que una aplicación lea y escriban datos de un servidor como si estuviera en la máquina local. La transferencia fisica de datos la lleva a cabo el método de acceso, como Ethernet o Token Ring, que aparecen en forma de adaptadores de red (NICs) y se conectan a cada computadora. El enlace real, o la vía de acceso de las comunicaciones es el cable (un par trenzado, un cable coaxial, fibra óptica) que se conecta a cada adaptador de red y a su vez conecta estaciones de trabajo y servidores juntos.

Lenguaje de consulta (query language) Un lenguaje generalizado que permite al usuario seleccionar registros de una base de datos. Los lenguajes de consulta proveen ya sea lenguajes de órdenes, métodos controlados por menú o formato de consulta por ejemplo (QBE) para expresar las condiciones de coincidencia. Generalmente se proveen lenguajes de consulta en los sistemas de administración de bases de datos, y existen paquetes independientes para la interrogación de archivos que son parte de amplificaciones no-DBMS. Véase Query program.

Lenguaje de cuarta generación (Fourth-generation language) Lenguaje de computadora que es más avanzado que los lenguajes de programación de alto nivel tradicional. Por ejemplo, en dBASE, el comando LIST muestra todos los registros de un archivo de datos. En los lenguajes de segunda y tercera generación, tendrian que escribirse instrucciones para leer cada registro, comprobar si se llegó al final del archivo, colocar cada elemento de dato en la pantalla, volver y repetir la operación hasta que no haya más registros para procesar. Los lenguajes de primera generación son lenguajes de máquina; los de segunda generación son lenguajes ensambladores dependientes de la máquina, y los lenguajes de tercera generación son los lenguajes de programación de alto nivel, tales como FORTRAN, COBOL, BASIC, Pascal y C. A pesar de que varios lenguajes, como el dBASE, son llamados lenguajes de cuarta generación, en realidad son una mezcla de la tercera y la cuarta. El comando LIST de dBASE es un comando de cuarta generación, pero las aplicaciones programadas en dBase son de tercera generación. Los lenguajes de consulta y escritores de informes también son lenguajes de cuarta generación. Cualquier lenguaje de computadora con comandos parecidos al inglés que no requiere la lógica tradicional de entrada-proceso-salida está en esta categoría.

Lenguaje de programación (programming language) Un lenguaje usado para escribir instrucciones para la computadora. Permite que el programador exprese el procesamiento de datos de una forma simbólica sin tener en cuenta los detalles específicos de máquina. Las sentencias que escribe el programador se denominan lenguaje fuente, y son traducidas al lenguaje de máquina de la computadora por medio de programas llamados ensambladores, compiladores e interpretes. Por

Page 116: Metodología para la asimilación de ingeniería de software ...

123 ejemplo, cuando un programador escribe multiplicar horas por tarifa, el verbo MULTIPLICAR debe traducirse a un código que signifique multiplicación y HORAS y TARIFA deben convertirse en direcciones de memoria donde están verdaderamente almacenados esos elementos. Como los lenguajes humanos, cada lenguaje de programación tiene su propia gramática y sintaxis. Existen muchos dialectos del mismo lenguaje, y cada dialecto requiere su propio sistema de traducción. El ANSI (American National Standards Institute-Instituto Americano de Estándares Nacionales) ha establecido estándares para muchos lenguajes de programación, y cada lenguaje del que se dice que se adhiere a las normas ANSI, es un lenguaje libre de dialectos. Sin embargo, la inclusión de nuevas características en los estándares ANSI puede llevar años, y, como resultado de ello, emergerán siempre nuevos dialectos. Los lenguajes de programación pueden englobarse en dos grandes categorías: lenguajes ensambladores de bajo nivel y lenguajes de alto nivel. Los lenguajes ensambladores están disponibles para cada familia de CPU, y traducen una línea de código en una instrucción de máquina. Los lenguajes de alto nivel traducen sentencias de programación en varias instrucciones de máquina. En la actualidad, los lenguajes de alto nivel más comunes para negocios son el BASIC, COBOL, dBASE y Pascal. El FORTRAN Y El APL se utilizan en áreas científicas, y el C se emplea extensamente en software comercial. El LISP y el Prolog son usados en aplicaciones de inteligencia artificial, el FOR TH es utilizado en el control de procesos y el Ada es empleado por el Departament of Defense. La nueva ola es la programación orientada a objetos, y el C++ está ganando popularidad.

Macrocomputadora (mainframe) Una computadora grande. A mediados de los años 60, las épocas antiguas de las computadoras, todas las computadoras eran mainframes (literalmente "bastidor principal"), ya que el término se refería al gabinete que contenía la CPU. Aunque mainframe aún significa gabinete principal, usualmente se refiere a un gran sistema de computación y toda la experiencia asociada que va con él. Hay macrocomputadoras de escala pequeña, media y grande, manejando desde un manojo a varios miles de terminales en línea. Las macrocomputadoras de gran escala pueden tener centenares de megabytes de memoria principal y centenares de gigabytes de almacenamiento en disco. Las macrocomputadoras de media y gran escala usan computadoras más pequeñas como procesadores frontales que se conectan directamente a las redes de comunicaciones. Los fabricantes originales de macrocomputadoras fueron Burroughs, Control Data, GE, Honeywell, IBM, NCR, RCA y Univac, conocidos también como IBM y los siete enanitos. Después de que las divisiones de computadoras de GE y RCA fueran absorbidas por Honeywell y Univac respectivamente, los fabricantes de macrocomputadoras fueron conocidos como IBM y el BUNCH (racimo).

Macintosh Serie de computadoras de 32 bits de Apple Computer, presentada en 1984. Usa la familia de procesadores Motorola 68000, y un sistema operativo propio que simula el escritorio del usuario en la pantalla. Esta interfaz estándar con el usuario, combinada con su lenguaje de gráficos QuickDraw incorporado, ha provisto una medida de consistencia y uniformidad que es única.

Memoria de Solo Lectura ROM (Read Only Memory) Chip de memoria que almacena permanentemente instrucciones y datos. Sus contenidos se crean en el momento de la fabricación y no se pueden alterar. Se utiliza ampliamente para almacenar rutinas de control en computadoras personales (ROM BIOS) y en controladores de periféricos, también se utiliza en cartuchos

Page 117: Metodología para la asimilación de ingeniería de software ...

124 conectables para impresoras, video juegos y otros sistemas. Cuando el software se almacena en ROM la actualización a la versión siguiente requiere volver a colocar el chip de la ROM.

Método del camino crítico CPM (Critical Path Method) Una técnica de planeamiento y control en administración de proyectos que se implementó en computadoras. El camino critico es la serie de actividades y tareas en el proyecto que no tienen incorporado un tiempo de holgura. Cualquier tarea que se demore en el camino critico alargará el tiempo total del proyecto.

Modelo entidad relación (entity relationship model) En una base de datos, una modelo de datos que describe atributos de entidades y relaciones entre ellos.

Multitarea (multitasking) La ejecución de dos o más programas en una computadora al mismo tiempo. La multitarea se controla por el sistema operativo, que carga los programas y los maneja hasta que terminen. El número de programas que pueden ser efectivamente ejecutados depende de la cantidad de memoria disponible, la velocidad de CPU, capacidad y velocidad de los recursos periféricos, así como también de la eficiencia del sistema operativo.

Multiusuario (multiuser) Una computadora que es compartida por dos o más usuarios.

Paradigma (paradigm) Un modelo, ejemplo o molde.

Pentium CPU de próxima generación de Intel que aparecerá en 1993. De compatibilidad ascendente con el 486, es una CPU de 64 bits con juegos de instrucciones gemelas y memorias caché. Puede contener hasta 3 millones de transistores.

Piratería (piracy) La copia ilegal de software para uso personal o comercial.

Procesador de palabra (word processor) procesador de texto (1) Software que provee funciones de procesamiento de texto en una computadora. (2) computadora que ha sido especializada para funciones de proce~amiento de texto. Hasta fines de los años 70, los procesadores de texto eran siempre máquinas dedicadas. Actualmente, las computadoras personales están reemplazando rápidamente los procesadores de palabra dedicados.

Procesador frontal (front-end processor) Computadora que maneja el procesamiento de comunicaciones en un entorno de computadoras de gran tamaño. Por un lado se conecta a los canales de comunicaciones y por el otro a la computadora de gran tamaño. Transmite y recibe mensajes, ensambla y desensambla paquetes y también detecta y corrige errores. Algunas veces es sinónimo de controlador de comunicaciones, aunque esto último generalmente no es tan flexible. En una LAN, los adaptadores de la red realizan las funciones del procesador frontal.

Programa (program) Una colección de instrucciones que indican a la computadora que debe hacer. Un programa se denomina software; por lo tanto, programa, software e instrucciones son sinónimos. Un programa se escribe en un lenguaje de programación y se convierte al lenguaje de máquina de la computadora por medio de software denominado ensambladores y compiladores. Un programa está compuesto por (1) instrucciones, (2) buffers y (3) constantes. Las instrucciones

Page 118: Metodología para la asimilación de ingeniería de software ...

125 son las directivas que la computadora debe seguir y una secuencia particular de instrucciones se denomina la lógica del programa, Los buffers (memorias intermedias) son espacios reservados en el programa, que aceptarán y almacenarán los datos mientras son procesados. Las constantes son valores fijos dentro del programa, que se usan para las comparaciones. El programa requiere datos en una secuencia entrada-proceso-salida. Después de que los datos sean introducidos en uno de los buffers (memorias intermedias) del programa desde un dispositivo periférico, tal como un teclado o disco, son procesados. Los resultados son sacados a un periférico tal como una pantalla de presentación o una impresora. Si los datos fueron actualizados, son grabados nuevamente en el disco. El programa de aplicación el programa que ejecuta el procesamiento de los datos de organización, no instruye a la computadora para que lo haga todo. Cuando el programa necesita datos de entrada o está listo para emitir datos de salida, envía u requerimiento al sistema operativo, que contiene las instrucciones reales para ejecutar estas tareas. El sistema operativo hace el trabajo y luego devuelve el control al programa de aplicación.

Programa de utilidad (utility program) Un programa que da apoyo a la operación de la computadora. Los programas utilitarios, llamados a veces simplemente utilitarios, proveen capacidades de administración de archivos, tales como clasificación, copia, comparación, listado y búsqueda, así como rutinas de diagnóstico y medición que verifican la salud y el rendimiento del sistema de computación.

Programación descendente (top down programming) Diseño de programación y técnica de documentación que impone una estructura jerárquica en el diseño del programa.

Programación estructurada (structured programming) Una variedad de técnicas que imponen una estructura lógica en la escritura de un programa. Las rutinas grandes de descomponen en otras más pequeñas, las rutinas modulares. Se desaconseja el uso de la sentencia GOTO, con lo cual se evíta que el programador cree alguna bifurcación a una rutina que no garantice un retomo al lugar del programa que la llamó. Para la documentación, se coloca una sangría en ciertas sentencias, de manera que los comienzos y finales de los lazos se identifiquen fácilmente. Además, los recorridos estructurados, que invítan a las críticas por parte de los colegas programadores, son parte de la programación estructurada. Los lenguajes estructurados, tales como Pascal, Ada y d.BASE, obligan al programador a escribir un programa estructurado. Sin embargo, los lenguajes no estructurados, como el FORTRAN, COBOL y BASIC, requieren disciplina por parte del programador. Requerimiento de hardware basado en el tamaño de los archivos y las bases de datos que serán creadas, y el número de usuarios simultáneos en las terminales. El software, por otro lado, es más dificil de especificar. Los programas deben procesar adecuadamente las transacciones de negocios de la organización, e incluso la más pequeña compañía puede tener transacciones complicadas.

Rápido desarrollo de aplicaciones RAD (Rapid Application Development) Técnica de desarrollo de aplicaciones computacionales que mediante prototipos y lenguajes de programación orientados a objetos, permite crear sistemas no complejos.

Page 119: Metodología para la asimilación de ingeniería de software ...

126 Repositorio (repository) Almacén, depósito, base de datos con información sobre aplicaciones de software que incluye autor, elementos de datos, entradas de datos, procesos, salidas e interrelaciones. Puede ser el corazón central de un sistema CASE.

Sistema de información (information system) Una aplicación comercial de la computadora. Está constituido por las bases de datos, los programas de aplicación, los procedimientos manuales y automatizados, y abarca los sistemas informáticos que llevan a cabo el procesamiento. Las bases de datos almacenan los asuntos de los negocios ( archivos maestros) y sus actividades (archivos de transacciones). Los programas de aplicación proveen la entrada de datos, la actualización, consulta y procesamiento de informes. Los procedimientos manuales documentan la forma en que se obtienen los datos para su introducción, y la forma en que se distribuyen las salidas del sistema. Los procedimientos automáticos instruyen a la computadora acerca de cómo ejecutar las actividades de procesamiento por lotes, en las cuales la salida de un programa es automáticamente transferida a la entrada de otro programa.

Sistema de tiempo real (realtime system) Sistema informático capaz de responder a las señales de entrada en forma suficientemente veloz para mantener una operación en movimiento a la velocidad requerida.

Software Instrucciones para una computadora. Una serie de instrucciones que realizan una tarea en particular se llama programa o programa de software. Las dos categorías principales son software de sistemas de aplicaciones. El software de sistemas se compone de programas de control, incluyendo el sistema operativo, software de comunicaciones y administrador de bases de datos. El software de aplicaciones es cualquier programa que procesa datos para el usuario (inventario, nómina, hoja de cálculo, procesador de texto, etc.).

SQL Lenguaje de Consulta Estructurado (Structured Query Language) Lenguaje utilizado para interrogar y procesar datos en una base de datos relacional. Desarrollado originalmente por IBM para sus macrocomputadoras, han habido muchas implementaciones creadas para aplicaciones de base de datos en mini y microcomputadoras. Las órdenes (mandatos) de SQL se pueden utilizar para trabajar interactivamente con una base de datos, o pueden incluirse en un lenguaje de programación para servir de interfaz a una base de datos. Ejemplo: SELECT NOMBRE, CIUDAD, ESTADO, CODIGO ZIP FROM CLIENTE WHERE LIMITE DE CREDITO > 4999 ORDER BY LIMITE DE CREDITO DESC.

Utilería (Utility program) Un programa que da apoyo a la operación de la computadora. Los programas utilitarios, llamados a veces simplemente utilitarios, proveen capacidades de administración de archivos, tales como clasificación, copia, comparación, listado y búsqueda, así como rutinas de diagnóstico y medición que verifican la salud y el rendimiento del sistema de computación.

Windows Entorno operativo para gráficos de Microsoft que se integra con DOS. Proporciona un entorno de sobremesa similar al Macintosh, en el cual cada aplicación activa se visualiza en una pantalla movible y redimensionable sobre la pantalla. Con objeto de usar todas las funciones del

Page 120: Metodología para la asimilación de ingeniería de software ...

127

Windows, las aplicaciones deben escribirse específicamente para él. Sin embargo, Windows también ejecuta aplicaciones de DOS y se puede usar como el entorno operativo desde el que se lanzan todos los programas.

Page 121: Metodología para la asimilación de ingeniería de software ...

ANEXOB

HERRAMIENTAS CASE

El término de ingeniería de software asistida por computadora CASE ( computer-aided software engineering), puede usarse para describir un amplio rango de características como: Asistencia a desarrolladores de software, diseño del modelo de datos, creación de código, contro~ administración, mantenimiento y producción de aplicaciones y rediseño de aplicaciones en operación.

A continuación se da una lista de productos CASE desarrollados por varias compañías. Cada descripción incluye el nombre de la empresa, el nombre del producto y una breve descripción de lo que proporciona el paquete en las áreas de análisis, diseño, programación, producción, administración de proyectos y plataforma donde se utiliza.

• +lBase,CM, CR, DataTree, Reports, Reuse, ReverseC, ReverseFORTRAN, ReversePASCAL, Test+l Software Engineering. Herramienta para programación e ingeniería reversa.

• 4Front. Deloitte & Touche Consulting Group. Metodología estructurada. • AD/Advotop 1.1. Cincom Systems. AD/ Advantage es un sistema para el desarrollo y

mantenimiento de aplicaciones. Corre en ambientes IBM MVS y VSE. • ADN ANCE DataModeler. On-Line Software. ADN ANCE DataModeler es una herramienta

CASE que proporciona funcionalidad para el modelamiento de datos. Corre en equipos IBM 30xx, MVS/XA/ESA

• Adabas. Software AG of North America, Inc. Base de datos, reporteador y generador de código.

• AdaTEST. lnformation Processing Ltd. (IPL). Pruebas dinámicas que cubre el análisis de sistemas, herramientas para métricas.

• ADW Workstation 1.6. KnowledgeWare Corp. Application Development Workbench (ADW) es la herramienta completa de automatización e integración que cumple con todas las fases del ciclo de vida de sistemas, desde la planeación estratégica hasta la generación automática de código. Se usa en ambientes OS/2.

• AIO WIN. Knowledge Based Systems, Inc. Modelamiento de funciones, soporte de costos. • Analyst/Designer Toolkit. Yourdon, lnc. Análisis y diseño de sistemas con la metodología

Yourdon.

Page 122: Metodología para la asimilación de ingeniería de software ...

130 • Application analysys & design. MEGA International. Análisis y diseño estructurado de

sistemas. • Application Development Workbench: (ADW) Sterling Software. Modelamiento de

negocios, análisis y diseño de sistemas. • APPX. APPX Software, Inc. 4ta Generación, rápido desarrollo de aplicaciones • APS/K 2.1 Intersolv loe. Es un generador del 1000/o del código fuente en COBOL necesario para

grandes aplicaciones, no requiere que sea tecleado el código por el usuario. Corre en redes de PC y rnacrocomputadoras. Se puede usar en ambientes OS/2, DOS y MVS.

• BPwin: Logic Works. Reingenieria de procesos de negocios. • Brackets 2. TLA Systems Education Ltd. Brackets es usado para diseñar y construir programas

en COBOL o cualquier otro lenguaje estructurado. Maneja diagramas de Warnier/ORR para el análisis, diseño y programación. Corre en DOS.

• BridgePoint Gen. Objective Spectrum, Inc. Generación de código. • BX. Integrated Computer Solutions (ICS). Generador GUI para C, C++ & Java • Cantata. lnformation Processing Ltd. (IPL). Prueba dinámica de C/C++, cubre análisis y

herramientas para métricas. • CASE 2000. Cadre lnc. Generación de diagramas de flujo y diccionario de datos. • CASE Dictionery, Designer, and Generator. Oracle Inc. Familia de herramientas integradas

para todo el ciclo de vida de sistemas, construídas en un repositorio central multiusuario en linea. Corre en equipos IBM: en ambientes DOS, OS/2, VM, MVS y RS 6000. También existe para equipos SUN, HP DEC VSM y otros.

• CASE*Designer, Dictionary, Generator. Oracle Systems Corp. Conjunto de herramientas CASE para uso junto con ORACLE.

• CASE/4/0. Computer Systems for Business lnternational Eastern Europe Ltd. (CSBI EE). Reingenieria de procesos de negocios, análisis de sistemas, diseño e implantación estructurados.

• CRADLE. Structured Software Systems Limited. Herramienta para aplicar en el ciclo completo de vida de los sistemas.

• Daisys 1.1 Cubed Daisys es un ambiente de desarrollo de aplicaciones que cubre todo el ciclo de vida de sistemas. Permite que el desarrollador introduzca los requerimientos en lenguaje común de negocios, desde el cual se genera un modelo lógico, un diseño fisico, una completa simulación y el 1000/o del código fuente para compilación. Corre bajo Wmdows.

• Deft 4.1. SQL Solutions Inc. Deft es una solución CASE para los desarrolladores que emplean manejadores de bases de datos relacionales. Las herramientas preprocesadoras corren en Macintosh, las finales corren en VMS de IBM y UNIX de equipos SUN.

• DISCOVER. Software Emancipation Technology, lnc. Desarrollo de sistemas de información.

• DOC EXPRESS. ATA Inc. Automatización de documentación y publicación. • DOC/SW. Software Emancipation Technology, loe. Parte de DISCOVER, documentación

de código y de objetos. • EasyCASE plus. Evergreen. Herramientas CASE. • EasyCASE Professional 3.0 Evergreen CASE Tools. EasyCASE Professional es una

herramienta de bajo costo, que proporciona comunicación visual y facil acceso a todas las funciones

Page 123: Metodología para la asimilación de ingeniería de software ...

131 esenciales de una herramienta CASE, incluyendo balanceo de niveles, verificación de diagramas y revisión de reglas.

• EitTelCase. Eiff el. Ingeniería de Software interactiva. • Envision 2.1. Future Tech Systems lnc. Envision/CEP es un sistema para estimación de costos

de producción de software. Provee estimados de esfuerzo y tiempo necesario para tenninar proyectos basándose en lineas de código y otros parámetros. Con la infonnación resultante, los gerentes de desarrollo de sistemas pueden tener bases para estimar el proceso. Se proporciona una interfase hacia el producto MS/Project.

• ER-Designer: (ERD). Chen & Associates. Desarrollo de diagramas de entidad relación. • ERwin/ERX 1.0. 1...-0gic Works ERwin es una herramienta CASE que incluye un editor de

entidades y atributos, generación de esquemas para bases de datos a partir de diagramas entidad­relación, y reportes de entidades, atributos y relaciones. También genera diagramas a partir de esquemas importados de SQL. Corre en Windows, OS/2 y Macintosh.

• Excelerator Il. INTERSOLV. La serie Excelerator provee soporte para las fases de planeación, análisis y diseño dentro del ciclo de vida de un sistema. Análisis y diseño de sistemas, diagramas y definición de programas. CASE interactivo. Análisis y diseño de sistemas, diagramas y generación de código, repositorio de datos.

• FACTa 1.0. Information Builders. Se utiliza para diseño de aplicaciones, diseño de bases de datos y generación de esquemas para Focus. Corre en OS/2 PM, se planea que funcione en UNIX.

• Foundation. Anderson Consulting. Herramienta CASE que se aplica a todo el ciclo de vida de un sistema, planeación, diseño, implantación y mantenimiento. Corre en computadoras PC bajo DOS y OS/2; en IBM bajo MVS/XA; en DEC VAX con VMS 5.2; y en BULL con ICOS 7 y ICOS 8.

• Gase RT 1.1. Advanced System Technology lnc. Una herramienta CASE cuantitativa que evalúa el desempeño y confiabilidad del diseño de un sistema computacional (hardware, software y datos). Corre en Macintosh incluyendo A/UX.

• GLG Toolkit Generic 1...-0gic Inc. Animación y simulación de sistemas de misión critica, usando prototipos en C++ y Java.

• HeragrapH: EVB Software Engineering, Inc. Gráficas Ada 2D/3D, conjunto de herramientas para interfase gráfica (Unix/X, Windows y DOS).

• IDEF/Leverage 2.2. Appleton Inc. Herramienta de análisis, normaliz.ación, integración y diseño de modelos de datos. Se utiliza en sistemas IBM-MVS-TSO/ISPF, y V AX-VMS.

• IE: Expert 5.0. lnformation Engineering Inc. Herramienta CASE para computadoras personales que utiliza la metodología de lngenieria de Información introducida por Clive Finkelstein en ambiente Windows 3 .O.

• IEF 4.2. Texas Instruments. IEF es una herramienta de desarrollo y mantenimiento que abarca todo el ciclo de vida de sistemas. Se puede utilizar en equipos IBM con MVS CICS, IBM/DC, 150 (DB2);

• Imagix 4D. Imagix Corporation. lngenieria reversa y documentación para lenguaje C y C++. • Inspector 4.5. Language Technology. Inspector es una herramienta de evaluación de calidad del

análisis de sistemas. Corre en MVS, MVS/XA, MVS/ESA, VM/CMS. • InterCASE Reverse Engineering Workbench 1.3. Interport Software Corp. Proporciona

una solución de ingenieria reversa para aplicaciones en COBOL. La infonnación de la aplicación se mueve a un ambiente CASE para análisis y/o modificación, luego se reensambla el código para su compilación. Corre bajo OS/2 o DOS.

Page 124: Metodología para la asimilación de ingeniería de software ...

132

• LBMS Systems Engineer 2.3. LBMS. Systems Engineer es una herramienta CASE multiusuario para todo el proceso de desarrollo de aplicaciones. Corre en Wmdows 3.0 o OS/2 PM.

• WCANA. Rapid Prototyping Laboratory. Herramienta CASE para generación de prototipos orientados a objetos.

• LPS 1.41. Makovsky & Company Inc. LPS es un sistema de productividad para todo el ciclo de vida del sistema. Corre en DOS y OS/2.

• MAC A&D. Excel Software. Manejo de varias metodologías, para computadoras Macintosh. • MacAnalyst MacDesigner. Apple Computer Inc. Herramientas CASE de Macintosh para

análisis estructurado, análisis de tiempo real, análisis orientado a objetos, modelación de datos, requerimientos de bases de datos y diseño estructurado. Corre en Macintosh System 6.0 y 7.0, Macintosh A/LTX 2.0.

• Maestro 11 1.1. Softlab Inc. Maestro II es un ambiente abierto de desarrollo construído en una base de datos que maneja objetosis e incorpora funciones para todo el ciclo de vida de sistemas. Corre bajo UNIX en equipos DEC, IBM, y máquinas HP RISC.

• MAGEC. MAGEC Software. Herramientas para todo el ciclo de desarrollo, creación de código en Cobol.

• MEGA. MEGA Intemational. Juego de herramientas CASE para todo el ciclo de vida de un sistema.

• Metavision 2.0 Applied Axiomatics Inc. Metavision genera modelos del negocio, realiza análisis de sistemas, conecta los requerimientos directamente a los procedimientos de la empresa, y genera las aplicaciones derivadas de los modelos.

• Metricate. Software Productivity Centre. Métricas de software. • MicroStep 1.5. Syscorp Intemational. MicroStep es una herramienta de desarrollos rápidos de

aplicaciones que pennite a los usuarios crear aplicaciones para redes locales o para computadoras personales a partir de especificaciones gráficas. Corre en DOS.

• Object IE. IPSYS Software Ple. Aplicaciones cliente/servidor, Ingeniería de Información. • Object prototype. MEGA Intemational. Generación de objetos mediante prototipos. • Object works \ C++. Pare Place Systems. CASE orientado a objetos con interfase para lenguaje

C++. • ObjectiF. MicroTOOL GmbH. Análisis, diseño, implantación, métodos orientados a

objetos. • ObjectMaker 1.8. Mark V Systems ObjectMaker es una herramienta CASE orientada a objetos,

con generación de código, ingeniería reversa para lenguajes de programación como C++, C, y Ada. Corre bajo X-Wmdows para DEC,IBM, HP/APOLLO, SUN, y plataformas MIPS, además Microsoft Wmdows, OS/2 PM, y Macintosh.

• OEW C++. Innovative Software. Diagramas de relaciones, explorador de código y documentación.

• ORCHIS. TNL Herramientas para análisis funcional usando la técnica SADT. • PAC DESIGN. CGI Systems Inc. Análisis y diseño mediante el modelamiento de negocios,

metodología de Y ourdon. • PacBase, Pacton 8.0. CGI Systems Inc. Repositorio para todo el ciclo de vida de un sistema, sus

herramientas ICASE funcionan en macrocomputadoras y/o redes locales. Corre para IBM bajo OS/2, MVS, VSE; en equipos BULL bajo GCOS8, 7; en HP9000 con HP-UX; y en UNISYS bajo os 1100.

Page 125: Metodología para la asimilación de ingeniería de software ...

133

• P ARADIGM PLUS: Análisis y diseño orientado a objetos en tiempo real. • Personal CASE 1.1 3. Chicago Computer Works. Personal CASE es una herramienta pre­

procesadora. Corre en MS DOS y en MS Wmdows 3.0. • PERTS. Tri-Pacific Software. Ambiente para la elaboración de sistemas en tiempo real mediante

prototipos. • Pinpoint 4.5 Language Technology Pinpoint es una herramienta de análisis de programas para

IBM bajo ambiente MVS/XA, MVS, MVS/ESA y VM/CMS. • PowerTools. IconiSoftware Corp. PowerTools son un conjunto de herramientas CASE para todo

el ciclo de vida de un sistema. Es compatible con redes, puede usarse para análisis estructurado o para el orientado a objetos. Corre en IBM bajo MVS CICS, IBMIDC, ISO(DB2); en DEC bajo VMS (Rdb o Oracle); en Fujitsu con UNIX (Oracle); y en TI 1500 en UNIX Oracle).

• Principia/RAD: BAeSEMA Limited. Creación de prototipos mediante el lenguaje Visual Basic. • Procedure Design. MEG Intemational. Editor de diagramas de flujo, generador de

documentación. • Prodoc. Software Productivity Centre. Documentación de software. • PROMOD-PLUS. Bergson Software Tools B.V. Herramientas CASE para análisis y diseño

estructurado. • Q/ Artison 1.0 and Q/ Auditor. Eden Systems Corp. Q/ Artisan reescribe código en lenguaje

COBOL con el conocimiento y destreza de un programador experto. Q/ Auditor mide y preserva los programas en COBOL o PLJI basándose en los objetivos del negocio y los estándares asociados. Corre en IBM MVS, PC-DOS con Memoria Extendida, OS/2 y Tandem.

• QASE. AST Engineering Services, Inc. Ambiente de desarrollo de sistemas de información. • Rational ApeL Rational Software Corporation. Ambiente integrado interactivo de

Ingeniería de Software. • Recoder 4.5. Language Technology Una herramienta para estructuración de lenguaje COBOL

que corre en ambientes IBM MVS, MVS/XA, MVS/ESA, VM/CMS. • Recycle. Software Reuse Company Ltd (SRC). Reingenieria COBOL. • RE!f oolset Emst & Young. Reingenieria de software, análisis de Redesarrollo. • RIDL 4.0. IntelliBase lnc. RIDL 4.0 es una herramienta generadora de bases de datos. Corre en

SUN 4, SUN OS, Apollo Domain. • SES/Workbench 2.1. Scientific & Engineering Software. SES es un ambiente de modelación y

simulación para verificar la funcionalidad y desempeño del sistema antes de su codificación. Corre en UNIX de equipos Sun, HP/ Apollo, e IBM RS6000.

• SES/workbench. SES, Inc. Animación y simulación de sistemas de núsión critica. • Smartcase 2.0. Cadware. Smartcase es una herramienta de diagramación y documentación. Corre

en PC bajo DOS. • SmartStar 6.0 Smartstar El lenguaje de cuarta generación SmartStar es un ambiente de desarrollo

que interactúa con la mayoría de las herramientas CASE. • SoftTest 3.1.Beeder & Associates. Una herramienta para computadora personal que ayuda a

validar requerimientos de sistemas y automatiza procesos basándose en el diseño de prueba y la administración de la librería de pruebas. Corre en PC-DOS.

• SQL Link-Plus 1.5. ECS Associates Inc. SQL Link-Plus genera diseños de bases de datos en tercera forma normal basándose en la salida de la herramienta CASE llamada Teamwork. Corre en SUN 3 & 4, IBM RS 6000, HP, y DEC.

Page 126: Metodología para la asimilación de ingeniería de software ...

134

• SQLBench Workbench. SQLBench International. Simulación de manejadores de base de datos cliente/servidor, pruebas de aplicaciones.

• SSADM4+sf. VSF NA Inc. SSADM V4+, generación de código SQL. • StP/Booch. Interactive Development Environments. Análisis y diseño orientado a objetos. • StP/BPR. lnteractive Development Environments. Reingeniería de procesos de negocios. • StP/ClassCapture. Interactive Development Environments. Ingeniería reversa. • StP/IM. Interactive Development Environments. Modelamiento de información. • StP/T. Interactive Development Environments. Generador de casos de prueba. • System Architect. Popkin Software & Systems Architect es una herramienta CASE para

computadoras personales, corre bajo Microsoft Windows 3.0 o OS/2. Provee un extenso conjunto de metodologías de análisis y diseño estructurados.

• System Developer 11 2.0. Cadware. System Developer es una herramienta completa de análisis y diseño basada en un repositorio adaptable a computadoras personales. Corre en DOS 3.X

• Teamwork 4.0. Cadre Technologies Inc. Una familia de herramientas integradas para desarrollo de aplicaciones en bases de datos, también abarca desarrollo de sistemas desde la conceptualiz.ación hasta la implantación. Genera además código y esquemas de bases de datos. Corre en AIX UNW, VMS, y OS/2, en IBM bajo RS 6000, en HP, HP/Apollo, Sun, y DECStation.

• TESTDESIGNER. Eastern Systems Inc. Conjunto de herramientas para hacer pruebas en sistemas.

• TESTPLAN. Eastern Systems Inc. Administración de las pruebas del sistema como un proyecto.

• Texel-sf. VSF NA Inc. Análisis y diseño orientado a objetos, generación de código C++. • Visible Analyst Workbench 4.1. Visible Systems Corp. Workbench es una herramienta CASE

para computadoras personales que corre en modo multiusuario bajo el Novell Netware o monousuario bajo DOS.

• Visual Testing Toolset. McCabe & Associates. Cobertura de las pruebas al código. • Westmount 1-CASE. Westmount Technology B.V. Ciclo de desarrollo completo. • XTie-RT. Teledyne Brown Engineering. Análisis de requerimientos, rastreo de

requerimientos.

Page 127: Metodología para la asimilación de ingeniería de software ...

BIBLIOGRAFIA

[ 1] ALA Vl, M. An Assesment o/ the prototyping approach to Information Systems Development. Communications of ACM. 1984

[2] BOEHM, BARRY W. A spiral modelfor software development and enhancement. IEEE Computer. May 1988.

[3] BOEHM, BARRY W. Improving software productivity. IEEE Computer. September 1987

[4] BOEHM, BARRY W. Software Engineering economics. Prentice Hall Inc. 1981

[5] DONOV AN, J.J. Beyond Chie/ Information Officer to Network Manager. Harvard Business Review. Sep. 1988

[6] EASTWOOD, ALISON. Developers confused over CASE. Computing Canada December 20, 1990

[7] FABRICKI, THOMAS. Ingeniería Económica. Prentice Hall. 1980

[8] F AIRLA Y, RICHARD. Ingeniería de Software. Me Graw Hill. 1988

[9] FREEDMAN, ALAN. Diccionario de Computación. Me Graw Hill. 1993

[10] FREEDMAN, ALAN. Electronic Computer Glossary. Computer Select. 1991

[11] HAMMER, M. Y CHAMPY, C. Reingeniería. Ed. Norma. 1994

[12] HUMPHREY, W. Managing the software process. Addisson-Wesley. 1989

[ 13] INEGI. La Situación de la Informática en México. INEGI. 1993

[14] JALOTE, PANKAJ. An IntegratedApproach to Software Engineering. Springer-Verlag. 1991

[15] KNOWLEDGEWARE. ARTHUR YOUNG INTERNATIONAL, MANCERA HNOS. Y CÍA Seminario de Ingeniería de Información ITESM. 1988

[16] LIENTZ, B. ANO SW ANSON, E. Software Maintenance Management. Addisson­Wesley. 1980

[17] MARTIN, CHARLES. User Centered Analysis Requirements. Prentice Hall. 1987

Page 128: Metodología para la asimilación de ingeniería de software ...

[18] NEWTON, HARRY. Newton's Telecom Dictionary. Computer Seleet. 1991

[ 19] PFLEEGER, ROGER. Software Engineering (A programming approach). Maemillan Publishing Co. 1991

137

[20] POOLE, BERNARD JOHN. The future is now: Refleetions ofthe Software Engineering lndustry. Information Executive. Winter 1991

[21] PRESSMAN, ROGER. Software Engineering (A practitioners approach). Me Graw Hill. 1987

[22] ROSS, P. T. Software Engineering: Process, principies and goals. IEEE Computer. May 1975

[23] SANDERS, DONALD H. Informática Presente y Futuro. Me Graw Hill. 1983

[24] SULLIV AN, TRAINOR. Knoledgeware best front-end rivals.Computer World April 9, 1990