Slides de la Sesión #1 del Querétaro Software Development Meetup
Temas:
Entendiendo los beneficios de Unit Testing y TDD
Muchas veces confundido, tildado de ser una perdida de tiempo o simplemente no entender su potencial, Unit Testing o aspectos de desarrollo como Test Driven Development es algo que aún no se adapta en proyectos o incluso en prácticas a nivel compañia, sin embargo es una parte primordial del desarrollo de software. La finalidad de la plática teórica y práctica es dar una explicación (con PHP, PHPUnit y Mockery) de Unit Testing, sus beneficios y casos reales.
Simian Army: Fault-tolerance en el sistema, para adultos
Simian army es un set de herramientas desarrolladas por Netflix para verificar que sus servidores puedan recuperarse de errores, verificar que pasa caundo la red se alenta, etc. En esta plática teórica veremos cuales son los beneficios de tener un sistema asi en producción y entender la finalidad de la librería.
2. La finalidad del Meetup es
tener un lugar donde compartir
experiencias (técnicas o no),
ideas y tendencias en la
industria de IT
Querétaro Software
Development Meetup
3. Primera Regla del Meetup:
tú hablas del Meetup
Segunda Regla del Meetup:
TÚ HABLAS del Meetup
Tercera Regla del Meetup:
TÚ HABLAS DEL MEETUP
4. Teléfonos como
en Cine
Participen Regla del ⅔ en Dudas
Términos en Inglés
Presentes y en Itálicas
Presentación disponible
en SlideShare
Guía de Acuerdo Común
Para asegurarnos de llevarnos bien, vamos aclarando unas cosas
Faltas de Ortografía y
pochismos presentes
7: 50 pm nos vamos No hacer presentaciones
para vender tu producto
5. Una presentación en el 2010 cambió mi actitud y mis
experiencias cada que participo en una presentación
o conferencia, así como las expectativas que tengo de
estas.
La triste historia de una presentación
Una presentación de GMaps
Expectativas Reales
Cuales son sus expectativas del Meetup?
7. Agosto, 2017
Unit Testing & TDD
Presentado por Osvaldo Mercado Coss
Entendiendo los Beneficios
Querétaro Software
Development Meetup
8. 8
Osvaldo Mercado Coss
Backend Developer por error
● De Guadalajara, México
● Senior Backend Developer en PSL Group
● Estudios en Multimedia, de alguna manera termine codeando en el
backend
○ Stack: LA|EMP, PHP + Framework, NodeJS & Python
○ DevOps: Vagrant + Chef
○ Test: PHPUnit, Mockery, Codeception, Selenium, Jasmine,
QUnit, RSpec, InSpec, ChefSpec, Chai/Mocha y un poco de
Behat
○ Interesado en Software Escalable, DevOps & Perros
Un poco sobre mi:
Hola!
@omercadocoss
omercadocoss@gmail.com
https://mx.linkedin.com/in/osvaldomercado
9. Agenda
Una introducción al mágico mundo del Testing
Propósitos y Beneficios de Unit Testing
Best Practices
Conclusión
TDD - Vale la Pena?
10. 10
El Mágico Mundo del Testing
Vamos entendiendo de qué estamos hablando
Unit Tests
La práctica de testear
pequeñas piezas de
código, usualmente en
funciones individuales y
aisladas, ejecutándose
una a la vez.
Integration Tests
Cuando múltiples
componentes son
testeados en un sistema
para confirmar que
pueden crear una
operación.
Functional Tests
Grupo de pruebas
específicas que
garantizan o validan un
escenario o
requerimiento del
negocio.
Acceptance Tests
Set completo de
pruebas donde se
valida lo que un usuario
puede ver,
experimentar y recibir
en base a pre-contratos
12. 12
El Mágico Mundo del Testing
Qué significa esto en el contexto de e-commerce
Unit Tests
Valida que una
función regrese
true/false
Integration Tests
Valida que un método
hace una petición a
una API mockeada
Functional Tests
Valida que un método
hace una respuesta a
una API mockeada
Y también valida su
respuesta
Acceptance Tests
Hace el flujo de pago
completo de un
usuario, desde
registrarse hasta
pagar y luego generar
un recibo que se le
manda vía email
13. Unit Testing hace que me
tarde más tiempo
Ideas equivocadas sobre Unit Testing
14. Tratar de entender, debugear,
extender y lanzar tu código
hace que todos se tarden más
tiempo
15. Unit Testing hace que cambie
mi código una vez terminado
Ideas equivocadas sobre Unit Testing
17. Unit Tests son falsas o mocks,
entonces no añaden valor
Ideas equivocadas sobre Unit Testing
18. Unit Tests son la única prueba
de que tu código funciona
19. 19
Múltiples Propósitos para Unit Testing
A veces los UTs son asociados con el único paso de deployear una aplicación
Dependency Mgmt
npm install |
composer install |
gem install |
pip install |
{string} install
Corre los Tests
Así es, se convierte en el
3er paso justo después de
completar dependency
management
Haz Lo que SeaCode Checkout
svn checkout |
git clone | cvs checkout
Unit tests no sólo es un paso para deployear aplicaciones, sino que sirven para desarrollos
existentes, ver si tu branch local funciona como debe, etc
MULTIPLESESCENARIOS
Codea | testea un nuevo
ambiente | testea un upgrade |
haz un performance test |
deployea la aplicación| testea
un merge | etc
26. 26
Beneficios Reales: Escenarios Reales
Aquí es donde personalmente veo los beneficios de tener Unit Tests
Actualizar Symfony a 3.2
Usas la version 2.8
Vez una larga lista de cambios en
el changelog y no tienes ni idea
de que tanto impacta
$ composer update symfony/symfony:3.2
$ phpunit -c app/
$ php codecept run acceptance
New Kid on the Block:
corre y rompe las pruebas
Hotfix en app crítica:
perdiendo dinero por minuto
Problema en PROD
Se necesita deployear ASAP
$ phpunit -c app/
$ php codecept run acceptance
$ git push origin hotfix/chaos_branch
$ git checkout master
$ git pull
$ git merge chaos_branch
$git push origin master
Nueva persona en el equipo
$ phpunit -c app/
(dev changes code)
$ phpunit -c app/
(dev changes code)
$ phpunit -c app/
(dev ve resultados correctos, sonríe)
$ git commit -m ‘New feature done’
27. 27
Beneficios Reales 3 Scenarios Resueltos por UTs
Aquí es donde personalmente veo los beneficios de tener Unit Tests
90k LoC se movieron de ZF2 a
Phalcon en tiempo record
En 2.5 días, 2 devs lograron
hacer un porting de ~90k LoC de
un framework de PHP a otro en
menos de 3 días, mejorando el
performance de la aplicación en
78% e incrementando la
availability en 2.5X
OS nuevo lanza warnings
Después de un exitoso composer
install, integration tests mostraron
un valor no esperado, haciendo
que una de las librerías tronara
debido a no ser compatible con
Ubuntu. Un problema de horas se
resolvió en minutos.
Aplicación de 120k LoC con
problemas constantes en
PROD/Deploy issues
La introducción del Unit Testing
al equipo de desarrollo de
QUnit y PHPUnit incrementó el
FTR de 12.5% a 75% en sólo 4
meses y pasó de hacer deploys
bi-semanales a semanales.
36. 36
Empieza con Poco
Best Practices Personales
5 cosas que he aprendido a lo largo del tiempo
100% de code
coverage es bastante
difícil de lograr y a
veces ni siquiera hace
sentido tenerlo,
empieza con poco e
increméntalo
constantemente
Haz Pruebas
Negativas
Prueba lanzamiento de
excepciones, escenarios
inválidos y datos que no
cuadran, esto hará tu
código más robusto,
seguro y realmente dará
valor a las pruebas
Define Métricas
Es 10% de test coverage
un buen lugar para
empezar? Se puede
incluso hacer? Empieza
con números básicos y
sobre las secciones
problemáticas y mejora
a partir de ahí
Mejora
el Workflow
Usa UTs de forma
automatizada y tanto
como sea posible,
inclúyelos en tu
trabajo del día a día
Expande las Pruebas
Unit tests es el primer
paso para estabilizar
un sistema, pero el
camino nunca acaba:
incluye ATs, ITs, FTs
para hacer un sistema
más sólido
37. 37
Porqué el Unit Testing Funciona?
8 puntos por el cual yo promuevo el unit testing
Mejorarás tu Código como
Desarrollador
Haces Aplicaciones
Robustas y Elásticas
Resuelves
problemas más
rápido, y
tiempo === dinero
Haces más fácil que otras
personas entiendan tu
código
Puedes cambiar, mover,
borrar código sin
preocuparte de que
rompiste algo
Empiezas el camino a
CI, CD, CD y todos esos
nombres elegantes en IT
Te forza a mejorar tu
OOP (ejemplo, al usar
Dependency Injection)
Elimina un
MONTÓN de
debugging linea por
linea
40. Lecturas Recomendadas
Recomendaciones personales acerca del tema
Twelve Benefits of Writing Unit Tests First
http://sd.jtimothyking.com/2006/07/11/twelve-benefits-of-writing-unit-tests-first/
Test-Driven PHP
https://code.tutsplus.com/series/test-driven-php--net-27482
Mockery
http://docs.mockery.io/en/latest/getting_started/simple_example.html
Continuous Integration (by Martin Fowler)
http://martinfowler.com/articles/continuousIntegration.html
Jumpstart Your PHP Testing with Codeception
https://www.toptal.com/php/php-testing-with-codeception
Running PHPUnit tests after each commit (Get started with Jenkins)
https://www.youtube.com/watch?v=68cDNUz7uro
Manage Code Coverage by Unit Tests with Sonar
http://www.sonarqube.org/manage-code-coverage-by-unit-tests-with-sonar/
Unit Tests, How to Write Testable Code and Why it Matters
https://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters
3 Git hooks for continuous integration
https://www.atlassian.com/continuous-delivery/git-hooks-continuous-
integration
Be Nice to Future You: Write Unit Tests With PHPUnit
http://slides.com/johnnorton/be-nice-to-future-you-write-unit-tests-with-phpunit#/
Unit Testing by Jeremy Lindblom
https://speakerdeck.com/jeremeamia/unit-testing
Master Symfony2 - part 2: Test Driven Development
https://gnugat.github.io/2014/08/13/master-sf2-part-2-tdd.html
PHP Quality Assurance
https://phpqa.io/index.html
Selective Unit Testing – Costs and Benefits
http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-
costs-and-benefits/
41. Agosto, 2017
Simian Army
Presentado por Osvaldo Mercado Coss
(otra vez)
Fault-tolerance en el sistema, para adultos
Querétaro Software
Development Meetup
42. Agenda
Qué es el Simian Army?
Jesus, Maria y José… truena todo?
Conclusión
Porque necesitaría el Simian Army?
Tipos de Simios
43. Simian Army consists of services
(Monkeys) in the cloud for
generating various kinds of failures,
detecting abnormal conditions, and
testing our ability to survive them.
The goal is to keep our cloud safe,
secure, and highly available.
44. Netflix uses the Simian Army to
intentionally induce failure on its
own terms, so that issues can be
identified and fixed before they
impact customers.
45. [...] a tool that randomly disables
Netflix production instances to
make sure they can survive this
common type of failure without any
customer impact. The name comes
from the idea of unleashing a wild
monkey with a weapon in your data
center
46. 46
Qué es el Simian Army?
Vamos entendiendo de qué estamos hablando
Librerías desarrolladas primordialmente
en GO, para destruir, deshabilitar y evaluar
una infraestructura de nube hosteada en
Amazon AWS, basadas en los principios de
Chaos Engineering
47. 47
Jesús, María y José… Truena Todo?
Vamos entendiendo de qué estamos hablando, primero necesitamos entender que corre y dónde
48. 48
Jesús, María y José… Truena Todo?
Vamos entendiendo de qué estamos hablando, primero necesitamos entender AWS
49. 49
Qué es el Simian Army?
Vamos entendiendo de qué estamos hablando
50. 50
Jesús, María y José… Truena Todo?
Vamos entendiendo de qué estamos hablando, primero necesitamos entender AWS
51. Netflix se ataca a sí mismo, con
la idea de mejorar sus sistemas
sin tener que esperar un
problema grande
52.
53. El primer simio, un
servicio que identifica
grupos de sistemas
(instancias) y termina
uno de ellos
Crea delays artificiales
en la capa RESTful para
simular degradación de
servicios
Limpia recursos no
utilizados en AWS:
EBS Volumes, EBS
Volume Snapshots,
and Auto Scaling
Groups
Janitor
Monkey
Verifica y determina
que una instancia sea
conforme al aplicar
una serie de reglas a
ella
Verifica la salud de
una instancia
(ejemplo: carga de
CPU) y quita aquellas
que presentan
problemas
Detecta problema de
configuración
erróneas en clientes
usando instancias en
diferentes lengujes y
character sets
Busca violaciones de
seguridad,
vulnerabilidades y
misconfiguraciones, y
termina las instancias
Simula un outage de
una zona de
availability de AWS
Tipos de Simios
Cómo aseguramos que todos nos llevemos bien y el taller tenga mayor impacto
Chaos
Monkey
Conformity
Monkey
Chaos
Gorilla
Latency
Monkey
Doctor
Monkey
10-18
Monkey
Security
Monkey
54. Tipos de Simios
Cómo aseguramos que todos nos llevemos bien y el taller tenga mayor impacto
Chaos Kong
El más destructivo del Simian
Army, destruye una region de
AWS completa.
55. Porqué Necesitaría el Simian Army?
Cuál es la razón de poner algo tan disruptivo en tus servidores
56. Porqué Necesitaría el Simian Army?
Cuál es la razón de poner algo tan disruptivo en tus servidores
57. Porqué Necesitaría el Simian Army?
Cuál es la razón de poner algo tan disruptivo en tus servidores
58. Porqué Necesitaría el Simian Army?
Cuál es la razón de poner algo tan disruptivo en tus servidores
59. Netflix lleva cerca de 6 años
disparándose en el pie, las
lecciones de infraestructura, cloud
management & troubleshooting que
tienen al momento son
inigualables en la industria
60. Lo más probable es que llegue el
apocalipsis zombie, y los que
sobrevivan seguirán disfrutando
de Orange is the New Black
63. Lecturas Recomendadas
Recomendaciones personales acerca del tema
Netflix Simian Army
https://github.com/Netflix/SimianArmy
How to deploy Chaos Monkey
https://netflix.github.io/chaosmonkey/How-to-deploy/
Principles of Chaos Engineering
http://principlesofchaos.org/
Need A Cloud Monkey? Netflix Unleashes Simian Army
https://www.wired.com/insights/2012/04/cloud-monkeys/
Netflix Tech Blog
https://medium.com/netflix-techblog
The Netflix Simian Army
https://medium.com/netflix-techblog/the-netflix-simian-army-16e57fbab116
Mini-Training: Simian Army
https://www.slideshare.net/betclicTech/betclic-mini-trainingnetflixsimianarmy