Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nombre
Barly Eduardo Espinal
Matricula
2017‐4928
Periodo académico
2019‐2
Nombre del profesor
Ing. Leandro Fondeur
Nombre del tema de estudio
Práctica 8 ‐ Técnicas de prueba del Software
1. Con sus palabras, describa la diferencia entre verificación y validación. ¿Ambas
usan los métodos de diseño de casos de prueba y estrategias de pruebas? Explique
su respuesta.
Diferencias
Las pruebas constituyen el último bastión desde el cual se puede evaluar la calidad y
descubrir los errores. Pero las pruebas no deben ser vistas como una red de seguridad. No
se pueden probar la calidad. Si no está ahí antes de comenzar la prueba, no estará cuando
se termine.
Si para cambiar un módulo en un programa tenemos que cambiar otro módulo, entonces
hay acoplamiento entre ellos.
El acoplamiento puede aparecer bajo varias formas. Por ejemplo, si hay código repetido
esparcido entre los módulos, también habrá un cierto acoplamiento, porque cambiar un
fragmento de código repetido implica cambiarlo en todos los módulos que aparecen.
Incluso puede que haya dependencias entre módulos y no nos demos cuenta de ello.
Pero el acoplamiento también ocurre cuando el código de un módulo utiliza código de
otro módulo, bien porque llama a un método, o accede a sus datos.
Por ello, como tal, el acoplamiento no es algo que debas evitar a toda costa.
Porque, aunque dividamos nuestro programa en módulos, esos módulos tendrán que
interactuar entre sí de alguna manera (si no tendríamos distintos programas
independientes) y tendremos algo de acoplamiento entre ellos.
4. El concepto de "antierrores” (sección 17.3.1) es una forma extremadamente efectiva
de brindar asistencia de depuración interna cuando se descubre un error:
El desarrollador
Se trata de evaluar el sistema o parte de este durante o al final del desarrollo para
determinar si satisfacer los requisitos iniciales. La pregunta a realizarse es: ¿Es esto lo
que el cliente quiere?
El cliente
Finalmente, debemos organizar las pruebas de aceptación del usuario (UAT, User
Acceptance Testing). Sobre la base de estos resultados, podemos decidir implementar una
nueva versión del software.
Me voy a guiar del video que proporciono en el virtual que me ha encantado, pero voy a
hacer una lista de cosas para agilizar el proceso
Caso 1
Descripción Valor Resultado Resultado Resultado
esperado obtenido
Triángulo Todos los Triángulo Triángulo Triangulo
equilátero ángulos iguales equilátero equilátero equilátero
Triángulo Dos ángulos Triángulo Triángulo Triángulo
isósceles iguales isósceles isósceles isósceles
Triángulo Todos los Triángulo Triángulo Triángulo
escaleno ángulos son escaleno escaleno escaleno
distintos
El programa fue desarrollado en html, es decir, si solo copia y pega, debería funcionar
todo
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="UTF‐8" />
<meta name="viewport" content="width=device‐width, initial‐scale=1" />
<script
src="https://code.jquery.com/jquery‐3.3.1.slim.min.js"
integrity="sha384‐
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"
></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384‐
UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384‐
JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"
></script>
<script>
$(document).ready(function() {
$("#ejecutar").click(function() {
var a = parseFloat($("#a").val());
var b = parseFloat($("#b").val());
var c = parseFloat($("#c").val());
//aqui se revisa si los valores no son numeros y no nulos
if (isNaN(a) || isNaN(b) || isNaN(c)) {
// 1 2 3
alert(
// 4
"Favor de ingresar numeros, no texto y la caja no puede estar
vacia"
);
} //aqui se revisa si los valores son enteros
else if (a % 1 == 0 && b % 1 == 0 && c % 1 == 0) {
//5 6 7
//aqui se revisa si los valores son positivos
if (a > 0 && b > 0 && c > 0) {
// 9 10 11
//triangulo equilatero
if (a == c && a == b) {
//13 14
alert("El triangulo es equilatero"); //15
} //triangulo escaleno
else if (
(a == b && a + b > c) || //16 17
(a == c && a + c > b) || //18 19
(c == b && c + b > a) // 20 21
) {
alert("El triangulo es isoceles"); //22
//Validacion de triangulo
} else if (a + b <= c || c + b <= a || a + c <= b) {
//23 24 25
alert(
//26
"El triangulo no es valido ya que la sumatoria de dos de sus
lados es menor o igual al tercer lado"
);
} else {
//27
alert("El triangulo es escaleno");
}
} else {
// 12
alert("Los numeros tienen que ser mayor que cero");
}
} else {
//8
alert("Los numeros no pueden ser decimales");
}
});
});
</script>
</head>
<body>
<div class="container">
<h3>
Programa de verificacion de triangulos equilatero, isoceles y escaleno
</h3>
<p>Digite numeros enteros</p>
<label
>Lado A
<input type="text" id="a" />
</label>
<label
>Lado B
<input type="text" id="b" />
</label>
<label
>Lado C
<input type="text" id="c" />
</label>
<button id="ejecutar">Ejecutar</button>
</div>
</body>
</html>
# de aristas = 48
# de nodos 35
Calculo de complejidad = 48 – 35 + 2 = 15
Caso 1
Descripción Valor Resultado Resultado Resultado
esperado obtenido
Triángulo Todos los Triángulo Triángulo
equilátero lados equilátero equilátero
iguales
Triángulo Dos lados Triángulo Triángulo
isósceles iguales isósceles isósceles
Caso 2
Descripción Valor Resultado Resultado Resultado
esperado obtenido
Triángulo Todos Triángulo Triángulo
equilátero los lados equilátero equilátero
iguales
Caso 3
Descripció Valor Resultad Resultad Resultado
n o o
esperado obtenido
Triángulo Todos Triángulo Triángulo
equilátero los equilátero equilátero
ángulos
iguales
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace matriz
{
class Program
{
private int[,] mat;
private int tamano;
private int contador;
private int nodoPredicado;
public void matrizTamano()
{
Console.Write("ingrese el tamaño de la matriz ");
tamano = int.Parse(Console.ReadLine());
mat = new int[tamano, tamano];
}
public void llenarMatriz()
{
for (int i = 0; i < tamano; i++)
{
for (int k = 0; k < tamano; k++)
{
Console.Write("Ingrese los datos por columnas" + "[" + i + "," + k +
"] = ");
string linea;
linea = Console.ReadLine();
mat[i, k] = int.Parse(linea);
}
}
}
public void imprimir()
{
Console.WriteLine("Esta es la matriz digitada");
for(int i = 0; i < tamano; i++)
{
for(int j = 0; j < tamano; j++)
{
Console.Write(mat[i,j] + " ");
}
Console.WriteLine();
}
Console.ReadLine();
}
public void complejidad()
{
for(int i = 0; i < tamano; i++)
{
for (int j = 0; j < tamano; j++)
{
if (mat[i,j] == 1)
{
contador++;
}
}
if (contador > 1 && contador % 2 == 0)
{
nodoPredicado++;
}
else
{
contador ‐= 1;
if (contador > 1 && contador % 2 == 0)
{
nodoPredicado++;
}
}
contador = 0;
}
Console.Write("La complejidad ciclomatica es " + (nodoPredicado + 1));
Console.ReadLine();
}
static void Main(string[] args)
{
Program pv = new Program();
pv.matrizTamano();
pv.llenarMatriz();
pv.imprimir();
pv.complejidad();
}
}
}
10. Adicione algunos objetivos de prueba adicionales que no se estudiaron en la sección
18.1.
11. Diseñe una herramienta automatizada que reconozca bucles y que los clasifique
como se indica en la sección 18.5.3.
12. using System;
13. using System.Collections.Generic;
14. using System.Linq;
15. using System.Text;
16. using System.Threading.Tasks;
17.
18. namespace matriz_bucle
19. {
20. class Program
21. {
22. string[] bucles = { "for", "while" };
23. string[] tipos = { "Es un bucle simple", "Es un bucle anidado", "Es un
bucle concatenado", "Es un bucle no estructurado" };
24. int[] tiposBucles = { 0, 0, 0, 0 };
25. int contando = 0;
26. string texto = "";
27. int contador = 0;
28. bool buclesBool = false;
29. bool boolEncontrado = false;
30.
31. public void codigo()
32. {
33. Console.WriteLine("Favor digitar el codigo a reconocer:\n");
34. string codigo = Console.ReadLine();
35.
36. for (int i = 0; i < codigo.Length; i++)
37. {
38.
39. texto += codigo[i];
40. if (texto.Length >= 0 && texto.Length <= 5)
41. {
42. for (int j = 0; j < bucles.Length; j++)
43. {
44. if ((boolEncontrado =
texto.ToUpper().Equals(bucles[j].ToUpper())))
45. {
46. buclesBool = boolEncontrado;
47. if (contador == 0)
48. {
49. contando++;
50. }
51. }
52. }
53. }
54.
55. if (codigo[i] == '{')
56. {
57. contador++;
58. texto = "";
59. }
60. else if (codigo[i] == '}')
61. {
62. contador‐‐;
63. texto = "";
64. }
65.
66. if (contador == 0 && buclesBool)
67. {
68. tiposBucles[0] = 1;
69. buclesBool = false;
70. }
71. else if (contador > 0 && buclesBool)
72. {
73. tiposBucles[0] = 0;
74. tiposBucles[1] = 2;
75. buclesBool = false;
76. }
77.
78. if (contando > 1)
79. {
80. tiposBucles[0] = 0;
81. tiposBucles[2] = 3;
82. }
83.
84. if (codigo[i] == ' ')
85. {
86. texto = "";
87. }
88.
89. }
90. }
91.
92. public void respuesta()
93. {
94. for (int i = 0; i < tiposBucles.Length; i++)
95. {
96. if (tiposBucles[i] > 0)
97. {
98. Console.WriteLine("\n" + tipos[tiposBucles[i] ‐ 1]);
99. }
100. }
101. Console.ReadKey(true);
102. }
103.
104.
105. public static void Main(string[] args)
106. {
107.
108. Program pv = new Program();
109.
110. pv.codigo();
111. pv.respuesta();
112.
113.
114.
115. }
116. }
117. }
12- ¿Las pruebas exhaustivas (incluso si es posible para programas muy pequeños)
garantizarán que el programa es 100 por ciento correcto? Justifique su respuesta.
No, incluso las pruebas exhaustivas no garantizarán que la el programa es 100 por ciento
correcto. Hay demasiadas variables a tener en cuenta. Considera lo siguiente: Pruebas de
instalación ¿Se instaló el programa de acuerdo con las instrucciones?
Pruebas de integración:
¿Funcionó el programa con todos los otros programas en el sistema sin interferencia, y lo
hizo Los módulos instalados del programa se integran y funcionan? ¿Con otros módulos
instalados?
Prueba de funcionamiento:
Pruebas unitarias: