• Nenhum resultado encontrado

Software Testing as Science

N/A
N/A
Protected

Academic year: 2017

Share "Software Testing as Science"

Copied!
8
0
0

Texto

(1)

25

Introduction of the Formal Methods in Software Engineering Training

Introducción de los Métodos Formales en la Formación en Ingeniería de

Software

Jorge Toledo B.

Instituto Europeo de Investigación en Ingeniería de Software. Toledobj(AT)erise.de

INFORMACIÓN DEL ARTÍCULO

Tipo de artículo: Reflexión

Historia del artículo Recibido: 22-02-2013 Correcciones: 28-05-2013 Aceptado: 01-06-2013

Categories and Subject Descriptors K.3.2 [Computers and Education]: Computer and Information Science Education – Computer science education.

General Terms

Computer Science, Software Engineering, Computational Mathematics, Formal Methods.

Keywords

Formal Methods, training, Software Engineering, teaching methods.

Palabras clave

Métodos formales, formación, Ingeniería de Software, métodos de enseñanza.

ABSTRACT

Formal methods were developed to provide systematic and rigorous techniques for software development, and as initiative will be introduced in training in Software Engineering (SE). This article discusses the importance of including these scientific principles and describes several specific techniques in order to improve the processes of the IS. It also provides an analysis of the principles that should be taken into account in a curriculum to systematically introduce in university education and business. Several methods have been tried in recent years to achieve this goal in undergraduate and graduate universities programs, as well as IT professionals. Experience shows that participants gain confidence in formal methods only when they learn their clear benefits in the context of software engineering.

RESUMEN

Los métodos formales se desarrollaron para proporcionar técnicas sistemáticas y rigurosas para el desarrollo de software, y como iniciativa se deben introducir en la formación en Ingeniería de Software (IS). En este artículo se discute la importancia de incluir estos principios científicos y se describen varias técnicas específicas para lograr mejorar los procesos de la IS. También se hace un análisis a los principios que se deben tener en cuenta en un plan de estudios para introducirlos sistemáticamente en la formación universitaria y empresarial. Varias metodologías se han probado en los últimos años para lograr este objetivo en programas de pregrado y de posgrado en diversas universidades, así como para los profesionales de TI. La experiencia muestra que los participantes ganan confianza en los métodos formales sólo cuando se enteran de sus claros beneficios en el contexto de la Ingeniería de Software.

© 2013 IAI. All rights reserved

1. INTRODUCCIÓN

A pesar de que hace más de cuarenta años que se vienen realizando esfuerzos para desarrollar teorías, lenguajes, métodos y herramientas de soporte, la Ingeniería de Software práctica todavía es como un desierto, debido a la falta de instrucciones y modos eficaces de encontrar la manera de salir de la crisis del software. Los métodos formales se desarrollaron para hacer frente a este problema mediante la aplicación de técnicas matemáticas, incluidas la especificación formal, el refinamiento y la Verificación. En teoría, ya se sabe cómo utilizar las notaciones formales para escribir las especificaciones, el refinamiento de cálculo para transformar gradualmente una especificación en una implementación correcta y la lógica de Hoare y Dijkstra para probar la correctitud de los programas, con el mismo rigor que se aplica en los teoremas matemáticos. Sin embargo, ninguna de estas técnicas es fácil de utilizar por los profesionales para hacer frente a los proyectos de software reales. El

problema es la complejidad y la incapacidad de los métodos formales en el tratamiento de sistemas a gran escala y los frecuentes cambios en requisitos y diseños.

Estos desafíos para la aplicación directa de los métodos formales no quieren decir que éstos sean inútiles. De hecho, hoy son más necesarios que nunca porque el software se integra cada vez más en los sistemas que requiere y utiliza la sociedad, lo que pasa es que su papel es diferente al de otras técnicas relacionadas. El rol de los métodos formales es la formación, y su poder se puede transferirse a los proyectos de Ingeniería de Software a través de los desarrolladores que los aprenden y dominan. La manera de utilizarlos es mediante la práctica en la ingeniería formal [1]. Por ejemplo, el Structured Object-Oriented Formal Language (SOFL), un método de ingeniería formal, proporciona un enfoque de tres pasos para construir especificaciones formales para ayudar al análisis de requisitos, al diseño del sistema, a la RACCIS, 3(1), 25-32, 2013

Revista Antioqueña de las

Ciencias Computacionales y la Ingeniería de Software

ISSN: 2248-7441

(2)

26 especificación basada en la inspección y a las pruebas

para la detección de errores [2]. El desarrollo de proyectos software es una actividad humana, que deben ser completados en un tiempo específico y dentro del presupuesto especificado, y que a menudo se enfrentan a la inestabilidad de los equipos de desarrollo. En tal situación, aplicar los métodos formales completamente rara vez es práctico, pero mejorar la calidad del software se puede lograr equipando a los desarrolladores de una forma disciplinada y rigurosa de pensar mediante procesos de capacitación en métodos formales.

