Está en la página 1de 9

Corporación Universitaria Minuto de Dios - Ingeniería de Sistemas

Pruebas, validación y verificación de software


Octubre 29 del 2016
Parcial 2
Nota total: 45 puntos

1. (15 pts) Teniendo en cuenta la función modifiedbinsearch() definida a continuación:

int modifiedbinsearch(int X, int V[], int n){


int low, high, mid;
low = 0;
high = n - 1;
while (low <= high) {
mid = (low + high)/2;
if (X < V[mid]) {
high = mid - 1;
mid = mid - 1;
} else if (X > V[mid]) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}
a. (5pts) Dibuje el grafo de flujo de control de la función
b. (5pts) Dibuje el grafo de flujo de datos de la función

7
3

4 5
c. (4pts) Para el grafo de flujo de datos. Mencione las rutas necesarias para hacer una cobertura
completa de declaraciones

Declaraciones Ruta
Ruta 1: low = 0; 1-2-3-4-2-7
high = n - 1;
mid = (low + high)/2;
high = mid - 1;
mid = mid - 1;
Ruta 2: low = 0; 1-2-3-5-6-2-7
high = n - 1;
mid = (low + high)/2;
low = mid + 1;

d. (1pts) Mencione al menos 3 rutas posibles en el grafo de flujo de datos

Ruta 1: 1-2-7
Ruta 2: 1-2-3-4-2-7
Ruta 3: 1-2-3-5-6-7
Ruta 4: 1-2-3-5-6-2-7

2. (5pts) Identifique una anomalía de flujo de datos en el código dado en el método modifiedbinsearch().

int modifiedbinsearch(int X, int V[], int n){


int low, high, mid;
low = 0;
high = n - 1;
while (low <= high) {
mid = (low + high)/2;
if (X < V[mid]) {
high = mid - 1;
Valor asignado a mid
mid = mid - 1;
} else if (X > V[mid]) { no se utiliza
low = mid + 1;
} else {
return mid;
}
}
return -1;
}

3. (5pts) Una anomalía en un programa ha sido definida por la consideración de tres operaciones, es
decir, definido(d), referenciado(r) e indefinido(u). Las tres secuencias de operaciones identificadas
como anomalía de programa son Dd, Du, y Ur. Analice y explique por qué el resto de las secuencias
de dos pares de operación (Por ejemplo Ud, Dr, …) no se consideran anomalías de programas.

Si observamos la posible conbinaciones:

Dd Du Dr Rd Ru Rr Ud Uu Ur

Podemos ver como en aquellas cuyo inicio es R permiten operar sin que se presente anomalía ya que el valor
ya se tuvo que haber definido o referenciado anteriormente para que llegara sin anomalías a dicho punto, por
otro lado las que inician en U se pueden definir para asignarle un valor o indefinir nuevamente ya que
igualmente no generaría espacio en memoria, lo que deja Dr lo cual es permitido ya que podemos referenciar
algo siempre y cuando sea definido anteriormente.

4. (5pts) Si un programa pasa todas las pruebas de caja negra, lo que significa que el programa
debería funcionar correctamente. Entonces, además de las pruebas de caja negra, ¿Porqué cree
que necesita llevar a cabo pruebas de caja blanca también? Justifique su respuesta.

Las pruebas de caja Negra se enfocan en obtener la salida deseada para las variables de entrada, por otro
lado las de caja Blanca revisa el proceso utilizado para obtener dicha salida, ya que durante el proceso el
programa puede contener variables definidas pero no utilizada, líneas de código inaccesible, procedimientos
ineficientes, que pueden ocupar memoria innecesariamente o aumentar el tiempo de ejecución del programa.

5. (5pts) Describa las diferencias entre pruebas unitarias y pruebas de integración. Adicionalmente
responda a la pregunta. ¿Porqué cree que son necesarias las pruebas de integración en el proceso
de construcción de software?

Las pruebas unitarias se encaminan en el correcto funcionamiento de cada módulo por separado, mientras
que las de integración comprueba que una vez los módulos estén juntos tengan el comportamiento deseado.

Las pruebas de integración son necesarias ya que una vez verificamos cada módulo por separado,
necesitamos ver el comportamiento que este tiene al hacer parte del sistema, errores o nuevos
requerimientos pueden aparecer durante esta prueba.

6. (10 pts) Caso práctico Pruebas Unitarias: Utilice la clase Linea para resolver el siguiene ejercicio
(Puntos a,b y c mencionados en la parte de abajo) usando JAVA con Junit.

//Clase Linea
public class Linea {

// Variables privadas
private double x0, y0, x1, y1;

//Construir un objeto Linea


public Linea(double x0, double y0, double x1, double y1) {
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
}
// Calcular la pendiente de la recta
public double getPendiente( ) {
// Evitar dividir por cero
if(x1 == x0) {
throw new ArithmeticException( );
}
return (y1 - y0) / (x1 - x0);
}

// Calcular la distancia de la línea


public double getDistancia( ) {
return Math.sqrt((x1-x0) * (x1-x0) + (y1-y0) * (y1-y0));
}

// Retornar si la línea es paralela a otra


public boolean paralelaA(Linea l) {
// Si la diferencia entre las pendientes es muy pequeña,
// entonces considerelas paralelas
if(Math.abs(getPendiente( ) - l.getPendiente( )) < .0001) {
return true;
} else {
return false;
}
}
}

a. Cree un projecto nuevo en JAVA y copie y agregue la clase Linea.java.


b. Cree las pruebas unitarias correspondientes para los métodos getPendiente(), getDistancia() y
paralelaA().
c. Cada prueba debe contener al menos 3 casos de prueba diferentes.

//Junit text

public class LineaTest {

public LineaTest() {
}

/**
* Test of getPendiente method, of class Linea.
*/
@Test
public void testGetPendiente1() {
System.out.println("getPendiente");
double x0=2;
double y0=3;
double x1=9;
double y1=10;
Linea instance = new Linea(x0, y0, x1, y1);
double expResult = (y1-y0)/(x1-x0);
double result = instance.getPendiente();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}
@Test
public void testGetPendiente2() {
System.out.println("getPendiente");
double x0,x1,y0,y1;
x0=45;
y0=-89;
x1=78;
y1=-4;
Linea instance = new Linea(x0, y0, x1, y1);
double expResult = (y1-y0)/(x1-x0);
double result = instance.getPendiente();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}
@Test
public void testGetPendiente3() {
System.out.println("getPendiente");
double x0,x1,y0,y1;
x0=665;
y0=985;
x1=-45;
y1=-8787;
Linea instance = new Linea(x0, y0, x1, y1);
double expResult = (y1-y0)/(x1-x0);
double result = instance.getPendiente();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}

/**
* Test of getDistancia method, of class Linea.
*/
@Test
public void testGetDistancia1() {
System.out.println("getDistancia");
Linea instance = new Linea(0, 10, 0, 70);
double expResult = 60.0;
double result = instance.getDistancia();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}
@Test
public void testGetDistancia2() {
System.out.println("getDistancia");
Linea instance = new Linea(-10.0, 25.3, 80.0, 25.3);
double expResult = 90.0;
double result = instance.getDistancia();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}
@Test
public void testGetDistancia3() {
System.out.println("getDistancia");
Linea instance = new Linea(-2, 1, 1, 5);
double expResult = 5.0;
double result = instance.getDistancia();
assertEquals(expResult, result, 0.0);
// TODO review the generated test code and remove the default call to fail.
}

/**
* Test of paralelaA method, of class Linea.
*/
@Test
public void testParalelaA1() {
System.out.println("paralelaA");
Linea l = new Linea(0, 10, 20, 10);
Linea instance = new Linea(12, 88, 55, 88);
boolean expResult = true;
boolean result = instance.paralelaA(l);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
}
@Test
public void testParalelaA2() {
System.out.println("paralelaA");
Linea l = new Linea(45, -780, 52, -780);
Linea instance = new Linea(52, 328, 542, 328);
boolean expResult = true;
boolean result = instance.paralelaA(l);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
}

@Test
public void testParalelaA3() {
System.out.println("paralelaA");
Linea l = new Linea(28, 0, 180, 152);
Linea instance = new Linea(-328, -328, 42, 42);
boolean expResult = true;
boolean result = instance.paralelaA(l);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
}
}

También podría gustarte