28. 1. Describe intent with tests. 2. Use the tests to validate our solution iteratively 3. Do the simplest thing that could possibly work.
29.
30.
31.
32.
33.
34. TDD is easy and optimal. 06 Create Time Create Team Create effectiveness
35.
36.
37.
38.
39. Example User Story 08 As a: Mobile phone user I want to: receive a list of 3 places to eat at less than 30min from where me and the contacts I select are So that: I can propose my contacts to meet there
40.
41. Use Acceptance Test to drive Behavior (more on how to do this in your projects in part 2) 08 Test 0.2: implement what you need as stubs and pass the tests for all thinkable scenarios (you wrote the top layer of your app as) ... result= nearUsApp.find(selectedContacts,"placeToEat",30m) if result.length<1 { showMsg("ERROR: no places found") } else { ... ui.showList(m) } (now you can use mock objects like) ... phoneDriver.getContacts(){ return ["Juan35m","Pedro20m"]} ui.selectFromList(l) { return l[0] } nearUsApp.find(contacts, kindOfPlace, timeToGetThereMax) { if (contacts[0]=="Juan35m") { return [] } return [...3 lugares...] //you must try none, 3 near, etc. } And TEST that running the application code you already wrote with different inputs (selecting different contacts) gives the expected results (no places to meet Juan35m in less tha 30min, etc.)
42.
43. Use System Tests to drive Architecture (more on how to do this in your projects in part 2) 08 How do you get all the information the past tests show you need? How do you transport it from one place to another? Are the tools you intend to use available in the all target environments? How reliable are this tools? How fast? Can you accommodate more than one alternative? Test: write tests connecting to all the needed data sources and services, check your app understands all the results and errors Test: deploy simple stress test applications using each of the tools you may use to the target environments Test: stress test the architecture implement all the communications and data handling required by the components, using stubs only to simulate errors and ensuring you return data for all the relevant scenarios So: the team is sure the tools work, the application can be deployed, what are the performance limits, etc.
44.
45. Use Integration Tests to drive Design (more on how to do this in your projects in part 2) 08 Test: write tests to define which requests and responses must support each component of your application Use simple drivers for the requests and stubs to return examples for all the possible responses So: the team can work simultaneously in various components without integration problems the contracts and dependencies for the components are clear you can refactor anything inside as long as you respect the interface (pass the tests)
46.
47. Use Unit Tests to find the best implementation (more on how to do this in your projects in part 2) 08 Test: write tests to understand what do you need of each class and method Test: write tests to show what inputs and outputs are supported So: anyone can use, extend or modify any class or component without breaking something your code is free of defects you write only what you need in some cases you can have more than one implementation (e.g. critical algorithms, drivers, transport/communication protocols)
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
2 funciones simples y una que llama a estas dos UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
2 funciones simples y una que llama a estas dos UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
Ejemplo de unit test UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
2 funciones simples y una que llama a estas dos UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
Ejemplos de Mocks
2 funciones simples y una que llama a estas dos UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
V tradicional, tipos de test y que se testea en cada uno UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
Se explica que dada una carga el sistema sigue comportandose de manera normal, es concurrente, etc. UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio
El cliente puede comprobar que la aplicacion hace lo que el espera UserStory=&quot;como titular de una cuenta quiero extaer dinero del ATM&quot; (seria bueno que las partes de la V paso a paso, desde aceptación hasta unit, mostrando que se testea en cada paso: 1. acept= una persona hace la oon peracion con/sin fondos suficientes 2. sys= concurrencia, etc. 3. Integracion= ATM Backend del banco 4. unit= modulo &quot;Cuenta&quot; con extraer(monto), depositar(monto) y getSaldo() Por ahi conviene hacer un slide para cada nivel e ir mostrando la V cada vez mas completa en el medio