DEVASC Module 3
DEVASC Module 3
Desarrollo de Software
Materiales del Instructor
Para facilitar el aprendizaje, las siguientes características dentro de la GUI pueden ser
incluidas en este módulo:
Características Descripción
Laboratorios prácticos Laboratorios diseñados para trabajar con equipos físicos.
Auto-evaluaciones que integran conceptos y habilidades aprendidas a lo largo
Cuestionarios de módulo
de los temas presentados en el módulo.
Resumen del módulo Resumiendo brevemente el contenido del módulo.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 3
Verifique su conocimiento.
• Verificar las actividades de comprensión que son diseñadas para permitir que los estudiantes
determinen si están entendiendo el contenido y puedan continuar, o si ellos necesitan
repasar.
• Las actividades de "Verifique su conocimiento" no afectan las calificaciones de los alumnos.
• No hay diapositivas separadas para estas actividades en la presentación de PowerPoint. Se
enumeran en el área de notas de la diapositiva que aparece antes de estas actividades.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 4
Módulo 3: Actividades
¿Qué actividades están asociadas con este módulo?
N.° de
Tipo de actividad Nombre de la actividad ¿Opcional?
página
3.1.12 Laboratorio Explore las herramientas de desarrollo de Phyton Recomendado
3.3.11 Laboratorio Control de versión de software con Git Recomendado
3.4.6 Laboratorio Explorar clases de Python Recomendado
3.5.7 Laboratorio Crear una prueba unitaria de Python Recomendado
3.6.6 Laboratorio Analizar diferentes tipos de datos con Python Recomendado
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 5
Módulo 3: Mejores prácticas
Antes de enseñar el Módulo 3, el instructor debe:
• Revisar las actividades y evaluaciónes para este módulo.
• Tratar de incluir la mayor cantidad de preguntas que sean posibles, con el fin de mantener a los
estudiantes entretenidos con la presentación.
Tema 3.1
• Pregunte a los alumnos qué entienden del término Desarrollo de Software.
• Pregunte a los alumnos si han oído hablar del ciclo de vida del desarrollo del software. Pídales que
compartan su conocimiento con la clase.
• Discuta las diversas metodologías de desarrollo de software. Divida la clase en grupos y lleve a cabo una
discusión sobre qué metodología es la mejor en el escenario actual de Desarrollo de Software.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 6
Módulo 3: Mejores prácticas (Cont.)
Tema 3.2
• Pida a los alumnos que se refieran al libro "Patrones de diseño - Elementos del software reutilizable
orientado a objetos" de la banda de los cuatro (GoF) para obtener más información sobre los patrones de
diseño de software.
• Proporcione a los alumnos más información sobre los dos patrones de diseño más utilizados: el patrón de
diseño Observer (un patrón de diseño de comportamiento) y Model-View-Controller (MVC).
Tema 3.3
• Pregunte a los alumnos si han oído hablar de los sistemas de control de versiones. Discuta el tema en
detalle.
• Discuta Git y GitHub.
Tema 3.4
• Pida a los alumnos que compartan su conocimiento de los métodos, funciones, módulos y clases.
• Pregunte a los alumnos, ¿qué entienden del término Código Limpio? Pida a los alumnos que discutan y
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 7
planteen razones por las que los desarrolladores deben escribir código limpio.
Módulo 3: Mejores prácticas (Cont.)
Tema 3.5
• Discuta la importancia de revisar el código.
• Discuta los diferentes tipos de pruebas en detalle.
• Explique qué es el desarrollo impulsado por pruebas.
Tema 3.6
• Discuta sobre el Formateo de Datos
• Pregunte a los alumnos si han oído hablar de XML, JSON y YAML. Pídales que compartan sus
conocimientos sobre el tema.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 8
Módulo 3: Diseño y
Desarollo de Software.
DevNet Associate v1.0
Objetivos del módulo
Título del Módulo: Diseño y Desarrollo de Software
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 10
3.1 Desarrollo de software
• SDLC es más que una codificación y también incluye requisitos de recopilación, creación
de una prueba de concepto, pruebas y corrección de errores.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 12
Diseño y Desarrollo de Software
Ciclo de Vida de Desarrollo de Software (SDLC)
• SDLC es el proceso de desarrollo de software, partiendo de una idea y terminando con la entrega.
Este proceso consta de seis fases. Cada fase toma la información de los resultados de la fase
anterior.
• SDLC es el proceso de desarrollo de
software, partiendo de una idea y
terminando con la entrega. Este proceso
consta de seis fases. Cada fase toma la
información de los resultados de la fase
anterior.
• Aunque los métodos de cascada todavía
se utilizan ampliamente hoy en día,
gradualmente está siendo reemplazado
por métodos más adaptables y flexibles
que producen mejor software, más rápido,
con menos dolor. Estos métodos se
conocen colectivamente como "Desarrollo
ágil". ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 13
Diseño y Desarrollo de Software
Requerimientos y fase de Análisis
La fase de requisitos y análisis consiste en explorar la situación actual de las partes interesadas, las
necesidades y limitaciones, la infraestructura actual, etc., y determinar el problema que debe resolver
el software.
Después de reunir los requisitos, el equipo analiza los resultados para determinar lo siguiente:
• ¿Es posible desarrollar el software de acuerdo con estos requisitos, y se puede hacer según el
presupuesto?
• ¿Existen riesgos para el programa de desarrollo y, en caso afirmativo, cuáles son?
• ¿Cómo se probará el software?
• ¿Cuándo y cómo se entregará el software?
Al final de esta fase, el método clásico de cascada sugiere la creación de un documento de
especificación de requisitos de software (SRS), que establece los requisitos y el alcance del software,
y lo confirma meticulosamente con las partes interesadas.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 14
Diseño y Desarrollo de Software
Fases de diseño e Implementación
Diseño Implementación
• Durante la fase de diseño, los • La fase de implementación también
arquitectos y desarrolladores de se denomina fase de codificación o
software diseñan el software basado desarrollo.
en el SRS proporcionado. • Como todos los componentes y
• Al final de la fase, el equipo crea módulos se construyen durante esta
documentos de diseño de alto nivel fase, es la fase más larga del ciclo de
(High-Level Design-HLD) y diseño de vida.
bajo nivel (Low-Level Design-LLD). • Al final de la fase, el código funcional
que implementa todos los requisitos
del cliente está listo para ser
probado.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 15
Diseño y Desarrollo de Software
Fases de prueba, Implementación y Mantenimiento
Prueba Implementación Mantenimiento
• En esta fase, el código se • Durante esta fase, el • Durante la fase de
instala en el entorno de software se instala en el mantenimiento, el equipo:
prueba entorno de producción. • Proporciona soporte a los
• Pruebas funcionales, Se • Al final de la fase, el gestor clientes
realizan pruebas de de productos libera la pieza • Corrección de errores
Integración, pruebas de final del software a los encontrados en
rendimiento y de seguridad. usuarios finales. producción
• Las pruebas continúan hasta • Trabaja en mejoras de
que todos los códigos están software
libres de errores y pasan • Reúne nuevas solicitudes
todas las pruebas. Al final de del cliente
esta fase, un software de alta • Al final, el equipo trabaja en la
calidad, libre de errores, está
siguiente versión del software.
listo para la producción.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 16
Diseño y Desarrollo de Software
Metodologías de Desarrollo de Software
• Una metodología de desarrollo de software también se conoce como modelo de ciclo de
vida de desarrollo de software.
• Las tres metodologías más populares son:
• Waterfall (Cascada)
• Agile (Ágil)
• Lean (Inclinarse)
• El tipo de metodología que se utiliza depende de:
• Tipo del proyecto
• Duración del proyecto
• Tamaño del equipo.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 17
Diseño y Desarrollo de Software
Desarrollo de software Cascada
• El modelo original de cascada fue creado por Winston W. Royce.
• Su modelo original constaba de siete fases:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 18
Diseño y Desarrollo de Software
Desarrollo de Software Ágil
• El método ágil es flexible y centrado en el cliente.
• Un grupo de 17 desarrolladores de software inventó el Manifiesto para el desarrollo ágil de software,
también conocido como el Manifiesto ágil, en 2001. Según el Manifiesto ágil, los valores de Ágil son:
• Individuos e interacciones sobre procesos y herramientas
• Software de trabajo sobre documentación completa
• Colaboración con clientes en la negociación de contratos
• Responder al cambio sobre el seguimiento de un plan
• El manifiesto ágil enumera 12 principios diferentes:
Principios de Manifiesto Ágil
Enfoque al cliente. Colaboración Software de trabajo Simplicidad
Aceptar el cambio y adaptarse Equipos Trabajar a un ritmo Equipos organizados
motivados sostenible
Entrega frecuente de software de Comunicaciones Entorno Ágil Mejoramiento de
trabajo cara a cara manera continua
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 19
Diseño y Desarrollo de Software
Métodos Ágiles
• Los métodos ágiles más populares son:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 20
Diseño y Desarrollo de Software
Métodos Agiles
• Sprints
• Un sprint es un período de tiempo específico, generalmente entre 2-4 semanas, durante el cual,
cada equipo asume tantas tareas (también conocidas como historias de usuario) como sientan
que pueden realizar. Cuando el sprint termine, el software debe estar entregable y funcionando.
• La duración del sprint se determina antes de que comience el proceso y rara vez debería
cambiar.
• Retroceso
• El trabajo acumulado consta de todas las características del software, en una lista de
prioridades.
• Historias de usuarios
• Una historia de usuario es una simple declaración de lo que un usuario (o un rol) necesita y por
qué.Cada historia de usuario debe ser lo suficientemente pequeña como para que un solo
equipo pueda terminarla en un sprint.
• La plantilla sugerida para una historia de usuario es: ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 21
Diseño y Desarrollo de Software
Métodos Agiles
Equipos de Scrum
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 22
Diseño y Desarrollo de software
Desarrollo de Software Lean
• El desarrollo de software Lean se basa en los principios de Manufactura Lean, que se
centran en minimizar los residuos y maximizar el valor para el cliente.
• Los siete principios de Lean, dados en el libro "Lean Software Development: An Agile
Toolkit", son los siguientes:
• Eliminar residuos
• Amplificar el aprendizaje
• Decidir lo más tarde posible
• Entrega lo más rápido posible
• Motivar al equipo
• Integridad de compilación
• Optimizar la totalidad
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 23
Diseño y Desarrollo de Software
Desarrollo de Software Lean (Cont)
Eliminar Residuos
• Es el principio mas fundamental de Lean.
• Hay siete desperdicios de desarrollo de software:
• Trabajo parcialmente hecho
• Procesos adicionales
• Características adicionales
• Cambio de tareas
• En espera
• Movimiento
• Defectos
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 24
Diseño y Desarrollo de Software
Lean Software Development (Cont)
Amplificar el aprendizaje con Sprints cortos
• Para poder afinar un software, debe haber repeticiones cortas frecuentes de software de trabajo. Esto permite
lo siguiente:
• Los desarrolladores aprenden más rápido
• Los clientes pueden dar sus comentarios antes
• Las funciones se pueden ajustar para que aporten más valor a los clientes
Decidir lo más tardar posible
• Cuando hay incertidumbre, lo mejor es retrasar la toma de decisiones hasta lo más tarde posible en el
proceso. Esto se debe a que es mejor basar las decisiones en hechos en lugar de opiniones o
especulaciones.
Entregar lo más rápido posible
Construir integridad en
• La integridad del software se da cuando el software aborda las necesidades del cliente y mantiene la
utilidad para el cliente.
Optimizar la totalidad
• El software debe construirse de forma [Link] valor del software se verá afectado si cada experto
se centra únicamente en su experiencia y no considera las ramificaciones de sus decisiones sobre el
resto del software.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 26
Laboratorio de desarrollo y de software
Explorar las herramientas de desarrollo de Python
En esta práctica de laboratorio se cumplirán los siguientes objetivos:
• Parte 1: Iniciar la Maquina Virtual (Virtual Machine) DEVASC
• Parte 2: Revisar la instalación de Python
• Parte 3: Entornos virtuales PIP y Python
• Parte 4: Compartir su entorno virtual
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 27
3.2 Patrones de diseño de
software
• En 1994, Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides (conocido como la Gang of Four
(GoF)) publicaron un libro llamado Design Patterns - Elements of Reusable Object-Oriented Software.
Los patrones identificados son:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 29
Patrones de Diseño de Software
Los patrones de diseño originales
• La Pandilla de los Cuatro dividió los patrones en tres categorías principales:
• Creacional
• Estructurales
• Relativos al comportamiento
• Ellos Enumeraron 23 patrones de diseño.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 30
Patrones de Diseño de Software
Diseño de observador (Observer design pattern)
• El patrón de diseño de observador es un diseño de
notificación de suscripción que permite a los
objetos recibir eventos cuando hay cambios en un
objeto que están observando.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 35
Sistemas de Control de Versiones
Tipos de Sistemas de Control de Versiones(Cont.)
Sistema de Control de Versiones Distribuidas
(Distributed Version Control System-DVCS)
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 36
Sistemas de Control de Versiones
Tipos de Sistemas de Control de Versiones(Cont.)
Sistema de Control de Versiones Distribuidas
(Distributed Version Control System-DVCS)
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 37
Sistemas de Control de Versiones
Git
• Git es una implementación de código abierto de un sistema de control de versiones distribuido que
actualmente es la última tendencia en desarrollo de software.
• Un cliente Git debe estar instalado en un equipo cliente. Está disponible para macOS, Windows y
Linux/Unix.
• Una diferencia clave entre Git y otros sistemas de control de versiones es que Git almacena datos
como instantáneas en lugar de diferencias (el delta entre el archivo actual y la versión anterior).
• Si el archivo no cambia, Git utiliza un enlace de referencia al último archivo instantáneo del sistema en
lugar de tomar una instantánea nueva e idéntica.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 38
Sistemas de control de versiones
Git (Cont.)
• Git está organizado por 3 -
tres etapas y tres estados.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 42
Sistemas de Control de Versiones
Comandos de Git
Configuración de Git
• Git proporciona un comando git status para obtener una lista de archivos que tienen
diferencias entre el directorio de trabajo y la rama principal.
• Comando: git status
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 45
Sistemas de Control de Versiones
Agregar y Quitar archivos
Adición de archivos al área de ejecución
• Command: git add
• Este comando se puede usar más de una vez antes
de que se actualice el repositorio de Git (usando
commit).
• Solo los archivos especificados en el comando git se
pueden agregar al área de ejecución
• Para agregar un solo archivo al área de ejecución:
$ git add <file path>
• Para agregar todos los archivos modificados al área ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
• Opción 2:Esta opción es un proceso de dos pasos. Primero use el comando regular del
sistema de archivos para eliminar los archivos y luego agregue el archivo a la ejecución
usando el comando Git.
$ rm <file path 1>...
<file path n>$ git add <file path 1>... <file path n>
Este proceso de dos pasos es equivalente a usar elgit rm <file path 1>... <file path
n>comando. El uso de esta opción no permite que el archivo se mantenga en el directorio
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
de trabajo. confidencial de Cisco. 48
Sistemas de Control de Versiones
Actualizando Repositorios
Actualización del repositorio local con
los cambios en el área de ejecución
Comando: git commit
• Este comando combina todos los
cambios de contenido en el área de
ejecución en una sola confirmación y
actualiza el repositorio local de Git.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 52
Sistema de Control de Versiones
Características de las Ramificaciones
Creación y Eliminación de una Rama
Opción 1: El comando git branch para enumerar, crear o eliminar una rama.
$ git branch <parent branch> <branch name>
Opción 2: comando git checkout para cambiar las ramas actualizando el directorio de trabajo con el
contenido de la rama.
$ git checkout -b <parent branch> <branch name>
Eliminación de una rama
• Para eliminar una rama, utilice el siguiente comando:
$ git branch -d <branch name>
Obtener una lista de todas las ramas
• Para obtener una lista de todas las ramas locales, utilice el siguiente comando:
$ git branch O$ git branch —list
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 53
Sistema de Control de Versiones
Características de las Ramificaciones(cont.)
Fusión de ramas
• Las ramas difieren unas de
otras cuando se modifican
después de crearlas.
• Cuando Git fusiona la rama,
toma los
cambios/confirmaciones de la
rama de origen y la aplica a la
rama de destino.
• Durante una fusión, sólo se
modifica la rama de destino.
• La rama de origen está intacta
y sigue siendo la misma.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 54
Sistema de Control de Versiones
Características de las Ramificaciones(cont.)
Fusión de avance rápido
• Una fusión de avance rápido es cuando el algoritmo de Git puede aplicar los
cambios/confirmaciones de las ramas de origen a la rama de destino automáticamente y sin
ningún conflicto.
Combinar conflictos
• Un conflicto de fusión es cuando Git no puede realizar una fusión rápida porque no sabe
cómo aplicar automáticamente los cambios de las ramas juntas para los archivos.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 55
Sistema de Control de Versiones
Características de las Ramificaciones(cont.)
Realización de la combinación
• Git proporciona un comando git merge para unir dos o más ramas juntas.
• Comando: git merge
• Para fusionar una rama en la sucursal o repositorio actual del cliente, utilice el siguiente
comando:
$ git merge <branch name>
• Para fusionar una rama en una rama que no sea la sucursal o repositorio actual del
cliente, utilice el siguiente comando:
$ git checkout <target branch name>
$ git merge <source branch name>
• Para fusionar más de una sucursal en la sucursal o repositorio actual del cliente, use el
siguiente comando:
$ git merge <branch name 1>...<branch name n> ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 56
Sistema de Control de Versiones
Archivos .diff
¿Qué es un [Link]?
• Un [Link] se utiliza para mostrar cómo han cambiado dos versiones diferentes de un
archivo.
• Mediante el uso de símbolos específicos, este archivo puede ser leído por otros sistemas
para interpretar cómo se pueden actualizar los archivos.
• LosSímbolo
símbolos y significados en un archivo diff unificado son:
Significado
+ Indica que se ha agregado la línea.
- Indica que se ha eliminado la línea.
/dev/null Muestra que se ha agregado o eliminado un archivo.
o "En blanco" Proporciona líneas de contexto alrededor de líneas cambiadas.
@@ Indicador visual de que se está iniciando el siguiente bloque de información. Dentro de
los cambios para un archivo, puede haber varios.
index Muestra las confirmaciones comparadas.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 57
Sistemas de Control de Versiones
Laboratorio-Control de versiones de software con Git
• En esta práctica de laboratorio se cumplirán los siguientes objetivos:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 58
3.4 Codificación básica
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 60
Codificación básica
Código limpio
• Los códigos limpios son el resultado de que los desarrolladores intenten hacer que su código
sea fácil de leer y entender para otros desarrolladores.
• Ellos siguen algunos principios comunes relacionados con la formación, la organización, la
intuición de los componentes, el propósito y la reutilización.
• Los códigos limpios enfatizan la estandarización, la organización adecuada, la modularidad,
proporcionando comentarios en línea y otras características que ayudan a que el código sea
autodocumentado.
Razones por las que los desarrolladores quieren escribir código limpio
• El código limpio es más fácil de entender, más compacto y mejor organizado.
• El código limpio, al ser modular, tiende a ser más fácil de probar utilizando métodos
automatizados como marcos de pruebas unitarias.
• El código limpio, estandarizado, es más fácil de escanear y verificar utilizando herramientas
automatizadas.
• Simplemente se ve mejor. ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 61
Codificación básica
Métodos y Funciones
• Los métodos y funciones son bloques de código que realizan tareas cuando se ejecutan.
• A continuación se presentan algunas prácticas recomendadas estándar para determinar si un
fragmento de código debe encapsularse (en un método o función):
• El código que realiza una tarea discreta, incluso si ocurre una sola vez, puede ser un
candidato para la encapsulación.
• El código de tarea que se usa más de una vez probablemente debería encapsularse.
• Los métodos y funciones se pueden ser escritas y ejecutadas tantas veces como sea necesario.
• Si se usan correctamente, los métodos y funciones simplificarán el código y reducirán el
potencial de errores.
• Sintaxis de una función en Python:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 62
Codificación básica
Métodos y Funciones
Argumentos y parámetros
• Los argumentos y parámetros añaden flexibilidad a los métodos y funciones.
• La sintaxis de una función usando argumentos y parámetros en Python:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 63
Codificación básica
Métodos y Funciones
Declaraciones de devolución
• La instrucción return hace referencia al valor de retorno que se especificamediante la palabra clave
return (regresar) seguido de una variable o expresió[Link] sentencia return finaliza la ejecución de una
función y devuelve el control a la función de llamada.
• Cuando se ejecuta una sentencia return, se devuelve el valor de la sentencia return y cualquier código
debajo de ella se omite.
• Sintaxis de una función con una declaración de retorno en Python:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 64
Codificación básica
Métodos y Funciones
Métodos VS Funciones
Métodos Funciones
Los métodos son bloques de código Las funciones son bloques de código
asociados a un objeto, normalmente para la independientes.
programación orientada a objetos.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 65
Codificación básica
Módulos
• Los desarrolladores suelen utilizar módulos para dividir un proyecto grande en partes más pequeñas
para que el código se pueda leer y entender fácilmente.
• Un módulo está empaquetado como un único archivo y se espera que funcione de forma independiente.
• A continuación se muestra un módulo con un conjunto de funciones guardadas en un script llamado
[Link].
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 66
Codificación básica
Clases
• En la mayoría de los lenguajes de programación de orientación de objetos (OOP), y en Python,las
clases son un medio de agrupar datos y funcionalidad. Cada declaración de clase define un nuevo tipo
de objeto.
• Las clases pueden tener variables de clase y variables de objeto.
• Se pueden definir nuevas clases, basadas en clases ya definidas previamente, de modo que hereden
las propiedades, los miembros de datos y la funcionalidad (métodos).
• Una clase puede ser instanciada (creada) varias veces, y cada una con sus propios valores de atributos
de datos específicos de objeto.
Nota: A diferencia de otros lenguajes de OOP, en Python, no hay medios para crear variables de clase
'privadas' o métodos internos. Sin embargo, por conveniencia, los métodos y variables con un solo
guión bajo precedente se consideran privados y no deben utilizarse o referenciarse fuera de la clase.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 67
Codificación básica
Laboratorio - Python Revisión de Clases
En esta práctica de laboratorio se cumplirán los siguientes objetivos:
• Parte 1: Inicie la máquina virtual (Virtual Machine) de DEVASC.
• Part 2: Revisar Funciones, Métodos y Clases
• Part 3: Definir una función
• Part 4: Definir una clase con Métodos
• Part 5: Revisar the [Link] Script
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 68
3.5 Prueba y revisión del
código
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 70
Revisión de código y pruebas
Tipos de revisiones de código
Los tipos más comunes de procesos de revisión de código
incluyen:
• Revisión formal del código: Los desarrolladores
tienen una serie de reuniones para revisar toda la base
de código.
• Revisión de código basada en cambios: También
conocido como una revisión de código asistida por
herramientas, revisa el código que se cambió como
resultado de un error, historia de usuario, función,
confirmación, entre otras.
• Revisión de código sobre el hombro: Un revisor
mira por encima del hombro del desarrollador que
escribió el código y proporciona comentarios.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 72
Revisión de código y Prueba.
Unidad de Prueba
• Pruebas funcionales detalladas de pequeños trozos de código (líneas, bloques, funciones, clases y otros
componentes aislados) se denomina Pruebas Unitarias.
• Estos marcos de prueba son software que le permite hacer afirmaciones sobre condiciones comprobable y
determinar si estas afirmaciones son válidas en un punto de ejecución.
• Ejemplos de framework para Python:
PyTest Unittest
• PyTest es práctico. Ejecuta automáticamente • El framework unittest exige una sintaxis diferente
cualquier script que comience con test_ o termine a PyTest
con _test.py y dentro de esos scripts, ejecutan • Para el unittest, debe subclasificar la clase
automáticamente cualquier función que comience TestCase incorporada y probar anulando sus
con 'test_' o 'tests_'. métodos incorporados o agregando nuevos
• Podemos probar únicamente un fragmento de métodos cuyos nombres comienzan con 'test_'.
código copiándolo en un archivo, importando
pytest, agregando funciones de prueba con el
nombre apropiado, guardando el archivo bajo un
nombre de archivo que también comienza con ©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
'tests_, 'y ejecutándolo con PyTest. confidencial de Cisco. 73
Revisión de código y pruebas
Pruebas de integración
• Las pruebas de integración
garantizan que todas las
unidades individuales encajen
correctamente para realizar
una aplicación completa.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 74
Revisión de código y pruebas
Desarrollo Impulsado por Pruebas (Test-Driven Development -TDD)
• Si desea probar para validar el diseño de la aplicación a la luz de los requisitos, implica que
debe escribir el código de prueba antes de escribir el código de la aplicación.
• Después de haber expresado los requisitos en el código de prueba, puede escribir el código
de aplicación hasta que pase las pruebas que ha creado en el código de prueba.
• El patrón básico de TDD es un proceso de repetición de cinco pasos:
• Crear una nueva prueba.
• Ejecutar pruebas para ver si alguna falla por razones inesperadas.
• Escribir el código de la aplicación para pasar la nueva prueba.
• Ejecutar pruebas para ver si alguna falla.
• Refactorizar y mejorar el código de la aplicación.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 75
Análisis de código y pruebas
Laboratorio - Crear una prueba unitaria de Python
En esta práctica de laboratorio se cumplirán los siguientes objetivos:
• Parte 1: Iniciar la máquina virtual (Virtual Machine) de DEVASC.
• Part 2: Explorar las opciones en la unittest del framework
• Part 3: Probar un función de Phyton con uittest.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 76
3.6 Comprensión de los
formatos de datos
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 78
Entendiendo Formatos de Datos
XML
• Extensible Markup Language (XML) es una metodología genérica para envolver datos
textuales en etiquetas simétricas para indicar semántica.
• Es un derivado de Structured Generalized Markup Language (SGML), y también el padre
de HyperText Markup Language (HTML).Los nombres de archivo XML suelen terminar en
".xml"
Un ejemplo de documento XML
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 79
Descripción de los formatos de datos
XML (Cont.)
• Cuerpo del documento XML: Excepto las dos primeras líneas de un documento XML, el resto
del documento se considera como el cuerpo.
• Nombres de etiquetas definidos por el usuario: Los nombres de etiquetas XML son
definidos por el usuario. Si está redactando XML para su propia aplicación, elija nombres de
etiquetas que expresen claramente el significado de los elementos de datos, sus relaciones y
jerarquía.
• Codificación especial de caracteres: Los datos se transmiten en XML como texto legible.
• Prólogo XML: El prólogo XML es la primera línea de un archivo XML.
• Comentarios en XML: Los archivos XML pueden incluir comentarios, utilizando la misma
convención de comentarios utilizada en los documentos HTML.
• Atributos XML: XML permite incrustar atributos dentro de etiquetas para transmitir información
adicional.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 80
Comprendiendo los Formatos de Datos
XML(Cont.)
• XML Espacio de Nombres
• Los espacios de nombres son definidos por el IETF y otras autoridades de Internet,
organizaciones y otras entidades, y sus esquemas se alojan normalmente como
documentos públicos en la Web.
• Los espacios de nombres se identifican mediante nombres uniformes de recursos
(Uniform Resource Names-URI) para hacer que los documentos persistentes sean
accesibles sin que el buscador tenga que preocuparse por su ubicación.
• El ejemplo de código siguiente muestra el uso de un espacio de nombres, definido
como el valor de un atributo xmlns, para afirmar que el contenido de una llamada a
procedimiento remoto XML debe interpretarse de acuerdo con el estándar NETCONF
1.0 heredado.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 81
Comprendiendo los Formatos de Datos
XML(Cont.)
• Interpretación de XML
• En el ejemplo de espacios de nombres XML, la estructura se representa como una lista
o array unidimensional (llamada 'instancias') de objetos (cada uno identificado como una
'instancia' mediante etiquetas de corchetes). Cada objeto de instancia contiene dos
pares clave-valor que indican un ID de instancia único y un tipo de servidor de Maquina
Virtual.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 82
Entendiendo Formatos de Datos
JSON
• JSON, o JavaScript Object Notation, es un formato de datos derivado de la forma en que se
escriben literales de objetos complejos en JavaScript.
• Los nombres de archivo JSON suelen terminar en ".json".
• A continuación, se muestra un archivo JSON de ejemplo, que contiene dos valores que son
cadenas de texto, uno es un valor booleano y dos son matrices(Array):
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 83
Comprendiendo los formatos de datos
JSON (Cont.)
• Tipos de datos básicos JSON: Los tipos de datos básicos JSON incluyen números,
cadenas, booleanos o nulos.
• Objetos JSON: Al igual que en JavaScript, los objetos individuales en JSON comprenden
pares clave/valor, que pueden estar rodeados por llaves, individualmente.
• Mapas y listas JSON: En este caso, cada par clave/valor individual no necesita su propio
conjunto de corchetes, pero todo el objeto sí.puede expresar matrices ordenadas por
JavaScript (o 'listas') de datos u objetos.
• Sin comentarios en JSON: A diferencia de XML y YAML, JSON no admite ningún tipo de
método estándar para incluir comentarios el código.
• Espacio en blanco insignificante: Elespacio en blanco en JSON no es significativo, y en los
archivos se puede emplear sangría utilizando tabs o espacios como se prefiera, o no en
absoluto.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 84
Comprendiendo el Formato de Datos
YAML
• YAML Ain't Markup Language (YAML) es un superconjunto de JSON diseñado para una
legibilidad humana aún más fácil.
• Como superconjunto de JSON, los analizadores YAML generalmente pueden analizar
documentos JSON (pero no viceversa).
• Por lo tanto, YAML es mejor que JSON en ciertas tareas, incluida la capacidad de incrustar
JSON directamente (incluidas las comillas) en archivos YAML.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 85
Comprensión de los formatos de datos
YAML (Cont.)
• Estructura de Archivos (File Structure) YAML: Los archivos YAML se abren
convencionalmente con tres guiones (— solos en una línea) y terminan con tres puntos (...
igualmente).
• Tipos de Datos(Data Types) YAML: Los tipos de datos básicos de YAML incluyen
números, cadenas, booleanos o nulos.
• Objetos básicos(Basic Objects): En YAML, los tipos de datos básicos se equiparan a
claves.
• Sangría de YAML y estructura de archivos(Indentation and File Structure) YAML indica
su jerarquía mediante sangría.
• Mapas y listas(Maps and Lists:): YAML representa fácilmente tipos de datos más
complejos, como mapas que contienen varios pares clave/valor y listas ordenadas.
• Los mapas generalmente se expresan en varias líneas, comenzando con una clave de
etiqueta y dos puntos, seguidos de miembros, sangrados en las líneas siguientes:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 86
Comprensión de los formatos de datos
YAML (Cont.)
• Las listas (matrices-arrays) se representan con miembros opcionalmente sangrados
precedidos por un solo guión y espacio:
• Los mapas y las listas también se pueden representar en una llamada "sintaxis de flujo-
flow syntax", que se parece mucho a JavaScript o Python:
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 87
Comprensión de los formatos de datos
YAML (Cont.)
• Cadenas largas (Long strings):Se representan usando una sintaxis 'plegable', donde se
presume que los saltos de línea son reemplazados por espacios cuando el archivo se
analiza o consume, o en una sintaxis no plegada.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 88
Comprensión de los formatos de datos
YAML (Cont.)
• Comentarios: Los comentarios en YAML se pueden insertar en cualquier lugar excepto en
un literal de cadena larga, y están precedidos por el signo hash y un espacio.
• Más características de YAML: YAML tiene muchas más características, la mayoría de las
veces encontradas al usarlo en el contexto de lenguajes específicos, como Python, o al
convertir a JSON u otros formatos. Por ejemplo, YAML 1.2 admite esquemas y etiquetas,
que se pueden utilizar para desambiguar la interpretación de valores.
Por ejemplo, para forzar que un número se interprete como una cadena, puede usar !!str
string, que es parte del esquema "Failsafe" de YAML
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 89
Comprensión de los formatos de datos
Análisis y serialización
• Examinar significa analizar un mensaje, dividiéndolo en sus componentes y comprendiendo
sus propósitos en contexto.
• La serialización es más o menos lo opuesto al análisis.
• Los lenguajes de programación populares como Python generalmente incorporan funciones
de análisis fáciles de usar que pueden aceptar datos devueltos por una función de E/S y
producir una estructura de datos interna semánticamente equivalente que contenga datos
escritos válidos.
• En el lado saliente, contienen serializadores que convierten las estructuras de datos
internas en mensajes semánticamente equivalentes formateados como cadenas de
caracteres.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 90
Comprendiendo los formatos de datos
Laboratorio Analizar diferentes tipos de datos con Python
En esta práctica de laboratorio se cumplirán los siguientes objetivos:
• Parte 1: Iniciar la máquina virtual (Virtual Machine) de DEVASC.
• Part 2: Analizar XML en Python
• Part 3: Analizar JSON en Python
• Part 4: Analizar YAML en Python
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 91
3.7 Desarrollo de Software y
Descripción de Diseño
• El patrón de diseño MVC simplifica el desarrollo de aplicaciones que dependen de interfaces gráficas de usuario.
• El control de versiones mantiene el historial de cambios realizados en un archivo. Tipos de sistemas de control de versiones:
Local, Centralizado y Distribuido.
• Git es una implementación de código abierto de un sistema de control de versiones distribuido y tiene dos tipos de
repositorios: local y remoto.
• El código limpio es el resultado de que los desarrolladores intentan hacer que su código sea fácil de leer y entender para
otros desarrolladores.
• La revisión del código implica revisar una base de código, un subconjunto de código o un cambio de código específico para
proporcionar comentarios.
• Tres formatos estándar más populares para intercambiar información con API remotas: XML, JSON y YAML.
• El análisis requiere analizar un mensaje, dividiéndolo en sus partes componentes y comprender sus propósitos en contexto.
La serialización es más o menos lo contrario.
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 93
.
Desarrollo y Diseño de Software
Nuevos Términos y Comandos
• Ciclo de vida de desarrollo de • Sistemas centralizados de control • Desarrollo impulsado por pruebas
software (SDLC) de versiones (CVCS) (TDD)
• Experiencia del usuario • Sistema de Control de Versiones • Prueba unitaria
• Requisitos de software Distribuidas(Distributed Version • Kits de Desarrollo de Software
• Scrum Agile Control System-DVCS) (SDKs)
• Lean (Inclinarse) • Git • XML
• Programación extrema (XP) • Ramificación • JSON
• Desarrollo impulsado por • GitHub • YAML
características (FDD) • Argumentos • Interfaces de programación de
• Sprints • Parámetros aplicaciones (API)
• Retroceso(backlog) • Programación de orientación de • Transferencia de estado
• Historias de usuarios objetos (OOP) representacional (REST)
• Equipos de Scrum • Revisión formal del código • Cadenas largas
• Controlador de vista de modelo • Revisión de código basada en • Análisis
(MVC) cambios • Serializando
• Revisión de código sobre el hombro
©2020 Cisco y/o sus filiales. Todos los derechos reservados. Información
confidencial de Cisco. 94