Documente Academic
Documente Profesional
Documente Cultură
Aunque el término se utiliza ampliamente, no parece existir una clara definición acerca de qué son
(Hehner, 2006). En muchas ocasiones el término se emplea simplemente para indicar la utilización
de un lenguaje de especificación formal, pero no incluye una descripción de cómo se utiliza o la
extensión de su uso. Incluso el término “lenguaje de especificación formal” no es preciso, ya que no
es claro si los lenguajes “específicamente” tienen como objetivo diseñar la implementación, en lugar
de especificar el problema. En este trabajo se utiliza el término “métodos formales” para describir
cualquier enfoque que utilice un lenguaje de especificación formal, pero que describa su función en
el proceso del desarrollo de software. Utilizar métodos formales necesariamente implica un proceso
formal de refinamiento, razonamiento y prueba. El término “lenguaje de especificación formal” se
utiliza aquí para referenciar un lenguaje en el que es posible especificar completamente la
funcionalidad de todo o parte de un programa, de tal forma que sea susceptible de razonamiento
formal, y que se fundamenta en una sólida base matemática, más en que si es lo suficientemente
abstracto.
En la lógica formal como en los métodos formales el objetivo es el mismo, “reducir la dependencia
de la intuición y el juicio humanos para evaluar argumentos” (Kiniry & Zimmerman, 2008). Los
métodos menos rigurosos enfatizan en la formalización y renuncian a la computación, definición que
implica un amplio espectro de técnicas, y una gama igualmente amplia de estrategias. La interacción
de las técnicas y estrategias de muchos métodos formales, en determinados proyectos, se limita por
el papel que interpretan y por los recursos disponibles para su aplicación (García et al., 2006).
En Ingeniería de Software, un método formal es un proceso que se aplica para desarrollar programas,
y que explota el poder de la notación y de las pruebas matemáticas. Además, los requisitos, la
especificación y el sistema completo deben validarse con las necesidades del mundo real (Kuhn et
al., 2002). En la Ingeniería de Software los métodos formales se utilizan para:
- Las políticas de los requisitos. En un sistema seguro se convierten en las principales
propiedades de seguridad que éste debe conservar -el modelo de políticas de seguridad
formal-, como confidencialidad o integridad de datos.
- La especificación. Es una descripción matemática basada en el comportamiento del sistema,
que utiliza tablas de estado o lógica matemática. No describe normalmente al software de
bajo nivel, pero sí su respuesta a eventos y entradas, de tal forma que es posible establecer
sus propiedades críticas.
- Las pruebas de correspondencia entre la especificación y los requisitos. Es necesario
demostrar que el sistema, tal como se describe en la especificación, establece y conserva las
propiedades de las políticas de los requisitos. Si están en notación formal se pueden diseñar
pruebas rigurosas manuales o automáticas.
- Las pruebas de correspondencia entre el código fuente y la especificación. Aunque muchas
técnicas formales se crearon inicialmente para probar la correctitud del código, pocas veces
se logra debido al tiempo y costo implicados, pero pueden aplicarse a los componentes
críticos del sistema.
- Pruebas de correspondencia entre el código máquina y el código fuente. Este tipo de pruebas
raramente se aplica debido al costo, y a la alta confiabilidad de los compiladores modernos.
Por tanto, los métodos formales en la Ingeniería de Software son técnicas matemáticamente rigurosas
que se utilizan para describir las propiedades del sistema, y proporcionan marcos de referencia para
especificarlo, desarrollarlo y verificarlo de forma sistemática, en lugar de hacerlo ad hoc (Jones et al.,
2006). Un método es formal si posee una base matemática estable, normalmente soportada por un
lenguaje de especificación formal, que permite definir, de manera precisa, nociones como
consistencia y completitud y, aún más relevantes, la especificación, la implementación y la
correctitud. Al utilizar notaciones y lenguajes formales es posible estructurar claramente los requisitos
del sistema, y generar las especificaciones que Matemáticamente rigurosas significa que las
especificaciones en los métodos formales son declaraciones gramaticalmente correctas en una lógica
matemática, y que la verificación formal es una deducción rigurosa en ella. Es decir, que cada paso
se deriva de una regla de inferencia que se puede comprobar mediante un proceso automático (Liu &
Venkatesh, 2005). Los métodos formales en la Ingeniería de Software difieren en la forma como se
aplican, y en los tiempos necesarios para cada fase del ciclo de vida; su estructuración y utilización
requiere mayor tiempo y trabajo para desarrollar la especificación, pero su utilización garantiza, más
“formalmente”, que la construcción de los diseños es correcta.
Ventajas de los métodos formales
La utilidad de los métodos formales en la Ingeniería de Software es un tema que se debate desde hace
varias décadas. Recientemente, con el surgimiento de la Ingeniería de Conocimiento en la Sociedad
de la Información, y la aplicación de los métodos formales en los procesos industriales, nuevamente
surge el debate. A continuación se detallan algunas de las ventajas de utilizarlos.
Verificación. Para asegurar la calidad de los sistemas es necesario probarlos, y para asegurar que se
desarrollan pruebas rigurosas se requiere una precisa y completa descripción de sus funciones, incluso
cuando en la especificación se utilicen métodos formales. Una de las aplicaciones más interesantes
de éstos es el desarrollo de herramientas, que pueden generar casos de prueba completos desde la
especificación formal.
Ventajas
Clasificación
La clasificación más común se realiza en base al modelo matemático subyacente en cada método, de
esta manera podrían clasificarse en:
Especificación de comportamiento:
Métodos basados en Redes de Petri: una red de petri es un formalismo basado en autómatas, es
decir, un modelo formal basado en flujos de información. Permiten expresar eventos
concurrentes. Los formalismos basados en redes de petri establecen la noción de estado de un
sistema mediante lugares que pueden contener marcas. Un conjunto de transiciones (con pre y
post condiciones) describe la evolución del sistema entendida como la producción y consumo de
marcas en varios puntos de la red.
Métodos basados en lógica temporal: se usan para especificar sistemas concurrentes y reactivos.
Los sistemas reactivos son aquellos que mantienen una continua interacción con su entorno
respondiendo a los estímulos externos y produciendo salidas en respuestas a los mismos, por lo
tanto el orden de los eventos en el sistema no es predecible y su ejecución no tiene por qué
terminar.
La decisión de hacer uso de los métodos formales en el mundo real no debe de adoptarse a la ligera.
Bowen y Hinchley han acuñado los diez mandamientos de los métodos formales, como guía para
aquellos que estén a punto de embarcarse en este importante enfoque de la ingeniería del software.
2. Formalizarás, pero no de más: En general, resulta necesario aplicar los métodos formales a todos
los aspectos de los sistemas de cierta envergadura. Aquellos componentes que sean críticos para la
seguridad serán nuestras primeras opciones, e irán seguidos por aquellos componentes cuyo fallo no
se pueda admitir (por razones de negocios).
3. Estimarás los costes: Los métodos formales tienen unos costes de arranque considerables. El
entrenamiento del personal, la adquisición de herramientas de apoyo y la utilización de asesores bajo
contrato dan lugar a unos costes elevados en la primera ocasión. Estos costes deben tenerse en cuenta
cuando se esté considerando el beneficio obtenido frente a esa inversión asociada a los métodos
formales.
7. No comprometerás los estándares de calidad: Los métodos formales no tienen nada de mágico, y
por esta razón, las demás actividades de SQA deben de seguir aplicándose cuando se desarrollen
sistemas.
8. No serás dogmático: El ingeniero de software debe reconocer que los métodos formales no son
una garantía de corrección. Es posible (o como algunos probablemente dirían) que el sistema final,
aun cuando se haya desarrollado empleando métodos formales, siga conteniendo pequeñas omisiones,
errores de menor importancia y otros atributos que no satisfagan nuestras expectativas.
10. Reutilizarás cuanto puedas: A la larga, la única forma racional de reducir los costes del software
y de incrementar la calidad del software pasa por la reutilización. Los métodos formales no modifican
esta realidad. De hecho, quizás suceda que los métodos formales sean un enfoque adecuado cuando
es preciso crear componentes para bibliotecas reutilizables.
Los siete mitos más generalizados sobre los métodos formales son variaciones de los siguientes:
1. Los métodos formales garantizan que el software esta perfecto: El mito más importante es que
los métodos formales serian todopoderosos, si nosotros humildes mortales pudiésemos aplicarlos.
Este mito es pernicioso porque nos lleva a expectativas irreales y a la idea de que los métodos formales
son de alguna forma todo o nada.
2. Los métodos formales se centran en demostrar corrección: En los Estados Unidos, gran parte del
trabajo desarrollado en métodos formales se ha concentrado en la verificación de programas. Esto ha
hecho que los métodos formales parezcan muy difíciles y no muy relevantes para la vida real.
3. Los métodos formales son útiles solo para sistemas críticos: Esta creencia se basa en la percepción
de la dificultad que implica la aplicación de métodos formales. La verdad es que los sistemas críticos
requieren un uso más acucioso de métodos formales, pero cualquier sistema puede beneficiarse con
el uso de algunas técnicas de especificación formal.
4. Los métodos formales requieren matemáticos entrenados: Los métodos formales se basan en
notaciones matemáticas, y muchas personas creen que esto los hace difíciles para la práctica de los
ingenieros de software. Este mito, a su vez, se basa en la percepción de que las matemáticas son
intrínsecamente difíciles.
5. Los métodos formales aumentan el costo del desarrollo: Se acostumbraba decir que a pesar que
el costo que significaba usar métodos formales era muy alto, de todas formas era conveniente porque
resultaba en menores costos de mantenimiento del software.
6. Los métodos formales son incomprensibles para los usuarios: Una especificación formal esta
llena de símbolos matemáticos que resultan incomprensibles para cualquiera que no este
familiarizado con la notación. De ahí que se suponga que son inútiles para clientes no matemáticos.
7. Los métodos formales no se usan en grandes proyectos reales: Los métodos formales se asocian
comúnmente con departamentos académicos y organizaciones de investigación. Se piensa que solo
estas organizaciones tienen la capacidad necesaria para usar métodos formales y que estos solo son
apropiados para las aplicaciones idealizadas que estos grupos desarrollan.
CONCLUSIÓN
Los métodos formales son técnicas matemáticas, a menudo soportadas por herramientas, para el
desarrollo de sistemas software y hardware. Su rigor matemático le permite a los ingenieros analizar
y verificar sus modelos en cualquier parte del ciclo de vida del desarrollo; y dado que la fase más
importante en estos procesos es la Ingeniería de Requisitos, son útiles para elicitarlos, articularlos,
representarlos y especificarlos (George & Vaughn, 2003). Sus herramientas proporcionan el soporte
automatizado necesario para la integridad, trazabilidad, verificabilidad, reutilización, y para apoyar
la evolución de los requisitos, los puntos de vista diversos y la gestión de las inconsistencias (Ghose,
2000).
Los métodos formales permiten que un ingeniero de software especifique, desarrolle y verifique un
sistema basado en computadora aplicando una notación rigorosa y matemática; utilizando esté
método descubre y corrige ambigüedades, inconsistencias y errores.
Tenemos que tomar en cuenta que los métodos formales están presentes en bastantes campos y no
solo los referidos a la ingeniería y la informática, los métodos formales tienen un amplio recorrido y
su utilidad y eficiencia en desarrollo críticos están demostradas. Sus herramientas proporcionan el
soporte automatizado necesario para la integridad, trazabilidad, verificabilidad, reutilización y para
apoyar la evolución de los requisitos, los puntos de vista diversos y la gestión de las inconsistencias.
Los métodos formales pueden ser aplicados en las empresas para mejorar sus procedimientos y
productos.
La decisión de utilizar métodos formales debe considerar los costes de arranque, así como los cambios
puntuales asociados a una tecnología radicalmente distinta. En la mayoría de los casos, los métodos
formales ofrecen los mayores beneficios para los sistemas de seguridad y para los sistemas críticos
para los negocios.
Modelo por Prototipos
El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles
para el cliente o el usuario final. Este diseño conduce a la construcción de un prototipo, el cual es
evaluado por el cliente para una retroalimentación; gracias a ésta se refinan los requisitos del software
que se desarrollará. La interacción ocurre cuando el prototipo se ajusta para satisfacer las necesidades
del cliente. Esto permite que al mismo tiempo el desarrollador entienda mejor lo que se debe hacer y
el cliente vea resultados a corto plazo.
Etapas
Plan rápido.
Modelado, diseño rápido
Construcción del Prototipo
Desarrollo, entrega y retroalimentación
Comunicación
Entrega del desarrollo final
Ventajas
Este modelo es útil cuando el cliente conoce los objetivos generales para el software, pero no
identifica los requisitos detallados de entrada, procesamiento o salida.
También ofrece un mejor enfoque cuando el responsable del desarrollo del software está inseguro
de la eficacia de un algoritmo, de la adaptabilidad de un sistema operativo o de la forma que
debería tomar la interacción humano-máquina
Se puede reutilizar el código
La construcción de prototipos se puede utilizar como un modelo del proceso independiente, se emplea
más comúnmente como una técnica susceptible de implementarse dentro del contexto de cualquiera
de los modelos del proceso expuestos. Sin importar la forma en que éste se aplique, el paradigma de
construcción de prototipos ayuda al desarrollador de software y al cliente a entender de mejor manera
cuál será el resultado de la construcción cuando los requisitos estén satisfechos. De esta manera, este
ciclo de vida en particular, involucra al cliente más profundamente para adquirir el producto.
Inconvenientes
El usuario tiende a crearse unas expectativas cuando ve el prototipo de cara al sistema final. A
causa de la intención de crear un prototipo de forma rápida, se suelen desatender aspectos
importantes, tales como la calidad y el mantenimiento a largo plazo, lo que obliga en la mayor
parte de los casos a reconstruirlo una vez que el prototipo ha cumplido su función. Es frecuente
que el usuario se muestre reacio a ello y pida que sobre ese prototipo se construya el sistema
final, lo que lo convertiría en un prototipo evolutivo, pero partiendo de un estado poco
recomendado.
En aras de desarrollar rápidamente el prototipo, el desarrollador suele tomar algunas decisiones
de implementación poco convenientes (por ejemplo, elegir un lenguaje de programación
incorrecto porque proporcione un desarrollo más rápido). Con el paso del tiempo, el desarrollador
puede olvidarse de la razón que le llevó a tomar tales decisiones, con lo que se corre el riesgo de
que dichas elecciones pasen a formar parte del sistema final...
CONCLUSIÓN
A pesar de que tal vez surjan problemas, la construcción de prototipos puede ser un paradigma
efectivo para la ingeniería del software. La clave es definir las reglas del juego desde el principio; es
decir, el cliente y el desarrollador se deben poner de acuerdo en: