Não pode ler agora? Ouça esse conteúdo durante suas atividades:
É muito comum ouvirmos falar sobre metodologia ágil em TI nos dias de hoje. Realmente é bem raro encontrar alguém envolvido com desenvolvimento de software que nunca tenha ao menos ouvido falar em termos como XP, Scrum, Histórias de Usuário, Pair programmig e etc.
O conceito de agilidade surgiu por volta dos anos 2000 com a criação do Manifesto Ágil, que possui entre seus doze princípios os objetivos de satisfazer o cliente através da entrega contínua e adiantada de valor agregado ao cliente, além de aceitar mudanças de requisitos, mesmo no fim do desenvolvimento.
Este artigo visa comparar de maneira geral o papel dos requisitos no Modelo Cascata, utilizado antigamente, com os Modelos Ágeis tão amplamente difundido nos dias atuais. Vamos lá?
Quando iniciei os meus estudos sobre Testes de Performance, logo conheci o JMeter. Essa ferramenta, desenvolvida pela Apache, traz um conjunto de soluções para avaliar fatores como desempenho, disponibilidade e escalabilidade das aplicações. Era o que precisávamos em um dos projetos da DB1.
Para que este artigo não fique tão extenso, decidi agrupar as principais características do JMeter de acordo com a experiência que tive com a ferramenta.
Neste post, vamos demonstrar um exemplo de utilização de métodos simples de inteligência artificial para aplicações práticas utilizando R direto da ferramenta Power BI.
Para seguir com o tutorial é necessário que seja instalado o Power BI e do R for Windows.
Uma dificuldade comum para os desenvolvedores é fazer estimativas assertivas. Imagine a vantagem de ter de forma automática para obter macro estimativas de desenvolvimento com base no histórico? Isso pode facilitar o gerenciamento de projetos em geral, pois daria uma ideia do tamanho da demanda antes dos desenvolvedores desempenharem tempo nas estimativas. Bom, vamos tentar algo semelhante utilizando regressão linear.
Hoje em dia técnicas de machine learning são utilizadas para resolver problemas em praticamente todo domínio imaginável. Um uso muito popular é no reconhecimento e classificação de imagens, onde técnicas de deep learning podem apresentar ótimos resultados.
Para entender conceitos como redes neurais, deep learning e classificação de imagens, preparei um exemplo onde ensinaremos um algoritmo a separar fotos de gatos de acordo com suas raças.
Relembrando a teoria discutida no artigo anterior (O que é Machine Learning?), nosso algoritmo será de classificação (classificar uma entrada entre determinadas categorias), com aprendizagem supervisionada (treinamento com entradas que possuem um label associado, ou seja, dizemos ao computador o que significa aquela entrada).
Mas antes de implementar o algoritmo, primeiro vamos entender algumas definições:
Rede Neural Artifical
Uma rede neural artifical (ANN) é uma estrutura que simula o funcionamento de um conjunto de neurônios. A ANN mais simples é aquela composta de apenas um neurônio, chamada perceptron. Um perceptron possui:
diversas entradas com seus respectivos pesos
um valor limite, utilizado para decidir se o perceptron “dispara”, ou seja, se sua saída será igual a 1
Ao juntar muitos perceptrons, formamos uma rede, uma rede neural artificial.
Para treinar um perceptron, comparamos o resultado obtido com o resultado esperado, e mudamos os pesos das entradas com o objetivo de minimizar o erro obtido.
Por exemplo: imagine que vamos treinar uma rede neural para classificar se um e-mail é ou não spam. As entradas podem ser:
O tamanho do e-mail
O horário em que foi enviado
Se conheço ou não quem o enviou
Se já recebi outros e-mails do mesmo remetente
As palavras no assunto e no corpo do e-mail
E a saída é 0 (não spam) ou 1 (spam). Conforme a rede é treinada (usa a diferença entre o resultado obtido e o resultado esperado para alterar os pesos que agem sobre as entradas, afim de minimizar o erro), ela aprende as características e a relevância de cada característica para indicar se um e-mail é ou não spam.
Ou seja, treinamos a estrutura para gerar o resultado correto por meio do ajuste dos pesos que agem sobre as entradas. Este ajuste é feito ao comparar o resultado obtido com o resultado esperado, e calcular a diferença. O ajuste tem o objetivo de diminuir esta diferença. Quanto menor a diferença, mais o algoritmo aprendeu a classificar corretamente.
Rede Neural Convolucional
Rede Neural Convolucional (Convolutional Neural Network – CNN) é uma classe de rede neural utilizada para processamento e análise de imagens. Foi proposta em 1998 em um paper do cientista Yann LeCun, que propôs uma arquitetura capaz de reconhecer dígitos manuscritos com precisão de 99,2%. Esta arquitetura foi inspirada em uma pesquisa de 1968 feita por David Hunter Hubel e Torsten Wiesel sobre o funcionamento do córtex visual dos mamíferos.
A pesquisa sugere que mamíferos percebem visualmente o mundo de forma hierárquica, através de camadas de clusters de neurônios. Quando vemos algo, clusters são ativados hierarquicamente, e cada um detecta um conjunto de atributos sobre o que foi visto.
A arquitetura da CNN simula clusters de neurônios para detectar atributos daquilo que foi visto, organizados hierarquicamente e de forma abstrata o suficiente para generalizar independentemente de tamanho, posição rotação, etc.
Deep Learning
Acima explicamos o conceito de rede neural. Deep Learning é o uso de uma rede neural com muitas camadas. Usando a mesma lógica, mas com mais níveis, podemos utilizá-la para modelar conceitos mais complexos.
Convolucional
Já entendemos o que é uma rede neural, e que rede neural convolucional é uma classe de redes neurais. Mas qual o significado de convolução? Para nós neste exemplo, convolução pode ser visto como sinônimo de combinação. É o procedimento de combinar duas fontes de informação.
Imagem
O input da CNN é uma imagem, representada como uma matriz. Cada elemento da matriz contém o valor de seu respectivo pixel, que pode variar de 0 a 255. Para imagens coloridas em RGB temos uma matriz “em três dimensões”, onde cada dimensão é uma das camadas de cor (red, green e blue). Assim, uma imagem colorida de 255px por 255px é representada por três matrizes de 255 por 255 (255x255x3).
Atributo
Um atributo é um padrão que a CNN aprende. Normalmente este padrão se repete nas imagens, tornando-o proeminente. O contorno dos objetos (linhas, formas, abstrações) é um exemplo de atributo.
Aplicando a convolução
Um pouco acima explicamos que convolução é a combinação de duas fontes de informação. E que estamos tentando aprender e identificar padrões nas imagens. Neste exemplo, queremos aprender os padrões que diferenciam duas raças diferentes de gatos, quais características diferenciam uma raça da outra. E como treinar nosso algoritmo para identificar estas características.
Pois bem, para isto utilizamos um kernel/filtro que será aplicado à partes da imagem original, com o objetivo de identificar padrões.
Pense nela como uma matriz menor composta de valores. Ela é aplicada à imagem (convolução), para obter regiões de ativação, ou seja, regiões onde atributos específicos deste filtro foram encontrados.
Por exemplo, podemos imaginar um filtro de 16 x 16 percorrendo uma imagem de 256 x 256 x 3. A cada etapa pegamos uma porção de 16 x 16 da imagem e fazemos a convolução (ou seja, calculamos o produto escalar entre as duas matrizes). O valor obtido é adicionado à matriz de ativação. Este processo é repetido até todas as três matrizes terem sido percorridas completamente.
Os valores do filtro mudam a cada iteração de treinamento, com o objetivo de melhorar a identificação de quais regiões contém atributos significativos (da mesma forma que os pesos em um perceptron de uma rede neural são atualizados no treinamento).
Mas como essa série de multiplicações nos ajuda a detectar os atributos de uma imagem? Conforme o filtro aprende a detectar um atributo (através do processo de aprendizado), seus valores se ajustam de forma que o resultado da convolução seja um valor que indique que o determinado atributo foi encontrado. É o mesmo mecanismo utilizado na detecção de spam/não spam explicada anteriormente, só que agora sendo aplicado a uma imagem.
No exemplo abaixo, estamos tentando identificar o ratinho na imagem. O filtro irá trabalhar na detecção daquela curva destacada em amarelo. A representação em pixels do contorno do ratinho contém valores da cor onde ocorre o contorno, e zero (branco) onde não ocorre.
Quando fazemos o produto escalar entre o filtro e o contorno que procuramos, o resultado é um número bem grande.
Este resultado sempre é menor em outras partes da imagem, pois o produto escalar é menor.
Ou seja, quando o resultado da convolução é um número grande, o atributo foi detectado. Já quando é um resultado 0 ou muito pequeno, o atributo não foi encontrado.
Treinando nossa CNN
Neste exemplo não iremos escrever uma CNN do zero, mas sim treinar uma pronta utilizando um processo chamado Transfer Learning. Com Transfer Learning, usamos uma CNN já treinada, e adicionamos uma camada a mais, treinando apenas esta camada para nosso objetivo.
No nosso caso, usaremos a CNN Inception-V3 do Google, que foi treinada em cima da base de dados ImageNet, e a ensinaremos a classificar a raça de gatos.
Crie uma pasta em algum lugar do seu computador, abra uma linha de comando nela e siga os passos abaixo.
Passo 1
Baixar e instalar o Docker. Uma vez instalado, podemos executar o seguinte comando para conferir se está tudo ok:
docker run hello-world
Passo 2
Baixar a imagem do TensorFlow:
docker pull tensorflow/tensorflow
Passo 3
Iniciar o container baseado na imagem do TensorFlow, mapeando um diretório entre a máquina física e o container:
--volume <host>:<container>: monta um volume, linkando uma pasta no host com uma no container
--workdir <dir>: diretório no container onde vamos executar os comandos
--publish <host>:<container>: mapeamento entre porta do host e a porta no container
Passo 4
Colocar neste diretório os arquivos necessários para treinar a CNN (veja as observações abaixo para pegar os arquivos):
Uma pasta chamada cats, contendo uma pasta para cada categoria que queremos treinar. No nosso caso teremos uma pasta para cada raça de gato. O nome da pasta será o nome da categoria, o nome da raça do gato. Dentro das pastas, teremos as imagens dos gatos.
Script retrain.py que contém os comandos para treinar a CNN.
Script label_image.py que usaremos para consultar a CNN treinada, ou seja, passaremos a imagem de um gato e perguntaremos qual sua raça.
Obs 1: Você deve montar ou utilizar um conjunto de dados com as imagens das raças desejadas. Eu utilizei um subconjunto do desafio Dogs vs. Cats do Kaggle.
Para este exemplo, separei mais ou menos 200 imagens de cada raça. Vamos trabalhar com a Birman e a British Shorthair:
Obs 2: Para baixar os scripts, execute os seguintes comandos:
Este script irá baixar o inception model e depois iniciará o treinamento com base nas imagens e categorias que informamos. Irá iterar 500 vezes para treinar o modelo, e salvará o resultado no arquivo retrained_graph.pb.
O tempo de execução varia de acordo com a quantidade de imagens para treinar e a velocidade do computador. Em um teste que fiz com 12 raças, cada uma contendo em torno de 200 imagens, o treinamento demorou mais ou menos 30 minutos em um i5 com 8 GB de RAM.
Treinamento finalizado:
Passo 6
Consultar o modelo gerado. Podemos pesquisar no Google a imagem de um gato qualquer (dentre as duas raças que escolhemos), e colocar na pasta tf_files. Para perguntar ao modelo treinado qual a raça deste gato, basta executar:
python label_image.py gato.jpg
Onde gato.jpg é o nome da imagem que você pesquisou e baixou.
Fiz um teste com o gato da imagem abaixo, e o resultado foi 99,29% British Shorthair, ou seja, o resultado correto!
Próximos passos
Podemos pegar o modelo que treinamos e criar uma aplicação para disponibilizar uma API que recebe a imagem de um gato e retorna sua raça fazendo consulta a este modelo. Ou podemos também criar uma aplicativo para celular, onde tiramos a foto de um gato e consultamos o modelo para saber a sua raça.
Estes são alguns exemplos de como utilizar isto no mundo real, e lembre-se que podemos utilizar este modelo também para outros tipos de imagens e classificações.
Fontes e créditos
Este tutorial não seria possível sem o estudo das seguintes referências:
Dirigir, investir, detectar fraudes, classificar doenças e criar medicamentos. Há pouco tempo essas atividades eram feitas somente por seres humanos. Hoje, com o desenvolvimento de técnicas de aprendizado de máquina (machine learning), podemos ensinar sistemas a executá-las com precisão igual – ou superior – a nossa.
Machine learning usa algoritmos para entender o modelo (a lógica, o padrão) que dá origem a um conjunto de dados para conseguir prever ou classificar novos valores.
A programação tradicional baseia-se em definir cada etapa que o programa deve executar para obter um resultado. Com machine learning, a ideia é fazer com que ele aprenda os passos necessários para isto.
A grande vantagem ocorre quando trabalhamos com problemas complexos, onde o algoritmo não é bem definido. Como identificar pessoas em uma foto. É muito difícil escrever um programa que faça isto bem feito, pois a variedade de cenários possíveis é muito grande. Existe uma infinidade de poses, locais, ângulos, iluminação e cores em uma foto. Preparar um algoritmo para trabalhar com todos estes cenários é muito trabalhoso. Com machine learning podemos ensinar o computador a fazer esta tarefa sem programar o passo a passo, apenas ensinando com base em exemplos.
Podemos separar os algoritmos de machine learning conforme seu tipo de aprendizagem, ou seja, a forma como aprendem.
Você conhece o Docker Swarm e o Traefik? São muito úteis para quem trabalha no ambiente de produção ou homologação, e sabe o quanto é sofrido lidar com a perda de uma máquina: horas de trabalho pelo ralo, e mais várias outras para conseguir atualizar todos os serviços, arrumar os IPs, e por aí vai. Containers como o Docker estão aí para evitar esse tipo de situação.
Docker? O que é isso?
Antes de falarmos de Docker Swarm, é importante que você saiba o que é o Docker por si só.
O Docker possibilita ambientes isolados e de fácil portabilidade: você configura um ambiente dentro de um container e pode transferir para qualquer outra máquina, ou ambiente, onde o Docker esteja instalado. É um grande aliado para quem busca resiliência: um ambiente sempre voltando ao estado normal, superando falhas de serviço ou de máquina. Se você precisa entender mais a fundo como funciona um container, aqui no blog da DB1 já trouxemos uma explicação completa sobre o conceito de Container, DockerFile e Docker Compose.
Agora, vamos para o Docker Swarm!
A partir do momento em que você possui o Docker instalado nas máquinas, o Docker Swarm te ajudará a gerenciar e orquestrar todas elas em modo de Cluster.
A Arquitetura de Micro Serviços traz uma distribuição em prol da performance e qualidade de software. A independência e autonomia da criação, execução e distribuição dessa arquitetura são algumas vantagens de aplicar esse componente. Por onde começar para aplicar Micro…
Você já ouviu falar de Cornucopia? Quando se trata de segurança da informação, todos precisam se unir para encontrar possíveis falhas de segurança e prevenir ataques. É por isso que Emerson Castilho e Wagner Voltz apresentaram um Lightning Talk, palestra de 15…
A engenharia de requisitos define os requisitos não funcionais, ou requisitos de qualidade, como sendo os requisitos que especificam critérios que podem ser usados para descrever o funcionamento de um sistema, e não os comportamentos específicos, pois para isso é utilizado os requisitos funcionais. Os não funcionais estão ligados ao limite de uso e as propriedades da aplicação e são muito importantes no projeto de desenvolvimento de um software, pois caso sejam negligenciados, podem trazer prejuízo para o seu projeto.
O usuário não sabe o que é, por isso é difícil elicitá-lo
Nossos Usuários costumam pensar apenas nas funcionalidades que o sistema deverá ter e como deverá ajudar em seu negócio, esquecendo de pensar sobre questões como a quantidade de dados que o sistema deverá trafegar, qual a quantidade de acessos simultâneos e até menos em quais sistemas operacionais o sistema deverá funcionar. E muitas vezes o usuário realmente não sabe como levantar essas informações ou que essas informações são vitais para o projeto. E uma das tarefas dos analistas é ajudar os clientes a levantar esses dados ao iniciar um projeto.
Você já ouviu falar em codificação segura? Sabe onde encontrar material sobre isto? E sabe onde encontrar cases sobre segurança em software ?
Pois bem, talvez você tenha aberto uma nova aba no navegador e começado a pesquisar. Garanto que você encontrou poucas referências em português, mesmo a nossa nação sendo um país com muitos incidentes referente a segurança.
Os gráficos abaixo são do CERT.br (Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil) e demonstram uma série de incidentes ocorridos na internet brasileira.
Mas será que este tema deve ser observado somente por equipes de infraestrutura e redes? Quão importante é um desenvolvedor de aplicações web conhecer possíveis tipos de ataques existentes? E se o desenvolvedor tiver este conhecimento, ele poderia mitigar as vulnerabilidades através da codificação correta e segura de software?
Pensando em facilitar este conhecimento, a OWASP (Open Web Application Security Project) desenvolveu um agile game denominado Cornucopia. O objetivo do jogo é gerar uma lista de bugs potenciais numa aplicação web através de gameficação e participação de diversos interessados no produto (desenvolvedores, analistas, tester, dono de produto ou stakeholders). O game não prevê como serão solucionadas as vulnerabilidades identificadas. Isto deve ser feito em outro momento. O benefício gerado é termos exatamente quais itens de segurança que devem ser tratados pelo time em tempo oportuno.
Cornucopia: Como é o jogo?
Este jogo é composto por um baralho com 6 naipes e 2 curingas. Cada naipe representa uma categoria que deve ser validada no software web. Os naipes disponíveis são:
VALIDAÇÃO DE DADOS DE ENTRADA E CODIFICAÇÃO DE DADOS DE SAÍDA
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Cookies necessários
São cookies que por padrão estão habilitados para garantir funcionalidades técnicas essenciais do site.
Cookies relacionados ao login
Usamos cookies quando você está logado para que possamos nos lembrar desse fato. Isso evita que você tenha que fazer login toda vez que visitar uma nova página. Esses cookies são normalmente removidos ou limpos quando você sai para garantir que você só possa acessar recursos e áreas restritas quando estiver conectado.
Cookies relacionados a boletins informativos por e-mail
Este site oferece boletins informativos ou serviços de assinatura de e-mail e cookies podem ser usados para lembrar se você já está registrado e se deseja mostrar certas notificações que podem ser válidas apenas para usuários inscritos / não inscritos.
Cookies relacionados a pesquisas
De vez em quando, oferecemos pesquisas de usuários e questionários para fornecer a você percepções interessantes, ferramentas úteis ou para compreender nossa base de usuários com mais precisão. Essas pesquisas podem usar cookies para lembrar quem já participou de uma pesquisa ou para fornecer resultados precisos depois que você muda de página.
Cookies relacionados a formulários
Quando você envia dados por meio de um formulário, como os encontrados nas páginas de contato ou formulários de comentários, os cookies podem ser configurados para lembrar seus detalhes de usuário para correspondência futura.
Este cookies não poderão ser desativados.
Cookies de terceiros
Em alguns casos especiais, também usamos cookies fornecidos por terceiros confiáveis. A seção a seguir detalha quais cookies de terceiros você pode encontrar neste site.
Este site usa o Google Analytics, que é uma das soluções analíticas mais difundidas e confiáveis na web para nos ajudar a entender como você usa o site e como podemos melhorar sua experiência. Esses cookies podem rastrear coisas como quanto tempo você passa no site e as páginas que você visita para que possamos continuar a produzir conteúdo envolvente.
Para obter mais informações sobre os cookies do Google Analytics, consulte a página oficial do Google Analytics.
Como vendemos produtos, é importante compreendermos as estatísticas sobre quantos visitantes do nosso site realmente fazem uma compra e, como tal, este é o tipo de dados que esses cookies rastrearão. Isso é importante para você, pois significa que podemos fazer previsões de negócios com precisão que nos permitem monitorar nossos custos de publicidade e produtos para garantir o melhor preço possível.
O serviço Google AdSense que usamos para veicular publicidade usa um cookie da DoubleClick para veicular anúncios mais relevantes na web e limitar o número de vezes que um determinado anúncio é mostrado a você.
Para obter mais informações sobre o Google AdSense, consulte as perguntas frequentes oficiais sobre privacidade do Google AdSense.
Usamos cookies de publicidade comportamental neste site, como o Facebook Pixel, que são projetados para garantir que fornecemos a você os anúncios mais relevantes, sempre que possível, rastreando anonimamente seus interesses e apresentando coisas semelhantes que podem ser de seu interesse.
Também usamos botões e / ou plug-ins de mídia social neste site que permitem que você se conecte à sua rede social de várias maneiras. Para que estes funcionem, os seguintes sites de mídia social incluem; Facebook, YouTube, Instagram e LinkedIn, irá definir cookies através do nosso site que podem ser usados para aprimorar o seu perfil no site ou contribuir com os dados que eles possuem para vários fins descritos em sua respectiva privacidade políticas.
Este cookies não poderão ser desativados.
Política de Cookies
Política de Cookies ANYMARKET
O que são Cookies
Como é prática comum em quase todos os sites profissionais, este site usa cookies, que são pequenos arquivos baixados para o seu computador, para melhorar a sua experiência. Esta página descreve quais informações eles coletam, como as usamos e por que às vezes precisamos armazenar esses cookies. Também compartilharemos como você pode evitar que esses cookies sejam armazenados, no entanto, isso pode diminuir ou 'quebrar' certos elementos da funcionalidade do site.
Como usamos Cookies
Usamos cookies por vários motivos detalhados abaixo. Infelizmente, na maioria dos casos, não há opções padrão da indústria para desabilitar cookies sem desabilitar completamente a funcionalidade e os recursos que eles adicionam a este site. É recomendável que você deixe todos os cookies se não tiver certeza se precisa deles ou não, caso sejam usados para fornecer um serviço que você usa.