Showing posts with label Verificacion y validacion de software. Show all posts
Showing posts with label Verificacion y validacion de software. Show all posts

October 22, 2012

Redes de Petri

Las Redes de Petri son una herramienta de modelado de sistemas secuenciales discretos y concurrentes; nos permiten visualizar el comportamiento dinámico de un sistema.

Esta herramienta es ideal para describir y estudiar sistemas que procesan información, y que tienen características concurrentes, asíncronas, distribuidas, paralelas, no determinísticas o estocásticas.

Una red de Petri es un grafo orientado con dos tipos de nodos:
  • Lugares (representados mediante circunferencias y se le asocian acciones)
  • Transiciones (representadas por segmentos rectos verticales y permiten el movimiento de un lugar del grafo a otro)
Estos lugares y las transiciones se unen mediante arcos o flechas.

Una transición puede ser destino de varios lugares y un lugar puede ser el destino de varias transiciones.

Una transición puede ser origen de varios lugares y un lugar puede ser origen de varias transiciones.

Los lugares pueden presentar marcas, las cuales se representan mediante un punto en el interior del círculo 

Cada lugar tiene asociada una acción o salida. Los lugares que contiene marcas se consideran lugares activos. Cuando un lugar está activo sus salidas están a uno.

A las transiciones se les asocia eventos que son las funciones lógicas de las variables de entrada. 

Una transición se dice que está sensibilizada cuando todos su lugares origen están marcados. Cuando ocurre un evento asociado a una transición, se dice que la transición está validada


¿Cómo funcionan?
Conforme avanza la simulación las marcas en los grafos van cambiando de lugar, a esta acción se le conoce como franquear las transiciones.

Para franquear una transición, ésta debe de estar validada y sensibilizada

Cuando una transición se franquea desaparecen las marcas de los lugares origen y se añade una marca a cada uno de los lugares destino. Un lugar puede tener más de una marca


Estas son las estructuras básicas para realizar un diagrama de Petri



Ejemplo

Este es un pequeño ejemplo que encontré en la red.

Problema. Se pretende que el auto vaya de a hacia 'b' y vuelva. Existe un botón que pone en marcha el auto. En el inicio el auto está en 'a'

Entradas:
  • m: puesta en marcha. 
  • a : sensor llegada a izquierda.
  • b : sensor llegada a derecha.
Salidas:
  • I : indica desplazamiento a izquierda.
  • D : indica desplazamiento a derecha.
De acuerdo a los datos qe podemos obtener de la redacción la red de Petri quedaría de la siguiente manera:



Fuentes

October 16, 2012

Sistemas inferenciales o motor de inferencias

Hoy en día existen muchos tipo deaplicaciones para la lógica de predicados podemos encontrar desde teoremas matemáticos hasta resoluciones o aplicaciones de problemas en la vida diaria.

Para esta entrada hablaré sobre una de estas aplicaciones, los motores de inferencias que son parte importante de los sistemas expertos.

Primero que nada, qué es una inferencia?

Una inferencia es una evaluación que tiene el papel de la mente entre expresiones bien formadas (EBF) de un lenguaje que se toman como abstracciones y permiten trazar una línea lógica de condición o implicación lógica entre las diferentes expresiones. Las inferencias son los procesos mediante los cuales obtenemos una conclusión a partir de unas premisas de forma que el razonamiento sea válido.

Qué es un motor de inferencias?

Un Motor de Inferencias es un programa de control cuya función es seleccionar las reglas posibles a satisfacer del problema, para realizar esto un motor de inferencias utiliza estrategias de control o estrategias heurísticas. Los motores de inferencia utilizan conocimientos para resolver un problema, esto lo realiza con datos que se encuentran en una base de hechos del sistema experto al que pertenecen. El tipo de reglas que forman parte de esta base de conocimientos es de la manera en que, si A es válido, puede deducirse B como conclusión
La idea general de un Motor de inferencias es: seleccionar, decidir, interpretar, activar y aplicar el conocimiento de la base de conocimientos sobre la base de hechos con el fin de obtener la solución buscada. Basicamente podemos decir que un sitema inferencial consiste en un grupo de reglas que nos permiten deducir unas conclusiones a partir de unas hipótesis.

Los hechos iniciales o datos de partida asi como también las conclusiones derivadas de ellos forman parte de los hechos o datos de que se dispone en un instante dado.

En varios tratados lógicos podemos encontrar que a la conclusión de se le da el nombre de consecuencia lógica de las premisas.

Algunas de las estrategias de control heurísticas utilizadas en los sistemas de inferencias son los siguientes:
  • Orden de las reglas.
  • Mayor credibilidad en las reglas.
  • Menor número de cláusulas no instanciadas.
  • Mayor número de conclusiones en las reglas.

Los motores de inferencia son parte importante de los sistemas expertos ya que son los que modelan el proceso de razonamiento humano.

Reglas de inferencia?

Estos motores o sistemas de inferencias utilizan reglas de inferencia para poder establecer una conclusión. Estas reglas son esquemas para construir inferencias válidas, los cuales establecen relaciones entre un conjunto de fórmulas llamados premisas y una afirmación a la que se conoce como conclusión.

Es en este punto donde este tema se relaciona la logica de predicados. 

En la lógica de predicados la regla de inferencia más conocida es la Regla de Generalización universal. 

Esta regla nos dice que si P(x) es verdadera cuando x se reemplaza por cualquier constante, digamos "a", del universo, entonces ∀x: P(x) es verdadero.
  • x + 2 = 4 es un enunciado abierto mientras que
  • ∀x R/x + 2 = 4 es una proposición verdadera.
Cuantificador Universal: se simboliza “∀” (se lee: para todo, toda, todos ó todas). El cuantificador universal indica que lo que se escribe a su derecha es verdadero para todo valor de la variable que lo acompaña. Por ejemplo:

  • ∀x; p(x): para todo x; p(x)
  • Sea p(x): x es una estudiante del 2do año 
  • x B, B = {Alex, Alfonso, Zandra, Christian}

Por lo tanto todos los elementos de B son estudiante del 2do año


Si anteponemos el cuantificador ∀ indica que en cada caso que x sea sustituido por uno de los nombres de B, entonces tiene que verificarse que sea un estudiante de 2do año, entonces la expresión ∀x; p(x) es verdadera.


Fuentes

September 17, 2012

Principios de demostraciones de validez

Para esta semana se me asignó el problema 4.30 del capítulo 4 del curso "Logic in Action". Este ejercicio dice lo siguiente:

"Which quantifications are vacuous? Replace each formula with vacuous quantification by an equivalent formula without vacuous quantification.
(1) ∀x∃xRxx.
(2) ∀x∃yRxx.
(3) ∀x∃yRxy.
(4) ∀x∃yRyy"

Para resolver esto utilicé la cuantificación vacía la nos dice que cuando un cuantificador no enlaza una variable, ya sea porque la variable no está en el alcance o rango de ese cuantificador, o porque hay otro cuantificador vinculado a esa variable.

Sabiendo esto podemos realizar el ejercicio. 

  • En el #1 vemos que para toda "x" existe una "x" en la relación "xx", esto es cierto porque las variables utilizadas existen en la relación como en el inicio de la proposición
  • En el #2 observamos que para toda "x" existe una "y" en la relación "xx", esto no es cierto ya que en la relación no existe ninguna y. Se debería escribir así:  ∀x∃yRxy ó  ∀x∃xRxx.
  • La proposición #3 es verdadera ya que se cumple que para toda "x" existe una "xy" en la relación "xy"
  • La proposición #4 está incorrecta ya que esa proposición se traduce como: para toda "x" existe una "y" en la relación "yy", podemos observar que en la relación no hay ninguna "x"; se puede corregir escribiendo: ∀y∃yRyy o  ∀x∃yRxy

Saludos!

Fuentes

September 10, 2012

Lógica predicativa

Para esta entrada el objetivo es realizar uno de los ejercicios propuestos en el libro "Symbolic Logic" (aquí la liga al libro). Para realizar este ejercicio escogí el ejercicio 60 de la página 104

