Slide 1

Slide 1 text

Buenas Prácticas de Python en Proyectos de Desarrollo 1

Slide 2

Slide 2 text

Gary Briceño Software Senior Developer en Globant. Ingeniería Electrónica con más de 15 años de experiencia. Instructor de tecnología: RUP, UML, Java, Android and Python, por más de 10 años. https://www.linkedin.com/in/garybriceno/ @garybriceno 2

Slide 3

Slide 3 text

● Uso del README.md ● Estructura de carpetas ● Estructura del código ● Pruebas unitarias ● Pruebas de integración ● Centralización de tareas ● Uso de propiedades por ambiente ● Despliegue Agenda 3

Slide 4

Slide 4 text

4 ¿Que es una lambda? ● AWS Lambda es un servicio en la nube en el que podemos subir un código que será ejecutado en nuestro nombre en la infraestructura de Amazon Web Services.

Slide 5

Slide 5 text

Proceso de Desarrollo 5 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 6

Slide 6 text

Proceso de Desarrollo 6 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

Uso del README.md 8

Slide 9

Slide 9 text

Uso del README.md 9

Slide 10

Slide 10 text

Uso del README.md 10

Slide 11

Slide 11 text

● Una documentación a nivel del proyecto o al nivel de cada componente ayuda. ● Utilizar el archivo README.md es un buen punto de partida. ● Se puede luego mejorar e incluir una carpeta docs/ de ser necesario. ● Se debe incluir, el propósito del componente, de dónde provienen los datos, que archivos son críticos y cómo se ejecutan los test. Uso del README.md 11

Slide 12

Slide 12 text

Uso del README.md ● En el proyecto, se acordo incluir: ○ Cual es la story en Jira que da origen a la lambda. ○ Si hay cambios, incluir el histórico de cambios, así como las diferentes story que afectan a la lambda. La última story va primero. ○ De ser necesario, incluir algunos ejemplos. 12

Slide 13

Slide 13 text

Uso del README.md 13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

Estructura de Carpetas 15

Slide 16

Slide 16 text

Estructura única y un patrón de desarrollo 16

Slide 17

Slide 17 text

Proceso de Desarrollo 17 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

Estructura del Código 19

Slide 20

Slide 20 text

Estructura del código 20

Slide 21

Slide 21 text

Estructura del código 21

Slide 22

Slide 22 text

● Es una guía para el código en Python ○ Escritura de nombres, indentación, comentarios ○ https://realpython.com/python-pep8/ ● Uso de black: con esta librería cede el control de los detalles del formato, así se enfoca en el contenido. ● Uso de flake8: se utiliza para revisar la consistencia de estilos en proyectos Python Seguir un estándar: PEP8 22

Slide 23

Slide 23 text

1. Lógica de negocio: el código hace lo que el negocio espera, cumple con la US. 2. Lógica algorítmica: el código contempla los escenarios más predecibles de error, usa el mejor algoritmo para el problema que intenta resolver, está desacoplado, entre otros. 3. Lectura de código: el código es legible, se hace un buen uso de nombre de variables, constantes y clases.. nada de código espagueti, es escalable 4. Rendimiento: se hace uso de las estructuras de datos de manera correcta, se utiliza el lenguaje en su forma optima https://wiki.python.org/moin/PythonSpeed/PerformanceTips , los algoritmos son de baja complejidad. 5. Estilo: el código cumple con las reglas de estilo que establece el PEP8 https://www.python.org/dev/peps/pep-0008/ Lineamientos del Code Review 23

Slide 24

Slide 24 text

Proceso de Desarrollo 24 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 25

Slide 25 text

25

Slide 26

Slide 26 text

Pruebas Unitarias ● Uso de metodologías orientada a pruebas como TDD (Test Development Driven) ● Automatización de las pruebas con PyTest y Tox 26

Slide 27

Slide 27 text

Uso de PyTest Datos de prueba para los test Mockup de las funciones Funciones de prueba 27

Slide 28

Slide 28 text

Uso de Tox 28

Slide 29

Slide 29 text

Uso de Tox: Generación de reportes 29

Slide 30

Slide 30 text

● Las pruebas es un proceso constante ● Con cualquier cambio, se ejecutan las pruebas ● Lo mínimo al realizar cambios es asegurarse que las pruebas continúan funcionando. ● Lo deseable incrementar pruebas adicionales para los cambios realizados. Realización de Test 30

Slide 31

Slide 31 text

Proceso de Desarrollo 31 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 32

Slide 32 text

32

Slide 33

Slide 33 text

Pruebas de Integración 33

Slide 34

Slide 34 text

Pruebas de Integración 34

Slide 35

Slide 35 text

Datos de prueba para los test 35 Pruebas de Integración

Slide 36

Slide 36 text

● AWS SAM o Serverless Application Model, es un framework opensource para construir serverless en AWS. ● El comando sam local ofrece soporte para la invocación local y la prueba de funciones lambda. SAM CLI: 36

Slide 37

Slide 37 text

Pruebas de Integración: Uso de SAM 37

Slide 38

Slide 38 text

Proceso de Desarrollo 38 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 39

Slide 39 text

39

Slide 40

Slide 40 text

Centralización de tareas: librería 40

Slide 41

Slide 41 text

Ventajas El mismo código puede ser utilizado por el equipo. Se abstraen tareas al equipo de desarrollo, permitiéndoles centrarse en la lógica de negocio. Una forma similar de interactuar con los diferentes artefactos. El código crece innecesariamente. El versionamiento no es sencillo, se pueden presentar artefactos trabajando con diferentes versiones. Si debe tener un proceso de socialización de los cambios en la librería. Desventajas 41

Slide 42

Slide 42 text

Proceso de Desarrollo 42 Programador Control de Versiones Integración y Despliegue Servicios en la nube

Slide 43

Slide 43 text

Uso de propiedades por ambiente 43

Slide 44

Slide 44 text

Uso de propiedades por ambiente 44

Slide 45

Slide 45 text

45

Slide 46

Slide 46 text

● En AWS se puede generar una lambda mediante un archivo .zip Despliegue 46

Slide 47

Slide 47 text

● Estandarizar el despliegue de las lambdas create_deploy.sh Despliegue create_lambda.sh 47

Slide 48

Slide 48 text

● Utilizando Jenkins Despliegue de la lambda 48

Slide 49

Slide 49 text

Las decisiones de arquitectura deben ser socializadas con todo el equipo, se debe establecer un canal de comunicación bidireccional entre el equipo de desarrollo y el equipo de arquitectura, son parte del mismo equipo. 49

Slide 50

Slide 50 text

50