<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mario Ernesto Villanueva Gutierrez</title>
    <description>The latest articles on DEV Community by Mario Ernesto Villanueva Gutierrez (@mevgdev).</description>
    <link>https://dev.to/mevgdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F850386%2Fe259f90a-957d-4890-91f8-053cd3ceb3a4.jpg</url>
      <title>DEV Community: Mario Ernesto Villanueva Gutierrez</title>
      <link>https://dev.to/mevgdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mevgdev"/>
    <language>en</language>
    <item>
      <title>Devops Parte 1: Creación proyecto .net pruebas unitarias</title>
      <dc:creator>Mario Ernesto Villanueva Gutierrez</dc:creator>
      <pubDate>Sat, 03 Sep 2022 05:22:57 +0000</pubDate>
      <link>https://dev.to/mevgdev/devops-parte-1-creacion-proyecto-net-pruebas-unitarias-1e5l</link>
      <guid>https://dev.to/mevgdev/devops-parte-1-creacion-proyecto-net-pruebas-unitarias-1e5l</guid>
      <description>&lt;h1&gt;
  
  
  Creación del proyecto
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Paso 1:&lt;/strong&gt; Crear proyecto .net&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abra visual studio community&lt;/li&gt;
&lt;li&gt;cree nuevo proyecto Web APi&lt;/li&gt;
&lt;li&gt;Seleccione .net 6, open api &lt;/li&gt;
&lt;li&gt;* Opcional: en mi caso no usar minimalApi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Paso 2:&lt;/strong&gt; Crear proyecto de test&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cree nuevo proyecto xUnit&lt;/li&gt;
&lt;li&gt;seleccione .net 6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Paso 3:&lt;/strong&gt; Agregar dependencias en el proyecto de test&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agregar paquetes nuget coverlet.collector
-- Clic derecho sobre el proyecto -&amp;gt; Administrar paquetes nuget -&amp;gt; buscar coverlet.collector -&amp;gt; instalar&lt;/li&gt;
&lt;li&gt;Agregar paquetes nuget  coverlet.msbuild
-- Clic derecho sobre el proyecto -&amp;gt; Administrar paquetes nuget -&amp;gt; buscar  coverlet.msbuild -&amp;gt; instalar&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agregar paquetes nuget Xunit.DependencyInjection&lt;br&gt;
-- Clic derecho sobre el proyecto -&amp;gt; Administrar paquetes nuget -&amp;gt; buscar Xunit.DependencyInjection -&amp;gt; instalar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resultado final&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yDzwrMfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekud1t2i4oawqw0vpk4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yDzwrMfO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekud1t2i4oawqw0vpk4h.png" alt="Image description" width="315" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 4:&lt;/strong&gt; Configuración&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crear api desde un controller que exponga un hola mundo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlwWZQ9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ddxkbrhlptcfddfm3bm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlwWZQ9_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ddxkbrhlptcfddfm3bm8.png" alt="Image description" width="880" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crear prueba unitarias asociada al api&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E2qzBUQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptgvn1yhahqub5wzf7pe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E2qzBUQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptgvn1yhahqub5wzf7pe.png" alt="Image description" width="770" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 5:&lt;/strong&gt; Generación de reporte coverage.xml&lt;br&gt;
&lt;code&gt;&lt;br&gt;
dotnet test .\microservicio.dotnet.test\microservicio.dotnet.test.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='coverage.xml' --configuration Release --no-restore&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>testunit</category>
      <category>tdd</category>
      <category>testing</category>
    </item>
    <item>
      <title>El software es como limpiar la cocina</title>
      <dc:creator>Mario Ernesto Villanueva Gutierrez</dc:creator>
      <pubDate>Sun, 28 Aug 2022 05:08:37 +0000</pubDate>
      <link>https://dev.to/mevgdev/el-software-es-como-limpiar-la-cocina-4d9f</link>
      <guid>https://dev.to/mevgdev/el-software-es-como-limpiar-la-cocina-4d9f</guid>
      <description>&lt;p&gt;Uno de las premisas que he escuchado durante mi experiencia laborar en los sistemas informáticos es la siguiente frase: "Si funciona en producción no lo toques", frase escuchada una y otra vez, que nos indica en el buen sentido de la palabra, con letras despampanantes, marcadas en rojo y subrayado, que no toquemos absolutamente nada, para que todo siga tal y como estaba.&lt;/p&gt;

&lt;p&gt;Cada vez que lo escucho eso me imagino esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v2bBzpmh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17q5l59yaqj1p1e84ydf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v2bBzpmh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/17q5l59yaqj1p1e84ydf.jpeg" alt="Image description" width="460" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Porque no?&lt;/p&gt;

&lt;p&gt;la cocina sigue prendiendo fuego, el cuchillo sigue cortando, aah pero claro no toquemos nada!&lt;/p&gt;

&lt;p&gt;De alguna manera es verdad, sería lo más lógico que producto de nuestras buenas intenciones algo deje de funcionar.&lt;/p&gt;

&lt;p&gt;La manipulación del software genera incertidumbre por parte de los usuario del sistema y sería mal visto que nuestras buenas deseos terminen dejando algo sin funcionar en producción, Entonces pregunto:&lt;/p&gt;

&lt;p&gt;¿Vale la pena tocar algo productivo que ya esta funcionando?&lt;/p&gt;

&lt;p&gt;Yo creo que si, pero antes veamos algunos antecedentes importantes que vale la pena mencionar para entender más el contexto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Entropía del software&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Wikipedia nos indica que "es la medida de desorden del software que refleja la complejidad de su mantenimiento" (&lt;a href="https://es.wikipedia.org/wiki/Entrop%C3%ADa_del_software"&gt;https://es.wikipedia.org/wiki/Entrop%C3%ADa_del_software&lt;/a&gt;)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manipulación de código por muchos desarrolladores&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una de las grandes realidades de los productos es la manipulación del código por diversos desarrolladores que pasan por el sistema en función del tiempo, los que han tenido que realizar correcciones y/o nuevas implementaciones, adoptando el mismo estilo arquitectónico que poseía el software, implementándolo medianamente bien o de plano de forma incorrecta, o simplemente poniendo su propio sello en el código. Creando un código con muchos estilos y formas de mirarlo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O1-veIny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0jm755jlpe95ofyw02d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O1-veIny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0jm755jlpe95ofyw02d.png" alt="Image description" width="677" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Poca expertis / tiempos de entrega&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Un punto importante y no menor es la responsabilidad de muchas empresas en colocar a profesionales de nivel jr en puestos que requieren un conocimiento más alto. Muchos de ellos sin entender del porque están ahí, poniendo su mejor esfuerzo para sacar adelante la difícil tarea de entregar sus desarrollo a tiempo, luchando con tratar de entregar todo para ayer. Predicando la palabra de "stackoverflow es mi pastor", copiando y pegando código muchas veces sin entender, pero al fin y al cabo solucionando el problema puntual, creyendo que por que esta en stackoverflow es ley.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4y2g0TTc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/si4kd5siml0ak7jarqlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4y2g0TTc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/si4kd5siml0ak7jarqlp.png" alt="Image description" width="880" height="829"&gt;&lt;/a&gt;&lt;br&gt;
Entonces, ¿Cuales son los beneficios de modificar un código que ya esta funcionando en producción?&lt;/p&gt;

&lt;p&gt;yo creo que muchos:&lt;/p&gt;

&lt;p&gt;Limpiar la cocina antes de trabajar: antes de todo es muy importante limpiar donde vamos a trabajar. Limpiar el código fuente, factorizar funciones, normalizar nombres de variable, quitar código comentado, quitar código que no se ocupa, nos ayuda a entender que elementos tenemos disponibles para trabajar, a crear una mapa mental de donde va cada cosa tiene su propio lugar.&lt;br&gt;
Quedarnos con lo que realmente importa: te has fijado cuando tienes el pelo largo o no te has arreglado en varios días, luego vas a la peluquería sales como una persona renovada? Esto es exactamente igual. Al quedarnos con lo que realmente es vital para un caso de uso, nos deshacemos de lo que no necesitamos, sacándonos ese peso extra que llevamos en nuestro hombros (en este caso en nuestro código), permitiéndonos una vez más aclara la visión de que tenemos que hacer y dónde lo vamos a hacer.&lt;br&gt;
No trabajamos solos: han escuchado el que significado UX? de breves líneas vendría siendo (espero no me maten mis amigos Uxs): "entregar valor a cada uno de los usuarios del sistema, entendiendo sus dolores, haciendolos participes en la construcción de cambios, haciendolos los principales participes en cada uno de los punto de contacto de nuestros proceso". Dada esta estupenda explicación, tenemos que entender que nuestros pares son nuestros usuarios, y tenemos que hacer que en cada vez que tocan nuestro código fuente, sientan la mejor experiencia que puedan tener mientras trabajan.&lt;/p&gt;

&lt;p&gt;Ustedes no se imaginan el dolor de cabeza que puede llegar a ser ver una ensalada de código arrojado, tirado y desparramado sobre una pieza de software. Pienso que si podemos hacer un código más legible para la siguiente persona que tocará el código todos saldremos beneficiado. Porque le haremos su trabajo más placentero y nos quedaremos con la sensación que la experiencia que vivió fue la mejor.&lt;/p&gt;

&lt;p&gt;Entonces ya en este punto podemos preguntarnos ¿Cómo es factible asegurar que los cambios realizados no afecten el normal funcionamiento del sistema?.&lt;/p&gt;

&lt;p&gt;A continuación te presento de manera breve algunas estrategias y/o principios que aplico cuando me veo enfrentado a este tipo de situaciones.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pruebas unitarias: Lo primero que necesitamos dejar en manifiesto es saber el comportamiento de lo que estamos modificando, la mejor manera es por medio de pruebas unitarias. La pruebas unitarias nos permitirá tener la capacidad de dejar en evidencia que los resultados finales no cambien. Esto es importante, porque necesitamos marcar un presedente de lo que estaba cuando comencemos a mover el código.&lt;/li&gt;
&lt;li&gt;Don't repeat yourself : Este principio, nos habla a grandes rasgos que cada elemento de nuestro código es único y dentro nuestro sistema no puede ser repetido.
Principio de responsabilidad única: Principio perteneciente a los principios SOLID (wiki), que nos dice que cada una de las parte del código tiene que tener un sólo objetivo, una sola responsabilidad.&lt;/li&gt;
&lt;li&gt;SonarQube: Es importante tener bajo nuestro repertorio un marco de trabajo o estilo de programación. Sonar es el framework perfecto para aprender sobre la calidad del software. Es una herramienta que evalúa nuestro código y nos indica que parte de el se encuentra fuera de regla, regla que ha sido estandarizada por una comunidad que sugiere las buenas prácticas de programación.&lt;/li&gt;
&lt;li&gt;Eliminar código que no se ocupa: Es importante siempre siempre tener en nuestro sistema sólo lo que ocupa, lo no se va ocupar dentro del código a la basura, se ocupa? no. entonces borrelo.&lt;/li&gt;
&lt;li&gt;Eliminar código comentado: git! su mejor amigo es git, es el mejor mecanismo para el código que podría servir en un tiempo que jamás llegará. y si llega? revise el historial de la pieza.&lt;/li&gt;
&lt;li&gt;Tener presente la complejidad ciclomatica: La complejidad ciclomatica es la forma elegante de decir que el código es complejo de leer, dado la cantidad de clausulas ocupadas. Una función no debería tener más de par de líneas de código y debe ser simple de leer a ojo de lectura - Ojalá existiera la regla que indique que toda función sea escrita en lo largo de un tweets -.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finalmente es importante destacar, que refactorizar un código no es una tarea fácil, siempre puede conllevar sin sabores, pero una vez que se consigue la gratificación es mucho mayor.&lt;/p&gt;

&lt;p&gt;Nunca es tarde para intentar trabajar en una cocina limpia y ordenada!!!&lt;/p&gt;

&lt;p&gt;Un abrazo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Para quien programamos?</title>
      <dc:creator>Mario Ernesto Villanueva Gutierrez</dc:creator>
      <pubDate>Thu, 11 Aug 2022 05:27:21 +0000</pubDate>
      <link>https://dev.to/mevgdev/para-quien-programamos-373h</link>
      <guid>https://dev.to/mevgdev/para-quien-programamos-373h</guid>
      <description>&lt;p&gt;La primera respuesta que se me viene a la mente sería para uno mismo, en segundo lugar quizás por temas profesionales. Otros podrán decir que por hobby y otros podrían decir porque es una pasión.&lt;/p&gt;

&lt;p&gt;Cualquier sea el caso, razón o necesidad permitame proponer otra idea sobre la palestra, y que ojalá sería de mi más profundo agrado que usted señor leyente pueda reflexionar.&lt;/p&gt;

&lt;p&gt;Yo propongo que deberíamos programar para el próximo ser vivo que tome nuestro código. Como así? creo que usted debería pensar que después de usted hay otro ser humano que hará un esfuerzo enorme por entender lo que usted hizo. Entonces, que pasa si yo sé que existirá ese alguien y programo pensando bajo ese escenario y el siguiente ser piense de la misma forma, y así seguidamente hasta el fin de los fines de la tierra, generando una cadena de valor en nuestro código y erradicando ese odio profundo en aquel código que fue escrito con sufrimiento, pena y dolor.&lt;/p&gt;

&lt;p&gt;Yo quiero pensar que este acto tan generoso produce un sinergía en el código, quiero creer que el siguiente ser sentirá una energía positiva cuando lea nuestro código y diga: "woow que legible es este código, todo tan ordenado" y toda esa buena atmósfera la transforme en algo más que buenas intenciones, la transforme en un código que realmente sea significativo para él y quien sabe para usted señor lector, tal vez cuando usted tome un código con esta características, siente este valor agregado y usted ponga mucho más de usted cuando este creando variables y clases.&lt;/p&gt;

&lt;p&gt;Finalmente recordarle que cuando las cosas se hacen con amor, las cosas funcionan mucho mejor.&lt;/p&gt;

&lt;p&gt;Atte el psicologo del código.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