La proposición que elegí es la siguiente:

  • All philosophers are logical;
    An illogical man is always obstinate
El primer paso que realicé fue asignarle una expresión a cada proposición, a la característica de ser lógico le asigné la variable x ya que las dos proposiciones giran en torno esta característica:
  • x = logical
  • F(x) = philosophers
  • M(x) = man
  • O(x) = obstinate
Teniendo estas expresiones, lo siguiente que realicé fue buscar los cuantificadores de los cuales solo utilicé es el de todos ∀; de tal manera que las expresiones quedan de la siguiente manera:

All philosophers are logical
An illogical man is always obstinate

De las proposiciones anteriores podemos concluir que:

An illogical man is not a philosopher
All philosophers are not obstinate

En comentarios pueden dejar cualquier duda o aclaración,
¡Saludos!



September 3, 2012

Diagramas de decisión binaria

Primero que nada hay que definir que es un diagrama de decisión. Los diagramas de decisión ayudan a realizar elecciones adecuadas entre distintas posibilidades. Su estructura permite seleccionar todas las diferentes opciones para conocer los diferentes escenarios.

Las ventajas de un árbol de decisión son:
  • Permite la clasificación de nuevos casos 
  • Facilita la interpretación de la decisión analizada.
  • Se puede analizar el comportamiento respecto a una determinada decisión.
  • Número de variables reducido.

  • Diagramas de Decisión Binaria


Los diagramas de decisión binaria (DDB o BDD en inglés) son estructuras de datos que se utilizan para representar funciones booleanas, también son representaciones de conjuntos y relaciones en los cuales se pueden hacer operaciones.

Un DDB es un grafo acíclico dirigido con raíz que permite representar funciones booleanas. En general estos diagramas tienen nodos de decisión, estos nodos contienen una variable booleana(ya sea un 0 o un 1) y están conectados a dos nodos que son sus hijos. Todos los nodos se encuentran en el mismo nivel y solo aparecen una sola vez en cada rama; y deben de exitir dos nodos que se conocen como terminales y por conveniencia se les llama terminal-0 y terminal-1.

En palabras más claras una diagrama de decisión binaria es un grafo dirigido acícliclo que representa una función booleana como una serie de sentencias if...then...else anidadas. Estos diagramas nos permiten representar los distintos estados de un sistema.

Para simplificar o reducir un DDB se deben aplicar las siguientes dos reglas:
  • Unir las estrucuturas matemáticas que son iguales
  • Eliminar los nodos que tengan dos hijos iguales
Las ventajas de utilizar un diagrama reducido son:
  • Son únicos para una expresión booleana
  • Sus variables están ordenadas

Tarea 3

Para esta semana la tarea es modelar una proposición utilizando mínimo 3 variables y cuatro conectores, de esta proposición hay que obtener el diagrama de decisión binario y reducirlo.

Como proposición utilicé la siguiente:
  •  (p v q) ^ (¬r ^ q) v (p ^ r)
Esta es la tabla de verdad de la expresión anterior
p
q
r
p v q
¬r ^ q
p ^ r
(p v q) ^ (¬r ^ q)
(p v q) ^ (¬r ^ q) v (p ^ r)
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
1
1
0
1
1
0
1
1
1
0
0
0
0
1
0
0
1
0
0
0
0
1
0
1
1
0
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
0
1
0
1


Ahora el diagrama de decisión binario, es el siguiente:
Aplicando las dos reglas que mencioné anteriormente para reducir un diagrama obtenemos lo siguiente:

  • Diagramas de decisión binario reducido ordenado(DDBRO)


Esta parte también se debe realizar para completar la tarea, un DDBRO consiste darle un diferente orden a las variables de entrada del diagrama original para obtener un diagrama diferente y por consecuencia el diagrama reducido será tambien diferente

Para esta parte utilicé el orden r < q< r , y a continuación les muestro el DDBTO
Y al igual que en un DDB, los DDBTO también pueden reducire implmentado las mismas reglas:
Como se puede apreciar en las imágenes, de tener un diagrama reducido de 7 nodos, se pasa a tener uno de 6 nodos.

Fuentes

August 27, 2012

Lógica proposicional

Qué es?

La lógica proposicional es la rama de la lógica que permite representar expresiones del mundo real en un lenguaje representativo para evaluarlas a través de proposiciones o sentencias lógicas y conocer su verdad o en caso contrario su falsedad.

En general, la lógica proposicional trata de la verdad o falsedad de las proposiciones; además es la parte de la lógica, más antigua y simple, que estudia proposiciones complejas a partir de proposiciones más simples y de cómo se transmite la verdad de una proposición a otra.

Una lógica proposicional es un sistema formal, sus elementos más simples son proposiciones, y sus constantes lógicas, llamados conectores, son operaciones sobre proposiciones, los cuales forman otras proposiciones de mayor complejidad.

Las proposiciones pueden ser atómicas o simples, si no se pueden descomponer en otras proposiciones; y moleculares o complejos, si se pueden descomponer en proposiciones más simples.

El lenguaje o vocabulario de la lógica proposicional consta de tres elementos: 
  • Variables
  • Constantes
  • Auxiliares


Variables o variables proposicionales 

Son los símbolos que sustituyen las proposiciones. Se han acordado cinco variables o letras como símbolos: p, q, r, s, t. Si para realizar una proposición hacen falta variables, se utilizan subíndices: .

Conectores

Son los elementos que no varían y que tienen como función de alterar, relacionar o conectar enunciados atómicos haciéndolos complejos.

Conectadores básicos de la lógica proposicional.

Nombre
Conector
Símbolo
Conjunción
AND
^
Disyunción
OR
v
Negación
NOT
¬
Implicación
IF-THEN
→
Equivalencia
IGUAL
=

Símblos auxiliares

Estos elementos no tienen ningún significado lógico pero se usan para clarificar la comprensión de los enunciados, evitan ambigüedades y facilitan la lectura. Como símbolos auxiliares podemos encontrar paréntesis ( ... ) y corchetes [ ... ].

Proposición bien formada

Para que una proposición sea bien formada debe cumplir con las siquientes reglas:
  1. Uno variable proposicional es una fórmula bien formada (fbf). 
  2. Una fbf precedida de una negación es una fórmula bien formada. 
  3. Una fórmula bien formada seguida por cualquier constante, seguida de una fbf, haciendo buen uso de los paréntesis es una fbf.

Equivalencias

En la lógica proposicional existen equivalencias, las cuales son muy parecidas a las que se utilizan en álgebra booleana

Nombre Representación lógica
Leyes equipotenciales
A → B = ¬A v B
A ^ ¬A = F
A v ¬A = V
Leyes conmutativas
A ^ B = B ^ A
A v B = B v A
Leyes distributivas
A ^ (B v C) = (A ^ B) v (A ^ C)
A v (B ^ C) = (A v B) ^ (A v C)
Leyes asociativas
A ^ (B ^ C) = (A ^ B) ^ C
A v (B v C) = (A v B) v C
Leyes absortivas
A ^ (A v B) = A
A v (A ^ B) = A
Leyes de Morgan
¬(A ^ B) = ¬A v ¬B
¬(A v B) = ¬A ^ ¬B



Aplicación de la lógica proposicional

Una de las aplicaciones de la lógica proposicional se da en los sistemas de inteligencia artificial (IA).

Qué es?

En palabras sencillas, la inteligencia artificial trata de explicar el funcionamiento de la mente utilizando y desarrollo algoritmos para controlar distintas funciones. La inteligencia artificial combina varias áreas, por ejemplo la robótica, sistemas expertos, etc, los cuales comparten el mismo objetivo, el tratar de crear máquinas que puedan pensar o tomar decisiones por sí solas.

La idea principal de la intelgencia artificial es contruir máquinas que sean capaces de realizar actividades que nosotros,los seres humanos, somos capaces de realizar.

La lógica proposicional es una parte muy importante en el desarrollo de la inteligencia artificial. Esto lo podemos observar en las siguientes afirmaciones:
  • Un Agente Basado en Conocimiento (ABC) o que posee inteligencia para tomar decisiones posee conocimiento de su mundo y es capaz de razonar sobre las posibles acciones que puede tomar para cambiar el estado de su mundo tomando alguna decisión.
  • El agente lo podemos observar como un conjunto de sentencias, que se representa mediante un lenguaje de representación de conocimiento.

EL ABC consiste en 2 elementos principalmente:

  • Base del conocimiento
En este elemento toma gran importancia la lógica proposicional, ya que la base del conocimiento es un sistema de oraciones que representan hechos del mundo real. Cada hecho está representado por una oración. Estas oraciones se expresan en un algún lenguaje específico para representar el conocimiento.

Son dos las actividades principales del agente:
  1. Se informa a la Base de Conocimiento lo que se percibe del mundo real.
  2. Se acude a la Base de Conocimiento para obtener una respuesta, grabarla y por último emitirla mediante un razonamiento lógico

  • Motor de inferencia
Aquí, a partir de lo percibido en el mundo real se deducen nuevas oraciones utilizando las que ya se encontraban almacenadas en la base de conocimiento y se crean nuevas percepciones (Este es el proceso de aprendizaje del sistema). En esta parte se utilizan teorías y algoritmos para determinar las nuevas oraciones o percepciones a partir de conocimientos previos.


Este es un esquema que representa cómo trabaja el agente basado en conocimiento:


Los lenguajes de representación del conocimiento, que se mencionaron anteriormente, generalmente tienen su fundamento en lógica formal, en la que se incluye la lógica proposicional. Esta lógica formal consta de dos elementos:
  • Sintaxis: Son las reglas que explican al sistema como debe de contruir las oraciones nuevas y que estén bien hechas.
  • Semántica: Este concepto explica cómo las oraciones representan hechos en el mundo.

Conclusiones

Como podemos observar la lógica proposicional es una pieza importante de la inteligencia artificial, ya que para realizar los agentes se necesita de un lenguaje para representar los hechos que se perciben del mundo real y el utilizar proposiciones es algo que encaja perfectamente en este ámbito. Es una manera sencilla para poder resolver este problema ya que a partir de oraciones o proposiciones sencillas se pueden analizar los hechos y tomar decisiones, es decir se pueden crear nuevas oraciones que se van aprendiendo o agregando a la base del conocimiento.

La toma de decisiones a partir del conocimiento aprendido con anterioridad tiene un papel muy importante y la lógica proposicional es un método que encaja perfectamente que permite generar el nuevo conocimiento.

Fuentes

August 19, 2012

Ejercicio Tautología

Aquí el ejercicio de tautología para la clase de V & V de software. El ejercicio consistía en elaborar una proposición utilzando and, or, negación y repetir cualquiera de los 3 anteriores como mínimo; además se debía utilizar tres variables de entrada.

Proposición:
P = ((p ^ r) v (p v q)) v¬(q ^ r)

Tabla de verdad


p
q
r
(p ^ r)
(p v q)
¬(q ^ r)
(p ^ r) v (p v q)
((p ^ r) v (p v q)) v¬(q ^ r)
0
0
0
0
0
1
0
1
0
0
1
0
0
1
0
1
0
1
0
0
1
1
1
1
0
1
1
0
1
0
1
1
1
0
0
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
1
0
1
1


Representación en árbol


Tautología

Qué es?

Tautología proviene del griego ταυτολογία, que significa "decir lo mismo". En lógica, una tautología es una fórmula bien formada de un sistema de lógica proposicional que resulta verdadera para cualquier interpretación.

Una tautología es un caso especial de proposiciones lógicas caracterizadas por tener exclusivamente el valor verdadero en la columna final de su tabla de verdad, independientemente del valor de las demás proposiciones.

Las tautologías son muy comunes, y algunas de ellas muy importantes, tanto, que constituyen leyes o principios lógicos. Las tautologías son muy importantes en lógica porque son leyes en las que nos podemos apoyar para demostraciones matemáticas.

Principio de Identidad

(A \leftrightarrow A)
Esta fórmula expresa que toda proposición es verdadera si y sólo si ella misma es verdadera. Por lo tanto, expresa una verdad acerca de proposiciones y sus valores de verdad

Principio del tercer excluido

Es un principio clásico de la filosofía y de la lógica según el cual la disyunción de una proposición y su negación es siempre verdadera. Se expresa:
(A \or \neg A)

Principio de no Contradicción

Principio clásico de la lógica y la filosofía, según el cual una proposición y su negación no pueden ser ambas verdaderas al mismo tiempo y en el mismo sentido. Se expresa:
\neg (A \and \neg A)

El principio de no contradicción permite juzgar como falso todo aquello que implica una contradicción. 


Ejemplo

Aquí un ejemplo de tautología, en esta tabla se puede apreciar que p ∧ q no es una tautología, ya que todas sus salidas no son verdaderas o 1's.
\begin{array}{c|c||c}
      p & q & p \and q \\
      \hline
      1 & 1 & 1 \\
      1 & 0 & 0 \\
      0 & 1 & 0 \\
      0 & 0 & 0 \\
   \end{array}

En cambio, la siguiente tabla de verdad muestra una fórmula que sí lo es:
\begin{array}{c|c||c|c}
      p & q & (p \and q) & (p \and q) \to p \\
      \hline
      1 & 1 & 1 & 1 \\
      1 & 0 & 0 & 1 \\
      0 & 1 & 0 & 1 \\
      0 & 0 & 0 & 1 \\
   \end{array}


Saludos!!!

Fuentes

August 12, 2012

Ejemplo en donde aplicar la V & V

Error de división del Intel Pentium 66MHz

El 30 de octubre de 1994 el profesor Thomas Nicely de la Universidad de Lynchburg descubrió un error en la unidad de coma flotante del Intel Pentium. Nicely observó que algunas operaciones de división devolvían siempre un valor erróneo por exceso.

Este fallo de diseño se hizo notorio muy rápidamente y se le dio el nombre de error FDIV del Pentium (FDIV es la instrucción de división en coma flotante de los microprocesadores x86). 

Este error, que para muchas personas sería pequeño,  arrojaba un resultado de hasta 61 unidades por millón.

Intel, como es de esperarse de toda macro empresa, negó inicialmente el problema. Después dijo que era un error insignificante y ya al final Intel se negó a sustituir sistemáticamente los microprocesadores defectuosos; sin embargo, si una persona podía demostrar que había sido afectada por el error, entonces Intel cambiaría su procesador.

Tras una serie de pruebas que mostraban que el procesador tenía erroes, Intel se vio forzada a aceptar sustituir todos los microprocesadores defectuosos, lo que le representó un costo enorme.

Para comprobar el error en el procesador se hicieron diversas pruebas, algunas muy sencillas otras algo mas complejas, por ejemplo en la calculadora de Windows se podía hacer lo siguiente para comprobar si el procesador tenía fallo
  • 4195835.0 / 3145727.0 = 1.333 820 449 136 241 002 (Resultado correcto)
  • 4195835.0 / 3145727.0 = 1.333 739 068 902 037 589 (Pentium con error)
Otra forma en que se comprobó el error fue con un programa en BASIC que arrojaba como respuesta un mensaje de si el procesador tenía o no error.


Falla en autos Toyota

Otro ejemplo en el que podemos observar la importancia de la verificación y validación de software es la falla que tuvo Toyota en los frenos de sus autos en el 2009 y 2010.

La primera alerta ocurrió en noviembre de 2009 cuando se revisaron 5.3 millones de vehículos de Toyota y Lexus en Estados Unidos por un problema con los tapetes en el asiento del conductor que bloqueaban los pedales, falla que causó la muerte a cuatro personas cerca de San Diego, California, pero estas unidades fueron retiradas entre finales de 2009 y finales de enero.
Dos meses después Toyota realizó una nueva revisión, esta vez porque existía un problema con el pedal del acelerador ya que no regresaba a su posición original.

Hasta la fecha siguen habiendo reclamos sobre el sistema de frenos del modelo Prius que no se activan en ciertas condiciones una vez se presiona el pedal.

Toyota culpa de los problemas a un fallo en un software de frenado y asegura que ya se ha arreglado en los vehículos

Como podemos observar, las avtividades de verificación y validación son muy importantes ya que pueden prevenir grandes fallos, que aunque son un pequeño error al momento de que el sistema corre por completo puede provocar grandes daños.

Fuentes

August 7, 2012

Validación y verificación del software

Durante y después de la implementación de un software, el programa que se está desarrollando debe de comprobarse para asegurarse que satisface su especificación y también para comprobar que entrega la funcionalidad esperada por los usuarios.



Qué es la la verificacioón y validación de software?

  • Verificación
- Busca comprobar que el sistema cumple con los requerimientos especificados (funcionales y no funcionales).

- Esta actividad se enfoca más al proceso de evaluación del sistema o componentes ya que permite determinar si los productos de una determinada fase del desarrollo satisfacen las condiciones impuestas en el inicio de la etapa.

- ¿Se está construyendo el producto correctamente?

  • Validación
- Busca comprobar que el software hace lo que el usuario espera.


- Esta actividad también es una evaluación del sistema o componentes solo que es en el transcurso o al final del proceso del desarrollo para determinar si cumple con lo especificado.

- ¿Se está construyendo el producto correcto?



La verificación y validación implican la valoración de los productos de trabajo para determinar el apego a las especificaciones, incluyen las especificaciones de requisitos, documentación del diseño, estándares del proyecto, estándares organizacionales y expectativas del usuario, al igual que las especificaciones para los formatos y notaciones utilizadas en la especificación de los productos. Se debe examinar los requisitos para asegurarse que concuerden con las necesidades del usuario, así como las restricciones del ambiente y los estándares de notación.


Objetivos de la validación y verificación del software
  • Descubrir defectos (para corregirlos)
    • Provocar fallas (forma de detectar defectos)
    • Revisar los productos (forma de detectar defectos). 
  • Evaluar la calidad de los productos. 
    • El probar o revisar el software da una idea de la calidad del mismo
  • Valorar y mejorar la calidad de los productos generados durante el desarrollo de software.
  • Comprobar que el software está de acuerdo con su especificación. Comprobar que satisface sus requerimientos funcionales y no funcionales


La validación debe llevarse a cabo durante la especificación inicial a través de prototipos que deben ser aprobados por el cliente/usuario, y que correspondan a la funcionalidad deseada. El sistema debe validarse continuamente durante su proceso de desarrollo de manera que siempre corresponda con lo especificado.


En esta imagen podemos ver una visión simplificada del proceso de validación y verificación de ssoftware.



Aquí un ejemplo para entender mejor estas actividades

Un programa lee tres números enteros, los que son interpretados como representaciones de las longitudes de los lados de un triángulo. El programa arroja un mensaje derespuesta que informa si el triángulo es escaleno, isósceles o equilátero

• Se quieren detectar defectos probando (testeando) el programa

• Posibles casos a probar:
    • lado1 = 0, lado2 = 1, lado3 = 0         Resultado = error
    • lado1 = 2, lado2 = 2, lado3 = 3         Resultado = isósceles

• Estos son Casos de Prueba
Se compara el resultado esperado con el obtenido. Si son distintos probablemente haya fallado el programa

• Por intuición sería bueno probar:
    • lado1 = 2, lado2 = 3, lado3 = 4         Resultado = escaleno
    • lado1 = 2, lado2 = 2, lado3 = 2         Resultado = equilátero
¿Por qué estos casos?
Para probar al menos un caso para cada respuesta posible del programa (error, escaleno, isósceles, equilátero)


Otra forma para detectar defectos es revisar el código


Por ejemplo al hacer esta revisión nos podemos dar cuenta que en lugar del or me debería ir un and.


Fuentes
clases3gingsof
booksgoogle
fing