Para alentar a más estudiantes, con o sin experiencia en desarrollo de software, a formarse en métodos formales, primero es necesario motivarlos a través de demostraciones claras de los beneficios que presentan los métodos formales para mejorar la práctica actual de la Ingeniería de Software. Si bien esto es un gran reto debido a la falta de evidencias cuantitativas fiables en la industria, muchos estudios empíricos, algunos de los cuales se han realizado en entornos industriales [3-5], se podrían utilizar para este propósito. La clave para que los estudiantes disfruten aprendiendo métodos formales son excelentes estilos y técnicas de formación, contenidos curriculares razonables y la colaboración permanente entre la academia y la industria. En este trabajo se describe varias técnicas para formar en métodos formales, a través de un eficaz plan de estudios en la academia y de un programa exitoso para la industria. El objetivo fundamental es introducir la formación en métodos formales en el contexto de la Ingeniería de Software, con la idea de que los ingenieros lleven sus principios a la industria. Por supuesto, como señala Parnas [6], los métodos formales no se deben limitar a la Ingeniería de Software, deben estar relacionados e integrados en las matemáticas generales de ingeniería. Dado que la cuestión de la aplicación general de los métodos formales está más allá del alcance de este artículo, el debate se centra en la cuestión de la formación para la Ingeniería de Software.

El resto del artículo se organiza de la siguiente manera: en la sección 2 se discuten las técnicas de formación, en la 3 se describe la disposición actual de un plan de estudios relacionado, en la 4 se presenta un exitoso programa para la formación en métodos formales para la industria, en la sección 5 se discute la importancia de la formación permanente, y en la 6 se presentan las conclusiones.

2. TÉCNICAS DE FORMACIÓN

En esta sección se presentan algunas técnicas específicas para la formación en métodos formales [1, 7, 8], las cuales han sido probadas durante algún tiempo en las universidades y las empresas.

2.1 Iniciar con ejemplos

Aprender métodos formales es similar a aprender otras teorías o técnicas, por lo que se recomienda iniciar con ejemplos sencillos, que deben provenir de la vida diaria y deben ser capaces de vincular el problema con una potencial solución con métodos formales. Esta técnica motiva a los estudiantes y desarrolla su interés en estos

estos métodos. Por ejemplo, para explicar la ambigüedad de un problema especificado informalmente al mismo tiempo que demostrar que se puede resolver con formalización, se recomienda utilizar una operación de búsqueda de un número entero en una lista de números. Después de explicar la imprecisión de las declaraciones informales de requisitos, se presenta una especificación formal, que es a la vez precisa y concisa. Este ejemplo les ayuda a los estudiantes a comprender el poder potencial de la formalización.

2.2 Introducir gradualmente los conceptos importantes

Los conceptos importantes son la clave para entender el espíritu de los métodos formales. Si se hacen los esfuerzos suficientes para impartirlos son eficaces para ayudarles a los estudiantes a comprender el principio esencial de los métodos formales. Por ejemplo, al introducir las especificaciones formales, el tema central son las pre y post condiciones, una forma efectiva para comprender el concepto es comparándolas con el algoritmo correspondiente y dejar que los estudiantes entiendan la diferencia real y la relación entre una especificación y un algoritmo. La comparación se puede hacer sobre la base de la computación científica simple. Por ejemplo, a menudo se utiliza la operación de la raíz cuadrada de un número entero. La condición previa de la operación es x ≥ 0 y la post condición de esta operación puede ser y² = x, donde x es la entrada y y es la salida. Sin embargo, el algoritmo correspondiente sería algo así como y = Math.sqrt (x). Este ejemplo da lugar a un problema en el que la salida y producida por el algoritmo no puede satisfacer las post condiciones de la operación debido a que el algoritmo obtiene sólo una aproximación a la raíz cuadrada real de algunos números enteros positivos. En este caso, es útil mostrarles a los estudiantes la importancia de darse cuenta de esta falta de coherencia entre la especificación y la implementación. Este también es un buen ejemplo para mostrar la necesidad de usar o construir teorías adecuadas en el dominio de aplicación.

2.3 Problemas enmarcados en lo básico

(3)

27 la formación básica en deportes. Para ser un buen jugador

de fútbol, por ejemplo, hay que ser rápido y tener un cuerpo fuerte. Para alcanzar estas cualidades, se debe practicar mucho tiempo y hacer un gran esfuerzo en la formación básica, porque si la olvida no se podrá desempeñar satisfactoriamente en los partidos.

2.4 Patrones de especificación para desarrollar habilidades lógicas y abstractivas

Para utilizar eficazmente un método formal se requiere que el desarrollador tenga buenas habilidades y capacidades en lógica y abstracción matemática, especialmente en el contexto del desarrollo de software. Por lo tanto, ayudarles a los estudiantes a desarrollar sus habilidades lógico-interpretativas y abstractivas se convierte en un tema importante en la formación en métodos formales. Teniendo en cuenta el hecho de que las operaciones básicas que se requieren en un sistema software por lo general incluyen buscar, clasificar, fusionar colecciones de objetos, adicionar, eliminar y actualizar elementos a partir de una colección existente, cálculos matemáticos, y sus posibles combinaciones, se debe hacer énfasis en formar en cómo expresar todas estas funciones con tipos de datos apropiados y sus operadores relacionados. Cada una de esas expresiones formará un patrón de especificación que permanecerá en la mente de los estudiantes y estará disponible para que la apliquen en el proceso del desarrollo de software real. Por ejemplo, ¿cuáles son los posibles patrones de especificación de una función que comprueba que una colección de enteros está vacía? Para responder a esta pregunta, primero se define una colección de números enteros como un conjunto y una secuencia en SOFL — VDM, Z u otro lenguaje formal— respectivamente. A continuación, se analizan los patrones de especificación más utilizados para cada una de las abstracciones de datos. Por supuesto, se puede tener el número de patrones que se desee para expresar el mismo significado, pero esto sería mucho más complejo y no mejora la legibilidad. Corresponde al profesor decidir si discutir en el aula un modelo más complejo o dejarlo como trabajo independiente para los estudiantes.

Después que los estudiantes comprenden y aplican los patrones de especificación básicos, se puede incrementar el nivel de formación explicando cómo aplicarlos en situaciones más complicadas. Por ejemplo, se puede tomar una operación para buscar un número entero en una colección de números. Para explicar cómo especificar una operación, se toma el mismo enfoque descrito para los patrones básicos definiendo en primer lugar la colección de enteros como un conjunto de enteros y una secuencia de números enteros, respectivamente, y a continuación se explica cómo especificar la operación mediante la combinación de los patrones básicos para cada una de las abstracciones de datos.

2.5 Prácticas a través de proyectos

Mientras que el entrenamiento básico es importante en la formación y el estudio de los métodos formales, no se puede olvidar brindarles a los estudiantes oportunidades para vincularlos a la Ingeniería de Software. Es decir, ellos

necesitan que se les forme en cómo los métodos formales les ayudará en la práctica del desarrollo de software, de lo contrario, tal vez con algunas excepciones, se corre el riesgo de perder la motivación por su aprendizaje o aplicación en la práctica. La manera más eficaz para esto es que los estudiantes trabajen en proyectos. Por ejemplo, después de la introducción de ejercicios masivos en fundamentos de VDM-SL, se les puede pedir que diseñen proyectos aplicativos, como la construcción de una especificación formal de un sistema de bibliotecas o de un ATM. A través de estos pequeños proyectos, ellos podrán sentir cómo construir las especificaciones formales y aspirar a que las escalen a proyectos de desarrollo de software reales. Por supuesto, esta práctica también puede dar a los estudiantes la oportunidad de encontrar la debilidad del lenguaje de especificación que estén utilizando. Por ejemplo, pueden detectar la falta de un mecanismo intuitivo en VDM para la estructuración de un sistema completo de manera estructurada. De hecho, muchas notaciones formales existentes se centran en sólo un aspecto del problema en la Ingeniería de Software e ignoran los demás, pero un proyecto de software real se tiene que hacer cargo de todos los aspectos posibles. Si un método o técnica ayuda a resolver sólo un problema a la vez que crea otros problemas en el contexto de la Ingeniería de Software, es poco probable que sea popular entre los profesionales y que lo apliquen en proyectos reales. En este sentido, es conveniente seleccionar uno que haya demostrado ser eficiente en estos aspectos, y que proporcione un proceso sistemático y riguroso para integrar las técnicas formales a las prácticas existentes de Ingeniería de Software, y que no cree más problemas.

2.6 Utilizar métodos de Ingeniería formal

(4)

28 formalmente, y que no son simplemente una mezcla de

notaciones formales con imágenes. Debido a que una introducción detallada a FEM está más allá del alcance de este trabajo, se puede consultar en [1].

De hecho, el mismo principio de los FEM también se puede aplicar eficazmente a la formación en métodos formales, porque como se mencionó antes es a través de proyectos software que se logra este objetivo. Por ejemplo, al explicar una expresión matemática, como Z = X U Y, se puede utilizar una representación gráfica como los diagramas de Venn para ilustrar la operación de unión, y al mismo tiempo usar un texto para explicar el significado de la operación. Cuando se introduce una operación en VDM, se puede dibujar un proceso para mostrar la entrada, la salida y las variables externas, pero los detalles de la función de la operación se definen mediante pre y post-condiciones. Con explicaciones informales en texto, el significado de la especificación de la operación puede ser comprendida fácilmente por los estudiantes.

2.7 Herramientas de soporte

Casi todos los profesionales han experimentado el uso de herramientas para aplicar lenguajes de programación, y los estudiantes han descubierto que les son útiles para escribir, ejecutar y probar los programas, y muchos profesores de métodos formales también las aplican en sus cursos. Sin embargo, la experiencia es que se centran en técnicas de especificación formal, y sugieren que el uso de herramientas para formar en métodos formales necesariamente no es efectivo; pero tal vez sea menos eficaz no usar herramienta alguna. Existen dos razones para ello: 1) el aprendizaje de los métodos formales requiere que los estudiantes aprendan la sintaxis y la semántica del lenguaje de especificación correspondiente mediante la escritura a mano, y la manera más efectiva para que los estudiantes sean capaces de escribir especificaciones formales adecuadas es utilizando el Inglés como lengua extranjera y fortaleciendo la formación en la sintaxis y la profundización de la comprensión de las técnicas de extracción, porque de esta manera los estudiantes no tendrían ninguna posibilidad de "copiar y pegar" sin pensar por sí mismos. 2) El propósito de escribir una especificación no es la de ejecutarla directamente en el computador, sino para que las personas la lean y la entiendan. Por lo tanto, escribir a mano con un buen estilo las especificaciones formales es mucho más útil, y la herramienta se utiliza para mejorar automáticamente su estilo y formato. En el caso de la programación, sin una herramienta, por ejemplo un compilador, no se puede ejecutar el programa. Pero en el caso de escribir una especificación, no hay necesidad de ejecutar, por lo que sin un soporte de la herramienta no se van a crear mayores inconvenientes. En cambio, para algunos estudiantes que no quieren estudiar métodos formales, la herramienta de soporte les va a crear oportunidades para copiar y pegar sin pensar primero.

Lo anterior no significa que el apoyo de una herramienta no sea necesario para utilizar los métodos formales en la práctica. Por el contrario, ese soporte es crucial para

mejorar de la productividad y reducir las posibilidades de errores en el desarrollo práctico. Por esta razón, es conveniente que los estudiantes utilicen una herramienta de apoyo cuando lleven a cabo un proyecto, luego de un aprendizaje sistemático de las técnicas de especificación formal. Pero aprender a utilizar debe ser una labor de trabajo independiente, es decir por fuera del aula con la asesoría del profesor; porque es necesario que él también haga parte activa de su proceso formativo y porque no es comprende cómo un profesor invierta el tiempo en el aula para enseñar herramientas. De esta manera también se logra un efecto en los estudiantes, quienes se sienten a gusto con la herramienta que seleccionaron, que saben manipular y que les ofrece una alta automatización, para la escritura y el análisis de sus especificaciones. Pero lo más importante es que han llegado a este punto luego de haber pasado por el momento difícil en el aprendizaje de utilizar los métodos formales a mano. Esto es similar a la situación en la que una persona se siente feliz cuando tiene la oportunidad de comer una deliciosa comida que ella misma ha preparado y después de un largo periodo de hambre.

2.8

Limitaciones

de tiempo

Los conceptos y expresiones matemáticas requieren por lo general un tiempo para que los estudiantes las digieran, por lo que la formación en ellas debe hacerse al ritmo de ellos y con muchos ejemplos y problemas aplicativos. Sin embargo, un curso es como un proyecto software: tiene limitaciones de tiempo. Es por esto que los profesores se enfrentan a un dilema: quieren cubrir contenidos que son de suma importancia para el estudio de los métodos formales, pero no tienen el tiempo suficiente para lograrlo. Para hacer frente a este problema, la experiencia sugiere que los cursos no deben ser demasiado ambiciosos, sino que se deben diseñar de forma focalizada. Por ejemplo, distribuir la formación en especificación formal, refinamiento y verificación formal en tres cursos diferentes; de esta forma el profesor se podría enfocar en cada uno de ellos en las partes fundamentales, y darles a los estudiantes el tiempo suficiente para que puedan aplicar las técnicas aprendidas. Después de terminar cada curso, pedirles estructurar y ejecutar un pequeño proyecto en el que requieran aplicar todo el conocimiento aprendido en el aula. De esta forma se les ofrece mayores oportunidades para aprender cómo aplicar los conceptos teóricos de manera efectiva en la práctica.

3. UN CURRÍCULO SISTEMÁTICO

(5)

29 introducir a los estudiantes de primer año en las

temáticas de los métodos formales, la matemática discreta, la lógica, la abstracción y la resolución de problemas, presentar las técnicas de especificación simples, en un lenguaje formal, a los de segundo año, las técnicas de especificación más complejas a los de tercer año, y un curso sistemático en métodos de ingeniería formales a los de cuarto año, y finalmente, llevar a los de quinto año a los laboratorios de Ingeniería de Software para aplicar las técnicas formales aprendidas en sus proyectos de grado. Todos estos cursos son electivos. A los estudiantes de posgrado se les ofrece un curso en depuración y Verificación y Validación formal, dependiendo de los cursos que tomaron en el pregrado, porque es posible que ingresen algunos que no eligieron los cursos ofrecidos durante sus estudios de pregrado.

1. El primer semestre del primer año se ofertan cursos de introducción a la lógica computacional, la resolución de problemas, la abstracción y la algoritmia, y para los cursos del segundo se va incrementado la complejidad, se tocan los temas de métodos formales, matemática discreta, matemática computacional y pruebas de programas, y sus aplicaciones respectivas a problemas simples a través de un lenguaje de programación, el cual deben aprender en el trabajo independiente.

2. En el segundo año, primer semestre, se comienza el trabajo en lenguajes de especificación formales, y en el segundo en pre-y post-condiciones. Los estudiantes resuelven problemas escritos en lenguaje natural, lo que les permite construir una percepción básica desde la programación y la computación, lo que facilitará la introducir de técnicas de especificación sencillas en el próximo semestre. En este proceso se aplica un enfoque paso a paso para comenzar con las especificaciones sencillas y poco a poco aumentar el grado de complicación. Después de una breve explicación, los estudiantes están obligados a comprender la mecánica de la especificación para luego ponerla en práctica en el lenguaje de programación, y finalmente aplicar casos de prueba adecuados.

3. En el tercer año, se introducen expresiones más complejas en el lenguaje de especificación, como let, if-then-else y case, y la compuestas y los conjuntos tipos para mejorar la capacidad expresiva de la especificación formal. Se aplica el mismo estilo de trabajo utilizado en el primer y segundo año, pero a un nivel más complejo. En este año se espera que los estudiantes hayan adquirido de cuenta propia un manejo y conocimiento adecuados del lenguaje de programación tradicional.

4. En el cuarto año se oferta un curso sistemático en métodos de ingeniería formales. Se espera que asistan muchos más estudiantes que a los cursos de los primeros años, porque parecen estar motivados por tomar cursos en nuevas tecnologías. Esto se debe a que tienen mayor conciencia de la importancia de

esta formación para su vida laboral, debido a que la industria en el mundo las exige como requisito.

5. En el quinto año, los estudiantes aplicarán los métodos y técnicas aprendidas al modelado, el diseño, el desarrollo y las pruebas de sus sistemas software. A través de estos proyectos, adquirirán más experiencia en el uso de la notación formal y la representación esquemática mediante diagramas de flujo de datos. Se organiza a los estudiantes en grupos para que puedan experimentar cómo les pueden ayudar las especificaciones formales en la comunicación, la cooperación y la documentación de su trabajo. A pesar de que los métodos formales presentan actualmente una penetración lenta en la industria, los egresados estarán preparados en las técnicas de especificación formal para cuando se les exija su aplicación en el análisis y diseño de sistemas.

Para los estudiantes de postgrado, en maestrías o doctorados, se proponen cursos como el que ofrece el profesor Morgan en su libro [8], para que puedan aprender cómo aplicar los métodos formales durante el proceso de desarrollo. Dado que la mayoría de estudiantes que toman estos cursos no han recibido formación en Ingeniería de Software, sino en áreas como diseño, Inteligencia Artificial, aplicaciones de red, ingeniería de sistemas o bases de datos, por lo general se enfrentan a un momento difícil. Debido a que hay pocas esperanzas de que hayan aplicado los conceptos matemáticos en la práctica, suelen olvidar sus leyes específicas, aunque recuerdan algunos conceptos fundamentales o al menos su idea, lo cual les ayudará a tomar decisiones sensatas en las prácticas de desarrollos de software.

4. FORMAR A LA INDUSTRIA

Muchas empresas fabrican productos como televisores, automóviles, trenes y sistemas de tránsito. Para aumentar sus funciones y reducir el costo en la mejora y el mantenimiento de los sistemas, implementan más y más funciones software. Debido a que una falla en el software de alguno de estos componentes embebidos es probable que genere la discapacidad de todo el sistema, causando molestias, frustraciones, e incluso peligro para las personas y posiblemente una gran pérdida económica para los fabricantes, muchas empresas empiezan a prestar más y más atención a los métodos formales. Pero existen muchas dificultades que se deben superar para lograr una adecuada introducción para su uso en la industria, como convencer a los ejecutivos y a los ingenieros en los distintos niveles de formar a los empleados en métodos formales, y de que apoyen las iniciativas técnicas para aplicarlos en la práctica. Es difícil imaginar la existencia de una solución uniforme para todos los problemas de todas las empresas, pero es posible encontrar diversos ejemplos en los cuales se ha tenido éxito [9-11]. Una forma de alcanzar estos objetivos podría ser como se describe a continuación.

(6)

30 adopción delos métodos formales creará un gran

potencial para mejorar la calidad de los sistemas y será de beneficio para la empresa; posteriormente se presenta un plan para capacitar a los ingenieros en todo lo relacionado con esta área. El plan consiste en seleccionar y capacitar a algunas personas desde los grupos relevantes, los cuales se convertirán en formadores de sus propios equipos de trabajo. Para mejorar la comprensión y poder alcanzar los objetivos trazados, el trabajo se debe llevar a cabo a través de una estrecha colaboración academia-industria. La primera tarea de este proyecto de colaboración es revisar y discutir el plan inicial de capacitación, y luego elaborar un plan eficaz de enseñanza en términos de horario, contenidos y estilos didácticos. Se programan seminarios y discusiones acerca de casos de éxito en otras industrias, para motivar a los participantes a que pueden lograr lo mismo en su empresa, y para motivar a los ingenieros y ayudarles a construir una comprensión exacta del potencial real de los métodos formales. El éxito de esta fase es fundamental para avanzar a la siguiente.

La principal actividad en la segunda fase es lograr el apoyo de los ejecutivos de la empresa para incorporar a los métodos formales en un programa de capacitación sistemática de la empresa. Todo el personal técnico puede solicitar libremente el curso, incluyendo a los novatos como a los más experimentados. De acuerdo con la población objetivo, se determina de forma flexible la duración de los cursos y las técnicas didácticas a utilizar. Esto es conveniente porque la mayoría de los empleados no tuvo contacto con los métodos formales en su formación anterior, y el objetivo es concientizarlos de sus ventajas y beneficios para ellos y la industria misma. Este proceso se puede apalancar mediante la conformación de institutos spin-off al interior de las facultades, los cuales se convertirán en formadores y asesores para las empresas y garantizarán de mejor forma que los métodos formales penetren la industria y se mejore a futuro el desarrollo de productos software.

5. FORMACIÓN CONTINUA

La experiencia en la aplicación y enseñanza de los métodos formales en la academia y en la industria ha demostrado que es necesaria y útil, pero eso no significa que sea muy popular entre los estudiantes. Las personas con cierta experiencia de trabajo suelen encontrar a los métodos formales y a las técnicas de especificación formal, particularmente fáciles de aprender y aplicar, pero esto puede no ser cierto para estudiantes sin experiencia laboral. Las razones más importantes son que generalmente no entienden profundamente la importancia del papel de los métodos formales en la garantía de calidad del software y que los contenidos a los que se ven expuestos son complejos. Dado que la formación en esta área es necesaria y útil, una posible solución a este problema es ofrecerlos como cursos obligatorios en lugar de asignaturas electivas. De esta manera todos los estudiantes se verán obligados a participar de la formación y a aprender métodos formales. Sin embargo, aunque esta posibilidad se convierta en realidad, no garantiza que esta área de

formación sea atractiva para ellos. Para ser atractivos, la formación en métodos formales debe lograr un buen equilibrio entre: simplicidad, visualización y precisión, y deben demostrar sus beneficios para garantizar la calidad del software y para reducir el costo de los proyectos. Además, la didáctica aplicada debe proporcionarles diversión a los estudiantes, como en la computación gráfica o la animación. Por desgracia, algunos métodos formales existentes cumplen con estos criterios, y es difícil imaginar que cualquier didáctica mejoraría significativamente la situación. Dado que el desarrollo de software necesita la aplicación de una forma matemática de pensar, no importa si los métodos formales son atractivos o no, el esfuerzo en su formación debe continuar en el mundo académico y se espera que en la industria también. Sólo procesos serios en los sistemas de formación pueden lograr que sea posible la aplicación de métodos formales en la Ingeniería de Software.

6. UN CASO DE APLICACIÓN

A continuación se describe la integración de técnicas de métodos formales en un curso de posgrado en Ingeniería de Software avanzada. Las características de esta experiencia son:

6.1 Antecedentes de los estudiantes

Dado que el programa de posgrado enfatiza en el reentrenamiento, los estudiantes pueden provenir de una amplia variedad de pregrados. La mayoría de las universidades tienen en sus malla curriculares algunos cursos de matemáticas, sin embargo los estudiantes o bien no han experimentado las matemáticas discretas o no las aplican adecuadamente en los proyectos que realizan en sus cursos. El curso avanzado de Ingeniería de Software requiere el dominio de unas habilidades básicas de programación y de dos cursos que cubren los temas de análisis y diseño de sistemas.

6.2 Descripción del curso

El objetivo de este curso es familiarizar al estudiante con el modelo de procesos de la Ingeniería de Software: análisis de requisitos, especificación, diseño, implementación, Verificación y Validación. Dadas las limitaciones de tiempo y la falta de conocimientos del estudiante de la lógica formal, las técnicas de los métodos formales sólo se incorporan en las etapas de requisitos y de especificación. Atención se tarda en volver a introducir tanto proposicional y cálculo de predicados. Se tuvo cuidado de reintroducir tanto el cálculo proposicional como el de predicados. El esquema del curso es el siguiente:

1. Modelo de Procesos de Ingeniería Software (1 semana)

2. Análisis de Requisitos (2 semanas)

3. Cálculo Proposicional y de Predicados (1 semana) 4. Métodos Formales de Especificación: Algebraica, VDM,

y Z (5 semanas)

5. Metodologías de Diseño de Software (3 semanas) 6. Validación y Verificación (2 semanas)

(7)

31 El texto de Somerville [12], fue seleccionado por su

cobertura de las metodologías formales de especificación, y se complementó con el texto de Spivey [13], porque se seleccionó a Z como el lenguaje de especificación para aplicar en el proyecto del curso.

6.3 Didáctica del curso

El método utilizado en el curso para la presentación de los métodos formales de especificación y su aplicación fue una mezcla de asesorías teóricas y de resolución de problemas. Las conferencias se utilizaron para establecer las bases de la lógica de primer orden y la estructura de las notaciones de especificaciones particulares. Para reforzar el material se presentaron ejemplos pequeños centrados en funciones independientes e individuales. Los estudiantes se dividieron en grupos de tres personas y se les instó a escribir las especificaciones de las versiones extendidas de los ejemplos pequeños. Un representante del grupo presenta la solución final, y analiza las discusiones que tuvieron lugar a raíz de las diversas soluciones que los demás miembros del grupo produjeron. Estas sesiones de discusión proporcionan una idea de lo que los estudiantes están aprendiendo el material y que están sustentando sus postulados. Se alentó a la estudiante a que buscaran todo tipo de ayuda adicional por parte pares, ya fuera al interior o por fuera de la universidad.

6.4 Proyecto de aula

Los estudiantes se dividieron en equipos y cada uno eligió un líder. Cada equipo se encargó de escribir la elicitación y especificación de los requisitos, el diseño arquitectónico, y las especificaciones formales de los componentes del sistema en Z del siguiente proyecto:

Una biblioteca requiere un sistema automatizado completamente integrado que se encargue de ordenar, catalogar, editar y almacenar sus libros. Se requiere que el catálogo sea accesible a los usuarios de la biblioteca, ya sea en el sitio o de forma remota; además, que puedan reservar libros que se encuentran actualmente en préstamo al marcarlos en el catálogo de la biblioteca.

De acuerdo con el plan de trabajo, los equipos deben presentar las distintas fases del proyecto, de modo que las aclaraciones y correcciones puedan ocurrir en su vida útil. En la primera fase, la elicitación de requisitos, el sistema se analiza a partir de dos contextos: 1) el funcional, para describir los servicios que esperan los usuario y 2) el no-funcional, que incorpora tanto las limitaciones con las que debe operar el sistema como las normas que debe respectar. Los estudiantes dividen el sistema en dos grupos de usuarios independientes relacionados con la funcionalidad: los estudiantes y el personal. Para cada grupo se identifican las tareas que llevan a cabo y se tratan de concretar los detalles implícitos, como los de colocar un libro en reserva y los recargos.

La segunda fase, la especificación de requisitos y el diseño de la arquitectura, contiene una descripción de las tareas que el software debe realizar, y en ella los estudiantes

escriben un prototipo funcional del sistema utilizando un lenguaje de programación. Los grupos se sentían incapaces de comprender el funcionamiento básico del sistema sin poder experimentar diferentes secuencias de interacción con la automatización. En un documento presentaron la especificación de requisitos descritos en términos de análisis estructurado. Este método incorpora el uso de diagramas de flujo y de control de flujo de datos que capturan los cuadros de diálogo de la funcionalidad. Luego de esta fase los grupos de funcionalidad se ampliaron de dos a cinco: usuarios, personal de circulación, administrador, departamento de contactos, y mantenimiento.

La tercera fase, la especificación formal de los componentes en Z, fue la más extensa. Los estudiantes no tardaron en darse cuenta de que los prototipos de esquema les permitían utilizar parámetros para especializar una tarea particular para un grupo de funcionalidad particular, ya que muchos grupos compartían tareas similares. El documento resultante contenía las asignaciones y los tipos de datos que se utilizaron los esquemas. La mayoría escribió esquemas precisos y necesarios en Z. El número de páginas no se incrementó con respecto al documento anterior, sin embargo, la mayoría de grupos prefirieron la notación Z en diagramas como punto de partida para el diseño del sistema. La cantidad de tiempo utilizado en el desarrollo de esta fase fue dos veces la de la segunda.

6.5 Evaluación de resultados por el profesor

La capacidad de los estudiantes y el deseo de superar el desafío fue impresionante. Fueron capaces de escribir especificaciones Z con poca o ninguna formación en matemáticas discretas, y al capturar los requisitos de un sistema software grande y complejo demostraron habilidades analíticas excepcionales. Con sólo seis semanas de asesoría, los grupos fueron capaces de capturar la funcionalidad del sistema en las especificaciones Z. Esta experiencia también ha demostrado su capacidad para incorporar fácilmente las especificaciones formales con los métodos de análisis/diseño estándar que se utilizan tradicionalmente para las especificaciones de los requisitos.

(8)

32 tienden a aumentar cuando al material difícil se incorpora

actividades con herramientas.

6.6 Evaluación de resultados por los estudiantes Los estudiantes consideraron de gran valor la presentación de varias técnicas formales de especificación para el aprendizaje de la notación Z. Aunque encontraron otros lenguajes formales, dedicaron el tiempo necesario para aprender y lograr experiencia con el lenguaje seleccionado.

Algunos estudiantes se sentían frustrados por tener que escribir a mano las especificaciones de Z. No fueron capaces de editar y compartir fácilmente sus esquemas para compartir en las reuniones de grupo. Pero esto es necesario para lograr que mecanicen el lenguaje y su gramática.

Algunos creyeron que el uso de los métodos formales proporciona un marco más riguroso para el diseño del sistema y este marco centró su atención en las fases de transición coherentes y completas de su sistema. Sin embargo, se preguntaban si los empleadores invertirían o apreciarían el valor en el desarrollo de especificaciones formales a pesar de la clara ventaja de la precisión del diseño de las especificaciones formales. Desde su limitada experiencia en las entrevistas de trabajo, opinaron que los entrevistadores no conocían qué son ni qué hacen los métodos formales. Esto causó dificultades para convencerlos de que su inversión en el aprendizaje de técnicas de métodos formales se compensaría en los empleos.

7. CONCLUSIONES

La responsabilidad por la introducción de los métodos formales en el sistema formativo no sólo es un deber de la academia, la industria y el Estado, o las regulaciones y las normas, también es responsabilidad de una percepción general para reconocer a la Ingeniería de Software como una ingeniería, y aceptar que la formación respectiva carece de suficiente énfasis en matemáticas y ciencias ingenieriles. Un esquema factible de aplicar debe incluir una amplia revisión a los objetivos formativos, a los métodos y metodologías aplicados en esos procesos, a los contenidos curriculares y a las evaluaciones que se realizan a la experiencia de los profesores y su investigación y formación continua.

La formación es el medio más necesario y efectivo para transferir los métodos formales a la industria del software. El factor de influencia más importante para alcanzar este objetivo es poner los procesos formativos

en el contexto de la Ingeniería de Software. En este trabajo, se han descrito varias técnicas para formar en métodos formales en ese contexto, tanto para estudiantes con y sin experiencia, y cada una es factible de probar en la práctica. No importa si los métodos formales se pueden utilizar directamente como una técnica de Ingeniería de Software efectiva en la práctica, pero sin duda una adecuada formación en ellos beneficiará las prácticas al contar con ingenieros bien entrenados y disciplinados. La única forma alcanzar la transferencia efectiva de los métodos formales a la industria es: formación, formación y formación.

8. REFERENCIAS

[1] Liu, S. (2004). Formal Engineering for Industrial Software

Development Using the SOFL Method. Springer-Verlag.

[2] Liu, S. et al. (1998). SOFL: A Formal Engineering

Methodology for Industrial Applications. IEEE

Transactions on Software Engineering, 24(1), pp. 24-45. [3] Collins, B.P. & Nix, C.J. (1988). The Use of Software

Engineering, Including the Z notation, in the Development

of CICS. Quality Assurance, 14(2), pp. 103-110.

[4] Parnas, D.L. (2001). Inspection of Safety-Critical Software

Using Program-Function Tables. In Hoffman, D.M. & Weiss,

D.M. (Ed.), Software Fundamentals. Addison Wesley, pp. 371-382.

[5] Sahara, S. (2004). An Experience of Applying Formal

Method on a Large Business Application. In Proceedings

2004 Symposium of Science and Technology on System Verification (Osaka, Japan, Feb. 4-6), pp. 93-100.

[6] Parnas, D.L. (1990). Education for Computing

Professionals. Computer, 23(1), pp. 17-22.

[7] Jones, C.B. (1990). Systematic Software Development

Using VDM. Prentice Hall.

[8] Morgan, C. (1998). Programming from Specifications. Prentice-Hall.

[9] Lecomte, T. (2009). Applying a Formal Method in Industry:

a 15-year trajectory. In Proceedings of the 14th

International Workshop on Formal Methods for Industrial Critical Systems FMICS '09 (Eindhoven, The Netherlands, Nov. 2-3), pp. 26-34.

[10] Bicarregui, J.C. (2009). Industrial Practice in Formal

Methods: a Review. Lecture Notes in Computer Science,

5850, pp. 810-813.

[11] Abrial, J.R. (2006). Formal Methods in Industry:

Achievements, Problems, Future. In Proceedings of the

28th international conference on Software engineering ICSE'06 (Shanghai, China, May 20-28), pp. 761-767. [12] Somerville, I. (2010). Software Engineering.

Addison-Wesley Publishing Company.

[13] Spivey, J.M. (2001). The Z Notation: A Reference Manual. Prentice Hall International Series in Computer Science. [14] Owre, S.; Shankar, N. & Rushby, J.M. (1996). User Guide for

the PVS Specification and Verification System. Computer

Referências

Documentos relacionados

The first factor, which is the most decisive during the choice of travelling to a medical tourism destination, is unquestionably, the price. We have tried to counter this idea

Con base en lo expuesto, el presente trabajo tiene como objetivo mostrar cómo se puede convivir con el problema de salinidad del agua represada en presas subterráneas analizando

De lo anterior se induce que en este escenario, los vínculos y el compartir experiencias entre los afectados y los estudiantes de la carrera de En- fermería les permitieron a

O segundo fato refere-se à questão candente do estabelecimento de um cânone para o período pela historiografia literária: ao contrário do que sugerem os mais recentes manuais

Há uma hipótese que atravessa esse debate que entende que é a partir do momento em que a criança se torna um dos grupos estratégicos do dispositivo da sexualidade, tal como

A análise descritiva dos níveis de disclosure indicou que, apesar de não existir grande variabilida- de entre as perspectivas analisadas (econômico, social, ambiental e

La hipótesis a comprobar es si la elaboración y aplicación del software de razonamiento lógico Chakana tiene impacto en el desarrollo de la inteligencia lógico-matemática de

O doente tem direito, se assim o desejar, de não ser informado sobre o seu estado de saúde, podendo, nesse caso, indicar quem pode receber a informação em seu lugar, devendo este