Metodología para la asimilación de ingeniería de software en México
Texto completo
(2) 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.
(3) INDICE. INTRODUCCION. 7. CAPITULO l. INGENIERIADE SOFTWARE l ¿ QUE ES INGENIERIADE SOFTWARE? 1.1.1 DEFINICIÓN DE SOFTWARE 1.1.2 DEFINICIÓN DE INGENIBRÍA DE SOFTWARE 1.1.3 SOFTW~~ DE CALIDAD 1.2 APLICACIONES DE LA INGENIBRÍA DE SOFTWARE 1.3 TECNICAS DE INGENIERIA DE SOFTWARE 1.3.1 TÉCNICAS DE LA FASE DE PLANEACIÓN 1.3 .2 TÉCNICAS DE LA FASE DE ANÁLISIS 1.3.3 TÉCNICAS DE LA FASE DE DISEÑO 1.3.4 TÉCNICAS DE LA FASE DE PROGRAMACIÓN 1.3.5 TÉCNICAS DE LA FASE DE PRUEBAS 1.3.6 TÉCNICAS DE LA FASE DE MANTENIMIENTO 1.4 HERRAMIENTAS DE INGENIBRIA DE SOFTWARE 1.4.1 HERRAMIENTAS PARA AD:MINISTRACIÓN DE PROYECTOS 1.4.2 HERRAMIENTAS PARA ANÁLISIS DE SISTEMAS 1.4.3 HERRAMIENTAS CASE 1.4.4 HERRAMIENTAS PARA PROGRAMACIÓN, PRUEBAS 1.4.5 HERRAMIENTAS PARA CONSTRUCCIÓN DE PROTOTIPOS. 13 15 15 17 18 21 22 23 24 24 25 26 27 27 27 28 29 29 30. CAPITULO 2. LA INGENIERIA DE SOFTWARE EN MÉXICO 2.1 ANTECEDENTES DE APLICACION EN MÉXICO 2.1.1 ANTECEDENTES DE LA INGENIBRÍA DE SOFTWARE 2.1.2 :MERCADO NACIONAL DE BIENES Y SERV. INFORMÁTICOS 2.1.3 :MERCADO DE PROGRAMACIÓN (SOFTWARE) 2.1.4 DEMANDA DE BIENES Y SERVICIOS 2.1.5 FORMACIÓN DE RECURSOS HUMANOS 2.2 CARACTERISTICAS DE LAS EMPRESAS QUE USAN INGENIBRIA DE SOFTWARE 2.3 TECNICAS Y HERRAMIENTAS MAS UTILIZADAS 2.4 PROBLEMATICADE ASIMILACION. 33 34 34 36 37 39 40. 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.
(4) 3.1.2 NIVEL DE PREPARACIÓN Y EXPERIENCIA DEL PERSONAL 3.1.3 TÉCNICAS YHERRAMIENfAS UTILIZADAS ACTUALMENTE 3 .1.4 ORGANIZACIÓN DEL ÁREA DE SISTEMAS 3.2 PLANEACION DEL PROYECTO DE ASIMILACION 3.2.1 DEFINICIÓN DEL OBJETIVO DEL PROYECTO 3.2.2 ACTIVIDADES Y TIEMPO 3.2.3 EQUIPO DE TRABAJO 3.2.4 COSTO DEL PROYECTO 3.2.5 HARDWARE A UTILIZAR 3.2.6 METODOLOGÍA SELECCIONADA 3.2.7 SELECCIÓN DE HERRAMIENTAS Y TÉCNICAS 3.2.8 APROBACIÓN DEL PROYECTO DE ASIMILACIÓN 3.3 DESARROLLO DEL PROYECTO 3.3.1 CAPACITACIÓN DEL PERSONAL 3.3.2 DESARROLLO DE UNA PRUEBA PILOTO 3.3.3 EJEMPLO DE UNA METODOLOGÍA PARA PRUEBA PILOTO 3.3.3.1 Requerimientos del sistema 3.3.3.2 Diseño. 3.3 .3 .3 Construcción 3.3 .3 .4 Aceptación 3.3.3.5 Soporte 3.3.4 REGISTRO DE ESTADÍSTICAS DEL PROYECTO 3.4 EVALUACION DE RESULTADOS 3.4.1 PROCESAMIENTO DE DATOS Y ESTADÍSTICAS 3.4.2 COSTO DEL PRODUCTO 3.4.3 CALIDAD DEL PRODUCTO OBTENIDO 3.4.4 OBJETIVOS INICIALES 3.4.5 PRESENTACIÓN DE RESULTADOS DEL PROYECTO 3.5 IMPLANTACIÓN DE INGENIERÍA DE SOFTWARE 3.5.1 ESTRATEGIA DE IMPLANTACIÓN 3.5.2 CAPACITACIÓN DE TODO EL PERSONAL 3.5.3 COSTO DE LA IMPLANTACIÓN 3.6 SEGUIMIENTO 3.6.1 CONSIDERACIONES TÉCNICAS 3.6.2 CONSIDERACIONES ECONÓMICAS 3.6.3 CONSIDERACIONES DE ORGANIZACIÓN 3.7 CONCLUSION CAPITULO 4. FUTURO DE LA INGENIERIA DE SOFTWARE EN MÉXICO 4.1 CASE (COMPUTER AIDED SOFTWARE ENGINEERING) 4.1.1 DEFINICIÓN DE CASE 4.1.2 HISTORIA DE CASE 4.1.3 OBJETIVOS DE CASE 4.1.4 BENEFICIOS DE CASE. 56 57 59 62 63 64 64 65 66 67 68 70 71 71 72 73 75 78 79 81 82 83 84 84 85 86 86 87 87 88 89 89 90 90 91 91 92 95 97 98 98 99 99.
(5) 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 4.3.1 USODEREINGENIERÍAPARARECONSTRUIRSOFTWARE 4.3.2 SERVICIOS DE REINGENIERÍA 4.4 NUEVAS TÉCNICAS DE INGENIERIA DE SOFTWARE 4.5 EL FUTURO DE LA INTEGRACION. 100 100 101 102 102 103 104 105 107 107. CONCLUSIONES Y RECOMENDACIONES. 11 O. ANEXO A. GLOSARIO DE TÉRMINOS. 117. ANEXO B. HERRAMIENTAS CASE. 129. BIBLIOGRAFIA. 136.
(6) 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..
(7) 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..
(8) 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. Fonnar un todo con las aplicaciones administrativas, dará al directivo los parámetros necesarios y oportunos para la toma de decisiones..
(9) 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..
(10) 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 (Fourth 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..
(11) 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..
(12) 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..
(13) 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..
(14) 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: • SOF1WARE 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..
(15) 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].
(16) 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.
(17) 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..
(18) 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--. -. .,..... ~!,:·,¡¡ "'-·. ¡... ..... ,. __..
(19) 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..
(20) 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.
(21) 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].
(22) 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 (Yourdon, 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.
(23) 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,.
(24) 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].
(25) 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..
(26) 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 ANALYSIS&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. • PARADIGM 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..
(27) 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: • • • • • • • • • • • • •. ANALYST/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. EXCELERATOR 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++. PACBASE: 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)..
(28) 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..
(29) 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..
(30) 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..
Figure
Documento similar
Debido a que este proyecto pertenece al polo de Bioinformática y es un estándar o paradigma del polo el desarrollo de software libre utilizando el sistema operativo Linux, además
evolucionar en iteraciones sucesivas hasta convertirse en el sistema final y se deben analizar todos los riesgos y factores que pueden generar riesgo. Además se
La herramienta CASE (ingeniería de software asistida por el ordenador) a utilizar para el modelado de la propuesta de sistema, es el Visual Paradigm pues es una herramienta
Este trabajo ha tratado de demostrar la importancia que tienen las pruebas de unidad, carga, volumen, regresión y estrés de manera automatizada en las
En este capítulo se aplica el Procedimiento para validar requisitos de software al módulo Generador de reportes del proyecto MENPET y se analizaron los
Para recibir todos los números de referencia en un solo correo electrónico, es necesario que las solicitudes estén cumplimentadas y sean todos los datos válidos, incluido el
Clases encargadas de realizar todos los procesos de búsqueda, selección, grillado y segmentación de la imagen a procesar, así como, análisis del histograma correspondiente; cálculo
Realizar un estudio del estado del arte sobre la ingeniería de requisitos, el diseño, así como las metodologías de desarrollo de software, herramientas,