Diferencia entre revisiones de «IngSoft2 1recu 28-11-22»
De Cuba-Wiki
(Página creada con «== Ejercicio 1 == Sea el siguiente programa <pre> boolean test_me(int x, int y) { 1: boolean result = false; 2: int z = 2 * y; 3: if (z == x) { // c1 4: if (x > y…») |
Sin resumen de edición |
||
Línea 1: | Línea 1: | ||
[[Archivo:Solucion zzzz.pdf|miniaturadeimagen]] | |||
== Ejercicio 1 == | == Ejercicio 1 == | ||
Sea el siguiente programa | Sea el siguiente programa |
Revisión actual - 22:21 4 oct 2023
Ejercicio 1
Sea el siguiente programa
boolean test_me(int x, int y) { 1: boolean result = false; 2: int z = 2 * y; 3: if (z == x) { // c1 4: if (x > y + 10) { // c2 5: result = true; 6: } 7: } 8: return result; }
Usando el operador de mutación AOR (modifica una comparación aritmética reemplazandola por +, -, *, /, %, **, x, y) exhibir dos mutantes tales que:
- Un mutante con un test que lo mata fuertemente (indicando la línea que cambió).
- Un mutante equivalente tal que no exista test que lo detecte fuertemente (indicando la línea que cambió). En caso de no existir, justificar.
Resolución
TODO
Ejercicio 2
Sea el siguiente programa test_me del ejercicio #1.
- Describir el árbol de cómputo del programa explorado durante la ejecución simbólica dinámica del programa
- Completar la siguiente tabla con la ejecución simbólica dinámica del programa de forma manual, indicando para cada iteración:
- El input concreto utilizado
- La condición de ruta (ie path condition) que se produce de ejecutar el input concreto, asumiendo que el valor simbólico inicial es x = x0, y = y0.
- La fórmula lógica (no es necesario escribirla en SMTLib) que se envía al demostrador de teoremas de acuerdo al algoritmo de ejecución simbólica dinámica.
- El resultado posible que podría producir un demostración de teoremas (ej Z3).
Iteración | Input Concreto | Condición de Ruta | Fórmula enviada al demostrador | Resultado posible |
---|---|---|---|---|
1 | x=0, y=0 | ... | ... | ... |
2 | ... | ... | ... | ... |
... | ... | ... | ... | ... |
Resolución
TODO
Ejercicio 3
Sea el programa test_me del ejercicio #1 y el siguiente test suite:
class TestSuite(unittest.TestCase): def test_1(self): self.assertEqual(0, test_me(0, 0)) def test_2(self): self.assertEqual(0, test_me(1, 1)) def test_3(self): self.assertEqual(0, test_me(2, 2))
- Completar la tabla con los valores de la distancia de braanch no normalizada para cada decision (tanto true como false) luego de ejecutar todo el test suite. El valor de K para la distancia de branch es 1.
c1 | c2 | |
---|---|---|
distance_true | ||
distance_false |
- ¿Cuál es el cubrimiento de líneas?
- ¿Cuál es el cubrimiento de branches?
Resolución
TODO
Ejercicio 4
Sea el siguiente programa cgi_decode:
def cgi_decode(s): # Mapping of hex digits to their integer values hex_values={ '0': 0 ,'1': 1,'2': 2 ,'3': 3 ,'4': 4 , '5': 5 ,'6': 6 ,'7': 7 ,'8': 8 ,'9': 9 , 'a': 10 ,'b': 11 ,'c': 12 ,'d': 13 ,'e': 14 ,'f': 15 , 'A': 10 ,'B': 11 ,'C': 12 ,'D': 13 ,'E': 14 ,'F': 15 , } t = "" i = 0 while i<len(s): #c1 c = s[i] if c == '+': #c2 t +=' ' elif c == '%': #c3 digit_high, digit_low = s[i + 1], s[ i + 2 ] i += 2 if digit_high in hex_values and digit_low in hex_values : #c4 y c5 v = hex_values[digit_high]*16 + hex_values[digit_low] t += chr(v) else: raise ValueError("Invalid Encoding") else: t += c i += 1 return t
Asumiendo que tenemos un boosted greybox fuzzer con exponente a=4. Sea el siguiente conjunto inicial de inputs: "hola+mundo", "hello+world", "gracias+mundo", "%12", "%AA", "%BB", "mistring".
- Indicar la energía de cada input en el conjunto inicial
- ¿Cuál es la probabilidad que el fuzzer elija el input "mistring" para mutar?
Resolución
TODO