<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Agile Content Teamwork - Medium]]></title>
        <description><![CDATA[Digital Content Technology - Medium]]></description>
        <link>https://medium.com/agile-content-teamwork?source=rss----c55670929e43---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Agile Content Teamwork - Medium</title>
            <link>https://medium.com/agile-content-teamwork?source=rss----c55670929e43---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 15:19:52 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/agile-content-teamwork" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Captcha Generator with SixLabors’ libs on .NET Core 3]]></title>
            <link>https://medium.com/agile-content-teamwork/captcha-generator-with-sixlabors-libs-on-net-core-3-c0d2600b01d5?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/c0d2600b01d5</guid>
            <category><![CDATA[sixlabors]]></category>
            <category><![CDATA[net-core-3]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[captcha]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Tiago Godoi]]></dc:creator>
            <pubDate>Mon, 28 Oct 2019 14:01:01 GMT</pubDate>
            <atom:updated>2019-10-28T14:01:01.765Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*9M5xVeNjJWJ2SbtH.jpg" /></figure><h3>Captcha Generator with SixLabors’ libs on .NET Core 3</h3><p>Well, if you are reading this article I could guess that you tried to search how to generate captcha images to use in your own .NET Core application because:</p><ol><li>You aren’t able to use System.Drawing because you want it to run on any Linux-based system;</li><li>You don’t wanna use any <em>online-based-third-party</em> service to generate it for you (I’m sorry, reCAPTCHA);</li><li>You like to learn new things (and that’s a really good reason on itself).</li></ol><p>If you have any of the reasons above, or any other else, you are welcome here!</p><p>By the way, if you don’t know what a captcha is, don’t feel intimidated by it.</p><p>A Captcha, in a brief explanation, is a way of preventing your system to be accessed by bots. It may asks the user to click and wait for a while, to click in certain images, to type some alphanumeric characters, etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*jYYGYfXCkUvSynfX.jpg" /></figure><p>In this article, our Captcha will be an image drawn in a rectangular shape, some multicolored characters on it, and some lines and dots to difficult reading.</p><p>So let’s start our mission!</p><p><strong>What we’ll be doing here:</strong></p><ol><li>Creating a bitmap</li><li>Filling a bitmap</li><li>Writing a char</li><li>Writing a text char by char</li><li>Rotating the text</li><li>Adding dirt</li></ol><p>Mostly, we’ll be using SixLabors’ libraries for our drawing operations because it’s 100% manageable, its code is portable, open source, it has a fluent interface, and its quite easy to learn how to use it. I guess we have plenty of reasons already!</p><p><strong>Creating a bitmap</strong></p><p>To start our adventure, we need to create a bitmap in which we can work on. We may create an Image variable like any other else: (Use this one if you want your method to return this Image variable.)</p><pre>var img = new Image&lt;Rgba32&gt;(width, height);</pre><p>Or within an <em>using</em> statement: (You won’t be able to use this var as a return variable, as it’ll be disposed after the <em>using</em> statement)</p><pre>using (var img = new Image&lt;Rgba32&gt;(width, height))<br>{<br>  <br>}</pre><p>Note that when not defining the Image variable within an <em>using</em> statement, it’s a good practice to <em>.Dispose()</em> it after working on it.</p><p><em>Rgba32</em> corresponds to a Pixel Format and may be substituted by any other Pixel Format of your choice.</p><p>So now that we have a bitmap to work on, what can we do to actually start drawing?</p><p><strong>Filling the bitmap</strong></p><pre>backColor = Color.White;<br>img.Mutate(ctx =&gt; ctx.BackgroundColor(backColor));</pre><p>The way we define colors here is the same way it is used in <em>System.Drawing</em>. As we need a white color, <em>Color.White</em> is the one we’ll be working with.</p><p><em>.Mutate()</em> is an important method in this article, it will be used for almost everything we want to do with the image itself. Note that, when we mutate the image, we apply an action on it overwriting the “old” bitmap with the new actions. In this case we are only defining a background color.</p><p>You may also define a color as:</p><pre>new Color(new Argb32(0.0f, 0.0f, 1.0f))</pre><p>In this case, the three (shown) parameters are related to Red, Green and Blue color quantities, going from 0 to 1. There’s also another (optional) parameter for Alpha, which controls the transparency/opacity of the color.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*m7IFdIDVPiD7zkUxHqAZeg.png" /><figcaption>Blank 200 px x 30px rectangle, but c’mon, it’s a start.</figcaption></figure><p>(By the way, I’ll be showing our results step by step surrounded by a black line just for visualization matters, as the background is also white.)</p><p><strong>Writing a char</strong></p><pre>var font = SystemFonts.CreateFont(&quot;Arial&quot;, 10, FontStyle.Regular);<br>var location = new PointF(x, y);</pre><pre>img.Mutate(ctx =&gt; ctx.DrawText(c.ToString(),font, Color.Black, location));</pre><p>When writing some text in a bitmap, you’re going to use <em>DrawText()</em> in <em>Mutate()</em>, which parameters are:</p><ul><li><em>text</em>: a string parameter, in this case I converted a char to a string;</li><li><em>font</em>: a Font parameter, its value is defined using <em>SystemFonts.CreateFont</em>(&lt;<em>fontName as String</em>&gt;,&lt;<em>size as int</em>&gt;,&lt;<em>fontStyle as a FontStyle enum value</em>&gt;);</li><li><em>color</em>: a Color variable, as explained above;</li><li><em>location</em>: a PointF variable, requiring x and y float values to determine the start location of the drawing.</li></ul><p>Of course you can write a full text with this method, but here we want to write char by char, modifying their location, color and font.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*CGHwqp93qbRDBBdYyuMYQA.png" /><figcaption>Now we have a blue ’A’ character!</figcaption></figure><p><strong>And how to write a string text?</strong></p><p>Well, if you want to write char by char like me, you’ll have to use a loop statement (yay!). So let’s start showing a more complete code:</p><pre>using (var img = new Image&lt;Rgba32&gt;(width, height))<br>{<br>   var fontFamilies = new string[] { &quot;Arial&quot;, &quot;Verdana&quot;, &quot;Times New Roman&quot; };<br>   Random random = new Random();</pre><pre>   img.Mutate(ctx =&gt; ctx.BackgroundColor(backColor));</pre><pre>   foreach(char c in stringText)<br>   {<br>      var font = SystemFonts.CreateFont(fontFamilies[random.Next(0,fontFamilies.Length)], 20, FontStyle.Regular);<br>      var location = new PointF(x+position, y);</pre><pre>      img.Mutate(ctx =&gt; ctx.DrawText(c.ToString(), font, new Color(new Argb32(0.0f, 0.0f, 1.0f)), location));</pre><pre>      position = position + TextMeasurer.Measure(c.ToString(), new RendererOptions(font, location)).Width;<br>   }<br>}</pre><p>…Okay, we have a lot of stuff here, so let’s take a look at the new ones now:</p><ul><li>fontFamilies: I created a array of font names so, at the time we’ll be defining the font of each character, I could use a random one;</li><li>position: We don’t want our characters all overdrawn on each other, so we start to manage their position. That’s a quite an easy job when we use <em>TextMeasurer.Measure()</em>. All you need to measure it is the text itself (the character, in this case) and a <em>RendererOption(), </em>that requires a font and a start location.</li></ul><p>Given that we have our text drawn, we want to rotate it, adding an extra dificulty when reading the Captcha.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*dkEj1ZIA3dp1XTvGbYQxCw.png" /></figure><p>We now have a full text! But is its position ideal? Well, I’m not going to focus on calculus here because you are the one to decide where to position the text. Take this as a challenge!</p><p><strong>Rotating the text</strong></p><p>When rotating a bitmap, you may use:</p><pre>var builder = new AffineTransformBuilder();<br>img.Mutate(ctx =&gt; ctx.Transform(builder.PrependRotationDegrees(angle, new PointF(rotateX, rotateY))));</pre><p>Here we use a .<em>Transform()</em> method, which requires an <em>AffineTransformationBuilder().</em> In this case, as we want to rotate the image, we use .<em>PrependRotationDegrees()</em>.</p><p>When you add a rotation operation, you have to specify its angle and the point where the rotation is applied.</p><p>So, let’s just add the rotation operation at the end of our algorithm:</p><pre>using (var img = new Image&lt;Rgba32&gt;(width, height))<br>{<br>   ...</pre><pre>   foreach(char c in s)<br>   {<br>      ...<br>   }</pre><pre>   var builder = new AffineTransformBuilder();<br>   img.Mutate(ctx =&gt; ctx.Transform(builder.PrependRotationDegrees(angle, new PointF(rotateX, rotateY))));</pre><pre>}</pre><p>With width = 200px and height 30px, I got:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/205/1*XbKO0TKnXbP_VIXZfwexYw.png" /><figcaption>200px x 50px image</figcaption></figure><p>…but actually I don’t want the size of my image changing accordingly to the rotation applied.</p><p>What just happened? Let’s make a review about what we did so far:</p><ol><li>Instantiated a bitmap</li><li>Added a background color to it</li><li>Wrote some text on it</li><li>Rotated it</li></ol><p>The problem is: when we rotate an image, it won’t be bound to the limits we defined before, with <em>width</em> and <em>height. </em>But we don’t actually want the whole image to rotate, only the text.</p><p>So what if we create a separate bitmap to it and, after applying the rotation operation, we draw it into another image?</p><pre>var img = new Image&lt;Rgba32&gt;(width, height);</pre><pre>img.Mutate(ctx =&gt; ctx.BackgroundColor(backColor));</pre><pre>using (var imgText = new Image&lt;Rgba32&gt;(width, height))<br>{<br>   ...</pre><pre>   foreach(char c in stringText)<br>   {<br>      ...<br>   }</pre><pre>   var builder = new AffineTransformBuilder();<br>   imgText.Mutate(ctx =&gt;  ctx.Transform(builder.PrependRotationDegrees(angle, new PointF(rotateX, rotateY))));</pre><pre>   img.Mutate(ctx =&gt; ctx.DrawImage(imgText, transparency));</pre><pre>}</pre><pre>return img;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*YfomX7_ZOZod55fL-XZfLw.png" /><figcaption>200px x 30px image</figcaption></figure><p>So now we have an bitmap for the captcha itself and another bitmap for our text. The text is applied in our final image with the .<em>DrawImage()</em> method, in which you may also specify a transparency.</p><p>Note that I’m not defining our final bitmap in an <em>using</em> clause, because I want it to be our return value to another piece of code somewhere else.</p><p>Okay! We are starting to get things ready, but what can we do more?</p><p><strong>Adding dirt</strong></p><p>So now that we have our text placed, why don’t we add some stuff to make it more difficult to read?</p><p>You may add some lines:</p><pre>img.Mutate(ctx =&gt; ctx.DrawLines(color, thickness, new PointF[] { new PointF(x1, y1), new PointF(x2, y2)}));</pre><p>The color? Your choice. The thickness? A float of your choice. You may even specify the points (x1,y1) and (x2,y2) which define the line itself. You may add them above your text, or below it, or both, why not?</p><p>You may also add some dots:</p><pre>img.Mutate(ctx =&gt; ctx.DrawLines(color, thickness, new PointF[] { new PointF(x1, y1), new PointF(x1, y1)}));</pre><p>In this case I reused <em>.DrawLines()</em> but both the point parameters are the same.</p><p>And then I got:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*b8MrAFSyBiJlGDknkPyEqA.png" /></figure><p><strong>And what more can I do?</strong></p><p>I actually played a little bit with characters positions, and got something like this one:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/204/1*vMY8OlVI3UfwTt0NlTgu5Q.png" /></figure><p>And, well, it’s up to your imagination! You may draw curves, multicolored lines, colorful background, etc.</p><p>I recommend exploring SixLabors’ documentation (<a href="https://docs.sixlabors.com/">https://docs.sixlabors.com/</a>) and also their github ( <a href="https://github.com/SixLabors">https://github.com/SixLabors</a>) for some samples.</p><p>I hope this guide was useful to you! Keep up the good work!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c0d2600b01d5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/captcha-generator-with-sixlabors-libs-on-net-core-3-c0d2600b01d5">Captcha Generator with SixLabors’ libs on .NET Core 3</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cultura ágil, mudança de valores e mindset]]></title>
            <link>https://medium.com/agile-content-teamwork/cultura-%C3%A1gil-mudan%C3%A7a-de-valores-e-mindset-f1e83fb93be?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/f1e83fb93be</guid>
            <category><![CDATA[kaizen]]></category>
            <category><![CDATA[métodos-ágeis]]></category>
            <category><![CDATA[cultura-ágil]]></category>
            <category><![CDATA[transformação-ágil]]></category>
            <category><![CDATA[lean]]></category>
            <dc:creator><![CDATA[Carla Adriana N Cirilo]]></dc:creator>
            <pubDate>Tue, 22 Oct 2019 13:27:26 GMT</pubDate>
            <atom:updated>2019-10-22T13:27:26.089Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WoPLHaNIvcsU3fN7_ecLYw.jpeg" /></figure><p>Um fato difícil de aceitar é que adotar um Framework ágil não resolve todos problemas de entrega, qualidade e gerenciamento dos departamentos de TI.</p><p>Os processos, habilidades e conhecimento são importantes, mas o que realmente pode transformar, um time, um departamento, ou mesmo uma empresa são as atitudes (Intenções) e comportamentos (Ações) das pessoas que trabalham nelas.</p><p>As pessoas precisam ser preparadas para participar de projetos ágeis: ensinadas a serem auto-organizadas, terem respeito e autoridade para decidir como trabalhar e a atuar como time para alcançar uma inteligência coletiva.</p><p>“As melhores arquiteturas, requisitos e designs emergem de times auto-organizáveis.” Manifesto ágil, princípio 11</p><p>O desenvolvimento de software é uma atividade humana e a qualidade da interação entre as pessoas pode resolver problemas crônicos de comunicação. O que deve acontecer é colaboração, tomada de decisões em conjunto e trabalho em equipe, fazendo que todos trabalhem juntos em busca de um objetivo.</p><p>“Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho.” Manifesto ágil, princípio 5</p><p>A força propulsora da mudança de comportamento das pessoas está no exercício dos valores descritos nas entrelinhas do Manifesto ágil, tais como: coragem, foco, comprometimento, respeito , abertura. Em intervalos regulares, as pessoas do time devem refletir em como ficar mais efetivo, ajustando e otimizando seu comportamento .</p><p>Para crescer nestes valores, podemos analisar e discutir com as pessoas do time, situações como as abaixo, coletadas no dia a dia:</p><p>Agimos com <strong>coragem </strong>quando: admitimos que requisitos nunca serão completos; acreditamos que nenhum plano pode desenhar a realidade e complexidade; a mudança é fonte de inspiração de inovação; não entregamos o que não está pronto; discordamos de uma ideia que o grupo resolveu seguir; compartilhamos riscos, benefícios e toda a informação possível que possa ajudar as pessoas e a empresa.</p><p>Mostramos <strong>foco </strong>quando: não desenvolvemos funcionalidades que ninguém solicitou; fazemos o que é mais importante agora, não fazemos o que talvez um dia possa ser importante; fazemos nosso trabalho da maneira mais simples e objetiva possível.</p><p>Atuamos com <strong>comprometimento </strong>quando: fazemos o melhor todos os dias; apoiamos o time, somos colaborativos, somos preocupados com a qualidade; valorizamos o aprendizado; buscamos a melhoria contínua e a excelência técnica.</p><p>Demonstramos <strong>respeito </strong>quando: demonstramos consideração pelas pessoas, suas experiências profissionais, habilidades, experiências pessoais e diferenças; não desperdiçamos dinheiro e tempo em funcionalidades que não serão usadas; corrigimos rapidamente os erros; seguimos os acordos do time e as regras da empresa.</p><p>Temos <strong>abertura </strong>quando: somos abertos sobre nosso trabalho, nosso progresso, nossa aprendizagem e para as outras pessoas; colaboramos com o ambiente em geral, todos os negócios e competências; compartilhamos feedback e aprendemos uns com os outros.</p><p>Na busca de melhoria contínua, temos uma ótima ferramenta, nosso rito de avaliação, as retrospectivas com o time. Nela podemos incentivar o diálogo para crescer nestes valores, utilizando os exemplos do que se passou nos últimos dias de trabalho.</p><p>Gosto de usar três perguntas rotineiras: <strong>O que foi bom? O que foi ruim? Qual o plano de ação? </strong>Entre as várias oportunidades de aprendizado que acontecem nestas reflexões: <strong>o que foi bom </strong>ajuda a motivar o time,<strong> o que foi ruim</strong> exercita a confiança, o respeito, abertura uns com os outros e<strong> o plano de ação</strong> nos leva às mudanças necessárias.</p><p>Os líderes devem reforçar uma cultura de aprendizagem organizacional e experimentação para criar resiliência no time, autoconfiança para assumir riscos, aprender com o sucesso e ou com o fracasso.</p><p>Cultura ágil : Capacitar, Motivar e Confiar sempre !</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f1e83fb93be" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/cultura-%C3%A1gil-mudan%C3%A7a-de-valores-e-mindset-f1e83fb93be">Cultura ágil, mudança de valores e mindset</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cobertura de Teste]]></title>
            <link>https://medium.com/agile-content-teamwork/cobertura-de-teste-e345e9bb291f?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/e345e9bb291f</guid>
            <category><![CDATA[cobertura-de-teste]]></category>
            <category><![CDATA[agile-testing]]></category>
            <category><![CDATA[teste-de-software]]></category>
            <category><![CDATA[testers]]></category>
            <category><![CDATA[information-technology]]></category>
            <dc:creator><![CDATA[Pedro Scattaregi]]></dc:creator>
            <pubDate>Mon, 17 Jun 2019 12:31:01 GMT</pubDate>
            <atom:updated>2019-06-17T19:10:25.385Z</atom:updated>
            <content:encoded><![CDATA[<h3>A busca por falhas</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/636/0*dwL4F7ghenlySfJ-.jpg" /></figure><p>A qualidade de um software não é responsabilidade exclusiva da equipe de QA de um projeto. É mais do que certo que desenvolvedores devem sim testar o próprio código. Mas quantos testes são necessários? Meus testes foram eficientes na busca por falhas? A cobertura de testes deve ser suficiente em testes unitários, de integração, de aceitação, em desenvolvimento em TDD, etc… Portanto, garantir a cobertura de testes em um sistema não é uma preocupação apenas de QA e sim de todos os envolvidos em desenvolvimento de software .</p><p>Iniciar na área de QA (Quality Assurance) em uma empresa de desenvolvimento de software pode não ser uma das tarefas mais simples. Nesta área estão em jogo a satisfação do cliente, imagem da empresa perante o mercado e a sua credibilidade. Grandes desafios técnicos e de relacionamento interpessoal serão recorrentes ao profissional que nem sempre é preparado para esta função na universidade (me arrisco a dizer que em toda a vida acadêmica). Um dos maiores desafios técnicos enfrentados está relacionado à cobertura de testes.</p><p>Em minha experiencia de 2 anos como Analista de Qualidade percebo que uma das grandes dificuldades é entender como explorar a aplicação (os seus módulos) de maneira a detectar o maior número de falhas relevantes possíveis antes da entrega do produto ao cliente, ou seja, como obter uma boa cobertura de testes a fim de garantir a Alta Qualidade (confiabilidade e corretude) do produto. Por isso decidi expor neste artigo o método o qual utilizo hoje que me ajudou a aumentar a minha cobertura de testes. Talvez isso também possa ajudar vocês. =)</p><p>Um analista de Qualidade tem a função não só de encontrar falhas no sistema para sanar as necessidades do cliente, mas também de alertar sobre problemas nos fluxos de desenvolvimento, criar uma consciência dos desenvolvedores em testar seu próprio código, criar um conhecimento aprofundado sobre o projeto e disseminar o conhecimento, entre outras funções.</p><p>Na busca por falhas, serão testados todos os requisitos do sistema, sejam eles funcionais e não funcionais. Para aumentarmos a cobertura de testes de uma funcionalidade, podemos traçar estratégias de testes baseados em Limites (vazio, zero, inválido, extremos de array, comprimento e tamanho de variáveis), CRUD (Criar, Ler, Atualizar, Deletar), Variações de configuração e Interrupções.</p><p>Após uma análise aprofundada da funcionalidade, os testes de fluxo partem da identificação das funções do software, para assim, verificar se elas funcionam como devem (PRESSMAN, 2005). O entendimento dessas funções se dá através das especificações de requisitos do sistema, portanto é essencial que os requisitos estejam bem definidos, sem ambiguidades ou incompletos, evitando testes mal elaborados. É neste tipo de teste que a cobertura passa a ser mais complexa pois é um processo humano, exige criatividade e visão do negócio, não é um processo mecânico e repetitivo.</p><p>A BSTQB emite certificações para analista de qualidade em vários níveis. A CTFL é uma das suas certificações básicas quanto a teste e nela delimita-se que “a qualidade dos testes depende da capacidade dos testadores em fazer perguntas pertinentes sobre o que testar”, perguntas como:</p><p>• O que é mais importante para saber sobre o sistema?</p><p>• De que forma o sistema pode falhar?</p><p>• O que acontece se?</p><p>• O que deve acontecer quando?</p><ul><li>As necessidades dos clientes, requisitos e expectativas são cumpridas?</li></ul><h3>Método de teste baseado no Caminho feliz</h3><p>Visando facilitar a visão para aumentar a cobertura de testes tracei um plano, o qual baseia-se no caminho feliz de uma funcionalidade. Esse método aprendi e desenvolvi com a vivência e que pode funcionar para pessoas novas na área.</p><p>1. Criar o teste do caminho feliz, geralmente o motivo para que aquela funcionalidade está sendo desenvolvida. Esse teste vai ser o que chamaremos de “Fluxo Básico”, tende a ser o principal teste da funcionalidade, aquele caso que motivou o desenvolvimento da funcionalidade.</p><p>O teste deve conter todas as informações bem detalhadas como: título, procedimento de execução, objetivo, resultado esperado, pré-requisitos, variação de entrada.</p><p>2. A partir desse teste do fluxo Básico bem definido podemos buscar por testes derivados dele, o que chamaremos de “Fluxos Alternativos”. É aqui que entram as perguntas pertinentes, mostradas anteriormente, que o testador deve criar o hábito de fazer. Deve-se avaliar cada pré-requisito, cada passo do teste a fim de encontrar possíveis desvios de fluxo, erros (esperado pelo sistema) e falhas (bugs).</p><p>3. Todo Fluxo Alternativo pode gerar novas possibilidades, ou seja, deve ser entendido como um novo Fluxo Básico para buscarmos mais testes derivados dele que possam encontrar erros e falhas.</p><p>4. Escolher quais testes devem de fato ser executados como testes planejados e quais casos serão abordados como testes exploratórios.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/558/1*TpUGPrTph7ND0bntGW2P9Q.png" /></figure><p>Pelo diagrama acima podemos exemplificar como seria. Começo pelo entendimento completo da funcionalidade e crio o teste “Fluxo Básico” que é o caminho feliz da funcionalidade. A partir desse primeiro teste, eu começo a analisar cada passo e pré-requisito em busca de fluxos alternativos, seja para encontrar uma falha ou um erro. Pense que em cada pré-requisito e em cada passo pode haver um fluxo alternativo e que esse fluxo alternativo pode originar novos fluxos alternativos.</p><p>Para tornar mais factível vamos a um exemplo baseando-se no diagrama acima e na seguinte funcionalidade: Login que pode ser feito pelo e-mail.</p><blockquote>Fluxo Básico = Fazer login com o usuário através do e-mail e senha.</blockquote><blockquote>Fluxo Alternativo 1 = Tentar fazer login com o serviço de login fora do ar.</blockquote><blockquote>Fluxo Alternativo 2 = Fazer login com e-mail do google que não exige o domínio do e-mail (‘@gmail.com’), possui autocomplete.</blockquote><blockquote>Fluxo Alternativo 3 = Tentar fazer login com e-mail google não cadastrado. (Derivado de um fluxo alternativo)</blockquote><blockquote>Fluxo Alternativo 4 = tentar fazer login Através do e-mail com senha inválida.</blockquote><ul><li>Vale lembrar que muitos outros casos poderiam ser criados, esse é apenas um exemplo prático.</li></ul><p>Esse método de criação de testes pode aumentar a sua cobertura através da mecanização do raciocínio, mas vai depender muito do seu entendimento sobre a funcionalidade, afinal, criar um fluxo básico equivocado levará a testes mal elaborados. Essa é apenas uma maneira de pensar na hora de criar cenários de testes, existem várias outras e não existe a certa e a errada e sim a que você mais se adequa. Devemos manter em mente que a análise da funcionalidade que originará o fluxo básico, portanto, deve-se garantir que a especificação não contenha furos e ambiguidades. O testador deve combinar a criatividade, a intuição, a cognição e a habilidade para buscar possíveis problemas no sistema; uma forma de sistematizar isso é através do método exposto. Explore suas aplicações em busca de falhas e garanta a qualidade do seu trabalho. =p</p><p>Referências:</p><p><a href="https://medium.com/cwi-software/dicas-para-escrita-de-casos-de-teste-ccea14a7fdd9">https://medium.com/cwi-software/dicas-para-escrita-de-casos-de-teste-ccea14a7fdd9</a></p><p>PRESSMAN, R. Software Engineering: a practitioner’s approach. Palgrave Macmillan, 2005</p><p>Syllabus CTFL Certification (Agile Testers). <a href="https://www.bstqb.org.br/node/198">https://www.bstqb.org.br/node/198</a></p><p><a href="https://gaea.com.br/afinal-o-que-e-quality-assurance/">https://gaea.com.br/afinal-o-que-e-quality-assurance/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e345e9bb291f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/cobertura-de-teste-e345e9bb291f">Cobertura de Teste</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Entender para projetar]]></title>
            <link>https://medium.com/agile-content-teamwork/entender-para-projetar-372e8ba6d30b?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/372e8ba6d30b</guid>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[psicology]]></category>
            <category><![CDATA[design-thinking]]></category>
            <category><![CDATA[information-technology]]></category>
            <dc:creator><![CDATA[Ana Carolina Toledo]]></dc:creator>
            <pubDate>Thu, 06 Dec 2018 13:50:24 GMT</pubDate>
            <atom:updated>2019-12-30T12:25:06.163Z</atom:updated>
            <content:encoded><![CDATA[<p>Como o design pode ser mais centrado nos negócios e entregar muito mais valor para as pessoas?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u6sHZc6oUiNkK-KEm_4CNg.png" /><figcaption>Entendendo o real problema</figcaption></figure><h3>Design e negócios</h3><blockquote>O design se uniu aos negócios, mas ainda deve ser centrado no que realmente importa, pessoas.</blockquote><p>A área de design tem evoluído gradativamente, o que antes era chamado de arte, agora está mais e mais atrelado aos negócios e a estratégia de um produto ou serviço. Uma tela bonitinha, não resolve os problemas reais de seus usuários é preciso entender a cultura, pensar em como alinhar os objetivos e perspectivas de negócios de um produto a tudo isso, muito antes de desenvolver um projeto e escolher tecnologias.</p><p>Design e negócios são atividades distintas, mas hoje em dia, as tomadas de decisões de design estão intimamente atreladas ao negócio e a cada dia que passa elas ficam mais próximas uma da outra. Para resolver grandes, médios ou pequenos problemas, o designer hoje precisa olhar para vários pontos antes de tomar uma decisão.</p><h3>Problemas, problemas e mais problemas</h3><p>Em qualquer serviço, produto ou ideia, sempre terão dificuldades e problemas a serem resolvidos, mas acredito que a maior dificuldade do trabalho de um designer e sua equipe hoje, é descobrir<strong><em> o verdadeiro problema</em></strong>. Aquele que iniciou todo o caos e falta de leads. Um trabalho árduo que pode facilmente passar despercebido e trazer muita perda de tempo e de dinheiro se resolvermos somente <strong><em>um sintoma.</em></strong></p><h3>Design thinking</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/850/1*iMu26Wfz607akAqtzRKl4g.png" /><figcaption>Processo de design thinking</figcaption></figure><p>O design thinking pode ajudar a entender e a encontrar o verdadeiro problema e pergunta a ser feita. Suas ferramentas, podem nos ajudar a ver além e a enxergar mais longe, também nos força a deixar o fone de ouvido na mesa do computador e a envolver mais as pessoas a trabalharem juntas. O compartilhamento de idéias com pessoas de várias áreas é a melhor forma de um trabalho centrado nas pessoas e para pessoas.</p><p>Essa metodologia nos ajuda a pensar de um novo jeito, no porquê antes do como, a entender o que realmente deve ser feito e principalmente para quem. Entender o quem, sua cultura, suas ideias, sua rotina, tudo isso influencia e traz uma gama de informações muito rica e mais correta aos design thinkers do projeto.</p><p>Com esse compartilhamento de ideias, pontos de vista diferentes, as pessoas podem &quot;sair de suas bolhas&quot; e visualizar o problema de forma mais ampla que de uma única visão.</p><h3>Empatizar</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AYajGuz6o-uo87d4E2zXdw.png" /></figure><p>A empatia é uma das fases mais importantes do processo, pois aqui além de entender as dores das pessoas envolvidas em um problema, é necessário se &quot;tornar parte&quot; daquela dor, pois assim fica mais fácil visualizar as possíveis hipóteses e ideias de soluções para aqueles problemas.</p><h3>Definir</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Xn1sKOUynCqo8E_TGXFklQ.png" /></figure><p>Depois de mapeado as dores, agora é hora de usar essas informações e fazer a pergunta problema que deve ser resolvida, é importante citarmos que, essa pergunta deve ser feita em cima do real problema, para que o trabalho seja feito a partir desse real problema e não de um sintoma do problema.</p><h3>Idear</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e_W2QUxfw_wSazvI_3MSmQ.png" /></figure><p>Nesta fase é hora de fazer um brainstorm com o time e usar as informações das últimas etapas para gerar hipóteses e soluções para a pergunta problema.</p><h3>Prototipar</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HJREjiVHuzhJTgJxmv-pSw.png" /></figure><p>Depois de ter encontrado possíveis soluções para a pergunta problema juntamente com o time, é necessário colocar isso de uma forma mais visual para que todos os stakeholders ( pessoas envolvidas no projeto ) entendam as ideias funcionando de acordo. Nesta fase também já é possível uma conversa mais técnica com os desenvolvedores para validar a ideia de possíveis features.</p><h3>Testar</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qEwrgI95PIZ-NRg43NtZCA.png" /></figure><p>O estágio final é o teste do protótipo. É disponibilizar a ideia/protótipo para quem realmente irá usar o produto e através disso reunir informações centradas ao usuário, assim, o time consegue avaliar se aquela ideia foi realmente uma boa ou uma má ideia para aquele produto. A fase de testes é muito importante, pois é aqui que o time realmente consegue &quot;validar&quot; se tudo o que foi feito faz sentido para o usuário final.</p><h4>Conclusão</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gKIXgZoz639yDl94KMF2aQ.png" /></figure><blockquote>O processo de design thinking é realmente uma abordagem humana e compartilhada, muito eficaz para a resolução de grandes problemas, porém, tudo <strong><em>depende do momento</em></strong> do produto/time/serviço. É algo que deve ser feito levando em conta a real e <strong><em>atual necessidade do projeto</em></strong>.</blockquote><p>Com todas essas ferramentas e perguntas na mesa, o trabalho de design, deveria começar muito antes de se projetar ou desenvolver qualquer tela, o entendimento da cultura, rotina e necessidades de quem vai usar o produto ou serviço é o bem mais importante do projeto. A união desse entendimento, juntamente com a união de decisões tomadas com os objetivos de negocio e os frameworks de design thinking tendem a produzir um produto muito mais centrado, útil e adequado as pessoas.</p><h3><strong>Referências:</strong></h3><p>Tim Brown | TED 2009 — <a href="http://goo.gl/R9WvnL">http://goo.gl/R9WvnL</a></p><p>Design, The New Business — <a href="https://vimeo.com/33531612">https://vimeo.com/33531612</a></p><p>Peter Drucker - <em>“The important and difficult job is never to find the right answers, it is to find the right question ”</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=372e8ba6d30b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/entender-para-projetar-372e8ba6d30b">Entender para projetar</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Gestão de pessoas com gamification]]></title>
            <link>https://medium.com/agile-content-teamwork/gest%C3%A3o-de-pessoas-com-gamification-ef56fb7ec070?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/ef56fb7ec070</guid>
            <category><![CDATA[people]]></category>
            <category><![CDATA[gamification]]></category>
            <category><![CDATA[liderança]]></category>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[gestão]]></category>
            <dc:creator><![CDATA[Bruno Silva]]></dc:creator>
            <pubDate>Mon, 03 Dec 2018 13:26:27 GMT</pubDate>
            <atom:updated>2018-12-03T16:04:03.708Z</atom:updated>
            <content:encoded><![CDATA[<h3>Gestão de pessoas com gamification 1/2</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MkAadCDWu1W4wwavRXm0_w.png" /><figcaption>trainingindustry.com</figcaption></figure><p>Já se deram conta em como jogos conseguem nos engajar por horas? Em como eles podem nos influenciar e nos tornar pessoas melhores?</p><p>Quando falamos de gamification, estamos visando elevar o engajamento das pessoas dentro de um jogo, envolvendo a todos, estabelecendo prêmios, disputas, conquistas, desafios e elevando a motivação.</p><p>Considerando que o inconsciente humano possui uma predisposição em se empenhar mais em jogos, a busca por competição é algo natural e a maioria das pessoas se sente extremamente realizada de poder se afirmar como a melhor ou mais poderosa em alguma coisa. E o melhor é que nos games essa competitividade rende prêmios, reconhecimento e itens valiosos que você sabe que estarão disponíveis e que vão facilitar sua caminhada durante o jogo.</p><p>Quando falamos de gamification e gestão, estamos falando de explorar uma dinâmica que ao deixar algo mais divertido, mais engajador e mais envolvente, aumenta as chances dos envolvidos fazerem algo que normalmente eles não fariam ou que apresentariam maiores resistências para fazer.</p><p>Gamification é capaz de despertar reações e manifestações naturais em colaboradores. Características tais como: socialização, aprendizado, competição, colaboração, autorrealização, altruísmo, entre outras que para muitos se resumem em valores próprios ou até mesmos da empresa em que atuam.</p><p>Abordando um pouco melhor o conceito de gamification, onde uma das definições que eu mais aprecio é da Priscilla Albuquerque, ela define gamification como:</p><blockquote><strong><em>“</em></strong> <strong>Mecânica dos jogos aplicada a ambientes que não são games, para tornar experiências “chatas” em interessante.<em>”</em></strong></blockquote><p>Note que quando falamos em jogos, disputas ou competição, a palavra engajamento sempre é bem latente, mas por que jogos engajam? Segundo à especialista Jane McGonigal:</p><blockquote><strong>Jogos nos fazem felizes pois são como um trabalho duro que escolhemos fazer e poucas coisas nos fazem mais felizes do que um bom trabalho duro.</strong></blockquote><p>Gamification atua diretamente na motivação das pessoas e para tanto é importante ressaltar algumas teorias da psicologia sobre o assunto que são sustentadas em três principais pilares:</p><p><strong>Autonomia</strong><br>As pessoas no geral ficam motivadas quando estão no controle. Quando sentem que são os donos do jogo elas tendem a manter seus objetivos por mais tempo.</p><p><strong>Propósito </strong><br>Acreditar que uma determinada causa é importante.</p><p><strong>Maestria </strong><br>Quanto melhor você fica em determinada coisa mais provável que você continue a fazê-la. Ao mesmo tempo, quando você sabe que algo é mais difícil de alcançar há uma tendência de tentar por mais tempo.</p><p>Diga-se de passagem, a grande maioria dos jogos tradicionais, de tabuleiro ou cartas, ou mesmo videogames, possuem traços que reproduzem as relações humanas, o cotidiano, nossos problemas, uniões e conflitos. O jogo é percebido pelas pessoas, ainda que inconscientemente, como um resumo da própria natureza humana. Por essa razão, gamification ganhou e ganha espaço em empresas, escolas, grupos, comunidades e até mesmo entre governos. Ignorar esse poder quando nossa função é, sobretudo, gerenciar pessoas, seria um enorme equívoco.</p><p>E o que promove?</p><ul><li><strong>Feedback rápido</strong><br>O feedback é instantâneo em jogos, muitas vezes durante sua própria realização. O jogador, nesse caso o colaborador, tem uma boa ideia de como está se saindo durante todo o tempo, ao contrário de métodos de gestão tradicionais e relatórios gerenciais em que apenas vemos o resultado ao final do processo.</li><li><strong>Transparência</strong><br> Qualquer um pode protestar caso sinta que outros jogadores romperam o acordo inicial, ou pode lançar mão das regras para se proteger, ou até obter vantagem — tudo de modo direto e claro.</li><li><strong>Metas</strong><br>Como dissemos, todo jogo possui metas claras.<br>Situações imprevisíveis, que não permitem que a pessoa saiba o que pode acontecer, fazem com que os pensamentos se voltem a ela o tempo todo. Isso a impulsiona a finalizar tarefas para descobrir como tudo acaba.</li><li><strong>Níveis</strong><br>Acalma os ânimos, provendo motivação e criando uma sensação de realização antes mesmo do final do processo.</li><li><strong>Participação</strong><br>Ninguém é colocado de lado e, em tese e segundo as regras, todos podem atingir as metas e evoluir.</li><li><strong>Competição</strong><br>Os jogos exaltam a competição e a concorrência, porém de modo controlado e saudável. Sujeitos às mesmas regras e chances, os participantes podem concorrer entre si sob os olhos de um juiz ou alguém que zele pelas condições igualitárias de cada um, prevenindo discussões e desentendimentos que são comuns em situações onde haja competitividade.</li><li><strong>Colaboração</strong><br>Gamification também promove a colaboração. Gerando um alto nível de empatia, onde pares e grupos de alta produtividade são criados, fortalecendo o laço de confiança e ampliando o relacionamento entre equipes.</li><li><strong>Motivação</strong> <br>As pessoas se sentem motivadas e realizadas quando percebem que estão progredindo, melhorando, crescendo, alcançando níveis mais altos a cada etapa concluída. Ou seja, passando de fase.</li></ul><p>Aqui temos dois exemplos de empresas que aplicam gamification buscando o crescimento da usabilidade de seus produtos.</p><p>Linkedin — Sales SSI</p><p>Quem aguenta olhar essa barrinha sem preencher melhor as informações de cadastro, atualizar uma foto, melhorar a descrição, simplesmente para aumentar o nível ou status?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/965/1*2jCxSx0ySZIs5OqsjU-RKQ.png" /><figcaption><a href="https://www.linkedin.com/sales/ssi">https://www.linkedin.com/sales/ssi</a></figcaption></figure><p>Waze</p><p>Para quem dirige, quem nunca, mesmo dirigindo reportou algum alerta no waze para aumentar a pontuação ou liberar algum personagem?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/660/1*yJTc6J-uZLKB2farLupfGw.png" /><figcaption><a href="https://www.waze.com/">https://www.waze.com/</a></figcaption></figure><p>Esses são apenas dois exemplos de como gamification pode influenciar e engajar pessoas. Porém vale ressaltar que como qualquer outro método, metodologia ou processo, gamification não é uma bala de prata.</p><p>É algo complexo, envolve marketing, psicologia, diversas áreas <br>é uma boa tática a curto prazo. O insucesso pode ser fatal, com fórmulas prontas e jogos batidos, às vezes até mesmo infantis, além de disputas que geram mais estresse do que sensação de recompensa, gestores perdem seus funcionários e transformam o que deveria ser uma experiência inteligente e empolgante em algo não apenas maçante, mas também em outra tarefa aborrecida e sem foco.</p><p>O verdadeiro engajamento apenas ocorre quando um colaborador se sente emocionalmente ligado à empresa, a um projeto ou uma meta. Jogos excessivamente racionais e sem contexto podem gerar respostas negativas ou até mesmo disputas ferrenhas e acirradas entre funcionários, às vezes separando equipes e criando desavenças, ao invés de unir e aprimorar, como é esperado.</p><p>Recentemente aplicamos uma dinâmica dentro do nosso projeto com intuito de gerar regras e artefatos para criação de uma boa estrategia de gamification. Mostrarei em um próximo artigo como foi realizada e como você também pode aplicar em sua empresa, projeto ou equipe.</p><p>Abaixo, um pouco do que resultou:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bs-4aPXlTzlSXqkgpddvGQ.png" /><figcaption>trello.com</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/854/1*_iHWPiIR_HmaVcOR1MWNkA.png" /><figcaption>rascunho</figcaption></figure><p>Nos vemos na próxima fase, até mais ;) #AgileContent</p><p>.</p><p>.</p><p>.</p><p><strong>Referencias</strong><br> — Amy Jo Kim: With a background in neuroscience, computer science, and psychology, Amy Jo Kim is part game designer, part web community architect.<br> — Jane McGonigal, PhD is a world-renowned designer of alternate reality games</p><p><a href="https://www.linkedin.com/in/priscillaalbuquerque/">https://www.linkedin.com/in/priscillaalbuquerque/</a><br> — Fabio Paes, entusiasta e desenvolvedor de jogos<br> — <a href="https://br.udacity.com/">https://br.udacity.com</a><br><a href="https://blog.solides.com.br/"> — https://blog.solides.com.br/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ef56fb7ec070" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/gest%C3%A3o-de-pessoas-com-gamification-ef56fb7ec070">Gestão de pessoas com gamification</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Inovar em Desenvolvimento Ágil]]></title>
            <link>https://medium.com/agile-content-teamwork/inovar-em-desenvolvimento-%C3%A1gil-ce8c1b9b734d?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/ce8c1b9b734d</guid>
            <category><![CDATA[ideias]]></category>
            <category><![CDATA[innovation]]></category>
            <category><![CDATA[ideas]]></category>
            <category><![CDATA[agile-development]]></category>
            <category><![CDATA[inovação]]></category>
            <dc:creator><![CDATA[Pedro Scattaregi]]></dc:creator>
            <pubDate>Thu, 09 Aug 2018 18:49:36 GMT</pubDate>
            <atom:updated>2018-08-09T18:49:35.927Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/570/1*D-6FQxA-kgbthLmhqj7wzg.jpeg" /></figure><p>A globalização e a automação de processos estão a todo vapor, e em meio a tantas novidades e velocidade de desenvolvimento deixamos escapar uma das melhores características da humanidade durante a história: a capacidade de inovar. Inovar é uma necessidade nos dias de hoje, a competitividade exige isso das empresas, é como um investimento para não ficar para trás, seja melhorando a qualidade do produto, o tempo de desenvolvimento ou um processo interno, se tem algum benefício para a empresa, ajudará a vencer a concorrência.</p><blockquote>“Os concorrentes estão bem preparados e os clientes são cada vez mais exigentes. Dentro desse contexto, a inovação aparece como uma ferramenta de competitividade” (DESCHAMPS; NAYAK, 1996)</blockquote><h3>Mas então surge a dúvida: como inovar?</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Fy3QOvy7xxMwKI%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Freaction-confused-will-smith-y3QOvy7xxMwKI&amp;image=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Fy3QOvy7xxMwKI%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="347" frameborder="0" scrolling="no"><a href="https://medium.com/media/0713fcb0baccef85f7d9d8fb1e4895ab/href">https://medium.com/media/0713fcb0baccef85f7d9d8fb1e4895ab/href</a></iframe><p>Inovar não necessariamente é criar algo novo, aproveitar soluções já existentes para sanar problemas a sua volta também é uma forma de inovar. Não precisamos construir algo novo toda vez que encontramos alguma dificuldade, se podemos utilizar alguma ferramenta que já está em uso ou já é conhecida para resolver um problema, por que não? Talvez esse seja o conceito no qual devemos nos basear para inovar dentro do desenvolvimento ágil, aplicar uma tecnologia ainda não conhecida pela sua empresa, mas que já é utilizada no mercado, é uma forma de inovação.</p><p>Na atmosfera de trabalho com Tecnologia da Informação (TI), nos deparamos com inúmeras soluções novas a cada dia que podem mudar completamente a forma de pensar sobre o que estamos trabalhando, produtos e serviços para que pessoas possam realizar algo de um jeito melhor, ou para fazer coisas que até então não eram possíveis. O que pode ser difícil é acompanhar toda essa evolução e novidades do mercado, conseguir trazer para o seu dia-a-dia algo novo para resolver seus problemas ou melhorar os processos de desenvolvimento, principalmente com a correria rotineira.</p><p>Estou na área de TI há pouco mais de dois anos, trabalho hoje dentro de uma metodologia de desenvolvimento ágil, o que faz parecer ainda mais dificil administrar o tempo para inovar, e encontro grande dificuldade em me manter atualizado e estar por dentro de novas tecnologias e soluções. Quem nunca saiu de uma reunião pensando “como esse cara sugeriu essa tecnologia nova? De onde ele tirou isso?!”</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FCPskAi4C6WLHa%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fbaby-confused-idk-CPskAi4C6WLHa&amp;image=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FCPskAi4C6WLHa%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="198" frameborder="0" scrolling="no"><a href="https://medium.com/media/545784ffd4e3181ed18b66d9031aee34/href">https://medium.com/media/545784ffd4e3181ed18b66d9031aee34/href</a></iframe><h3>É preciso estudar…</h3><p>Sabe aqueles 5 ou 10 minutos que temos para dar uma relaxada, limpar a mente do trabalho? Quase sempre recorremos as redes sociais apenas para enriquecimento de relações interpessoais e entretenimento como facebook, instagram, twitter, entre outros… mas e se recorrermos a fontes informativas que agreguem no conhecimento pessoal e profissional de maneira natural e divertida?! Precisamos de fontes de informação que nos deixem entretidos, que consigam manter a nossa atenção e interesse!</p><p>E isso não significa que você não possa utilizar redes sociais, muito menos que sou contra o uso das mesmas, mas sim favorecer o aproveitamento do seu tempo, ao invés de passar 10 minutos em redes sociais porque não dedicar esses 10 minutos para algum enriquecimento profissional ou pessoal?!</p><h4>Vamos a alguns exemplos de como manter-se por dentro dos assuntos em alta:</h4><p><strong>Sites, comunidades, blogs, canais…</strong></p><p>Para aquele período de descontração, por que não investir seu tempo em meios gratuitos que podem agregar e muito na sua vida profissional? O Medium é um grande exemplo de plataforma onde digital influencers estão disponibilizando textos com conhecimentos e opiniões o tempo todo. O site pode te mandar diariamente as recomendações de acordo com os temas que você seleciona como áreas de seu interesse.</p><p><strong>Meetups, eventos, conferências, congressos…</strong></p><p>Às vezes é bom ter contato direto com alguém para escutar ou discutir sobre algo novo. Como exemplo de conferência, podemos levantar a The Developers Conference, o famoso TDC, um evento que reúne desenvolvedores e grandes comunidades de TI do brasil. O evento traz novidades do mercado e diversos workshops apresentados por profissionais que são referência no assunto. Outro exemplo de evento é a Campus Party, onde jovens (geralmente) encontram um festival de Inovação, criatividade, ciências, empreendedorismo e universo digital, estabelecendo um contato direto com tecnologia e seus usos.</p><p><strong>Workshops, seminários…</strong></p><p>Geralmente reuniões com caráter de treinamento, workshop ou seminário podem ser muito bem aproveitados para disseminar o conhecimento dentro do time, temos a oportunidade de aprender algo que está em uso com alguém próximo, o que abre o espaço para debate, um melhor entendimento sem tira-lo do conforto, afinal, estará entre colegas de trabalho!</p><p>Sites, comunidades, meetups, seminários, congressos, canais, blogs, eventos de Tecnologia, Network… Todos são meios de estar por dentro da comunidade de TI, basta você encontrar os meios com os quais você mais se identifica e investir um pouco de tempo. Muitos destes meios são gratuitos, então aproveite!</p><h3>“Já sei! É só…”</h3><p><strong>É hora de estudar para que os impactos nos processos sejam mínimos! Repense a solução… é essa mesmo? Que tal colocarmos em teste?</strong></p><p>É preciso avaliar os riscos cuidadosamente, ver se na estrutura atual da sua equipe/sistema/projeto é possível implementar a inovação. Toda inovação tem suas limitações, principalmente se dependem de decisões feitas por pessoas, quanto mais influência de decisão humana, maiores serão os riscos e as limitações da sua solução. Esteja preparado, grandes problemas podem ser encontrados com a implementação da inovação, pois é impossível prever todas as consequências de uma inovação!</p><h3>Inove!</h3><blockquote>There’s a way to do it better — find it. (EDSON;THOMAS, 1957)</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F3oz8xPjPPvOwrGjip2%2Ftwitter%2Fiframe&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Flandonmoss-landon-moss-3oz8xPjPPvOwrGjip2&amp;image=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2F3oz8xPjPPvOwrGjip2%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="244" frameborder="0" scrolling="no"><a href="https://medium.com/media/c9cbb94fa032e9a8a12ee930c7937909/href">https://medium.com/media/c9cbb94fa032e9a8a12ee930c7937909/href</a></iframe><p>Mantenha-se atualizado para as novidades do mercado e suas tendências. Assim, quando surgir um problema, a chance de você já ter a solução em sua base de conhecimento é maior. Encontrou um problema complexo para se resolver com as ferramentas que você utiliza hoje? Pesquise novas maneiras, como outras empresas e pessoas têm resolvido problemas parecidos ou até iguais. Não deixe o mercado te deixar para trás, alguns minutos por dia podem ser suficientes para estar sempre atualizado. O que está esperando para arregaçar as mangas e começar a inovar? Não espere o futuro chegar, crie ele!</p><p>Referências:</p><p><a href="https://medium.com/ch%C3%A1-com-design/divagando-sobre-originalidade-e-inova%C3%A7%C3%A3o-2f05757b3e7b">https://medium.com/ch%C3%A1-com-design/divagando-sobre-originalidade-e-inova%C3%A7%C3%A3o-2f05757b3e7b</a></p><p><a href="https://uxdesign.cc/meetup-a-usability-case-study-e909c33f1e3e">https://uxdesign.cc/meetup-a-usability-case-study-e909c33f1e3e</a></p><p><a href="https://quoteinvestigator.com/2013/07/16/do-it-better/">https://quoteinvestigator.com/2013/07/16/do-it-better/</a></p><p><a href="https://blog.mastertech.tech/tecnologia/novas-tecnologias-como-estar-sempre-atualizado-na-area/">https://blog.mastertech.tech/tecnologia/novas-tecnologias-como-estar-sempre-atualizado-na-area/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ce8c1b9b734d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/inovar-em-desenvolvimento-%C3%A1gil-ce8c1b9b734d">Inovar em Desenvolvimento Ágil</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[NoSQL Relacional com MongoDB]]></title>
            <link>https://medium.com/agile-content-teamwork/nosql-relacional-com-mongodb-5e680f4fa82?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/5e680f4fa82</guid>
            <category><![CDATA[banco-de-dados]]></category>
            <category><![CDATA[mongodb]]></category>
            <category><![CDATA[nosql]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Thiago Cerqueira]]></dc:creator>
            <pubDate>Tue, 10 Jul 2018 12:01:02 GMT</pubDate>
            <atom:updated>2018-07-12T16:35:22.207Z</atom:updated>
            <content:encoded><![CDATA[<p>Eu tive uma conversa com uma colega, DBA de SQL Server. Ela tinha me dito que não sabia quase nada sobre “NoSQL” mas acreditava que “é o futuro!”. Aqui vou dizer que, se você conhece bancos de dados relacionais, você já conhece o básico de MongoDB, um dos bancos de dados NoSQL mais usados por aí. Talvez você já esteja pronto pro futuro!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Kqx-zSbH_Aw_bMQRvLd_Vw.jpeg" /></figure><h3>O misterioso mundo do NoSQL</h3><p>Então, o que é NoSQL?</p><p><em>Eu sei! Eu sei! É um monte de JSON!</em></p><p>Bem… não. Que dizer, não muito. A diferença é mais na forma em que você acessa os dados do que como eles são armazenados.</p><p>Tem um monte de db’s NoSQL por aí com diferentes estruturas que são usadas para problemas específicos. Como <a href="https://en.wikipedia.org/wiki/Graph_database">grafos</a> para redes de conexões, pessoas, cidades; ou arrays associativos (ou KV, <a href="https://en.wikipedia.org/wiki/Key-value_database">key-value</a>) usados para cache. E existem dbs orientados a documentos que usam sintaxes como XML ou JSON para manipular os dados, <a href="https://www.mongodb.com/">MongoDB</a> é um deles.</p><p>O que todos eles têm em comum é que eles tendem a evitar a “Linguagem de Consulta Estruturada” para retornar dados. <strong>N</strong>ot <strong>o</strong>nly <strong>SQL</strong>, como dizem por aí.</p><p><em>Mas é muito diferente de SQL?</em></p><p>Às vezes. A preferência por outras sintaxes se dá porque elas funcionam melhor para algumas estruturas de dados ou casos de uso.* Se você tem uma estrutura KV, por exemplo, você só precisa da chave pra procurar o valor.</p><p>Não é o caso do MongoDB.</p><p>* Existem algumas diferenças em como distribuir os dados, partição de rede e outras coisas como o <a href="https://en.wikipedia.org/wiki/CAP_theorem">Teorema CAP</a>. Mas não quero falar sobre isso hoje.</p><h3>Mesmos conceitos, estrutura diferente</h3><p>Imagine que nós temos uma aplicação de vídeo sob demanda (VOD para os íntimos) só de filmes de super-heróis. Hoje você vai lá e cria um banco de dados relacional com uma tabela Filmes para o nosso catálogo, algo como esta aqui:</p><pre>+--+-----------------+-------+---------------+-----------+<br>|id|title            |year   |publish_date   |studio_fk  |<br>+--+-----------------+-------+---------------+-----------+<br>|1 |&quot;Justice League&quot; |2017   |2018-02-10     |1          |<br>|2 |&quot;Deadpool&quot;       |2016   |2017-10-19     |3          |<br>|3 |&quot;Wonder Woman&quot;   |2017   |2017-09-19     |1          |<br>|4 |&quot;Captain America&quot;|2016   |2017-09-19     |2          |<br>+--+-----------------+-------+---------------+-----------+</pre><p>Junto com uma tabela de Estúdios. Índices, foreign keys, normalização e essas coisas. Sabe como é. Não vamos pensar sobre isso agora.</p><p>Eu já falei que MongoDB usa uma sintaxe parecida com JSON para guardar dados, não tabelas. Então como, por exemplo, seria o registro “Deadpool”?</p><pre>{<br>    &quot;_id&quot;: 2,<br>    &quot;title&quot;: &quot;Deadpool&quot;,<br>    &quot;year&quot;: 2016,<br>    &quot;publish_date&quot;: Date(&quot;2017-10-19&quot;),<br>    &quot;studio&quot;: {<br>        &quot;name&quot;: &quot;21th Century Fox&quot;,<br>        &quot;logo&quot;: &quot;url_to_fox_logo.png&quot;<br>    }<br>}</pre><p><em>Nossa! Nem é tão diferente assim!</em></p><p>Dá pra ver o padrão, né!? Tem algumas coisas estranhas, mas a maioria dos nomes das colunas foram traduzidos para campos do JSON e os valores atribuídos respectivamente.</p><p>Outra coisa em comum nesse caso é que o _id age como uma chave primária: tem que existir e seu valor tem que ser único. Se você não passar um quando inserir um registro, o banco de dados gera um pra você.</p><p><em>Então existe uma chave primária. Quer dizer que tem índice também?</em></p><p>Sim, tem sim. Os indices são definidos para cada coleção de documentos chamados…bem… collections! E collections se comportam de maneira parecida com tabelas. A única diferença real é que vocẽ não precisa especificar o esquema dos dados. Se o índice não consegue encontrar a chave, ele trata isso como null ou impede você de inserir o documento, dependendo de como você criou o índice. <a href="https://stackoverflow.com/a/20687291/5150453">Bem parecido com o SQL Server.</a></p><p><em>Legal! E aquele studio que tem no final?</em></p><p>Ah é! Quase esqueci! Se você precisar <a href="https://en.wikipedia.org/wiki/Denormalization">desnormalizar</a> seus dados, por questão de performance (ou mesmo sanidade), você pode incluir outro documento dentro dele mesmo, e até realizar consultas nele.</p><h3>Por falar em query</h3><p>Como você pede os dados nesse banco? Vou começar com a sintaxe SQL de novo.</p><p>Se você precisa listar os filmes do estúdio “Warner”, em ordem reversa de publicação, você escreveria algo assim:</p><pre>SELECT title, publish_date<br>FROM dbo.Movies AS movie<br>JOIN dbo.Studios AS studio ON movie.studio_fk = studios.id<br>WHERE studio.name=&#39;Warner&#39;<br>ORDER BY publish_date DESC</pre><p>Vamos traduzir para a linguagem que o MongoDB entende, que por acaso é JavaScript.</p><pre>var filter = {&quot;studio.name&quot;: &quot;Warner&quot;};<br>var projection = {&quot;title&quot;: 1, &quot;publish_date&quot;: 1, &quot;_id&quot;: 0};<br>var order = {&quot;publish_date&quot;: -1};</pre><pre>db.movies.find(filter, projection).sortBy(order);</pre><p>Perceba a semelhança! O db.movies ali no final significa que estamos na collection movies no banco atual, igual a cláusula FROM. O filter funciona como o WHERE, com uma ajudinha da desnormalização aqui. A cláusula SELECT é convertida em um objeto JSON chamado projection. E o ORDER BY vai dentro do método sortBy, com -1 indicando ordem decrescente.</p><p>A grande diferença nesse exemplo é que você precisa explicitamente dizer que o campo _id não deve ser retornado escrevendo &quot;_id&quot;: 0 no projection, já que o padrão é que ele sempre é retornado.</p><h3>Igual mas diferente</h3><p>Os dois sistemas de banco de dados são bem parecidos, mas qual a diferença no MongoDB afinal? Além da estrutura de dados e a linguagem de consulta, tem algumas coisas que os desenvolvedores do MongoDB decidiram deixar de lado. A maioria porque, na visão deles, essas características poderiam tornar difícil trabalhar com dados distribuídos do jeito que eles queriam.</p><p>A maior delas é a ausência de Transações.</p><p>É por isso que muitos desenvolvedores e dba’s usam documentos aninhados quando projetam um banco de dados MongoDB. Claro, quando você aninha documento, existe um limite no tamanho documento, e algumas vezes pode causar alguns updates estúpidamente complexos e lentos. Eu recomendo usar isso com cuidado. Existe um ótimo tutorial de <a href="https://docs.mongodb.com/manual/core/write-operations-atomicity/">como criar operações transacionais</a> em documentos MongoDB, então você pode “normalizar” seus dados através de collections e tratar alguns updates complexos em mais de um documento.</p><h3>Resumindo</h3><p>Vamos ver o que aprendemos:</p><ul><li>Os documentos JSON em MongoDB são basicamente entradas SQL com {}</li><li>Collections são tipo tabelas</li><li>_id é uma chave primária obrigatória</li><li>Quando consultamos o MongoDB nós usamos todos os elementos de uma consulta SQL, mas escrito em JavaScript.</li><li>Não tem Transações</li></ul><p>Esse é o básico. Espero que você se sinta mais confortável para pesquisar sobre bancos de dados NoSQL após ver que não é tão diferente assim. Talvez isso ajude a melhorar suas habilidades e a forma de pensar no SQL. Quem sabe?</p><p>Usei o MongoDB como exemplo por causa dessas semelhanças. Se você quiser saber sobre mais bancos de dados, com outros paradigmas, recomendo o livro <a href="https://www.amazon.com.br/Seven-Databases-Weeks-Modern-Movement/dp/1934356921">Seven Databases in Seven Weeks</a>.</p><p>É isso aí. Que a Força esteja com vocês.</p><p><em>Originalmente publicado em </em><a href="https://thiagoabreu.github.io/blog/relational_nosql_with_mongodb.html"><em>thiagoabreu.github.io</em></a><em> (in english)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5e680f4fa82" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/nosql-relacional-com-mongodb-5e680f4fa82">NoSQL Relacional com MongoDB</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Metrics Shape Behaviors]]></title>
            <link>https://medium.com/agile-content-teamwork/metrics-shape-behaviors-35d193dc3ca?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/35d193dc3ca</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-maintenance]]></category>
            <category><![CDATA[maintainability-index]]></category>
            <category><![CDATA[quality-metrics]]></category>
            <dc:creator><![CDATA[Danilo Ruziska]]></dc:creator>
            <pubDate>Tue, 03 Jul 2018 15:02:47 GMT</pubDate>
            <atom:updated>2018-07-03T15:02:46.524Z</atom:updated>
            <content:encoded><![CDATA[<p>The first time I heard about this article’s title was in an Extreme Programming course for software developers, in Sao Paulo, about 1 year ago. One of the personalized gifts was a sticker containing this phrase, and the course instructors repeated it at least 5 times.</p><p>I confess: at the time, I hadn’t given due importance to that. I was more interested to learn unit test practices, continuous integration, etc.</p><p>Now, 1 year later, something curious just happened.</p><p>I developed a module for my current project, a payment integrator library, which communicates with one of the payment gateways available. As a new project, I was so excited to apply the best practices, create lots of unit test to cover 100% of the code, and so on.</p><p>Soon after I finished the project, I ran a tool available in Visual Studio (the software we use to develop), which analyzes the code, and outputs some quality metrics. One in special caught my attention:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/923/0*tJqeDChGqjnuSafj" /><figcaption>Index Maintainability provided by Visual Studio</figcaption></figure><p>Maintainability Index. My first thought was: “Nice, 84 seems a good value, at least It’s green.” After some time, I was wondering what this value really meant, and what are the thresholds which limit a good and a bad code in terms of maintainability. I was obsessed to increase this number, changing my code to optimize it as much as I could. Almost one entire work day for this, lots of new commits created, for every class in the project.</p><p>Microsoft says: “Maintainability Index calculates an index value between 0 and 100 that represents the relative ease of maintaining the code. A <strong>high value means better maintainability</strong>. Color-coded ratings can be used to quickly identify trouble spots in your code. A <strong>green rating is between 20 and 100</strong> and indicates that the code has good maintainability. A <strong>yellow rating is between 10 and 19</strong> and indicates that the code is moderately maintainable. A <strong>red rating is a rating between 0 and 9</strong> and indicates low maintainability.”[1]</p><p>I thought these thresholds very distant from each other, especially between green and yellow. So I started to research more about it.</p><p>Then I discovered the Maintainability Index was first introduced in 1992, in a software conference. Long story short, it’s about a mathematical formula which describes how maintainable a piece of code is.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/458/0*dL4RFTcn_-Z3GacT" /><figcaption>Maintainability Index Formula</figcaption></figure><p>I won’t dig into the details of it, but it relies on four variables:</p><ul><li>Halstead Volume: essentially the number of operators you use</li><li>Cyclomatic complexity: measures how many paths (decisions) your code has, including if and loop clauses.</li><li>Lines of code: how big your module is (in terms of number of code lines)</li><li>Percentage of code commentaries (yes, that’s true). This variable, in particular, was added later by SEI (Software Engineering Institute)[2]</li></ul><p><strong>Observation</strong>: Microsoft also changed this formula a little bit to fit into a 0–100 scale.</p><p>I started to feel a little confused because there was no consensus about the values of the thresholds. The original paper mentions 65 and 85 values.[3]. I understand Microsoft fits into a different scale, but the distance between their good and medium values is very big.</p><p>Then I found the following article: “Think Twice Before Using the ‘Maintainability Index’”[4]. That really caught my attention. Essentially the author argues and questions about the efficiency of this metric. Furthermore, he mentions a study [5] from the University of Oslo. They hired four different companies to develop a software with the same requirements. Then they required them to do some maintenance tasks on it and measured the time and results with some software quality criteria. The following table summarises it:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/641/0*EqNy1JkdlF1EkSHm" /></figure><p>One of their conclusions was: there’s no direct relation between the Maintainability Index and the efficiency of the maintenance tasks. But there’s a direct relation between lines of code and the efficiency of the tasks.</p><h3><strong>My conclusions</strong></h3><p>At first, I was incredulous: all the best practices applied to my code, including SOLID principles, unit testing, use of inheritance and polymorphism over decision clauses (if, while, for). Don’t I have to consider all of this, because, essentially it’s a waste of time and effort? Then I started to think more about it, and I concluded some points:</p><ul><li>Metrics really shape behaviors. My willingness to reach the highest Index possible was obfuscating what’s really important: to keep the code maintainable, but simple. Of course, it doesn’t mean I have to code monolithic classes and forget about some best practices, but apply them as I need, when I need, keeping them in a developer toolbox.</li><li>The Maintainability Index (among other metrics) is important, but it’s more a guideline than a value you must pursue to be the highest possible at all costs. In my opinion, it’s more beneficial to run it once, check the results, and sometime later, after a lot of modifications in your code, run it again. The important thing here is to compare with your own code, regardless of the value first obtained. This value itself is not so important. But I tend to agree that when there’s red flag, it is always worth aiming for a code refactoring.</li><li>The study from the University of Oslo clarifies a lot of points, but some of them are questionable: the Maintainability Index of the four projects is very close to each other. What if we compare the results with good and bad written code, more distant in terms of quality? Also, for me, four projects are not enough to verify some of the results. For a comparison closer to the market reality, it could also consider older projects, written and rewritten by dozens of different people. That really makes the difference when you’re about to do any maintenance task.</li></ul><p>References (accessed on 06/28/2018):</p><p>[1] — Code Metric Values — <a href="https://msdn.microsoft.com/en-us/library/bb385914.aspx">https://msdn.microsoft.com/en-us/library/bb385914.aspx</a></p><p>[2] — C4 Software Technology Reference Guide — <a href="https://resources.sei.cmu.edu/asset_files/Handbook/1997_002_001_16523.pdf">https://resources.sei.cmu.edu/asset_files/Handbook/1997_002_001_16523.pdf</a></p><p>[3] — Using Metrics to Evaluate Software System — <a href="http://www.ecs.csun.edu/~rlingard/comp589/ColemanPaper.pdf">http://www.ecs.csun.edu/~rlingard/comp589/ColemanPaper.pdf</a></p><p>[4] — Think Twice Before Using the “Maintainability Index” — <a href="https://avandeursen.com/2014/08/29/think-twice-before-using-the-maintainability-index/">https://avandeursen.com/2014/08/29/think-twice-before-using-the-maintainability-index/</a></p><p>[5] — Questioning Software Maintenance Metrics: A Comparative Case Study — <a href="https://www.mn.uio.no/ifi/personer/vit/dagsj/sjoberg.anda.mockus.esem.2012.pdf">https://www.mn.uio.no/ifi/personer/vit/dagsj/sjoberg.anda.mockus.esem.2012.pdf</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=35d193dc3ca" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/metrics-shape-behaviors-35d193dc3ca">Metrics Shape Behaviors</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Se é agil é Scrum?]]></title>
            <link>https://medium.com/agile-content-teamwork/se-%C3%A9-agil-%C3%A9-scrum-ebeac84c03a8?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/ebeac84c03a8</guid>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[metodologia]]></category>
            <category><![CDATA[projetos]]></category>
            <category><![CDATA[negocios]]></category>
            <category><![CDATA[scrum]]></category>
            <dc:creator><![CDATA[Bruno Silva]]></dc:creator>
            <pubDate>Mon, 11 Jun 2018 15:43:07 GMT</pubDate>
            <atom:updated>2018-07-02T22:52:04.821Z</atom:updated>
            <content:encoded><![CDATA[<p>Opa, deve ser fácil então!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lhtXlB98wQs-dgRJfSpnDA.jpeg" /><figcaption>agilesmile.com</figcaption></figure><p>Sim! O Scrum é uma metodologia ágil voltada ao desenvolvimento de software, mas somente utilizar o framework não torna uma organização ágil.</p><p>Assim como em outros métodos, a proposta do Scrum é fornecer subsídios para o gerenciamento de atividades muitas vezes complexas, porém de uma forma flexível e que facilite a adaptação do projeto diante das adversidades.</p><p>A maioria das empresas desenvolvem produtos ágeis se apoiando no Scrum, de forma a forçar o uso da metodologia, acreditando fielmente ser o ideal para o negócio independente dos problemas que surgem.</p><p>Já parou para pensar se o Scrum realmente é o melhor para o seu negócio ou organização?</p><p>Agilidade vai além de modinha, trata-se da evolução de um produto e da evolução de pessoas. Ser ágil é ter resiliência correndo nas veias e não usar um framework só porque o concorrente usa.</p><p>Ser ágil não significa APENAS ser mais rápido!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/244/0*cTQRRpA809DM7iM3." /></figure><p>Hoje somos extremamente eficientes em entregar software rápido, mas com qualidade questionável e com baixa manutenibilidade.</p><p>Em um projeto realizado utilizando o Scrum, a execução acontece em iterações. Baseado em um modelo tradicional, a planning é realizada, os prazos são determinados e o ciclo continua.</p><p>Supondo que um desenvolvedor agilize uma funcionalidade, de forma rápida, não testável e funcional… ele foi produtivo, certo!? Porém pensando em qualidade e valor, foi um período de desenvolvimento desperdiçado.</p><p>Ser ágil, mais do que ser rápido, é diminuir riscos, maximizar qualidade do que está sendo feito e sempre realizar avaliações sobre o que está sendo entregue.</p><p>Para o autor Jeff Sutherland, em um de seus livros mais vendidos: Ser ágil é literalmente: <em>“A arte de fazer o dobro na metade do tempo”</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/599/0*ERzUcUQH-XE1nxG_." /></figure><p>Recomendo leitura.</p><p>Mas são tantos detalhes, problemas e insatisfações. Não ter a certeza se o framework que utilizo está funcionando, fica difícil. Então como mudar?</p><p>Não será da noite para o dia XD !</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/275/0*CGMGxQfXaE53XSV3." /></figure><p>Lembre-se, sempre uma coisa por vez, como a aplicação de uma nova metodologia ágil em um projeto pequeno, treinamentos para os colaboradores, questionar se o Scrum é realmente a opção certa para empresa.</p><p>Talvez haja a necessidade de usar outra forma de desenvolvimento, como XP, Lean, Kanban, etc. Cabe a nós entusiastas do manifesto ágil, buscar, inovar e evoluir. Só assim conseguiremos alcançar iterações curtas, times multidisciplinares, times autogerenciáveis, foco em entrega de valor para o cliente, escopo flexível, visibilidade e previsibilidade, além do constante envolvimento do cliente com a empresa.</p><p>Bora ser <strong>ágile</strong>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ebeac84c03a8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/se-%C3%A9-agil-%C3%A9-scrum-ebeac84c03a8">Se é agil é Scrum?</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Teoria do Beija-Flor e os espaços acessíveis]]></title>
            <link>https://medium.com/agile-content-teamwork/teoria-do-beija-flor-e-os-espa%C3%A7os-acess%C3%ADveis-a0fec46cd52e?source=rss----c55670929e43---4</link>
            <guid isPermaLink="false">https://medium.com/p/a0fec46cd52e</guid>
            <category><![CDATA[ux-design]]></category>
            <category><![CDATA[mulheres-que-escrevem]]></category>
            <category><![CDATA[informação]]></category>
            <category><![CDATA[acessibilidade]]></category>
            <category><![CDATA[tecnologia]]></category>
            <dc:creator><![CDATA[Malu Dini]]></dc:creator>
            <pubDate>Fri, 08 Jun 2018 21:13:38 GMT</pubDate>
            <atom:updated>2018-06-08T21:13:38.377Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zHGhF89dvk2UikwM5ZRvtQ.jpeg" /><figcaption>#paracegover: uma ilustração colorida com o fundo azul claro. No lado esquerdo, tem uma cadeira de rodas preta, com um rosto sorrindo no encosto dela e um balão de fala escrito &quot;Woohoo!&quot;. Ela possui dois braços que estão movimentando as rodas, de um lado para o outro. No lado direito, uma cadeira de madeira não possui braços e permanece estática. Seu rosto expressa descontentamento.</figcaption></figure><p>É engraçada a história de como surgiu a Teoria do Beija-Flor. Eu sempre achei o beija-flor um tipo de passarinho muito bonito e diferente. As curiosidades sobre ele são bem impressionantes e um dia desses minha atenção voltou-se pra ele. Tive a dúvida de como poderia chamá-lo em uma cidade urbana como São Paulo, que possui pouquíssimas árvores e flores. Mais especificamente para a janela do meu quarto — aliás, deve ser uma delícia acordar com passarinhos em casa, não? Depois de algumas pesquisas descobri que, para chamar o beija-flor, bastava implementar um bebedouro colorido com água limpa e açúcar. Com o tempo ele descobriria esse novo recurso e viria até mim. E era isso. Simples assim.</p><p>Você deve estar se perguntando o que essa teoria tem a ver com a construção do espaço seguro e acessível, certo? Te explico: acontece que algumas pessoas são uma espécie de beija-flor. E falo especificamente dos grupos de minorias.</p><p><strong>Uma observação:</strong> Utilizo como termo minoria, o grupo de pessoas que tem menos direitos e/ou se encontram fora do padrão determinado pela sociedade. Portanto, não o digo no sentido quantitativo, embora sejam impressionantes as medidas desproporcionais, por exemplo, com relação à quantidade de pessoas com deficiência no mercado de trabalho comparada à quantidade total de pessoas com deficiências no Brasil. (Segundo o Censo Demográfico do IBGE, 24% dos brasileiros possuem algum tipo de deficiência e apenas 0,77% das pessoas com deficiências estão formalmente inseridas no mercado de trabalho. <a href="http://economia.estadao.com.br/blogs/ecoando/cotas-ajudam-mas-falta-inclusao-o-que-pessoas-com-deficiencia-enfrentam-no-mercado-de-trabalho/">Fonte: Estadão</a>.)</p><h4>Acessibilidade (ou a falta dela) VERSUS Tecnologia de Informação</h4><p>Diariamente as pessoas com deficiência sofrem com a falta de acessibilidade em lugares privados e públicos. As barreiras de comunicação afetam a comunidade surda e as pessoas com deficiência auditiva pela falta de legendas em vídeos e ausência de intérpretes de língua de sinais (Libras). Calçadas esburacadas, elevadores quebrados, entradas pequenas, banheiros não-adaptados afetam tanto cadeirantes quanto pessoas com mobilidade reduzida. A falta de pisos táteis e referências sonoras afetam as pessoas cegas. Enfim, a lista é longa.</p><p>Partindo por essa lógica, por que a área de Tecnologia de Informação seria diferente, então?</p><p>Resposta: ela não é diferente. Não restam dúvidas de que a tecnologia veio para facilitar a vida de todos mas, para as pessoas com deficiência, ela conseguiu transformar algumas coisas inacessíveis em possíveis. A exemplo disso, temos o boom do WhatsApp e redes sociais que tornaram o acesso possível para as pessoas surdas se comunicarem por escrito, sem precisar fazer qualquer ligação ou gastar uma fortuna, como fazíamos há um tempo com SMS — ou não fazíamos. O mesmo serve para as pessoas cegas, com a chegada dos leitores de tela cada vez melhores e capazes de reconhecer diversas línguas do mundo.</p><p>O Youtube e o Facebook possuem agora um recurso para criar legendas e closed caption. Quantos de nós estamos preocupados e habituados em sempre transcrever um vídeo de 3 minutos, por exemplo? Quando postamos uma linda imagem com um texto, estamos lembrando de que os leitores de tela ainda não são capazes de transcrever uma imagem para uma pessoa cega? Estamos habituados a não nos apoiar somente nas cores como indicativos, mas adicionar também, alguma legenda ou ícones simples e com contrastes, para as pessoas com autismo e/ou daltônicas?</p><p>O que diferencia nós que trabalhamos na área de Tecnologia de Informação dos profissionais de outras áreas, é que temos bastantes recursos, tanto tecnológicos quanto sociais pelo privilégio e acesso às informações e notícias mas mesmo assim ainda não estamos maduros o suficiente para utilizar a tecnologia a favor de todos e todas. A tecnologia avança e evolui</p><p>cada vez mais rápido à medida que a nossa consciência humana está cada vez mais longe e atrasada. E o mais contraditório disso tudo, é que a tecnologia só existe graças à consciência humana.</p><h4>Começando pelo começo</h4><p>Agora, fazendo ponte com a Teoria do Beija-Flor: quando a gente trabalha, transita e frequenta ambientes presenciais e virtuais pensados somente para pessoas sem deficiência, nós, pessoas com deficiência, somos os beija-flores dessa sociedade. Isso significa que, se não tiver o bebedouro com água e açúcar, estão nos dizendo que aquele espaço não é nosso — mesmo que ele seja nosso por direito.</p><p>Portanto, é nosso papel social e como profissionais da T.I, implementarmos um bebedouro gigante. Precisamos internalizar uma cultura da acessibilidade, começando pela nossa consciência, mudando nossos hábitos e valores de inclusão e pôr a mão na massa na rotina do trabalho também. E então, como fazer isso?</p><ul><li>Se você tem um colega ou uma colega com alguma deficiência no seu trabalho, <strong>comece a conversar com ele/ela. Troquem experiências.</strong> Isso contribui para a construção de novas ideias e agilidade na solução de problemas.</li><li><strong>Leia artigos, estudos e pesquisas sobre Acessibilidade na Web.</strong></li><li><strong>Questione a falta de acessibilidade nos eventos de T.I.</strong> Com o mercado em expansão, há uma grande probabilidade de vermos mais pessoas com deficiência atuando na área. Logo, é direito de todo mundo ter acesso à informação por igual.</li><li><strong>Chame os amigos, divulgue os eventos que contam com acessibilidade. </strong>Se vai criar um evento, faça um check-list de recursos essenciais para tornar um espaço possível e acessível. Lembre-se, a maioria dos espaços não estão preparados para receber o público com deficiência. Você vai precisar divulgar, por exemplo, que o evento contará com intérprete de libras. Ou que tem entrada para cadeirantes. Ou que haverá audiodescrição. Deixe tudo isso bem claro ou as pessoas com deficiência não se sentirão convidadas.</li><li><strong>Permita-se errar, sempre.</strong> Mas também permita-se entender que errou e diminuir a margem de erros a todo momento. Ninguém nasce sabendo e tudo bem. Estamos aqui para aprender com todo mundo.</li></ul><p>É importante lembrarmos que a diversidade existe e não tem como escaparmos dela. No campo de tecnologia e produtos, a diversidade contribui para novas ideias, trabalho em equipe, criatividade e agilidade na solução de problemas. A experiência de cada pessoa que trabalha na empresa, é um passo muito importante para a criação de produtos inovadores. Portanto, usufrua desse privilégio e faça parte desse mundo tão diverso.</p><p>E os beija-flores virão.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a0fec46cd52e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agile-content-teamwork/teoria-do-beija-flor-e-os-espa%C3%A7os-acess%C3%ADveis-a0fec46cd52e">Teoria do Beija-Flor e os espaços acessíveis</a> was originally published in <a href="https://medium.com/agile-content-teamwork">Agile Content Teamwork</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>