Advertisement
Guest User

pruebas_intro.md

a guest
Apr 24th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.24 KB | None | 0 0
  1. # Pruebas
  2.  
  3. -----------------
  4.  
  5. ## Introduccion
  6.  
  7. '80 , c++ std de la industria. libro de "meyers?" se establece como estandar de pruebas.
  8.  
  9. Usualmente no se habla de pruebas sino de heramientas / fwks para pruebas.
  10.  
  11. Hacer pruebas:
  12. * proceso p demostrar q el programa no tiene errores -> imposible x # de estados q tiene un pgm.
  13. * demostrar q un pgm realiza las funcs para las cuales fue construido.
  14. * ejecucion de pgms con el objeto de detectar defectos y fallas -> Meyers : proceso destructivo y "sadico" :
  15. - El q escribe el test debe hacerlo con el proposito de ROMPER el pgm a testear.
  16.  
  17. test exitoso : aquel que detecta errores
  18. test No exitoso : aquel que no los detecta
  19.  
  20. un desa debe participar de pruebas de SU software? si, debe hacerlo. requiere un cambio de actitud que nos lleve a querer romper nuestro pgm. _naturalmente somos constructivos_.
  21.  
  22.  
  23. ## Filosof y econom
  24.  
  25. Tiempo para hacer pruebas es un tiempo q esta incluido en la planif del proyecto
  26.  
  27. Invertir tiempo y $ en pruebas aumenta revenue del proyecto al largo plazo
  28.  
  29. Cuanto mas tarde detecto fallas mas caro me resulta resolverlas.
  30.  
  31. Reqs -> diseno -> codif -> pruebas -> mantenim
  32. $ $$ $$$ $$$$ $$$$$
  33.  
  34. Microsoft es un caso raro. Liberan sus productos tempranamente plagados de errores y luego hacen mantenimiento. Teniendo el mercado cautivo, podian darse el lujo de hacer esto.
  35.  
  36.  
  37. ## Principios
  38.  
  39. Antiguamente se hacia TOODO el pgm y luego se hacian pruebas , esto lleva a deteccion tardia de fallas.
  40.  
  41. 1. definir resultados esperados
  42. 2. un programador debe evitar probar su desarrollo
  43. 3. una org no debe probar sus propios desarrollos
  44. 4. revisar resultados de tests en profundidad
  45. 5. incluir entradas VALIDAS , INVALIDAS , ESPERADAS Y NO ESPERADAS
  46. 6. comprobar q el pgm no haga lo q NO SE ESPERA
  47. 7. no tirar los tests _a la basura_ (tests repetitivos , regresion)
  48. 8. no plantear esfuerzos de pruebas asumiendo q no se encontraran errores
  49. 9. % de encontrar errores en una seccion de un pgm es proporcional al # de errores ya encontrados en esa seccion.
  50. 10. testing es una tarea creativa e intelectualmente desafiante
  51.  
  52.  
  53. ## niveles de pruebas
  54.  
  55. * unitario : prueba del programador
  56. * integracion : busca detectar fallas en la integracion de dos programas desarrollados x separado
  57. * funcional : busca detectar errores en la implementacion de requerimientos. Queremos verificar que se cumplan los casos de uso. Cada caso de uso amerita a ser probado x un caso de prueba.
  58. * sistema : mismas pruebas funcionales pero teniendo en cuenta los reqs no funcionales, es decir, teniendo en cuenta el ambiente de ejecucion.
  59. * aceptacion : pruebas q acuerdo con el usuario para que el me acepte el proyecto como TERMINADO.
  60.  
  61. ## tipos de pruebas
  62.  
  63. * facilidad
  64. * volumen : probar con muchos datos
  65. * estres : sobrecargar ambiente
  66. * usabilidad
  67. * seguridad
  68. * velocidad
  69. * fiabilidad
  70. ...
  71.  
  72.  
  73. ## ciclo de desarrollo y pruebas
  74.  
  75. Las pruebas del codigo y arq deben hacerse desde el inicio del proyecto.
  76.  
  77. Testers deberian trabajar con los desarrolladores en la definicion de la arq y diseno.
  78.  
  79. _Sacarle de las manos la tarea de ejecutar las pruebas a mano a los testers_. Automatizar la ejecucion de las pruebas lo mas posible.
  80.  
  81.  
  82. ## Pruebas de caja negra
  83.  
  84. Solo tengo acceso al sistema mediante sus inputs y outputs.
  85.  
  86. Es imposible probar todas las entradas posibles, entonces juego con __clases de equivalencia__. Divido las posibles entradas en
  87. segmentos, y pruebo como entradas los segmentos.
  88.  
  89. Ej: si como input se aceptan numeros enteros, puedo crear clases equivalencia NUMEROS_VALIDOS (1 al 99) y NUMEROS_INVALIDOS (menor a uno y mayor a 99).
  90.  
  91. ## Pruebas de caja blanca
  92.  
  93. tengo acceso al codigo.
  94.  
  95. Todos los caminos del codigo deben estar probados. Debemos tener pruebas q pasen x todas las bifurcaciones.
  96.  
  97. Si un if tiene 2 condiciones de entrada posibles (con un Or) , debemos probar todas las entradas al cuerpo del if.
  98.  
  99. Probar por
  100. * caminos
  101. * decisiones
  102. * condiciones : hacemos pruebas con valores limites y sus alrededores (inmed. superior e inferior).
  103.  
  104. _Debemos establecer un criterio base al escribir los tests_ :
  105. * caminos
  106. * decisiones
  107. * condiciones
  108. * valores limite
  109.  
  110. ## Criterios de completitud de pruebas
  111.  
  112. 1. parar cuando se agoto el tiempo asignado (en la planificacion).
  113. 2. parar cuando los tests dan todos los resultados esperados.
  114. 3. Si no se detectan errores despues de N tiempo y todos los casos son OK entonces terminamos.
  115.  
  116. Regla usual: 50% del tiempo de codificacion se dedica a probar el codigo.
  117.  
  118.  
  119. ## Propiedades
  120.  
  121. 1. Repetitivos : tengo q poder correrlos muchas veces facilmente. que sea repetitivo de forma __sistematica__, con poco esfuerzo.
  122. 2. Criterio de diseno basado en las pruebas.
  123. 3. Que nuestros tests sean __atomicos__: _que el test pruebe una sola cosa_. Queremos aislar las fuentes de error. _Un test q no sea atomico no detecta_.
  124. 4. Independientes : la secuencialidad no importa. los tests no deben afectarse entre si.
  125.  
  126.  
  127. ## Sistematizacion
  128.  
  129. Escenario de ejecucion de pruebas:
  130. * Setup : Inicializo el SUT
  131. * Exercise : Ejecuto cosas sobre el SUT
  132. * Verify : obtener estado (del SUT) y compararlo con valores validos
  133. * Teardown : libero recursos del SUT
  134.  
  135.  
  136.  
  137. Principios de sistematizacion:
  138. * Escribir tests primero
  139. * Diseñar para testeabilidad
  140. * Comunique el intento para facilitar lectura y mantenimiento de los tests
  141. * No modificar el SUT para correr alguna prueba en particular (para luego "dejarlo como estaba antes")
  142. * Mantener los tests independientes
  143. * Aislar el SUT
  144. * Minimizar el codigo no probado
  145. * Separar logica de prueba del codigo productivo
  146. ...
  147.  
  148.  
  149. SETUP--initialize->
  150.  
  151. EXERCISE--call---->
  152. <=> SUT <=> DOC
  153. VERIFY<--getState-->
  154.  
  155. TEARDOWN
  156.  
  157. _generar las condiciones iniciales debe ser facil de hacerlo_
  158.  
  159.  
  160.  
  161. Se puede utilizar herencia para crear subclases tipo prueba de clases de negocio.
  162. Ejemplo:
  163.  
  164. Foo
  165. ^
  166. |
  167. FooForTest
  168.  
  169. FooForTest tiene sobreescribe logica de Foo agregando contadores y demas para verificar las invocaciones a Foo.
  170.  
  171. Este es el principio del patron _espia_.
  172.  
  173.  
  174.  
  175. -----------------
  176.  
  177. ## Glosario
  178.  
  179. pgm : programa
  180. fwk : framework
  181. sut : system under test
  182. doc : dependent on component. Es un componente del cual el sut depende
  183. fixture : condiciones del test
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement